From 2f39e51e1cf998aeb134bf9d04a3066f4cf81d68 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 21 Sep 2024 12:58:12 +0200 Subject: [PATCH 01/22] Fix for #3151 (Invalid amazon link for uk) --- cps/db.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cps/db.py b/cps/db.py index 33b195fa..557fdc75 100644 --- a/cps/db.py +++ b/cps/db.py @@ -114,7 +114,7 @@ class Identifiers(Base): if format_type == 'amazon': return "Amazon" elif format_type.startswith("amazon_"): - return "Amazon.{0}".format(format_type[7:]) + return "Amazon.{0}".format(format_type[7:].lower().replace("uk","co.uk")) elif format_type == "isbn": return "ISBN" elif format_type == "doi": @@ -149,7 +149,7 @@ class Identifiers(Base): if format_type == "amazon" or format_type == "asin": return "https://amazon.com/dp/{0}".format(self.val) elif format_type.startswith('amazon_'): - return "https://amazon.{0}/dp/{1}".format(format_type[7:], self.val) + return "https://amazon.{0}/dp/{1}".format(format_type[7:].lower().replace("uk","co.uk"), self.val) elif format_type == "isbn": return "https://www.worldcat.org/isbn/{0}".format(self.val) elif format_type == "doi": From eb6563480f306dbf123d10645d097bffd4084157 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 21 Sep 2024 13:01:48 +0200 Subject: [PATCH 02/22] Fix #3153 (In Firefox, Github OAuth login goes into infinite redirect loops) --- cps/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/__init__.py b/cps/__init__.py index 8b1fecdd..7f2a6b13 100644 --- a/cps/__init__.py +++ b/cps/__init__.py @@ -86,7 +86,7 @@ log = logger.create() app = Flask(__name__) app.config.update( SESSION_COOKIE_HTTPONLY=True, - SESSION_COOKIE_SAMESITE='Strict', + SESSION_COOKIE_SAMESITE='Lax', REMEMBER_COOKIE_SAMESITE='Strict', WTF_CSRF_SSL_STRICT=False, SESSION_COOKIE_NAME=os.environ.get('COOKIE_PREFIX', "") + "session", From 1eb9cd44dcbdd873df00de3fa42b02e0b3ddfa2f Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 21 Sep 2024 13:12:48 +0200 Subject: [PATCH 03/22] Improve message on error cover downlaod --- cps/editbooks.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cps/editbooks.py b/cps/editbooks.py index 6eefc61f..2d323a52 100644 --- a/cps/editbooks.py +++ b/cps/editbooks.py @@ -501,6 +501,7 @@ def do_edit_book(book_id, upload_formats=None): modify_date = True helper.replace_cover_thumbnail_cache(book.id) else: + edit_error = True flash(error, category="error") # Add default series_index to book From 94df767c28858376164cfaf380ef5ee39a476c92 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Thu, 26 Sep 2024 19:46:35 +0200 Subject: [PATCH 04/22] Reupdate slovenian translation --- cps/iso_language_names.py | 378 ++++++++++++++++++ cps/translations/cs/LC_MESSAGES/messages.mo | Bin 35302 -> 35302 bytes cps/translations/cs/LC_MESSAGES/messages.po | 50 +-- cps/translations/de/LC_MESSAGES/messages.mo | Bin 64361 -> 64361 bytes cps/translations/de/LC_MESSAGES/messages.po | 50 +-- cps/translations/el/LC_MESSAGES/messages.mo | Bin 51763 -> 51763 bytes cps/translations/el/LC_MESSAGES/messages.po | 50 +-- cps/translations/es/LC_MESSAGES/messages.mo | Bin 45980 -> 45980 bytes cps/translations/es/LC_MESSAGES/messages.po | 50 +-- cps/translations/fi/LC_MESSAGES/messages.mo | Bin 24379 -> 24379 bytes cps/translations/fi/LC_MESSAGES/messages.po | 50 +-- cps/translations/fr/LC_MESSAGES/messages.mo | Bin 50105 -> 50105 bytes cps/translations/fr/LC_MESSAGES/messages.po | 50 +-- cps/translations/gl/LC_MESSAGES/messages.mo | Bin 55266 -> 55266 bytes cps/translations/gl/LC_MESSAGES/messages.po | 50 +-- cps/translations/hu/LC_MESSAGES/messages.mo | Bin 22318 -> 22318 bytes cps/translations/hu/LC_MESSAGES/messages.po | 50 +-- cps/translations/id/LC_MESSAGES/messages.mo | Bin 52981 -> 52981 bytes cps/translations/id/LC_MESSAGES/messages.po | 50 +-- cps/translations/it/LC_MESSAGES/messages.mo | Bin 65482 -> 65482 bytes cps/translations/it/LC_MESSAGES/messages.po | 50 +-- cps/translations/ja/LC_MESSAGES/messages.mo | Bin 58539 -> 58539 bytes cps/translations/ja/LC_MESSAGES/messages.po | 50 +-- cps/translations/km/LC_MESSAGES/messages.mo | Bin 22151 -> 22151 bytes cps/translations/km/LC_MESSAGES/messages.po | 50 +-- cps/translations/ko/LC_MESSAGES/messages.mo | Bin 55727 -> 55727 bytes cps/translations/ko/LC_MESSAGES/messages.po | 50 +-- cps/translations/nl/LC_MESSAGES/messages.mo | Bin 52044 -> 52044 bytes cps/translations/nl/LC_MESSAGES/messages.po | 50 +-- cps/translations/no/LC_MESSAGES/messages.mo | Bin 35716 -> 35716 bytes cps/translations/no/LC_MESSAGES/messages.po | 50 +-- cps/translations/pl/LC_MESSAGES/messages.mo | Bin 46875 -> 46875 bytes cps/translations/pl/LC_MESSAGES/messages.po | 50 +-- cps/translations/pt/LC_MESSAGES/messages.mo | Bin 57976 -> 57976 bytes cps/translations/pt/LC_MESSAGES/messages.po | 50 +-- .../pt_BR/LC_MESSAGES/messages.mo | Bin 55447 -> 55447 bytes .../pt_BR/LC_MESSAGES/messages.po | 50 +-- cps/translations/ru/LC_MESSAGES/messages.mo | Bin 42714 -> 42714 bytes cps/translations/ru/LC_MESSAGES/messages.po | 50 +-- cps/translations/sk/LC_MESSAGES/messages.mo | Bin 61569 -> 61569 bytes cps/translations/sk/LC_MESSAGES/messages.po | 50 +-- cps/translations/sl/LC_MESSAGES/messages.mo | Bin 63561 -> 63618 bytes cps/translations/sl/LC_MESSAGES/messages.po | 50 +-- cps/translations/sv/LC_MESSAGES/messages.mo | Bin 44138 -> 44138 bytes cps/translations/sv/LC_MESSAGES/messages.po | 50 +-- cps/translations/tr/LC_MESSAGES/messages.mo | Bin 20029 -> 20029 bytes cps/translations/tr/LC_MESSAGES/messages.po | 50 +-- cps/translations/uk/LC_MESSAGES/messages.mo | Bin 22409 -> 22409 bytes cps/translations/uk/LC_MESSAGES/messages.po | 50 +-- cps/translations/vi/LC_MESSAGES/messages.mo | Bin 29331 -> 29331 bytes cps/translations/vi/LC_MESSAGES/messages.po | 50 +-- .../zh_Hans_CN/LC_MESSAGES/messages.mo | Bin 54898 -> 54898 bytes .../zh_Hans_CN/LC_MESSAGES/messages.po | 50 +-- .../zh_Hant_TW/LC_MESSAGES/messages.mo | Bin 43920 -> 43920 bytes .../zh_Hant_TW/LC_MESSAGES/messages.po | 50 +-- messages.pot | 50 +-- 56 files changed, 1078 insertions(+), 700 deletions(-) diff --git a/cps/iso_language_names.py b/cps/iso_language_names.py index 4b9a8ef9..9248443e 100644 --- a/cps/iso_language_names.py +++ b/cps/iso_language_names.py @@ -8138,6 +8138,384 @@ LANGUAGE_NAMES = { "zul": "Zulu", "zun": "Zuni" }, + "sl": { + "abk": "abhazijski", + "ace": "achinese", + "ach": "Acoli", + "ada": "Adangme", + "ady": "Adyghe", + "aar": "afarski", + "afh": "Afrihili", + "afr": "afrikanski", + "ain": "Ainu (Japan)", + "aka": "Akan", + "akk": "akadski", + "sqi": "albanščina", + "ale": "aleutski", + "amh": "amharski", + "anp": "Angika", + "ara": "arabski", + "arg": "aragonski", + "arp": "Arapaho", + "arw": "araukanski", + "hye": "armenščina", + "asm": "asamski", + "ast": "Asturian", + "ava": "avarski", + "ave": "avestijski jeziki", + "awa": "Awadhi", + "aym": "Aymara", + "aze": "azerbajdžanski", + "ban": "balijščina", + "bal": "belučijski", + "bam": "bambarski", + "bas": "Basa (Cameroon)", + "bak": "baškirski", + "eus": "baskovščina", + "bej": "Beja", + "bel": "beloruščina", + "bem": "Bemba (Zambia)", + "ben": "bengalščina", + "bit": "Berinomo", + "bho": "Bhojpuri", + "bik": "bikolščina", + "byn": "Bilin", + "bin": "Bini", + "bis": "bislama", + "zbl": "Blissymbols", + "bos": "bošnjaščina", + "bra": "Braj", + "bre": "bretonščina", + "bug": "buginščina", + "bul": "bolgarščina", + "bua": "burjatščina", + "mya": "burmanščina", + "cad": "kadajščina?", + "cat": "katalonščina", + "ceb": "cebuanščina", + "chg": "Chagatai", + "cha": "čamorščina", + "che": "čečenščina", + "chr": "čerokeščina", + "chy": "čejenščina", + "chb": "čibčevščina", + "zho": "kitajščina", + "chn": "Chinook jargon", + "chp": "čipevščina", + "cho": "Choctaw", + "cht": "Cholón", + "chk": "Chuukese", + "chv": "čuvaščina", + "cop": "koptščina", + "cor": "kornijščina", + "cos": "korzijščina", + "cre": "krijščina", + "mus": "Creek", + "hrv": "hrvaščina", + "ces": "češčina", + "dak": "Dakota", + "dan": "danski", + "dar": "Dargwa", + "del": "Delaware", + "div": "Dhivehi", + "din": "Dinka", + "doi": "Dogri (macrolanguage)", + "dgr": "Dogrib", + "dua": "Duala", + "nld": "nizozemščina", + "dse": "Dutch Sign Language", + "dyu": "Dyula", + "dzo": "dzongkha", + "efi": "Efik", + "egy": "egipčanski", + "eka": "Ekajuk", + "elx": "elamščina", + "eng": "angleščina", + "enu": "Enu", + "myv": "Erzya", + "epo": "esperanto", + "est": "estonščina", + "ewe": "evenščina", + "ewo": "Ewondo", + "fan": "Fang (Equatorial Guinea)", + "fat": "Fanti", + "fao": "ferščina", + "fij": "fidžijščina", + "fil": "Filipino", + "fin": "finščina", + "fon": "Fon", + "fra": "francoščina", + "fur": "furlanščina", + "ful": "fulščina", + "gaa": "Ga", + "glg": "Galician", + "lug": "Ganda", + "gay": "gajščina?", + "gba": "Gbaya (Central African Republic)", + "hmj": "Ge", + "gez": "etiopščina?", + "kat": "gruzinščina", + "deu": "nemški", + "gil": "gilbertščina", + "gon": "Gondi", + "gor": "Gorontalo", + "got": "gotščina", + "grb": "Grebo", + "grn": "gvaranijščina", + "guj": "gudžaratščina", + "gwi": "Gwichʼin", + "hai": "haidščina", + "hau": "havščina", + "haw": "havajščina", + "heb": "hebrejščina", + "her": "Herero", + "hil": "hilingajnonščina", + "hin": "hindijščina", + "hmo": "hiri motu", + "hit": "hetitščina", + "hmn": "hmonščina; miaojščina", + "hun": "madžarščina", + "hup": "hupščina", + "iba": "ibanščina", + "isl": "islandščina", + "ido": "Ido", + "ibo": "Igbo", + "ilo": "Iloko", + "ind": "indonezijščina", + "inh": "inguščina", + "ina": "interlingva", + "ile": "Interlingue", + "iku": "inuktituščina", + "ipk": "Inupiaq", + "gle": "irščina", + "ita": "italijanščina", + "jpn": "japonščina", + "jav": "javanščina", + "jrb": "Judeo-Arabic", + "jpr": "Judeo-Persian", + "kbd": "kabardinščina", + "kab": "Kabyle", + "kac": "Kachin", + "kal": "Kalaallisut", + "xal": "Kalmyk", + "kam": "Kamba (Kenya)", + "kan": "kanareščina", + "kau": "Kanuri", + "kaa": "Kara-Kalpak", + "krc": "Karachay-Balkar", + "krl": "Karelian", + "kas": "kašmirščina", + "csb": "Kashubian", + "kaw": "kavi", + "kaz": "kazaščina", + "kha": "Khasi", + "kho": "Khotanese", + "kik": "kikujščina", + "kmb": "Kimbundu", + "kin": "Kinyarwanda", + "kir": "kirgiščina", + "tlh": "Klingon", + "kom": "komijščina", + "kon": "Kongo", + "kok": "Konkani (macrolanguage)", + "kor": "korejščina", + "kos": "Kosraean", + "kpe": "Kpelle", + "kua": "Kuanyama", + "kum": "kumiščina", + "kur": "kurdščina", + "kru": "Kurukh", + "kut": "kutenajščina", + "lad": "ladinščina", + "lah": "Lahnda", + "lam": "Lamba", + "lao": "laoščina", + "lat": "latinščina", + "lav": "latvijščina", + "lez": "lezginščina", + "lim": "Limburgan", + "lin": "lingala", + "lit": "litvanščina", + "jbo": "Lojban", + "loz": "Lozi", + "lub": "Luba-Katanga", + "lua": "lubalulujščina", + "lui": "Luiseno", + "smj": "Lule Sami", + "lun": "Lunda", + "luo": "Luo (Kenya and Tanzania)", + "lus": "Lushai", + "ltz": "Luxembourgish", + "mkd": "makedonščina", + "mad": "madurščina", + "mag": "Magahi", + "mai": "Maithili", + "mak": "makasarščina", + "mlg": "malgaščina", + "msa": "Malay (macrolanguage)", + "mal": "malajalščina", + "mlt": "malteščina", + "mnc": "Manchu", + "mdr": "Mandar", + "man": "Mandingo", + "mni": "manipurščina", + "glv": "manska gelščina", + "mri": "maorščina", + "arn": "Mapudungun", + "mar": "maratščina", + "chm": "Mari (Russia)", + "mah": "Marshallese", + "mwr": "Marwari", + "mas": "masajščina", + "men": "Mende (Sierra Leone)", + "mic": "Mi'kmaq", + "min": "Minangkabau", + "mwl": "Mirandese", + "moh": "mohoščina", + "mdf": "Moksha", + "lol": "Mongo", + "mon": "mongolščina", + "mos": "mosanščina", + "mul": "Več jezikov", + "nqo": "N'Ko", + "nau": "Nauru", + "nav": "navaščina", + "ndo": "Ndonga", + "nap": "napolitanščina", + "nia": "niaščina", + "niu": "niuejščina", + "zxx": "No linguistic content", + "nog": "Nogai", + "nor": "norveščina", + "nob": "Norwegian Bokmål", + "nno": "norveščina; nynorsk", + "nym": "Nyamwezi", + "nya": "Nyanja", + "nyn": "Nyankole", + "nyo": "Nyoro", + "nzi": "Nzima", + "oci": "Occitan (post 1500)", + "oji": "Ojibwa", + "orm": "Oromo", + "osa": "Osage", + "oss": "Ossetian", + "pal": "Pahlavi", + "pau": "palavanščina", + "pli": "Pali", + "pam": "Pampanga", + "pag": "pangasinanščina", + "pan": "Panjabi", + "pap": "papiamentu", + "fas": "perzijščina", + "phn": "feničanščina", + "pon": "Pohnpeian", + "pol": "poljščina", + "por": "portugalđščina", + "pus": "paštu", + "que": "Quechua", + "raj": "radžastanščina", + "rap": "rapanujščina", + "ron": "romunščina", + "roh": "Romansh", + "rom": "romščina", + "run": "rundščina", + "rus": "ruščina", + "smo": "samoanščina", + "sad": "Sandawe", + "sag": "Sango", + "san": "sanskrt", + "sat": "santalščina", + "srd": "sardinščina", + "sas": "Sasak", + "sco": "škotščina", + "sel": "selkupščina", + "srp": "srbščina", + "srr": "Serer", + "shn": "šanščina", + "sna": "šonščina", + "scn": "sicilijanščina", + "sid": "Sidamo", + "bla": "Siksika", + "snd": "sindščina", + "sin": "Sinhala", + "den": "Slave (Athapascan)", + "slk": "slovaščina", + "slv": "slovenščina", + "sog": "Sogdian", + "som": "Somali", + "snk": "Soninke", + "spa": "španščina", + "srn": "Sranan Tongo", + "suk": "Sukuma", + "sux": "sumerščina", + "sun": "sundščina", + "sus": "susuamijščina?", + "swa": "Swahili (macrolanguage)", + "ssw": "svazijščina?", + "swe": "švedščina", + "syr": "sirščina", + "tgl": "tagaloščina", + "tah": "tahitijščina", + "tgk": "tadžiščina", + "tmh": "Tamashek", + "tam": "tamilščina", + "tat": "tatarščina", + "tel": "Telugu", + "ter": "Tereno", + "tet": "Tetum", + "tha": "tajščina", + "bod": "tibetanščina", + "tig": "Tigre", + "tir": "Tigrinya", + "tem": "Timne", + "tiv": "Tiv", + "tli": "Tlingit", + "tpi": "tok pisin", + "tkl": "Tokelau", + "tog": "Tonga (Nyasa)", + "ton": "tonganščina", + "tsi": "tsimšijščina", + "tso": "Tsonga", + "tsn": "Tswana", + "tum": "Tumbuka", + "tur": "turščina", + "tuk": "turkmenščina", + "tvl": "tuvalujščina", + "tyv": "Tuvinian", + "twi": "Twi", + "udm": "Udmurt", + "uga": "ugaritščina", + "uig": "ujgurščina", + "ukr": "ukrajinščina", + "umb": "Umbundu", + "mis": "Uncoded languages", + "und": "nedoločen", + "urd": "urdujščina", + "uzb": "uzbeščina", + "vai": "vajščina", + "ven": "Venda", + "vie": "vietnamščina", + "vol": "Volapük", + "vot": "votjaščina", + "wln": "valonščina", + "war": "Waray (Philippines)", + "was": "Washo", + "cym": "valižanščina", + "wal": "Wolaytta", + "wol": "Wolof", + "xho": "koščina", + "sah": "jakutščina", + "yao": "jaojščina", + "yap": "Yapese", + "yid": "jidiš", + "yor": "jorubščina", + "zap": "Zapotec", + "zza": "Zaza", + "zen": "Zenaga", + "zha": "Zhuang", + "zul": "zulujščina", + "zun": "Zuni" + }, "sv": { "aar": "Afar", "abk": "Abchaziska", diff --git a/cps/translations/cs/LC_MESSAGES/messages.mo b/cps/translations/cs/LC_MESSAGES/messages.mo index 60dbc4be0e103e10432231f27627dadeb06483ca..bf6681051eac11e6879a41448a02d9b72e27b0fc 100644 GIT binary patch delta 22 ecmaDhnd#YNrVV}m>}CpvmR2Ulo2U8*S^)rOcL)vu delta 22 ecmaDhnd#YNrVV}m?1l=4Mpg!<9n= diff --git a/cps/translations/cs/LC_MESSAGES/messages.po b/cps/translations/cs/LC_MESSAGES/messages.po index 205e9fd0..a85860c1 100644 --- a/cps/translations/cs/LC_MESSAGES/messages.po +++ b/cps/translations/cs/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-09-21 12:05+0200\n" +"POT-Creation-Date: 2024-09-26 19:43+0200\n" "PO-Revision-Date: 2020-06-09 21:11+0100\n" "Last-Translator: Lukas Heroudek \n" "Language: cs_CZ\n" @@ -44,8 +44,8 @@ msgstr "Neznámý příkaz" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Kniha byla úspěšně zařazena do fronty pro odeslání na %(eReadermail)s" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Neznámý" @@ -295,7 +295,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -565,96 +565,96 @@ msgstr "Kniha byla úspěšně zařazena do fronty pro převod do %(book_format) msgid "There was an error converting this book: %(res)s" msgstr "Při převodu této knihy došlo k chybě: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Jejda! Vybraná kniha není k dispozici. Soubor neexistuje nebo není přístupný" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, fuzzy, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s není platným jazykem" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadata úspěšně aktualizována" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "Nahraná kniha pravděpodobně existuje v knihovně, zvažte prosím změnu před nahráním nové: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "Soubor s příponou '%(ext)s' nelze odeslat na tento server" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Soubor s příponou '%(ext)s' nelze odeslat na tento server" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "Soubor, který má být odeslán musí mít příponu" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "Soubor %(filename)s nemohl být uložen do dočasného adresáře" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Nepodařilo se přesunout soubor obalu %(file)s: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Formát knihy úspěšně smazán" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Kniha úspěšně smazána" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "upravit metadata" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Nepodařilo se vytvořit cestu %(path)s (oprávnění odepřeno)." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Uložení souboru %(file)s se nezdařilo." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Formát souboru %(ext)s přidán do %(book)s" diff --git a/cps/translations/de/LC_MESSAGES/messages.mo b/cps/translations/de/LC_MESSAGES/messages.mo index 42453d973088bc810de5ca8b4f3705602451fb0b..77db4d6b1f791cbe2ae544bcf440d0c8dfb418ca 100644 GIT binary patch delta 22 ecmaF)jrrv_<_(*A+07ITEv-z9H}CA-kP85Q=L#|a delta 22 ecmaF)jrrv_<_(*A*$ov8jjRkzH}CA-kP85QTnZ!r diff --git a/cps/translations/de/LC_MESSAGES/messages.po b/cps/translations/de/LC_MESSAGES/messages.po index bb8e229e..389701e3 100644 --- a/cps/translations/de/LC_MESSAGES/messages.po +++ b/cps/translations/de/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-09-21 12:05+0200\n" +"POT-Creation-Date: 2024-09-26 19:43+0200\n" "PO-Revision-Date: 2024-08-17 13:49+0200\n" "Last-Translator: Ozzie Isaacs\n" "Language: de\n" @@ -42,8 +42,8 @@ msgstr "Unbekannter Befehl" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Bücher wurden für Metadaten Backup eingereiht, für das Ergebnis bitte Aufgaben überprüfen" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Unbekannt" @@ -287,7 +287,7 @@ msgstr "G-Mail Konto verifiziert." #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -551,95 +551,95 @@ msgstr "Buch wurde erfolgreich für die Konvertierung nach %(book_format)s einge msgid "There was an error converting this book: %(res)s" msgstr "Es trat ein Fehler beim Konvertieren des Buches auf: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Öffnen des Buchs fehlgeschlagen. Datei existiert nicht oder ist nicht zugänglich" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "Benutzer hat keine Berechtigung Cover hochzuladen" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "IDs unterscheiden nicht Groß-Kleinschreibung, alte ID wird überschrieben" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "'%(langname)s' ist keine gültige Sprache" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadaten wurden erfolgreich aktualisiert" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "Fehler beim editieren des Buches: {}" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "Das hochgeladene Buch existiert evtl. schon in der Bibliothek: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 msgid "File type isn't allowed to be uploaded to this server" msgstr "Dateityp kann nicht auf diesen Server hochgeladen werden" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Dateiendung '%(ext)s' kann nicht auf diesen Server hochgeladen werden" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "Dateien müssen eine Erweiterung haben, um hochgeladen zu werden" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "Die Datei %(filename)s konnte nicht im temporären Ordner gespeichert werden" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Fehler beim Verschieben der Cover Datei %(file)s: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Buch Format erfolgreich gelöscht" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Buch erfolgreich gelöscht" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "Keine Erlaubnis zum Bücher löschen" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "Metadaten editieren" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "Serien index %(seriesindex)s ist keine gültige Zahl, Eintrag wird ignoriert" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "Benutzer hat kein Recht zusätzliche Dateiformate hochzuladen" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Fehler beim Erzeugen des Pfads %(path)s (Zugriff verweigert)" -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Fehler beim Speichern der Datei %(file)s." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Dateiformat %(ext)s zu %(book)s hinzugefügt" diff --git a/cps/translations/el/LC_MESSAGES/messages.mo b/cps/translations/el/LC_MESSAGES/messages.mo index 9d1e19f5f05aa70b3cd15477578c0095108e3c80..19776ae7546589966e5c08e5cc9ce89dc8151074 100644 GIT binary patch delta 22 dcmdlyg?aN7<_&zI>}CpvmR2Uln?*zAN&!|=2EYIS delta 22 dcmdlyg?aN7<_&zI?1l=4Mpg!}CpvmR2Ulo4Znk`~hf`2n+xK delta 22 dcmbR9oN3N;rVY(0?1l=4Mpg!\n" "Language: es\n" @@ -48,8 +48,8 @@ msgstr "Comando desconocido" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Puesto en cola un correo electrónico de prueba enviado a %(email)s, por favor, comprueba el resultado en Tareas" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Desconocido" @@ -299,7 +299,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -569,96 +569,96 @@ msgstr "Libro puesto a la cola para su conversión a %(book_format)s" msgid "There was an error converting this book: %(res)s" msgstr "Ocurrió un error al convertir este libro: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "oh, oh, el libro seleccionado no está disponible. El archivo no existe o no es accesible" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "Los identificadores no distinguen entre mayúsculas y minúsculas, sobrescribiendo el identificador antiguo" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, fuzzy, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s no es un idioma válido" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadatos actualizados con éxito" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "El libro cargado probablemente existe en la biblioteca, considera cambiarlo antes de subirlo de nuevo: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "No se permite subir archivos con la extensión '%(ext)s' a este servidor" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "No se permite subir archivos con la extensión '%(ext)s' a este servidor" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "El archivo a subir debe tener una extensión" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "El archivo %(filename)s no pudo salvarse en el directorio temporal (Temp Dir)" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Fallo al mover el archivo de cubierta %(file)s: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Formato de libro eliminado con éxito" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Libro eliminado con éxito" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "editar metadatos" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex) no es un número válido, saltando" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Fallo al crear la ruta %(path)s (permiso denegado)" -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Fallo al guardar el archivo %(file)s." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Archivo con formato %(ext)s añadido a %(book)s" diff --git a/cps/translations/fi/LC_MESSAGES/messages.mo b/cps/translations/fi/LC_MESSAGES/messages.mo index e9af683b9f22b24d52e351def888705dc886d300..9ea0798a4d209d92bbb6cdd8a68d4f3d3c2f616e 100644 GIT binary patch delta 22 ecmdnJk8$@t#tq#T>}CpvmR2Uln\n" "Language: fi\n" @@ -45,8 +45,8 @@ msgstr "" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Kirja lisätty onnistuneeksi lähetettäväksi osoitteeseen %(eReadermail)s" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Tuntematon" @@ -295,7 +295,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -563,96 +563,96 @@ msgstr "Kirja lisätty muutosjonoon muotoon %(book_format)s" msgid "There was an error converting this book: %(res)s" msgstr "Kirjan muunnoksessa tapahtui virhe: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Virhe eKirjan avaamisessa. Tiedostoa ei ole tai se ei ole saatavilla:" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, fuzzy, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s ei ole kelvollinen kieli" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadata päivitetty onnistuneesti" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "" -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "Tiedostopääte '%(ext)s' ei ole sallittujen palvelimelle ladattavien listalla" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Tiedostopääte '%(ext)s' ei ole sallittujen palvelimelle ladattavien listalla" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "Ladattavalla tiedostolla on oltava tiedostopääte" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "muokkaa metadataa" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Polun %(path)s luonti epäonnistui (Ei oikeutta)." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Tiedoston %(file)s tallennus epäonnistui." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Tiedostoformaatti %(ext)s lisätty %(book)s" diff --git a/cps/translations/fr/LC_MESSAGES/messages.mo b/cps/translations/fr/LC_MESSAGES/messages.mo index b4dd08692ff56cd58c7ae55d5d7254cf8de82203..1d9250f3458ab74c4adb8674dacf410a66aa22fa 100644 GIT binary patch delta 21 ccmdnl&b+godBe|ib~6P-ODhxOO&L3*0bW`NEdT%j delta 21 ccmdnl&b+godBe|ic0&b2BP#>bO&L3*0bSh)9{>OV diff --git a/cps/translations/fr/LC_MESSAGES/messages.po b/cps/translations/fr/LC_MESSAGES/messages.po index 7308db54..e60a347f 100644 --- a/cps/translations/fr/LC_MESSAGES/messages.po +++ b/cps/translations/fr/LC_MESSAGES/messages.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2024-09-21 12:05+0200\n" +"POT-Creation-Date: 2024-09-26 19:43+0200\n" "PO-Revision-Date: 2020-06-07 06:47+0200\n" "Last-Translator: \n" "Language: fr\n" @@ -60,8 +60,8 @@ msgstr "Commande inconnue" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Teste les courriels en file d’attente pour l’envoi à %(email)s, veuillez vérifier le résultat des tâches" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Inconnu" @@ -311,7 +311,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -581,96 +581,96 @@ msgstr "Le livre a été mis avec succès en file de traitement pour conversion msgid "There was an error converting this book: %(res)s" msgstr "Une erreur est survenue au cours de la conversion du livre : %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Erreur d'ouverture du livre numérique. Le fichier n'existe pas ou n'est pas accessible" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "Les identificateurs ne sont pas sensibles à la casse, écrasant l’ancien identificateur" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, fuzzy, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s n'est pas une langue valide" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Les métadonnées ont bien été mises à jour" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "Le fichier téléchargé existe probablement dans la librairie, veuillez le modifier avant de le télécharger de nouveau: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "L’extension de fichier '%(ext)s' n’est pas autorisée pour être déposée sur ce serveur" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "L’extension de fichier '%(ext)s' n’est pas autorisée pour être déposée sur ce serveur" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "Pour être déposé le fichier doit avoir une extension" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "Le fichier %(filename)s ne peut pas être sauvegardé dans le répertoire temporaire" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Impossible de déplacer le fichier de couverture %(file)s: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Le format du livre a été supprimé avec succès" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Le livre a été supprimé avec succès" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "Vous n’avez par les permissions pour supprimer les livres" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "modifier les métadonnées" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex)s n’est pas un nombre valide, ignoré" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Impossible de créer le chemin %(path)s (Permission refusée)." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Échec de la sauvegarde du fichier %(file)s." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Le format de fichier %(ext)s a été ajouté à %(book)s" diff --git a/cps/translations/gl/LC_MESSAGES/messages.mo b/cps/translations/gl/LC_MESSAGES/messages.mo index bb3a54321d9a2c590787b1f8544c0affb258fe4e..922975f13e182657f7ebf0de42cb4f80250b9708 100644 GIT binary patch delta 22 dcmaE~p83&w<_-Rp>}CpvmR2Ulo5L!5;s9y$2z3Ae delta 22 dcmaE~p83&w<_-Rp?1l=4Mpg!\n" "Language: gl\n" @@ -43,8 +43,8 @@ msgstr "Orde descoñecida" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Posto en cola un correo electrónico de proba enviado a %(email)s, por favor, comproba o resultado nas Tarefas" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Descoñecido" @@ -288,7 +288,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -553,96 +553,96 @@ msgstr "Libro posto na cola para a súa conversión a %(book_format)s" msgid "There was an error converting this book: %(res)s" msgstr "Houbo un erro ao convertir este libro: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "oh, oh, o libro seleccionado non está disponible. O arquivo non existe ou non está accesible" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "O usuario non ten permisos para subir a cuberta" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "Os identificadores non distinguen entre maiúsculas e minúsculas, sobrescribindo o identificador antigo" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s non é unha lingua válida" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadatos actualizados con éxito" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "Erro editando libro: {}" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "O libro cargado probablemente existe na biblioteca, considera cambialo antes de subilo outra vez: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "Non se permite subir arquivos coa extensión '%(ext)s' a este servidor" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Non se permite subir arquivos coa extensión '%(ext)s' a este servidor" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "O arquivo que se vai cargar debe ter unha extensión" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "El archivo %(filename)s non puido gravarse no directorio temporal (Temp Dir)" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Fallo ao mover o arquivo de cuberta %(file)s: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Formato de libro eliminado con éxito" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Libro eliminado con éxito" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "Vostede non ten permisos para borrar libros" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "editar metadatos" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex)s non é un número válido, saltando" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "O usuario non ten permisos para cargar formatos de ficheiro adicionais" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Fallo ao crear a ruta %(path)s (permiso denegado)" -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Fallo ao gardar o arquivo %(file)s." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Arquivo con formato %(ext)s engadido a %(book)s" diff --git a/cps/translations/hu/LC_MESSAGES/messages.mo b/cps/translations/hu/LC_MESSAGES/messages.mo index 980b601cfc1c0e050059ac2b52555788bf3a551f..88fe8caaecd9ce8b0bb156dc555c136fb2d8ae30 100644 GIT binary patch delta 22 ecmZ3tj&a>O#tjP%*v%9SEv-z9H?J^gQv(2ECkNXA delta 22 ecmZ3tj&a>O#tjP%*bNm7jjRkzH?J^gQv(2DoCnPS diff --git a/cps/translations/hu/LC_MESSAGES/messages.po b/cps/translations/hu/LC_MESSAGES/messages.po index 17ffc9fb..3c0b812d 100644 --- a/cps/translations/hu/LC_MESSAGES/messages.po +++ b/cps/translations/hu/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2024-09-21 12:05+0200\n" +"POT-Creation-Date: 2024-09-26 19:43+0200\n" "PO-Revision-Date: 2019-04-06 23:36+0200\n" "Last-Translator: \n" "Language: hu\n" @@ -44,8 +44,8 @@ msgstr "" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Ismeretlen" @@ -294,7 +294,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -562,96 +562,96 @@ msgstr "A könyv sikeresen átalakításra lett jelölve a következő formátum msgid "There was an error converting this book: %(res)s" msgstr "Hiba történt a könyv átalakításakor: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Hiba történt az e-könyv megnyitásakor. A fájl nem létezik vagy nem érhető el:" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, fuzzy, python-format msgid "'%(langname)s' is not a valid language" msgstr "A(z) %(langname)s nem érvényes nyelv" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "A metaadatok sikeresen frissültek" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "" -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "A(z) \"%(ext)s\" kiterjesztésű fájlok feltöltése nincs engedélyezve ezen a szerveren." -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "A(z) \"%(ext)s\" kiterjesztésű fájlok feltöltése nincs engedélyezve ezen a szerveren." -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "A feltöltendő fájlnak kiterjesztéssel kell rendelkeznie!" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "Metaadatok szerkesztése" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Nem sikerült létrehozni az elérési utat (engedély megtagadva): %(path)s." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Nem sikerült elmenteni a %(file)s fájlt." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "A(z) %(ext)s fájlformátum hozzáadva a könyvhez: %(book)s." diff --git a/cps/translations/id/LC_MESSAGES/messages.mo b/cps/translations/id/LC_MESSAGES/messages.mo index d09d5f88dab61ede6f7d5501164839a918c49f4f..73b3d53a82ced1de8a7f092ba026401167d07af8 100644 GIT binary patch delta 22 ecmex5m-*{l<_+^I+07ITEv-z9H!rOW2n7IdoCweW delta 22 ecmex5m-*{l<_+^I*$ov8jjRkzH!rOW2n7Id5eUKn diff --git a/cps/translations/id/LC_MESSAGES/messages.po b/cps/translations/id/LC_MESSAGES/messages.po index 20b3aa3d..77fdbda8 100644 --- a/cps/translations/id/LC_MESSAGES/messages.po +++ b/cps/translations/id/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-09-21 12:05+0200\n" +"POT-Creation-Date: 2024-09-26 19:43+0200\n" "PO-Revision-Date: 2023-01-21 10:00+0700\n" "Last-Translator: Arief Hidayat\n" "Language: id\n" @@ -45,8 +45,8 @@ msgstr "Perintah tidak diketahui" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Uji email diantrean untuk dikirim ke %(email), harap periksa Tasks untuk hasilnya" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Tidak diketahui" @@ -290,7 +290,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -555,96 +555,96 @@ msgstr "Buku berhasil diantrekan untuk dikonversi ke %(book_format)s" msgid "There was an error converting this book: %(res)s" msgstr "Terjadi kesalahan saat mengonversi buku ini: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Ups! Judul buku yang dipilih tidak tersedia. Berkas tidak ada atau tidak dapat diakses" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "Pengguna tidak berhak mengganti sampul" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "IDは大文字小文字を区別しません。元のIDを上書きします" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "'%(langname)s' bukan bahasa yang valid" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadata berhasil diperbarui" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "Kesalahan pengeditan buku: {}" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "Buku yang diunggah mungkin ada di perpustakaan, pertimbangkan untuk mengubahnya sebelum mengunggah yang baru: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "Ekstensi berkas '%(ext)s' tidak diizinkan untuk diunggah ke server ini" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Ekstensi berkas '%(ext)s' tidak diizinkan untuk diunggah ke server ini" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "Berkas yang akan diunggah harus memiliki ekstensi" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "Berkas %(filename)s tidak dapat disimpan ke direktori temp" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Gagal Memindahkan Berkas Sampul %(file)s: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Format Buku Berhasil Dihapus" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Buku Berhasil Dihapus" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "Anda tidak memiliki izin untuk menghapus buku" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "edit metadata" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex)s dilewati karena bukan angka yang valid" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "Pengguna tidak memiliki izin untuk mengunggah format berkas tambahan" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Gagal membuat jalur %(path)s (Izin ditolak)." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Gagal menyimpan berkas %(file)s." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Format berkas %(ext)s ditambahkan ke %(book)s" diff --git a/cps/translations/it/LC_MESSAGES/messages.mo b/cps/translations/it/LC_MESSAGES/messages.mo index 668e1803b436645b41a497895c971044bea425c5..6b37fc73eab45f8995701118f6d67e9d6502d2cb 100644 GIT binary patch delta 22 ecmX^0pZU~(<_(*A+07ITEv-z9H}C8fECK*}771(s delta 22 ecmX^0pZU~(<_(*A*$ov8jjRkzH}C8fECK*|iwRx; diff --git a/cps/translations/it/LC_MESSAGES/messages.po b/cps/translations/it/LC_MESSAGES/messages.po index 5fcd91f5..9b34d031 100644 --- a/cps/translations/it/LC_MESSAGES/messages.po +++ b/cps/translations/it/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-09-21 12:05+0200\n" +"POT-Creation-Date: 2024-09-26 19:43+0200\n" "PO-Revision-Date: 2024-08-24 05:32+0200\n" "Last-Translator: Massimo Pissarello \n" "Language: it\n" @@ -42,8 +42,8 @@ msgstr "Comando sconosciuto" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Tutto OK! Libri in coda per il backup dei metadati, controlla le attività per il risultato" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Sconosciuto" @@ -287,7 +287,7 @@ msgstr "Tutto OK! Account Gmail verificato." #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -551,95 +551,95 @@ msgstr "Libro accodato correttamente per essere convertito in %(book_format)s" msgid "There was an error converting this book: %(res)s" msgstr "Si è verificato un errore durante la conversione del libro: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Il libro selezionato non è disponibile. Il file non esiste o non è accessibile" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "L'utente non ha i permessi per caricare le copertine" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "Gli identificatori non fanno distinzione tra maiuscole e minuscole e sovrascrivono il vecchio identificatore" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s non è una lingua valida" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadati aggiornati correttamente" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "Errore nella modifica del libro: {}" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "Probabilmente il libro caricato esiste già nella biblioteca, cambialo prima di caricarlo di nuovo:" -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 msgid "File type isn't allowed to be uploaded to this server" msgstr "Non è consentito caricare questo tipo di file su questo server" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Non è consentito caricare l'estensione del file '%(ext)s' su questo server" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "Il file da caricare deve avere un'estensione" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "Il file %(filename)s non può essere salvato nella cartella temporanea" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Impossibile spostare il file della copertina %(file)s: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Il formato del libro è stato eliminato correttamente" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Il libro è stato eliminato correttamente" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "Ti mancano le autorizzazioni per eliminare i libri" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "modifica i metadati" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "Indice serie: %(seriesindex)s non è un numero valido, lo salto" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "L'utente non ha i permessi per caricare formati di file aggiuntivi" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Impossibile creare il percorso %(path)s (autorizzazione negata)." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Impossibile archiviare il file %(file)s." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Formato file %(ext)s aggiunto a %(book)s" diff --git a/cps/translations/ja/LC_MESSAGES/messages.mo b/cps/translations/ja/LC_MESSAGES/messages.mo index 1bfe35924f475c9c054fb5694ef0c9c6d85ad98c..f360a3714d20407700b2f2cf575ea621118036cb 100644 GIT binary patch delta 22 dcmZ2|l6mz><_(&a>}CpvmR2Uln++<_(&a?1l=4Mpg!\n" "Language: ja\n" @@ -45,8 +45,8 @@ msgstr "不明なコマンド" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "%(email)s へのテストメール送信がキューに追加されました。結果を見るにはタスクを確認してください" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "不明" @@ -290,7 +290,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -555,96 +555,96 @@ msgstr "本の %(book_format)s への変換がキューに追加されました" msgid "There was an error converting this book: %(res)s" msgstr "この本の変換中にエラーが発生しました: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "選択した本は利用できません。ファイルが存在しないか、アクセスできません" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "ユーザーは表紙をアップロードする権限がありません" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "IDは大文字小文字を区別しません。元のIDを上書きします" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "'%(langname)s' は有効な言語ではありません" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "メタデータを更新しました" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "本編集中のエラー: {}" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "アップロードした本はすでにライブラリに存在します。新しくアップロードする前に変更を加えてください: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "ファイル拡張子 '%(ext)s' をこのサーバーにアップロードすることは許可されていません" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "ファイル拡張子 '%(ext)s' をこのサーバーにアップロードすることは許可されていません" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "アップロードするファイルには拡張子が必要です" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "ファイル %(filename)s は一時フォルダに保存できませんでした" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "表紙ファイル %(file)s の移動に失敗しました: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "本の形式を削除しました" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "本を削除しました" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "本を削除する権限がありません" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "メタデータを編集" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex)s は有効な数字ではありません。スキップします" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "新たなファイル形式をアップロードする権限がありません" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "%(path)s の作成に失敗しました (Permission denied)。" -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "ファイル %(file)s を保存できません。" -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "ファイル形式 %(ext)s が %(book)s に追加されました" diff --git a/cps/translations/km/LC_MESSAGES/messages.mo b/cps/translations/km/LC_MESSAGES/messages.mo index 634813ff4f089a08abbd28d72fc1523074f15dbf..7abf80db3cd36d1fd4f4889a598b1e5771176854 100644 GIT binary patch delta 22 dcmZo)%h}CpvmR2Uln\n" "Language: ko\n" @@ -44,8 +44,8 @@ msgstr "알 수 없는 명령" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "%(email)s에 테스트를 위한 이메일을 보냄. 결과 확인 필요" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "알 수 없음" @@ -289,7 +289,7 @@ msgstr "Gmail 계정 인증에 성공하였습니다." #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -554,96 +554,96 @@ msgstr "책이 %(book_format)s(으)로 변환하기 위해 대기 중입니다" msgid "There was an error converting this book: %(res)s" msgstr "이 책을 변환하는 동안 오류가 발생했습니다: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "선택한 책 제목을 사용할 수 없습니다. 파일이 존재하지 않거나 액세스할 수 없습니다" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "표지를 업로드 할 수 있는 권한이 없는 사용자입니다." -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "식별자는 대소문자를 구분하지 않으며 이전 식별자를 덮어씁니다" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "'%(langname)s'은(는) 유효한 언어가 아닙니다" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "메타데이터가 성공적으로 업데이트되었습니다" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "책 편집 중 오류 발생: {}" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "업로드한 책이 라이브러리에 있을 수 있음. 새로 업로드하기 전에 확인 필요: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "파일 확장자 '%(ext)s'은(는) 이 서버에 업로드할 수 없습니다" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "파일 확장자 '%(ext)s'은(는) 이 서버에 업로드할 수 없습니다" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "업로드할 파일에는 확장자가 있어야 합니다" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "파일 %(filename)s을(를) 임시 디렉토리에 저장할 수 없습니다" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "표지 파일%(file)s를 이동하지 못했습니다.:%(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "책 형식이 성공적으로 삭제되었습니다" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "책이 성공적으로 삭제되었습니다" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "책을 삭제할 수 있는 권한이 없습니다." -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "메타데이터 편집" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex)s은(는) 유효한 숫자가 아닙니다. 건너뜁니다" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "추가 파일 유형을 업로드 할 권한이 없는 사용자입니다." -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "%(path)s 경로를 생성하지 못했습니다(권한이 없음)." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "%(file)s 파일을 저장하지 못했습니다." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "파일 형식 %(ext)s이(가) %(book)s에 추가되었습니다" diff --git a/cps/translations/nl/LC_MESSAGES/messages.mo b/cps/translations/nl/LC_MESSAGES/messages.mo index 2c0bd8c77e3d963ad67e863e7ed21c4d8f6bcc96..8233eb35e68c3a60146ba322386b93f3d628d9aa 100644 GIT binary patch delta 22 ecmX>zjrq(p<_)Jx*v%9SEv-z9H(xBN4g&ydKnUsp delta 22 ecmX>zjrq(p<_)Jx*bNm7jjRkzH(xBN4g&ycwFuk* diff --git a/cps/translations/nl/LC_MESSAGES/messages.po b/cps/translations/nl/LC_MESSAGES/messages.po index 4aa4a07b..5fa025ec 100644 --- a/cps/translations/nl/LC_MESSAGES/messages.po +++ b/cps/translations/nl/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web (GPLV3)\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-09-21 12:05+0200\n" +"POT-Creation-Date: 2024-09-26 19:43+0200\n" "PO-Revision-Date: 2023-12-20 22:00+0100\n" "Last-Translator: Michiel Cornelissen \n" "Language: nl\n" @@ -46,8 +46,8 @@ msgstr "Onbekende opdracht" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Test E-Mail wordt verzonden naar %(email)s, controleer de taken voor het resultaat" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Onbekend" @@ -296,7 +296,7 @@ msgstr "Gelukt! Gmail account geverifieerd." #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -566,96 +566,96 @@ msgstr "Het boek is in de wachtrij geplaatst voor conversie naar %(book_format)s msgid "There was an error converting this book: %(res)s" msgstr "Er is een fout opgetreden bij het converteren van dit boek: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Oeps! Geselecteerd boek is niet beschikbaar. Bestand bestaat niet of is niet toegankelijk" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "Gebruiker mist rechten om de omslag te uploaden" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "Identificatoren zijn niet hoofdlettergevoelig, overschrijf huidige identificatoren" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, fuzzy, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s is geen geldige taal" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "De metagegevens zijn bijgewerkt" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "Fout tijdens bijwerken van boek: {}" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "Geüpload boek staat mogelijk al in de bibliotheek, controleer alvorens door te gaan: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "De bestandsextensie '%(ext)s' is niet toegestaan op deze server" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "De bestandsextensie '%(ext)s' is niet toegestaan op deze server" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "Het te uploaden bestand moet voorzien zijn van een extensie" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "Bestand %(filename)s kon niet opgeslagen worden in de tijdelijke map" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Omslag %(file)s niet verplaatst: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Het boekformaat is verwijderd" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Het boek is verwijderd" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "U mist rechten om boeken te verwijderen" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "metagegevens bewerken" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex)s is geen geldig nummer, sla het over" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "Gebruiker mist rechten om extra bestandsformaten te uploaden" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Kan de locatie '%(path)s' niet aanmaken (niet gemachtigd)." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Kan %(file)s niet opslaan." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Bestandsformaat %(ext)s toegevoegd aan %(book)s" diff --git a/cps/translations/no/LC_MESSAGES/messages.mo b/cps/translations/no/LC_MESSAGES/messages.mo index 70182d0569e008e69edc7823ce2a4cf27a9ab41c..16029c2dac4e56c82810090450b36d640d3dad7e 100644 GIT binary patch delta 22 ecmZpf&eSrUX~VQYb~6P-ODhxO&2s~vTLJ)DMhE)< delta 22 ecmZpf&eSrUX~VQYc0&b2BP#>b&2s~vTLJ)Cy9ez6 diff --git a/cps/translations/no/LC_MESSAGES/messages.po b/cps/translations/no/LC_MESSAGES/messages.po index 7363e0a8..4664e2d3 100644 --- a/cps/translations/no/LC_MESSAGES/messages.po +++ b/cps/translations/no/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-09-21 12:05+0200\n" +"POT-Creation-Date: 2024-09-26 19:43+0200\n" "PO-Revision-Date: 2023-01-06 11:00+0000\n" "Last-Translator: Vegard Fladby \n" "Language: no\n" @@ -45,8 +45,8 @@ msgstr "Ukjent kommando" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Test e-post i kø for sending til %(email)s, sjekk Oppgaver for resultat" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Ukjent" @@ -291,7 +291,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, fuzzy, python-format @@ -561,97 +561,97 @@ msgstr "Boken ble satt i kø for konvertering til %(book_format)s" msgid "There was an error converting this book: %(res)s" msgstr "Det oppsto en feil ved konvertering av denne boken: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 #, fuzzy msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Oops! Den valgte boktittelen er utilgjengelig. Filen eksisterer ikke eller er ikke tilgjengelig" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "Brukeren har ingen rettigheter til å laste opp cover" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "Identifikatorer skiller ikke mellom store og små bokstaver, overskriver gammel identifikator" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "'%(langname)s' er ikke et gyldig språk" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadata ble oppdatert" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "Feil ved redigering av bok: {}" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "Opplastet bok finnes sannsynligvis i biblioteket, vurder å endre før du laster opp ny: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "Filtypen «%(ext)s» er ikke tillatt å lastes opp til denne serveren" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Filtypen «%(ext)s» er ikke tillatt å lastes opp til denne serveren" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "Filen som skal lastes opp må ha en utvidelse" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "Filen %(filename)s kunne ikke lagres i midlertidig dir" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Kunne ikke flytte omslagsfil %(file)s: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Bokformatet er slettet" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Boken ble slettet" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "Du mangler tillatelser til å slette bøker" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "redigere metadata" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex)s er ikke et gyldig tall, hopper over" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "Brukeren har ingen rettigheter til å laste opp flere filformater" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Kunne ikke opprette banen %(path)s (Tillatelse nektet)." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Kunne ikke lagre filen %(file)s." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Filformat %(ext)s lagt til %(book)s" diff --git a/cps/translations/pl/LC_MESSAGES/messages.mo b/cps/translations/pl/LC_MESSAGES/messages.mo index a1c3c2ec080a3b3e5a92d5618e673fcc5b1cda7a..2a517447a1c77cdc05bf541f3fdef52d9eb627d4 100644 GIT binary patch delta 22 ecmbRJj%oHgrVZQD*v%9SEv-z9H}6f03jhFa00_?j delta 22 ecmbRJj%oHgrVZQD*bNm7jjRkzH}6f03jhFZbqK)# diff --git a/cps/translations/pl/LC_MESSAGES/messages.po b/cps/translations/pl/LC_MESSAGES/messages.po index a93e0313..1ff9df18 100644 --- a/cps/translations/pl/LC_MESSAGES/messages.po +++ b/cps/translations/pl/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre Web - polski (POT: 2021-06-12 08:52)\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2024-09-21 12:05+0200\n" +"POT-Creation-Date: 2024-09-26 19:43+0200\n" "PO-Revision-Date: 2021-06-12 15:35+0200\n" "Last-Translator: Radosław Kierznowski \n" "Language: pl\n" @@ -47,8 +47,8 @@ msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Testowy e-mail czeka w kolejce do wysłania do %(email)s, sprawdź zadania, aby uzyskać wynik" # ??? -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Nieznany" @@ -296,7 +296,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -567,96 +567,96 @@ msgstr "Książka została pomyślnie umieszczona w zadaniach do konwersji %(boo msgid "There was an error converting this book: %(res)s" msgstr "Podczas konwersji książki wystąpił błąd: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Błąd otwierania e-booka. Plik nie istnieje lub jest niedostępny" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "W identyfikatorach nie jest rozróżniana wielkość liter, nadpisywanie starego identyfikatora" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, fuzzy, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s nie jest prawidłowym językiem" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadane zostały pomyślnie zaktualizowane" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "Wysłana książka prawdopodobnie istnieje w bibliotece, rozważ zmianę przed przesłaniem nowej: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "Rozszerzenie pliku '%(ext)s' nie jest dozwolone do wysłania na ten serwer" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Rozszerzenie pliku '%(ext)s' nie jest dozwolone do wysłania na ten serwer" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "Plik do wysłania musi mieć rozszerzenie" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "Nie można zapisać pliku %(filename)s w katalogu tymczasowym" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Nie udało się przenieść pliku okładki %(file)s:%(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Plik książki w wybranym formacie został usunięty" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Książka została usunięta" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "edytuj metadane" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex)s nie jest poprawną liczbą, pomijanie" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Nie udało się utworzyć łącza %(path)s (Odmowa dostępu)." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Nie można zapisać pliku %(file)s." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Format pliku %(ext)s dodany do %(book)s" diff --git a/cps/translations/pt/LC_MESSAGES/messages.mo b/cps/translations/pt/LC_MESSAGES/messages.mo index 920a9b4077e55b8823f9625b171a96d2cf412b49..e44b5119b54eacbf633a22f67e2f930fd1f0c7c4 100644 GIT binary patch delta 22 dcmexyg!#u2<_+?->}CpvmR2Ulo7HNAQUPr92tWV; delta 22 dcmexyg!#u2<_+?-?1l=4Mpg!Ww diff --git a/cps/translations/pt/LC_MESSAGES/messages.po b/cps/translations/pt/LC_MESSAGES/messages.po index e85b4170..c59df778 100644 --- a/cps/translations/pt/LC_MESSAGES/messages.po +++ b/cps/translations/pt/LC_MESSAGES/messages.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2024-09-21 12:05+0200\n" +"POT-Creation-Date: 2024-09-26 19:43+0200\n" "PO-Revision-Date: 2023-07-25 11:30+0100\n" "Last-Translator: horus68 \n" "Language: pt\n" @@ -42,8 +42,8 @@ msgstr "Comando desconhecido" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Sucesso! Livros enviados para lista de espera para cópia de segurança de metadados. Por favor, verifique o resultado em Tarefas" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Desconhecido" @@ -287,7 +287,7 @@ msgstr "Sucesso! Conta Gmail verificada" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -552,96 +552,96 @@ msgstr "Livro enviado com sucesso para lista de espera de conversão para %(book msgid "There was an error converting this book: %(res)s" msgstr "Ocorreu um erro ao converter este livro: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Oops! O Livro selecionado não está disponível. O ficheiro não existe ou não está acessível" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "Utilizador não tem permissão para carregar capas" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "Os identificadores não diferenciam maiúsculas de minúsculas, substituindo o identificador antigo" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s não é um idioma válido" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadados atualizados com sucesso" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "Erro ao editar o livro: {}" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "O livro carregado provavelmente existe na biblioteca, considere alterar antes de carregar novo: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "A extensão de ficheiro '%(ext)s' não pode ser enviada para este servidor" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "A extensão de ficheiro '%(ext)s' não pode ser enviada para este servidor" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "O ficheiro a ser carregado deve ter uma extensão" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "O ficheiro %(filename)s não foi possível ser guardado na pasta temporária" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Falha ao mover ficheiro de capa %(file)s: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Formato de livro eliminado com sucesso" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Livro eliminado com sucesso" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "Não tem permissões para apagar livros" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "editar metadados" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex)s não é um número válido, ignorando" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "Utilizador não tem direitos para carregar formatos de ficheiro adicionais" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Falha ao criar o caminho %(path)s (Permissão negada)." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Falha ao armazenar o ficheiro %(file)s." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Formato de ficheiro %(ext)s adicionado a %(book)s" diff --git a/cps/translations/pt_BR/LC_MESSAGES/messages.mo b/cps/translations/pt_BR/LC_MESSAGES/messages.mo index 2870e649c7a282fbb1ead5af1b8c7cd99619b61e..cb55e82d038be984ac284c0ae2f50cef1c86bed5 100644 GIT binary patch delta 22 dcmbQfk$L(?<_$uX>}CpvmR2Uln\n" "Language: br\n" @@ -42,8 +42,8 @@ msgstr "Comando desconhecido" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "E-mail de teste enfileirado para envio para %(email)s, verifique o resultado em Tarefas" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Desconhecido" @@ -287,7 +287,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -552,96 +552,96 @@ msgstr "Livro enfileirado com sucesso para conversão em %(book_format)s" msgid "There was an error converting this book: %(res)s" msgstr "Ocorreu um erro ao converter este livro: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Oops! O Livro selecionado não está disponível. O arquivo não existe ou não é acessível" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "Usuário não tem permissão para fazer upload da capa" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "Os identificadores não diferenciam maiúsculas de minúsculas, substituindo o identificador antigo" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s não é um idioma válido" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadados atualizados com sucesso" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "Erro ao editar o livro: {}" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "O livro carregado provavelmente existe na biblioteca, considere alterar antes de carregar novo: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "A extensão de arquivo '%(ext)s' não pode ser enviada para este servidor" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "A extensão de arquivo '%(ext)s' não pode ser enviada para este servidor" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "O arquivo a ser carregado deve ter uma extensão" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "O arquivo %(filename)s não pôde ser salvo no diretório temporário" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Falha ao mover arquivo de capa %(file)s: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Formato do Livro Apagado com Sucesso" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Livro Apagado com Sucesso" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "Você não tem permissão para apagar livros" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "editar metadados" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex)s não é um número válido, ignorando" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "Usuário não tem direitos para fazer upload de formatos de arquivo adicionais" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Falha ao criar o caminho %(path)s (Permission denied)." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Falha ao armazenar o arquivo %(file)s." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Formato de arquivo %(ext)s adicionado a %(book)s" diff --git a/cps/translations/ru/LC_MESSAGES/messages.mo b/cps/translations/ru/LC_MESSAGES/messages.mo index d93e3bb8e5eb702cbd28d28954c0ea6e920e7a0f..9263ff90cb0fbb1058ec88e143d50dc27e7c2f02 100644 GIT binary patch delta 22 ecmcb0mg&}6rVU-5>}CpvmR2Uln\n" "Language: sk_SK\n" @@ -42,8 +42,8 @@ msgstr "Neznámy príkaz" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Úspech! Knihy boli zaradená do zálohovania metadát, skontrolujte si Úlohy na kontrolu" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Neznámy" @@ -287,7 +287,7 @@ msgstr "Úspech! Gmail konto bolo verifikované." #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -551,96 +551,96 @@ msgstr "Kniha bola úspešne zaradená na prevod do %(book_format)s" msgid "There was an error converting this book: %(res)s" msgstr "Vyskytla sa chyba pri prevode tejto knihy: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Vybraná kniha nie je dostupná. Súbor neexistuje alebo sa k nemu nedá pristupovať" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "Používateľ nemá práva nahrať obálku knihy" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "Identifikátory nerozlišujú malé a veľké písmená, prepisuje sa starý identifikátor" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "'%(langname)s' nie je platný jazyk" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadáta boli úspešne aktualizované" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "Chyba pri úprave knihy: {}" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "Nahrávaná kniha pravdepodobne existuje v knižnici, zvážte zmenu pred nahraním novej: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "Prípona súboru '%(ext)s' nemôže byť nahraná na tento server" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Prípona súboru '%(ext)s' nemôže byť nahraná na tento server" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "Súbor ktorý sa má nahrať musí mať príponu" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "Súbor %(filename)s nebolo možné uložiť do dočasného adresára" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Zlyhal presun súboru obalky %(file)s: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Kniha s formátom bola úspešne zmazaná" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Kniha bola úspešne zmazaná" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "Nemáte oprávnenia na mazanie kníh" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "upraviť metadáta" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex)s nie je platné číslo, preskakuje sa" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "Používateľ nemá práva na nahranie dodatočných súborových formátov" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Nebolo možné vytvoriť cestu %(path)s (Povolenie zamietnuté)." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Zlyhalo uloženie súboru: %(file)s." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Súborový formát %(ext)s bol pridaný k %(book)s" diff --git a/cps/translations/sl/LC_MESSAGES/messages.mo b/cps/translations/sl/LC_MESSAGES/messages.mo index 3f55b8464af61ec50e2be3f690f3e06650d00918..f4d74d859286a9e62134e2cc4bbbf5f32b0f49c6 100644 GIT binary patch delta 7984 zcmZYB2Xs|czQ^%%69S=x5C}DtLrVe@Y9NFv0y5H3iU<;K-~u7##3U0H)az3iL7>|R{#ysqUE>^-XaU7oTOkH4E z?TKH+wzwCo;0?SRt%X+5s)z#?nimYk2;$M$9LHk{K7}=K3)aF9F%C~)1H6UZFxEBw z!!U|C6SaWHuo})m-M<)X<0dy~S=DLmqeBB6!En5Qk$4&F<8`cs)fbujn_&!b2W*Ue zu^pzP-m?%JVG$~mJH7a%cm1EJj7J4uG&gj_-gFE@4LlDuz!KDi)}b=jrL+v&;C0k}O_y3$9ZW!NK`&H|48{658kum=%B7(PW}%JGqi%c)YvN|q zO824e`wW%Rqo@_%Kow_|Wekd~Q5hPHt?>a=@y)^n+>E{OINrnfR@`!{ya)rRBFVyL z_!#O1%TX)YhY#XO)POx+F^)&=_2a0bU5Yv-C8+m&gStQRRgoUGIo65$-^}@B}7eg%!pm)cvC|6=$F_QjBr<5o$u;dU2JNrUv41BKdW>$DkHyR1&my0CLV=K zZ7o!P6I2FUU={wyzk!n^+5Ci1TvUZz7Yehsw+yHPJX z=6M;FnSY`NuJewWP$Setd!kl)KkBqR;`P6RcM)&FUicg8$E#b&{NXY@ME*7KLOQh4 z4XAJCG1F#A{gzYgCd*E{Hj%BDCsaQ&7k6QLKf_u^n#2-gp}8 zpuM&H51XKsLL-`v?r7s6)UnAzy=V#QMccgi5GD{`N9}pT56pAjQ7Ipfb#X4Lw$@?{ zzJprm9*n~>oS^f6gN9x>a+`VZanygq{861N@d)`xG9$bYZ>3|f#lgEwH7`R=tk{e9dhu!0ihjn< zSbevt?tVCd_&L;X$#w7G#3--W!Fdy6EcGOmUzb9yB6jo{;Y>YYueQ_YpzzE!n z+Ut)|D?W;e$7ir2t_#x8aoB`P*?!amU*ccz zB=*OIedgyh8=Df(M}1=7K^u3XQhXMBp>Myr|4yt#JQ3BOi7L`{SP_F;XlSo@puSv( zQN?r|Fp;ojF!*DnDz`dvmgnw)n)C3vWx*G@T z{O8iRi;fSl8UBGvdDDZYD5qcx;&)L4e2x0RoJAGs|9JgXKQS+^iMp=`-hq9wD>_&O zU-#k=_G5hOdm0JY;ZyUe9E<&k=b-vO!QOZim8mX=%u0si-NcWe?k_=QF8r{mk)D`F zoQ8VO4y=k7P+N2j%g=wM&rFrq!}eTgj9T$9Y=Q--YF>oe`z@$rbr6-Q3ZI)}IS^YC zPr=DJ7nOnQ*c$CG%y(iC>Xc3Rg8Zv$7t_%Oi&1-a7FDfHzBC`22^c}V6t(9oF&fvQ zYGf-$;x0_W16UJpVKuCF#H7AHDsF*#zQYmnuSOp_qHu(FAq_QX>Xr&HOxS zMORU&u6WE07>%QdTYAnwW#TaEQ+*Egob|PtKrHHgU9g7Ee?PBdl;=cj%MA~sRU}e?5zfPjxE^&(V@{KQ6pQc++DL!U>PaJ&{(cz1C$TG@M`fhZC6oGr*q(SA+PDn0r`u2yJ%Y+i zh0Eq=yc;GEKZqK57KYvQMx8Poh37_kB+R;$&2Y-bTGR zgc^814#7Y0E*$)WsfBsig}4Z{CC6|CR{oJA%lOtf8mfUHYQ~#TDJw(G^fYSbzo3fi zH&n4kUol0LggREeF$wR-s`xi-h6^zsi%~^)9J}L>7}Q?1{>hxzj#!Pj4@ToqyaOkA zK8Je2yQtH!AKT(ZR3_^FY~nVkiI2mcn1_9EBPQcj)VK*($$v{4?XH>uM_~uz08YS{ zP!qa|l`;I9Iet+XL)-~f1N~70reR$yL{0n!)N@wWTKKRR&%)NkF9p2|yHI;} z1eKbzsF_~E2&{h7{8bx^t%&R580>>KzKn^u6>H-;tckZU7OVYYemk0?u8;K$Iy98x zS*Rjgh*7v0wW2ksT6i0EN=i@@-G`dk=bmM#37kS@Ao5r9H)JhT@pVNNV;Wj56Vn|h zvsJ#GAG(ly<^ITyUF;62-I62n!UtX-jvQ zj^@kW^o2fMUd3l#d-9d1tCX%R2oz>yId*2q|7vevX!VNyJ~wmK`!#HTR)(D)urr;U zJ#%w1Cc3Gsmoj1-*H;wR+0OCvFF(sE2@1GRzCN^Cx|Z?R{Mns0% zN8uZ#k%j)8X#qPiC)8(M)d+X!h6mhr8=ANWHr(gh8|~;}>4kymEbOn0=}-5&LpG*N z{8OKuO;)Dbd*r|9K(T$q%IG@E9-8bPE6cVCdAwobbx|f$Z|RXSpLc zC*Br4vpM;;sAO}4X4CzJc`PHxu_rl&P8O|cfmUs;p&9>v#jl&~+a79CeB$3xDE!@j z`8t~#V^^GlKxUwu-7;~qlb7u;Xq9j2Qh*IDzhvE~jAYy8Ne-oMY2b^qbDdl#i_!Bl za;D}vIT_Ra6SdL#_8>Rs{b%dkGu;j(#hCAofUGBkC zZE6QB??h$lNH9BfxG|?=-T2cj!b(?$MxS01W{%&rvmZq`c1DivUOd+*bn4vf3ar4L zdU1st`Q7oj;pK;h1Ln8W{Tvhu*Q;$O^!s-+eKEsw^EeDyj^#D{p%*TfnUfRB`r(kz zml5iD<$PHA0r9&DS65f}Pf`6_|2O5btMRVyT5MS9s!-i)PlQEMp_w_;GNy!<-{|A> S6}TsF-sS5bYWho}?|%VG1(bvU delta 8004 zcmZA533yaRy2kO-2?>#eKp-pu0|x>jfdo(^i;4k^C=yu)5M>Z(k|T5yxq&656;Azcn}}Oldicl zEUP2+x!4|eV=ep*dtuzmR>+E_(C=k4z(W{AeK@9JA$Gl|JSeqei#l}Rw9M%G-!hT7>#E!4$or>{)qLl&MT&W8YWS{ z6`NrmcEAGEIAKi1H&Bt>2_4V&ru;gh}!X0v@!m5%W8pHs0j7Nwm1xxe9vJUT!nYzG3?F!R_Yw9ItfQ( z0uTJy5}!Z~Fb^By4y?{@)NRO}YaD?(>kukw=b|Rsh#Kb{s(->f6R9jz1n$E`=C?*t zXodl7g;P>Igo}0v`@#7 zI$WV}6Eb83h8fhm+@iD#22w8u0$>50BR?vP!aeQ2Vl|?^Ia%F-TTK;-;*hB z`)im-{av^HBIN+TmVQL{4H2JdaxV zB~)myx$V*Km2=hLaqpQgSxanBJrDJb zFGnTmBzzV>LWQ#1`zB}dP)9WaZ49|Cz}u;BL`C8nY5@(a=o3$&9R)3*Gv0&UQQ7${ zDk5`HAEFhgkGju`J|O<;@E001&}7tv zi?J@QaovfE%n{VYS5Z6t4Yi=u56#ZHpl-_$RQm+%iL>x-Jd8TBCK1c(fgK~nUlW(n zpdC*`O}x}~wd*IYhtcNwc~sjD8AEI*O8`M3&h}!v8ybYsPn(*Y*yeBM#eS$H8;vc{k9uJ`D(RMC9)607MABOG;Ymf^g4U== z-R9aAZ=#-y4X`)rw`GLt%x^tIp)t&%Pea1ia!p>}oz8{#?C&aCw& zHyWUFCIfHAzSs)`=R#cxpyylJC3x`wC)v_(a-H;zDOBk_NT!WJ6(;?0{(HW#B7Hp#8O>ej1JJKBi1 z<1xG!lmD)>+x|zUCT<;QT%Ol$gJoy8d}ltJ?a+J-(p!0 zU>{TjUPYbt9Mq1NqH^RTRC2CI4fwg+eh$;9Uqs!W6+`X_8R$=Lzb-Wipo6&Q=5XDR4< zyoj}ME-IOpVmhux<-}>!*(L2T&$Cer?}>W;2zqfcDk5i5Dt5&USQCH7IE>n9J~;81Lp>L7!XWBMopH*22HI^=C1U`K`4S+F;Zk^Qml$dDMrZ+UH{~ZbLUWMXHd7H;b-QHcPA>F|A@+s5b9dJf{N5m z)U{0d+^e74vs_R$V60*JdfG zr~w9{1{{I?u>?EeT1>(#s7S`{H}565+E|5RX513G=<1N$&pceRFsGL}Xn(qkeR)o${P;%5bXwIZ1D(Qxz zviTX*%9o)cu?7|D-KYuoV_*Ev^{zwi_XL#_bFun8)B<*+#=D4YEM)!LZK!kDJV?d% zbZCc4nxUvjOu`hbL=E^B>e_vb3jHS3nSX(b)HkSpS5Ze+>xenRMy@R}TK7Mj!eBbw zf`jlm)PzS+J3Wn>=sVO7uAp+G;ZgGiv{4gvMjc5Xw?5LX2T{rWJSvA)p~l~c)xZBc zC}_pUQ3HLCO)%=1888*KfLpOMc13-##-Xm|3RJ`npcYp1xXF8S5O1|f?7b#3G=11Q6cVv`S<|p>|ev%a5*YTPhu|qfZEWlC(Vv~pdy!# zjnR)flIKnm|K=24p`j_Rz!ta{b(TM%78diBIf?|-!Wy8mxT9OY%XJ89VP&WtPeF~l z1eH6R(8eR!5P$nBWF91+GB318O^}ZY>1b5PS5XUHj;(PQHp0uO1;?K@^=wqg??o;A z5!aEZ$c}a$hl=PEAqu*um8c|Hk2;(4sL&>#A))YoROny9+wmlJz(!x2e)nMx^(XLF ztU_(z6zUe$`^L0)!))rMn2DizZecrWAwOUZY<1Rj%tYOSA+94)A@!lYl#|@{nW%d` z4{PEwRJO0cSX_^~9b2&t9!C0wtmt#*S1TSJ9^8vv@Lkl(PoqL#=bz@ssRP>7N21Pj zB5Fskqaw2dTjF)pL@mEH6F-2_)JLF>v;bpu|HoGs7|3-BYG>0hi1Sg&n0%i9XNPT2 z5elGo6huw@JU)o)u_xC4&g4RW)U_={9myOVfIBgb`K{FNP3U`|R$Pt>+3Tp4E<&w* zH7dE*qOyA*Dv2(ju9fG4i9{2Or+z;w5`!=uA4m0{hj(HXhByQ3JcUHOf(aOX(L|sw zwxe#l=A#DqGwMiQ!1nkKDiR0X`uC`Xr(WW}2QdeGU>WA%3e>#kE)oCM6fV(F7aRRx zB9Vc^sSiahXf@u1TTv0(i;Bcgs2oVRY$i-cUCVB$g%3u(HxX@o5z}xPHp9J_iN6XL zXt)a#ub3V6LG5TfYGKo`7A`>D_jld;E>!3bpeDNHw*P{PQ0$K;V(D0)dKb5zk8PG;-RJf- z(=XJCf~jk>*KoVGV9vSR*fI)ukAT-_k(WZB*lpIz?QW!~{y7W&G3 z!HRIFMYGM6S>az7HO&b+w%^M?F{v#yUkjtq3n#yv|)>;TtdBSli_{pH2!oTh@6i9BXiSu)@m< zoXFHA|GLrPrKNpi{#0J-l!U)ty1*^H{PvbuLS$$3jf{9FK1PczdVgpdE#*G{n6iN1 zH{M&|D+<`J-EUtDe_kEufNC%J5`}sWwtoL$%R;u~EBVjn(m=U0%Fip~{odk0#qVE=T(9y+*RiX26M*X7 zhWoE<9_Mo#!*8v~>G2;Of2LnGAC>!eyW|mvk&zu|2tbq>O7|ThM zs*!?^ns^kp39B1>io>&3PpRLp&~~y*1BAlwbMqt8X-!FVyj@!6_?>cxKt!t6e&q3Z zBfj-}J@H%CI>CUy`b;8u8;``)2$Xv>!$-Ha4)@vCG@44Jc-u-(3Q1GwEh+N(%Zu4k zX<7C8l=xZ0Z96KXqWn%|)6Qm5k(0ar740dCoY{9ahJ4?(|D`B5J)A=im{R29LvuZ~ z20l2bzjdEO`bI_{c_ccSMVn-9Zx1dFlzB%fFTOb5Q=4meA}iZ#_0Ho)l=+GrYbXg_ z<`k0uHxAr;trGr!ugHuOv!dLKmwoD!M922|Z9n(g;lB98)4xiNq?~@P z2D=C^Iy;}M+~eGll))tUm=<>b>dV6|^V*}lM4`xubouAAp4xr6VxzrQHSF};gYM;s zyz|{&k0%g$;=<{u*y>Yq!i7I9s>^*OC9MD3UGnAh#@vqk0)fIZ$6HwLJ|gY8Z2d1! gh>COUVt}CpvmR2Uln|)H{+yQP-2owMS delta 22 dcmaELgXz@`rVXyC?1l=4Mpg!\n" "Language: sv\n" @@ -45,8 +45,8 @@ msgstr "Okänt kommando" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "Testa e-post i kö för att skicka till %(email)s, vänligen kontrollera Uppgifter för resultat" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Okänd" @@ -294,7 +294,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -563,96 +563,96 @@ msgstr "Boken är i kö för konvertering till %(book_format)s" msgid "There was an error converting this book: %(res)s" msgstr "Det gick inte att konvertera den här boken: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Hoppsan! Vald boktitel är inte tillgänglig. Filen finns inte eller är inte tillgänglig" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "Identifierare är inte skiftlägeskänsliga, skriver över gammal identifierare" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, fuzzy, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s är inte ett giltigt språk" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadata uppdaterades" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "Uppladdad bok finns förmodligen i biblioteket, överväg att ändra innan du laddar upp nya: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "Filändelsen '%(ext)s' får inte laddas upp till den här servern" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Filändelsen '%(ext)s' får inte laddas upp till den här servern" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "Filen som ska laddas upp måste ha en ändelse" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "Filen %(filename)s kunde inte sparas i temp dir" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "Det gick inte att flytta omslagsfil %(file)s: %(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "Bokformat har tagits bort" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "Boken har tagits bort" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "redigera metadata" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Det gick inte att skapa sökväg %(path)s (behörighet nekad)." -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Det gick inte att lagra filen %(file)s." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Filformatet %(ext)s lades till %(book)s" diff --git a/cps/translations/tr/LC_MESSAGES/messages.mo b/cps/translations/tr/LC_MESSAGES/messages.mo index 916ccb6e965ac9a497c5edef7b0e0fb873fffa41..cebd390183717d8f68e594debb2512cf05d4f886 100644 GIT binary patch delta 22 ecmdlxhjH&5#trv$+07ITEv-z9H$T;lPyhgB!Uz=r delta 22 ecmdlxhjH&5#trv$*$ov8jjRkzH$T;lPyhgBHwXs+ diff --git a/cps/translations/tr/LC_MESSAGES/messages.po b/cps/translations/tr/LC_MESSAGES/messages.po index 82ff483d..659fd935 100644 --- a/cps/translations/tr/LC_MESSAGES/messages.po +++ b/cps/translations/tr/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2024-09-21 12:05+0200\n" +"POT-Creation-Date: 2024-09-26 19:43+0200\n" "PO-Revision-Date: 2020-04-23 22:47+0300\n" "Last-Translator: iz \n" "Language: tr\n" @@ -45,8 +45,8 @@ msgstr "" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "%(eReadermail)s'a gönderilmek üzere başarıyla sıraya alındı" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Bilinmeyen" @@ -291,7 +291,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -560,96 +560,96 @@ msgstr "eKitap %(book_format)s formatlarına dönüştürülmek üzere başarıy msgid "There was an error converting this book: %(res)s" msgstr "Bu eKitabı dönüştürürken bir hata oluştu: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, fuzzy, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s geçerli bir dil değil" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metaveri başarıyla güncellendi" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "Yüklenen eKitap muhtemelen kitaplıkta zaten var. Yenisini yüklemeden değiştirmeyi düşünün: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "'%(ext)s' uzantılı dosyaların bu sunucuya yüklenmesine izin verilmiyor" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "'%(ext)s' uzantılı dosyaların bu sunucuya yüklenmesine izin verilmiyor" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "Yüklenecek dosyanın mutlaka bir uzantısı olması gerekli" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "%(filename)s dosyası geçici dizine kaydedilemedi" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "metaveri düzenle" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "%(path)s dizini oluşturulamadı. (İzin reddedildi)" -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "%(file)s dosyası kaydedilemedi." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "%(book)s kitabına %(ext)s dosya biçimi eklendi" diff --git a/cps/translations/uk/LC_MESSAGES/messages.mo b/cps/translations/uk/LC_MESSAGES/messages.mo index cfc95828a58b391c00bb8233aa1a8de550674766..9f06a7910f3cf1d58297b6a901c0bb6eddc53d8e 100644 GIT binary patch delta 22 dcmeBN&)B)1af7}lyP1NarIm^CW;4xTJpfY{26g}d delta 22 dcmeBN&)B)1af7}lyP<-ik(GhzW;4xTJpfXR250~P diff --git a/cps/translations/uk/LC_MESSAGES/messages.po b/cps/translations/uk/LC_MESSAGES/messages.po index 29adaa21..89797f85 100644 --- a/cps/translations/uk/LC_MESSAGES/messages.po +++ b/cps/translations/uk/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2024-09-21 12:05+0200\n" +"POT-Creation-Date: 2024-09-26 19:43+0200\n" "PO-Revision-Date: 2017-04-30 00:47+0300\n" "Last-Translator: ABIS Team \n" "Language: uk\n" @@ -43,8 +43,8 @@ msgstr "Невідома команда" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Невідомий" @@ -293,7 +293,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -560,95 +560,95 @@ msgstr "" msgid "There was an error converting this book: %(res)s" msgstr "" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "Неможливо відкрити книгу. Файл не існує або немає доступу." -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "" -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 msgid "File type isn't allowed to be uploaded to this server" msgstr "" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "Завантажувальний файл повинен мати розширення" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "змінити метадані" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "" -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "" -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "" diff --git a/cps/translations/vi/LC_MESSAGES/messages.mo b/cps/translations/vi/LC_MESSAGES/messages.mo index 2856f03aaf9b1dd91fee019b2e48687d39221988..d8813f81f2da7444fbd5d1c64155e21083bf447d 100644 GIT binary patch delta 22 dcmbRIlyUM?#tpvq>}CpvmR2Uln?vmFjR9bH2TuS1 delta 22 dcmbRIlyUM?#tpvq?1l=4Mpg!\n" "Language: vi\n" @@ -41,8 +41,8 @@ msgstr "Lệnh không tồn tại" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "Không rõ" @@ -286,7 +286,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -551,95 +551,95 @@ msgstr "" msgid "There was an error converting this book: %(res)s" msgstr "Có lỗi xảy ra khi chuyển đổi định dạng cho sach: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s không phải là ngôn ngữ hợp lệ" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "Metadata đã được cập nhật thành công" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "" -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 msgid "File type isn't allowed to be uploaded to this server" msgstr "" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "" -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "Lưu file thất bại %(file)s." -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "" diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo index f14c1fa3c89b9d4499c73f9439e520d9a37cc883..4484bf0dabfb2f76a4d17647f123fbd259ed4436 100644 GIT binary patch delta 22 dcmeyghWXPP<_&CZ>}CpvmR2Uln|a$(0{~|v2jTz# delta 22 dcmeyghWXPP<_&CZ?1l=4Mpg!\n" "Language: zh_CN\n" @@ -42,8 +42,8 @@ msgstr "未知命令" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "成功!书籍已排队进行元数据备份,请检查任务列表以获取结果" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "未知" @@ -287,7 +287,7 @@ msgstr "Gmail 账户验证成功" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -551,96 +551,96 @@ msgstr "书籍已经被成功加入 %(book_format)s 格式转换队列" msgid "There was an error converting this book: %(res)s" msgstr "转换此书籍时出现错误: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "糟糕!选择书名无法打开。文件不存在或者文件不可访问" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "用户没有权限上传封面" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "标识符不区分大小写,覆盖旧标识符" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "'%(langname)s' 不是一种有效语言" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "已成功更新元数据" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "编辑书籍时出错: {}" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "上传的书籍可能已经存在,建议修改后重新上传: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "不能上传文件扩展名为“%(ext)s”的文件到此服务器" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "不能上传文件扩展名为“%(ext)s”的文件到此服务器" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "要上传的文件必须具有扩展名" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "文件 %(filename)s 无法保存到临时目录" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "移动封面文件失败 %(file)s:%(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "书籍的此格式副本已成功删除" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "书籍已成功删除" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "您没有删除书籍的权限" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "编辑元数据" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex)s 不是一个有效的数值,忽略" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "用户没有权限上传其他文件格式" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "创建路径 %(path)s 失败 (权限不足)" -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "保存文件 %(file)s 失败" -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "已添加 %(ext)s 格式到 %(book)s" diff --git a/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.mo b/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.mo index 540d72bf72b6ce05a9bf13d797fd4c70b8a295d1..91ec5baab8beab2816c44d2279b01daf30421fc4 100644 GIT binary patch delta 22 ecmbPmooT{#rVS6W+07ITEv-z9H$Tr_X%7Hwv\n" "Language: zh_TW\n" @@ -45,8 +45,8 @@ msgstr "未知命令" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "發送給%(email)s的測試郵件已進入隊列。請檢查任務結果" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "未知" @@ -290,7 +290,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -557,96 +557,96 @@ msgstr "書籍已經被成功加入到 %(book_format)s 格式轉換隊列" msgid "There was an error converting this book: %(res)s" msgstr "轉換此書籍時出現錯誤: %(res)s" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "糟糕!選擇書名無法打開。文件不存在或者文件不可訪問" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "標識符不區分大小寫,覆蓋舊標識符" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, fuzzy, python-format msgid "'%(langname)s' is not a valid language" msgstr "%(langname)s 不是一種有效語言" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "已成功更新元數據" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "上傳的書籍可能已經存在,建議修改後重新上傳: " -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 #, fuzzy msgid "File type isn't allowed to be uploaded to this server" msgstr "不能上傳文件附檔名為“%(ext)s”的文件到此服務器" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "不能上傳文件附檔名為“%(ext)s”的文件到此服務器" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "要上傳的文件必須具有附檔名" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "文件 %(filename)s 無法保存到臨時目錄" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "移動封面文件失敗 %(file)s:%(error)s" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "書籍格式已成功刪除" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "書籍已成功刪除" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "編輯元數據" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, fuzzy, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "%(seriesindex)s 不是一個有效的數值,忽略" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "創建路徑 %(path)s 失敗(權限拒絕)。" -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "保存文件 %(file)s 失敗。" -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "已添加 %(ext)s 格式到 %(book)s" diff --git a/messages.pot b/messages.pot index d30e5d16..865b9c16 100644 --- a/messages.pot +++ b/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2024-09-21 12:05+0200\n" +"POT-Creation-Date: 2024-09-26 19:43+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,8 +41,8 @@ msgstr "" msgid "Success! Books queued for Metadata Backup, please check Tasks for result" msgstr "" -#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671 -#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105 +#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 +#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:105 #: cps/uploader.py:114 msgid "Unknown" msgstr "" @@ -286,7 +286,7 @@ msgstr "" #: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860 #: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168 -#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150 +#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150 #: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354 #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529 #, python-format @@ -550,95 +550,95 @@ msgstr "" msgid "There was an error converting this book: %(res)s" msgstr "" -#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570 +#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570 #: cps/web.py:1615 cps/web.py:1660 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" msgstr "" -#: cps/editbooks.py:494 cps/editbooks.py:1299 +#: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" msgstr "" -#: cps/editbooks.py:514 cps/editbooks.py:757 +#: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" msgstr "" -#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069 +#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" msgstr "" -#: cps/editbooks.py:557 +#: cps/editbooks.py:558 msgid "Metadata successfully updated" msgstr "" -#: cps/editbooks.py:580 +#: cps/editbooks.py:581 msgid "Error editing book: {}" msgstr "" -#: cps/editbooks.py:675 +#: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " msgstr "" -#: cps/editbooks.py:769 cps/editbooks.py:1216 +#: cps/editbooks.py:770 cps/editbooks.py:1217 msgid "File type isn't allowed to be uploaded to this server" msgstr "" -#: cps/editbooks.py:775 cps/editbooks.py:1227 +#: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "" -#: cps/editbooks.py:779 cps/editbooks.py:1232 +#: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" msgstr "" -#: cps/editbooks.py:787 +#: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" msgstr "" -#: cps/editbooks.py:807 +#: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" msgstr "" -#: cps/editbooks.py:864 cps/editbooks.py:866 +#: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" msgstr "" -#: cps/editbooks.py:873 cps/editbooks.py:875 +#: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" msgstr "" -#: cps/editbooks.py:927 +#: cps/editbooks.py:928 msgid "You are missing permissions to delete books" msgstr "" -#: cps/editbooks.py:977 +#: cps/editbooks.py:978 msgid "edit metadata" msgstr "" -#: cps/editbooks.py:1030 +#: cps/editbooks.py:1031 #, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" msgstr "" -#: cps/editbooks.py:1221 +#: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" msgstr "" -#: cps/editbooks.py:1245 +#: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "" -#: cps/editbooks.py:1252 +#: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." msgstr "" -#: cps/editbooks.py:1277 +#: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "" From 230573dc7aec83f9b21f88c252405b62b6e8f90a Mon Sep 17 00:00:00 2001 From: Lucinda Quintal Date: Sun, 29 Sep 2024 07:32:50 -0700 Subject: [PATCH 05/22] Enhance README: Adds Troubleshooting section, expands Contribution section - Adds Troubleshooting Section which has common issues, configuration errors, and user management issues to help users diagnose problems effectively. - Expanded the Contributing Section to include guidelines for contributions, a code of conduct, bug reporting, and feature requests. - In the Additional Resources section , provided links to documentation and community contributions for ease of reference --- README.md | 140 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 104 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 614e27c1..c992b026 100755 --- a/README.md +++ b/README.md @@ -19,13 +19,13 @@ Calibre-Web is a web app that offers a clean and intuitive interface for browsin - [Quick start](#quick-start) - [Requirements](#requirements) 4. [Docker Images](#docker-images) -5. [Contributor Recognition](#contributor-recognition) -6. [Contact](#contact) -7. [Contributing to Calibre-Web](#contributing-to-calibre-web) +5. [Troubleshooting](#troubleshooting) +6. [Contributor Recognition](#contributor-recognition) +7. [Contact](#contact) +8. [Contributing to Calibre-Web](#contributing-to-calibre-web) - *This software is a fork of [library](https://github.com/mutschler/calibreserver) and licensed under the GPL v3 License.* ![Main screen](https://github.com/janeczku/calibre-web/wiki/images/main_screen.png) @@ -57,52 +57,103 @@ Calibre-Web is a web app that offers a clean and intuitive interface for browsin ## Installation -#### Installation via pip (recommended) -1. Create a virtual environment for Calibre-Web to avoid conflicts with existing Python dependencies -2. Install Calibre-Web via pip: `pip install calibreweb` (or `pip3` depending on your OS/distro) -3. Install optional features via pip as needed, see [this page](https://github.com/janeczku/calibre-web/wiki/Dependencies-in-Calibre-Web-Linux-and-Windows) for details -4. Start Calibre-Web by typing `cps` +### Installation via pip (recommended) -*Note: Raspberry Pi OS users may encounter issues during installation. If so, please update pip (`./venv/bin/python3 -m pip install --upgrade pip`) and/or install cargo (`sudo apt install cargo`) before retrying the installation.* +1. **Create a virtual environment**: It’s essential to isolate your Calibre-Web installation to avoid dependency conflicts. You can create a virtual environment by running: + ``` + python3 -m venv calibre-web-env + ``` +2. **Activate the virtual environment**: + ``` + source calibre-web-env/bin/activate + ``` +3. **Install Calibre-Web**: Use pip to install the application: + ``` + pip install calibreweb + ``` +4. **Install optional features**: For additional functionality, you may need to install optional features. Refer to [this page](https://github.com/janeczku/calibre-web/wiki/Dependencies-in-Calibre-Web-Linux-and-Windows) for details on what can be installed. +5. **Start Calibre-Web**: After installation, you can start the application with: + ``` + cps + ``` -Refer to the Wiki for additional installation examples: [manual installation](https://github.com/janeczku/calibre-web/wiki/Manual-installation), [Linux Mint](https://github.com/janeczku/calibre-web/wiki/How-To:-Install-Calibre-Web-in-Linux-Mint-19-or-20), [Cloud Provider](https://github.com/janeczku/calibre-web/wiki/How-To:-Install-Calibre-Web-on-a-Cloud-Provider). +*Note: Users of Raspberry Pi OS may encounter installation issues. If you do, try upgrading pip and/or installing cargo as follows:* + ``` + ./venv/bin/python3 -m pip install --upgrade pip + sudo apt install cargo + ``` + +### Important Links +- For additional installation examples, check the following: + - [Manual installation](https://github.com/janeczku/calibre-web/wiki/Manual-installation) + - [Linux Mint installation](https://github.com/janeczku/calibre-web/wiki/How-To:-Install-Calibre-Web-in-Linux-Mint-19-or-20) + - [Cloud Provider setup](https://github.com/janeczku/calibre-web/wiki/How-To:-Install-Calibre-Web-on-a-Cloud-Provider) ## Quick Start -1. Open your browser and navigate to `http://localhost:8083` or `http://localhost:8083/opds` for the OPDS catalog -2. Log in with the default admin credentials -3. If you don't have a Calibre database, you can use [this database](https://github.com/janeczku/calibre-web/raw/master/library/metadata.db) (move it out of the Calibre-Web folder to prevent overwriting during updates) -4. Set `Location of Calibre database` to the path of the folder containing your Calibre library (metadata.db) and click "Save" -5. Optionally, use Google Drive to host your Calibre library by following the [Google Drive integration guide](https://github.com/janeczku/calibre-web/wiki/G-Drive-Setup#using-google-drive-integration) -6. Configure your Calibre-Web instance via the admin page, referring to the [Basic Configuration](https://github.com/janeczku/calibre-web/wiki/Configuration#basic-configuration) and [UI Configuration](https://github.com/janeczku/calibre-web/wiki/Configuration#ui-configuration) guides - -#### Default Admin Login: -- **Username:** admin -- **Password:** admin123 +1. **Access Calibre-Web**: Open your browser and navigate to: + ``` + http://localhost:8083 + ``` + or for the OPDS catalog: + ``` + http://localhost:8083/opds + ``` +2. **Log in**: Use the default admin credentials: + - **Username:** admin + - **Password:** admin123 +3. **Database Setup**: If you do not have a Calibre database, download a sample from: + ``` + https://github.com/janeczku/calibre-web/raw/master/library/metadata.db + ``` + Move it out of the Calibre-Web folder to avoid overwriting during updates. +4. **Configure Calibre Database**: In the admin interface, set the `Location of Calibre database` to the path of the folder containing your Calibre library (where `metadata.db` is located) and click "Save". +5. **Google Drive Integration**: For hosting your Calibre library on Google Drive, refer to the [Google Drive integration guide](https://github.com/janeczku/calibre-web/wiki/G-Drive-Setup#using-google-drive-integration). +6. **Admin Configuration**: Configure your instance via the admin page, referring to the [Basic Configuration](https://github.com/janeczku/calibre-web/wiki/Configuration#basic-configuration) and [UI Configuration](https://github.com/janeczku/calibre-web/wiki/Configuration#ui-configuration) guides. ## Requirements -- Python 3.7+ -- [Imagemagick](https://imagemagick.org/script/download.php) for cover extraction from EPUBs (Windows users may need to install [Ghostscript](https://ghostscript.com/releases/gsdnld.html) for PDF cover extraction) -- Windows users need to install [libmagic for 32bit python](https://gnuwin32.sourceforge.net/downlinks/file.php) or [libmagic for 64bit python](https://github.com/nscaife/file-windows/releases/tag/20170108), depending on the python version; The files need to be installed in path (e.g. script folder of your Calibre-Web venv, or in the root folder of Calibre-Web -- Optional: [Calibre desktop program](https://calibre-ebook.com/download) for on-the-fly conversion and metadata editing (set "calibre's converter tool" path on the setup page) -- Optional: [Kepubify tool](https://github.com/pgaskin/kepubify/releases/latest) for Kobo device support (place the binary in `/opt/kepubify` on Linux or `C:\Program Files\kepubify` on Windows) +- **Python Version**: Ensure you have Python 3.7 or newer. +- **Imagemagick**: Required for cover extraction from EPUBs. Windows users may also need to install [Ghostscript](https://ghostscript.com/releases/gsdnld.html) for PDF cover extraction. +- **Windows Users**: Install [libmagic](https://gnuwin32.sourceforge.net/downlinks/file.php) for 32bit python or [libmagic for 64bit python](https://github.com/nscaife/file-windows/releases/tag/20170108), depending on your Python version. Make sure these files are included in your path. +- **Optional Tools**: + - **Calibre desktop program**: Recommended for on-the-fly conversion and metadata editing. Set the path to Calibre’s converter tool on the setup page. + - **Kepubify tool**: Needed for Kobo device support. Download the tool and place the binary in `/opt/kepubify` on Linux or `C:\Program Files\kepubify` on Windows. ## Docker Images -Pre-built Docker images are available in the following Docker Hub repositories (maintained by the LinuxServer team): +Pre-built Docker images are available: -#### **LinuxServer - x64, aarch64** -- [Docker Hub](https://hub.docker.com/r/linuxserver/calibre-web) -- [GitHub](https://github.com/linuxserver/docker-calibre-web) -- [GitHub - Optional Calibre layer](https://github.com/linuxserver/docker-mods/tree/universal-calibre) +### **LinuxServer - x64, aarch64** +- **Docker Hub**: [linuxserver/calibre-web](https://hub.docker.com/r/linuxserver/calibre-web) +- **GitHub**: [linuxserver/docker-calibre-web](https://github.com/linuxserver/docker-calibre-web) +- **Optional Calibre layer**: [linuxserver/docker-mods](https://github.com/linuxserver/docker-mods/tree/universal-calibre) - Include the environment variable `DOCKER_MODS=linuxserver/mods:universal-calibre` in your Docker run/compose file to add the Calibre `ebook-convert` binary (x64 only). Omit this variable for a lightweight image. +To include the Calibre `ebook-convert` binary (x64 only), add the environment variable: +``` +DOCKER_MODS=linuxserver/mods:universal-calibre +``` +in your Docker run/compose file. Omit this variable for a lightweight image. - Both the Calibre-Web and Calibre-Mod images are automatically rebuilt on new releases and updates. +- **Paths Configuration**: + - Set **Path to Calibre Binaries** to `/usr/bin`. + - Set **Path to Unrar** to `/usr/bin/unrar`. - - Set "Path to Calibre Binaries" to `/usr/bin` - - Set "Path to Unrar" to `/usr/bin/unrar` +## Troubleshooting + +- **Common Issues**: + - If you experience issues starting the application, check the log files located in the `logs` directory for error messages. + - If eBooks fail to load, verify that the `Location of Calibre database` is correctly set and that the database file is accessible. + +- **Configuration Errors**: Ensure that your Calibre database is compatible and properly formatted. Refer to the Calibre documentation for guidance on maintaining the database. + +- **Performance Problems**: + - If the application is slow, consider increasing the allocated resources (CPU/RAM) to your server or optimizing the Calibre database by removing duplicates and unnecessary entries. + - Regularly clear the cache in your web browser to improve loading times. + +- **User Management Issues**: If users are unable to log in or register, check the user permission settings in the admin interface. Ensure that registration is enabled and that users are being assigned appropriate roles. + +- **Support Resources**: For additional help, consider visiting the [FAQ section](https://github.com/janeczku/calibre-web/wiki/FAQ) of the wiki or posting your questions in the [Discord community](https://discord.gg/h2VsJ2NEfB). ## Contributor Recognition @@ -116,4 +167,21 @@ For more information, How To's, and FAQs, please visit the [Wiki](https://github ## Contributing to Calibre-Web -Check out our [Contributing Guidelines](https://github.com/janeczku/calibre-web/blob/master/CONTRIBUTING.md) +To contribute, please check our [Contributing Guidelines](https://github.com/janeczku/calibre-web/blob/master/CONTRIBUTING.md). We welcome issues, feature requests, and pull requests from the community. + +### Reporting Bugs + +If you encounter bugs or issues, please report them in the [issues section](https://github.com/janeczku/calibre-web/issues) of the repository. Be sure to include detailed information about your setup and the problem encountered. + +### Feature Requests + +We welcome suggestions for new features. Please create a new issue in the repository to discuss your ideas. + +## Additional Resources + +- **Documentation**: Comprehensive documentation is available on the [Calibre-Web wiki](https://github.com/janeczku/calibre-web/wiki). +- **Community Contributions**: Explore the [community contributions](https://github.com/janeczku/calibre-web/pulls) to see ongoing work and how you can get involved. + +--- + +Thank you for using Calibre-Web! We hope you enjoy managing your eBook library with our tool. From 07bf9047b0341d21bb4d7ad3313375669820776d Mon Sep 17 00:00:00 2001 From: contributor Date: Fri, 4 Oct 2024 19:30:28 +0300 Subject: [PATCH 06/22] pdf metadata - ignore NullObject /Keywords to fix http 500 upload error this fixes http 500 error while uploading valid PDF document with empty /Keywords --- cps/uploader.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/cps/uploader.py b/cps/uploader.py index e63ceaad..79016e49 100644 --- a/cps/uploader.py +++ b/cps/uploader.py @@ -39,17 +39,20 @@ except (ImportError, RuntimeError) as e: try: from pypdf import PdfReader + from pypdf.generic import NullObject use_pdf_meta = True except ImportError as ex: log.debug('PyPDF is recommended for best performance in metadata extracting from pdf files: %s', ex) try: from PyPDF2 import PdfReader + from pypdf.generic import NullObject use_pdf_meta = True except ImportError as ex: log.debug('PyPDF is recommended for best performance in metadata extracting from pdf files: %s', ex) log.debug('PyPdf2 is also possible for metadata extracting from pdf files, but not recommended anymore') try: from PyPDF3 import PdfFileReader as PdfReader + from pypdf.generic import NullObject use_pdf_meta = True except ImportError as e: log.debug('Cannot import PyPDF3/PyPDF2, extracting pdf metadata will not work: %s / %s', e) @@ -205,10 +208,12 @@ def pdf_meta(tmp_file_path, original_file_name, original_file_extension, no_cove if subject == '': subject = doc_info.subject or "" if tags == '' and '/Keywords' in doc_info: - if isinstance(doc_info['/Keywords'], bytes): - tags = doc_info['/Keywords'].decode('utf-8') - else: - tags = doc_info['/Keywords'] + keywords = doc_info['/Keywords'] + if not isinstance(keywords, NullObject): + if isinstance(keywords, bytes): + tags = keywords.decode('utf-8') + else: + tags = keywords else: title = original_file_name From e42e11e2a4cdd53cffabe825eb6e17148c9a49e8 Mon Sep 17 00:00:00 2001 From: lucaparsani <1308321+lucolucus@users.noreply.github.com.> Date: Wed, 9 Oct 2024 00:24:06 +0200 Subject: [PATCH 07/22] fix bookmarks button for safari browser --- cps/static/css/main.css | 1 - 1 file changed, 1 deletion(-) diff --git a/cps/static/css/main.css b/cps/static/css/main.css index 0dc0532c..3afaf7a5 100644 --- a/cps/static/css/main.css +++ b/cps/static/css/main.css @@ -77,7 +77,6 @@ body { } #panels a { - visibility: hidden; width: 18px; height: 20px; overflow: hidden; From c40c8a2255803d86cfe58b4356729cac1566a995 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Fri, 18 Oct 2024 20:24:49 +0200 Subject: [PATCH 08/22] Format seriesindex everywhere to 2 digits --- cps/jinjia.py | 6 ++++-- cps/static/js/table.js | 12 ++++++++++++ cps/templates/author.html | 4 ++-- cps/templates/book_edit.html | 2 +- cps/templates/book_table.html | 2 +- cps/templates/detail.html | 2 +- cps/templates/index.html | 4 ++-- cps/templates/listenmp3.html | 2 +- cps/templates/search.html | 2 +- cps/templates/shelf.html | 2 +- cps/templates/shelf_order.html | 2 +- cps/templates/shelfdown.html | 2 +- 12 files changed, 28 insertions(+), 14 deletions(-) diff --git a/cps/jinjia.py b/cps/jinjia.py index 39c7f20c..3db3e88a 100644 --- a/cps/jinjia.py +++ b/cps/jinjia.py @@ -111,14 +111,15 @@ def yesno(value, yes, no): @jinjia.app_template_filter('formatfloat') def formatfloat(value, decimals=1): - value = 0 if not value else value + if not value: + return value formated_value = ('{0:.' + str(decimals) + 'f}').format(value) if formated_value.endswith('.' + "0" * decimals): formated_value = formated_value.rstrip('0').rstrip('.') return formated_value -@jinjia.app_template_filter('formatseriesindex') +'''@jinjia.app_template_filter('formatseriesindex') def formatseriesindex_filter(series_index): if series_index: try: @@ -129,6 +130,7 @@ def formatseriesindex_filter(series_index): except (ValueError, TypeError): return series_index return 0 +''' @jinjia.app_template_filter('escapedlink') diff --git a/cps/static/js/table.js b/cps/static/js/table.js index 36361c3c..7f210eb1 100644 --- a/cps/static/js/table.js +++ b/cps/static/js/table.js @@ -685,6 +685,17 @@ function ratingFormatter(value, row) { return (value/2); } +function seriesIndexFormatter(value, row) { + if (!value) { + return value; + } + formated_value = Number(value).toFixed(2); + if (formated_value.endsWith(".00")) { + formated_value = parseInt(formated_value).toString(); + } + return formated_value; +} + /* Do some hiding disabling after user list is loaded */ function loadSuccess() { @@ -849,6 +860,7 @@ function BookCheckboxChange(checkbox, userId, field) { }, success: handleListServerResponse }); + console.log("test"); } diff --git a/cps/templates/author.html b/cps/templates/author.html index 1e02597c..a01bb40b 100644 --- a/cps/templates/author.html +++ b/cps/templates/author.html @@ -71,7 +71,7 @@ {{entry.Books.series[0].name}} - ({{entry.Books.series_index|formatseriesindex}}) + ({{entry.Books.series_index|formatfloat(2)}})

{% endif %} {% if entry.Books.ratings.__len__() > 0 %} @@ -122,7 +122,7 @@ {{entry.series[0].name}} - ({{entry.series_index|formatseriesindex}}) + ({{entry.series_index|formatfloat(2)}})

{% endif %}
diff --git a/cps/templates/book_edit.html b/cps/templates/book_edit.html index 94dbbb3b..1e4a1bc4 100644 --- a/cps/templates/book_edit.html +++ b/cps/templates/book_edit.html @@ -108,7 +108,7 @@
- +
diff --git a/cps/templates/book_table.html b/cps/templates/book_table.html index 16836b7b..1a0806b0 100644 --- a/cps/templates/book_table.html +++ b/cps/templates/book_table.html @@ -66,7 +66,7 @@ {{ text_table_row('authors', _('Enter Authors'),_('Authors'), true, true) }} {{ text_table_row('tags', _('Enter Categories'),_('Categories'), false, true) }} {{ text_table_row('series', _('Enter Series'),_('Series'), false, true) }} - {{_('Series Index')}} + {{_('Series Index')}} {{ text_table_row('languages', _('Enter Languages'),_('Languages'), false, true) }} {{ text_table_row('publishers', _('Enter Publishers'),_('Publishers'), false, true) }} diff --git a/cps/templates/detail.html b/cps/templates/detail.html index b52a231b..1eb81e30 100644 --- a/cps/templates/detail.html +++ b/cps/templates/detail.html @@ -147,7 +147,7 @@
{% endif %} {% if entry.series|length > 0 %} -

{{ _("Book %(index)s of %(range)s", index=entry.series_index | formatfloat(2), range=(url_for('web.books_list', data='series', sort_param='stored', book_id=entry.series[0].id)|escapedlink(entry.series[0].name))|safe) }}

+

{{ _("Book %(index)s of %(range)s", index=entry.series_index|formatfloat(2), range=(url_for('web.books_list', data='series', sort_param='stored', book_id=entry.series[0].id)|escapedlink(entry.series[0].name))|safe) }}

{% endif %} diff --git a/cps/templates/index.html b/cps/templates/index.html index 38fbb284..8e1446c5 100644 --- a/cps/templates/index.html +++ b/cps/templates/index.html @@ -42,7 +42,7 @@ {{entry.Books.series[0].name}} - ({{entry.Books.series_index|formatseriesindex}}) + ({{entry.Books.series_index|formatfloat(2)}})

{% endif %} {% if entry.Books.ratings.__len__() > 0 %} @@ -132,7 +132,7 @@ {% else %} {{entry.Books.series[0].name}} {% endif %} - ({{entry.Books.series_index|formatseriesindex}}) + ({{entry.Books.series_index|formatfloat(2)}})

{% endif %} {% if entry.Books.ratings.__len__() > 0 %} diff --git a/cps/templates/listenmp3.html b/cps/templates/listenmp3.html index 58466937..6cd8c607 100644 --- a/cps/templates/listenmp3.html +++ b/cps/templates/listenmp3.html @@ -59,7 +59,7 @@ {% endif %} {% if entry.series|length > 0 %} -

{{_("Book %(index)s of %(range)s", index=entry.series_index | formatfloat(2), range=(url_for('web.books_list', data='series', sort_param='stored', book_id=entry.series[0].id)|escapedlink(entry.series[0].name))|safe)}}

+

{{_("Book %(index)s of %(range)s", index=entry.series_index|formatfloat(2), range=(url_for('web.books_list', data='series', sort_param='stored', book_id=entry.series[0].id)|escapedlink(entry.series[0].name))|safe)}}

{% endif %} diff --git a/cps/templates/search.html b/cps/templates/search.html index 9a7af2d8..b406ebe3 100644 --- a/cps/templates/search.html +++ b/cps/templates/search.html @@ -82,7 +82,7 @@ {{entry.Books.series[0].name}} - ({{entry.Books.series_index|formatseriesindex}}) + ({{entry.Books.series_index|formatfloat(2)}})

{% endif %} diff --git a/cps/templates/shelf.html b/cps/templates/shelf.html index d9c4ec27..0c25b2cd 100644 --- a/cps/templates/shelf.html +++ b/cps/templates/shelf.html @@ -70,7 +70,7 @@ {{entry.Books.series[0].name}} - ({{entry.Books.series_index|formatseriesindex}}) + ({{entry.Books.series_index|formatfloat(2)}})

{% endif %} {% if entry.Books.ratings.__len__() > 0 %} diff --git a/cps/templates/shelf_order.html b/cps/templates/shelf_order.html index ee90fd47..5ec7a4b1 100644 --- a/cps/templates/shelf_order.html +++ b/cps/templates/shelf_order.html @@ -20,7 +20,7 @@ {{entry['Books']['title']}} {% if entry['Books']['series']|length > 0 %}
- {{entry['Books']['series_index']}} - {{entry['Books']['series'][0].name}} + {{entry['Books']['series_index']|formatfloat(2)}} - {{entry['Books']['series'][0].name}} {% endif %}
{% for author in entry['Books']['author'] %} diff --git a/cps/templates/shelfdown.html b/cps/templates/shelfdown.html index cb183a03..ecf5b252 100644 --- a/cps/templates/shelfdown.html +++ b/cps/templates/shelfdown.html @@ -45,7 +45,7 @@ {{entry.Books.series[0].name}} - ({{entry.Books.series_index}}) + ({{entry.Books.series_index|formatfloat(2)}})

{% endif %} From cb073daca365e78bbd65045584a8217f91115e21 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 19 Oct 2024 06:36:03 +0200 Subject: [PATCH 09/22] Changed response code to opds download forbidden to 401 instead of 404 --- cps/opds.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/cps/opds.py b/cps/opds.py index 3d8c78b9..485d241a 100644 --- a/cps/opds.py +++ b/cps/opds.py @@ -424,11 +424,8 @@ def feed_shelf(book_id): @requires_basic_auth_if_no_ano def opds_download_link(book_id, book_format): if not auth.current_user().role_download(): - return abort(403) - if "Kobo" in request.headers.get('User-Agent'): - client = "kobo" - else: - client = "" + return abort(401) + client = "kobo" if "Kobo" in request.headers.get('User-Agent') else "" return get_download_link(book_id, book_format.lower(), client) From cca8158bdfdc7faf1f6bdf43a20269c9b6a63e14 Mon Sep 17 00:00:00 2001 From: Andrej Kralj Date: Tue, 22 Oct 2024 08:21:00 +0200 Subject: [PATCH 10/22] Updates Slovenian translation --- cps/translations/sl/LC_MESSAGES/messages.po | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cps/translations/sl/LC_MESSAGES/messages.po b/cps/translations/sl/LC_MESSAGES/messages.po index 5cd8473b..4264f258 100644 --- a/cps/translations/sl/LC_MESSAGES/messages.po +++ b/cps/translations/sl/LC_MESSAGES/messages.po @@ -36,7 +36,7 @@ msgstr "Podatkovna baza je uspešno ponovno povezana" #: cps/admin.py:164 msgid "Unknown command" -msgstr "Neznani ukaz" +msgstr "Neznan ukaz" #: cps/admin.py:175 msgid "Success! Books queued for Metadata Backup, please check Tasks for result" @@ -54,11 +54,11 @@ msgstr "Administrativna stran" #: cps/admin.py:253 msgid "Basic Configuration" -msgstr "Osnovna nastavitev" +msgstr "Osnovne nastavitve" #: cps/admin.py:291 msgid "UI Configuration" -msgstr "Nastavitev uporabniškega vmesnika" +msgstr "Nastavitve uporabniškega vmesnika" #: cps/admin.py:325 cps/templates/admin.html:51 msgid "Edit Users" @@ -860,7 +860,7 @@ msgstr "Registracija pri %(provider)s" #: cps/oauth_bb.py:139 cps/remotelogin.py:131 #, python-format msgid "Success! You are now logged in as: %(nickname)s" -msgstr "Uspeh! Zdaj ste prijavljeni kot: %(nickname)s" +msgstr "Uspeh! Prijavljeni ste kot: %(nickname)s" #: cps/oauth_bb.py:149 #, python-format @@ -1412,7 +1412,7 @@ msgstr "Pred naslednjo prijavo počakajte eno minuto" #: cps/web.py:1402 #, python-format msgid "you are now logged in as: '%(nickname)s'" -msgstr "zdaj ste prijavljeni kot: '%(nickname)s'" +msgstr "prijavljeni ste kot: '%(nickname)s'" #: cps/web.py:1409 #, python-format @@ -1443,7 +1443,7 @@ msgstr "Za ponastavitev gesla vnesite veljavno uporabniško ime" #: cps/web.py:1439 #, python-format msgid "You are now logged in as: '%(nickname)s'" -msgstr "Zdaj ste prijavljeni kot: '%(nickname)s'" +msgstr "Prijavljeni ste kot: '%(nickname)s'" #: cps/web.py:1504 cps/web.py:1554 #, python-format @@ -2643,7 +2643,7 @@ msgstr "Dodaj v arhiv" #: cps/templates/detail.html:267 msgid "Mark Book as archived or not, to hide it in Calibre-Web and delete it from Kobo Reader" -msgstr "Označi knjigo kot arhivirano ali ne, da jo skriješ v Calibre-Web in izbrišeš iz Kobo bralnika" +msgstr "Označi knjigo kot arhivirano ali ne, da se skrije v Calibre-Web in izbriše iz Kobo bralnika" #: cps/templates/detail.html:267 msgid "Archive" From abedb134737ccdf87914eeddc9cfba6fb3a43223 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Fri, 25 Oct 2024 10:20:29 +0200 Subject: [PATCH 11/22] Improved ldap import user routine (fix for #3186) --- cps/admin.py | 2 +- cps/tasks/convert.py | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/cps/admin.py b/cps/admin.py index ff34e8b8..84106221 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -2081,7 +2081,7 @@ def _handle_edit_user(to_save, content, languages, translations, kobo_support): def extract_user_data_from_field(user, field): - match = re.search(field + r"=([@\.\d\s\w-]+)", user, re.IGNORECASE | re.UNICODE) + match = re.search(field + r"=(.*?)($|(? Date: Fri, 25 Oct 2024 10:21:44 +0200 Subject: [PATCH 12/22] Fix for caliber-convert parameter recognition bug with spaces in parameter (fix for #3189) --- cps/tasks/convert.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/cps/tasks/convert.py b/cps/tasks/convert.py index 0ece5817..70070be0 100644 --- a/cps/tasks/convert.py +++ b/cps/tasks/convert.py @@ -282,22 +282,30 @@ class TaskConvert(CalibreTask): if not ele.startswith('Traceback') and not ele.startswith(' File'): error_message = N_("Calibre failed with error: %(error)s", error=ele) return check, error_message - quotes = [1, 2, 4, 6] + quotes = [1, 2] + quotes_index = 4 command = [config.config_converterpath, (file_path + format_old_ext), - (file_path + format_new_ext)] + (file_path + format_new_ext), "-v", "-v"] if config.config_embed_metadata: + quotes.append([4]) + quotes_index = 5 command.extend(['--from-opf', path_tmp_opf]) - if has_cover: - command.extend(['--cover', os.path.join(os.path.dirname(file_path), 'cover.jpg')]) - # quotes_index = 3 + if has_cover: + quotes.append([6]) + command.extend(['--cover', os.path.join(os.path.dirname(file_path), 'cover.jpg')]) + quotes_index = 7 if config.config_calibre: - parameters = re.findall(r"--[\w-]+(?:(\s(?:(\".+\")|(?:.+?)|(?:(\'.+\'))))(?:\s|$))?", + parameters = re.findall(r"(--[\w-]+)(?:(\s(?:(\".+\")|(?:.+?)))(?:\s|$))?", config.config_calibre, re.IGNORECASE | re.UNICODE) if parameters: for param in parameters: - command.append(param) - #quotes.append(quotes_index) - #quotes_index += 1 + command.append(strip_whitespaces(param[0])) + quotes_index += 1 + if param[1] != "": + parsed = strip_whitespaces(param[1]).strip("\"") + command.append(parsed) + quotes.append(quotes_index) + quotes_index += 1 p = process_open(command, quotes, newlines=False) except OSError as e: return 1, N_("Ebook-converter failed: %(error)s", error=e) From e8cb84136b05adbf288431c5cae95b2996166b83 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Fri, 25 Oct 2024 10:29:41 +0200 Subject: [PATCH 13/22] Fix quotes for calibre convert on windows --- cps/tasks/convert.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cps/tasks/convert.py b/cps/tasks/convert.py index 70070be0..bba519ac 100644 --- a/cps/tasks/convert.py +++ b/cps/tasks/convert.py @@ -283,9 +283,9 @@ class TaskConvert(CalibreTask): error_message = N_("Calibre failed with error: %(error)s", error=ele) return check, error_message quotes = [1, 2] - quotes_index = 4 + quotes_index = 3 command = [config.config_converterpath, (file_path + format_old_ext), - (file_path + format_new_ext), "-v", "-v"] + (file_path + format_new_ext)] if config.config_embed_metadata: quotes.append([4]) quotes_index = 5 From 4fa752059843df5f0411cd314ccf657cc8804975 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Fri, 25 Oct 2024 12:26:35 +0200 Subject: [PATCH 14/22] Final fix for #3189 (also working on windows) --- cps/tasks/convert.py | 700 ++++++++++++++++++++++--------------------- 1 file changed, 351 insertions(+), 349 deletions(-) diff --git a/cps/tasks/convert.py b/cps/tasks/convert.py index bba519ac..dbdfae06 100644 --- a/cps/tasks/convert.py +++ b/cps/tasks/convert.py @@ -1,349 +1,351 @@ -# -*- coding: utf-8 -*- - -# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) -# Copyright (C) 2020 pwr -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import os -import re -from glob import glob -from shutil import copyfile, copyfileobj -from markupsafe import escape -from time import time -from uuid import uuid4 - -from sqlalchemy.exc import SQLAlchemyError -from flask_babel import lazy_gettext as N_ - -from cps.services.worker import CalibreTask -from cps import db -from cps import logger, config -from cps.subproc_wrapper import process_open -from flask_babel import gettext as _ -from cps.kobo_sync_status import remove_synced_book -from cps.ub import init_db_thread -from cps.file_helper import get_temp_dir - -from cps.tasks.mail import TaskEmail -from cps import gdriveutils, helper -from cps.constants import SUPPORTED_CALIBRE_BINARIES -from cps.string_helper import strip_whitespaces - -log = logger.create() - -current_milli_time = lambda: int(round(time() * 1000)) - - -class TaskConvert(CalibreTask): - def __init__(self, file_path, book_id, task_message, settings, ereader_mail, user=None): - super(TaskConvert, self).__init__(task_message) - self.worker_thread = None - self.file_path = file_path - self.book_id = book_id - self.title = "" - self.settings = settings - self.ereader_mail = ereader_mail - self.user = user - - self.results = dict() - - def run(self, worker_thread): - self.worker_thread = worker_thread - if config.config_use_google_drive: - worker_db = db.CalibreDB(expire_on_commit=False, init=True) - cur_book = worker_db.get_book(self.book_id) - self.title = cur_book.title - data = worker_db.get_book_format(self.book_id, self.settings['old_book_format']) - df = gdriveutils.getFileFromEbooksFolder(cur_book.path, - data.name + "." + self.settings['old_book_format'].lower()) - df_cover = gdriveutils.getFileFromEbooksFolder(cur_book.path, "cover.jpg") - if df: - datafile_cover = None - datafile = os.path.join(config.get_book_path(), - cur_book.path, - data.name + "." + self.settings['old_book_format'].lower()) - if df_cover: - datafile_cover = os.path.join(config.get_book_path(), - cur_book.path, "cover.jpg") - if not os.path.exists(os.path.join(config.get_book_path(), cur_book.path)): - os.makedirs(os.path.join(config.get_book_path(), cur_book.path)) - df.GetContentFile(datafile) - if df_cover: - df_cover.GetContentFile(datafile_cover) - worker_db.session.close() - else: - # ToDo Include cover in error handling - error_message = _("%(format)s not found on Google Drive: %(fn)s", - format=self.settings['old_book_format'], - fn=data.name + "." + self.settings['old_book_format'].lower()) - worker_db.session.close() - return self._handleError(error_message) - - filename = self._convert_ebook_format() - if config.config_use_google_drive: - os.remove(self.file_path + '.' + self.settings['old_book_format'].lower()) - if df_cover: - os.remove(os.path.join(config.config_calibre_dir, cur_book.path, "cover.jpg")) - - if filename: - if config.config_use_google_drive: - # Upload files to gdrive - gdriveutils.updateGdriveCalibreFromLocal() - self._handleSuccess() - if self.ereader_mail: - # if we're sending to E-Reader after converting, create a one-off task and run it immediately - # todo: figure out how to incorporate this into the progress - try: - EmailText = N_(u"%(book)s send to E-Reader", book=escape(self.title)) - for email in self.ereader_mail.split(','): - email = strip_whitespaces(email) - worker_thread.add(self.user, TaskEmail(self.settings['subject'], - self.results["path"], - filename, - self.settings, - email, - EmailText, - self.settings['body'], - id=self.book_id, - internal=True) - ) - except Exception as ex: - return self._handleError(str(ex)) - - def _convert_ebook_format(self): - error_message = None - local_db = db.CalibreDB(expire_on_commit=False, init=True) - file_path = self.file_path - book_id = self.book_id - format_old_ext = '.' + self.settings['old_book_format'].lower() - format_new_ext = '.' + self.settings['new_book_format'].lower() - - # check to see if destination format already exists - or if book is in database - # if it does - mark the conversion task as complete and return a success - # this will allow to send to E-Reader workflow to continue to work - if os.path.isfile(file_path + format_new_ext) or\ - local_db.get_book_format(self.book_id, self.settings['new_book_format']): - log.info("Book id %d already converted to %s", book_id, format_new_ext) - cur_book = local_db.get_book(book_id) - self.title = cur_book.title - self.results['path'] = cur_book.path - self.results['title'] = self.title - new_format = local_db.session.query(db.Data).filter(db.Data.book == book_id)\ - .filter(db.Data.format == self.settings['new_book_format'].upper()).one_or_none() - if not new_format: - new_format = db.Data(name=os.path.basename(file_path), - book_format=self.settings['new_book_format'].upper(), - book=book_id, uncompressed_size=os.path.getsize(file_path + format_new_ext)) - try: - local_db.session.merge(new_format) - local_db.session.commit() - except SQLAlchemyError as e: - local_db.session.rollback() - log.error("Database error: %s", e) - local_db.session.close() - self._handleError(N_("Oops! Database Error: %(error)s.", error=e)) - return - self._handleSuccess() - local_db.session.close() - return os.path.basename(file_path + format_new_ext) - else: - log.info("Book id %d - target format of %s does not exist. Moving forward with convert.", - book_id, - format_new_ext) - - if config.config_kepubifypath and format_old_ext == '.epub' and format_new_ext == '.kepub': - check, error_message = self._convert_kepubify(file_path, - format_old_ext, - format_new_ext) - else: - # check if calibre converter-executable is existing - if not os.path.exists(config.config_converterpath): - self._handleError(N_("Calibre ebook-convert %(tool)s not found", tool=config.config_converterpath)) - return - has_cover = local_db.get_book(book_id).has_cover - check, error_message = self._convert_calibre(file_path, format_old_ext, format_new_ext, has_cover) - - if check == 0: - cur_book = local_db.get_book(book_id) - if os.path.isfile(file_path + format_new_ext): - new_format = local_db.session.query(db.Data).filter(db.Data.book == book_id) \ - .filter(db.Data.format == self.settings['new_book_format'].upper()).one_or_none() - if not new_format: - new_format = db.Data(name=cur_book.data[0].name, - book_format=self.settings['new_book_format'].upper(), - book=book_id, uncompressed_size=os.path.getsize(file_path + format_new_ext)) - try: - local_db.session.merge(new_format) - local_db.session.commit() - if self.settings['new_book_format'].upper() in ['KEPUB', 'EPUB', 'EPUB3']: - ub_session = init_db_thread() - remove_synced_book(book_id, True, ub_session) - ub_session.close() - except SQLAlchemyError as e: - local_db.session.rollback() - log.error("Database error: %s", e) - local_db.session.close() - self._handleError(error_message) - return - self.results['path'] = cur_book.path - self.title = cur_book.title - self.results['title'] = self.title - if not config.config_use_google_drive: - self._handleSuccess() - return os.path.basename(file_path + format_new_ext) - else: - error_message = N_('%(format)s format not found on disk', format=format_new_ext.upper()) - local_db.session.close() - log.info("ebook converter failed with error while converting book") - if not error_message: - error_message = N_('Ebook converter failed with unknown error') - else: - log.error(error_message) - self._handleError(error_message) - return - - def _convert_kepubify(self, file_path, format_old_ext, format_new_ext): - if config.config_embed_metadata and config.config_binariesdir: - tmp_dir, temp_file_name = helper.do_calibre_export(self.book_id, format_old_ext[1:]) - filename = os.path.join(tmp_dir, temp_file_name + format_old_ext) - temp_file_path = tmp_dir - else: - filename = file_path + format_old_ext - temp_file_path = os.path.dirname(file_path) - quotes = [1, 3] - command = [config.config_kepubifypath, filename, '-o', temp_file_path, '-i'] - try: - p = process_open(command, quotes) - except OSError as e: - return 1, N_("Kepubify-converter failed: %(error)s", error=e) - self.progress = 0.01 - while True: - nextline = p.stdout.readlines() - nextline = [x.strip('\n') for x in nextline if x != '\n'] - for line in nextline: - log.debug(line) - if p.poll() is not None: - break - - # process returncode - check = p.returncode - - # move file - if check == 0: - converted_file = glob(os.path.splitext(filename)[0] + "*.kepub.epub") - if len(converted_file) == 1: - copyfile(converted_file[0], (file_path + format_new_ext)) - os.unlink(converted_file[0]) - else: - return 1, N_("Converted file not found or more than one file in folder %(folder)s", - folder=os.path.dirname(file_path)) - return check, None - - def _convert_calibre(self, file_path, format_old_ext, format_new_ext, has_cover): - path_tmp_opf = None - try: - # path_tmp_opf = self._embed_metadata() - if config.config_embed_metadata: - quotes = [5] - tmp_dir = get_temp_dir() - calibredb_binarypath = os.path.join(config.config_binariesdir, SUPPORTED_CALIBRE_BINARIES["calibredb"]) - my_env = os.environ.copy() - if config.config_calibre_split: - my_env['CALIBRE_OVERRIDE_DATABASE_PATH'] = os.path.join(config.config_calibre_dir, "metadata.db") - library_path = config.config_calibre_split_dir - else: - library_path = config.config_calibre_dir - - opf_command = [calibredb_binarypath, 'show_metadata', '--as-opf', str(self.book_id), - '--with-library', library_path] - p = process_open(opf_command, quotes, my_env) - p.wait() - check = p.returncode - calibre_traceback = p.stderr.readlines() - if check == 0: - path_tmp_opf = os.path.join(tmp_dir, "metadata_" + str(uuid4()) + ".opf") - with open(path_tmp_opf, 'w') as fd: - copyfileobj(p.stdout, fd) - else: - error_message = "" - for ele in calibre_traceback: - if not ele.startswith('Traceback') and not ele.startswith(' File'): - error_message = N_("Calibre failed with error: %(error)s", error=ele) - return check, error_message - quotes = [1, 2] - quotes_index = 3 - command = [config.config_converterpath, (file_path + format_old_ext), - (file_path + format_new_ext)] - if config.config_embed_metadata: - quotes.append([4]) - quotes_index = 5 - command.extend(['--from-opf', path_tmp_opf]) - if has_cover: - quotes.append([6]) - command.extend(['--cover', os.path.join(os.path.dirname(file_path), 'cover.jpg')]) - quotes_index = 7 - if config.config_calibre: - parameters = re.findall(r"(--[\w-]+)(?:(\s(?:(\".+\")|(?:.+?)))(?:\s|$))?", - config.config_calibre, re.IGNORECASE | re.UNICODE) - if parameters: - for param in parameters: - command.append(strip_whitespaces(param[0])) - quotes_index += 1 - if param[1] != "": - parsed = strip_whitespaces(param[1]).strip("\"") - command.append(parsed) - quotes.append(quotes_index) - quotes_index += 1 - p = process_open(command, quotes, newlines=False) - except OSError as e: - return 1, N_("Ebook-converter failed: %(error)s", error=e) - - while p.poll() is None: - nextline = p.stdout.readline() - if isinstance(nextline, bytes): - nextline = nextline.decode('utf-8', errors="ignore").strip('\r\n') - if nextline: - log.debug(nextline) - # parse progress string from calibre-converter - progress = re.search(r"(\d+)%\s.*", nextline) - if progress: - self.progress = int(progress.group(1)) / 100 - if config.config_use_google_drive: - self.progress *= 0.9 - - # process returncode - check = p.returncode - calibre_traceback = p.stderr.readlines() - error_message = "" - for ele in calibre_traceback: - ele = ele.decode('utf-8', errors="ignore").strip('\n') - log.debug(ele) - if not ele.startswith('Traceback') and not ele.startswith(' File'): - error_message = N_("Calibre failed with error: %(error)s", error=ele) - return check, error_message - - @property - def name(self): - return N_("Convert") - - def __str__(self): - if self.ereader_mail: - return "Convert Book {} and mail it to {}".format(self.book_id, self.ereader_mail) - else: - return "Convert Book {}".format(self.book_id) - - @property - def is_cancellable(self): - return False +# -*- coding: utf-8 -*- + +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2020 pwr +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import re +from glob import glob +from shutil import copyfile, copyfileobj +from markupsafe import escape +from time import time +from uuid import uuid4 + +from sqlalchemy.exc import SQLAlchemyError +from flask_babel import lazy_gettext as N_ + +from cps.services.worker import CalibreTask +from cps import db +from cps import logger, config +from cps.subproc_wrapper import process_open +from flask_babel import gettext as _ +from cps.kobo_sync_status import remove_synced_book +from cps.ub import init_db_thread +from cps.file_helper import get_temp_dir + +from cps.tasks.mail import TaskEmail +from cps import gdriveutils, helper +from cps.constants import SUPPORTED_CALIBRE_BINARIES +from cps.string_helper import strip_whitespaces + +log = logger.create() + +current_milli_time = lambda: int(round(time() * 1000)) + + +class TaskConvert(CalibreTask): + def __init__(self, file_path, book_id, task_message, settings, ereader_mail, user=None): + super(TaskConvert, self).__init__(task_message) + self.worker_thread = None + self.file_path = file_path + self.book_id = book_id + self.title = "" + self.settings = settings + self.ereader_mail = ereader_mail + self.user = user + + self.results = dict() + + def run(self, worker_thread): + self.worker_thread = worker_thread + if config.config_use_google_drive: + worker_db = db.CalibreDB(expire_on_commit=False, init=True) + cur_book = worker_db.get_book(self.book_id) + self.title = cur_book.title + data = worker_db.get_book_format(self.book_id, self.settings['old_book_format']) + df = gdriveutils.getFileFromEbooksFolder(cur_book.path, + data.name + "." + self.settings['old_book_format'].lower()) + df_cover = gdriveutils.getFileFromEbooksFolder(cur_book.path, "cover.jpg") + if df: + datafile_cover = None + datafile = os.path.join(config.get_book_path(), + cur_book.path, + data.name + "." + self.settings['old_book_format'].lower()) + if df_cover: + datafile_cover = os.path.join(config.get_book_path(), + cur_book.path, "cover.jpg") + if not os.path.exists(os.path.join(config.get_book_path(), cur_book.path)): + os.makedirs(os.path.join(config.get_book_path(), cur_book.path)) + df.GetContentFile(datafile) + if df_cover: + df_cover.GetContentFile(datafile_cover) + worker_db.session.close() + else: + # ToDo Include cover in error handling + error_message = _("%(format)s not found on Google Drive: %(fn)s", + format=self.settings['old_book_format'], + fn=data.name + "." + self.settings['old_book_format'].lower()) + worker_db.session.close() + return self._handleError(error_message) + + filename = self._convert_ebook_format() + if config.config_use_google_drive: + os.remove(self.file_path + '.' + self.settings['old_book_format'].lower()) + if df_cover: + os.remove(os.path.join(config.config_calibre_dir, cur_book.path, "cover.jpg")) + + if filename: + if config.config_use_google_drive: + # Upload files to gdrive + gdriveutils.updateGdriveCalibreFromLocal() + self._handleSuccess() + if self.ereader_mail: + # if we're sending to E-Reader after converting, create a one-off task and run it immediately + # todo: figure out how to incorporate this into the progress + try: + EmailText = N_(u"%(book)s send to E-Reader", book=escape(self.title)) + for email in self.ereader_mail.split(','): + email = strip_whitespaces(email) + worker_thread.add(self.user, TaskEmail(self.settings['subject'], + self.results["path"], + filename, + self.settings, + email, + EmailText, + self.settings['body'], + id=self.book_id, + internal=True) + ) + except Exception as ex: + return self._handleError(str(ex)) + + def _convert_ebook_format(self): + error_message = None + local_db = db.CalibreDB(expire_on_commit=False, init=True) + file_path = self.file_path + book_id = self.book_id + format_old_ext = '.' + self.settings['old_book_format'].lower() + format_new_ext = '.' + self.settings['new_book_format'].lower() + + # check to see if destination format already exists - or if book is in database + # if it does - mark the conversion task as complete and return a success + # this will allow to send to E-Reader workflow to continue to work + if os.path.isfile(file_path + format_new_ext) or\ + local_db.get_book_format(self.book_id, self.settings['new_book_format']): + log.info("Book id %d already converted to %s", book_id, format_new_ext) + cur_book = local_db.get_book(book_id) + self.title = cur_book.title + self.results['path'] = cur_book.path + self.results['title'] = self.title + new_format = local_db.session.query(db.Data).filter(db.Data.book == book_id)\ + .filter(db.Data.format == self.settings['new_book_format'].upper()).one_or_none() + if not new_format: + new_format = db.Data(name=os.path.basename(file_path), + book_format=self.settings['new_book_format'].upper(), + book=book_id, uncompressed_size=os.path.getsize(file_path + format_new_ext)) + try: + local_db.session.merge(new_format) + local_db.session.commit() + except SQLAlchemyError as e: + local_db.session.rollback() + log.error("Database error: %s", e) + local_db.session.close() + self._handleError(N_("Oops! Database Error: %(error)s.", error=e)) + return + self._handleSuccess() + local_db.session.close() + return os.path.basename(file_path + format_new_ext) + else: + log.info("Book id %d - target format of %s does not exist. Moving forward with convert.", + book_id, + format_new_ext) + + if config.config_kepubifypath and format_old_ext == '.epub' and format_new_ext == '.kepub': + check, error_message = self._convert_kepubify(file_path, + format_old_ext, + format_new_ext) + else: + # check if calibre converter-executable is existing + if not os.path.exists(config.config_converterpath): + self._handleError(N_("Calibre ebook-convert %(tool)s not found", tool=config.config_converterpath)) + return + has_cover = local_db.get_book(book_id).has_cover + check, error_message = self._convert_calibre(file_path, format_old_ext, format_new_ext, has_cover) + + if check == 0: + cur_book = local_db.get_book(book_id) + if os.path.isfile(file_path + format_new_ext): + new_format = local_db.session.query(db.Data).filter(db.Data.book == book_id) \ + .filter(db.Data.format == self.settings['new_book_format'].upper()).one_or_none() + if not new_format: + new_format = db.Data(name=cur_book.data[0].name, + book_format=self.settings['new_book_format'].upper(), + book=book_id, uncompressed_size=os.path.getsize(file_path + format_new_ext)) + try: + local_db.session.merge(new_format) + local_db.session.commit() + if self.settings['new_book_format'].upper() in ['KEPUB', 'EPUB', 'EPUB3']: + ub_session = init_db_thread() + remove_synced_book(book_id, True, ub_session) + ub_session.close() + except SQLAlchemyError as e: + local_db.session.rollback() + log.error("Database error: %s", e) + local_db.session.close() + self._handleError(error_message) + return + self.results['path'] = cur_book.path + self.title = cur_book.title + self.results['title'] = self.title + if not config.config_use_google_drive: + self._handleSuccess() + return os.path.basename(file_path + format_new_ext) + else: + error_message = N_('%(format)s format not found on disk', format=format_new_ext.upper()) + local_db.session.close() + log.info("ebook converter failed with error while converting book") + if not error_message: + error_message = N_('Ebook converter failed with unknown error') + else: + log.error(error_message) + self._handleError(error_message) + return + + def _convert_kepubify(self, file_path, format_old_ext, format_new_ext): + if config.config_embed_metadata and config.config_binariesdir: + tmp_dir, temp_file_name = helper.do_calibre_export(self.book_id, format_old_ext[1:]) + filename = os.path.join(tmp_dir, temp_file_name + format_old_ext) + temp_file_path = tmp_dir + else: + filename = file_path + format_old_ext + temp_file_path = os.path.dirname(file_path) + quotes = [1, 3] + command = [config.config_kepubifypath, filename, '-o', temp_file_path, '-i'] + try: + p = process_open(command, quotes) + except OSError as e: + return 1, N_("Kepubify-converter failed: %(error)s", error=e) + self.progress = 0.01 + while True: + nextline = p.stdout.readlines() + nextline = [x.strip('\n') for x in nextline if x != '\n'] + for line in nextline: + log.debug(line) + if p.poll() is not None: + break + + # process returncode + check = p.returncode + + # move file + if check == 0: + converted_file = glob(os.path.splitext(filename)[0] + "*.kepub.epub") + if len(converted_file) == 1: + copyfile(converted_file[0], (file_path + format_new_ext)) + os.unlink(converted_file[0]) + else: + return 1, N_("Converted file not found or more than one file in folder %(folder)s", + folder=os.path.dirname(file_path)) + return check, None + + def _convert_calibre(self, file_path, format_old_ext, format_new_ext, has_cover): + path_tmp_opf = None + try: + # path_tmp_opf = self._embed_metadata() + if config.config_embed_metadata: + quotes = [5] + tmp_dir = get_temp_dir() + calibredb_binarypath = os.path.join(config.config_binariesdir, SUPPORTED_CALIBRE_BINARIES["calibredb"]) + my_env = os.environ.copy() + if config.config_calibre_split: + my_env['CALIBRE_OVERRIDE_DATABASE_PATH'] = os.path.join(config.config_calibre_dir, "metadata.db") + library_path = config.config_calibre_split_dir + else: + library_path = config.config_calibre_dir + + opf_command = [calibredb_binarypath, 'show_metadata', '--as-opf', str(self.book_id), + '--with-library', library_path] + p = process_open(opf_command, quotes, my_env, newlines=False) + lines = list() + while p.poll() is None: + lines.append(p.stdout.readline()) + check = p.returncode + calibre_traceback = p.stderr.readlines() + if check == 0: + path_tmp_opf = os.path.join(tmp_dir, "metadata_" + str(uuid4()) + ".opf") + with open(path_tmp_opf, 'wb') as fd: + fd.write(b''.join(lines)) + else: + error_message = "" + for ele in calibre_traceback: + if not ele.startswith('Traceback') and not ele.startswith(' File'): + error_message = N_("Calibre failed with error: %(error)s", error=ele) + return check, error_message + quotes = [1, 2] + quotes_index = 3 + command = [config.config_converterpath, (file_path + format_old_ext), + (file_path + format_new_ext)] + if config.config_embed_metadata: + quotes.append(4) + quotes_index = 5 + command.extend(['--from-opf', path_tmp_opf]) + if has_cover: + quotes.append(6) + command.extend(['--cover', os.path.join(os.path.dirname(file_path), 'cover.jpg')]) + quotes_index = 7 + if config.config_calibre: + parameters = re.findall(r"(--[\w-]+)(?:(\s(?:(\".+\")|(?:.+?)))(?:\s|$))?", + config.config_calibre, re.IGNORECASE | re.UNICODE) + if parameters: + for param in parameters: + command.append(strip_whitespaces(param[0])) + quotes_index += 1 + if param[1] != "": + parsed = strip_whitespaces(param[1]).strip("\"") + command.append(parsed) + quotes.append(quotes_index) + quotes_index += 1 + p = process_open(command, quotes, newlines=False) + except OSError as e: + return 1, N_("Ebook-converter failed: %(error)s", error=e) + + while p.poll() is None: + nextline = p.stdout.readline() + if isinstance(nextline, bytes): + nextline = nextline.decode('utf-8', errors="ignore").strip('\r\n') + if nextline: + log.debug(nextline) + # parse progress string from calibre-converter + progress = re.search(r"(\d+)%\s.*", nextline) + if progress: + self.progress = int(progress.group(1)) / 100 + if config.config_use_google_drive: + self.progress *= 0.9 + + # process returncode + check = p.returncode + calibre_traceback = p.stderr.readlines() + error_message = "" + for ele in calibre_traceback: + ele = ele.decode('utf-8', errors="ignore").strip('\n') + log.debug(ele) + if not ele.startswith('Traceback') and not ele.startswith(' File'): + error_message = N_("Calibre failed with error: %(error)s", error=ele) + return check, error_message + + @property + def name(self): + return N_("Convert") + + def __str__(self): + if self.ereader_mail: + return "Convert Book {} and mail it to {}".format(self.book_id, self.ereader_mail) + else: + return "Convert Book {}".format(self.book_id) + + @property + def is_cancellable(self): + return False From d5059979d55932a5d1a40798359bcce35769d1e2 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Fri, 25 Oct 2024 14:18:22 +0200 Subject: [PATCH 15/22] Marked 2 strings as raw strings to suppress warnings --- cps/admin.py | 2 +- cps/string_helper.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cps/admin.py b/cps/admin.py index 84106221..f7a7bee2 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -2089,7 +2089,7 @@ def extract_user_data_from_field(user, field): def extract_dynamic_field_from_filter(user, filtr): - match = re.search("([a-zA-Z0-9-]+)=%s", filtr, re.IGNORECASE | re.UNICODE) + match = re.search(r"([a-zA-Z0-9-]+)=%s", filtr, re.IGNORECASE | re.UNICODE) if match: return match.group(1) else: diff --git a/cps/string_helper.py b/cps/string_helper.py index b2d0cf81..d263dd2f 100644 --- a/cps/string_helper.py +++ b/cps/string_helper.py @@ -19,5 +19,5 @@ import re def strip_whitespaces(text): - return re.sub("(^[\s\u200B-\u200D\ufeff]+)|([\s\u200B-\u200D\ufeff]+$)","", text) + return re.sub(r"(^[\s\u200B-\u200D\ufeff]+)|([\s\u200B-\u200D\ufeff]+$)","", text) From 2eb4f77a239fe7a209cce3b2201a64dad4d47c5c Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 26 Oct 2024 15:34:57 +0200 Subject: [PATCH 16/22] Display error message if visiblity resticting custom column is no available (Fix for #3190) --- cps/admin.py | 20 +++++++++++++++++--- cps/static/css/caliBlur.css | 7 +++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/cps/admin.py b/cps/admin.py index f7a7bee2..bc767a89 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -306,7 +306,15 @@ def edit_user_table(): .group_by(text('books_tags_link.tag')) \ .order_by(db.Tags.name).all() if config.config_restricted_column: - custom_values = calibre_db.session.query(db.cc_classes[config.config_restricted_column]).all() + try: + custom_values = calibre_db.session.query(db.cc_classes[config.config_restricted_column]).all() + except (KeyError, AttributeError, IndexError): + custom_values = [] + log.error("Custom Column No.{} does not exist in calibre database".format( + config.config_restricted_column)) + flash(_("Custom Column No.%(column)d does not exist in calibre database", + column=config.config_restricted_column), + category="error") else: custom_values = [] if not config.config_anonbrowse: @@ -982,8 +990,14 @@ def prepare_tags(user, action, tags_name, id_list): raise Exception(_("Tag not found")) new_tags_list = [x.name for x in tags] else: - tags = calibre_db.session.query(db.cc_classes[config.config_restricted_column]) \ - .filter(db.cc_classes[config.config_restricted_column].id.in_(id_list)).all() + try: + tags = calibre_db.session.query(db.cc_classes[config.config_restricted_column]) \ + .filter(db.cc_classes[config.config_restricted_column].id.in_(id_list)).all() + except (KeyError, AttributeError, IndexError): + log.error("Custom Column No.{} does not exist in calibre database".format( + config.config_restricted_column)) + raise Exception(_("Custom Column No.%(column)d does not exist in calibre database", + column=config.config_restricted_column)) new_tags_list = [x.value for x in tags] saved_tags_list = user.__dict__[tags_name].split(",") if len(user.__dict__[tags_name]) else [] if action == "remove": diff --git a/cps/static/css/caliBlur.css b/cps/static/css/caliBlur.css index 3647b871..dc42396a 100644 --- a/cps/static/css/caliBlur.css +++ b/cps/static/css/caliBlur.css @@ -3268,6 +3268,10 @@ div.btn-group[role=group][aria-label="Download, send to Kindle, reading"] > div. left: auto !important } +ul.dropdown-menu.offscreen { + margin: 2px -160px 0 +} + div.btn-group[role=group][aria-label="Download, send to Kindle, reading"] .dropdown-menu.offscreen { position: fixed; top: 120px; @@ -4333,6 +4337,7 @@ body.advanced_search > div.container-fluid > div.row-fluid > div.col-sm-10 > div .navbar-right > li > ul.dropdown-menu.offscreen { right: -10px + } .login .plexBack, body.login > div.container-fluid > div.row-fluid > div.col-sm-2, body.login > div.navbar.navbar-default.navbar-static-top > div > form { @@ -7951,3 +7956,5 @@ div.comments[data-readmore] { transition: height 300ms; overflow: hidden } + +.dropdown-menu > .offscreen From b94e1df51884555205c76ff93f6b3d679419cd26 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 26 Oct 2024 16:08:50 +0200 Subject: [PATCH 17/22] Delete custom column related values on database change --- cps/admin.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cps/admin.py b/cps/admin.py index bc767a89..08972292 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -1758,6 +1758,14 @@ def _db_configuration_update_helper(): ub.session.query(ub.KoboSyncedBooks).delete() helper.delete_thumbnail_cache() ub.session_commit() + # deleted visibilities based on custom column and tags + config.config_restricted_column = 0 + config.config_denied_tags = "" + config.config_allowed_tags = "" + config.config_columns_to_ignore = "" + config.config_denied_column_value = "" + config.config_allowed_column_value = "" + config.config_read_column = 0 _config_string(to_save, "config_calibre_dir") calibre_db.update_config(config) if not os.access(os.path.join(config.config_calibre_dir, "metadata.db"), os.W_OK): From c2ffa940cd18970eb78a9379a7a6b19664b8b7e5 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sun, 27 Oct 2024 07:05:50 +0100 Subject: [PATCH 18/22] Add cryptography to requirements --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 8fc03665..1f10b9d6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,3 +21,4 @@ regex>=2022.3.2,<2024.6.25 bleach>=6.0.0,<6.2.0 python-magic>=0.4.27,<0.5.0 flask-httpAuth>=4.4.0,<5.0.0 +cryptography>=30.0.0,<44.0.0 From bf9313ddeb0e2a821186ffe4ff44c6da717e34a9 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Mon, 28 Oct 2024 14:24:08 +0100 Subject: [PATCH 19/22] Update test status Updates after test run --- cps/search.py | 2 +- cps/static/js/edit_books.js | 2 +- test/Calibre-Web TestSummary_Linux.html | 358 ++++++++++++++---------- 3 files changed, 211 insertions(+), 151 deletions(-) diff --git a/cps/search.py b/cps/search.py index 8cdb9b4a..29dda16d 100644 --- a/cps/search.py +++ b/cps/search.py @@ -265,7 +265,7 @@ def render_adv_search_results(term, offset=None, order=None, limit=None): pub_end = term.get("publishend") rating_low = term.get("ratinghigh") rating_high = term.get("ratinglow") - description = term.get("comment") + description = term.get("comments") read_status = term.get("read_status") if author_name: author_name = strip_whitespaces(author_name).lower().replace(',', '|') diff --git a/cps/static/js/edit_books.js b/cps/static/js/edit_books.js index 46cc238c..54f615fb 100644 --- a/cps/static/js/edit_books.js +++ b/cps/static/js/edit_books.js @@ -3,7 +3,7 @@ */ /* global Bloodhound, language, Modernizr, tinymce, getPath */ -if ($("#comments").length) { +if ($("#comments").length && typeof tinymce !== "undefined") { tinymce.init({ selector: "#comments", plugins: 'code', diff --git a/test/Calibre-Web TestSummary_Linux.html b/test/Calibre-Web TestSummary_Linux.html index 3e1f5ada..dcba2316 100644 --- a/test/Calibre-Web TestSummary_Linux.html +++ b/test/Calibre-Web TestSummary_Linux.html @@ -37,20 +37,20 @@
-

Start Time: 2024-08-21 19:35:06

+

Start Time: 2024-10-27 21:36:02

-

Stop Time: 2024-08-22 02:49:49

+

Stop Time: 2024-10-28 04:51:42

-

Duration: 6h 7 min

+

Duration: 6h 8 min

@@ -1235,15 +1235,15 @@ - + TestEditBooks - 37 - 36 - 0 + 38 + 35 0 + 2 1 - Detail + Detail @@ -1276,11 +1276,44 @@ - +
TestEditBooks - test_edit_comments
- PASS + +
+ ERROR +
+ + + + @@ -1312,11 +1345,35 @@ - +
TestEditBooks - test_edit_custom_date
- PASS + +
+ ERROR +
+ + + + @@ -1598,6 +1655,15 @@ + + + +
TestEditBooks - test_xchange
+ + PASS + + + @@ -2087,11 +2153,9 @@
Traceback (most recent call last):
-  File "/home/ozzie/Development/calibre-web-test/test/test_edit_books_metadata.py", line 100, in test_load_metadata
-    self.assertEqual('https://amazon.com/', results[am]['source'])
-AssertionError: 'https://amazon.com/' != 'https://comicvine.gamespot.com/'
-- https://amazon.com/
-+ https://comicvine.gamespot.com/
+ File "/home/ozzie/Development/calibre-web-test/test/test_edit_books_metadata.py", line 128, in test_load_metadata + self.assertEqual(20, len(results)) +AssertionError: 20 != 10
@@ -2102,11 +2166,11 @@ AssertionError: 'https://amazon.com/' != 'https://comicvine.gamespot - + TestEditBooksOnGdrive 18 - 17 - 1 + 18 + 0 0 0 @@ -2269,31 +2333,11 @@ AssertionError: 'https://amazon.com/' != 'https://comicvine.gamespot - +
TestEditBooksOnGdrive - test_watch_metadata
- -
- FAIL -
- - - - + PASS @@ -2937,12 +2981,12 @@ AssertionError: 'series' unexpectedly found in {'id': 5, 're - + TestLdapLogin 13 - 13 - 0 + 12 0 + 1 0 Detail @@ -2996,11 +3040,31 @@ AssertionError: 'series' unexpectedly found in {'id': 5, 're - +
TestLdapLogin - test_LDAP_import_memberfield
- PASS + +
+ ERROR +
+ + + + @@ -3926,43 +3990,49 @@ AssertionError: 'series' unexpectedly found in {'id': 5, 're - - TestPipInstall - 3 - 3 + + _ErrorHolder + 1 0 0 + 1 0 - Detail + Detail - + -
TestPipInstall - test_command_start
+
setUpClass (test_pip_install)
- PASS - - - - - - -
TestPipInstall - test_foldername_database_location
+ +
+ ERROR +
+ + + - PASS - - - - - - -
TestPipInstall - test_module_start
- - PASS @@ -4217,12 +4287,12 @@ AssertionError: 'series' unexpectedly found in {'id': 5, 're - + TestShelf 17 - 15 + 16 + 0 0 - 1 1 Detail @@ -4249,44 +4319,11 @@ AssertionError: 'series' unexpectedly found in {'id': 5, 're - +
TestShelf - test_adv_search_shelf
- -
- ERROR -
- - - - + PASS @@ -4461,13 +4498,13 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 TestSplitLibrary - 7 - 7 + 8 + 8 0 0 0 - Detail + Detail @@ -4535,6 +4572,15 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 + + + +
TestSplitLibrary - test_wrong_config_lib
+ + PASS + + + @@ -4585,11 +4631,11 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - + TestThumbnails 8 - 7 - 0 + 6 + 1 0 1 @@ -4662,11 +4708,31 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestThumbnails - test_sideloaded_book
- PASS + +
+ FAIL +
+ + + + @@ -5873,9 +5939,9 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 Total 523 - 511 + 508 2 - 1 + 4 9   @@ -5904,7 +5970,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 Platform - Linux 6.8.0-40-generic #40~22.04.3-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 30 17:30:19 UTC 2 x86_64 x86_64 + Linux 6.8.0-47-generic #47~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Oct 2 16:16:55 UTC 2 x86_64 x86_64 Basic @@ -5914,12 +5980,6 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 Basic - - advocate - 1.0.0 - Basic - - APScheduler 3.10.4 @@ -5944,6 +6004,12 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 Basic + + cryptography + 43.0.3 + Basic + + Flask 3.0.3 @@ -5976,13 +6042,13 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 Flask-WTF - 1.2.1 + 1.2.2 Basic greenlet - 3.0.3 + 3.1.1 Basic @@ -6004,15 +6070,9 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 Basic - - pyasn1 - 0.6.0 - Basic - - pypdf - 4.2.0 + 5.0.1 Basic @@ -6024,7 +6084,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 pytz - 2024.1 + 2024.2 Basic @@ -6042,7 +6102,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 SQLAlchemy - 2.0.32 + 2.0.36 Basic @@ -6066,13 +6126,13 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 Werkzeug - 3.0.3 + 3.0.6 Basic google-api-python-client - 2.142.0 + 2.149.0 TestBackupMetadataGdrive @@ -6102,7 +6162,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 google-api-python-client - 2.142.0 + 2.149.0 TestCliGdrivedb @@ -6132,7 +6192,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 google-api-python-client - 2.142.0 + 2.149.0 TestEbookConvertCalibreGDrive @@ -6162,7 +6222,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 google-api-python-client - 2.142.0 + 2.149.0 TestEbookConvertGDriveKepubify @@ -6210,7 +6270,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 google-api-python-client - 2.142.0 + 2.149.0 TestEditAuthorsGdrive @@ -6246,7 +6306,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 google-api-python-client - 2.142.0 + 2.149.0 TestEditBooksOnGdrive @@ -6288,7 +6348,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 google-api-python-client - 2.142.0 + 2.149.0 TestEmbedMetadataGdrive @@ -6318,7 +6378,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 google-api-python-client - 2.142.0 + 2.149.0 TestSetupGdrive @@ -6354,7 +6414,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 python-Levenshtein - 0.25.1 + 0.26.1 TestGoodreads @@ -6414,7 +6474,7 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 From 2927b5d544449118dcb575a0a2abe0049802686a Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Mon, 28 Oct 2024 16:25:46 +0100 Subject: [PATCH 20/22] Updated requirements --- requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 1f10b9d6..6718fe1b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ Flask>=1.0.2,<3.1.0 iso-639>=0.4.5,<0.5.0 PyPDF>=3.15.6,<5.1.0 pytz>=2016.10 -requests>=2.28.0,<2.32.0 +requests>=2.32.0,<2.33.0 SQLAlchemy>=1.3.0,<2.1.0 tornado>=6.3,<6.5 Wand>=0.4.4,<0.7.0 @@ -14,8 +14,8 @@ unidecode>=0.04.19,<1.4.0 lxml>=4.9.1,<5.3.0 flask-wtf>=0.14.2,<1.3.0 chardet>=3.0.0,<5.3.0 -netifaces-plus>0.12.0,<0.13.0 -urllib3<2.0, >=1.22 +netifaces-plus>=0.12.0,<0.13.0 +urllib3>=1.22,<3.0 Flask-Limiter>=2.3.0,<3.9.0 regex>=2022.3.2,<2024.6.25 bleach>=6.0.0,<6.2.0 From deb1ff37b21c45ccbfa7ddc485606ad3ed024782 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Thu, 31 Oct 2024 19:09:00 +0100 Subject: [PATCH 21/22] Escape characters in filename for kepub conversion --- cps/tasks/convert.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 cps/tasks/convert.py diff --git a/cps/tasks/convert.py b/cps/tasks/convert.py old mode 100644 new mode 100755 index dbdfae06..08eb63ce --- a/cps/tasks/convert.py +++ b/cps/tasks/convert.py @@ -18,7 +18,7 @@ import os import re -from glob import glob +import glob from shutil import copyfile, copyfileobj from markupsafe import escape from time import time @@ -242,7 +242,7 @@ class TaskConvert(CalibreTask): # move file if check == 0: - converted_file = glob(os.path.splitext(filename)[0] + "*.kepub.epub") + converted_file = glob.glob(glob.escape(os.path.splitext(filename)[0]) + "*.kepub.epub") if len(converted_file) == 1: copyfile(converted_file[0], (file_path + format_new_ext)) os.unlink(converted_file[0]) From bf89bbc8bcee89afe82fed5f6a0f97e04d0ac844 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Thu, 31 Oct 2024 19:42:54 +0100 Subject: [PATCH 22/22] Fix series_index 0 isn't correctly synced to kobo (#3204) Update Teststatus --- cps/kobo.py | 20 +-- test/Calibre-Web TestSummary_Linux.html | 197 +++++++----------------- 2 files changed, 67 insertions(+), 150 deletions(-) diff --git a/cps/kobo.py b/cps/kobo.py index 3686c174..501cbb47 100644 --- a/cps/kobo.py +++ b/cps/kobo.py @@ -423,7 +423,7 @@ def get_series(book): def get_seriesindex(book): - return book.series_index or 1 + return book.series_index if isinstance(book.series_index, float) else 1 def get_language(book): @@ -486,14 +486,16 @@ def get_metadata(book): if get_series(book): name = get_series(book) - metadata["Series"] = { - "Name": get_series(book), - "Number": get_seriesindex(book), # ToDo Check int() ? - "NumberFloat": float(get_seriesindex(book)), - # Get a deterministic id based on the series name. - "Id": str(uuid.uuid3(uuid.NAMESPACE_DNS, name)), - } - + try: + metadata["Series"] = { + "Name": get_series(book), + "Number": get_seriesindex(book), # ToDo Check int() ? + "NumberFloat": float(get_seriesindex(book)), + # Get a deterministic id based on the series name. + "Id": str(uuid.uuid3(uuid.NAMESPACE_DNS, name)), + } + except Exception as e: + print(e) return metadata diff --git a/test/Calibre-Web TestSummary_Linux.html b/test/Calibre-Web TestSummary_Linux.html index dcba2316..f49d0366 100644 --- a/test/Calibre-Web TestSummary_Linux.html +++ b/test/Calibre-Web TestSummary_Linux.html @@ -37,20 +37,20 @@
-

Start Time: 2024-10-27 21:36:02

+

Start Time: 2024-10-31 19:45:00

-

Stop Time: 2024-10-28 04:51:42

+

Stop Time: 2024-11-01 03:02:38

-

Duration: 6h 8 min

+

Duration: 6h 11 min

@@ -1235,12 +1235,12 @@ - + TestEditBooks 38 - 35 + 37 + 0 0 - 2 1 Detail @@ -1276,44 +1276,11 @@ - +
TestEditBooks - test_edit_comments
- -
- ERROR -
- - - - + PASS @@ -1345,35 +1312,11 @@ dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16 - +
TestEditBooks - test_edit_custom_date
- -
- ERROR -
- - - - + PASS @@ -2122,12 +2065,12 @@ AttributeError: 'bool' object has no attribute 'text' - + TestLoadMetadata 1 0 - 1 0 + 1 0 Detail @@ -2136,26 +2079,26 @@ AttributeError: 'bool' object has no attribute 'text' - +
TestLoadMetadata - test_load_metadata
- FAIL + ERROR
-