diff --git a/ATTRIBUTION.toml b/ATTRIBUTION.toml index 153aba891..e3b103ab3 100644 --- a/ATTRIBUTION.toml +++ b/ATTRIBUTION.toml @@ -7,7 +7,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Greek UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "a97939665a6e4ac58111a27982f6b1bfdcb85db9cbd6ce023dbd8659a73e6118" +sha256 = "dadc21af04311f400962fab2008e4cc1215097ee48bd15d8171ce8d5be1ed995" # ATTRIBUTION.toml: one entry per asset (AGENTS.md §1). The source of truth for provenance and licences. # ATTRIBUTION.md is generated from this file: `cargo xtask assets --write`. Checked by `cargo xtask assets` (part of `xtask ci`). @@ -30,7 +30,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Simplified Chinese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "a5fe624ab5684a330ddad485a1ae4a2ff7439cb2ada85afd10ffc4fb0791522c" +sha256 = "49c2d8b5c765ad32839837ca0e2316adc81c7ad9bdce03004ddf3b8b1a2fb444" [[asset]] path = "crates/ui-egui/src/i18n/zh-hant.tsv" @@ -41,7 +41,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Traditional Chinese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "5da04b4ef08f9ba2bf4433a51b1cff596d700e55170c28cc12ef34ad19c9b1fd" +sha256 = "1c41a76c4af3aa31477cd623fd33fc263c20b7a000d2c72f626d487460df4b97" [[asset]] path = "crates/ui-egui/src/i18n/cs.tsv" @@ -52,7 +52,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Czech UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "d714effcab6ae014ad5b0e964b93d313758db1ce9523b1340a60a5397bf123d8" +sha256 = "cc5ab5afd85cbf878c90efa227d078c8ec9de2984ff26d472c17c1708eb9f8f8" [[asset]] path = "crates/ui-egui/src/i18n/pt-br.tsv" @@ -63,7 +63,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Brazilian Portuguese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "244fecf2976aec60450528de322f1048a8d2aafe977f1f1a919fcf876d36e593" +sha256 = "697bc6101239a291fe8530ddf874c811c694f26e01df710dc7ee61b41773c948" [[asset]] path = "crates/ui-egui/src/i18n/es.tsv" @@ -74,7 +74,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Spanish UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "f6fba535ad253a7661bcec3c274fd1d1116430c65628da8ffb74532172e9dd04" +sha256 = "b3f75c272623a778bbc3819939fd4e09e399d687882b291d629d1f05064976fc" [[asset]] path = "crates/ui-egui/src/i18n/fr.tsv" @@ -85,7 +85,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "French UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "204e00346d16c9f32697381f990bf3d138361a9e4237fcd961a2ce1d69355be9" +sha256 = "2f25c13e15f306a1adbec4978648015e25a4178936350a4123ff2a752fe03efc" [[asset]] path = "crates/ui-egui/src/i18n/de.tsv" @@ -96,7 +96,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "German UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "dcf84dbffb1b1b37f3826ce88f9ea6dd4bc52aee800914f4bc21b8009aebe550" +sha256 = "ca9c1ebeac08e194b20bc8d2b7836ed8dab50affdce905c47a4a76b9b5ad171f" [[asset]] path = "crates/ui-egui/src/i18n/te.tsv" @@ -107,7 +107,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Telugu UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "8ba90267efc380425d88bab543d88345cb9de3ce983f9a1a1f2879d6f3e6206b" +sha256 = "2d35261ae57f6c641630adb98254dc75e164ae759a18a6156b45db044a1c45ba" [[asset]] path = "crates/ui-egui/src/i18n/it.tsv" @@ -118,7 +118,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Italian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "73244fda2e227dc1d0b2362d6e7de726a0aa07d93e6fb87bb18a69c7b7829fc4" +sha256 = "6fc0b69e7d7f63cbc2d672e162c7b61f807c6c182727def155397476e2351bbf" [[asset]] path = "crates/ui-egui/src/i18n/pl.tsv" @@ -129,7 +129,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Polish UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "31062d686391ba9d6dbfe0ab1a34a58924333bb6d1bfaa2f68433ff3352c2455" +sha256 = "413da7472d0558b555e48216ab5078a302580e998274e10007369ca46d6c8196" [[asset]] path = "crates/ui-egui/src/i18n/ru.tsv" @@ -140,7 +140,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Russian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "0164c540c1d3363329cb5125dc30a5c6dc1321d5ed68ec705a51bef12850a7a5" +sha256 = "aaa593ea03a42cfe44dcd8054b01207e788be8f29becbe37d10eed42f946714b" [[asset]] path = "crates/ui-egui/src/i18n/hu.tsv" @@ -151,7 +151,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Hungarian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "49ebab7b33137af1754bf28abb7b52ee86d9a0ab837281dcb9741a7310dd69fa" +sha256 = "166c745d7e80af7d36baaddb6027284b7aff0b61e42bc55eaac0dc8982e7fb3c" [[asset]] path = "crates/ui-egui/src/i18n/bg.tsv" @@ -162,7 +162,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Bulgarian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "268f5707b1b905067d597a7b9e75fecc9f8d6c9d227813450391c5cae7505f99" +sha256 = "47e9c4b1aa621cf05cc39fa2da1986a970f73377f2759dfc4128fdc5f0bdc4af" [[asset]] path = "crates/ui-egui/src/i18n/kk.tsv" @@ -173,7 +173,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Kazakh UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "087167049187f00cceb87af9744cb4017bd903c80adbf1e5e49c0b1e0b6352bc" +sha256 = "2237b9e378863361254d7a267c1a6887fbe2e0638aba15d4956e2fbef35daf80" [[asset]] path = "crates/ui-egui/src/i18n/ja.tsv" @@ -184,7 +184,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Japanese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "5e74d56a13284204077b0c39acb7fe22039fcba886a7eb75eeab0f211d18184f" +sha256 = "38c3086beaad4a2b0e13cb26b97eaadc97a1f3871c9e59d3b411ec4bfe9686e5" [[asset]] path = "crates/ui-egui/src/i18n/uk.tsv" @@ -195,7 +195,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Ukrainian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "748f6f45a6e72c164b6b215b2d3617495f420ab1d175d6cfa3b8a73e6631a01d" +sha256 = "a6b7ce0fdd44827951b0873e319fa381919be6e05fa5f919965b8f8df658416a" [[asset]] path = "crates/ui-egui/src/i18n/ar.tsv" @@ -206,7 +206,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Arabic UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "1367bc29cf3288b0fa9246f3af41cf5a176cb795882795a94f386a5d3a753f23" +sha256 = "40613047ce409b34d97489ef422aedd392ff2251fb383a8d3d5c411f3560d6e4" [[asset]] path = "crates/ui-egui/src/i18n/tr.tsv" @@ -217,7 +217,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Turkish UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "b52d09fd8a30cb2adacfaa8dab55d39e555e6812546ac3bc2d7886dd21e9bf2d" +sha256 = "cae07bcc17be4f3ebd882bb987d5da53891fbcfdc76e41db05623119248ca762" [[asset]] path = "crates/ui-egui/src/i18n/lt.tsv" @@ -228,7 +228,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Lithuanian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "9b9e1516828841f1685b4a02cf9b79f917182395af46907831ba60c301b66644" +sha256 = "72a3d59cda8ce1d5c39a51a69f06dc2cd9f60698c448b1036e70e4e7d6c65e4b" [[asset]] @@ -3363,7 +3363,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Slovene UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "06d2b8e6b9b719c9f3a82bc4e6b5c3dacd00c6f44fd3092e1b834d43464ab5a9" +sha256 = "33629fdae4b1dd288c6cdc9c479810df61fe1dcb9470941289b8719c649df6ca" [[asset]] path = "vendor/vello_common/assets/probe.png" diff --git a/crates/ui-egui/src/i18n/ar.tsv b/crates/ui-egui/src/i18n/ar.tsv index 84948ebaf..6bf8e8cd9 100644 --- a/crates/ui-egui/src/i18n/ar.tsv +++ b/crates/ui-egui/src/i18n/ar.tsv @@ -1615,6 +1615,7 @@ Sent to {printer} أُرسل إلى {printer} Sent to {printer}: {msg} أُرسل إلى {printer}: {msg} Looking for printers… جارٍ البحث عن الطابعات… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. لم يُعثر على أي طابعة. تحقّق من أن الطابعة مثبّتة وأن خدمة التخزين المؤقت للطباعة تعمل، ثم افتح «طباعة» مرة أخرى. Sending to {printer}… جارٍ الإرسال إلى {printer}… Choose a folder for the searchable files اختر مجلدًا للملفات القابلة للبحث Files are combined from top to bottom. Leave Pages empty to take every page. تُدمج الملفات من الأعلى إلى الأسفل. اترك «الصفحات» فارغًا لأخذ كل الصفحات. diff --git a/crates/ui-egui/src/i18n/bg.tsv b/crates/ui-egui/src/i18n/bg.tsv index 092a6a4f6..7be35cbac 100644 --- a/crates/ui-egui/src/i18n/bg.tsv +++ b/crates/ui-egui/src/i18n/bg.tsv @@ -1576,6 +1576,7 @@ Sent to {printer} Изпратено до {printer} Sent to {printer}: {msg} Изпратено до {printer}: {msg} Looking for printers… Търсене на принтери… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Не са намерени принтери. Проверете дали принтерът е инсталиран и дали услугата за опашка за печат работи, след което отворете „Печат“ отново. Sending to {printer}… Изпращане до {printer}… Choose a folder for the searchable files Изберете папка за файловете с възможност за търсене Files are combined from top to bottom. Leave Pages empty to take every page. Файловете се обединяват отгоре надолу. Оставете „Страници“ празно, за да се вземат всички страници. diff --git a/crates/ui-egui/src/i18n/cs.tsv b/crates/ui-egui/src/i18n/cs.tsv index 5cb7adf8c..b17621ae5 100644 --- a/crates/ui-egui/src/i18n/cs.tsv +++ b/crates/ui-egui/src/i18n/cs.tsv @@ -2263,6 +2263,7 @@ certificate Subject Subjekt Remove page Odebrat stránku Remove {n} pages Odebrat stránky ({n}) Looking for printers… Hledání tiskáren… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Nebyly nalezeny žádné tiskárny. Zkontrolujte, že je tiskárna nainstalovaná a zařazování tisku běží, a pak znovu otevřete Tisk. Sending to {printer}… Odesílání na {printer}… Fill colour Barva výplně Fill colour: none Barva výplně: žádná diff --git a/crates/ui-egui/src/i18n/de.tsv b/crates/ui-egui/src/i18n/de.tsv index 134447ef6..57b6587ca 100644 --- a/crates/ui-egui/src/i18n/de.tsv +++ b/crates/ui-egui/src/i18n/de.tsv @@ -1609,6 +1609,7 @@ Sent to {printer} An {printer} gesendet Sent to {printer}: {msg} An {printer} gesendet: {msg} Looking for printers… Drucker werden gesucht… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Es wurden keine Drucker gefunden. Prüfen Sie, ob der Drucker installiert ist und die Druckwarteschlange läuft, und öffnen Sie dann „Drucken“ erneut. Sending to {printer}… Wird an {printer} gesendet… Choose a folder for the searchable files Wähle einen Ordner für die durchsuchbaren Dateien Files are combined in this order. Leave Pages empty to take every page. Die Dateien werden in dieser Reihenfolge kombiniert. Lass „Seiten“ leer, um alle Seiten zu übernehmen. diff --git a/crates/ui-egui/src/i18n/el.tsv b/crates/ui-egui/src/i18n/el.tsv index 23579181e..2196afd8d 100644 --- a/crates/ui-egui/src/i18n/el.tsv +++ b/crates/ui-egui/src/i18n/el.tsv @@ -2247,6 +2247,7 @@ comment menu Edit Επεξεργασία Fill & Sign signature Υπογραφή από το εργαλείο «Συμπλήρωση και υπογραφή» Choose image… Επιλογή εικόνας… Looking for printers… Αναζήτηση εκτυπωτών… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Δεν βρέθηκαν εκτυπωτές. Ελέγξτε ότι ο εκτυπωτής είναι εγκατεστημένος και ότι η ουρά εκτύπωσης εκτελείται και, στη συνέχεια, ανοίξτε ξανά την Εκτύπωση. Sending to {printer}… Αποστολή στον {printer}… Enter permissions password… Εισαγωγή κωδικού δικαιωμάτων… Permissions password Κωδικός δικαιωμάτων diff --git a/crates/ui-egui/src/i18n/es.tsv b/crates/ui-egui/src/i18n/es.tsv index dd92d23ad..d113b53e3 100644 --- a/crates/ui-egui/src/i18n/es.tsv +++ b/crates/ui-egui/src/i18n/es.tsv @@ -1619,6 +1619,7 @@ Sent to {printer} Enviado a {printer} Sent to {printer}: {msg} Enviado a {printer}: {msg} Looking for printers… Buscando impresoras… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. No se encontró ninguna impresora. Compruebe que la impresora está instalada y que la cola de impresión está en marcha, y vuelva a abrir Imprimir. Sending to {printer}… Enviando a {printer}… Choose a folder for the searchable files Elige una carpeta para los archivos con búsqueda Files are combined in this order. Leave Pages empty to take every page. Los archivos se combinan en este orden. Deja Páginas vacío para incluir todas las páginas. diff --git a/crates/ui-egui/src/i18n/fr.tsv b/crates/ui-egui/src/i18n/fr.tsv index 8b72f117c..7db8f4ef0 100644 --- a/crates/ui-egui/src/i18n/fr.tsv +++ b/crates/ui-egui/src/i18n/fr.tsv @@ -1604,6 +1604,7 @@ Sent to {printer} Envoyé à {printer} Sent to {printer}: {msg} Envoyé à {printer} : {msg} Looking for printers… Recherche des imprimantes… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Aucune imprimante trouvée. Vérifiez que l’imprimante est installée et que le spouleur d’impression fonctionne, puis rouvrez Imprimer. Sending to {printer}… Envoi à {printer}… Choose a folder for the searchable files Choisissez un dossier pour les fichiers recherchables Files are combined in this order. Leave Pages empty to take every page. Les fichiers sont combinés dans cet ordre. Laissez Pages vide pour prendre toutes les pages. diff --git a/crates/ui-egui/src/i18n/hu.tsv b/crates/ui-egui/src/i18n/hu.tsv index 23916ebc7..5484d4e1d 100644 --- a/crates/ui-egui/src/i18n/hu.tsv +++ b/crates/ui-egui/src/i18n/hu.tsv @@ -1594,6 +1594,7 @@ Sent to {printer} Elküldve ide: {printer} Sent to {printer}: {msg} Elküldve ide: {printer}: {msg} Looking for printers… Nyomtatók keresése… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Nem található nyomtató. Ellenőrizze, hogy a nyomtató telepítve van-e, és fut-e a nyomtatási sorkezelő, majd nyissa meg újra a Nyomtatást. Sending to {printer}… Küldés ide: {printer}… Choose a folder for the searchable files Válassz mappát a kereshető fájloknak Files are combined in this order. Leave Pages empty to take every page. A fájlok ebben a sorrendben egyesülnek. Hagyd üresen az Oldalak mezőt, ha minden oldalt kéred. diff --git a/crates/ui-egui/src/i18n/it.tsv b/crates/ui-egui/src/i18n/it.tsv index 748fd5a74..db3a27ad4 100644 --- a/crates/ui-egui/src/i18n/it.tsv +++ b/crates/ui-egui/src/i18n/it.tsv @@ -1620,6 +1620,7 @@ Sent to {printer} Inviato a {printer} Sent to {printer}: {msg} Inviato a {printer}: {msg} Looking for printers… Ricerca delle stampanti… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Nessuna stampante trovata. Verifica che la stampante sia installata e che lo spooler di stampa sia in esecuzione, quindi riapri Stampa. Sending to {printer}… Invio a {printer}… Choose a folder for the searchable files Scegli una cartella per i file ricercabili Files are combined from top to bottom. Leave Pages empty to take every page. I file vengono combinati dall'alto verso il basso. Lascia vuoto Pagine per prendere tutte le pagine. diff --git a/crates/ui-egui/src/i18n/ja.tsv b/crates/ui-egui/src/i18n/ja.tsv index c7c57af4f..22245049c 100644 --- a/crates/ui-egui/src/i18n/ja.tsv +++ b/crates/ui-egui/src/i18n/ja.tsv @@ -1625,6 +1625,7 @@ Sent to {printer} {printer} に送信しました Sent to {printer}: {msg} {printer} に送信しました: {msg} Looking for printers… プリンターを検索しています… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. プリンターが見つかりません。プリンターがインストールされ、印刷スプーラーが動作していることを確認してから、もう一度[印刷]を開いてください。 Sending to {printer}… {printer} に送信しています… Choose a folder for the searchable files 検索可能なファイルの保存先フォルダーを選択 Files are combined from top to bottom. Leave Pages empty to take every page. ファイルは上から順に結合されます。すべてのページを使用する場合は「ページ」を空欄にしてください。 diff --git a/crates/ui-egui/src/i18n/kk.tsv b/crates/ui-egui/src/i18n/kk.tsv index 659a40ab0..e98565c44 100644 --- a/crates/ui-egui/src/i18n/kk.tsv +++ b/crates/ui-egui/src/i18n/kk.tsv @@ -2237,6 +2237,7 @@ key Space Бос орын Fill & Sign signature «Толтыру және қол қою» қолтаңбасы Choose image… Сурет таңдау… Looking for printers… Принтерлер ізделуде… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Принтерлер табылмады. Принтердің орнатылғанын және басып шығару кезегі қызметінің жұмыс істеп тұрғанын тексеріп, «Басып шығару» терезесін қайта ашыңыз. Sending to {printer}… {printer} құрылғысына жіберілуде… Enter permissions password… Рұқсаттар құпиясөзін енгізу… Permissions password Рұқсаттар құпиясөзі diff --git a/crates/ui-egui/src/i18n/lt.tsv b/crates/ui-egui/src/i18n/lt.tsv index 24e6313e6..df8b870e6 100644 --- a/crates/ui-egui/src/i18n/lt.tsv +++ b/crates/ui-egui/src/i18n/lt.tsv @@ -705,6 +705,7 @@ Locked Užrakinta Looking for PDFs… Ieškoma PDF failų… Looking for printers… Ieškoma spausdintuvų… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Spausdintuvų nerasta. Patikrinkite, ar spausdintuvas įdiegtas ir ar veikia spausdinimo eilė, tada vėl atverkite Spausdinti. Low Resolution (150 dpi) Maža raiška (150 dpi) Low resolution Maža raiška Magnification Didinimas diff --git a/crates/ui-egui/src/i18n/pl.tsv b/crates/ui-egui/src/i18n/pl.tsv index 8371e3311..fe2fa1b4c 100644 --- a/crates/ui-egui/src/i18n/pl.tsv +++ b/crates/ui-egui/src/i18n/pl.tsv @@ -1606,6 +1606,7 @@ Sent to {printer} Wysłano do {printer} Sent to {printer}: {msg} Wysłano do {printer}: {msg} Looking for printers… Wyszukiwanie drukarek… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Nie znaleziono drukarek. Sprawdź, czy drukarka jest zainstalowana, a bufor wydruku działa, i ponownie otwórz Drukuj. Sending to {printer}… Wysyłanie do {printer}… Choose a folder for the searchable files Wybierz folder dla plików z możliwością wyszukiwania Files are combined from top to bottom. Leave Pages empty to take every page. Pliki są łączone od góry do dołu. Pozostaw pole Strony puste, aby uwzględnić wszystkie strony. diff --git a/crates/ui-egui/src/i18n/pt-br.tsv b/crates/ui-egui/src/i18n/pt-br.tsv index 3fba9b5ee..380c6d063 100644 --- a/crates/ui-egui/src/i18n/pt-br.tsv +++ b/crates/ui-egui/src/i18n/pt-br.tsv @@ -1510,6 +1510,7 @@ Sent to {printer} Enviado para {printer} Sent to {printer}: {msg} Enviado para {printer}: {msg} Looking for printers… Procurando impressoras… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Nenhuma impressora encontrada. Verifique se a impressora está instalada e se o spooler de impressão está em execução e abra Imprimir novamente. Sending to {printer}… Enviando para {printer}… Choose a folder for the searchable files Escolha uma pasta para os arquivos pesquisáveis Files are combined in this order. Leave Pages empty to take every page. Os arquivos são combinados nesta ordem. Deixe Páginas em branco para incluir todas as páginas. diff --git a/crates/ui-egui/src/i18n/ru.tsv b/crates/ui-egui/src/i18n/ru.tsv index 4ebe6ab0a..3b23a4277 100644 --- a/crates/ui-egui/src/i18n/ru.tsv +++ b/crates/ui-egui/src/i18n/ru.tsv @@ -1616,6 +1616,7 @@ Sent to {printer} Отправлено на {printer} Sent to {printer}: {msg} Отправлено на {printer}: {msg} Looking for printers… Поиск принтеров… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Принтеры не найдены. Проверьте, что принтер установлен, а диспетчер печати запущен, и снова откройте «Печать». Sending to {printer}… Отправка на {printer}… Choose a folder for the searchable files Выберите папку для доступных для поиска файлов Files are combined from top to bottom. Leave Pages empty to take every page. Файлы объединяются сверху вниз. Оставьте «Страницы» пустыми, чтобы взять все страницы. diff --git a/crates/ui-egui/src/i18n/sl.tsv b/crates/ui-egui/src/i18n/sl.tsv index 45445d431..01e9eadc0 100644 --- a/crates/ui-egui/src/i18n/sl.tsv +++ b/crates/ui-egui/src/i18n/sl.tsv @@ -2226,6 +2226,7 @@ key Shift Shift key Space Preslednica @plural {n} object selected|{n} objects selected {n} izbran objekt|{n} izbrana objekta|{n} izbrani objekti|{n} izbranih objektov Looking for printers… Iskanje tiskalnikov… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Ni najdenih tiskalnikov. Preverite, ali je tiskalnik nameščen in ali tiskalna vrsta deluje, nato znova odprite Natisni. Sending to {printer}… Pošiljanje na {printer}… Float panel Odtrgaj razdelek Inspector Inšpektor diff --git a/crates/ui-egui/src/i18n/te.tsv b/crates/ui-egui/src/i18n/te.tsv index 8a85d2158..29c7b7c87 100644 --- a/crates/ui-egui/src/i18n/te.tsv +++ b/crates/ui-egui/src/i18n/te.tsv @@ -1595,6 +1595,7 @@ action wizard Start ప్రారంభించు Sent to {printer} {printer}కు పంపబడింది Sent to {printer}: {msg} {printer}కు పంపబడింది: {msg} Looking for printers… ప్రింటర్ల కోసం వెతుకుతోంది… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. ప్రింటర్లు ఏవీ కనుగొనబడలేదు. ప్రింటర్ ఇన్‌స్టాల్ అయిందో, ప్రింట్ స్పూలర్ నడుస్తోందో తనిఖీ చేసి, ముద్రణను మళ్లీ తెరవండి. Sending to {printer}… {printer}కు పంపుతోంది… Choose a folder for the searchable files వెతకగలిగే ఫైల్‌ల కోసం ఒక ఫోల్డర్‌ను ఎంచుకోండి Files are combined in this order. Leave Pages empty to take every page. ఫైల్‌లు ఈ క్రమంలో కలపబడతాయి. అన్ని పేజీలను తీసుకోవడానికి పేజీలు ఫీల్డ్‌ను ఖాళీగా వదలండి. diff --git a/crates/ui-egui/src/i18n/tr.tsv b/crates/ui-egui/src/i18n/tr.tsv index b5ecfbac3..ac3f443e9 100644 --- a/crates/ui-egui/src/i18n/tr.tsv +++ b/crates/ui-egui/src/i18n/tr.tsv @@ -2183,6 +2183,7 @@ key Space Boşluk # Printing and multi-object selection Looking for printers… Yazıcılar aranıyor… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Yazıcı bulunamadı. Yazıcının yüklü olduğunu ve yazdırma biriktiricisinin çalıştığını denetleyip Yazdır'ı yeniden açın. Sending to {printer}… {printer} yazıcısına gönderiliyor… Column select Sütun seçimi @plural {n} object selected|{n} objects selected {n} nesne seçildi diff --git a/crates/ui-egui/src/i18n/uk.tsv b/crates/ui-egui/src/i18n/uk.tsv index c4972dbe9..d2078ad5e 100644 --- a/crates/ui-egui/src/i18n/uk.tsv +++ b/crates/ui-egui/src/i18n/uk.tsv @@ -1613,6 +1613,7 @@ Sent to {printer} Надіслано на {printer} Sent to {printer}: {msg} Надіслано на {printer}: {msg} Looking for printers… Пошук принтерів… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. Принтери не знайдено. Перевірте, що принтер установлено, а диспетчер друку працює, і знову відкрийте «Друк». Sending to {printer}… Надсилання на {printer}… Choose a folder for the searchable files Виберіть теку для файлів із пошуком Files are combined from top to bottom. Leave Pages empty to take every page. Файли об’єднуються згори донизу. Залиште «Сторінки» порожнім, щоб узяти всі сторінки. diff --git a/crates/ui-egui/src/i18n/zh-hans.tsv b/crates/ui-egui/src/i18n/zh-hans.tsv index 9a4866536..a81a5e43d 100644 --- a/crates/ui-egui/src/i18n/zh-hans.tsv +++ b/crates/ui-egui/src/i18n/zh-hans.tsv @@ -1583,6 +1583,7 @@ Sent to {printer} 已发送到{printer} Sent to {printer}: {msg} 已发送到{printer}:{msg} Looking for printers… 正在查找打印机… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. 未找到打印机。请检查打印机是否已安装、打印后台处理程序是否在运行,然后重新打开“打印”。 Sending to {printer}… 正在发送到{printer}… Choose a folder for the searchable files 选择可搜索文件的文件夹 Files are combined from top to bottom. Leave Pages empty to take every page. 文件按从上到下的顺序合并。页码留空表示取全部页面。 diff --git a/crates/ui-egui/src/i18n/zh-hant.tsv b/crates/ui-egui/src/i18n/zh-hant.tsv index 74d2b6cc0..8ddfbeae9 100644 --- a/crates/ui-egui/src/i18n/zh-hant.tsv +++ b/crates/ui-egui/src/i18n/zh-hant.tsv @@ -1529,6 +1529,7 @@ Sent to {printer} 已傳送到{printer} Sent to {printer}: {msg} 已傳送到{printer}:{msg} Looking for printers… 正在尋找印表機… + No printers were found. Check that the printer is installed and the print spooler is running, then open Print again. 找不到印表機。請確認印表機已安裝、列印多工緩衝處理器正在執行,然後重新開啟「列印」。 Sending to {printer}… 正在傳送到{printer}… Choose a folder for the searchable files 選擇可搜尋檔案的資料夾 Files are combined from top to bottom. Leave Pages empty to take every page. 檔案將按從上到下的順序合併。頁碼留空表示取全部頁面。 diff --git a/crates/ui-egui/src/print_ui.rs b/crates/ui-egui/src/print_ui.rs index dd233c969..7b5ca5451 100644 --- a/crates/ui-egui/src/print_ui.rs +++ b/crates/ui-egui/src/print_ui.rs @@ -232,6 +232,13 @@ fn listed_printers() -> Vec { } } +/// The first list is still being read and the user hasn't chosen yet (#160): no printer is +/// selected only because none is known yet, so the dialog says it is looking rather than +/// offering Save as PDF, and its button waits. Printing then would have saved a PDF. +fn still_looking(d: &PrintDraft) -> bool { + d.printers_loading && d.printer.is_none() && !d.printer_picked +} + /// A printer's name as the dialog shows it. fn printer_label(name: &str) -> String { if name == crate::web_print::BROWSER_PRINTER { crate::web_print::browser_printer_label().to_string() } else { name.to_string() } @@ -676,7 +683,11 @@ pub(crate) fn body( // The browser's print dialog sets copies, two-sided printing and colour itself. let browser = d.printer.as_deref() == Some(crate::web_print::BROWSER_PRINTER); ui.horizontal(|ui| { - let shown = d.printer.as_deref().map_or_else(|| tl!("Save as PDF").to_string(), printer_label); + let shown = match d.printer.as_deref() { + Some(p) => printer_label(p), + None if still_looking(d) => tl!("Looking for printers…").to_string(), + None => tl!("Save as PDF").to_string(), + }; egui::ComboBox::from_id_salt("printer").selected_text(shown).width(260.0).show_ui(ui, |ui| { if d.printers_loading { ui.add_enabled(false, egui::Label::new(tl!("Looking for printers…"))); @@ -690,7 +701,11 @@ pub(crate) fn body( }; ui.selectable_value(&mut d.printer, Some(p.name.clone()), label); } - ui.selectable_value(&mut d.printer, None, tl!("Save as PDF")); + // Chosen even when it was already the selection, so the list arriving + // later doesn't replace it with the default printer. + if ui.selectable_value(&mut d.printer, None, tl!("Save as PDF")).clicked() { + d.printer_picked = true; + } }); let tip = if spool::HAS_PRINTER_PREFERENCES { tl!("Opens the printer driver's preferences. They are saved for every print from this computer; the copies, two-sided, grayscale and paper chosen here still apply.") @@ -718,6 +733,17 @@ pub(crate) fn body( d.driver_error = None; } ui.end_row(); + // The spooler answered with no printer at all (#160): say so, rather than + // leaving Save as PDF looking like the only thing PdfCraft can do. + if !d.printers_loading && d.printers.is_empty() { + ui.label(""); + ui.label( + egui::RichText::new(tl!("No printers were found. Check that the printer is installed and the print spooler is running, then open Print again.")) + .small() + .color(t.text_muted), + ); + ui.end_row(); + } ui.label(tl!("Copies:")); ui.add_enabled_ui(!browser, |ui| { ui.horizontal(|ui| { @@ -1048,8 +1074,9 @@ pub(crate) fn body( ui.add_space(12.0); let (mut go, mut cancel) = (false, false); ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - let label = if d.printer.is_some() { "Print" } else { "Save as PDF" }; - if ui.add_enabled_ui(settings.is_ok() && !sheets.is_empty(), |ui| widgets::pill_button(ui, label, true)).inner.clicked() { + let looking = still_looking(d); + let label = if d.printer.is_some() || looking { tl!("Print") } else { tl!("Save as PDF") }; + if ui.add_enabled_ui(settings.is_ok() && !sheets.is_empty() && !looking, |ui| widgets::pill_button(ui, label, true)).inner.clicked() { go = true; } if widgets::pill_button(ui, tl!("Cancel"), false).clicked() { diff --git a/crates/ui-egui/tests/print.rs b/crates/ui-egui/tests/print.rs index 9f8ee9263..48f12feab 100644 --- a/crates/ui-egui/tests/print.rs +++ b/crates/ui-egui/tests/print.rs @@ -1,5 +1,6 @@ //! The Print dialog in the real shell (egui_kittest): settings, preview sheets, Save as PDF. +use egui::accesskit::Role; use egui_kittest::Harness; use egui_kittest::kittest::{NodeT, Queryable}; use pdfcraft_ui_egui::{Dialog, PdfCraftApp}; @@ -277,6 +278,11 @@ fn printers_listed_in_the_background_preselect_the_default_unless_one_was_picked assert_eq!(h.state().dialog, Some(Dialog::Print), "the dialog doesn't wait for the printers"); assert!(h.state().print_draft.printers_loading); assert_eq!(h.state().print_draft.printer, None); + // Nothing is known yet (#160): the dialog says it is looking, and Print waits instead of + // saving a PDF. + h.get_by_value("Looking for printers…"); + assert!(h.get_by_role_and_label(Role::Button, "Print").accesskit_node().is_disabled(), "Print waits for the list"); + assert!(h.query_by_label("Save as PDF").is_none(), "not offered as the choice while looking"); drop(hold); let deadline = std::time::Instant::now() + std::time::Duration::from_secs(10); while h.state().print_draft.printers_loading && std::time::Instant::now() < deadline { @@ -401,3 +407,20 @@ fn print_as_image_is_an_advanced_choice_that_saves_pictures() { assert_eq!(pictures, 1, "the page is one picture"); let _ = std::fs::remove_file(out); } + +/// The spooler answering with no printers at all says so (#160), and Save as PDF still works. +#[test] +fn an_empty_printer_list_says_none_were_found() { + use std::sync::Arc; + let mut h = harness(); + h.state_mut().printer_source = Some(Arc::new(Vec::new)); + assert!(h.state_mut().execute("print.dialog")); + let deadline = std::time::Instant::now() + std::time::Duration::from_secs(10); + while h.state().print_draft.printers_loading && std::time::Instant::now() < deadline { + h.run_steps(1); + std::thread::sleep(std::time::Duration::from_millis(5)); + } + h.run_steps(2); + h.get_by_label_contains("No printers were found"); + assert!(!h.get_by_role_and_label(Role::Button, "Save as PDF").accesskit_node().is_disabled()); +}