\n"
"Language: pl\n"
@@ -33,621 +33,664 @@ msgstr "nie zainstalowane"
msgid "Excecution permissions missing"
msgstr ""
-#: cps/helper.py:55
+#: cps/helper.py:56
#, python-format
-msgid "epub format not found for book id: %(book)d"
+msgid "Epub format not found for book id: %(book)d"
msgstr ""
-#: cps/helper.py:71
+#: cps/helper.py:75
#, python-format
msgid "Convert: %s"
msgstr ""
-#: cps/helper.py:80
+#: cps/helper.py:84
msgid "Calibre-Web test e-mail"
msgstr ""
-#: cps/helper.py:81
+#: cps/helper.py:85
msgid "Test e-mail"
msgstr ""
-#: cps/helper.py:96
+#: cps/helper.py:100
msgid "Get Started with Calibre-Web"
msgstr ""
-#: cps/helper.py:97
+#: cps/helper.py:101
#, python-format
msgid "Registration e-mail for user: %s"
msgstr ""
-#: cps/helper.py:120 cps/helper.py:130
+#: cps/helper.py:124 cps/helper.py:134
msgid "Could not find any formats suitable for sending by e-mail"
msgstr ""
-#: cps/helper.py:132 cps/templates/detail.html:44 cps/worker.py:219
+#: cps/helper.py:136 cps/templates/detail.html:44 cps/worker.py:224
msgid "Send to Kindle"
msgstr "Wyślij do Kindle"
-#: cps/helper.py:133
+#: cps/helper.py:137
#, python-format
msgid "E-Mail: %s"
msgstr ""
-#: cps/helper.py:135
+#: cps/helper.py:139
msgid "The requested file could not be read. Maybe wrong permissions?"
msgstr ""
-#: cps/helper.py:230
+#: cps/helper.py:147
+#, python-format
+msgid "%(format)s format not found for book id: %(book)d"
+msgstr ""
+
+#: cps/helper.py:159
+#, python-format
+msgid "%(format)s not found on Google Drive: %(fn)s"
+msgstr ""
+
+#: cps/helper.py:171 cps/helper.py:178
+#, python-format
+msgid "Convert to %(format)s: %(book)s"
+msgstr ""
+
+#: cps/helper.py:184
+#, python-format
+msgid "%(format)s not found: %(fn)s"
+msgstr ""
+
+#: cps/helper.py:280
#, python-format
msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s"
msgstr ""
-#: cps/helper.py:239
+#: cps/helper.py:289
#, python-format
msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s"
msgstr ""
-#: cps/helper.py:262 cps/helper.py:271
+#: cps/helper.py:312 cps/helper.py:321
#, python-format
msgid "File %s not found on Google Drive"
msgstr ""
-#: cps/helper.py:289
+#: cps/helper.py:339
#, python-format
msgid "Book path %s not found on Google Drive"
msgstr ""
-#: cps/web.py:1065
+#: cps/helper.py:584
+msgid "Error excecuting UnRar"
+msgstr ""
+
+#: cps/helper.py:586
+msgid "Unrar binary file not found"
+msgstr ""
+
+#: cps/web.py:1138
msgid "Requesting update package"
msgstr "Żądanie o pakiet aktualizacji"
-#: cps/web.py:1066
+#: cps/web.py:1139
msgid "Downloading update package"
msgstr "Pobieranie pakietu aktualizacji"
-#: cps/web.py:1067
+#: cps/web.py:1140
msgid "Unzipping update package"
msgstr "Rozpakowywanie pakietu aktualizacji"
-#: cps/web.py:1068
+#: cps/web.py:1141
msgid "Files are replaced"
msgstr "Pliki zostały zastąpione"
-#: cps/web.py:1069
+#: cps/web.py:1142
msgid "Database connections are closed"
msgstr "Połączenia z bazą danych zostały zakończone"
-#: cps/web.py:1070
+#: cps/web.py:1143
msgid "Server is stopped"
msgstr "Serwer jest zatrzymany"
-#: cps/web.py:1071
+#: cps/web.py:1144
msgid "Update finished, please press okay and reload page"
msgstr "Aktualizacja zakończona, proszę nacisnąć OK i odświeżyć stronę"
-#: cps/web.py:1091
+#: cps/web.py:1164
msgid "Recently Added Books"
msgstr ""
-#: cps/web.py:1101
+#: cps/web.py:1174
msgid "Newest Books"
msgstr ""
-#: cps/web.py:1113
+#: cps/web.py:1186
msgid "Oldest Books"
msgstr ""
-#: cps/web.py:1125
+#: cps/web.py:1198
msgid "Books (A-Z)"
msgstr ""
-#: cps/web.py:1136
+#: cps/web.py:1209
msgid "Books (Z-A)"
msgstr ""
-#: cps/web.py:1165
+#: cps/web.py:1238
msgid "Hot Books (most downloaded)"
msgstr "Najpopularniejsze książki (najczęściej pobierane)"
-#: cps/web.py:1178
+#: cps/web.py:1251
msgid "Best rated books"
msgstr "Najlepiej oceniane książki"
-#: cps/templates/index.xml:36 cps/web.py:1190
+#: cps/templates/index.xml:36 cps/web.py:1263
msgid "Random Books"
msgstr "Losowe książki"
-#: cps/web.py:1205
+#: cps/web.py:1278
msgid "Author list"
msgstr "Lista autorów"
-#: cps/web.py:1217 cps/web.py:1280 cps/web.py:1434 cps/web.py:1986
+#: cps/web.py:1290 cps/web.py:1353 cps/web.py:1508 cps/web.py:2060
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "Błąd otwierania e-booka. Plik nie istnieje lub plik nie jest dostępny:"
-#: cps/templates/index.xml:73 cps/web.py:1264
+#: cps/templates/index.xml:73 cps/web.py:1337
msgid "Series list"
msgstr "Lista serii"
-#: cps/web.py:1278
+#: cps/web.py:1351
#, python-format
msgid "Series: %(serie)s"
msgstr "Seria: %(serie)s"
-#: cps/web.py:1305
+#: cps/web.py:1378
msgid "Available languages"
msgstr "Dostępne języki"
-#: cps/web.py:1322
+#: cps/web.py:1395
#, python-format
msgid "Language: %(name)s"
msgstr "Język: %(name)s"
-#: cps/templates/index.xml:66 cps/web.py:1333
+#: cps/templates/index.xml:66 cps/web.py:1406
msgid "Category list"
msgstr "Lista kategorii"
-#: cps/web.py:1347
+#: cps/web.py:1420
#, python-format
msgid "Category: %(name)s"
msgstr "Kategoria: %(name)s"
-#: cps/templates/layout.html:71 cps/web.py:1484
+#: cps/templates/layout.html:71 cps/web.py:1559
msgid "Tasks"
msgstr ""
-#: cps/web.py:1515
+#: cps/web.py:1589
msgid "Statistics"
msgstr "Statystyki"
-#: cps/web.py:1620
+#: cps/web.py:1694
msgid ""
"Callback domain is not verified, please follow steps to verify domain in "
"google developer console"
msgstr ""
-#: cps/web.py:1696
+#: cps/web.py:1770
msgid "Server restarted, please reload page"
msgstr "Serwer uruchomiony ponownie, proszę odświeżyć stronę"
-#: cps/web.py:1699
+#: cps/web.py:1773
msgid "Performing shutdown of server, please close window"
msgstr "Wykonano wyłączenie serwera, proszę zamknąć okno"
-#: cps/web.py:1717
+#: cps/web.py:1791
msgid "Update done"
msgstr "Aktualizacja zakończona"
-#: cps/web.py:1773 cps/web.py:1810
+#: cps/web.py:1847 cps/web.py:1884
#, python-format
msgid "%s: %s"
msgstr ""
-#: cps/web.py:1785
+#: cps/web.py:1859
#, python-format
msgid "Published after %s"
msgstr ""
-#: cps/web.py:1790
+#: cps/web.py:1864
msgid "Published before "
msgstr ""
-#: cps/web.py:1804
+#: cps/web.py:1878
#, python-format
msgid "Rating <= %s"
msgstr ""
-#: cps/web.py:1806
+#: cps/web.py:1880
#, python-format
msgid "Rating >= %s"
msgstr ""
-#: cps/web.py:1865 cps/web.py:1874
+#: cps/web.py:1939 cps/web.py:1948
msgid "search"
msgstr "szukaj"
#: cps/templates/index.xml:44 cps/templates/index.xml:48
-#: cps/templates/layout.html:146 cps/web.py:1941
+#: cps/templates/layout.html:146 cps/web.py:2015
msgid "Read Books"
msgstr "Przeczytane książki"
#: cps/templates/index.xml:52 cps/templates/index.xml:56
-#: cps/templates/layout.html:148 cps/web.py:1944
+#: cps/templates/layout.html:148 cps/web.py:2018
msgid "Unread Books"
msgstr "Nieprzeczytane książki"
-#: cps/web.py:1996 cps/web.py:1998 cps/web.py:2000 cps/web.py:2012
+#: cps/web.py:2070 cps/web.py:2072 cps/web.py:2074 cps/web.py:2086
msgid "Read a Book"
msgstr "Czytaj książkę"
-#: cps/web.py:2069 cps/web.py:2936
+#: cps/web.py:2152 cps/web.py:3029
msgid "Please fill out all fields!"
msgstr "Proszę wypełnić wszystkie pola!"
-#: cps/web.py:2070 cps/web.py:2091 cps/web.py:2095 cps/web.py:2100
-#: cps/web.py:2102
+#: cps/web.py:2153 cps/web.py:2174 cps/web.py:2178 cps/web.py:2183
+#: cps/web.py:2185
msgid "register"
msgstr "rejestracja"
-#: cps/web.py:2090 cps/web.py:3152
+#: cps/web.py:2173 cps/web.py:3245
msgid "An unknown error occurred. Please try again later."
msgstr ""
-#: cps/web.py:2093
+#: cps/web.py:2176
msgid "Your e-mail is not allowed to register"
msgstr ""
-#: cps/web.py:2096
+#: cps/web.py:2179
msgid "Confirmation e-mail was send to your e-mail account."
msgstr ""
-#: cps/web.py:2099
+#: cps/web.py:2182
msgid "This username or e-mail address is already in use."
msgstr ""
-#: cps/web.py:2116 cps/web.py:2212
+#: cps/web.py:2199 cps/web.py:2295
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr "Zalogowałeś się jako: '%(nickname)s'"
-#: cps/web.py:2121
+#: cps/web.py:2204
msgid "Wrong Username or Password"
msgstr "Błędna nazwa użytkownika lub hasło"
-#: cps/web.py:2127 cps/web.py:2148
+#: cps/web.py:2210 cps/web.py:2231
msgid "login"
msgstr "logowanie"
-#: cps/web.py:2160 cps/web.py:2191
+#: cps/web.py:2243 cps/web.py:2274
msgid "Token not found"
msgstr ""
-#: cps/web.py:2168 cps/web.py:2199
+#: cps/web.py:2251 cps/web.py:2282
msgid "Token has expired"
msgstr ""
-#: cps/web.py:2176
+#: cps/web.py:2259
msgid "Success! Please return to your device"
msgstr ""
-#: cps/web.py:2226
+#: cps/web.py:2309
msgid "Please configure the SMTP mail settings first..."
msgstr "Proszę najpierw skonfigurować ustawienia SMTP poczty e-mail..."
-#: cps/web.py:2230
+#: cps/web.py:2313
#, python-format
msgid "Book successfully queued for sending to %(kindlemail)s"
msgstr ""
-#: cps/web.py:2234
+#: cps/web.py:2317
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr "Wystąpił błąd podczas wysyłania tej książki: %(res)s"
-#: cps/web.py:2236 cps/web.py:2990
+#: cps/web.py:2319 cps/web.py:3083
msgid "Please configure your kindle e-mail address first..."
msgstr ""
-#: cps/web.py:2280
+#: cps/web.py:2363
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr "Książka została dodana do półki: %(sname)s"
-#: cps/web.py:2291
+#: cps/web.py:2374
msgid "Invalid shelf specified"
msgstr ""
-#: cps/web.py:2296
+#: cps/web.py:2379
#, python-format
msgid "You are not allowed to add a book to the the shelf: %s"
msgstr ""
-#: cps/web.py:2301
+#: cps/web.py:2384
msgid "User is not allowed to edit public shelves"
msgstr ""
-#: cps/web.py:2319
+#: cps/web.py:2402
#, python-format
msgid "Books are already part of the shelf: %s"
msgstr ""
-#: cps/web.py:2333
+#: cps/web.py:2416
#, python-format
msgid "Books have been added to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2335
+#: cps/web.py:2418
#, python-format
msgid "Could not add books to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2372
+#: cps/web.py:2455
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr "Książka została usunięta z półki: %(sname)s"
-#: cps/web.py:2378
+#: cps/web.py:2461
#, python-format
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2398 cps/web.py:2422
+#: cps/web.py:2481 cps/web.py:2505
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr "Półka o nazwie '%(title)s' już istnieje."
-#: cps/web.py:2403
+#: cps/web.py:2486
#, python-format
msgid "Shelf %(title)s created"
msgstr "Półka %(title)s została utworzona"
-#: cps/web.py:2405 cps/web.py:2433
+#: cps/web.py:2488 cps/web.py:2516
msgid "There was an error"
msgstr "Wystąpił błąd"
-#: cps/web.py:2406 cps/web.py:2408
+#: cps/web.py:2489 cps/web.py:2491
msgid "create a shelf"
msgstr "utwórz półkę"
-#: cps/web.py:2431
+#: cps/web.py:2514
#, python-format
msgid "Shelf %(title)s changed"
msgstr "Półka %(title)s została zmieniona"
-#: cps/web.py:2434 cps/web.py:2436
+#: cps/web.py:2517 cps/web.py:2519
msgid "Edit a shelf"
msgstr "Edytuj półkę"
-#: cps/web.py:2457
+#: cps/web.py:2540
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr "pomyślnie usunięto półkę %(name)s"
-#: cps/web.py:2479
+#: cps/web.py:2562
#, python-format
msgid "Shelf: '%(name)s'"
msgstr "Półka: '%(name)s'"
-#: cps/web.py:2482
+#: cps/web.py:2565
msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr ""
-#: cps/web.py:2513
+#: cps/web.py:2596
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr "Zmieniono kolejność półki: '%(name)s'"
-#: cps/web.py:2542 cps/web.py:2942
+#: cps/web.py:2625 cps/web.py:3035
msgid "E-mail is not from valid domain"
msgstr ""
-#: cps/web.py:2544 cps/web.py:2585 cps/web.py:2588
+#: cps/web.py:2627 cps/web.py:2668 cps/web.py:2671
#, python-format
msgid "%(name)s's profile"
msgstr "Profil użytkownika %(name)s"
-#: cps/web.py:2583
+#: cps/web.py:2666
msgid "Found an existing account for this e-mail address."
msgstr ""
-#: cps/web.py:2586
+#: cps/web.py:2669
msgid "Profile updated"
msgstr "Zaktualizowano profil"
-#: cps/web.py:2598
+#: cps/web.py:2681
msgid "Unknown"
msgstr ""
-#: cps/web.py:2612
+#: cps/web.py:2695
msgid "Admin page"
msgstr "Portal administracyjny"
-#: cps/web.py:2690 cps/web.py:2852
+#: cps/web.py:2773 cps/web.py:2945
msgid "Calibre-Web configuration updated"
msgstr "Konfiguracja Calibre-Web została zaktualizowana"
-#: cps/templates/admin.html:87 cps/web.py:2703
+#: cps/templates/admin.html:91 cps/web.py:2786
msgid "UI Configuration"
msgstr ""
-#: cps/web.py:2720
+#: cps/web.py:2803
msgid "Import of optional Google Drive requirements missing"
msgstr ""
-#: cps/web.py:2723
+#: cps/web.py:2806
msgid "client_secrets.json is missing or not readable"
msgstr ""
-#: cps/web.py:2728 cps/web.py:2755
+#: cps/web.py:2811 cps/web.py:2838
msgid "client_secrets.json is not configured for web application"
msgstr ""
-#: cps/templates/admin.html:86 cps/web.py:2758 cps/web.py:2784 cps/web.py:2796
-#: cps/web.py:2839 cps/web.py:2860 cps/web.py:2867 cps/web.py:2884
+#: cps/templates/admin.html:90 cps/web.py:2841 cps/web.py:2867 cps/web.py:2879
+#: cps/web.py:2921 cps/web.py:2936 cps/web.py:2953 cps/web.py:2960
+#: cps/web.py:2977
msgid "Basic Configuration"
msgstr "Podstawowa konfiguracja"
-#: cps/web.py:2781
+#: cps/web.py:2864
msgid "Keyfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:2793
+#: cps/web.py:2876
msgid "Certfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:2836
+#: cps/web.py:2918
msgid "Logfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:2864
+#: cps/web.py:2957
msgid "DB location is not valid, please enter correct path"
msgstr "Lokalizacja bazy danych jest nieprawidłowa, wpisz poprawną ścieżkę"
-#: cps/templates/admin.html:31 cps/web.py:2938 cps/web.py:2944 cps/web.py:2960
+#: cps/templates/admin.html:31 cps/web.py:3031 cps/web.py:3037 cps/web.py:3053
msgid "Add new user"
msgstr "Dodaj nowego użytkownika"
-#: cps/web.py:2950
+#: cps/web.py:3043
#, python-format
msgid "User '%(user)s' created"
msgstr "Użytkownik '%(user)s' został utworzony"
-#: cps/web.py:2954
+#: cps/web.py:3047
msgid "Found an existing account for this e-mail address or nickname."
msgstr ""
-#: cps/web.py:2978 cps/web.py:2992
+#: cps/web.py:3071 cps/web.py:3085
msgid "E-mail server settings updated"
msgstr ""
-#: cps/web.py:2985
+#: cps/web.py:3078
#, python-format
msgid "Test e-mail successfully send to %(kindlemail)s"
msgstr ""
-#: cps/web.py:2988
+#: cps/web.py:3081
#, python-format
msgid "There was an error sending the Test e-mail: %(res)s"
msgstr ""
-#: cps/web.py:2993
+#: cps/web.py:3086
msgid "Edit e-mail server settings"
msgstr ""
-#: cps/web.py:3018
+#: cps/web.py:3111
#, python-format
msgid "User '%(nick)s' deleted"
msgstr "Użytkownik '%(nick)s' został usunięty"
-#: cps/web.py:3127
+#: cps/web.py:3220
#, python-format
msgid "User '%(nick)s' updated"
msgstr "Użytkownik '%(nick)s' został zaktualizowany"
-#: cps/web.py:3130
+#: cps/web.py:3223
msgid "An unknown error occured."
msgstr "Wystąpił nieznany błąd."
-#: cps/web.py:3132
+#: cps/web.py:3225
#, python-format
msgid "Edit User %(nick)s"
msgstr "Edytuj użytkownika %(nick)s"
-#: cps/web.py:3149
+#: cps/web.py:3242
#, python-format
msgid "Password for user %s reset"
msgstr ""
-#: cps/web.py:3169
+#: cps/web.py:3262
msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr ""
-#: cps/web.py:3184 cps/web.py:3445 cps/web.py:3450 cps/web.py:3605
+#: cps/web.py:3294 cps/web.py:3556 cps/web.py:3561 cps/web.py:3716
msgid "edit metadata"
msgstr "edytuj metadane"
-#: cps/web.py:3197 cps/web.py:3475
+#: cps/web.py:3308 cps/web.py:3586
#, python-format
msgid "File extension \"%s\" is not allowed to be uploaded to this server"
msgstr "Rozszerzenie pliku \"%s\" nie jest dozwolone do przesłania na ten serwer"
-#: cps/web.py:3201 cps/web.py:3479
+#: cps/web.py:3312 cps/web.py:3590
msgid "File to be uploaded must have an extension"
msgstr "Plik do przesłania musi mieć rozszerzenie"
-#: cps/web.py:3213 cps/web.py:3499
+#: cps/web.py:3324 cps/web.py:3610
#, python-format
msgid "Failed to create path %s (Permission denied)."
msgstr "Nie udało się utworzyć łącza %s (Odmowa dostępu)."
-#: cps/web.py:3218
+#: cps/web.py:3329
#, python-format
msgid "Failed to store file %s."
msgstr ""
-#: cps/web.py:3234
+#: cps/web.py:3345
#, python-format
msgid "File format %s added to %s"
msgstr ""
-#: cps/web.py:3252
+#: cps/web.py:3363
#, python-format
msgid "Failed to create path for cover %s (Permission denied)."
msgstr ""
-#: cps/web.py:3259
+#: cps/web.py:3370
#, python-format
msgid "Failed to store cover-file %s."
msgstr ""
-#: cps/web.py:3262
+#: cps/web.py:3373
msgid "Cover-file is not a valid image file"
msgstr ""
-#: cps/web.py:3275 cps/web.py:3279
+#: cps/web.py:3386 cps/web.py:3390
msgid "unknown"
msgstr ""
-#: cps/web.py:3301
+#: cps/web.py:3412
msgid "Cover is not a jpg file, can't save"
msgstr ""
-#: cps/web.py:3454
+#: cps/web.py:3565
msgid "Error editing book, please check logfile for details"
msgstr ""
-#: cps/web.py:3504
+#: cps/web.py:3615
#, python-format
msgid "Failed to store file %s (Permission denied)."
msgstr "Nie można przechowywać pliku %s (Odmowa dostępu)."
-#: cps/web.py:3509
+#: cps/web.py:3620
#, python-format
msgid "Failed to delete file %s (Permission denied)."
msgstr "Nie udało się usunąć pliku %s (Odmowa dostępu)."
-#: cps/web.py:3591
+#: cps/web.py:3702
#, python-format
msgid "File %s uploaded"
msgstr ""
-#: cps/worker.py:212 cps/worker.py:366
+#: cps/web.py:3732
+msgid "Source or destination format for conversion missing"
+msgstr ""
+
+#: cps/web.py:3742
+#, python-format
+msgid "Book successfully queued for converting to %(book_format)s"
+msgstr ""
+
+#: cps/web.py:3746
+#, python-format
+msgid "There was an error converting this book: %(res)s"
+msgstr ""
+
+#: cps/worker.py:215 cps/worker.py:385
msgid "Started"
msgstr ""
-#: cps/worker.py:221
+#: cps/worker.py:226
#, python-format
msgid "E-mail: %stitle"
msgstr ""
-#: cps/worker.py:229
+#: cps/worker.py:237
#, python-format
msgid "Convertertool %(converter)s not found"
msgstr ""
-#: cps/worker.py:256
+#: cps/worker.py:272
#, python-format
msgid "Ebook-converter failed: %s"
msgstr ""
-#: cps/worker.py:266
+#: cps/worker.py:283
#, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr ""
-#: cps/worker.py:299 cps/worker.py:355 cps/worker.py:418
+#: cps/worker.py:316 cps/worker.py:375 cps/worker.py:437
msgid "Finished"
msgstr ""
-#: cps/worker.py:322 cps/worker.py:341
+#: cps/worker.py:342 cps/worker.py:361
msgid "Waiting"
msgstr ""
-#: cps/worker.py:330
+#: cps/worker.py:349
msgid "This e-mail has been sent via Calibre-Web."
msgstr ""
-#: cps/worker.py:444
+#: cps/worker.py:463
msgid "Failed"
msgstr ""
@@ -660,8 +703,8 @@ msgid "Nickname"
msgstr "Nazwa użytkownika"
#: cps/templates/admin.html:8
-msgid "Email"
-msgstr "Email"
+msgid "E-mail"
+msgstr ""
#: cps/templates/admin.html:9
msgid "Kindle"
@@ -724,9 +767,9 @@ msgstr "Konfiguracja"
msgid "Calibre DB dir"
msgstr "Folder bazy danych Calibre"
-#: cps/templates/admin.html:57 cps/templates/config_edit.html:106
-msgid "Log Level"
-msgstr "Poziom logów"
+#: cps/templates/admin.html:57
+msgid "Log level"
+msgstr ""
#: cps/templates/admin.html:61
msgid "Port"
@@ -741,68 +784,72 @@ msgid "Uploading"
msgstr "Wysyłanie"
#: cps/templates/admin.html:75
+msgid "Anonymous browsing"
+msgstr ""
+
+#: cps/templates/admin.html:79
msgid "Public registration"
msgstr "Publiczna rejestracja"
-#: cps/templates/admin.html:79 cps/templates/remote_login.html:4
+#: cps/templates/admin.html:83 cps/templates/remote_login.html:4
msgid "Remote login"
msgstr ""
-#: cps/templates/admin.html:89
+#: cps/templates/admin.html:93
msgid "Administration"
msgstr "Zarządzanie"
-#: cps/templates/admin.html:90
+#: cps/templates/admin.html:94
msgid "Current commit timestamp"
msgstr "Znacznik czasowy zainstalowanej wersji"
-#: cps/templates/admin.html:91
+#: cps/templates/admin.html:95
msgid "Newest commit timestamp"
msgstr "Znacznik czasowy nowej wersji"
-#: cps/templates/admin.html:93
+#: cps/templates/admin.html:97
msgid "Reconnect to Calibre DB"
msgstr "Połącz ponownie z bazą danych Calibre"
-#: cps/templates/admin.html:94
+#: cps/templates/admin.html:98
msgid "Restart Calibre-Web"
msgstr "Uruchom ponownie Calibre Web"
-#: cps/templates/admin.html:95
+#: cps/templates/admin.html:99
msgid "Stop Calibre-Web"
msgstr "Zatrzymaj Calibre Web"
-#: cps/templates/admin.html:96
+#: cps/templates/admin.html:100
msgid "Check for update"
msgstr "Sprawdź aktualizacje"
-#: cps/templates/admin.html:97
+#: cps/templates/admin.html:101
msgid "Perform Update"
msgstr "Wykonaj aktualizację"
-#: cps/templates/admin.html:106
+#: cps/templates/admin.html:110
msgid "Do you really want to restart Calibre-Web?"
msgstr "Na pewno chcesz uruchomić ponownie Calibre Web?"
-#: cps/templates/admin.html:111 cps/templates/admin.html:125
-#: cps/templates/admin.html:146 cps/templates/shelf.html:59
+#: cps/templates/admin.html:115 cps/templates/admin.html:129
+#: cps/templates/admin.html:150 cps/templates/shelf.html:59
msgid "Ok"
msgstr "OK"
-#: cps/templates/admin.html:112 cps/templates/admin.html:126
-#: cps/templates/book_edit.html:148 cps/templates/book_edit.html:170
-#: cps/templates/config_edit.html:206 cps/templates/config_view_edit.html:164
+#: cps/templates/admin.html:116 cps/templates/admin.html:130
+#: cps/templates/book_edit.html:176 cps/templates/book_edit.html:198
+#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:164
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
#: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19
#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:153
msgid "Back"
msgstr "Wróć"
-#: cps/templates/admin.html:124
+#: cps/templates/admin.html:128
msgid "Do you really want to stop Calibre-Web?"
msgstr "Na pewno chcesz zatrzymać Calibre Web?"
-#: cps/templates/admin.html:137
+#: cps/templates/admin.html:141
msgid "Updating, please do not reload page"
msgstr "Aktualizowanie, proszę nie odświeżać strony"
@@ -826,137 +873,153 @@ msgstr ""
msgid "Delete formats:"
msgstr ""
-#: cps/templates/book_edit.html:22 cps/templates/book_edit.html:169
+#: cps/templates/book_edit.html:22 cps/templates/book_edit.html:197
#: cps/templates/email_edit.html:73 cps/templates/email_edit.html:74
msgid "Delete"
msgstr ""
-#: cps/templates/book_edit.html:31 cps/templates/search_form.html:6
+#: cps/templates/book_edit.html:30
+msgid "Convert book format:"
+msgstr ""
+
+#: cps/templates/book_edit.html:34
+msgid "Convert from:"
+msgstr ""
+
+#: cps/templates/book_edit.html:41
+msgid "Convert to:"
+msgstr ""
+
+#: cps/templates/book_edit.html:50
+msgid "Convert book"
+msgstr ""
+
+#: cps/templates/book_edit.html:59 cps/templates/search_form.html:6
msgid "Book Title"
msgstr "Tytuł książki"
-#: cps/templates/book_edit.html:35 cps/templates/book_edit.html:229
-#: cps/templates/book_edit.html:247 cps/templates/search_form.html:10
+#: cps/templates/book_edit.html:63 cps/templates/book_edit.html:257
+#: cps/templates/book_edit.html:275 cps/templates/search_form.html:10
msgid "Author"
msgstr "Autor"
-#: cps/templates/book_edit.html:39 cps/templates/book_edit.html:234
-#: cps/templates/book_edit.html:249 cps/templates/search_form.html:106
+#: cps/templates/book_edit.html:67 cps/templates/book_edit.html:262
+#: cps/templates/book_edit.html:277 cps/templates/search_form.html:106
msgid "Description"
msgstr "Opis"
-#: cps/templates/book_edit.html:43 cps/templates/search_form.html:33
+#: cps/templates/book_edit.html:71 cps/templates/search_form.html:33
msgid "Tags"
msgstr "Tagi"
-#: cps/templates/book_edit.html:48 cps/templates/layout.html:157
+#: cps/templates/book_edit.html:76 cps/templates/layout.html:157
#: cps/templates/search_form.html:53
msgid "Series"
msgstr "Seria"
-#: cps/templates/book_edit.html:52
+#: cps/templates/book_edit.html:80
msgid "Series id"
msgstr "ID serii"
-#: cps/templates/book_edit.html:56
+#: cps/templates/book_edit.html:84
msgid "Rating"
msgstr "Ocena"
-#: cps/templates/book_edit.html:60
+#: cps/templates/book_edit.html:88
msgid ""
"Cover URL (jpg, cover is downloaded and stored in database, field is "
"afterwards empty again)"
msgstr ""
-#: cps/templates/book_edit.html:64
+#: cps/templates/book_edit.html:92
msgid "Upload Cover from local drive"
msgstr ""
-#: cps/templates/book_edit.html:69 cps/templates/detail.html:131
+#: cps/templates/book_edit.html:97 cps/templates/detail.html:131
msgid "Publishing date"
msgstr "Data publikacji"
-#: cps/templates/book_edit.html:76 cps/templates/user_edit.html:33
+#: cps/templates/book_edit.html:104 cps/templates/user_edit.html:33
msgid "Language"
msgstr "Język"
-#: cps/templates/book_edit.html:87 cps/templates/search_form.html:117
+#: cps/templates/book_edit.html:115 cps/templates/search_form.html:117
msgid "Yes"
msgstr "Tak"
-#: cps/templates/book_edit.html:88 cps/templates/search_form.html:118
+#: cps/templates/book_edit.html:116 cps/templates/search_form.html:118
msgid "No"
msgstr "Nie"
-#: cps/templates/book_edit.html:134
+#: cps/templates/book_edit.html:162
msgid "Upload format"
msgstr ""
-#: cps/templates/book_edit.html:143
+#: cps/templates/book_edit.html:171
msgid "view book after edit"
msgstr "wyświetl książkę po edycji"
-#: cps/templates/book_edit.html:146 cps/templates/book_edit.html:182
+#: cps/templates/book_edit.html:174 cps/templates/book_edit.html:210
msgid "Get metadata"
msgstr "Uzyskaj metadane"
-#: cps/templates/book_edit.html:147 cps/templates/config_edit.html:204
+#: cps/templates/book_edit.html:175 cps/templates/config_edit.html:210
#: cps/templates/config_view_edit.html:163 cps/templates/login.html:20
#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17
#: cps/templates/user_edit.html:151
msgid "Submit"
msgstr "Wyślij"
-#: cps/templates/book_edit.html:161
+#: cps/templates/book_edit.html:189
msgid "Are you really sure?"
msgstr ""
-#: cps/templates/book_edit.html:164
+#: cps/templates/book_edit.html:192
msgid "Book will be deleted from Calibre database"
msgstr ""
-#: cps/templates/book_edit.html:165
+#: cps/templates/book_edit.html:193
msgid "and from hard disk"
msgstr ""
-#: cps/templates/book_edit.html:185
+#: cps/templates/book_edit.html:213
msgid "Keyword"
msgstr "Słowo kluczowe"
-#: cps/templates/book_edit.html:186
+#: cps/templates/book_edit.html:214
msgid " Search keyword "
msgstr " Szukaj słowa kluczowego "
-#: cps/templates/book_edit.html:188 cps/templates/layout.html:46
+#: cps/templates/book_edit.html:216 cps/templates/layout.html:46
msgid "Go!"
msgstr "Idź!"
-#: cps/templates/book_edit.html:192
+#: cps/templates/book_edit.html:220
msgid "Click the cover to load metadata to the form"
msgstr "Kliknij okładkę, aby załadować metadane do formularza"
-#: cps/templates/book_edit.html:204 cps/templates/book_edit.html:244
+#: cps/templates/book_edit.html:232 cps/templates/book_edit.html:272
msgid "Loading..."
msgstr "Ładowanie..."
-#: cps/templates/book_edit.html:209 cps/templates/layout.html:221
+#: cps/templates/book_edit.html:237 cps/templates/layout.html:221
msgid "Close"
msgstr "Zamknij"
-#: cps/templates/book_edit.html:231 cps/templates/book_edit.html:248
+#: cps/templates/book_edit.html:259 cps/templates/book_edit.html:276
#: cps/templates/detail.html:126 cps/templates/search_form.html:14
msgid "Publisher"
msgstr "Wydawca"
-#: cps/templates/book_edit.html:236 cps/templates/book_edit.html:250
+#: cps/templates/book_edit.html:264 cps/templates/book_edit.html:278
msgid "Source"
msgstr "Źródło"
-#: cps/templates/book_edit.html:245
+#: cps/templates/book_edit.html:273
msgid "Search error!"
msgstr "Błąd wyszukiwania!"
-#: cps/templates/book_edit.html:246
+#: cps/templates/book_edit.html:274
msgid "No Result(s) found! Please try aonther keyword."
msgstr ""
@@ -1017,6 +1080,10 @@ msgstr ""
msgid "Logfile Configuration"
msgstr ""
+#: cps/templates/config_edit.html:106
+msgid "Log Level"
+msgstr "Poziom logów"
+
#: cps/templates/config_edit.html:115
msgid "Location and name of logfile (calibre-web.log for no entry)"
msgstr ""
@@ -1058,7 +1125,7 @@ msgid "Goodreads API Secret"
msgstr ""
#: cps/templates/config_edit.html:173
-msgid "E-Book converter"
+msgid "External binaries"
msgstr ""
#: cps/templates/config_edit.html:181
@@ -1081,7 +1148,11 @@ msgstr ""
msgid "Path to convertertool"
msgstr ""
-#: cps/templates/config_edit.html:209 cps/templates/layout.html:82
+#: cps/templates/config_edit.html:199
+msgid "Location of Unrar binary"
+msgstr ""
+
+#: cps/templates/config_edit.html:215 cps/templates/layout.html:82
#: cps/templates/login.html:4
msgid "Login"
msgstr "Zaloguj się"
@@ -1473,7 +1544,8 @@ msgstr ""
msgid "Calibre-Web ebook catalog"
msgstr ""
-#: cps/templates/read.html:69
+#: cps/templates/read.html:69 cps/templates/readcbr.html:79
+#: cps/templates/readcbr.html:103
msgid "Settings"
msgstr ""
@@ -1482,6 +1554,94 @@ msgstr ""
msgid "Reflow text when sidebars are open."
msgstr "Tekst pływający, gdy paski boczne są otwarte."
+#: cps/templates/readcbr.html:84
+msgid "Keyboard Shortcuts"
+msgstr ""
+
+#: cps/templates/readcbr.html:87
+msgid "Previous Page"
+msgstr ""
+
+#: cps/templates/readcbr.html:88
+msgid "Next Page"
+msgstr ""
+
+#: cps/templates/readcbr.html:89
+msgid "Scale to Best"
+msgstr ""
+
+#: cps/templates/readcbr.html:90
+msgid "Scale to Width"
+msgstr ""
+
+#: cps/templates/readcbr.html:91
+msgid "Scale to Height"
+msgstr ""
+
+#: cps/templates/readcbr.html:92
+msgid "Scale to Native"
+msgstr ""
+
+#: cps/templates/readcbr.html:93
+msgid "Rotate Right"
+msgstr ""
+
+#: cps/templates/readcbr.html:94
+msgid "Rotate Left"
+msgstr ""
+
+#: cps/templates/readcbr.html:95
+msgid "Flip Image"
+msgstr ""
+
+#: cps/templates/readcbr.html:108 cps/templates/user_edit.html:41
+msgid "Theme"
+msgstr ""
+
+#: cps/templates/readcbr.html:111
+msgid "Light"
+msgstr ""
+
+#: cps/templates/readcbr.html:112
+msgid "Dark"
+msgstr ""
+
+#: cps/templates/readcbr.html:117
+msgid "Scale"
+msgstr ""
+
+#: cps/templates/readcbr.html:120
+msgid "Best"
+msgstr ""
+
+#: cps/templates/readcbr.html:121
+msgid "Width"
+msgstr ""
+
+#: cps/templates/readcbr.html:122
+msgid "Height"
+msgstr ""
+
+#: cps/templates/readcbr.html:123
+msgid "Native"
+msgstr ""
+
+#: cps/templates/readcbr.html:128
+msgid "Rotate"
+msgstr ""
+
+#: cps/templates/readcbr.html:139
+msgid "Flip"
+msgstr ""
+
+#: cps/templates/readcbr.html:142
+msgid "Horizontal"
+msgstr ""
+
+#: cps/templates/readcbr.html:143
+msgid "Vertical"
+msgstr ""
+
#: cps/templates/readpdf.html:29
msgid "PDF.js viewer"
msgstr "PDF.js viewer"
@@ -1503,8 +1663,8 @@ msgid "Choose a password"
msgstr "Wybierz hasło"
#: cps/templates/register.html:15 cps/templates/user_edit.html:13
-msgid "Email address"
-msgstr "Adres e-mail"
+msgid "E-mail address"
+msgstr ""
#: cps/templates/register.html:16
msgid "Your email address"
@@ -1666,10 +1826,6 @@ msgstr ""
msgid "Kindle E-Mail"
msgstr "Adres e-mail Kindle"
-#: cps/templates/user_edit.html:41
-msgid "Theme"
-msgstr ""
-
#: cps/templates/user_edit.html:43
msgid "Standard Theme"
msgstr ""
diff --git a/cps/translations/ru/LC_MESSAGES/messages.po b/cps/translations/ru/LC_MESSAGES/messages.po
index 2ad9dac0..4512dda6 100644
--- a/cps/translations/ru/LC_MESSAGES/messages.po
+++ b/cps/translations/ru/LC_MESSAGES/messages.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
-"POT-Creation-Date: 2018-08-28 14:05+0200\n"
+"POT-Creation-Date: 2018-08-31 14:58+0200\n"
"PO-Revision-Date: 2017-04-30 00:47+0300\n"
"Last-Translator: Pavel Korovin \n"
"Language: ru\n"
@@ -35,621 +35,664 @@ msgstr "Отсутствует"
msgid "Excecution permissions missing"
msgstr ""
-#: cps/helper.py:55
+#: cps/helper.py:56
#, python-format
-msgid "epub format not found for book id: %(book)d"
+msgid "Epub format not found for book id: %(book)d"
msgstr ""
-#: cps/helper.py:71
+#: cps/helper.py:75
#, python-format
msgid "Convert: %s"
msgstr ""
-#: cps/helper.py:80
+#: cps/helper.py:84
msgid "Calibre-Web test e-mail"
msgstr ""
-#: cps/helper.py:81
+#: cps/helper.py:85
msgid "Test e-mail"
msgstr ""
-#: cps/helper.py:96
+#: cps/helper.py:100
msgid "Get Started with Calibre-Web"
msgstr ""
-#: cps/helper.py:97
+#: cps/helper.py:101
#, python-format
msgid "Registration e-mail for user: %s"
msgstr ""
-#: cps/helper.py:120 cps/helper.py:130
+#: cps/helper.py:124 cps/helper.py:134
msgid "Could not find any formats suitable for sending by e-mail"
msgstr ""
-#: cps/helper.py:132 cps/templates/detail.html:44 cps/worker.py:219
+#: cps/helper.py:136 cps/templates/detail.html:44 cps/worker.py:224
msgid "Send to Kindle"
msgstr "Отправить на Kindle"
-#: cps/helper.py:133
+#: cps/helper.py:137
#, python-format
msgid "E-Mail: %s"
msgstr ""
-#: cps/helper.py:135
+#: cps/helper.py:139
msgid "The requested file could not be read. Maybe wrong permissions?"
msgstr ""
-#: cps/helper.py:230
+#: cps/helper.py:147
+#, python-format
+msgid "%(format)s format not found for book id: %(book)d"
+msgstr ""
+
+#: cps/helper.py:159
+#, python-format
+msgid "%(format)s not found on Google Drive: %(fn)s"
+msgstr ""
+
+#: cps/helper.py:171 cps/helper.py:178
+#, python-format
+msgid "Convert to %(format)s: %(book)s"
+msgstr ""
+
+#: cps/helper.py:184
+#, python-format
+msgid "%(format)s not found: %(fn)s"
+msgstr ""
+
+#: cps/helper.py:280
#, python-format
msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s"
msgstr ""
-#: cps/helper.py:239
+#: cps/helper.py:289
#, python-format
msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s"
msgstr ""
-#: cps/helper.py:262 cps/helper.py:271
+#: cps/helper.py:312 cps/helper.py:321
#, python-format
msgid "File %s not found on Google Drive"
msgstr ""
-#: cps/helper.py:289
+#: cps/helper.py:339
#, python-format
msgid "Book path %s not found on Google Drive"
msgstr ""
-#: cps/web.py:1065
+#: cps/helper.py:584
+msgid "Error excecuting UnRar"
+msgstr ""
+
+#: cps/helper.py:586
+msgid "Unrar binary file not found"
+msgstr ""
+
+#: cps/web.py:1138
msgid "Requesting update package"
msgstr "Проверка обновлений"
-#: cps/web.py:1066
+#: cps/web.py:1139
msgid "Downloading update package"
msgstr "Загрузка обновлений"
-#: cps/web.py:1067
+#: cps/web.py:1140
msgid "Unzipping update package"
msgstr "Распаковка обновлений"
-#: cps/web.py:1068
+#: cps/web.py:1141
msgid "Files are replaced"
msgstr "Файлы заменены"
-#: cps/web.py:1069
+#: cps/web.py:1142
msgid "Database connections are closed"
msgstr "Соеднинения с базой данных закрыты"
-#: cps/web.py:1070
+#: cps/web.py:1143
msgid "Server is stopped"
msgstr "Сервер остановлен"
-#: cps/web.py:1071
+#: cps/web.py:1144
msgid "Update finished, please press okay and reload page"
msgstr "Обновления установлены, нажмите okay и перезагрузите страницу"
-#: cps/web.py:1091
+#: cps/web.py:1164
msgid "Recently Added Books"
msgstr ""
-#: cps/web.py:1101
+#: cps/web.py:1174
msgid "Newest Books"
msgstr ""
-#: cps/web.py:1113
+#: cps/web.py:1186
msgid "Oldest Books"
msgstr ""
-#: cps/web.py:1125
+#: cps/web.py:1198
msgid "Books (A-Z)"
msgstr ""
-#: cps/web.py:1136
+#: cps/web.py:1209
msgid "Books (Z-A)"
msgstr ""
-#: cps/web.py:1165
+#: cps/web.py:1238
msgid "Hot Books (most downloaded)"
msgstr "Популярные книги (часто загружаемые)"
-#: cps/web.py:1178
+#: cps/web.py:1251
msgid "Best rated books"
msgstr "Книги с наивысшим рейтингом"
-#: cps/templates/index.xml:36 cps/web.py:1190
+#: cps/templates/index.xml:36 cps/web.py:1263
msgid "Random Books"
msgstr "Случайный выбор"
-#: cps/web.py:1205
+#: cps/web.py:1278
msgid "Author list"
msgstr "Авторы"
-#: cps/web.py:1217 cps/web.py:1280 cps/web.py:1434 cps/web.py:1986
+#: cps/web.py:1290 cps/web.py:1353 cps/web.py:1508 cps/web.py:2060
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "Невозможно открыть книгу. Файл не существует или недоступен."
-#: cps/templates/index.xml:73 cps/web.py:1264
+#: cps/templates/index.xml:73 cps/web.py:1337
msgid "Series list"
msgstr "Серии"
-#: cps/web.py:1278
+#: cps/web.py:1351
#, python-format
msgid "Series: %(serie)s"
msgstr "Серии: %(serie)s"
-#: cps/web.py:1305
+#: cps/web.py:1378
msgid "Available languages"
msgstr "Языки"
-#: cps/web.py:1322
+#: cps/web.py:1395
#, python-format
msgid "Language: %(name)s"
msgstr "Язык: %(name)s"
-#: cps/templates/index.xml:66 cps/web.py:1333
+#: cps/templates/index.xml:66 cps/web.py:1406
msgid "Category list"
msgstr "Категории"
-#: cps/web.py:1347
+#: cps/web.py:1420
#, python-format
msgid "Category: %(name)s"
msgstr "Категория: %(name)s"
-#: cps/templates/layout.html:71 cps/web.py:1484
+#: cps/templates/layout.html:71 cps/web.py:1559
msgid "Tasks"
msgstr ""
-#: cps/web.py:1515
+#: cps/web.py:1589
msgid "Statistics"
msgstr "Статистика"
-#: cps/web.py:1620
+#: cps/web.py:1694
msgid ""
"Callback domain is not verified, please follow steps to verify domain in "
"google developer console"
msgstr ""
-#: cps/web.py:1696
+#: cps/web.py:1770
msgid "Server restarted, please reload page"
msgstr "Сервер перезагружен, пожалуйста, перезагрузите страницу"
-#: cps/web.py:1699
+#: cps/web.py:1773
msgid "Performing shutdown of server, please close window"
msgstr "Производится остановка сервера, пожалуйста, закройте окно"
-#: cps/web.py:1717
+#: cps/web.py:1791
msgid "Update done"
msgstr "Обновление закончено"
-#: cps/web.py:1773 cps/web.py:1810
+#: cps/web.py:1847 cps/web.py:1884
#, python-format
msgid "%s: %s"
msgstr ""
-#: cps/web.py:1785
+#: cps/web.py:1859
#, python-format
msgid "Published after %s"
msgstr ""
-#: cps/web.py:1790
+#: cps/web.py:1864
msgid "Published before "
msgstr ""
-#: cps/web.py:1804
+#: cps/web.py:1878
#, python-format
msgid "Rating <= %s"
msgstr ""
-#: cps/web.py:1806
+#: cps/web.py:1880
#, python-format
msgid "Rating >= %s"
msgstr ""
-#: cps/web.py:1865 cps/web.py:1874
+#: cps/web.py:1939 cps/web.py:1948
msgid "search"
msgstr "поиск"
#: cps/templates/index.xml:44 cps/templates/index.xml:48
-#: cps/templates/layout.html:146 cps/web.py:1941
+#: cps/templates/layout.html:146 cps/web.py:2015
msgid "Read Books"
msgstr "Прочитанные"
#: cps/templates/index.xml:52 cps/templates/index.xml:56
-#: cps/templates/layout.html:148 cps/web.py:1944
+#: cps/templates/layout.html:148 cps/web.py:2018
msgid "Unread Books"
msgstr "Непрочитанные"
-#: cps/web.py:1996 cps/web.py:1998 cps/web.py:2000 cps/web.py:2012
+#: cps/web.py:2070 cps/web.py:2072 cps/web.py:2074 cps/web.py:2086
msgid "Read a Book"
msgstr "Читать книгу"
-#: cps/web.py:2069 cps/web.py:2936
+#: cps/web.py:2152 cps/web.py:3029
msgid "Please fill out all fields!"
msgstr "Пожалуйста, заполните все поля!"
-#: cps/web.py:2070 cps/web.py:2091 cps/web.py:2095 cps/web.py:2100
-#: cps/web.py:2102
+#: cps/web.py:2153 cps/web.py:2174 cps/web.py:2178 cps/web.py:2183
+#: cps/web.py:2185
msgid "register"
msgstr "зарегистрироваться"
-#: cps/web.py:2090 cps/web.py:3152
+#: cps/web.py:2173 cps/web.py:3245
msgid "An unknown error occurred. Please try again later."
msgstr ""
-#: cps/web.py:2093
+#: cps/web.py:2176
msgid "Your e-mail is not allowed to register"
msgstr ""
-#: cps/web.py:2096
+#: cps/web.py:2179
msgid "Confirmation e-mail was send to your e-mail account."
msgstr ""
-#: cps/web.py:2099
+#: cps/web.py:2182
msgid "This username or e-mail address is already in use."
msgstr ""
-#: cps/web.py:2116 cps/web.py:2212
+#: cps/web.py:2199 cps/web.py:2295
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr "Вы вошли как пользователь '%(nickname)s'"
-#: cps/web.py:2121
+#: cps/web.py:2204
msgid "Wrong Username or Password"
msgstr "Ошибка в имени пользователя или пароле"
-#: cps/web.py:2127 cps/web.py:2148
+#: cps/web.py:2210 cps/web.py:2231
msgid "login"
msgstr "войти"
-#: cps/web.py:2160 cps/web.py:2191
+#: cps/web.py:2243 cps/web.py:2274
msgid "Token not found"
msgstr ""
-#: cps/web.py:2168 cps/web.py:2199
+#: cps/web.py:2251 cps/web.py:2282
msgid "Token has expired"
msgstr ""
-#: cps/web.py:2176
+#: cps/web.py:2259
msgid "Success! Please return to your device"
msgstr ""
-#: cps/web.py:2226
+#: cps/web.py:2309
msgid "Please configure the SMTP mail settings first..."
msgstr "Пожалуйста, сначала сконфигурируйте параметры SMTP"
-#: cps/web.py:2230
+#: cps/web.py:2313
#, python-format
msgid "Book successfully queued for sending to %(kindlemail)s"
msgstr ""
-#: cps/web.py:2234
+#: cps/web.py:2317
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr "Ошибка при отправке книги: %(res)s"
-#: cps/web.py:2236 cps/web.py:2990
+#: cps/web.py:2319 cps/web.py:3083
msgid "Please configure your kindle e-mail address first..."
msgstr ""
-#: cps/web.py:2280
+#: cps/web.py:2363
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr "Книга добавлена на книжную полку: %(sname)s"
-#: cps/web.py:2291
+#: cps/web.py:2374
msgid "Invalid shelf specified"
msgstr ""
-#: cps/web.py:2296
+#: cps/web.py:2379
#, python-format
msgid "You are not allowed to add a book to the the shelf: %s"
msgstr ""
-#: cps/web.py:2301
+#: cps/web.py:2384
msgid "User is not allowed to edit public shelves"
msgstr ""
-#: cps/web.py:2319
+#: cps/web.py:2402
#, python-format
msgid "Books are already part of the shelf: %s"
msgstr ""
-#: cps/web.py:2333
+#: cps/web.py:2416
#, python-format
msgid "Books have been added to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2335
+#: cps/web.py:2418
#, python-format
msgid "Could not add books to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2372
+#: cps/web.py:2455
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr "Книга удалена с книжной полки: %(sname)s"
-#: cps/web.py:2378
+#: cps/web.py:2461
#, python-format
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2398 cps/web.py:2422
+#: cps/web.py:2481 cps/web.py:2505
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr "Книжкная полка с названием '%(title)s' уже существует."
-#: cps/web.py:2403
+#: cps/web.py:2486
#, python-format
msgid "Shelf %(title)s created"
msgstr "Создана книжная полка %(title)s"
-#: cps/web.py:2405 cps/web.py:2433
+#: cps/web.py:2488 cps/web.py:2516
msgid "There was an error"
msgstr "Произошла ошибка"
-#: cps/web.py:2406 cps/web.py:2408
+#: cps/web.py:2489 cps/web.py:2491
msgid "create a shelf"
msgstr "создать книжную полку"
-#: cps/web.py:2431
+#: cps/web.py:2514
#, python-format
msgid "Shelf %(title)s changed"
msgstr "Книжная полка %(title)s изменена"
-#: cps/web.py:2434 cps/web.py:2436
+#: cps/web.py:2517 cps/web.py:2519
msgid "Edit a shelf"
msgstr "Изменить книжную полку"
-#: cps/web.py:2457
+#: cps/web.py:2540
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr "Книжная полка %(name)s удалена"
-#: cps/web.py:2479
+#: cps/web.py:2562
#, python-format
msgid "Shelf: '%(name)s'"
msgstr "Книжная полка: '%(name)s'"
-#: cps/web.py:2482
+#: cps/web.py:2565
msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr ""
-#: cps/web.py:2513
+#: cps/web.py:2596
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr "Изменить расположение книжной полки '%(name)s'"
-#: cps/web.py:2542 cps/web.py:2942
+#: cps/web.py:2625 cps/web.py:3035
msgid "E-mail is not from valid domain"
msgstr ""
-#: cps/web.py:2544 cps/web.py:2585 cps/web.py:2588
+#: cps/web.py:2627 cps/web.py:2668 cps/web.py:2671
#, python-format
msgid "%(name)s's profile"
msgstr "Профиль %(name)s"
-#: cps/web.py:2583
+#: cps/web.py:2666
msgid "Found an existing account for this e-mail address."
msgstr ""
-#: cps/web.py:2586
+#: cps/web.py:2669
msgid "Profile updated"
msgstr "Профиль обновлён"
-#: cps/web.py:2598
+#: cps/web.py:2681
msgid "Unknown"
msgstr ""
-#: cps/web.py:2612
+#: cps/web.py:2695
msgid "Admin page"
msgstr "Администрирование"
-#: cps/web.py:2690 cps/web.py:2852
+#: cps/web.py:2773 cps/web.py:2945
msgid "Calibre-Web configuration updated"
msgstr "Конфигурация Calibre-Web обновлена"
-#: cps/templates/admin.html:87 cps/web.py:2703
+#: cps/templates/admin.html:91 cps/web.py:2786
msgid "UI Configuration"
msgstr ""
-#: cps/web.py:2720
+#: cps/web.py:2803
msgid "Import of optional Google Drive requirements missing"
msgstr ""
-#: cps/web.py:2723
+#: cps/web.py:2806
msgid "client_secrets.json is missing or not readable"
msgstr ""
-#: cps/web.py:2728 cps/web.py:2755
+#: cps/web.py:2811 cps/web.py:2838
msgid "client_secrets.json is not configured for web application"
msgstr ""
-#: cps/templates/admin.html:86 cps/web.py:2758 cps/web.py:2784 cps/web.py:2796
-#: cps/web.py:2839 cps/web.py:2860 cps/web.py:2867 cps/web.py:2884
+#: cps/templates/admin.html:90 cps/web.py:2841 cps/web.py:2867 cps/web.py:2879
+#: cps/web.py:2921 cps/web.py:2936 cps/web.py:2953 cps/web.py:2960
+#: cps/web.py:2977
msgid "Basic Configuration"
msgstr "Настройки сервера"
-#: cps/web.py:2781
+#: cps/web.py:2864
msgid "Keyfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:2793
+#: cps/web.py:2876
msgid "Certfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:2836
+#: cps/web.py:2918
msgid "Logfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:2864
+#: cps/web.py:2957
msgid "DB location is not valid, please enter correct path"
msgstr "Неверный путь к фалу БД, пожалуйста, укажите правильное расположение БД"
-#: cps/templates/admin.html:31 cps/web.py:2938 cps/web.py:2944 cps/web.py:2960
+#: cps/templates/admin.html:31 cps/web.py:3031 cps/web.py:3037 cps/web.py:3053
msgid "Add new user"
msgstr "Добавить пользователя"
-#: cps/web.py:2950
+#: cps/web.py:3043
#, python-format
msgid "User '%(user)s' created"
msgstr "Пользователь '%(user)s' добавлен"
-#: cps/web.py:2954
+#: cps/web.py:3047
msgid "Found an existing account for this e-mail address or nickname."
msgstr ""
-#: cps/web.py:2978 cps/web.py:2992
+#: cps/web.py:3071 cps/web.py:3085
msgid "E-mail server settings updated"
msgstr ""
-#: cps/web.py:2985
+#: cps/web.py:3078
#, python-format
msgid "Test e-mail successfully send to %(kindlemail)s"
msgstr ""
-#: cps/web.py:2988
+#: cps/web.py:3081
#, python-format
msgid "There was an error sending the Test e-mail: %(res)s"
msgstr ""
-#: cps/web.py:2993
+#: cps/web.py:3086
msgid "Edit e-mail server settings"
msgstr ""
-#: cps/web.py:3018
+#: cps/web.py:3111
#, python-format
msgid "User '%(nick)s' deleted"
msgstr "Пользователь '%(nick)s' удалён"
-#: cps/web.py:3127
+#: cps/web.py:3220
#, python-format
msgid "User '%(nick)s' updated"
msgstr "Пользователь '%(nick)s' обновлён"
-#: cps/web.py:3130
+#: cps/web.py:3223
msgid "An unknown error occured."
msgstr "Произошла неизвестная ошибка."
-#: cps/web.py:3132
+#: cps/web.py:3225
#, python-format
msgid "Edit User %(nick)s"
msgstr "Изменить пользователя %(nick)s"
-#: cps/web.py:3149
+#: cps/web.py:3242
#, python-format
msgid "Password for user %s reset"
msgstr ""
-#: cps/web.py:3169
+#: cps/web.py:3262
msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr ""
-#: cps/web.py:3184 cps/web.py:3445 cps/web.py:3450 cps/web.py:3605
+#: cps/web.py:3294 cps/web.py:3556 cps/web.py:3561 cps/web.py:3716
msgid "edit metadata"
msgstr "изменить метаданные"
-#: cps/web.py:3197 cps/web.py:3475
+#: cps/web.py:3308 cps/web.py:3586
#, python-format
msgid "File extension \"%s\" is not allowed to be uploaded to this server"
msgstr "Запрещена загрузка файлов с расширением \"%s\""
-#: cps/web.py:3201 cps/web.py:3479
+#: cps/web.py:3312 cps/web.py:3590
msgid "File to be uploaded must have an extension"
msgstr "Загружаемый файл должен иметь расширение"
-#: cps/web.py:3213 cps/web.py:3499
+#: cps/web.py:3324 cps/web.py:3610
#, python-format
msgid "Failed to create path %s (Permission denied)."
msgstr "Ошибка при создании пути %s (доступ запрещён)"
-#: cps/web.py:3218
+#: cps/web.py:3329
#, python-format
msgid "Failed to store file %s."
msgstr ""
-#: cps/web.py:3234
+#: cps/web.py:3345
#, python-format
msgid "File format %s added to %s"
msgstr ""
-#: cps/web.py:3252
+#: cps/web.py:3363
#, python-format
msgid "Failed to create path for cover %s (Permission denied)."
msgstr ""
-#: cps/web.py:3259
+#: cps/web.py:3370
#, python-format
msgid "Failed to store cover-file %s."
msgstr ""
-#: cps/web.py:3262
+#: cps/web.py:3373
msgid "Cover-file is not a valid image file"
msgstr ""
-#: cps/web.py:3275 cps/web.py:3279
+#: cps/web.py:3386 cps/web.py:3390
msgid "unknown"
msgstr "неизвестно"
-#: cps/web.py:3301
+#: cps/web.py:3412
msgid "Cover is not a jpg file, can't save"
msgstr ""
-#: cps/web.py:3454
+#: cps/web.py:3565
msgid "Error editing book, please check logfile for details"
msgstr ""
-#: cps/web.py:3504
+#: cps/web.py:3615
#, python-format
msgid "Failed to store file %s (Permission denied)."
msgstr "Ошибка записи файоа %s (доступ запрещён)"
-#: cps/web.py:3509
+#: cps/web.py:3620
#, python-format
msgid "Failed to delete file %s (Permission denied)."
msgstr "Ошибка удаления файла %s (доступ запрещён)"
-#: cps/web.py:3591
+#: cps/web.py:3702
#, python-format
msgid "File %s uploaded"
msgstr ""
-#: cps/worker.py:212 cps/worker.py:366
+#: cps/web.py:3732
+msgid "Source or destination format for conversion missing"
+msgstr ""
+
+#: cps/web.py:3742
+#, python-format
+msgid "Book successfully queued for converting to %(book_format)s"
+msgstr ""
+
+#: cps/web.py:3746
+#, python-format
+msgid "There was an error converting this book: %(res)s"
+msgstr ""
+
+#: cps/worker.py:215 cps/worker.py:385
msgid "Started"
msgstr ""
-#: cps/worker.py:221
+#: cps/worker.py:226
#, python-format
msgid "E-mail: %stitle"
msgstr ""
-#: cps/worker.py:229
+#: cps/worker.py:237
#, python-format
msgid "Convertertool %(converter)s not found"
msgstr ""
-#: cps/worker.py:256
+#: cps/worker.py:272
#, python-format
msgid "Ebook-converter failed: %s"
msgstr ""
-#: cps/worker.py:266
+#: cps/worker.py:283
#, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr ""
-#: cps/worker.py:299 cps/worker.py:355 cps/worker.py:418
+#: cps/worker.py:316 cps/worker.py:375 cps/worker.py:437
msgid "Finished"
msgstr ""
-#: cps/worker.py:322 cps/worker.py:341
+#: cps/worker.py:342 cps/worker.py:361
msgid "Waiting"
msgstr ""
-#: cps/worker.py:330
+#: cps/worker.py:349
msgid "This e-mail has been sent via Calibre-Web."
msgstr ""
-#: cps/worker.py:444
+#: cps/worker.py:463
msgid "Failed"
msgstr ""
@@ -662,7 +705,7 @@ msgid "Nickname"
msgstr "Имя пользователя"
#: cps/templates/admin.html:8
-msgid "Email"
+msgid "E-mail"
msgstr ""
#: cps/templates/admin.html:9
@@ -726,9 +769,9 @@ msgstr "Настройки сервера"
msgid "Calibre DB dir"
msgstr "Папка Calibre DB"
-#: cps/templates/admin.html:57 cps/templates/config_edit.html:106
-msgid "Log Level"
-msgstr "Уровень логирования"
+#: cps/templates/admin.html:57
+msgid "Log level"
+msgstr ""
#: cps/templates/admin.html:61
msgid "Port"
@@ -743,68 +786,72 @@ msgid "Uploading"
msgstr "Загрузка на сервер"
#: cps/templates/admin.html:75
+msgid "Anonymous browsing"
+msgstr ""
+
+#: cps/templates/admin.html:79
msgid "Public registration"
msgstr "Публичная регистрация"
-#: cps/templates/admin.html:79 cps/templates/remote_login.html:4
+#: cps/templates/admin.html:83 cps/templates/remote_login.html:4
msgid "Remote login"
msgstr ""
-#: cps/templates/admin.html:89
+#: cps/templates/admin.html:93
msgid "Administration"
msgstr "Управление"
-#: cps/templates/admin.html:90
+#: cps/templates/admin.html:94
msgid "Current commit timestamp"
msgstr ""
-#: cps/templates/admin.html:91
+#: cps/templates/admin.html:95
msgid "Newest commit timestamp"
msgstr ""
-#: cps/templates/admin.html:93
+#: cps/templates/admin.html:97
msgid "Reconnect to Calibre DB"
msgstr "Переподключиться к БД Calibre"
-#: cps/templates/admin.html:94
+#: cps/templates/admin.html:98
msgid "Restart Calibre-Web"
msgstr "Перезагрузить Calibre-Web"
-#: cps/templates/admin.html:95
+#: cps/templates/admin.html:99
msgid "Stop Calibre-Web"
msgstr "Остановить Calibre-Web"
-#: cps/templates/admin.html:96
+#: cps/templates/admin.html:100
msgid "Check for update"
msgstr "Проверка обновлений"
-#: cps/templates/admin.html:97
+#: cps/templates/admin.html:101
msgid "Perform Update"
msgstr "Установить обновления"
-#: cps/templates/admin.html:106
+#: cps/templates/admin.html:110
msgid "Do you really want to restart Calibre-Web?"
msgstr "Вы действительно хотите перезагрузить Calibre-Web?"
-#: cps/templates/admin.html:111 cps/templates/admin.html:125
-#: cps/templates/admin.html:146 cps/templates/shelf.html:59
+#: cps/templates/admin.html:115 cps/templates/admin.html:129
+#: cps/templates/admin.html:150 cps/templates/shelf.html:59
msgid "Ok"
msgstr "Ok"
-#: cps/templates/admin.html:112 cps/templates/admin.html:126
-#: cps/templates/book_edit.html:148 cps/templates/book_edit.html:170
-#: cps/templates/config_edit.html:206 cps/templates/config_view_edit.html:164
+#: cps/templates/admin.html:116 cps/templates/admin.html:130
+#: cps/templates/book_edit.html:176 cps/templates/book_edit.html:198
+#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:164
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
#: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19
#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:153
msgid "Back"
msgstr "Назад"
-#: cps/templates/admin.html:124
+#: cps/templates/admin.html:128
msgid "Do you really want to stop Calibre-Web?"
msgstr "Вы действительно хотите остановить Calibre-Web?"
-#: cps/templates/admin.html:137
+#: cps/templates/admin.html:141
msgid "Updating, please do not reload page"
msgstr "Установка обновлений, пожалуйста, не обновляйте страницу."
@@ -828,137 +875,153 @@ msgstr "Удалить книгу"
msgid "Delete formats:"
msgstr ""
-#: cps/templates/book_edit.html:22 cps/templates/book_edit.html:169
+#: cps/templates/book_edit.html:22 cps/templates/book_edit.html:197
#: cps/templates/email_edit.html:73 cps/templates/email_edit.html:74
msgid "Delete"
msgstr "Удалить"
-#: cps/templates/book_edit.html:31 cps/templates/search_form.html:6
+#: cps/templates/book_edit.html:30
+msgid "Convert book format:"
+msgstr ""
+
+#: cps/templates/book_edit.html:34
+msgid "Convert from:"
+msgstr ""
+
+#: cps/templates/book_edit.html:41
+msgid "Convert to:"
+msgstr ""
+
+#: cps/templates/book_edit.html:50
+msgid "Convert book"
+msgstr ""
+
+#: cps/templates/book_edit.html:59 cps/templates/search_form.html:6
msgid "Book Title"
msgstr "Название"
-#: cps/templates/book_edit.html:35 cps/templates/book_edit.html:229
-#: cps/templates/book_edit.html:247 cps/templates/search_form.html:10
+#: cps/templates/book_edit.html:63 cps/templates/book_edit.html:257
+#: cps/templates/book_edit.html:275 cps/templates/search_form.html:10
msgid "Author"
msgstr "Автор"
-#: cps/templates/book_edit.html:39 cps/templates/book_edit.html:234
-#: cps/templates/book_edit.html:249 cps/templates/search_form.html:106
+#: cps/templates/book_edit.html:67 cps/templates/book_edit.html:262
+#: cps/templates/book_edit.html:277 cps/templates/search_form.html:106
msgid "Description"
msgstr "Описание"
-#: cps/templates/book_edit.html:43 cps/templates/search_form.html:33
+#: cps/templates/book_edit.html:71 cps/templates/search_form.html:33
msgid "Tags"
msgstr "Теги"
-#: cps/templates/book_edit.html:48 cps/templates/layout.html:157
+#: cps/templates/book_edit.html:76 cps/templates/layout.html:157
#: cps/templates/search_form.html:53
msgid "Series"
msgstr "Серии"
-#: cps/templates/book_edit.html:52
+#: cps/templates/book_edit.html:80
msgid "Series id"
msgstr "Серия"
-#: cps/templates/book_edit.html:56
+#: cps/templates/book_edit.html:84
msgid "Rating"
msgstr "Рейтинг"
-#: cps/templates/book_edit.html:60
+#: cps/templates/book_edit.html:88
msgid ""
"Cover URL (jpg, cover is downloaded and stored in database, field is "
"afterwards empty again)"
msgstr ""
-#: cps/templates/book_edit.html:64
+#: cps/templates/book_edit.html:92
msgid "Upload Cover from local drive"
msgstr ""
-#: cps/templates/book_edit.html:69 cps/templates/detail.html:131
+#: cps/templates/book_edit.html:97 cps/templates/detail.html:131
msgid "Publishing date"
msgstr "Опубликовано"
-#: cps/templates/book_edit.html:76 cps/templates/user_edit.html:33
+#: cps/templates/book_edit.html:104 cps/templates/user_edit.html:33
msgid "Language"
msgstr "Язык"
-#: cps/templates/book_edit.html:87 cps/templates/search_form.html:117
+#: cps/templates/book_edit.html:115 cps/templates/search_form.html:117
msgid "Yes"
msgstr "Да"
-#: cps/templates/book_edit.html:88 cps/templates/search_form.html:118
+#: cps/templates/book_edit.html:116 cps/templates/search_form.html:118
msgid "No"
msgstr "Нет"
-#: cps/templates/book_edit.html:134
+#: cps/templates/book_edit.html:162
msgid "Upload format"
msgstr ""
-#: cps/templates/book_edit.html:143
+#: cps/templates/book_edit.html:171
msgid "view book after edit"
msgstr "смотреть книгу после редактирования"
-#: cps/templates/book_edit.html:146 cps/templates/book_edit.html:182
+#: cps/templates/book_edit.html:174 cps/templates/book_edit.html:210
msgid "Get metadata"
msgstr "Получить метаданные"
-#: cps/templates/book_edit.html:147 cps/templates/config_edit.html:204
+#: cps/templates/book_edit.html:175 cps/templates/config_edit.html:210
#: cps/templates/config_view_edit.html:163 cps/templates/login.html:20
#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17
#: cps/templates/user_edit.html:151
msgid "Submit"
msgstr "Отправить"
-#: cps/templates/book_edit.html:161
+#: cps/templates/book_edit.html:189
msgid "Are you really sure?"
msgstr "Вы действительно уверены?"
-#: cps/templates/book_edit.html:164
+#: cps/templates/book_edit.html:192
msgid "Book will be deleted from Calibre database"
msgstr "Книга будет удалена из БД Calibre"
-#: cps/templates/book_edit.html:165
+#: cps/templates/book_edit.html:193
msgid "and from hard disk"
msgstr "и с диска"
-#: cps/templates/book_edit.html:185
+#: cps/templates/book_edit.html:213
msgid "Keyword"
msgstr "Ключевое слово"
-#: cps/templates/book_edit.html:186
+#: cps/templates/book_edit.html:214
msgid " Search keyword "
msgstr " Поиск по ключевому слову"
-#: cps/templates/book_edit.html:188 cps/templates/layout.html:46
+#: cps/templates/book_edit.html:216 cps/templates/layout.html:46
msgid "Go!"
msgstr "Искать"
-#: cps/templates/book_edit.html:192
+#: cps/templates/book_edit.html:220
msgid "Click the cover to load metadata to the form"
msgstr "Нажмите на обложку, чтобы получить метаданные"
-#: cps/templates/book_edit.html:204 cps/templates/book_edit.html:244
+#: cps/templates/book_edit.html:232 cps/templates/book_edit.html:272
msgid "Loading..."
msgstr "Загрузка..."
-#: cps/templates/book_edit.html:209 cps/templates/layout.html:221
+#: cps/templates/book_edit.html:237 cps/templates/layout.html:221
msgid "Close"
msgstr "Закрыть"
-#: cps/templates/book_edit.html:231 cps/templates/book_edit.html:248
+#: cps/templates/book_edit.html:259 cps/templates/book_edit.html:276
#: cps/templates/detail.html:126 cps/templates/search_form.html:14
msgid "Publisher"
msgstr "Издатель"
-#: cps/templates/book_edit.html:236 cps/templates/book_edit.html:250
+#: cps/templates/book_edit.html:264 cps/templates/book_edit.html:278
msgid "Source"
msgstr "Источник"
-#: cps/templates/book_edit.html:245
+#: cps/templates/book_edit.html:273
msgid "Search error!"
msgstr "Ошибка поиска!"
-#: cps/templates/book_edit.html:246
+#: cps/templates/book_edit.html:274
msgid "No Result(s) found! Please try aonther keyword."
msgstr ""
@@ -1018,6 +1081,10 @@ msgstr ""
msgid "Logfile Configuration"
msgstr ""
+#: cps/templates/config_edit.html:106
+msgid "Log Level"
+msgstr "Уровень логирования"
+
#: cps/templates/config_edit.html:115
msgid "Location and name of logfile (calibre-web.log for no entry)"
msgstr ""
@@ -1059,7 +1126,7 @@ msgid "Goodreads API Secret"
msgstr ""
#: cps/templates/config_edit.html:173
-msgid "E-Book converter"
+msgid "External binaries"
msgstr ""
#: cps/templates/config_edit.html:181
@@ -1082,7 +1149,11 @@ msgstr ""
msgid "Path to convertertool"
msgstr ""
-#: cps/templates/config_edit.html:209 cps/templates/layout.html:82
+#: cps/templates/config_edit.html:199
+msgid "Location of Unrar binary"
+msgstr ""
+
+#: cps/templates/config_edit.html:215 cps/templates/layout.html:82
#: cps/templates/login.html:4
msgid "Login"
msgstr "Имя пользователя"
@@ -1472,7 +1543,8 @@ msgstr ""
msgid "Calibre-Web ebook catalog"
msgstr ""
-#: cps/templates/read.html:69
+#: cps/templates/read.html:69 cps/templates/readcbr.html:79
+#: cps/templates/readcbr.html:103
msgid "Settings"
msgstr ""
@@ -1480,6 +1552,94 @@ msgstr ""
msgid "Reflow text when sidebars are open."
msgstr "Обновить размещение текста при открытии боковой панели"
+#: cps/templates/readcbr.html:84
+msgid "Keyboard Shortcuts"
+msgstr ""
+
+#: cps/templates/readcbr.html:87
+msgid "Previous Page"
+msgstr ""
+
+#: cps/templates/readcbr.html:88
+msgid "Next Page"
+msgstr ""
+
+#: cps/templates/readcbr.html:89
+msgid "Scale to Best"
+msgstr ""
+
+#: cps/templates/readcbr.html:90
+msgid "Scale to Width"
+msgstr ""
+
+#: cps/templates/readcbr.html:91
+msgid "Scale to Height"
+msgstr ""
+
+#: cps/templates/readcbr.html:92
+msgid "Scale to Native"
+msgstr ""
+
+#: cps/templates/readcbr.html:93
+msgid "Rotate Right"
+msgstr ""
+
+#: cps/templates/readcbr.html:94
+msgid "Rotate Left"
+msgstr ""
+
+#: cps/templates/readcbr.html:95
+msgid "Flip Image"
+msgstr ""
+
+#: cps/templates/readcbr.html:108 cps/templates/user_edit.html:41
+msgid "Theme"
+msgstr ""
+
+#: cps/templates/readcbr.html:111
+msgid "Light"
+msgstr ""
+
+#: cps/templates/readcbr.html:112
+msgid "Dark"
+msgstr ""
+
+#: cps/templates/readcbr.html:117
+msgid "Scale"
+msgstr ""
+
+#: cps/templates/readcbr.html:120
+msgid "Best"
+msgstr ""
+
+#: cps/templates/readcbr.html:121
+msgid "Width"
+msgstr ""
+
+#: cps/templates/readcbr.html:122
+msgid "Height"
+msgstr ""
+
+#: cps/templates/readcbr.html:123
+msgid "Native"
+msgstr ""
+
+#: cps/templates/readcbr.html:128
+msgid "Rotate"
+msgstr ""
+
+#: cps/templates/readcbr.html:139
+msgid "Flip"
+msgstr ""
+
+#: cps/templates/readcbr.html:142
+msgid "Horizontal"
+msgstr ""
+
+#: cps/templates/readcbr.html:143
+msgid "Vertical"
+msgstr ""
+
#: cps/templates/readpdf.html:29
msgid "PDF.js viewer"
msgstr "Просмотровщик PDF.js"
@@ -1501,8 +1661,8 @@ msgid "Choose a password"
msgstr "Выберите пароль"
#: cps/templates/register.html:15 cps/templates/user_edit.html:13
-msgid "Email address"
-msgstr "Электронная почта"
+msgid "E-mail address"
+msgstr ""
#: cps/templates/register.html:16
msgid "Your email address"
@@ -1664,10 +1824,6 @@ msgstr ""
msgid "Kindle E-Mail"
msgstr "Адрес почты Kindle"
-#: cps/templates/user_edit.html:41
-msgid "Theme"
-msgstr ""
-
#: cps/templates/user_edit.html:43
msgid "Standard Theme"
msgstr ""
diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po
index 9984fe44..1f808ebf 100644
--- a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po
+++ b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po
@@ -15,7 +15,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
-"POT-Creation-Date: 2018-08-28 14:05+0200\n"
+"POT-Creation-Date: 2018-08-31 14:58+0200\n"
"PO-Revision-Date: 2017-01-06 17:00+0000\n"
"Last-Translator: dalin \n"
"Language: zh_Hans_CN\n"
@@ -35,621 +35,664 @@ msgstr "未安装"
msgid "Excecution permissions missing"
msgstr "可执行权限缺失"
-#: cps/helper.py:55
+#: cps/helper.py:56
#, python-format
-msgid "epub format not found for book id: %(book)d"
-msgstr "没有找到书籍ID %(book)d 的epub格式"
+msgid "Epub format not found for book id: %(book)d"
+msgstr ""
-#: cps/helper.py:71
+#: cps/helper.py:75
#, python-format
msgid "Convert: %s"
msgstr ""
-#: cps/helper.py:80
+#: cps/helper.py:84
msgid "Calibre-Web test e-mail"
msgstr ""
-#: cps/helper.py:81
+#: cps/helper.py:85
msgid "Test e-mail"
msgstr ""
-#: cps/helper.py:96
+#: cps/helper.py:100
msgid "Get Started with Calibre-Web"
msgstr ""
-#: cps/helper.py:97
+#: cps/helper.py:101
#, python-format
msgid "Registration e-mail for user: %s"
msgstr ""
-#: cps/helper.py:120 cps/helper.py:130
+#: cps/helper.py:124 cps/helper.py:134
msgid "Could not find any formats suitable for sending by e-mail"
msgstr ""
-#: cps/helper.py:132 cps/templates/detail.html:44 cps/worker.py:219
+#: cps/helper.py:136 cps/templates/detail.html:44 cps/worker.py:224
msgid "Send to Kindle"
msgstr "发送到Kindle"
-#: cps/helper.py:133
+#: cps/helper.py:137
#, python-format
msgid "E-Mail: %s"
msgstr ""
-#: cps/helper.py:135
+#: cps/helper.py:139
msgid "The requested file could not be read. Maybe wrong permissions?"
msgstr ""
-#: cps/helper.py:230
+#: cps/helper.py:147
+#, python-format
+msgid "%(format)s format not found for book id: %(book)d"
+msgstr ""
+
+#: cps/helper.py:159
+#, python-format
+msgid "%(format)s not found on Google Drive: %(fn)s"
+msgstr ""
+
+#: cps/helper.py:171 cps/helper.py:178
+#, python-format
+msgid "Convert to %(format)s: %(book)s"
+msgstr ""
+
+#: cps/helper.py:184
+#, python-format
+msgid "%(format)s not found: %(fn)s"
+msgstr ""
+
+#: cps/helper.py:280
#, python-format
msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s"
msgstr ""
-#: cps/helper.py:239
+#: cps/helper.py:289
#, python-format
msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s"
msgstr ""
-#: cps/helper.py:262 cps/helper.py:271
+#: cps/helper.py:312 cps/helper.py:321
#, python-format
msgid "File %s not found on Google Drive"
msgstr ""
-#: cps/helper.py:289
+#: cps/helper.py:339
#, python-format
msgid "Book path %s not found on Google Drive"
msgstr ""
-#: cps/web.py:1065
+#: cps/helper.py:584
+msgid "Error excecuting UnRar"
+msgstr ""
+
+#: cps/helper.py:586
+msgid "Unrar binary file not found"
+msgstr ""
+
+#: cps/web.py:1138
msgid "Requesting update package"
msgstr "正在请求更新包"
-#: cps/web.py:1066
+#: cps/web.py:1139
msgid "Downloading update package"
msgstr "正在下载更新包"
-#: cps/web.py:1067
+#: cps/web.py:1140
msgid "Unzipping update package"
msgstr "正在解压更新包"
-#: cps/web.py:1068
+#: cps/web.py:1141
msgid "Files are replaced"
msgstr "文件已替换"
-#: cps/web.py:1069
+#: cps/web.py:1142
msgid "Database connections are closed"
msgstr "数据库连接已关闭"
-#: cps/web.py:1070
+#: cps/web.py:1143
msgid "Server is stopped"
msgstr "服务器已停止"
-#: cps/web.py:1071
+#: cps/web.py:1144
msgid "Update finished, please press okay and reload page"
msgstr "更新完成,请按确定并刷新页面"
-#: cps/web.py:1091
+#: cps/web.py:1164
msgid "Recently Added Books"
msgstr "最近添加的书籍"
-#: cps/web.py:1101
+#: cps/web.py:1174
msgid "Newest Books"
msgstr "最新书籍"
-#: cps/web.py:1113
+#: cps/web.py:1186
msgid "Oldest Books"
msgstr "最旧书籍"
-#: cps/web.py:1125
+#: cps/web.py:1198
msgid "Books (A-Z)"
msgstr "书籍 (A-Z)"
-#: cps/web.py:1136
+#: cps/web.py:1209
msgid "Books (Z-A)"
msgstr "书籍 (Z-A)"
-#: cps/web.py:1165
+#: cps/web.py:1238
msgid "Hot Books (most downloaded)"
msgstr "热门书籍(最多下载)"
-#: cps/web.py:1178
+#: cps/web.py:1251
msgid "Best rated books"
msgstr "最高评分书籍"
-#: cps/templates/index.xml:36 cps/web.py:1190
+#: cps/templates/index.xml:36 cps/web.py:1263
msgid "Random Books"
msgstr "随机书籍"
-#: cps/web.py:1205
+#: cps/web.py:1278
msgid "Author list"
msgstr "作者列表"
-#: cps/web.py:1217 cps/web.py:1280 cps/web.py:1434 cps/web.py:1986
+#: cps/web.py:1290 cps/web.py:1353 cps/web.py:1508 cps/web.py:2060
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "无法打开电子书。 文件不存在或者文件不可访问:"
-#: cps/templates/index.xml:73 cps/web.py:1264
+#: cps/templates/index.xml:73 cps/web.py:1337
msgid "Series list"
msgstr "丛书列表"
-#: cps/web.py:1278
+#: cps/web.py:1351
#, python-format
msgid "Series: %(serie)s"
msgstr "丛书: %(serie)s"
-#: cps/web.py:1305
+#: cps/web.py:1378
msgid "Available languages"
msgstr "可用语言"
-#: cps/web.py:1322
+#: cps/web.py:1395
#, python-format
msgid "Language: %(name)s"
msgstr "语言: %(name)s"
-#: cps/templates/index.xml:66 cps/web.py:1333
+#: cps/templates/index.xml:66 cps/web.py:1406
msgid "Category list"
msgstr "分类列表"
-#: cps/web.py:1347
+#: cps/web.py:1420
#, python-format
msgid "Category: %(name)s"
msgstr "分类: %(name)s"
-#: cps/templates/layout.html:71 cps/web.py:1484
+#: cps/templates/layout.html:71 cps/web.py:1559
msgid "Tasks"
msgstr ""
-#: cps/web.py:1515
+#: cps/web.py:1589
msgid "Statistics"
msgstr "统计"
-#: cps/web.py:1620
+#: cps/web.py:1694
msgid ""
"Callback domain is not verified, please follow steps to verify domain in "
"google developer console"
msgstr ""
-#: cps/web.py:1696
+#: cps/web.py:1770
msgid "Server restarted, please reload page"
msgstr "服务器已重启,请刷新页面"
-#: cps/web.py:1699
+#: cps/web.py:1773
msgid "Performing shutdown of server, please close window"
msgstr "正在关闭服务器,请关闭窗口"
-#: cps/web.py:1717
+#: cps/web.py:1791
msgid "Update done"
msgstr "更新完成"
-#: cps/web.py:1773 cps/web.py:1810
+#: cps/web.py:1847 cps/web.py:1884
#, python-format
msgid "%s: %s"
msgstr ""
-#: cps/web.py:1785
+#: cps/web.py:1859
#, python-format
msgid "Published after %s"
msgstr ""
-#: cps/web.py:1790
+#: cps/web.py:1864
msgid "Published before "
msgstr ""
-#: cps/web.py:1804
+#: cps/web.py:1878
#, python-format
msgid "Rating <= %s"
msgstr ""
-#: cps/web.py:1806
+#: cps/web.py:1880
#, python-format
msgid "Rating >= %s"
msgstr ""
-#: cps/web.py:1865 cps/web.py:1874
+#: cps/web.py:1939 cps/web.py:1948
msgid "search"
msgstr "搜索"
#: cps/templates/index.xml:44 cps/templates/index.xml:48
-#: cps/templates/layout.html:146 cps/web.py:1941
+#: cps/templates/layout.html:146 cps/web.py:2015
msgid "Read Books"
msgstr "已读书籍"
#: cps/templates/index.xml:52 cps/templates/index.xml:56
-#: cps/templates/layout.html:148 cps/web.py:1944
+#: cps/templates/layout.html:148 cps/web.py:2018
msgid "Unread Books"
msgstr "未读书籍"
-#: cps/web.py:1996 cps/web.py:1998 cps/web.py:2000 cps/web.py:2012
+#: cps/web.py:2070 cps/web.py:2072 cps/web.py:2074 cps/web.py:2086
msgid "Read a Book"
msgstr "阅读一本书"
-#: cps/web.py:2069 cps/web.py:2936
+#: cps/web.py:2152 cps/web.py:3029
msgid "Please fill out all fields!"
msgstr "请填写所有字段"
-#: cps/web.py:2070 cps/web.py:2091 cps/web.py:2095 cps/web.py:2100
-#: cps/web.py:2102
+#: cps/web.py:2153 cps/web.py:2174 cps/web.py:2178 cps/web.py:2183
+#: cps/web.py:2185
msgid "register"
msgstr "注册"
-#: cps/web.py:2090 cps/web.py:3152
+#: cps/web.py:2173 cps/web.py:3245
msgid "An unknown error occurred. Please try again later."
msgstr ""
-#: cps/web.py:2093
+#: cps/web.py:2176
msgid "Your e-mail is not allowed to register"
msgstr ""
-#: cps/web.py:2096
+#: cps/web.py:2179
msgid "Confirmation e-mail was send to your e-mail account."
msgstr ""
-#: cps/web.py:2099
+#: cps/web.py:2182
msgid "This username or e-mail address is already in use."
msgstr ""
-#: cps/web.py:2116 cps/web.py:2212
+#: cps/web.py:2199 cps/web.py:2295
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr "您现在已以'%(nickname)s'身份登录"
-#: cps/web.py:2121
+#: cps/web.py:2204
msgid "Wrong Username or Password"
msgstr "用户名或密码错误"
-#: cps/web.py:2127 cps/web.py:2148
+#: cps/web.py:2210 cps/web.py:2231
msgid "login"
msgstr "登录"
-#: cps/web.py:2160 cps/web.py:2191
+#: cps/web.py:2243 cps/web.py:2274
msgid "Token not found"
msgstr "找不到Token"
-#: cps/web.py:2168 cps/web.py:2199
+#: cps/web.py:2251 cps/web.py:2282
msgid "Token has expired"
msgstr "Token已过期"
-#: cps/web.py:2176
+#: cps/web.py:2259
msgid "Success! Please return to your device"
msgstr "成功!请返回您的设备"
-#: cps/web.py:2226
+#: cps/web.py:2309
msgid "Please configure the SMTP mail settings first..."
msgstr "请先配置SMTP邮箱..."
-#: cps/web.py:2230
+#: cps/web.py:2313
#, python-format
msgid "Book successfully queued for sending to %(kindlemail)s"
msgstr ""
-#: cps/web.py:2234
+#: cps/web.py:2317
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr "发送这本书的时候出现错误: %(res)s"
-#: cps/web.py:2236 cps/web.py:2990
+#: cps/web.py:2319 cps/web.py:3083
msgid "Please configure your kindle e-mail address first..."
msgstr ""
-#: cps/web.py:2280
+#: cps/web.py:2363
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr "此书已被添加到书架: %(sname)s"
-#: cps/web.py:2291
+#: cps/web.py:2374
msgid "Invalid shelf specified"
msgstr ""
-#: cps/web.py:2296
+#: cps/web.py:2379
#, python-format
msgid "You are not allowed to add a book to the the shelf: %s"
msgstr ""
-#: cps/web.py:2301
+#: cps/web.py:2384
msgid "User is not allowed to edit public shelves"
msgstr ""
-#: cps/web.py:2319
+#: cps/web.py:2402
#, python-format
msgid "Books are already part of the shelf: %s"
msgstr ""
-#: cps/web.py:2333
+#: cps/web.py:2416
#, python-format
msgid "Books have been added to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2335
+#: cps/web.py:2418
#, python-format
msgid "Could not add books to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2372
+#: cps/web.py:2455
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr "此书已从书架 %(sname)s 中删除"
-#: cps/web.py:2378
+#: cps/web.py:2461
#, python-format
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2398 cps/web.py:2422
+#: cps/web.py:2481 cps/web.py:2505
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr "已存在书架 '%(title)s'。"
-#: cps/web.py:2403
+#: cps/web.py:2486
#, python-format
msgid "Shelf %(title)s created"
msgstr "书架 %(title)s 已被创建"
-#: cps/web.py:2405 cps/web.py:2433
+#: cps/web.py:2488 cps/web.py:2516
msgid "There was an error"
msgstr "发生错误"
-#: cps/web.py:2406 cps/web.py:2408
+#: cps/web.py:2489 cps/web.py:2491
msgid "create a shelf"
msgstr "创建书架"
-#: cps/web.py:2431
+#: cps/web.py:2514
#, python-format
msgid "Shelf %(title)s changed"
msgstr "书架 %(title)s 已被修改"
-#: cps/web.py:2434 cps/web.py:2436
+#: cps/web.py:2517 cps/web.py:2519
msgid "Edit a shelf"
msgstr "编辑书架"
-#: cps/web.py:2457
+#: cps/web.py:2540
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr "成功删除书架 %(name)s"
-#: cps/web.py:2479
+#: cps/web.py:2562
#, python-format
msgid "Shelf: '%(name)s'"
msgstr "书架: '%(name)s'"
-#: cps/web.py:2482
+#: cps/web.py:2565
msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "打开书架出错。书架不存在或不可访问"
-#: cps/web.py:2513
+#: cps/web.py:2596
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr "修改书架 '%(name)s' 顺序"
-#: cps/web.py:2542 cps/web.py:2942
+#: cps/web.py:2625 cps/web.py:3035
msgid "E-mail is not from valid domain"
msgstr ""
-#: cps/web.py:2544 cps/web.py:2585 cps/web.py:2588
+#: cps/web.py:2627 cps/web.py:2668 cps/web.py:2671
#, python-format
msgid "%(name)s's profile"
msgstr "%(name)s 的资料"
-#: cps/web.py:2583
+#: cps/web.py:2666
msgid "Found an existing account for this e-mail address."
msgstr ""
-#: cps/web.py:2586
+#: cps/web.py:2669
msgid "Profile updated"
msgstr "资料已更新"
-#: cps/web.py:2598
+#: cps/web.py:2681
msgid "Unknown"
msgstr ""
-#: cps/web.py:2612
+#: cps/web.py:2695
msgid "Admin page"
msgstr "管理页"
-#: cps/web.py:2690 cps/web.py:2852
+#: cps/web.py:2773 cps/web.py:2945
msgid "Calibre-Web configuration updated"
msgstr "Calibre-Web配置已更新"
-#: cps/templates/admin.html:87 cps/web.py:2703
+#: cps/templates/admin.html:91 cps/web.py:2786
msgid "UI Configuration"
msgstr ""
-#: cps/web.py:2720
+#: cps/web.py:2803
msgid "Import of optional Google Drive requirements missing"
msgstr ""
-#: cps/web.py:2723
+#: cps/web.py:2806
msgid "client_secrets.json is missing or not readable"
msgstr ""
-#: cps/web.py:2728 cps/web.py:2755
+#: cps/web.py:2811 cps/web.py:2838
msgid "client_secrets.json is not configured for web application"
msgstr ""
-#: cps/templates/admin.html:86 cps/web.py:2758 cps/web.py:2784 cps/web.py:2796
-#: cps/web.py:2839 cps/web.py:2860 cps/web.py:2867 cps/web.py:2884
+#: cps/templates/admin.html:90 cps/web.py:2841 cps/web.py:2867 cps/web.py:2879
+#: cps/web.py:2921 cps/web.py:2936 cps/web.py:2953 cps/web.py:2960
+#: cps/web.py:2977
msgid "Basic Configuration"
msgstr "基本配置"
-#: cps/web.py:2781
+#: cps/web.py:2864
msgid "Keyfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:2793
+#: cps/web.py:2876
msgid "Certfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:2836
+#: cps/web.py:2918
msgid "Logfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:2864
+#: cps/web.py:2957
msgid "DB location is not valid, please enter correct path"
msgstr "DB位置无效,请输入正确路径"
-#: cps/templates/admin.html:31 cps/web.py:2938 cps/web.py:2944 cps/web.py:2960
+#: cps/templates/admin.html:31 cps/web.py:3031 cps/web.py:3037 cps/web.py:3053
msgid "Add new user"
msgstr "添加新用户"
-#: cps/web.py:2950
+#: cps/web.py:3043
#, python-format
msgid "User '%(user)s' created"
msgstr "用户 '%(user)s' 已被创建"
-#: cps/web.py:2954
+#: cps/web.py:3047
msgid "Found an existing account for this e-mail address or nickname."
msgstr ""
-#: cps/web.py:2978 cps/web.py:2992
+#: cps/web.py:3071 cps/web.py:3085
msgid "E-mail server settings updated"
msgstr ""
-#: cps/web.py:2985
+#: cps/web.py:3078
#, python-format
msgid "Test e-mail successfully send to %(kindlemail)s"
msgstr ""
-#: cps/web.py:2988
+#: cps/web.py:3081
#, python-format
msgid "There was an error sending the Test e-mail: %(res)s"
msgstr ""
-#: cps/web.py:2993
+#: cps/web.py:3086
msgid "Edit e-mail server settings"
msgstr ""
-#: cps/web.py:3018
+#: cps/web.py:3111
#, python-format
msgid "User '%(nick)s' deleted"
msgstr "用户 '%(nick)s' 已被删除"
-#: cps/web.py:3127
+#: cps/web.py:3220
#, python-format
msgid "User '%(nick)s' updated"
msgstr "用户 '%(nick)s' 已被更新"
-#: cps/web.py:3130
+#: cps/web.py:3223
msgid "An unknown error occured."
msgstr "发生未知错误。"
-#: cps/web.py:3132
+#: cps/web.py:3225
#, python-format
msgid "Edit User %(nick)s"
msgstr "编辑用户 %(nick)s"
-#: cps/web.py:3149
+#: cps/web.py:3242
#, python-format
msgid "Password for user %s reset"
msgstr ""
-#: cps/web.py:3169
+#: cps/web.py:3262
msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "打开电子书出错。文件不存在或不可访问"
-#: cps/web.py:3184 cps/web.py:3445 cps/web.py:3450 cps/web.py:3605
+#: cps/web.py:3294 cps/web.py:3556 cps/web.py:3561 cps/web.py:3716
msgid "edit metadata"
msgstr "编辑元数据"
-#: cps/web.py:3197 cps/web.py:3475
+#: cps/web.py:3308 cps/web.py:3586
#, python-format
msgid "File extension \"%s\" is not allowed to be uploaded to this server"
msgstr "不能上传后缀为 \"%s\" 的文件到此服务器"
-#: cps/web.py:3201 cps/web.py:3479
+#: cps/web.py:3312 cps/web.py:3590
msgid "File to be uploaded must have an extension"
msgstr "要上传的文件必须有一个后缀"
-#: cps/web.py:3213 cps/web.py:3499
+#: cps/web.py:3324 cps/web.py:3610
#, python-format
msgid "Failed to create path %s (Permission denied)."
msgstr "创建路径 %s 失败(权限拒绝)。"
-#: cps/web.py:3218
+#: cps/web.py:3329
#, python-format
msgid "Failed to store file %s."
msgstr ""
-#: cps/web.py:3234
+#: cps/web.py:3345
#, python-format
msgid "File format %s added to %s"
msgstr ""
-#: cps/web.py:3252
+#: cps/web.py:3363
#, python-format
msgid "Failed to create path for cover %s (Permission denied)."
msgstr ""
-#: cps/web.py:3259
+#: cps/web.py:3370
#, python-format
msgid "Failed to store cover-file %s."
msgstr ""
-#: cps/web.py:3262
+#: cps/web.py:3373
msgid "Cover-file is not a valid image file"
msgstr ""
-#: cps/web.py:3275 cps/web.py:3279
+#: cps/web.py:3386 cps/web.py:3390
msgid "unknown"
msgstr "未知"
-#: cps/web.py:3301
+#: cps/web.py:3412
msgid "Cover is not a jpg file, can't save"
msgstr ""
-#: cps/web.py:3454
+#: cps/web.py:3565
msgid "Error editing book, please check logfile for details"
msgstr ""
-#: cps/web.py:3504
+#: cps/web.py:3615
#, python-format
msgid "Failed to store file %s (Permission denied)."
msgstr "存储文件 %s 失败(权限拒绝)。"
-#: cps/web.py:3509
+#: cps/web.py:3620
#, python-format
msgid "Failed to delete file %s (Permission denied)."
msgstr "删除文件 %s 失败(权限拒绝)。"
-#: cps/web.py:3591
+#: cps/web.py:3702
#, python-format
msgid "File %s uploaded"
msgstr ""
-#: cps/worker.py:212 cps/worker.py:366
+#: cps/web.py:3732
+msgid "Source or destination format for conversion missing"
+msgstr ""
+
+#: cps/web.py:3742
+#, python-format
+msgid "Book successfully queued for converting to %(book_format)s"
+msgstr ""
+
+#: cps/web.py:3746
+#, python-format
+msgid "There was an error converting this book: %(res)s"
+msgstr ""
+
+#: cps/worker.py:215 cps/worker.py:385
msgid "Started"
msgstr ""
-#: cps/worker.py:221
+#: cps/worker.py:226
#, python-format
msgid "E-mail: %stitle"
msgstr ""
-#: cps/worker.py:229
+#: cps/worker.py:237
#, python-format
msgid "Convertertool %(converter)s not found"
msgstr ""
-#: cps/worker.py:256
+#: cps/worker.py:272
#, python-format
msgid "Ebook-converter failed: %s"
msgstr ""
-#: cps/worker.py:266
+#: cps/worker.py:283
#, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "Kindlegen 因为错误 %(error)s 失败。消息: %(message)s"
-#: cps/worker.py:299 cps/worker.py:355 cps/worker.py:418
+#: cps/worker.py:316 cps/worker.py:375 cps/worker.py:437
msgid "Finished"
msgstr ""
-#: cps/worker.py:322 cps/worker.py:341
+#: cps/worker.py:342 cps/worker.py:361
msgid "Waiting"
msgstr ""
-#: cps/worker.py:330
+#: cps/worker.py:349
msgid "This e-mail has been sent via Calibre-Web."
msgstr ""
-#: cps/worker.py:444
+#: cps/worker.py:463
msgid "Failed"
msgstr ""
@@ -662,7 +705,7 @@ msgid "Nickname"
msgstr "昵称"
#: cps/templates/admin.html:8
-msgid "Email"
+msgid "E-mail"
msgstr ""
#: cps/templates/admin.html:9
@@ -726,9 +769,9 @@ msgstr "配置"
msgid "Calibre DB dir"
msgstr "Calibre DB目录"
-#: cps/templates/admin.html:57 cps/templates/config_edit.html:106
-msgid "Log Level"
-msgstr "日志级别"
+#: cps/templates/admin.html:57
+msgid "Log level"
+msgstr ""
#: cps/templates/admin.html:61
msgid "Port"
@@ -743,68 +786,72 @@ msgid "Uploading"
msgstr "上传"
#: cps/templates/admin.html:75
+msgid "Anonymous browsing"
+msgstr ""
+
+#: cps/templates/admin.html:79
msgid "Public registration"
msgstr "开放注册"
-#: cps/templates/admin.html:79 cps/templates/remote_login.html:4
+#: cps/templates/admin.html:83 cps/templates/remote_login.html:4
msgid "Remote login"
msgstr "远程登录"
-#: cps/templates/admin.html:89
+#: cps/templates/admin.html:93
msgid "Administration"
msgstr "管理"
-#: cps/templates/admin.html:90
+#: cps/templates/admin.html:94
msgid "Current commit timestamp"
msgstr "当前提交时间戳"
-#: cps/templates/admin.html:91
+#: cps/templates/admin.html:95
msgid "Newest commit timestamp"
msgstr "最新提交时间戳"
-#: cps/templates/admin.html:93
+#: cps/templates/admin.html:97
msgid "Reconnect to Calibre DB"
msgstr "重新连接到Calibre数据库"
-#: cps/templates/admin.html:94
+#: cps/templates/admin.html:98
msgid "Restart Calibre-Web"
msgstr "重启 Calibre-Web"
-#: cps/templates/admin.html:95
+#: cps/templates/admin.html:99
msgid "Stop Calibre-Web"
msgstr "停止 Calibre-Web"
-#: cps/templates/admin.html:96
+#: cps/templates/admin.html:100
msgid "Check for update"
msgstr "检查更新"
-#: cps/templates/admin.html:97
+#: cps/templates/admin.html:101
msgid "Perform Update"
msgstr "执行更新"
-#: cps/templates/admin.html:106
+#: cps/templates/admin.html:110
msgid "Do you really want to restart Calibre-Web?"
msgstr "您确定要重启 Calibre-Web 吗?"
-#: cps/templates/admin.html:111 cps/templates/admin.html:125
-#: cps/templates/admin.html:146 cps/templates/shelf.html:59
+#: cps/templates/admin.html:115 cps/templates/admin.html:129
+#: cps/templates/admin.html:150 cps/templates/shelf.html:59
msgid "Ok"
msgstr "确定"
-#: cps/templates/admin.html:112 cps/templates/admin.html:126
-#: cps/templates/book_edit.html:148 cps/templates/book_edit.html:170
-#: cps/templates/config_edit.html:206 cps/templates/config_view_edit.html:164
+#: cps/templates/admin.html:116 cps/templates/admin.html:130
+#: cps/templates/book_edit.html:176 cps/templates/book_edit.html:198
+#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:164
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
#: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19
#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:153
msgid "Back"
msgstr "后退"
-#: cps/templates/admin.html:124
+#: cps/templates/admin.html:128
msgid "Do you really want to stop Calibre-Web?"
msgstr "您确定要关闭 Calibre-Web 吗?"
-#: cps/templates/admin.html:137
+#: cps/templates/admin.html:141
msgid "Updating, please do not reload page"
msgstr "正在更新,请不要刷新页面"
@@ -828,137 +875,153 @@ msgstr "删除书籍"
msgid "Delete formats:"
msgstr ""
-#: cps/templates/book_edit.html:22 cps/templates/book_edit.html:169
+#: cps/templates/book_edit.html:22 cps/templates/book_edit.html:197
#: cps/templates/email_edit.html:73 cps/templates/email_edit.html:74
msgid "Delete"
msgstr "删除"
-#: cps/templates/book_edit.html:31 cps/templates/search_form.html:6
+#: cps/templates/book_edit.html:30
+msgid "Convert book format:"
+msgstr ""
+
+#: cps/templates/book_edit.html:34
+msgid "Convert from:"
+msgstr ""
+
+#: cps/templates/book_edit.html:41
+msgid "Convert to:"
+msgstr ""
+
+#: cps/templates/book_edit.html:50
+msgid "Convert book"
+msgstr ""
+
+#: cps/templates/book_edit.html:59 cps/templates/search_form.html:6
msgid "Book Title"
msgstr "书名"
-#: cps/templates/book_edit.html:35 cps/templates/book_edit.html:229
-#: cps/templates/book_edit.html:247 cps/templates/search_form.html:10
+#: cps/templates/book_edit.html:63 cps/templates/book_edit.html:257
+#: cps/templates/book_edit.html:275 cps/templates/search_form.html:10
msgid "Author"
msgstr "作者"
-#: cps/templates/book_edit.html:39 cps/templates/book_edit.html:234
-#: cps/templates/book_edit.html:249 cps/templates/search_form.html:106
+#: cps/templates/book_edit.html:67 cps/templates/book_edit.html:262
+#: cps/templates/book_edit.html:277 cps/templates/search_form.html:106
msgid "Description"
msgstr "简介"
-#: cps/templates/book_edit.html:43 cps/templates/search_form.html:33
+#: cps/templates/book_edit.html:71 cps/templates/search_form.html:33
msgid "Tags"
msgstr "标签"
-#: cps/templates/book_edit.html:48 cps/templates/layout.html:157
+#: cps/templates/book_edit.html:76 cps/templates/layout.html:157
#: cps/templates/search_form.html:53
msgid "Series"
msgstr "丛书"
-#: cps/templates/book_edit.html:52
+#: cps/templates/book_edit.html:80
msgid "Series id"
msgstr "丛书ID"
-#: cps/templates/book_edit.html:56
+#: cps/templates/book_edit.html:84
msgid "Rating"
msgstr "评分"
-#: cps/templates/book_edit.html:60
+#: cps/templates/book_edit.html:88
msgid ""
"Cover URL (jpg, cover is downloaded and stored in database, field is "
"afterwards empty again)"
msgstr ""
-#: cps/templates/book_edit.html:64
+#: cps/templates/book_edit.html:92
msgid "Upload Cover from local drive"
msgstr ""
-#: cps/templates/book_edit.html:69 cps/templates/detail.html:131
+#: cps/templates/book_edit.html:97 cps/templates/detail.html:131
msgid "Publishing date"
msgstr "出版日期"
-#: cps/templates/book_edit.html:76 cps/templates/user_edit.html:33
+#: cps/templates/book_edit.html:104 cps/templates/user_edit.html:33
msgid "Language"
msgstr "语言"
-#: cps/templates/book_edit.html:87 cps/templates/search_form.html:117
+#: cps/templates/book_edit.html:115 cps/templates/search_form.html:117
msgid "Yes"
msgstr "确认"
-#: cps/templates/book_edit.html:88 cps/templates/search_form.html:118
+#: cps/templates/book_edit.html:116 cps/templates/search_form.html:118
msgid "No"
msgstr ""
-#: cps/templates/book_edit.html:134
+#: cps/templates/book_edit.html:162
msgid "Upload format"
msgstr ""
-#: cps/templates/book_edit.html:143
+#: cps/templates/book_edit.html:171
msgid "view book after edit"
msgstr "编辑后查看书籍"
-#: cps/templates/book_edit.html:146 cps/templates/book_edit.html:182
+#: cps/templates/book_edit.html:174 cps/templates/book_edit.html:210
msgid "Get metadata"
msgstr "获取元数据"
-#: cps/templates/book_edit.html:147 cps/templates/config_edit.html:204
+#: cps/templates/book_edit.html:175 cps/templates/config_edit.html:210
#: cps/templates/config_view_edit.html:163 cps/templates/login.html:20
#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17
#: cps/templates/user_edit.html:151
msgid "Submit"
msgstr "提交"
-#: cps/templates/book_edit.html:161
+#: cps/templates/book_edit.html:189
msgid "Are you really sure?"
msgstr "您真的确认?"
-#: cps/templates/book_edit.html:164
+#: cps/templates/book_edit.html:192
msgid "Book will be deleted from Calibre database"
msgstr "书籍会被从Calibre数据库和硬盘中删除"
-#: cps/templates/book_edit.html:165
+#: cps/templates/book_edit.html:193
msgid "and from hard disk"
msgstr ""
-#: cps/templates/book_edit.html:185
+#: cps/templates/book_edit.html:213
msgid "Keyword"
msgstr "关键字"
-#: cps/templates/book_edit.html:186
+#: cps/templates/book_edit.html:214
msgid " Search keyword "
msgstr "搜索关键字"
-#: cps/templates/book_edit.html:188 cps/templates/layout.html:46
+#: cps/templates/book_edit.html:216 cps/templates/layout.html:46
msgid "Go!"
msgstr "走起!"
-#: cps/templates/book_edit.html:192
+#: cps/templates/book_edit.html:220
msgid "Click the cover to load metadata to the form"
msgstr "点击封面加载元数据到表单"
-#: cps/templates/book_edit.html:204 cps/templates/book_edit.html:244
+#: cps/templates/book_edit.html:232 cps/templates/book_edit.html:272
msgid "Loading..."
msgstr "加载中..."
-#: cps/templates/book_edit.html:209 cps/templates/layout.html:221
+#: cps/templates/book_edit.html:237 cps/templates/layout.html:221
msgid "Close"
msgstr "关闭"
-#: cps/templates/book_edit.html:231 cps/templates/book_edit.html:248
+#: cps/templates/book_edit.html:259 cps/templates/book_edit.html:276
#: cps/templates/detail.html:126 cps/templates/search_form.html:14
msgid "Publisher"
msgstr "出版社"
-#: cps/templates/book_edit.html:236 cps/templates/book_edit.html:250
+#: cps/templates/book_edit.html:264 cps/templates/book_edit.html:278
msgid "Source"
msgstr "来源"
-#: cps/templates/book_edit.html:245
+#: cps/templates/book_edit.html:273
msgid "Search error!"
msgstr "搜索错误"
-#: cps/templates/book_edit.html:246
+#: cps/templates/book_edit.html:274
msgid "No Result(s) found! Please try aonther keyword."
msgstr ""
@@ -1018,6 +1081,10 @@ msgstr ""
msgid "Logfile Configuration"
msgstr ""
+#: cps/templates/config_edit.html:106
+msgid "Log Level"
+msgstr "日志级别"
+
#: cps/templates/config_edit.html:115
msgid "Location and name of logfile (calibre-web.log for no entry)"
msgstr ""
@@ -1059,7 +1126,7 @@ msgid "Goodreads API Secret"
msgstr ""
#: cps/templates/config_edit.html:173
-msgid "E-Book converter"
+msgid "External binaries"
msgstr ""
#: cps/templates/config_edit.html:181
@@ -1082,7 +1149,11 @@ msgstr ""
msgid "Path to convertertool"
msgstr ""
-#: cps/templates/config_edit.html:209 cps/templates/layout.html:82
+#: cps/templates/config_edit.html:199
+msgid "Location of Unrar binary"
+msgstr ""
+
+#: cps/templates/config_edit.html:215 cps/templates/layout.html:82
#: cps/templates/login.html:4
msgid "Login"
msgstr "登录"
@@ -1472,7 +1543,8 @@ msgstr "通过魔法链接登录"
msgid "Calibre-Web ebook catalog"
msgstr ""
-#: cps/templates/read.html:69
+#: cps/templates/read.html:69 cps/templates/readcbr.html:79
+#: cps/templates/readcbr.html:103
msgid "Settings"
msgstr ""
@@ -1480,6 +1552,94 @@ msgstr ""
msgid "Reflow text when sidebars are open."
msgstr ""
+#: cps/templates/readcbr.html:84
+msgid "Keyboard Shortcuts"
+msgstr ""
+
+#: cps/templates/readcbr.html:87
+msgid "Previous Page"
+msgstr ""
+
+#: cps/templates/readcbr.html:88
+msgid "Next Page"
+msgstr ""
+
+#: cps/templates/readcbr.html:89
+msgid "Scale to Best"
+msgstr ""
+
+#: cps/templates/readcbr.html:90
+msgid "Scale to Width"
+msgstr ""
+
+#: cps/templates/readcbr.html:91
+msgid "Scale to Height"
+msgstr ""
+
+#: cps/templates/readcbr.html:92
+msgid "Scale to Native"
+msgstr ""
+
+#: cps/templates/readcbr.html:93
+msgid "Rotate Right"
+msgstr ""
+
+#: cps/templates/readcbr.html:94
+msgid "Rotate Left"
+msgstr ""
+
+#: cps/templates/readcbr.html:95
+msgid "Flip Image"
+msgstr ""
+
+#: cps/templates/readcbr.html:108 cps/templates/user_edit.html:41
+msgid "Theme"
+msgstr ""
+
+#: cps/templates/readcbr.html:111
+msgid "Light"
+msgstr ""
+
+#: cps/templates/readcbr.html:112
+msgid "Dark"
+msgstr ""
+
+#: cps/templates/readcbr.html:117
+msgid "Scale"
+msgstr ""
+
+#: cps/templates/readcbr.html:120
+msgid "Best"
+msgstr ""
+
+#: cps/templates/readcbr.html:121
+msgid "Width"
+msgstr ""
+
+#: cps/templates/readcbr.html:122
+msgid "Height"
+msgstr ""
+
+#: cps/templates/readcbr.html:123
+msgid "Native"
+msgstr ""
+
+#: cps/templates/readcbr.html:128
+msgid "Rotate"
+msgstr ""
+
+#: cps/templates/readcbr.html:139
+msgid "Flip"
+msgstr ""
+
+#: cps/templates/readcbr.html:142
+msgid "Horizontal"
+msgstr ""
+
+#: cps/templates/readcbr.html:143
+msgid "Vertical"
+msgstr ""
+
#: cps/templates/readpdf.html:29
msgid "PDF.js viewer"
msgstr "PDF.js 查看器"
@@ -1501,8 +1661,8 @@ msgid "Choose a password"
msgstr "选择一个密码"
#: cps/templates/register.html:15 cps/templates/user_edit.html:13
-msgid "Email address"
-msgstr "邮箱地址"
+msgid "E-mail address"
+msgstr ""
#: cps/templates/register.html:16
msgid "Your email address"
@@ -1664,10 +1824,6 @@ msgstr ""
msgid "Kindle E-Mail"
msgstr ""
-#: cps/templates/user_edit.html:41
-msgid "Theme"
-msgstr ""
-
#: cps/templates/user_edit.html:43
msgid "Standard Theme"
msgstr ""
diff --git a/cps/web.py b/cps/web.py
index 65dce315..597f177c 100644
--- a/cps/web.py
+++ b/cps/web.py
@@ -3271,10 +3271,28 @@ def edit_book(book_id):
for authr in book.authors:
author_names.append(authr.name.replace('|', ','))
+ # Option for showing convertbook button
+ if config.config_ebookconverter == 2:
+ display_convertbtn = True
+ else:
+ display_convertbtn = False
+
+ # Determine what formats don't already exist
+ allowed_conversion_formats = ALLOWED_EXTENSIONS.copy()
+ for file in book.data:
+ try:
+ allowed_conversion_formats.remove(file.format.lower())
+ except Exception:
+ app.logger.warning(file.format.lower() + ' already removed from list.')
+
+ app.logger.debug('Allowed conversion formats:')
+ app.logger.debug(allowed_conversion_formats)
+
# Show form
if request.method != 'POST':
return render_title_template('book_edit.html', book=book, authors=author_names, cc=cc,
- title=_(u"edit metadata"), page="editbook")
+ title=_(u"edit metadata"), page="editbook", display_convertbtn=display_convertbtn,
+ conversion_formats=allowed_conversion_formats)
# Update book
edited_books_id = set()
@@ -3700,3 +3718,30 @@ def upload():
return render_title_template('detail.html', entry=book, cc=cc,
title=book.title, books_shelfs=book_in_shelfs, page="upload")
return redirect(url_for("index"))
+
+
+@app.route("/admin/book/convert/", methods=['POST'])
+@login_required_if_no_ano
+@edit_required
+def convert_bookformat(book_id):
+ # check to see if we have form fields to work with - if not send user back
+ book_format_from = request.form.get('book_format_from', None)
+ book_format_to = request.form.get('book_format_to', None)
+
+ if (book_format_from is None) or (book_format_to is None):
+ flash(_(u"Source or destination format for conversion missing"), category="error")
+ return redirect(request.environ["HTTP_REFERER"])
+
+ app.logger.debug('converting: book id: ' + str(book_id) +
+ ' from: ' + request.form['book_format_from'] +
+ ' to: ' + request.form['book_format_to'])
+ rtn = helper.convert_book_format(book_id, config.config_calibre_dir, book_format_from.upper(),
+ book_format_to.upper(), current_user.nickname)
+
+ if rtn is None:
+ flash(_(u"Book successfully queued for converting to %(book_format)s",
+ book_format=book_format_to),
+ category="success")
+ else:
+ flash(_(u"There was an error converting this book: %(res)s", res=rtn), category="error")
+ return redirect(request.environ["HTTP_REFERER"])
diff --git a/cps/worker.py b/cps/worker.py
index e2958232..fff2c774 100644
--- a/cps/worker.py
+++ b/cps/worker.py
@@ -42,6 +42,7 @@ STAT_FINISH_SUCCESS = 3
TASK_EMAIL = 1
TASK_CONVERT = 2
TASK_UPLOAD = 3
+TASK_CONVERT_ANY = 4
RET_FAIL = 0
RET_SUCCESS = 1
@@ -171,7 +172,9 @@ class WorkerThread(threading.Thread):
if self.queue[self.current]['typ'] == TASK_EMAIL:
self.send_raw_email()
if self.queue[self.current]['typ'] == TASK_CONVERT:
- self.convert_mobi()
+ self.convert_any_format()
+ if self.queue[self.current]['typ'] == TASK_CONVERT_ANY:
+ self.convert_any_format()
# TASK_UPLOAD is handled implicitly
self.current += 1
else:
@@ -200,61 +203,75 @@ class WorkerThread(threading.Thread):
def get_taskstatus(self):
if self.current < len(self.queue):
if self.queue[self.current]['status'] == STAT_STARTED:
- if not self.queue[self.current]['typ'] == TASK_CONVERT:
+ if self.queue[self.current]['typ'] == TASK_EMAIL:
self.UIqueue[self.current]['progress'] = self.get_send_status()
self.UIqueue[self.current]['runtime'] = self._formatRuntime(
datetime.now() - self.queue[self.current]['starttime'])
return self.UIqueue
- def convert_mobi(self):
+ def convert_any_format(self):
# convert book, and upload in case of google drive
self.queue[self.current]['status'] = STAT_STARTED
self.UIqueue[self.current]['status'] = _('Started')
self.queue[self.current]['starttime'] = datetime.now()
self.UIqueue[self.current]['formStarttime'] = self.queue[self.current]['starttime']
- filename=self.convert()
- if web.ub.config.config_use_google_drive:
- gd.updateGdriveCalibreFromLocal()
- if(filename):
- self.add_email(_(u'Send to Kindle'), self.queue[self.current]['path'], filename,
+ curr_task = self.queue[self.current]['typ']
+ filename = self.convert_ebook_format()
+ if filename:
+ if web.ub.config.config_use_google_drive:
+ gd.updateGdriveCalibreFromLocal()
+ if curr_task == TASK_CONVERT:
+ self.add_email(_(u'Send to Kindle'), self.queue[self.current]['path'], filename,
self.queue[self.current]['settings'], self.queue[self.current]['kindle'],
self.UIqueue[self.current]['user'], _(u"E-mail: %s" % self.queue[self.current]['title']))
- def convert(self):
+
+ def convert_ebook_format(self):
error_message = None
file_path = self.queue[self.current]['file_path']
bookid = self.queue[self.current]['bookid']
- # check if converter-excecutable is existing
+ format_old_ext = u'.' + self.queue[self.current]['settings']['old_book_format'].lower()
+ format_new_ext = u'.' + self.queue[self.current]['settings']['new_book_format'].lower()
+ # check if converter-executable is existing
if not os.path.exists(web.ub.config.config_converterpath):
self._handleError(_(u"Convertertool %(converter)s not found", converter=web.ub.config.config_converterpath))
return
try:
# check which converter to use kindlegen is "1"
- if web.ub.config.config_ebookconverter == 1:
- command = [web.ub.config.config_converterpath, u'"' + file_path + u'.epub"']
- else:
+ if format_old_ext == '.epub' and format_new_ext == '.mobi':
+ if web.ub.config.config_ebookconverter == 1:
+ if os.name == 'nt':
+ command = web.ub.config.config_converterpath + u' "' + file_path + u'.epub"'
+ if sys.version_info < (3, 0):
+ command = command.encode(sys.getfilesystemencoding())
+ else:
+ command = [web.ub.config.config_converterpath, file_path + u'.epub']
+ if sys.version_info < (3, 0):
+ command = [x.encode(sys.getfilesystemencoding()) for x in command]
+ if web.ub.config.config_ebookconverter == 2:
# Linux py2.7 encode as list without quotes no empty element for parameters
# linux py3.x no encode and as list without quotes no empty element for parameters
- # windows py2.7 encode as string with qoutes empty element for parameters is okay
- # windows py 3.x no encode and as string with qoutes empty element for parameters is okay
- # seperate handling for windows and linux
+ # windows py2.7 encode as string with quotes empty element for parameters is okay
+ # windows py 3.x no encode and as string with quotes empty element for parameters is okay
+ # separate handling for windows and linux
if os.name == 'nt':
- command = web.ub.config.config_converterpath + u' "' + file_path + u'.epub" "' + \
- file_path + u'.mobi" ' + web.ub.config.config_calibre
+ command = web.ub.config.config_converterpath + u' "' + file_path + format_old_ext + u'" "' + \
+ file_path + format_new_ext + u'" ' + web.ub.config.config_calibre
if sys.version_info < (3, 0):
command = command.encode(sys.getfilesystemencoding())
else:
- command = [web.ub.config.config_converterpath, (file_path + u'.epub'),
- (file_path + u'.mobi')]
+ command = [web.ub.config.config_converterpath, (file_path + format_old_ext),
+ (file_path + format_new_ext)]
if web.ub.config.config_calibre:
command.append(web.ub.config.config_calibre)
if sys.version_info < (3, 0):
- command = [ x.encode(sys.getfilesystemencoding()) for x in command ]
+ command = [x.encode(sys.getfilesystemencoding()) for x in command]
p = subprocess.Popen(command, stdout=subprocess.PIPE, universal_newlines=True)
except OSError as e:
self._handleError(_(u"Ebook-converter failed: %s" % e))
return
+
if web.ub.config.config_ebookconverter == 1:
nextline = p.communicate()[0]
# Format of error message (kindlegen translates its output texts):
@@ -265,7 +282,6 @@ class WorkerThread(threading.Thread):
error_message = _(u"Kindlegen failed with Error %(error)s. Message: %(message)s",
error=conv_error.group(1), message=conv_error.group(2).strip())
web.app.logger.debug("convert_kindlegen: " + nextline)
-
else:
while p.poll() is None:
nextline = p.stdout.readline()
@@ -277,30 +293,31 @@ class WorkerThread(threading.Thread):
if progress:
self.UIqueue[self.current]['progress'] = progress.group(1) + ' %'
- #process returncode
+ # process returncode
check = p.returncode
# kindlegen returncodes
# 0 = Info(prcgen):I1036: Mobi file built successfully
# 1 = Info(prcgen):I1037: Mobi file built with WARNINGS!
# 2 = Info(prcgen):I1038: MOBI file could not be generated because of errors!
- if ( check < 2 and web.ub.config.config_ebookconverter == 1) or \
- (check == 0 and web.ub.config.config_ebookconverter == 2):
+ if (check < 2 and web.ub.config.config_ebookconverter == 1) or \
+ (check == 0 and web.ub.config.config_ebookconverter == 2):
cur_book = web.db.session.query(web.db.Books).filter(web.db.Books.id == bookid).first()
- new_format = web.db.Data(name=cur_book.data[0].name,book_format="MOBI",
- book=bookid,uncompressed_size=os.path.getsize(file_path + ".mobi"))
+ new_format = web.db.Data(name=cur_book.data[0].name,
+ book_format=self.queue[self.current]['settings']['new_book_format'],
+ book=bookid, uncompressed_size=os.path.getsize(file_path + format_new_ext))
cur_book.data.append(new_format)
web.db.session.commit()
self.queue[self.current]['path'] = cur_book.path
self.queue[self.current]['title'] = cur_book.title
if web.ub.config.config_use_google_drive:
- os.remove(file_path + u".epub")
+ os.remove(file_path + format_old_ext)
self.queue[self.current]['status'] = STAT_FINISH_SUCCESS
self.UIqueue[self.current]['status'] = _('Finished')
self.UIqueue[self.current]['progress'] = "100 %"
self.UIqueue[self.current]['runtime'] = self._formatRuntime(
- datetime.now() - self.queue[self.current]['starttime'])
- return file_path + ".mobi"
+ datetime.now() - self.queue[self.current]['starttime'])
+ return file_path + format_new_ext
else:
web.app.logger.info("ebook converter failed with error while converting book")
if not error_message:
@@ -309,18 +326,20 @@ class WorkerThread(threading.Thread):
return
- def add_convert(self, file_path, bookid, user_name, typ, settings, kindle_mail):
+ def add_convert(self, file_path, bookid, user_name, typ, settings, kindle_mail=None):
addLock = threading.Lock()
addLock.acquire()
if self.last >= 20:
self.delete_completed_tasks()
# progress, runtime, and status = 0
self.id += 1
- self.queue.append({'file_path':file_path, 'bookid':bookid, 'starttime': 0, 'kindle':kindle_mail,
- 'status': STAT_WAITING, 'typ': TASK_CONVERT, 'settings':settings})
+ task = TASK_CONVERT_ANY
+ if kindle_mail:
+ task = TASK_CONVERT
+ self.queue.append({'file_path':file_path, 'bookid':bookid, 'starttime': 0, 'kindle': kindle_mail,
+ 'status': STAT_WAITING, 'typ': task, 'settings':settings})
self.UIqueue.append({'user': user_name, 'formStarttime': '', 'progress': " 0 %", 'type': typ,
'runtime': '0 s', 'status': _('Waiting'),'id': self.id } )
- self.id += 1
self.last=len(self.queue)
addLock.release()
@@ -334,12 +353,12 @@ class WorkerThread(threading.Thread):
if self.last >= 20:
self.delete_completed_tasks()
# progress, runtime, and status = 0
+ self.id += 1
self.queue.append({'subject':subject, 'attachment':attachment, 'filepath':filepath,
'settings':settings, 'recipent':recipient, 'starttime': 0,
'status': STAT_WAITING, 'typ': TASK_EMAIL, 'text':text})
self.UIqueue.append({'user': user_name, 'formStarttime': '', 'progress': " 0 %", 'type': typ,
'runtime': '0 s', 'status': _('Waiting'),'id': self.id })
- self.id += 1
self.last=len(self.queue)
addLock.release()
@@ -350,15 +369,15 @@ class WorkerThread(threading.Thread):
if self.last >= 20:
self.delete_completed_tasks()
# progress=100%, runtime=0, and status finished
+ self.id += 1
self.queue.append({'starttime': datetime.now(), 'status': STAT_FINISH_SUCCESS, 'typ': TASK_UPLOAD})
self.UIqueue.append({'user': user_name, 'formStarttime': '', 'progress': "100 %", 'type': typ,
'runtime': '0 s', 'status': _('Finished'),'id': self.id })
self.UIqueue[self.current]['formStarttime'] = self.queue[self.current]['starttime']
- self.id += 1
self.last=len(self.queue)
addLock.release()
-
-
+
+
def send_raw_email(self):
self.queue[self.current]['starttime'] = datetime.now()
self.UIqueue[self.current]['formStarttime'] = self.queue[self.current]['starttime']
diff --git a/messages.pot b/messages.pot
index 22192793..69e080ee 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: 2018-08-28 14:05+0200\n"
+"POT-Creation-Date: 2018-08-31 14:58+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -26,619 +26,662 @@ msgstr ""
msgid "Excecution permissions missing"
msgstr ""
-#: cps/helper.py:55
+#: cps/helper.py:56
#, python-format
-msgid "epub format not found for book id: %(book)d"
+msgid "Epub format not found for book id: %(book)d"
msgstr ""
-#: cps/helper.py:71
+#: cps/helper.py:75
#, python-format
msgid "Convert: %s"
msgstr ""
-#: cps/helper.py:80
+#: cps/helper.py:84
msgid "Calibre-Web test e-mail"
msgstr ""
-#: cps/helper.py:81
+#: cps/helper.py:85
msgid "Test e-mail"
msgstr ""
-#: cps/helper.py:96
+#: cps/helper.py:100
msgid "Get Started with Calibre-Web"
msgstr ""
-#: cps/helper.py:97
+#: cps/helper.py:101
#, python-format
msgid "Registration e-mail for user: %s"
msgstr ""
-#: cps/helper.py:120 cps/helper.py:130
+#: cps/helper.py:124 cps/helper.py:134
msgid "Could not find any formats suitable for sending by e-mail"
msgstr ""
-#: cps/helper.py:132 cps/templates/detail.html:44 cps/worker.py:219
+#: cps/helper.py:136 cps/templates/detail.html:44 cps/worker.py:224
msgid "Send to Kindle"
msgstr ""
-#: cps/helper.py:133
+#: cps/helper.py:137
#, python-format
msgid "E-Mail: %s"
msgstr ""
-#: cps/helper.py:135
+#: cps/helper.py:139
msgid "The requested file could not be read. Maybe wrong permissions?"
msgstr ""
-#: cps/helper.py:230
+#: cps/helper.py:147
+#, python-format
+msgid "%(format)s format not found for book id: %(book)d"
+msgstr ""
+
+#: cps/helper.py:159
+#, python-format
+msgid "%(format)s not found on Google Drive: %(fn)s"
+msgstr ""
+
+#: cps/helper.py:171 cps/helper.py:178
+#, python-format
+msgid "Convert to %(format)s: %(book)s"
+msgstr ""
+
+#: cps/helper.py:184
+#, python-format
+msgid "%(format)s not found: %(fn)s"
+msgstr ""
+
+#: cps/helper.py:280
#, python-format
msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s"
msgstr ""
-#: cps/helper.py:239
+#: cps/helper.py:289
#, python-format
msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s"
msgstr ""
-#: cps/helper.py:262 cps/helper.py:271
+#: cps/helper.py:312 cps/helper.py:321
#, python-format
msgid "File %s not found on Google Drive"
msgstr ""
-#: cps/helper.py:289
+#: cps/helper.py:339
#, python-format
msgid "Book path %s not found on Google Drive"
msgstr ""
-#: cps/web.py:1065
+#: cps/helper.py:584
+msgid "Error excecuting UnRar"
+msgstr ""
+
+#: cps/helper.py:586
+msgid "Unrar binary file not found"
+msgstr ""
+
+#: cps/web.py:1138
msgid "Requesting update package"
msgstr ""
-#: cps/web.py:1066
+#: cps/web.py:1139
msgid "Downloading update package"
msgstr ""
-#: cps/web.py:1067
+#: cps/web.py:1140
msgid "Unzipping update package"
msgstr ""
-#: cps/web.py:1068
+#: cps/web.py:1141
msgid "Files are replaced"
msgstr ""
-#: cps/web.py:1069
+#: cps/web.py:1142
msgid "Database connections are closed"
msgstr ""
-#: cps/web.py:1070
+#: cps/web.py:1143
msgid "Server is stopped"
msgstr ""
-#: cps/web.py:1071
+#: cps/web.py:1144
msgid "Update finished, please press okay and reload page"
msgstr ""
-#: cps/web.py:1091
+#: cps/web.py:1164
msgid "Recently Added Books"
msgstr ""
-#: cps/web.py:1101
+#: cps/web.py:1174
msgid "Newest Books"
msgstr ""
-#: cps/web.py:1113
+#: cps/web.py:1186
msgid "Oldest Books"
msgstr ""
-#: cps/web.py:1125
+#: cps/web.py:1198
msgid "Books (A-Z)"
msgstr ""
-#: cps/web.py:1136
+#: cps/web.py:1209
msgid "Books (Z-A)"
msgstr ""
-#: cps/web.py:1165
+#: cps/web.py:1238
msgid "Hot Books (most downloaded)"
msgstr ""
-#: cps/web.py:1178
+#: cps/web.py:1251
msgid "Best rated books"
msgstr ""
-#: cps/templates/index.xml:36 cps/web.py:1190
+#: cps/templates/index.xml:36 cps/web.py:1263
msgid "Random Books"
msgstr ""
-#: cps/web.py:1205
+#: cps/web.py:1278
msgid "Author list"
msgstr ""
-#: cps/web.py:1217 cps/web.py:1280 cps/web.py:1434 cps/web.py:1986
+#: cps/web.py:1290 cps/web.py:1353 cps/web.py:1508 cps/web.py:2060
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr ""
-#: cps/templates/index.xml:73 cps/web.py:1264
+#: cps/templates/index.xml:73 cps/web.py:1337
msgid "Series list"
msgstr ""
-#: cps/web.py:1278
+#: cps/web.py:1351
#, python-format
msgid "Series: %(serie)s"
msgstr ""
-#: cps/web.py:1305
+#: cps/web.py:1378
msgid "Available languages"
msgstr ""
-#: cps/web.py:1322
+#: cps/web.py:1395
#, python-format
msgid "Language: %(name)s"
msgstr ""
-#: cps/templates/index.xml:66 cps/web.py:1333
+#: cps/templates/index.xml:66 cps/web.py:1406
msgid "Category list"
msgstr ""
-#: cps/web.py:1347
+#: cps/web.py:1420
#, python-format
msgid "Category: %(name)s"
msgstr ""
-#: cps/templates/layout.html:71 cps/web.py:1484
+#: cps/templates/layout.html:71 cps/web.py:1559
msgid "Tasks"
msgstr ""
-#: cps/web.py:1515
+#: cps/web.py:1589
msgid "Statistics"
msgstr ""
-#: cps/web.py:1620
+#: cps/web.py:1694
msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
msgstr ""
-#: cps/web.py:1696
+#: cps/web.py:1770
msgid "Server restarted, please reload page"
msgstr ""
-#: cps/web.py:1699
+#: cps/web.py:1773
msgid "Performing shutdown of server, please close window"
msgstr ""
-#: cps/web.py:1717
+#: cps/web.py:1791
msgid "Update done"
msgstr ""
-#: cps/web.py:1773 cps/web.py:1810
+#: cps/web.py:1847 cps/web.py:1884
#, python-format
msgid "%s: %s"
msgstr ""
-#: cps/web.py:1785
+#: cps/web.py:1859
#, python-format
msgid "Published after %s"
msgstr ""
-#: cps/web.py:1790
+#: cps/web.py:1864
msgid "Published before "
msgstr ""
-#: cps/web.py:1804
+#: cps/web.py:1878
#, python-format
msgid "Rating <= %s"
msgstr ""
-#: cps/web.py:1806
+#: cps/web.py:1880
#, python-format
msgid "Rating >= %s"
msgstr ""
-#: cps/web.py:1865 cps/web.py:1874
+#: cps/web.py:1939 cps/web.py:1948
msgid "search"
msgstr ""
#: cps/templates/index.xml:44 cps/templates/index.xml:48
-#: cps/templates/layout.html:146 cps/web.py:1941
+#: cps/templates/layout.html:146 cps/web.py:2015
msgid "Read Books"
msgstr ""
#: cps/templates/index.xml:52 cps/templates/index.xml:56
-#: cps/templates/layout.html:148 cps/web.py:1944
+#: cps/templates/layout.html:148 cps/web.py:2018
msgid "Unread Books"
msgstr ""
-#: cps/web.py:1996 cps/web.py:1998 cps/web.py:2000 cps/web.py:2012
+#: cps/web.py:2070 cps/web.py:2072 cps/web.py:2074 cps/web.py:2086
msgid "Read a Book"
msgstr ""
-#: cps/web.py:2069 cps/web.py:2936
+#: cps/web.py:2152 cps/web.py:3029
msgid "Please fill out all fields!"
msgstr ""
-#: cps/web.py:2070 cps/web.py:2091 cps/web.py:2095 cps/web.py:2100
-#: cps/web.py:2102
+#: cps/web.py:2153 cps/web.py:2174 cps/web.py:2178 cps/web.py:2183
+#: cps/web.py:2185
msgid "register"
msgstr ""
-#: cps/web.py:2090 cps/web.py:3152
+#: cps/web.py:2173 cps/web.py:3245
msgid "An unknown error occurred. Please try again later."
msgstr ""
-#: cps/web.py:2093
+#: cps/web.py:2176
msgid "Your e-mail is not allowed to register"
msgstr ""
-#: cps/web.py:2096
+#: cps/web.py:2179
msgid "Confirmation e-mail was send to your e-mail account."
msgstr ""
-#: cps/web.py:2099
+#: cps/web.py:2182
msgid "This username or e-mail address is already in use."
msgstr ""
-#: cps/web.py:2116 cps/web.py:2212
+#: cps/web.py:2199 cps/web.py:2295
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr ""
-#: cps/web.py:2121
+#: cps/web.py:2204
msgid "Wrong Username or Password"
msgstr ""
-#: cps/web.py:2127 cps/web.py:2148
+#: cps/web.py:2210 cps/web.py:2231
msgid "login"
msgstr ""
-#: cps/web.py:2160 cps/web.py:2191
+#: cps/web.py:2243 cps/web.py:2274
msgid "Token not found"
msgstr ""
-#: cps/web.py:2168 cps/web.py:2199
+#: cps/web.py:2251 cps/web.py:2282
msgid "Token has expired"
msgstr ""
-#: cps/web.py:2176
+#: cps/web.py:2259
msgid "Success! Please return to your device"
msgstr ""
-#: cps/web.py:2226
+#: cps/web.py:2309
msgid "Please configure the SMTP mail settings first..."
msgstr ""
-#: cps/web.py:2230
+#: cps/web.py:2313
#, python-format
msgid "Book successfully queued for sending to %(kindlemail)s"
msgstr ""
-#: cps/web.py:2234
+#: cps/web.py:2317
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr ""
-#: cps/web.py:2236 cps/web.py:2990
+#: cps/web.py:2319 cps/web.py:3083
msgid "Please configure your kindle e-mail address first..."
msgstr ""
-#: cps/web.py:2280
+#: cps/web.py:2363
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2291
+#: cps/web.py:2374
msgid "Invalid shelf specified"
msgstr ""
-#: cps/web.py:2296
+#: cps/web.py:2379
#, python-format
msgid "You are not allowed to add a book to the the shelf: %s"
msgstr ""
-#: cps/web.py:2301
+#: cps/web.py:2384
msgid "User is not allowed to edit public shelves"
msgstr ""
-#: cps/web.py:2319
+#: cps/web.py:2402
#, python-format
msgid "Books are already part of the shelf: %s"
msgstr ""
-#: cps/web.py:2333
+#: cps/web.py:2416
#, python-format
msgid "Books have been added to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2335
+#: cps/web.py:2418
#, python-format
msgid "Could not add books to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2372
+#: cps/web.py:2455
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2378
+#: cps/web.py:2461
#, python-format
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2398 cps/web.py:2422
+#: cps/web.py:2481 cps/web.py:2505
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr ""
-#: cps/web.py:2403
+#: cps/web.py:2486
#, python-format
msgid "Shelf %(title)s created"
msgstr ""
-#: cps/web.py:2405 cps/web.py:2433
+#: cps/web.py:2488 cps/web.py:2516
msgid "There was an error"
msgstr ""
-#: cps/web.py:2406 cps/web.py:2408
+#: cps/web.py:2489 cps/web.py:2491
msgid "create a shelf"
msgstr ""
-#: cps/web.py:2431
+#: cps/web.py:2514
#, python-format
msgid "Shelf %(title)s changed"
msgstr ""
-#: cps/web.py:2434 cps/web.py:2436
+#: cps/web.py:2517 cps/web.py:2519
msgid "Edit a shelf"
msgstr ""
-#: cps/web.py:2457
+#: cps/web.py:2540
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr ""
-#: cps/web.py:2479
+#: cps/web.py:2562
#, python-format
msgid "Shelf: '%(name)s'"
msgstr ""
-#: cps/web.py:2482
+#: cps/web.py:2565
msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr ""
-#: cps/web.py:2513
+#: cps/web.py:2596
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr ""
-#: cps/web.py:2542 cps/web.py:2942
+#: cps/web.py:2625 cps/web.py:3035
msgid "E-mail is not from valid domain"
msgstr ""
-#: cps/web.py:2544 cps/web.py:2585 cps/web.py:2588
+#: cps/web.py:2627 cps/web.py:2668 cps/web.py:2671
#, python-format
msgid "%(name)s's profile"
msgstr ""
-#: cps/web.py:2583
+#: cps/web.py:2666
msgid "Found an existing account for this e-mail address."
msgstr ""
-#: cps/web.py:2586
+#: cps/web.py:2669
msgid "Profile updated"
msgstr ""
-#: cps/web.py:2598
+#: cps/web.py:2681
msgid "Unknown"
msgstr ""
-#: cps/web.py:2612
+#: cps/web.py:2695
msgid "Admin page"
msgstr ""
-#: cps/web.py:2690 cps/web.py:2852
+#: cps/web.py:2773 cps/web.py:2945
msgid "Calibre-Web configuration updated"
msgstr ""
-#: cps/templates/admin.html:87 cps/web.py:2703
+#: cps/templates/admin.html:91 cps/web.py:2786
msgid "UI Configuration"
msgstr ""
-#: cps/web.py:2720
+#: cps/web.py:2803
msgid "Import of optional Google Drive requirements missing"
msgstr ""
-#: cps/web.py:2723
+#: cps/web.py:2806
msgid "client_secrets.json is missing or not readable"
msgstr ""
-#: cps/web.py:2728 cps/web.py:2755
+#: cps/web.py:2811 cps/web.py:2838
msgid "client_secrets.json is not configured for web application"
msgstr ""
-#: cps/templates/admin.html:86 cps/web.py:2758 cps/web.py:2784 cps/web.py:2796
-#: cps/web.py:2839 cps/web.py:2860 cps/web.py:2867 cps/web.py:2884
+#: cps/templates/admin.html:90 cps/web.py:2841 cps/web.py:2867 cps/web.py:2879
+#: cps/web.py:2921 cps/web.py:2936 cps/web.py:2953 cps/web.py:2960
+#: cps/web.py:2977
msgid "Basic Configuration"
msgstr ""
-#: cps/web.py:2781
+#: cps/web.py:2864
msgid "Keyfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:2793
+#: cps/web.py:2876
msgid "Certfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:2836
+#: cps/web.py:2918
msgid "Logfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:2864
+#: cps/web.py:2957
msgid "DB location is not valid, please enter correct path"
msgstr ""
-#: cps/templates/admin.html:31 cps/web.py:2938 cps/web.py:2944 cps/web.py:2960
+#: cps/templates/admin.html:31 cps/web.py:3031 cps/web.py:3037 cps/web.py:3053
msgid "Add new user"
msgstr ""
-#: cps/web.py:2950
+#: cps/web.py:3043
#, python-format
msgid "User '%(user)s' created"
msgstr ""
-#: cps/web.py:2954
+#: cps/web.py:3047
msgid "Found an existing account for this e-mail address or nickname."
msgstr ""
-#: cps/web.py:2978 cps/web.py:2992
+#: cps/web.py:3071 cps/web.py:3085
msgid "E-mail server settings updated"
msgstr ""
-#: cps/web.py:2985
+#: cps/web.py:3078
#, python-format
msgid "Test e-mail successfully send to %(kindlemail)s"
msgstr ""
-#: cps/web.py:2988
+#: cps/web.py:3081
#, python-format
msgid "There was an error sending the Test e-mail: %(res)s"
msgstr ""
-#: cps/web.py:2993
+#: cps/web.py:3086
msgid "Edit e-mail server settings"
msgstr ""
-#: cps/web.py:3018
+#: cps/web.py:3111
#, python-format
msgid "User '%(nick)s' deleted"
msgstr ""
-#: cps/web.py:3127
+#: cps/web.py:3220
#, python-format
msgid "User '%(nick)s' updated"
msgstr ""
-#: cps/web.py:3130
+#: cps/web.py:3223
msgid "An unknown error occured."
msgstr ""
-#: cps/web.py:3132
+#: cps/web.py:3225
#, python-format
msgid "Edit User %(nick)s"
msgstr ""
-#: cps/web.py:3149
+#: cps/web.py:3242
#, python-format
msgid "Password for user %s reset"
msgstr ""
-#: cps/web.py:3169
+#: cps/web.py:3262
msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr ""
-#: cps/web.py:3184 cps/web.py:3445 cps/web.py:3450 cps/web.py:3605
+#: cps/web.py:3294 cps/web.py:3556 cps/web.py:3561 cps/web.py:3716
msgid "edit metadata"
msgstr ""
-#: cps/web.py:3197 cps/web.py:3475
+#: cps/web.py:3308 cps/web.py:3586
#, python-format
msgid "File extension \"%s\" is not allowed to be uploaded to this server"
msgstr ""
-#: cps/web.py:3201 cps/web.py:3479
+#: cps/web.py:3312 cps/web.py:3590
msgid "File to be uploaded must have an extension"
msgstr ""
-#: cps/web.py:3213 cps/web.py:3499
+#: cps/web.py:3324 cps/web.py:3610
#, python-format
msgid "Failed to create path %s (Permission denied)."
msgstr ""
-#: cps/web.py:3218
+#: cps/web.py:3329
#, python-format
msgid "Failed to store file %s."
msgstr ""
-#: cps/web.py:3234
+#: cps/web.py:3345
#, python-format
msgid "File format %s added to %s"
msgstr ""
-#: cps/web.py:3252
+#: cps/web.py:3363
#, python-format
msgid "Failed to create path for cover %s (Permission denied)."
msgstr ""
-#: cps/web.py:3259
+#: cps/web.py:3370
#, python-format
msgid "Failed to store cover-file %s."
msgstr ""
-#: cps/web.py:3262
+#: cps/web.py:3373
msgid "Cover-file is not a valid image file"
msgstr ""
-#: cps/web.py:3275 cps/web.py:3279
+#: cps/web.py:3386 cps/web.py:3390
msgid "unknown"
msgstr ""
-#: cps/web.py:3301
+#: cps/web.py:3412
msgid "Cover is not a jpg file, can't save"
msgstr ""
-#: cps/web.py:3454
+#: cps/web.py:3565
msgid "Error editing book, please check logfile for details"
msgstr ""
-#: cps/web.py:3504
+#: cps/web.py:3615
#, python-format
msgid "Failed to store file %s (Permission denied)."
msgstr ""
-#: cps/web.py:3509
+#: cps/web.py:3620
#, python-format
msgid "Failed to delete file %s (Permission denied)."
msgstr ""
-#: cps/web.py:3591
+#: cps/web.py:3702
#, python-format
msgid "File %s uploaded"
msgstr ""
-#: cps/worker.py:212 cps/worker.py:366
+#: cps/web.py:3732
+msgid "Source or destination format for conversion missing"
+msgstr ""
+
+#: cps/web.py:3742
+#, python-format
+msgid "Book successfully queued for converting to %(book_format)s"
+msgstr ""
+
+#: cps/web.py:3746
+#, python-format
+msgid "There was an error converting this book: %(res)s"
+msgstr ""
+
+#: cps/worker.py:215 cps/worker.py:385
msgid "Started"
msgstr ""
-#: cps/worker.py:221
+#: cps/worker.py:226
#, python-format
msgid "E-mail: %stitle"
msgstr ""
-#: cps/worker.py:229
+#: cps/worker.py:237
#, python-format
msgid "Convertertool %(converter)s not found"
msgstr ""
-#: cps/worker.py:256
+#: cps/worker.py:272
#, python-format
msgid "Ebook-converter failed: %s"
msgstr ""
-#: cps/worker.py:266
+#: cps/worker.py:283
#, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr ""
-#: cps/worker.py:299 cps/worker.py:355 cps/worker.py:418
+#: cps/worker.py:316 cps/worker.py:375 cps/worker.py:437
msgid "Finished"
msgstr ""
-#: cps/worker.py:322 cps/worker.py:341
+#: cps/worker.py:342 cps/worker.py:361
msgid "Waiting"
msgstr ""
-#: cps/worker.py:330
+#: cps/worker.py:349
msgid "This e-mail has been sent via Calibre-Web."
msgstr ""
-#: cps/worker.py:444
+#: cps/worker.py:463
msgid "Failed"
msgstr ""
@@ -651,7 +694,7 @@ msgid "Nickname"
msgstr ""
#: cps/templates/admin.html:8
-msgid "Email"
+msgid "E-mail"
msgstr ""
#: cps/templates/admin.html:9
@@ -715,8 +758,8 @@ msgstr ""
msgid "Calibre DB dir"
msgstr ""
-#: cps/templates/admin.html:57 cps/templates/config_edit.html:106
-msgid "Log Level"
+#: cps/templates/admin.html:57
+msgid "Log level"
msgstr ""
#: cps/templates/admin.html:61
@@ -732,68 +775,72 @@ msgid "Uploading"
msgstr ""
#: cps/templates/admin.html:75
+msgid "Anonymous browsing"
+msgstr ""
+
+#: cps/templates/admin.html:79
msgid "Public registration"
msgstr ""
-#: cps/templates/admin.html:79 cps/templates/remote_login.html:4
-msgid "Remote Login"
-msgstr ""
-
-#: cps/templates/admin.html:89
-msgid "Administration"
-msgstr ""
-
-#: cps/templates/admin.html:90
-msgid "Current commit timestamp"
-msgstr ""
-
-#: cps/templates/admin.html:91
-msgid "Newest commit timestamp"
+#: cps/templates/admin.html:83 cps/templates/remote_login.html:4
+msgid "Remote login"
msgstr ""
#: cps/templates/admin.html:93
-msgid "Reconnect to Calibre DB"
+msgid "Administration"
msgstr ""
#: cps/templates/admin.html:94
-msgid "Restart Calibre-Web"
+msgid "Current commit timestamp"
msgstr ""
#: cps/templates/admin.html:95
-msgid "Stop Calibre-Web"
-msgstr ""
-
-#: cps/templates/admin.html:96
-msgid "Check for update"
+msgid "Newest commit timestamp"
msgstr ""
#: cps/templates/admin.html:97
+msgid "Reconnect to Calibre DB"
+msgstr ""
+
+#: cps/templates/admin.html:98
+msgid "Restart Calibre-Web"
+msgstr ""
+
+#: cps/templates/admin.html:99
+msgid "Stop Calibre-Web"
+msgstr ""
+
+#: cps/templates/admin.html:100
+msgid "Check for update"
+msgstr ""
+
+#: cps/templates/admin.html:101
msgid "Perform Update"
msgstr ""
-#: cps/templates/admin.html:106
+#: cps/templates/admin.html:110
msgid "Do you really want to restart Calibre-Web?"
msgstr ""
-#: cps/templates/admin.html:111 cps/templates/admin.html:125
-#: cps/templates/admin.html:146 cps/templates/shelf.html:59
+#: cps/templates/admin.html:115 cps/templates/admin.html:129
+#: cps/templates/admin.html:150 cps/templates/shelf.html:59
msgid "Ok"
msgstr ""
-#: cps/templates/admin.html:112 cps/templates/admin.html:126
-#: cps/templates/book_edit.html:148 cps/templates/book_edit.html:170
-#: cps/templates/config_edit.html:206 cps/templates/config_view_edit.html:164
+#: cps/templates/admin.html:116 cps/templates/admin.html:130
+#: cps/templates/book_edit.html:176 cps/templates/book_edit.html:198
+#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:164
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
#: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19
#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:153
msgid "Back"
msgstr ""
-#: cps/templates/admin.html:124
+#: cps/templates/admin.html:128
msgid "Do you really want to stop Calibre-Web?"
msgstr ""
-#: cps/templates/admin.html:137
+#: cps/templates/admin.html:141
msgid "Updating, please do not reload page"
msgstr ""
@@ -817,135 +864,151 @@ msgstr ""
msgid "Delete formats:"
msgstr ""
-#: cps/templates/book_edit.html:22 cps/templates/book_edit.html:169
+#: cps/templates/book_edit.html:22 cps/templates/book_edit.html:197
#: cps/templates/email_edit.html:73 cps/templates/email_edit.html:74
msgid "Delete"
msgstr ""
-#: cps/templates/book_edit.html:31 cps/templates/search_form.html:6
+#: cps/templates/book_edit.html:30
+msgid "Convert book format:"
+msgstr ""
+
+#: cps/templates/book_edit.html:34
+msgid "Convert from:"
+msgstr ""
+
+#: cps/templates/book_edit.html:41
+msgid "Convert to:"
+msgstr ""
+
+#: cps/templates/book_edit.html:50
+msgid "Convert book"
+msgstr ""
+
+#: cps/templates/book_edit.html:59 cps/templates/search_form.html:6
msgid "Book Title"
msgstr ""
-#: cps/templates/book_edit.html:35 cps/templates/book_edit.html:229
-#: cps/templates/book_edit.html:247 cps/templates/search_form.html:10
+#: cps/templates/book_edit.html:63 cps/templates/book_edit.html:257
+#: cps/templates/book_edit.html:275 cps/templates/search_form.html:10
msgid "Author"
msgstr ""
-#: cps/templates/book_edit.html:39 cps/templates/book_edit.html:234
-#: cps/templates/book_edit.html:249 cps/templates/search_form.html:106
+#: cps/templates/book_edit.html:67 cps/templates/book_edit.html:262
+#: cps/templates/book_edit.html:277 cps/templates/search_form.html:106
msgid "Description"
msgstr ""
-#: cps/templates/book_edit.html:43 cps/templates/search_form.html:33
+#: cps/templates/book_edit.html:71 cps/templates/search_form.html:33
msgid "Tags"
msgstr ""
-#: cps/templates/book_edit.html:48 cps/templates/layout.html:157
+#: cps/templates/book_edit.html:76 cps/templates/layout.html:157
#: cps/templates/search_form.html:53
msgid "Series"
msgstr ""
-#: cps/templates/book_edit.html:52
+#: cps/templates/book_edit.html:80
msgid "Series id"
msgstr ""
-#: cps/templates/book_edit.html:56
+#: cps/templates/book_edit.html:84
msgid "Rating"
msgstr ""
-#: cps/templates/book_edit.html:60
+#: cps/templates/book_edit.html:88
msgid "Cover URL (jpg, cover is downloaded and stored in database, field is afterwards empty again)"
msgstr ""
-#: cps/templates/book_edit.html:64
+#: cps/templates/book_edit.html:92
msgid "Upload Cover from local drive"
msgstr ""
-#: cps/templates/book_edit.html:69 cps/templates/detail.html:131
+#: cps/templates/book_edit.html:97 cps/templates/detail.html:131
msgid "Publishing date"
msgstr ""
-#: cps/templates/book_edit.html:76 cps/templates/user_edit.html:33
+#: cps/templates/book_edit.html:104 cps/templates/user_edit.html:33
msgid "Language"
msgstr ""
-#: cps/templates/book_edit.html:87 cps/templates/search_form.html:117
+#: cps/templates/book_edit.html:115 cps/templates/search_form.html:117
msgid "Yes"
msgstr ""
-#: cps/templates/book_edit.html:88 cps/templates/search_form.html:118
+#: cps/templates/book_edit.html:116 cps/templates/search_form.html:118
msgid "No"
msgstr ""
-#: cps/templates/book_edit.html:134
+#: cps/templates/book_edit.html:162
msgid "Upload format"
msgstr ""
-#: cps/templates/book_edit.html:143
+#: cps/templates/book_edit.html:171
msgid "view book after edit"
msgstr ""
-#: cps/templates/book_edit.html:146 cps/templates/book_edit.html:182
+#: cps/templates/book_edit.html:174 cps/templates/book_edit.html:210
msgid "Get metadata"
msgstr ""
-#: cps/templates/book_edit.html:147 cps/templates/config_edit.html:204
+#: cps/templates/book_edit.html:175 cps/templates/config_edit.html:210
#: cps/templates/config_view_edit.html:163 cps/templates/login.html:20
#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17
#: cps/templates/user_edit.html:151
msgid "Submit"
msgstr ""
-#: cps/templates/book_edit.html:161
+#: cps/templates/book_edit.html:189
msgid "Are you really sure?"
msgstr ""
-#: cps/templates/book_edit.html:164
+#: cps/templates/book_edit.html:192
msgid "Book will be deleted from Calibre database"
msgstr ""
-#: cps/templates/book_edit.html:165
+#: cps/templates/book_edit.html:193
msgid "and from hard disk"
msgstr ""
-#: cps/templates/book_edit.html:185
+#: cps/templates/book_edit.html:213
msgid "Keyword"
msgstr ""
-#: cps/templates/book_edit.html:186
+#: cps/templates/book_edit.html:214
msgid " Search keyword "
msgstr ""
-#: cps/templates/book_edit.html:188 cps/templates/layout.html:46
+#: cps/templates/book_edit.html:216 cps/templates/layout.html:46
msgid "Go!"
msgstr ""
-#: cps/templates/book_edit.html:192
+#: cps/templates/book_edit.html:220
msgid "Click the cover to load metadata to the form"
msgstr ""
-#: cps/templates/book_edit.html:204 cps/templates/book_edit.html:244
+#: cps/templates/book_edit.html:232 cps/templates/book_edit.html:272
msgid "Loading..."
msgstr ""
-#: cps/templates/book_edit.html:209 cps/templates/layout.html:221
+#: cps/templates/book_edit.html:237 cps/templates/layout.html:221
msgid "Close"
msgstr ""
-#: cps/templates/book_edit.html:231 cps/templates/book_edit.html:248
+#: cps/templates/book_edit.html:259 cps/templates/book_edit.html:276
#: cps/templates/detail.html:126 cps/templates/search_form.html:14
msgid "Publisher"
msgstr ""
-#: cps/templates/book_edit.html:236 cps/templates/book_edit.html:250
+#: cps/templates/book_edit.html:264 cps/templates/book_edit.html:278
msgid "Source"
msgstr ""
-#: cps/templates/book_edit.html:245
+#: cps/templates/book_edit.html:273
msgid "Search error!"
msgstr ""
-#: cps/templates/book_edit.html:246
+#: cps/templates/book_edit.html:274
msgid "No Result(s) found! Please try aonther keyword."
msgstr ""
@@ -1005,6 +1068,10 @@ msgstr ""
msgid "Logfile Configuration"
msgstr ""
+#: cps/templates/config_edit.html:106
+msgid "Log Level"
+msgstr ""
+
#: cps/templates/config_edit.html:115
msgid "Location and name of logfile (calibre-web.log for no entry)"
msgstr ""
@@ -1046,7 +1113,7 @@ msgid "Goodreads API Secret"
msgstr ""
#: cps/templates/config_edit.html:173
-msgid "E-Book converter"
+msgid "External binaries"
msgstr ""
#: cps/templates/config_edit.html:181
@@ -1069,7 +1136,11 @@ msgstr ""
msgid "Path to convertertool"
msgstr ""
-#: cps/templates/config_edit.html:209 cps/templates/layout.html:82
+#: cps/templates/config_edit.html:199
+msgid "Location of Unrar binary"
+msgstr ""
+
+#: cps/templates/config_edit.html:215 cps/templates/layout.html:82
#: cps/templates/login.html:4
msgid "Login"
msgstr ""
@@ -1459,7 +1530,8 @@ msgstr ""
msgid "Calibre-Web ebook catalog"
msgstr ""
-#: cps/templates/read.html:69
+#: cps/templates/read.html:69 cps/templates/readcbr.html:79
+#: cps/templates/readcbr.html:103
msgid "Settings"
msgstr ""
@@ -1467,6 +1539,94 @@ msgstr ""
msgid "Reflow text when sidebars are open."
msgstr ""
+#: cps/templates/readcbr.html:84
+msgid "Keyboard Shortcuts"
+msgstr ""
+
+#: cps/templates/readcbr.html:87
+msgid "Previous Page"
+msgstr ""
+
+#: cps/templates/readcbr.html:88
+msgid "Next Page"
+msgstr ""
+
+#: cps/templates/readcbr.html:89
+msgid "Scale to Best"
+msgstr ""
+
+#: cps/templates/readcbr.html:90
+msgid "Scale to Width"
+msgstr ""
+
+#: cps/templates/readcbr.html:91
+msgid "Scale to Height"
+msgstr ""
+
+#: cps/templates/readcbr.html:92
+msgid "Scale to Native"
+msgstr ""
+
+#: cps/templates/readcbr.html:93
+msgid "Rotate Right"
+msgstr ""
+
+#: cps/templates/readcbr.html:94
+msgid "Rotate Left"
+msgstr ""
+
+#: cps/templates/readcbr.html:95
+msgid "Flip Image"
+msgstr ""
+
+#: cps/templates/readcbr.html:108 cps/templates/user_edit.html:41
+msgid "Theme"
+msgstr ""
+
+#: cps/templates/readcbr.html:111
+msgid "Light"
+msgstr ""
+
+#: cps/templates/readcbr.html:112
+msgid "Dark"
+msgstr ""
+
+#: cps/templates/readcbr.html:117
+msgid "Scale"
+msgstr ""
+
+#: cps/templates/readcbr.html:120
+msgid "Best"
+msgstr ""
+
+#: cps/templates/readcbr.html:121
+msgid "Width"
+msgstr ""
+
+#: cps/templates/readcbr.html:122
+msgid "Height"
+msgstr ""
+
+#: cps/templates/readcbr.html:123
+msgid "Native"
+msgstr ""
+
+#: cps/templates/readcbr.html:128
+msgid "Rotate"
+msgstr ""
+
+#: cps/templates/readcbr.html:139
+msgid "Flip"
+msgstr ""
+
+#: cps/templates/readcbr.html:142
+msgid "Horizontal"
+msgstr ""
+
+#: cps/templates/readcbr.html:143
+msgid "Vertical"
+msgstr ""
+
#: cps/templates/readpdf.html:29
msgid "PDF.js viewer"
msgstr ""
@@ -1488,7 +1648,7 @@ msgid "Choose a password"
msgstr ""
#: cps/templates/register.html:15 cps/templates/user_edit.html:13
-msgid "Email address"
+msgid "E-mail address"
msgstr ""
#: cps/templates/register.html:16
@@ -1651,10 +1811,6 @@ msgstr ""
msgid "Kindle E-Mail"
msgstr ""
-#: cps/templates/user_edit.html:41
-msgid "Theme"
-msgstr ""
-
#: cps/templates/user_edit.html:43
msgid "Standard Theme"
msgstr ""