From 7d82cc7d6b987d1509f5c891787318142f7100ae Mon Sep 17 00:00:00 2001 From: catborise Date: Thu, 5 Nov 2026 15:56:56 +0300 Subject: [PATCH] fix(operations): a job refused by its checks in the worker says why The worker's checks refuse with PermissionDenied or Http404, which carry no text: the job failed with an empty error and its Logs row gave no reason. They now read "You may no longer do this." and "The virtual machine is no longer in the panel." (tr and zh too). --- locale/tr/LC_MESSAGES/django.mo | Bin 192348 -> 192531 bytes locale/tr/LC_MESSAGES/django.po | 214 +++++++++++++------------- locale/zh/LC_MESSAGES/django.mo | Bin 179840 -> 180027 bytes locale/zh/LC_MESSAGES/django.po | 214 +++++++++++++------------- operations/tests/test_public_error.py | 14 ++ operations/utils.py | 9 ++ 6 files changed, 245 insertions(+), 206 deletions(-) create mode 100644 operations/tests/test_public_error.py diff --git a/locale/tr/LC_MESSAGES/django.mo b/locale/tr/LC_MESSAGES/django.mo index 13c2b904d0621db6811632127b39c5e0beaa40e1..339f0a76710564a79fafe36f298578b4a48b53d4 100644 GIT binary patch delta 43081 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 GK6wu=BIu|9 delta 42905 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, 2020\n" "Language-Team: Turkish (https://www.transifex.com/catborise/teams/110663/tr/)\n" @@ -2720,7 +2720,7 @@ msgstr "Klonun adını boş adlar listesinden seçin" msgid "%(quota)s: cannot create '%(clone_name)s'." msgstr "%(quota)s: '%(clone_name)s' oluşturulamıyor." -#: instances/jobs.py:196 instances/jobs.py:543 +#: instances/jobs.py:196 instances/jobs.py:545 #, python-format msgid "Instance '%(clone_name)s' already exists!" msgstr "'%(clone_name)s' sanal makinesi zaten mevcut!" @@ -2818,15 +2818,15 @@ msgstr "Anlık görüntü alınmadı" msgid "Revert snapshot" msgstr "Snapshota dön" -#: instances/jobs.py:460 +#: instances/jobs.py:462 msgid "Reverting the VM" msgstr "Sanal makine geri döndürülüyor" -#: instances/jobs.py:471 +#: instances/jobs.py:473 msgid "libvirt is still reverting the VM" msgstr "libvirt sanal makineyi hâlâ geri döndürüyor" -#: instances/jobs.py:475 +#: instances/jobs.py:477 msgid "" "It cannot be told whether the VM was reverted; check it, then revert again or" " resolve this job." @@ -2834,12 +2834,12 @@ 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." -#: instances/jobs.py:492 +#: instances/jobs.py:494 msgid "The VM must be running, paused or shut off to be cloned" msgstr "" "Klonlanmak için sanal makine çalışıyor, duraklatılmış ya da kapalı olmalı" -#: instances/jobs.py:493 +#: instances/jobs.py:495 #, python-format msgid "" "The guest's file systems could not be thawed (%(error)s); thaw them with: " @@ -2848,19 +2848,19 @@ msgstr "" "Konuğun dosya sistemleri çözülemedi (%(error)s); şununla çözün: virsh " "domfsthaw %(vm)s" -#: instances/jobs.py:512 +#: instances/jobs.py:514 msgid "Clone VM" msgstr "Sanal makineyi klonla" -#: instances/jobs.py:553 instances/jobs.py:560 instances/jobs.py:817 +#: instances/jobs.py:555 instances/jobs.py:562 instances/jobs.py:830 msgid "Copying disks" msgstr "Diskler kopyalanıyor" -#: instances/jobs.py:612 +#: instances/jobs.py:614 msgid "libvirt has no result of the copy" msgstr "libvirt'te kopyanın sonucu yok" -#: instances/jobs.py:623 +#: instances/jobs.py:625 #, python-format msgid "" "The copy failed: %(error)s. The guest's file systems could not be thawed " @@ -2869,11 +2869,11 @@ msgstr "" "Kopyalama başarısız oldu: %(error)s. Konuğun dosya sistemleri çözülemedi " "(%(thaw)s); şununla çözün: virsh domfsthaw %(vm)s" -#: instances/jobs.py:626 instances/jobs.py:710 +#: instances/jobs.py:628 instances/jobs.py:712 msgid "The copy failed" msgstr "Kopyalama başarısız oldu" -#: instances/jobs.py:651 +#: instances/jobs.py:653 #, python-format msgid "" "The VM is no longer on the compute the job ran on; check these volumes, then " @@ -2882,7 +2882,7 @@ msgstr "" "Sanal makine artık işin çalıştığı sunucuda değil; şu birimleri kontrol edin, " "sonra bu işi çözün: %(volumes)s" -#: instances/jobs.py:686 +#: instances/jobs.py:688 #, python-format msgid "" "A volume of the clone was being created; check these volumes, then resolve " @@ -2891,15 +2891,15 @@ msgstr "" "Klonun bir birimi oluşturuluyordu; şu birimleri kontrol edin, sonra bu işi " "çözün: %(volumes)s" -#: instances/jobs.py:690 +#: instances/jobs.py:692 msgid "The job stopped before the copy started" msgstr "İş, kopyalama başlamadan durdu" -#: instances/jobs.py:697 +#: instances/jobs.py:699 msgid "libvirt is still copying the disks" msgstr "libvirt diskleri hâlâ kopyalıyor" -#: instances/jobs.py:700 +#: instances/jobs.py:702 #, python-format msgid "" "Another backup runs on the VM; check these volumes, then resolve this job: " @@ -2908,7 +2908,7 @@ msgstr "" "Sanal makinede başka bir yedekleme çalışıyor; şu birimleri kontrol edin, " "sonra bu işi çözün: %(volumes)s" -#: instances/jobs.py:705 +#: instances/jobs.py:707 #, python-format msgid "" "libvirt has no result of the copy; check these volumes, then resolve this " @@ -2917,140 +2917,140 @@ msgstr "" "libvirt'te kopyanın sonucu yok; şu birimleri kontrol edin, sonra bu işi " "çözün: %(volumes)s" -#: instances/jobs.py:733 instances/templates/create_instance_w1.html:60 +#: instances/jobs.py:735 instances/templates/create_instance_w1.html:60 #: instances/templates/create_instance_w2.html:356 msgid "Create VM" msgstr "Sanal makine oluştur" -#: instances/jobs.py:756 instances/views.py:2482 +#: instances/jobs.py:759 instances/jobs.py:804 instances/views.py:2482 msgid "A virtual machine with this name already exists" msgstr "Bu isimde bir sanal makine mevcut" -#: instances/jobs.py:758 +#: instances/jobs.py:761 instances/jobs.py:801 msgid "There is an instance with same name. Remove it and try again!" msgstr "Aynı isimde başka bir sanal makine var. Onu silip yeniden deneyin!" -#: instances/jobs.py:761 +#: instances/jobs.py:764 msgid "First you need to create or select an image" msgstr "Öncelikle bir imaj oluşturun ya da mevcut bir imajı seçin" -#: instances/jobs.py:763 +#: instances/jobs.py:766 msgid "Choose one disk source: a new disk, existing volumes or a template" msgstr "" "Tek bir disk kaynağı seçin: yeni bir disk, mevcut birimler ya da bir şablon" -#: instances/jobs.py:765 +#: instances/jobs.py:768 msgid "Image has already exist. Please check volumes or change instance name" msgstr "" "İmaj zaten mevcut. Lütfen ya makine adını değişin ya da disk alanlarını " "kontrol edin" -#: instances/jobs.py:767 +#: instances/jobs.py:770 msgid "Invalid cache mode" msgstr "Geçersiz önbellek modu" -#: instances/jobs.py:769 +#: instances/jobs.py:772 #, python-format msgid "This host offers no CPU mode or model %(mode)s" msgstr "Bu sunucu %(mode)s CPU modunu veya modelini sunmuyor" -#: instances/jobs.py:771 +#: instances/jobs.py:774 #, python-format msgid "A CD-ROM cannot use the %(bus)s bus" msgstr "CD-ROM %(bus)s veri yolunu kullanamaz" -#: instances/jobs.py:774 +#: instances/jobs.py:777 msgid "The cloud-init seed is read from a CD-ROM: choose its bus" msgstr "cloud-init tohumu bir CD-ROM'dan okunur: veri yolunu seçin" -#: instances/jobs.py:777 +#: instances/jobs.py:780 msgid "The cloud-init seed needs a directory storage pool for the disk" msgstr "cloud-init tohumu, disk için bir dizin depolama havuzu gerektirir" -#: instances/jobs.py:783 +#: instances/jobs.py:786 #, python-format msgid "This host offers no firmware %(firmware)s" msgstr "Bu sunucu %(firmware)s firmware'ini sunmuyor" -#: instances/jobs.py:785 vrtManager/instance.py:3005 +#: instances/jobs.py:788 vrtManager/instance.py:3010 msgid "This host offers no TPM 2.0: install swtpm on it" msgstr "Bu sunucu TPM 2.0 sunmuyor: üzerine swtpm kurun" -#: instances/jobs.py:836 +#: instances/jobs.py:849 msgid "Writing the cloud-init seed" msgstr "cloud-init tohumu yazılıyor" -#: instances/jobs.py:843 +#: instances/jobs.py:856 msgid "Defining the VM" msgstr "Sanal makine tanımlanıyor" -#: instances/jobs.py:876 +#: instances/jobs.py:889 #, python-format msgid "%(error)s. Remove these volumes by hand: %(volumes)s" msgstr "%(error)s. Şu birimleri elle silin: %(volumes)s" -#: instances/jobs.py:901 +#: instances/jobs.py:914 #, python-format msgid "The instance is already on %(compute)s" msgstr "Sanal makine zaten %(compute)s üzerinde" -#: instances/jobs.py:903 +#: instances/jobs.py:916 #, python-format msgid "%(compute)s is not reachable" msgstr "%(compute)s sunucusuna ulaşılamıyor" -#: instances/jobs.py:905 +#: instances/jobs.py:918 #, python-format msgid "%(compute)s is the VM's own host under another name" msgstr "%(compute)s, sanal makinenin kendi sunucusunun başka bir adı" -#: instances/jobs.py:923 +#: instances/jobs.py:936 msgid "Migrate VM" msgstr "Sanal makineyi taşı" -#: instances/jobs.py:967 +#: instances/jobs.py:980 msgid "Migrating the VM" msgstr "Sanal makine taşınıyor" -#: instances/jobs.py:1004 +#: instances/jobs.py:1027 msgid "libvirt is still migrating the VM" msgstr "libvirt sanal makineyi hâlâ taşıyor" -#: instances/jobs.py:1011 +#: instances/jobs.py:1034 msgid "The VM stayed on the source host" msgstr "Sanal makine kaynak sunucuda kaldı" -#: instances/jobs.py:1013 +#: instances/jobs.py:1036 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." -#: instances/jobs.py:1045 +#: instances/jobs.py:1068 msgid "Move disk" msgstr "Diski taşı" -#: instances/jobs.py:1052 +#: instances/jobs.py:1075 msgid "Choose a disk of the VM" msgstr "Sanal makinenin bir diskini seçin" -#: instances/jobs.py:1076 +#: instances/jobs.py:1099 msgid "Copying the disk" msgstr "Disk kopyalanıyor" -#: instances/jobs.py:1119 +#: instances/jobs.py:1142 #, python-format msgid "Another block job runs on %(dev)s; check the VM" msgstr "" "%(dev)s üzerinde başka bir blok işi çalışıyor; sanal makineyi kontrol edin" -#: instances/jobs.py:1125 +#: instances/jobs.py:1148 #, python-format msgid "The disk stayed in %(path)s; remove %(dest)s if it is there" msgstr "Disk %(path)s içinde kaldı; varsa %(dest)s dosyasını silin" -#: instances/jobs.py:1127 +#: instances/jobs.py:1150 #, python-format msgid "The definitions of %(dev)s name %(paths)s; check the VM" msgstr "%(dev)s tanımları %(paths)s gösteriyor; sanal makineyi kontrol edin" @@ -5802,12 +5802,12 @@ msgstr "En son satırlar, en yenisi önce." msgid "All of this VM's logs" msgstr "Bu sanal makinenin tüm logları" -#: instances/utils.py:66 +#: instances/utils.py:67 #, python-format msgid "The disk files cannot be checked on %(host)s: %(err)s" msgstr "Disk dosyaları %(host)s üzerinde denetlenemiyor: %(err)s" -#: instances/utils.py:79 +#: instances/utils.py:80 msgid "" "The quota cannot be checked because a host of your virtual machines cannot be" " reached. Nothing was changed." @@ -5815,41 +5815,41 @@ msgstr "" "Sanal makinelerinizin bir sunucusuna erişilemediği için kota denetlenemiyor. " "Hiçbir şey değiştirilmedi." -#: instances/utils.py:85 +#: instances/utils.py:86 msgid "The quota of virtual machines is reached" msgstr "Sanal makine kotası doldu" -#: instances/utils.py:86 +#: instances/utils.py:87 msgid "The vCPU quota is reached" msgstr "vCPU kotası doldu" -#: instances/utils.py:87 +#: instances/utils.py:88 msgid "The memory quota is reached" msgstr "Bellek kotası doldu" -#: instances/utils.py:88 +#: instances/utils.py:89 msgid "The disk quota is reached" msgstr "Disk kotası doldu" -#: instances/utils.py:97 +#: instances/utils.py:98 #, python-format msgid "%(quota)s (%(total)s > %(limit)s)" msgstr "%(quota)s (%(total)s > %(limit)s)" -#: instances/utils.py:193 +#: instances/utils.py:194 msgid "None available device name" msgstr "Hiçbiri uygun aygıt adı değil" -#: instances/utils.py:394 +#: instances/utils.py:395 #, python-format msgid "%(hostname)s via %(address)s" msgstr "%(address)s üzerinden %(hostname)s" -#: instances/utils.py:433 +#: instances/utils.py:434 msgid "Invalid MAC address" msgstr "Geçersiz MAC adresi" -#: instances/utils.py:435 +#: instances/utils.py:436 msgid "More MAC addresses than networks" msgstr "Ağlardan daha fazla MAC adresi" @@ -7850,11 +7850,11 @@ msgstr "İptal edilemedi (HTTP %(status)s)." msgid "Cancel failed: the server could not be reached." msgstr "İptal edilemedi: sunucuya ulaşılamadı." -#: operations/utils.py:52 +#: operations/utils.py:54 msgid "The host of this virtual machine cannot be reached right now." msgstr "Bu sanal makinenin sunucusuna şu anda ulaşılamıyor." -#: operations/utils.py:53 +#: operations/utils.py:55 msgid "" "The host of this virtual machine is busy with other requests right now: try " "again in a moment." @@ -7862,12 +7862,20 @@ msgstr "" "Bu sanal makinenin sunucusu şu anda başka isteklerle meşgul: biraz sonra " "yeniden deneyin." -#: operations/utils.py:160 +#: operations/utils.py:57 +msgid "You may no longer do this." +msgstr "Bunu artık yapamazsınız." + +#: operations/utils.py:58 +msgid "The virtual machine is no longer in the panel." +msgstr "Sanal makine artık panelde yok." + +#: operations/utils.py:169 msgid "" "A short operation is in progress on this resource; try again in a moment." msgstr "Bu kaynakta kısa bir işlem sürüyor; birazdan yeniden deneyin." -#: operations/utils.py:163 +#: operations/utils.py:172 #, python-format msgid "" "%(label)s is %(state)s on this resource (started by %(user)s, %(since)s ago);" @@ -7876,7 +7884,7 @@ msgstr "" "%(label)s bu kaynakta %(state)s (%(user)s başlattı, %(since)s önce); İşler " "sayfasına bakın." -#: operations/utils.py:165 +#: operations/utils.py:174 #, python-format msgid "%(label)s is %(state)s on this resource (since %(since)s)." msgstr "%(label)s bu kaynakta %(state)s (%(since)s beri)." @@ -7972,35 +7980,35 @@ msgstr "İmaj adı 120 karakterden fazla olamaz" msgid "Clone volume" msgstr "Birimi klonla" -#: storages/jobs.py:58 +#: storages/jobs.py:59 storages/jobs.py:70 +msgid "Name of volume already in use" +msgstr "Birim adı zaten kullanılıyor" + +#: storages/jobs.py:65 #, python-format msgid "The pool has no volume named %(name)s" msgstr "Havuzda %(name)s adında birim yok" -#: storages/jobs.py:60 +#: storages/jobs.py:67 msgid "An ISO image is not cloned" msgstr "ISO imajı klonlanmaz" -#: storages/jobs.py:63 -msgid "Name of volume already in use" -msgstr "Birim adı zaten kullanılıyor" - -#: storages/jobs.py:72 +#: storages/jobs.py:79 msgid "Copying the volume" msgstr "Birim kopyalanıyor" -#: storages/jobs.py:84 +#: storages/jobs.py:91 msgid "" "The copy exists, but the job did not see it finish; check it, then resolve " "this job." msgstr "" "Kopya var, ancak iş bittiğini görmedi; kontrol edin, sonra bu işi çözün." -#: storages/jobs.py:85 +#: storages/jobs.py:92 msgid "The copy was not made" msgstr "Kopya oluşturulmadı" -#: storages/jobs.py:96 +#: storages/jobs.py:103 msgid "Upload ISO image" msgstr "ISO imajı yükle" @@ -9286,64 +9294,64 @@ msgstr "" msgid "Shut the VM down to revert to an internal snapshot" msgstr "Dahili bir anlık görüntüye geri dönmek için sanal makineyi kapatın" -#: vrtManager/instance.py:2397 +#: vrtManager/instance.py:2402 msgid "Cannot clone a VM whose NVRAM is not a file" msgstr "NVRAM'i dosya olmayan bir sanal makine klonlanamaz" -#: vrtManager/instance.py:2465 +#: vrtManager/instance.py:2470 #, python-format msgid "Clone failed (%(err)s); remove these copies by hand: %(path)s" msgstr "" "Klonlama başarısız oldu (%(err)s); bu kopyaları elle kaldırın: %(path)s" -#: vrtManager/instance.py:2475 +#: vrtManager/instance.py:2480 msgid "Shut the VM down before cloning it" msgstr "Klonlamadan önce sanal makineyi kapatın" -#: vrtManager/instance.py:2529 +#: vrtManager/instance.py:2534 #, python-format msgid "Clone failed (%(err)s); remove these copies by hand: %(leftovers)s" msgstr "" "Klonlama başarısız oldu (%(err)s); bu kopyaları elle kaldırın: %(leftovers)s" -#: vrtManager/instance.py:2540 +#: vrtManager/instance.py:2545 msgid "Live clone needs libvirt 11.10 or later; shut the VM down to clone it" msgstr "" "Canlı klonlama libvirt 11.10 veya sonrasını gerektirir; klonlamak için sanal " "makineyi kapatın" -#: vrtManager/instance.py:2543 +#: vrtManager/instance.py:2548 msgid "A VM with a TPM is cloned only shut down" msgstr "TPM'i olan bir sanal makine yalnızca kapalıyken klonlanır" -#: vrtManager/instance.py:2546 +#: vrtManager/instance.py:2551 #, python-format msgid "Disk %(dev)s is not a local file; shut the VM down to clone it" msgstr "" "Disk %(dev)s yerel bir dosya değil; klonlamak için sanal makineyi kapatın" -#: vrtManager/instance.py:2548 +#: vrtManager/instance.py:2553 #, python-format msgid "Disk %(dev)s is shareable; shut the VM down to clone it" msgstr "Disk %(dev)s paylaşılabilir; klonlamak için sanal makineyi kapatın" -#: vrtManager/instance.py:2553 +#: vrtManager/instance.py:2558 #, python-format msgid "Disk %(dev)s changes at the next start; shut the VM down to clone it" msgstr "" "Disk %(dev)s sonraki başlatmada değişiyor; klonlamak için sanal makineyi " "kapatın" -#: vrtManager/instance.py:2555 +#: vrtManager/instance.py:2560 msgid "Another job is running on the VM; clone it when that ends" msgstr "Sanal makinede başka bir iş çalışıyor; o bittiğinde klonlayın" -#: vrtManager/instance.py:2568 +#: vrtManager/instance.py:2573 #, python-format msgid "Volume %(name)s already exists in storage pool %(pool)s" msgstr "%(name)s birimi %(pool)s depolama havuzunda zaten var" -#: vrtManager/instance.py:2587 +#: vrtManager/instance.py:2592 #, python-format msgid "" "Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f GiB" @@ -9353,20 +9361,20 @@ msgstr "" "gerektiriyor (kopyalanan diskler, artı bunların %%%(percent)g kadarı, en az " "%(minimum)g GiB)" -#: vrtManager/instance.py:2726 +#: vrtManager/instance.py:2731 msgid "A network interface that is a host device is removed in the XML editor" msgstr "Sunucu aygıtı olan bir ağ arabirimi XML düzenleyicide kaldırılır" -#: vrtManager/instance.py:2742 +#: vrtManager/instance.py:2747 #, python-format msgid "No network interface with MAC %(old_mac)s" msgstr "MAC adresi %(old_mac)s olan ağ arabirimi yok" -#: vrtManager/instance.py:2745 +#: vrtManager/instance.py:2750 msgid "A network interface that is a host device is changed in the XML editor" msgstr "Sunucu aygıtı olan bir ağ arabirimi XML düzenleyicide değiştirilir" -#: vrtManager/instance.py:2836 +#: vrtManager/instance.py:2841 msgid "" "A VM changes its PCI devices while it runs, or is shut off without a saved " "state" @@ -9374,14 +9382,14 @@ msgstr "" "Sanal makine PCI aygıtlarını çalışırken veya kaydedilmiş durumu olmadan " "kapalıyken değiştirir" -#: vrtManager/instance.py:2848 +#: vrtManager/instance.py:2853 #, python-format msgid "%(err)s; whether the VM has PCI device %(address)s now is not known" msgstr "" "%(err)s; sanal makinede şu anda %(address)s PCI aygıtının olup olmadığı " "bilinmiyor" -#: vrtManager/instance.py:2850 +#: vrtManager/instance.py:2855 #, python-format msgid "" "%(err)s; PCI device %(address)s: the VM is not running, its next start has it" @@ -9389,7 +9397,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: sanal makine çalışmıyor, sonraki başlatmada " "var" -#: vrtManager/instance.py:2852 +#: vrtManager/instance.py:2857 #, python-format msgid "" "%(err)s; PCI device %(address)s: the VM is not running, its next start does " @@ -9398,7 +9406,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: sanal makine çalışmıyor, sonraki başlatmada " "yok" -#: vrtManager/instance.py:2853 +#: vrtManager/instance.py:2858 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM has it, its next start has it" @@ -9406,7 +9414,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede var, sonraki " "başlatmada var" -#: vrtManager/instance.py:2855 +#: vrtManager/instance.py:2860 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM has it, its next start does " @@ -9415,7 +9423,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede var, sonraki " "başlatmada yok" -#: vrtManager/instance.py:2857 +#: vrtManager/instance.py:2862 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM does not have it, its next " @@ -9424,7 +9432,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede yok, sonraki " "başlatmada var" -#: vrtManager/instance.py:2859 +#: vrtManager/instance.py:2864 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM does not have it, its next " @@ -9433,29 +9441,29 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede yok, sonraki " "başlatmada yok" -#: vrtManager/instance.py:2893 +#: vrtManager/instance.py:2898 #, python-format msgid "The VM has no PCI device %(address)s" msgstr "Sanal makinede %(address)s PCI aygıtı yok" -#: vrtManager/instance.py:2911 +#: vrtManager/instance.py:2916 msgid "The VM has no USB controller" msgstr "Sanal makinede USB denetleyicisi yok" -#: vrtManager/instance.py:2930 +#: vrtManager/instance.py:2935 msgid "The VM has no such USB device" msgstr "Sanal makinede böyle bir USB aygıtı yok" -#: vrtManager/instance.py:2971 +#: vrtManager/instance.py:2976 msgid "The VM has its own RNG device: change it in the XML editor" msgstr "" "Sanal makinenin kendi RNG aygıtı var: bunu XML düzenleyicide değiştirin" -#: vrtManager/instance.py:2998 +#: vrtManager/instance.py:3003 msgid "The VM has its own TPM: change it in the XML editor" msgstr "Sanal makinenin kendi TPM'i var: bunu XML düzenleyicide değiştirin" -#: vrtManager/instance.py:3017 +#: vrtManager/instance.py:3022 #, python-format msgid "Unknown crash action %(action)s" msgstr "Bilinmeyen çökme eylemi %(action)s" diff --git a/locale/zh/LC_MESSAGES/django.mo b/locale/zh/LC_MESSAGES/django.mo index 48c08d03f03bd7c12a256a5266abc7decae112dc..96d0c71b29f33ea9dd4c78d9c943060e4a8f4698 100644 GIT binary patch delta 43063 zcmZ791$b4*pT_Z%;KAKVa0_n18rXp!Rkeee9( z<=L~(;WIO5T+Y1-<-bEd1?~MDVBz)dc{xl(ygSCnv8awMz+l{mDe(@L!uP0p!Z&zcXPkqT zY2S;w(evtH9aM!Iuoxc0x)^Dbo9f2cocKCadd$tv)~Kb}k8Lpe7SAh*-BDA&1B>9F zSQRsEb@}_EuL%h!2-L*%Ke{RJhcSuoLQT~P)SCT@n#xbu48yj0UM`%2A$S&5?ip%n z-eX)$z1{O-V;)qzBx;6gZ)g5hpce^R>){v!kD%7-0ye^@sF9c5;bv$JRw8}~l^$~^ zjbIndiBm8O9>FmD3)S%qyWA2t$Be`m>|*}Y5jajle0+*p`_CATnRdI8w8I?4C!q=+ zM3wsk)liH*ZfXmlHr;3}h-(=w6p^HYO(i*he5M0dJq1!cf$VRK}#(5K~|; zRKrtIn`)1F6B81DgOM@De$Pvb@ll((0J2(M57dA%9&q)v#cITTlL+J^@GEM!Cpzdx z6pqb^x5pxQ7PY2P578;ifofnJrpJ?*3je|s7~`-TVP;f%aV(F`umi3|PKD1)bj0%p zk6^C@snBb3-0gv7n4S1l%!?6DxOkY^ z7R%`T&-4d8?-x|V=}xkvu`$NOx2TZ@onixG87zkrQ8RM`RW8A4H^RzTi1;jQf|o6x z>x}2kAl?ymY68!apZ2}H1XAN*Y>A7p1V%jPmZU6}A>I`;;!doD_fY3K^e0#0K>R>_ zBdP;y&%34l9kqFrUvT9sVl(1B&=*ADDgm9#d*(}wOgzFxXAs6D9v7ovu%&0Tcy`oo z&W{PO3Tn+;qV~ct)Y2}(VBBlzKVM}2wafprgm{y2YENSt|s2(@M*4P>~ zGiOl^T`(V`$_HF^<>R2<56MvN?r17qK zUT(~bA=nnH;~4Wc)*&8x-Hm)WmLvWn7Q~OJcJklwciiVSAfTT0Kuz6X)KrbbbhsO} ziSA+~{D28D;3g*o6Qh->))(3XVRs0zJX?z12g zYK@bkHeGtu)aAoCSQGVLXoc$7VpPQ|Exr*|-!=@z-KY*dLJjx@hS0wEfj}-yaobI4 z70g1s3s%9osDe*04gQPT&53??9Z!ks=tzu@Q&1gQf$G=>d;TM8&m2U}^ilL_Bo_&& z1NTu=75|QFAU$fWLs7f9DQc=Gp(aFRnvrQROoK z!u%&Dke38)ib|*vbVZGL1Zt!cF$8CzI*|E}vmxLFQ0((0)CnxJN? z9cth`?=t^-Fp>mK)g)BKGf*R4f$HFo7=mX}BYTF*7yF(w*vx^-AC4MvT~vp=qB^n| zwX_?sDBkoDC`lmEuWqUum|aoFa1^S+dFBCB!}n1Qy~K2W3| z!+n?sZ(uO`qCapmkk!nGdVz$a_Cggbfz42BxeVjsZq&@3L(SZE^A2hcJirq8Cu*eG zAG#Uni0WWJWGQ^!1OnO&bFextM@`im)Y?b*&7J2UR70Vt8OV*=bR{q)HbHfKAgY0J zsE#Z`)xR2xZ3;50kw<3f!7+|BS>RC(V{0tE@2K+S;n zx0`|FsNb-E*rTe^C z|F{O*p&IImIws?=5UxY5;UkQL&rwVB1vO(q|GLc?7nLs$`WwcI#LJ`d%|MNKKI(L> z!zk=O?=S&P?P;8Zf1x@u=#|^G(=k2qg{Tf3v-E2im-s#GjxVt?wtDS4vK3VcDq>!ofGT$c)!~z< zHNT45ln=~*FdFf|5AMAY1CtUDL3Oy$2j*WH%2wTzF1d@PIVKts%iEm2cH1+@oeVn$q!8sRzA9=T@m2bh`opO{4FKVgIb z|L1jf)S5Izt@UWs49r1Qya+WD8&IcVKWZs1oA=EZs1AO?K^P^X%Qq5rOs8WpJdV+5 z--{fH0LH-%m<*HSDAbfL#ZX*>>ezKGkB_kt=8hcT-(-_eGq?#gBY&V~?iuR1{fF~0 zLKN4*#pu(TtR|pczZcc;UCe;*aTKPG8sPs_TaD__9n{P`MD3X;mYyzJfdBkwMKxFg zm9MhJYoa>T1QTNWXaVl${~;u3YUg4lT#H)kx2OWqgWOssM!jG{P#r0N+ST8oMqI~i zh$`32?1cI(8B@;)|#$zlmDfKQUP6{|f;%5FE$77(y`<@eZg8reiu> zfSK_KhT=2S+9!?cUQD@AOHcxJJnN%gWSub;u0<`$X;epVVJV&ehnA2jo|~H7Se6V$ zQKw=gs>iEQBiM)P&;`_o$tzStvEsX_u7Jwd5w&DK)Ii2zQ=E?4Q?D?U&VSqlZpw0E z1>&P{5ne*|yjwzdt|z08=P4|PzhQPvpU7>xTBwHWq4rD%)J%0not6ctfhNg%?oABOtLe4r(_Cqoy`3Y9xhF6_!MmuYk%|)t=WxZL&t_-xH|a-wi`>6RObF*c>(W-=p#mL^U`L z^WbdMoA4ZJ2`;0~|05p(HTV(r;t5FZ8iNCJYGsyUodJ@XG1#X^C}V0RP;b?vay&07o*--7g4+Z3F=%&N@X22)1XF{ z1@#3bA8L1(L9Kl~OpEPM9UYHais=}l^FNn>db}4k)u$}O160M2QA_kMD&K#o4n+!f z`BS6zL}641OQQzV!0d`z%2B9K%O5O$9HZ*|pC+J&E-L|lK{faYwFH0SGJJ;`;ewC= z|Ch*(s0PoWMs^=V@Cj;)gHpQ>r_87sXn^f-FxJ99&{vi~ku+{?N1$G*ld%l0#&Y;K zYIldFbxTwcHMK2J>D^JAYNVx4M=il}d%goTbEi=QypCFeduciUdhk05s_-AwCJIdF z;?YnAlA>lP4Qi^hp~@9NEmAF3lK z@jJYMT8c#JT?NTepLQ8gBhHMP`Y=3z#ZYVi1w$}l2KTPdkLqwu)TVBRIk2CPKxzVO zFe9EtRroJv!Vjn=Nte-`>msO;v`1Cc3-x>=D*sAMi5F1sfxl26Hpw%&^e{|EybfwJ z`UVithG+P zs-Ol?2eo9aQJb?XYN-ZdLY@B=1XRIZ)TTR#`SCNVqI}uirYnl7pcpE>l35Ei^^LG5 zcEL7y6hkme4)?CFX!b|#fi>t$PvATO?ao)22Lp1tui^QyD)C`h9xtOhm?D?k3k^|I zI~esXcsQz_ZK(5q7sCw#~T~RYRIuGYxJ)A~@dcFs>W+zd*^*XA8 zr{-%^2fe&*MA1;2EE#Gh!Y~yUwRj^`z0FY#b~gK?+8N~|pkp@!gK?|HFJlqnf1{33 zXg=3K9n|J)h$^=d_53Ji$Gy zi`uPCu`zZmYji`!tT86Wz3a?oFw#6TyruvD+KcZ$P!gp@d#>augtD$D(Csar8qRRb+ z`jqs-IsaO_MB#3&lA{_-k2*%7sE$=ct$i)j$QqzFX={rQLydF->KoBKR6Uzf<#(b+ zd=a#avGlp$deeI#2}lyew+QYM~lvhibSh>a_H+ z_*T>m>^4uKj^7O*0rluP>XrEsHAS(Cy8@|E4d+BPSj^HZqjqs4RKxR8^(@CCxE1xG z^*3h2^d;Q;p(g5-4Z{rRn@2#K>IiBE&RhHn>Kxz09QYnJvMeRtyFM3c4O?Iec?mo<}GZ;1wqx7ug#=uOWmt3AJo*2w&(Lu4X!{f(O%4m z7cmX~hsvM4w0k4wKs~RI`i?jh{d)uT1!prx)A>I|AT0@(Q5C&GeJUm`%Q4%T;&}JBeTDwiC zsoa4&c4sgcFQPj50@dILRK92xUA~lNT2u!zqsmo8&2R@)2PUC9Hmf4%Uk$D$LC0eY zYBL@}P1!kA2Yx~2duZ{e=k*yZ$+9w|+)Vagu88JZC_SuqA5B2cVACB-EamhAKZFRc^h-_n_XCXHYZx2kMyr zhgs0~iGUi+RNd|B5~z>MUYH%Hp?3WdOMi=+!h|*48?Gek!)h>Qz{9Bgk5N;evZnjp zPgm4TZ^SZq1u5tAlGSp*P-u)5c`y^p;{%I_)^;Q6i+ZJw!oqkMb^Jb|8q8J4EkPSp zL&H!bUxi_K%$|Qj4IpV<4UqF!mVnl-w?Ba&JWw-m7*+8-)YK=a=h8z_?}-YibKeQu z<090i3##wR<;P0IJD^_0yRZ~K$GVuO0W(AU-Z%o&@iaEXCJo(hzxJSBME_tdOw!1W zq!Sh(z7j+5E^6w(pgNqPvHL#J5H(}#Q1w4Tz553=ac{`!=nE&|00H&vGiooCY#QMI zuT>kPrg|4@MqXiYjMvO_nbzB%V#FNSF( zXw7z_I&=qvF+~eEf+DC6_Q9sO53A{UOSefoVL{^aQRT0rmMl>#_ae%Un!##V5?7$| zKWXK29};O>yQ!^+$~XdboNnO&WyGA=x{Z7F&cxir*JA^`huRB;+Pd$29Z^g46Kb9)@ zKcmX!?-<~X$L?4Tzo5>0xlV3od!UxUH;sTA-jAyI4r)o_b#?{wVV6LtKO_ICM-p*rY8EzM5Mh?mTF*qnIkKFkR1d&3DR!&219 z&tN@#gF04K`??oYC)65_MSlmd9q~U=ySY|Bw@D{rS>gv#BahPG{ajHR_3E9BTFM*f zQ^BACZqt;)aN+BNd!Pl5B|Z+-v4n$cO;Mi}HBhhIp%{t_Q8RfK^`-O! zCd9D8ZpNz&=KO23^dv#==(VWL@(}fkjl%KlfLTzRa3-pugQ$w1qmE^&A@2B9MZE!s zqGo6ZcErC>18FeSy&2bFmH_s`P%7BKgLK0KypMPpzsCzB++VF09O;h9OiWJtA=DDw z!NnM5l>3&v8a0rks8jI{t7EFsZmPRt0^-Y1ui#y%Q*g;gKvS7ujGOx0s6EgfwRskr zyHF#)j5^N&W8I#qfLhD$sJ*lTwf5OFG_7b!ALM+=n}GCML$p6Wk26#?-`rFxR6RK93sM6XZ1cya*HB z$kL+LvIgo^Ivn+e+KvHaRd5(8-*nVkFT|#J6*a|qr@60Ir7#Nd@^}xc zV-V(=?v}O)YUbKublUfP1R~-%)Qe;?s)C*7K@28-618T3Sh_dEeTj^UaY&DiI(8wb z4pzpPI2>c(6pW4wQJZls`Vta2NI(@|!^rp?)#KNwioKc6xTqybgIe24sF8O@?U})- z&c8<5f`q8p9yJp^P(AL86>uc#*j+@8=mRQ$wArrW zcvzZv5>!W;U=AFCs&5;r1G_O0529w^$ZXEPD!f60M*2Hyir%1RCUB1XIUotDKvvX< zi(xFRhAP+8(z}{NQ1whk)juEoQ;wS1gQ)Und<3+)ZlN~UpQw?&#t8TsRYBm~0RMla z9tRr|?~8iFT}8bQqR(^jS{R@BILwHP@H;$-r7-e*H=`9%<$N;<^dWE$)uXx#+|;*0 zO<51ri2I>NI@X@gMJ?SbRK889&AS~n<#$j6x{q4QKT-Anhnj&X3;mxRJ}({t?e1Kt zO;sJW345T9Uw^EKTP^+>_4%EDkvsSOQ6rv?>gZ}zeY;Rga1-_F{teY(Z?P*E6%*+E zry-zkE(K5->Y#eu1VgX`>b#CeeY!2fOn3-2BTrBbzsEWlw8Z6aj+*+us1EEzZQ?7K z6+dHr+V`?7b!$EXRnY|0`CWkea(M;gVfJON;^L?Z>!H$nqCP`Lqn2U?hTu9>zH_K! z`xv#S;w^VekqCWCNKZiT_ROdPjWGxILsh&6)8k3=FVved{tEZ1&W=rqH$#;_gqoo{ zsF6lmX>UN(9w~y_8!cCI{x#K|NYE+hkJ^>vQSbC?s3rLuRp6}|u*#)JM{TzFsCts1 z);zsE&xP7c1yT8mnWa%PRbiFSRaA|Hs3g=wb)-4^HzBG6{ZSPRL%k_SquvjTQM-AE zJwJ>g#805=`vcXn7pRVXLgkOP+L^#dKqCuAHIy0Efn2BxN}|qxC5tyeRn!u-`MRKX z{}9v*X1b-XG54VAJB!Nqi}@0@^u9=ITtm@NQxXr=p(LoaPlF4w80vW5Lv6}{weBlg zBh=pTp`NcWPhvXaPcSpaTIY6u7^WrO(&_U?6VRqvhx!6>68qylREHX@cO7ho8o~Fd z85x9{fpMs%nva^nWvCIaL(SBF)Y6?sov!n!dhhzd*{SgUjssCe+&hh{|^ewfm2v@;$}mI{$A7C}X^hZfb&21xlj! zKpC?tsw4GKBWa8pX(v?2eW=Yf8kKJP zxo<{=d<3*MW6b%e3O1XkF_`!R)Di`5cOy=Lnt|M?(^D4pyd|oGgHTJc8ueLn8H;1o z9WK3s>FY_L5f2ukHq!^piZOS(1`47^Rt43OHmEfmg<9ivSOHI9GmN_{!0UoP??0#J+34Du|Dw|X0E;NV|5%V{Q(xkBKzD=K7+6{@y)0P z-(XoRw%`49JO*nKe~IcynFDT<&%#vt{9i>tZ>|$q2p?l>OncBZFcvk%`%tIjCT3JV z)c1lohukU1h+2{`)C^TdeLQzZeGeFkI_AevOLYmG(7yL4fyP+juzRo?YZE_$N>6gc zRoEN#v)(++f##lY7L`Ya$mtppq8*FYBSGA zZMp;ICsg?&m)%dry-^+VrMTjbO%Bu)_QSF&h$S%cRhM2Kb#5o3-k9gH8AiJ1^0mR; z#MhwSh%K+X{IgIUx`9LR9qPFDzu{j>pLd8rMG_vO);h;cH}Z0*DP4eS@DV=4l(*d4 z2i5BBd@GChF-M?I*%b8u`=1S#u*Wi7Hy@(j{Vz}zMZN1P zPL8RFXTne{i#k?4Q6pT0>cA${$L~JWh))x~q7ma+yW#dg2?+^cn%WmtteCZ|!GD#CsD+piR; zP1qA#;5yXtiuJ&CxH4+9u0y^1U!fXG`p}I$hnXKWQ$;ZZ+xZBnp|O@>DQbjkEWX3y z`^__`slQ>*-=Ox&Cwm_IH`ibaRC-z*i1{piD{3isqn65dj({4xgW9D}EFST9ckbh& zmZ%PDEgM_Bt=Snh;$EnF=9;Te9o>eSxhts8j-W^G3rKdXuFwB^1k}J<)S7Lv_!ZPt z-$qqj^bgnL3aI=I%;uKf&fa!pt}YHDi12`E^vq|Drnl9<{Vlp14gMf|~LosF|#U{_|glfTpl9 zsw2ZtJ>P)ZrH3s2HmZS0PuHfoJqpiaXm)Q8#y)M-fd%$XNePlack zf4xeZlOTPliWZigKC?8Yr$B9s4?uli7>60~2Kx5|YF8(C<^IkmBWiO_N2TvG zFQ7W~0AuL<|3g4M{(?H+$zQvkWcn_GGxbF@95g<8txmcGM0 zfqHLT#~Awjf2ja|whYnVxQ3FW(zBXjmR=h5YOQVQJy9JUYR|`@zDLZ)h`0gO;8xW8 z;V1JJ`g9I|C!h*GVjGO`*8K$39+iF(^&+}~I(9EH8)pB{O>HC8OmsmVzmXQ-fhvE_ zyn>~O-?rz$@9g`3zISeotDvT=r#T9>cC%4azYeujd$AebK+RCt`v7k!mPW--npaWB z^FC@br~BaQDT?}*UHJp&U*B++lAwZn@FbqJ_@s~S^M5{ull}^eVct)!qF$(qMxu8A zZPc6ZBeulSpWO_sK@DUxYNn2&X7HBJGDP{}DvV{OLQP$E%z*hU-U!vvmZ%POwe-!F zz7y5JF-yOV`Z|6e*I`0_v!t0gjH=&vn}9acebf|t0q#K@RF4y5Z_I+VaS2Ajx2O-F zFQ^w!tiV8j$6BE3>4N?SP{(x?YGy8@_E7Q&fgVf4=RW~W#XQuAPNQBp(IN)=KNE^$ zA>vK37|z99_%o`Zn2}t=Da|aX^a2(yYu3Uzq&G)>59scf^EZlsrfe?y*9e1&AI04G z5H;nABD;KPQ6npen#y7pua9cD8ES^QT6$m9ruJbPoPydb+w`3Fz3T+@G5HJT$IvLQ zftIK#Zjb6fKXVkS!f6&?f!f4dQ5`yC=?~2pmi`IVaH6QL{xJ0a_rKu;LU>ROH3QvH z@9Gg2pNJaq64X+yMve43s=-I7FD_qD9mx{S)mH+wlr6C&&O_GRyNCLokR~Y5=b!2_ zL2j+vphh|Z>*5sD(mX*m_yyHq?C7pTnNaz2pwf$=Hd$@d02bm1T#b4$WsBhk&;%n9 zA0NZ#GEOBy1?HP8QERvvwJCR@X5c^6?)`$wUnFLr|I@P!s-xpE440yw|BM>Q@2I6M z8q00oo*0w(N*@7@U>mA}!>EEcP(8knYB*kOHv>sABk|0ra@8%p2`XP_48>lkUA`1E z;11N<|AH#_1(n|yBaTamZ-$_zI-6P4tZX($73_pFu_vnI(c`*~rN*+v%cB~aVlKpv z#MhzrSdw`DdVF410@^&eQ57}D%Gd+-;yH|ZL50P4Gg22L5Fdl;=y+6z=Hnb(X7Qp4 z-1AbX^0mw!sF|3Gb@chajeyoBdO}xG3DgplM}1n=wD@dP&zGV`wjI^*5mZM`o3~J# z@rfCj$ie|f(Lz{|c%$T;e@)#?60`@Fp^n{c)C@#V;Wk@5)W{NHO$@Pk zPgK6as2Lh*E<}A%*@>$E3Rc2jF#~2x>FTTHBcR>i1a+>*qDHm_bsFxWHp^>Ng^^OZ z^wg*h7eLKGXVel-Ky`F6>cz7b)xp4EXEf9sG7f5Q`RWtUm&F071}9@WTxs#MsCV{# z)H^#}h|5UUI!Q>1hGLou?>e?bBoc`<(i zzv-|HjV<0D^}^|9@m}_Ppg9(`WHV7CK89L?U(Khe`d?uM3`!s9|K)XU%t`y+d;(-HNJWg=>d7okS55;fu-s2MqG@$2S8)LwdF@gx~tx%8-d@}ZWb2>O5j zH_;x z>dWR<QG~|J!fA4}^vkFbyh2r!J-_?xD2saYbwvGAYdUI% zZrk&xsNaOdF5vb~mI9oAHB^rTjif(nswbn?aslf5{&G}D?xQ;R2{oc9VKxJ(hRUIy z*F%l81*(I+Q28gKHtlXyeSi4uL4<1U zDym#M)C^_EU~GpP;22Db3sL!ey9neaa0J!k*H{gs7It40>Z4|2DQbjkQ2BPFMt08P zzhg|||6yK?T*OUvVO04#s1KdSs4pO!T)NNukAOz-1=T==qONE0&6KDHGosFQA)J9z zQB#=dJNF7Ng?hCPKz)zcWL`y$^c`w%L;u_UVJ9Z+8& zx}$#vP`iCMYE93h_RKp}{>a7M^O&f38q@$YTRaWe|dhhZX|fa=(COW%#Th#y1E;2YEcqLp;*B}Jcln1O)IX68j@ER6ar zsA%c!P*d2&;D3|jd&nt z!poQyKcG%Q#?r21^-vvdhia&c#Rr!h)e~%Hu=H%GB`b>wnC^@`2tw z;_*-gH=;(o9hL7C>iuvNJ7MMuf&PD@F$=Z%B2;uHL9Kl@)bIbwV;!7<8o)E8gFdfN zCAX={qSmYns^O8S5sXK5V2;Jtqo#1T#gCyjM?h38Q(mfuhxr?IQLuTZH_Q=A1=aX4xw%9zzrKLs~3yIT4PRQ^e*`e&jBv>yF` z|F@ffdVawkJTU)8_4FgEf`rwaDKIbbv=*<2s<0_)k90)UH_+mf?D-*`3Q`I>C zDtOHj9-xlh->6sdJ5<93tGo1Ks8?|XbEvrs)2bY5hT_+7dme6W6f!(iWgXXgT;4Z71B?l8cI~ll}n52KsHo* zUR3?XeU_mvYO0%~zNPj@b!;l?#dHqU<4CpL_k`4_U0)Sdt`Dl*WQ(sxHFy{`GpA7R ziDwv!(d)Q9<_jaBidv#xvEwis?n8Z?K1D4>s=Dq|vI%Mg%TWz%LGAWks2Mqf`jEPf zdbJ1FbNNc4o>xTuu-g#Z>HO~|ps7t$-(?I%eFMsa8gXq@gWa$;4o1B?uc9h^j@9uq zszcQpxb(WHjJ~-=Z3d)6jJ&C2ALEL=`M#7DvrcIn)~V zMl~=VRep=5AF%jUR6X}m^}Mq54~pyjM{VRD#5NP5DoSbbET|6VvUml|OuRZy#sR1) zjnUXGS$mvAd?Bi1VNKkC8lyVU7BzF7(f|E_FoB6AjKTGoxT)*FG4xLvYDsQd{Jj~_ z%;k%U%9jwelqoEp0izJlh8j>l)J&AHc)XBxp_MTZV0@PrZ|Y%~j5D=$=einZCq4kRbZaes&f*_XFFIe!cJ7!pKvmcq zwP~iK&i`)gjDMjTX!N~%1&=`eHhZtd6Sa3Eu8ca4)9^d|9k*k;4uSrES$P}PaH)>| znfG}^3266jLX9M5C-=fBi+W>?Ms;K*>IHQh^#vk&XSa0qagp+&PD#ctuAXA37gvAO zl6fU6+umD zPgDgzny0ZU@q4Hd=ji2TtP5(%mZ7HnENXK`?d?uWUGxnlp%nprNIXIvv!Fh%=gF`c z@gk@_u>iH^M^GQbDf_xjSqpW%2B4O36>9h2$7-0dpPTx=_?Y-~EQy2qbN;&%INaYQ zUZ=puie2{y-8I}JsYAGJ0Iv!=Pn~_jdycudw zj2z7Q*BYHCLC562phkEQH3RQZ<#P^kBdmd1t~=E-h$c_7g3wk_a6Zj$S~54unlU82BKa#OE4Huq1Nm%Y6e0_xp#RRRK@*J?#a_e$_ykox^-Pzqm{|=q;%2D)vrwCJGinb6&T?C1Wipt)NUSR@ja+LaR;?Dab~;kfI~1c@$0Cm`~|fnFHpNZ;T$)hTxMC+UTKWV zHxZlRk8?P`>RE!h?mseVgPPhUsGeWIL-^R@Yv#EIj-W<<7uE4ksQkh6onfesRL30H z3Bz!Kc^!4^WBV2adV>k%Lw%vxhN?K)LKn}3s%Q{4!#Su9zsCt!X_0%?-bO7|$YM7$ zIn4s7^zTp~YE>+~1!_io-xJVRr@8iEl|9&q%}Bq8s-V~sS8+A7F1{nZ3F?Q?dQ080 zYKi)^oPN{R0R0ndSmZk)1b9F^k zw91}uv-mO8X1;`p@DEhIpHX`z@p9L(R2Wz1KeIo;Z@W+pR7RcK0hYcDwZ_}c8>l6D zhg!0PD_lp~n|)9n9)TLbbX3C&%@wGQug5|<|GNpO;a8~LoMxpfm=9Gj9JN+uP#x)m zIu&zJQ~Q&78P(to)C}B5)%Os(uZM8;!{x_UA&s}uU)y8gdTVRYhvy-ZiJ&SocJEpd*MB* zg9X;Q8LNhRJ{arc0o3V8vd;akxIK0!egw4{^R0Il!wAGHuIK!#$5ly?P0cQ-srQ+q zP;agY7T<*$!9mnoo<@!AI;x@HFa-Zb&1{?vuH&JohD&1(Ebk*wn?OI*NG_oELhOxh z3X7sTRt?oaGt|;_Ms;8W`j-q<@hXe2Lv`#JYOOD!2K2(x-=aF^i@3>U2rZU$3YJ{~=BdTZiK^@nb_WS^9365C&C)DY=gen*KqsyNf{r~>2yg$G% zlg-iQN>opeqel7#H8bV5xe7X&Gf*SkZ}DTOnR{mG?=0?ZcbhXN>L;zH=>PeD5CQ*M zniEkK%vJ_mftvF57C&g7Fn={r(60GbDg;zRsTWMQlGH&>pM9Au}JvUGW=~B-dKjn zJ6%I@%w%RdGrJjPmM|-!W}ptLgAGs}XlwD#sJ$>?C+B}Ifw?4TP4evu^#4yU)x>1P z*PAC%&mWlHZudMDhLTMPti48hl^`V#GN{}o&=)C?~45zq{*MxDo< zs3o|9It7nVJ^yG%*y~0Vgqq64sOK3`^<=krQF~qr)le<73F<}G&f>ml1T<9(P@iT? zP!+zx0Q`ii_zS9{So@qwP%oY|7B7q%VQEyynxRfhS5&?ks43rwYVRkcooV+5B=qSc z;1O{x)q9ujMcMEA5ev1c6JjJxhN?fr%!#V67^;7zQ0-Phwc7(Vp7G{1b1o|XlKt#K zWmrc-bli$si36w(-!|W&3M4t;zRIORJ#UCA-`^Z+jzM*Nk~tkUk#j7*+Tt4yum?4B z`$&*CP)qa=YGf%7x{6Yx8p?o5&xYzyF4Rit%BlxkdB|9Y)`wt!9?lDN>H1SY{QN*% zozs=tMc{925ee=8lWkzw2B|ScQ__t2}>$ukFo2xGI--y4Y>>~2y zw+@!2tgi1UukS$KWil=$a{m8Skb-BGNUKi;XLvq>a9+}atb(4T*QfJeuc*XB$+Mn& zJGZWemN&B5l00|0w^ARM&r46B90^~qixiwedo zP>4)=|LE#Ux~`#A(3$ipR1yO-llK&9>_7i?N@d8~**egP_&O^)f_&2{mxo(dZqhef z*q4z&bSk?-!3-37OuRJ(4wJDy8E=#JADud8mDRQe5}2<^FHHWg7q2RB8+ASoE zr~G^JZ6$3!dH*AGJKFrH^)GJ~tAf&G973UcIGM~9@HrLgN^uBM=_!rX&NYmY@R zIrl&0-NSRee9m+0>Q4Gq>tIByOX&{@C*b|#jU=*_Okc071nyHnFBn}t2-l|4X>@F* zji`Zjx->52`C0M};#p!k-I$6$5-!V~hEWVweee7p0^~fYoq=*KyK4`Ju1pc zMG1LWo`OG-cGNocI~gNdxG{O65NBp(&p8?>HQCR=!WLik%H!@@) z^WRj^oC^1o&d)C1Il_x6_)M*Ft;2)Nj;{6Oe`^h_BmOgG#*+Vtbz&Oj{1@q8uh-;% zL>pN{}PD0zoSjBg{kKv)<54$}LcXKh^6t7+-G zahTjU3GHxWCiA)D6 zd=vAKzLCO>Nk2qdCu~XDNuK?yygd68zrFq@K7qVR$TLMVNxixrbBB{w%s*qS|DP0o z%e{&WZ77t5y9n`SWGYAnneiBDiSc`X74DDx*72`N#dxkO#2Qj~C22`$=&?OhT4w5c zOP-Fjk;6ws*BtHxWE@F+H;rcCPC$l&+{3w_(AXF5{)Bby;=adShJ1}Ew+-9y{2b3a z)7Tgq*w1~Ccn<$aso&b_!}F2kpG1D&HtX3P)ykEM0^7OwS)pS*?``44q=!&YR|RhV z&7`;0DlI}~y4uia2>G+&X-nJb9(li0S0mEvS($wi^!aPobRK@Oa33;#y{?iuDe+F+ zy$Ell(N9!-jk}BG>qXiRJma@Q{_6^LeI~wxSX=TG!W-n-#sGA6ByE%i#=n8|GF##U z9`G9gZxMG6GRNW8^%u`uQJ_5W3i!3lU8$fiX+3y8h45RK-AhI|8u{LHf4#bquQusj zNn1?)_350hJvx56a+0`@#0*q6j_?bY?5*JWLekb+fgr-YxPRpyN}j6Z)zy@I4{<3| z-;QuP8cSi%#t^Q{t!n}0j$69ozJE#3^~X28y+>MAD!E3Xsic2Ti7qw-ez8%Wx11FPT< zD%;C_iVUr+6JIE>iEtCEtTo}G_G~%N3Q~D&%2(m$*Hm7A@;#uA3RWl8dwq$2y;@jj z_y^x!RZWF{FSL_LZW=8^yaW~WAiRr=@rd`QqAkRCQ%MctQ3!`)T*{0kPixBWw@SY@ z(v7@{dESDuH@@k}3esOuz7iS#M*sSMEwq4!N0Zoug1RYy~v(cZWp82Hz!L6$lMg4dXO1FVh7djIRn;P4t- zg%qLAod1Dg3NcffwCO_@8;Vw>@C_GQ6_y1%v1d^!hKH=Hj>rg0_93*@cb#--k z?@7ySY1ObdsVbpn&1wQ^bK_sp9RQUo(o5_9h zo3sH`mXgk-w~nqPyyTlozXk_T*JPdz`=%^W?tR1g}d8>Dc@AI zk#Js(7$4D@2ZYm6VNRQcP3B?J22egWjnv`JM&1ZK8$!A7tg*+0J900i)5R?9QAFC$ zU_Db>ZtjcUjBt@Ppl7|fxAQEeP32U=?I;^gd@haG!?-likTS=KuOys~+p{_b@_Zoq zhmlm;2D?P-&+oteS40xqGm@m-ji|g3@twFIqfz(-6@8(CE!N@K0{y)!9 zNg``Jw>2K!>PU`nC_9~;C3%*IyC|J$Nf}*_iN_?aYoPz%fD#B+VN2{rVO{k}YeHIC z8rLtU?_dXObOV*#=bl7-2+z)vHz~LN{_$_hY_P_Ndcnl`pSkg_TKzdN4$o^-Uw3`} z>pDlHiKuW06)wh#s2|NMlm3pdu12Pd(HSbOOhwm77{z^>3O{n|io&yM+*7GbS6k{@ zPWj@*6OyN))wNka|CO^$n`x{&h1&7(DECB5uW72HecW%j!>CZ#N%F6z!kpx(MK~@# zpzIyOx+2rTxuiuPf1uTqjdcAzM>X>K$3NS8os)#x6#SWv%(Vto$$7%@DID}o+H>MZ zEdC2_;yyw>^C&-qXXB_VF7e@XU_FkY&eY`TgSsB_yb^y0=FKB98i_$Cgl}88Hx*3f{*JP``jeiK=aIQ}O{3A3)Hj~=lh&Yn!mLuau1Wqs8GkV{ zzP5_bQDICnOd?*D@OaDIjf(%^PDEM?(gynrGo{3{(Aa0{h((#GR*yaQ0%?4NMOskq z33X`6f5tte&)57Xpn?ok5St7YxszItcTo8Zo?RkO7-_eN-=T0QdB0wfs7Tiqo+l%3 zFYd3`Eb{)w^8nJ8@w}$xeNFl2WLitQuP2GkNytw^Gcpw;PCH&U{%B4G>&P?!2hp*S zq%9=R*Xt?aH`bX~-T?G zsc0$>PLc4PjixRQ7XPN=E)>x9luBk2?nJmN6|LaTPJ9;SukmaZcTvg?B`pPYO(CwU zgTw!4AM)yIOTPSi$)u;DIaH)8rFFo?+@I6c5h`j<-l^m}!rhs|&$+)|m#woscy^zB zduil1%B;Yiq(#KUH98KLTDZKw zxcj3H6>g%_St(PBPN$+wB=Y^m;}N7~vb-6|^C#)aNGrhIg1ncB-zL0?aInVzqxI$q znIltiS}JSB!@o#RY0s8ZVRh2KUh{dbYZ6|fjIMm#hscwhv@X;Y&fSPxS3J_vX&^M* zo;+1B2JvnB{-2dQjWy)Y%^%$;7?)I|C_pI zV*%0{S!cf~>Yb)j$;rEqXSvAZKmS!IaMyCRx6xdqqMM|Dp&?y+i0i6v@het&HS!;) zq8n7ItGbm}I2Yx&bI-K0N~=NMLgY>2>hXC+2sGCdu6f*VdAOU(BU4aUUkdM`&`ZK; z{3(1du*SC%FTlN==P9^#ea2nXIhOLF#N&~740SZ4V{dS<4spX=wp0Tigh!@d*> zA@g$lfwZJHqDzE-pip5OSt-)rsSNiS@>e51ox2%#cJhp-(O~kYqnKzMSL00(ps+{lJ<)5eC~ogOGcT#+$pFd z4`tSqcOuVb6Yk8dYX@n%X3^Pvl*vZ=L-Hr2F5gQ6OSt=Sr|15ejQ#xC=@bPv5w1kW z0u*eBT_{|`Dr`(cWeK0MhN6={J=fKq#&%NYFFf1Gv)mX)$0}3q z1J6p377P9R{{#=ey=W6QT_EgL3}s&uiQ_`TNnelbxk1tnQ{#&-;?-a>OV`_!dRU)N?|ix%biZ= zKNf+<+}jC{wn_+k1*oJWl`Z1gEh@V}S`O=MQR`T5;`yk&7SGCB2N$D$ukatwvPjB) zy^c`-5$d}^!YI;x6UeZcNGdWfqTocUWC@vc4I$HC+&>WBZjCRXl27(L6Xh>(A0Yk< z>1QoZBJywKF38=OTh~46S%eq4e`a9S_4og}s#E9*4+oKW26gSAvW>)3(4lEKp1U7+ zd3BNof982b>#XwE;aLSbQQJCpig-rq8f^6`&)4fU<;(KifBw_b_&BTRIfXkBuESlx z3f3fZbTa>hmno8rhG+8Z7_VE1 zqcA=Nkupd!D%0SlC@O07F$0Cl7Kud^RM15iOLEk3Z9}765Lyu$wJS@BoK4eINQjMi z=fyHFf()aNiv_`A<$Oyj2)zly>UZi4cHr#%|Ic}z=bVjQj4_5^1+)Ih=l|y%)=`g= zxzVHK62LjmOLd`6#cSZNLVJpwr|01wP|jXB_mwA}t692?no_KRWrCbr-XS`G=pZH$ zVQLKUtTrRMM>az~Pk()mq0sE)Lh=dRG`$Y$FKRWKU1;KHvQbTM6LT)B$FO+I_dk;y zBwnyc48nvygE_ET$UYSa=OLyNm2f3qqV1x7V9*I_A-D-YjmKy1VfEr@D}r;9nxJ~o zjloO)`wcMQD8^-McpGpr`IvhnBo~GbHA%vgXyg73ycxce^B~-hXk6qDzq zPB=J!vYrk39lE! zyVPv_hVvEd5<`Zm^YonBbf6t4AEDo;nxJ^%wT*NXY~d4&l4~Jm;}GOh2zE>-NGJCj zG()yn&4a+FQcsiN^BZ2j@3gzo@c4{#XWT}h&gb@;k@mb5<;%|21#<}Xeh8i>yBX`x ztD0RhZALTk&~*3EOt{Yqk7eQ`W~wuPYxznuYIQ}d@Kx*j;FsQ;)=0nA5y~XGr&_O= K3u5^fiv9wt-Co52 delta 42878 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 Uhb=dbjm}rr9GkH;V)bA656$a7g#Z8m diff --git a/locale/zh/LC_MESSAGES/django.po b/locale/zh/LC_MESSAGES/django.po index 97a5f4c8..d44f000c 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-05 12:53+0000\n" +"POT-Creation-Date: 2026-11-05 13:17+0000\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -2625,7 +2625,7 @@ msgstr "请从可用名称列表中选择克隆的名称" msgid "%(quota)s: cannot create '%(clone_name)s'." msgstr "%(quota)s:无法创建“%(clone_name)s”。" -#: instances/jobs.py:196 instances/jobs.py:543 +#: instances/jobs.py:196 instances/jobs.py:545 #, python-format msgid "Instance '%(clone_name)s' already exists!" msgstr "虚拟机 '%(clone_name)s' 已存在!" @@ -2718,218 +2718,218 @@ msgstr "未创建快照" msgid "Revert snapshot" msgstr "恢复快照" -#: instances/jobs.py:460 +#: instances/jobs.py:462 msgid "Reverting the VM" msgstr "正在恢复虚拟机" -#: instances/jobs.py:471 +#: instances/jobs.py:473 msgid "libvirt is still reverting the VM" msgstr "libvirt 仍在恢复虚拟机" -#: instances/jobs.py:475 +#: instances/jobs.py:477 msgid "" "It cannot be told whether the VM was reverted; check it, then revert again or" " resolve this job." msgstr "无法判断虚拟机是否已恢复;请检查后再次恢复,或处理此任务。" -#: instances/jobs.py:492 +#: instances/jobs.py:494 msgid "The VM must be running, paused or shut off to be cloned" msgstr "虚拟机必须处于运行、暂停或关机状态才能克隆" -#: instances/jobs.py:493 +#: instances/jobs.py:495 #, python-format 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" -#: instances/jobs.py:512 +#: instances/jobs.py:514 msgid "Clone VM" msgstr "克隆虚拟机" -#: instances/jobs.py:553 instances/jobs.py:560 instances/jobs.py:817 +#: instances/jobs.py:555 instances/jobs.py:562 instances/jobs.py:830 msgid "Copying disks" msgstr "正在复制磁盘" -#: instances/jobs.py:612 +#: instances/jobs.py:614 msgid "libvirt has no result of the copy" msgstr "libvirt 没有复制的结果" -#: instances/jobs.py:623 +#: instances/jobs.py:625 #, python-format 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" -#: instances/jobs.py:626 instances/jobs.py:710 +#: instances/jobs.py:628 instances/jobs.py:712 msgid "The copy failed" msgstr "复制失败" -#: instances/jobs.py:651 +#: instances/jobs.py:653 #, python-format 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" -#: instances/jobs.py:686 +#: instances/jobs.py:688 #, python-format msgid "" "A volume of the clone was being created; check these volumes, then resolve " "this job: %(volumes)s" msgstr "克隆的一个卷正在创建中;请检查这些卷,然后处理此任务:%(volumes)s" -#: instances/jobs.py:690 +#: instances/jobs.py:692 msgid "The job stopped before the copy started" msgstr "任务在复制开始前停止" -#: instances/jobs.py:697 +#: instances/jobs.py:699 msgid "libvirt is still copying the disks" msgstr "libvirt 仍在复制磁盘" -#: instances/jobs.py:700 +#: instances/jobs.py:702 #, python-format msgid "" "Another backup runs on the VM; check these volumes, then resolve this job: " "%(volumes)s" msgstr "虚拟机上正在运行另一个备份;请检查这些卷,然后处理此任务:%(volumes)s" -#: instances/jobs.py:705 +#: instances/jobs.py:707 #, python-format msgid "" "libvirt has no result of the copy; check these volumes, then resolve this " "job: %(volumes)s" msgstr "libvirt 没有复制的结果;请检查这些卷,然后处理此任务:%(volumes)s" -#: instances/jobs.py:733 instances/templates/create_instance_w1.html:60 +#: instances/jobs.py:735 instances/templates/create_instance_w1.html:60 #: instances/templates/create_instance_w2.html:356 msgid "Create VM" msgstr "创建虚拟机" -#: instances/jobs.py:756 instances/views.py:2482 +#: instances/jobs.py:759 instances/jobs.py:804 instances/views.py:2482 msgid "A virtual machine with this name already exists" msgstr "同名虚拟机已存在" -#: instances/jobs.py:758 +#: instances/jobs.py:761 instances/jobs.py:801 msgid "There is an instance with same name. Remove it and try again!" msgstr "已存在同名虚拟机。请删除后重试!" -#: instances/jobs.py:761 +#: instances/jobs.py:764 msgid "First you need to create or select an image" msgstr "请先创建或选择一个镜像" -#: instances/jobs.py:763 +#: instances/jobs.py:766 msgid "Choose one disk source: a new disk, existing volumes or a template" msgstr "请选择一种磁盘来源:新磁盘、现有卷或模板" -#: instances/jobs.py:765 +#: instances/jobs.py:768 msgid "Image has already exist. Please check volumes or change instance name" msgstr "镜像已存在。请检查卷或更改虚拟机名称" -#: instances/jobs.py:767 +#: instances/jobs.py:770 msgid "Invalid cache mode" msgstr "无效的缓存模式" -#: instances/jobs.py:769 +#: instances/jobs.py:772 #, python-format msgid "This host offers no CPU mode or model %(mode)s" msgstr "此主机不提供 CPU 模式或型号 %(mode)s" -#: instances/jobs.py:771 +#: instances/jobs.py:774 #, python-format msgid "A CD-ROM cannot use the %(bus)s bus" msgstr "CD-ROM 不能使用 %(bus)s 总线" -#: instances/jobs.py:774 +#: instances/jobs.py:777 msgid "The cloud-init seed is read from a CD-ROM: choose its bus" msgstr "cloud-init 种子从 CD-ROM 读取:请选择其总线" -#: instances/jobs.py:777 +#: instances/jobs.py:780 msgid "The cloud-init seed needs a directory storage pool for the disk" msgstr "cloud-init 种子需要为磁盘使用目录类型的存储池" -#: instances/jobs.py:783 +#: instances/jobs.py:786 #, python-format msgid "This host offers no firmware %(firmware)s" msgstr "此主机不提供固件 %(firmware)s" -#: instances/jobs.py:785 vrtManager/instance.py:3005 +#: instances/jobs.py:788 vrtManager/instance.py:3010 msgid "This host offers no TPM 2.0: install swtpm on it" msgstr "此主机不提供 TPM 2.0:请在主机上安装 swtpm" -#: instances/jobs.py:836 +#: instances/jobs.py:849 msgid "Writing the cloud-init seed" msgstr "正在写入 cloud-init 种子" -#: instances/jobs.py:843 +#: instances/jobs.py:856 msgid "Defining the VM" msgstr "正在定义虚拟机" -#: instances/jobs.py:876 +#: instances/jobs.py:889 #, python-format msgid "%(error)s. Remove these volumes by hand: %(volumes)s" msgstr "%(error)s。请手动删除这些卷:%(volumes)s" -#: instances/jobs.py:901 +#: instances/jobs.py:914 #, python-format msgid "The instance is already on %(compute)s" msgstr "虚拟机已在 %(compute)s 上" -#: instances/jobs.py:903 +#: instances/jobs.py:916 #, python-format msgid "%(compute)s is not reachable" msgstr "无法连接 %(compute)s" -#: instances/jobs.py:905 +#: instances/jobs.py:918 #, python-format msgid "%(compute)s is the VM's own host under another name" msgstr "%(compute)s 是该虚拟机所在主机的另一个名称" -#: instances/jobs.py:923 +#: instances/jobs.py:936 msgid "Migrate VM" msgstr "迁移虚拟机" -#: instances/jobs.py:967 +#: instances/jobs.py:980 msgid "Migrating the VM" msgstr "正在迁移虚拟机" -#: instances/jobs.py:1004 +#: instances/jobs.py:1027 msgid "libvirt is still migrating the VM" msgstr "libvirt 仍在迁移虚拟机" -#: instances/jobs.py:1011 +#: instances/jobs.py:1034 msgid "The VM stayed on the source host" msgstr "虚拟机留在了源主机上" -#: instances/jobs.py:1013 +#: instances/jobs.py:1036 msgid "" "The VM is on both computes or on neither; check them, then resolve this job." msgstr "虚拟机同时位于两个计算节点上,或都不在;请检查后处理此任务。" -#: instances/jobs.py:1045 +#: instances/jobs.py:1068 msgid "Move disk" msgstr "移动磁盘" -#: instances/jobs.py:1052 +#: instances/jobs.py:1075 msgid "Choose a disk of the VM" msgstr "请选择虚拟机的一个磁盘" -#: instances/jobs.py:1076 +#: instances/jobs.py:1099 msgid "Copying the disk" msgstr "正在复制磁盘" -#: instances/jobs.py:1119 +#: instances/jobs.py:1142 #, python-format msgid "Another block job runs on %(dev)s; check the VM" msgstr "%(dev)s 上正在运行另一个块任务;请检查虚拟机" -#: instances/jobs.py:1125 +#: instances/jobs.py:1148 #, python-format msgid "The disk stayed in %(path)s; remove %(dest)s if it is there" msgstr "磁盘仍在 %(path)s;如果 %(dest)s 存在,请将其删除" -#: instances/jobs.py:1127 +#: instances/jobs.py:1150 #, python-format msgid "The definitions of %(dev)s name %(paths)s; check the VM" msgstr "%(dev)s 的定义指向 %(paths)s;请检查虚拟机" @@ -5514,52 +5514,52 @@ msgstr "最近的记录,最新的在前。" msgid "All of this VM's logs" msgstr "该虚拟机的全部日志" -#: instances/utils.py:66 +#: instances/utils.py:67 #, python-format msgid "The disk files cannot be checked on %(host)s: %(err)s" msgstr "无法在 %(host)s 上检查磁盘文件:%(err)s" -#: instances/utils.py:79 +#: instances/utils.py:80 msgid "" "The quota cannot be checked because a host of your virtual machines cannot be" " reached. Nothing was changed." msgstr "无法检查配额,因为您的某台虚拟机所在主机无法连接。未做任何更改。" -#: instances/utils.py:85 +#: instances/utils.py:86 msgid "The quota of virtual machines is reached" msgstr "虚拟机配额已用尽" -#: instances/utils.py:86 +#: instances/utils.py:87 msgid "The vCPU quota is reached" msgstr "vCPU 配额已用尽" -#: instances/utils.py:87 +#: instances/utils.py:88 msgid "The memory quota is reached" msgstr "内存配额已用尽" -#: instances/utils.py:88 +#: instances/utils.py:89 msgid "The disk quota is reached" msgstr "磁盘配额已用尽" -#: instances/utils.py:97 +#: instances/utils.py:98 #, python-format msgid "%(quota)s (%(total)s > %(limit)s)" msgstr "%(quota)s(%(total)s > %(limit)s)" -#: instances/utils.py:193 +#: instances/utils.py:194 msgid "None available device name" msgstr "没有可用的设备名称" -#: instances/utils.py:394 +#: instances/utils.py:395 #, python-format msgid "%(hostname)s via %(address)s" msgstr "%(hostname)s,经由 %(address)s" -#: instances/utils.py:433 +#: instances/utils.py:434 msgid "Invalid MAC address" msgstr "无效的 MAC 地址" -#: instances/utils.py:435 +#: instances/utils.py:436 msgid "More MAC addresses than networks" msgstr "MAC 地址数量多于网络数量" @@ -7450,29 +7450,37 @@ msgstr "取消失败(HTTP %(status)s)。" msgid "Cancel failed: the server could not be reached." msgstr "取消失败:无法连接到服务器。" -#: operations/utils.py:52 +#: operations/utils.py:54 msgid "The host of this virtual machine cannot be reached right now." msgstr "当前无法连接此虚拟机所在的主机。" -#: operations/utils.py:53 +#: operations/utils.py:55 msgid "" "The host of this virtual machine is busy with other requests right now: try " "again in a moment." msgstr "此虚拟机所在的主机正忙于处理其他请求:请稍后重试。" -#: operations/utils.py:160 +#: operations/utils.py:57 +msgid "You may no longer do this." +msgstr "您已无权执行此操作。" + +#: operations/utils.py:58 +msgid "The virtual machine is no longer in the panel." +msgstr "该虚拟机已不在面板中。" + +#: operations/utils.py:169 msgid "" "A short operation is in progress on this resource; try again in a moment." msgstr "此资源上正在进行一项短时操作,请稍后重试。" -#: operations/utils.py:163 +#: operations/utils.py:172 #, 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前发起),请查看任务页面。" -#: operations/utils.py:165 +#: operations/utils.py:174 #, python-format msgid "%(label)s is %(state)s on this resource (since %(since)s)." msgstr "此资源上的%(label)s%(state)s(自 %(since)s起)。" @@ -7563,34 +7571,34 @@ msgstr "镜像名称不能超过 120 个字符" msgid "Clone volume" msgstr "克隆卷" -#: storages/jobs.py:58 +#: storages/jobs.py:59 storages/jobs.py:70 +msgid "Name of volume already in use" +msgstr "卷名已被使用" + +#: storages/jobs.py:65 #, python-format msgid "The pool has no volume named %(name)s" msgstr "存储池中没有名为 %(name)s 的卷" -#: storages/jobs.py:60 +#: storages/jobs.py:67 msgid "An ISO image is not cloned" msgstr "ISO 镜像不会被克隆" -#: storages/jobs.py:63 -msgid "Name of volume already in use" -msgstr "卷名已被使用" - -#: storages/jobs.py:72 +#: storages/jobs.py:79 msgid "Copying the volume" msgstr "正在复制卷" -#: storages/jobs.py:84 +#: storages/jobs.py:91 msgid "" "The copy exists, but the job did not see it finish; check it, then resolve " "this job." msgstr "副本已存在,但任务未看到其完成;请检查后处理此任务。" -#: storages/jobs.py:85 +#: storages/jobs.py:92 msgid "The copy was not made" msgstr "未创建副本" -#: storages/jobs.py:96 +#: storages/jobs.py:103 msgid "Upload ISO image" msgstr "上传 ISO 镜像" @@ -8787,57 +8795,57 @@ msgstr "此虚拟机上仍有快照任务在运行;请在其结束后重试" msgid "Shut the VM down to revert to an internal snapshot" msgstr "请关闭虚拟机后再还原到内部快照" -#: vrtManager/instance.py:2397 +#: vrtManager/instance.py:2402 msgid "Cannot clone a VM whose NVRAM is not a file" msgstr "NVRAM 不是文件的虚拟机无法克隆" -#: vrtManager/instance.py:2465 +#: vrtManager/instance.py:2470 #, python-format msgid "Clone failed (%(err)s); remove these copies by hand: %(path)s" msgstr "克隆失败(%(err)s);请手动删除这些副本:%(path)s" -#: vrtManager/instance.py:2475 +#: vrtManager/instance.py:2480 msgid "Shut the VM down before cloning it" msgstr "请先关闭虚拟机再克隆" -#: vrtManager/instance.py:2529 +#: vrtManager/instance.py:2534 #, python-format msgid "Clone failed (%(err)s); remove these copies by hand: %(leftovers)s" msgstr "克隆失败(%(err)s);请手动删除这些副本:%(leftovers)s" -#: vrtManager/instance.py:2540 +#: vrtManager/instance.py:2545 msgid "Live clone needs libvirt 11.10 or later; shut the VM down to clone it" msgstr "在线克隆需要 libvirt 11.10 或更高版本;请关闭虚拟机后再克隆" -#: vrtManager/instance.py:2543 +#: vrtManager/instance.py:2548 msgid "A VM with a TPM is cloned only shut down" msgstr "带 TPM 的虚拟机只能在关机时克隆" -#: vrtManager/instance.py:2546 +#: vrtManager/instance.py:2551 #, python-format msgid "Disk %(dev)s is not a local file; shut the VM down to clone it" msgstr "磁盘 %(dev)s 不是本地文件;请关闭虚拟机后再克隆" -#: vrtManager/instance.py:2548 +#: vrtManager/instance.py:2553 #, python-format msgid "Disk %(dev)s is shareable; shut the VM down to clone it" msgstr "磁盘 %(dev)s 是可共享的;请关闭虚拟机后再克隆" -#: vrtManager/instance.py:2553 +#: vrtManager/instance.py:2558 #, python-format msgid "Disk %(dev)s changes at the next start; shut the VM down to clone it" msgstr "磁盘 %(dev)s 在下次启动时会改变;请关闭虚拟机后再克隆" -#: vrtManager/instance.py:2555 +#: vrtManager/instance.py:2560 msgid "Another job is running on the VM; clone it when that ends" msgstr "虚拟机上有另一个任务正在运行;请在其结束后再克隆" -#: vrtManager/instance.py:2568 +#: vrtManager/instance.py:2573 #, python-format msgid "Volume %(name)s already exists in storage pool %(pool)s" msgstr "卷 %(name)s 已存在于存储池 %(pool)s 中" -#: vrtManager/instance.py:2587 +#: vrtManager/instance.py:2592 #, python-format msgid "" "Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f GiB" @@ -8846,92 +8854,92 @@ msgstr "" "存储池 %(pool)s 可用 %(free).1f GiB;克隆需要 %(size).1f GiB(复制的磁盘,再加其 %(percent)g%%,至少" " %(minimum)g GiB)" -#: vrtManager/instance.py:2726 +#: vrtManager/instance.py:2731 msgid "A network interface that is a host device is removed in the XML editor" msgstr "作为主机设备的网络接口需在 XML 编辑器中删除" -#: vrtManager/instance.py:2742 +#: vrtManager/instance.py:2747 #, python-format msgid "No network interface with MAC %(old_mac)s" msgstr "没有 MAC 为 %(old_mac)s 的网络接口" -#: vrtManager/instance.py:2745 +#: vrtManager/instance.py:2750 msgid "A network interface that is a host device is changed in the XML editor" msgstr "作为主机设备的网络接口需在 XML 编辑器中修改" -#: vrtManager/instance.py:2836 +#: vrtManager/instance.py:2841 msgid "" "A VM changes its PCI devices while it runs, or is shut off without a saved " "state" msgstr "虚拟机只能在运行时或无保存的状态的关机时更改其 PCI 设备" -#: vrtManager/instance.py:2848 +#: vrtManager/instance.py:2853 #, python-format msgid "%(err)s; whether the VM has PCI device %(address)s now is not known" msgstr "%(err)s;虚拟机现在是否有 PCI 设备 %(address)s 未知" -#: vrtManager/instance.py:2850 +#: vrtManager/instance.py:2855 #, python-format msgid "" "%(err)s; PCI device %(address)s: the VM is not running, its next start has it" msgstr "%(err)s;PCI 设备 %(address)s:虚拟机未运行,下次启动时有它" -#: vrtManager/instance.py:2852 +#: vrtManager/instance.py:2857 #, python-format msgid "" "%(err)s; PCI device %(address)s: the VM is not running, its next start does " "not have it" msgstr "%(err)s;PCI 设备 %(address)s:虚拟机未运行,下次启动时没有它" -#: vrtManager/instance.py:2853 +#: vrtManager/instance.py:2858 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM has it, its next start has it" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机有它,下次启动时有它" -#: vrtManager/instance.py:2855 +#: vrtManager/instance.py:2860 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM has it, its next start does " "not have it" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机有它,下次启动时没有它" -#: vrtManager/instance.py:2857 +#: vrtManager/instance.py:2862 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM does not have it, its next " "start has it" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机没有它,下次启动时有它" -#: vrtManager/instance.py:2859 +#: vrtManager/instance.py:2864 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM does not have it, its next " "start does not have it" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机没有它,下次启动时没有它" -#: vrtManager/instance.py:2893 +#: vrtManager/instance.py:2898 #, python-format msgid "The VM has no PCI device %(address)s" msgstr "虚拟机没有 PCI 设备 %(address)s" -#: vrtManager/instance.py:2911 +#: vrtManager/instance.py:2916 msgid "The VM has no USB controller" msgstr "虚拟机没有 USB 控制器" -#: vrtManager/instance.py:2930 +#: vrtManager/instance.py:2935 msgid "The VM has no such USB device" msgstr "虚拟机没有此 USB 设备" -#: vrtManager/instance.py:2971 +#: vrtManager/instance.py:2976 msgid "The VM has its own RNG device: change it in the XML editor" msgstr "虚拟机有自己的 RNG 设备:请在 XML 编辑器中修改" -#: vrtManager/instance.py:2998 +#: vrtManager/instance.py:3003 msgid "The VM has its own TPM: change it in the XML editor" msgstr "虚拟机有自己的 TPM:请在 XML 编辑器中修改" -#: vrtManager/instance.py:3017 +#: vrtManager/instance.py:3022 #, python-format msgid "Unknown crash action %(action)s" msgstr "未知的崩溃操作 %(action)s" diff --git a/operations/tests/test_public_error.py b/operations/tests/test_public_error.py new file mode 100644 index 00000000..0ca01787 --- /dev/null +++ b/operations/tests/test_public_error.py @@ -0,0 +1,14 @@ +"""A job's checks in the worker refuse with Django's exceptions, which carry +no text: the job's error says why instead of being empty.""" + +from django.core.exceptions import PermissionDenied +from django.http import Http404 +from django.test import SimpleTestCase +from operations.utils import public_error_text + + +class PublicErrorTests(SimpleTestCase): + def test_a_refusal_says_why(self): + self.assertEqual(public_error_text(PermissionDenied()), "You may no longer do this.") + self.assertEqual(public_error_text(Http404("No Instance matches the given query.")), + "The virtual machine is no longer in the panel.") diff --git a/operations/utils.py b/operations/utils.py index a8486e20..f5240e5e 100644 --- a/operations/utils.py +++ b/operations/utils.py @@ -9,6 +9,8 @@ runs in gunicorn).""" import re import libvirt +from django.core.exceptions import PermissionDenied +from django.http import Http404 from django.utils import timezone from django.utils.timesince import timesince from django.utils.translation import gettext as _ @@ -51,6 +53,9 @@ TRANSPORT_ERROR_CODES = { } UNREACHABLE = gettext_noop("The host of this virtual machine cannot be reached right now.") HOST_BUSY = gettext_noop("The host of this virtual machine is busy with other requests right now: try again in a moment.") +# a job's checks in the worker (precheck) refuse with Django's exceptions, which have no text +NOT_ALLOWED = gettext_noop("You may no longer do this.") +NOT_FOUND = gettext_noop("The virtual machine is no longer in the panel.") BOUNDS = {"WORKER_CONCURRENCY": (1, 16, 4), "JOB_RETENTION_DAYS": (1, 3650, 30), "LOG_RETENTION_DAYS": (1, 3650, 365)} @@ -105,6 +110,10 @@ def public_error(exception): ) if isinstance(exception, HostBusy): return say(HOST_BUSY) + if isinstance(exception, PermissionDenied): + return say(NOT_ALLOWED) + if isinstance(exception, Http404): + return say(NOT_FOUND) return say(UNREACHABLE) if connection_error else said(exception)