\n"
"Language: pl\n"
@@ -19,734 +19,743 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.6.0\n"
-#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134
-#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27
+#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150
+#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45
msgid "not installed"
msgstr "nie zainstalowane"
-#: cps/converter.py:22 cps/converter.py:38
+#: cps/converter.py:40 cps/converter.py:56
msgid "Excecution permissions missing"
msgstr ""
-#: cps/converter.py:48
+#: cps/converter.py:66
msgid "not configured"
msgstr ""
-#: cps/helper.py:59
+#: cps/helper.py:77
#, python-format
msgid "%(format)s format not found for book id: %(book)d"
msgstr ""
-#: cps/helper.py:71
+#: cps/helper.py:89
#, python-format
msgid "%(format)s not found on Google Drive: %(fn)s"
msgstr ""
-#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49
+#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49
msgid "Send to Kindle"
msgstr "Wyślij do Kindle"
-#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188
+#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206
msgid "This e-mail has been sent via Calibre-Web."
msgstr ""
-#: cps/helper.py:90
+#: cps/helper.py:108
#, python-format
msgid "%(format)s not found: %(fn)s"
msgstr ""
-#: cps/helper.py:95
+#: cps/helper.py:113
msgid "Calibre-Web test e-mail"
msgstr ""
-#: cps/helper.py:96
+#: cps/helper.py:114
msgid "Test e-mail"
msgstr ""
-#: cps/helper.py:112
+#: cps/helper.py:130
msgid "Get Started with Calibre-Web"
msgstr ""
-#: cps/helper.py:113
+#: cps/helper.py:131
#, python-format
msgid "Registration e-mail for user: %(name)s"
msgstr ""
-#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132
-#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144
+#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150
+#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162
#, python-format
msgid "Send %(format)s to Kindle"
msgstr ""
-#: cps/helper.py:148 cps/helper.py:152
+#: cps/helper.py:166 cps/helper.py:170
#, python-format
msgid "Convert %(orig)s to %(format)s and send to Kindle"
msgstr ""
-#: cps/helper.py:187
+#: cps/helper.py:205
#, python-format
msgid "E-mail: %(book)s"
msgstr ""
-#: cps/helper.py:190
+#: cps/helper.py:208
msgid "The requested file could not be read. Maybe wrong permissions?"
msgstr ""
-#: cps/helper.py:295
+#: cps/helper.py:313
#, python-format
msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr ""
-#: cps/helper.py:305
+#: cps/helper.py:323
#, python-format
msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr ""
-#: cps/helper.py:319
+#: cps/helper.py:337
#, python-format
msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr ""
-#: cps/helper.py:344 cps/helper.py:353
+#: cps/helper.py:362 cps/helper.py:371
#, python-format
msgid "File %(file)s not found on Google Drive"
msgstr ""
-#: cps/helper.py:384
+#: cps/helper.py:402
#, python-format
msgid "Book path %(path)s not found on Google Drive"
msgstr ""
-#: cps/helper.py:650
+#: cps/helper.py:510
msgid "Error excecuting UnRar"
msgstr ""
-#: cps/helper.py:652
+#: cps/helper.py:512
msgid "Unrar binary file not found"
msgstr ""
-#: cps/helper.py:703
+#: cps/helper.py:543
msgid "Waiting"
msgstr ""
-#: cps/helper.py:705
+#: cps/helper.py:545
msgid "Failed"
msgstr ""
-#: cps/helper.py:707
+#: cps/helper.py:547
msgid "Started"
msgstr ""
-#: cps/helper.py:709
+#: cps/helper.py:549
msgid "Finished"
msgstr ""
-#: cps/helper.py:711
+#: cps/helper.py:551
msgid "Unknown Status"
msgstr ""
-#: cps/helper.py:716
+#: cps/helper.py:556
msgid "E-mail: "
msgstr ""
-#: cps/helper.py:718 cps/helper.py:722
+#: cps/helper.py:558 cps/helper.py:562
msgid "Convert: "
msgstr ""
-#: cps/helper.py:720
+#: cps/helper.py:560
msgid "Upload: "
msgstr ""
-#: cps/helper.py:724
+#: cps/helper.py:564
msgid "Unknown Task: "
msgstr ""
-#: cps/web.py:1156 cps/web.py:2866
-msgid "Unknown"
-msgstr ""
-
-#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281
-msgid "HTTP Error"
-msgstr ""
-
-#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282
-msgid "Connection error"
-msgstr ""
-
-#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283
-msgid "Timeout while establishing connection"
-msgstr ""
-
-#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284
-msgid "General error"
-msgstr ""
-
-#: cps/web.py:1177
+#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423
msgid "Unexpected data while reading update information"
msgstr ""
-#: cps/web.py:1184
+#: cps/updater.py:258 cps/updater.py:416
msgid "No update available. You already have the latest version installed"
msgstr ""
-#: cps/web.py:1209
+#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1184
+msgid "HTTP Error"
+msgstr ""
+
+#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1185
+msgid "Connection error"
+msgstr ""
+
+#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1186
+msgid "Timeout while establishing connection"
+msgstr ""
+
+#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1187
+msgid "General error"
+msgstr ""
+
+#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468
msgid "A new update is available. Click on the button below to update to the latest version."
msgstr ""
-#: cps/web.py:1259
+#: cps/updater.py:335
msgid "Could not fetch update information"
msgstr ""
-#: cps/web.py:1274
+#: cps/updater.py:403
+msgid "No release information available"
+msgstr ""
+
+#: cps/updater.py:449 cps/updater.py:458
+#, python-format
+msgid "A new update is available. Click on the button below to update to version: %(version)s"
+msgstr ""
+
+#: cps/updater.py:491 cps/web.py:2766
+msgid "Unknown"
+msgstr ""
+
+#: cps/web.py:1177
msgid "Requesting update package"
msgstr "Żądanie o pakiet aktualizacji"
-#: cps/web.py:1275
+#: cps/web.py:1178
msgid "Downloading update package"
msgstr "Pobieranie pakietu aktualizacji"
-#: cps/web.py:1276
+#: cps/web.py:1179
msgid "Unzipping update package"
msgstr "Rozpakowywanie pakietu aktualizacji"
-#: cps/web.py:1277
+#: cps/web.py:1180
msgid "Replacing files"
msgstr ""
-#: cps/web.py:1278
+#: cps/web.py:1181
msgid "Database connections are closed"
msgstr "Połączenia z bazą danych zostały zakończone"
-#: cps/web.py:1279
+#: cps/web.py:1182
msgid "Stopping server"
msgstr ""
-#: cps/web.py:1280
+#: cps/web.py:1183
msgid "Update finished, please press okay and reload page"
msgstr "Aktualizacja zakończona, proszę nacisnąć OK i odświeżyć stronę"
-#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284
+#: cps/web.py:1184 cps/web.py:1185 cps/web.py:1186 cps/web.py:1187
msgid "Update failed:"
msgstr ""
-#: cps/web.py:1307
+#: cps/web.py:1210
msgid "Recently Added Books"
msgstr ""
-#: cps/web.py:1317
+#: cps/web.py:1220
msgid "Newest Books"
msgstr ""
-#: cps/web.py:1329
+#: cps/web.py:1232
msgid "Oldest Books"
msgstr ""
-#: cps/web.py:1341
+#: cps/web.py:1244
msgid "Books (A-Z)"
msgstr ""
-#: cps/web.py:1352
+#: cps/web.py:1255
msgid "Books (Z-A)"
msgstr ""
-#: cps/web.py:1381
+#: cps/web.py:1284
msgid "Hot Books (most downloaded)"
msgstr "Najpopularniejsze książki (najczęściej pobierane)"
-#: cps/web.py:1394
+#: cps/web.py:1297
msgid "Best rated books"
msgstr "Najlepiej oceniane książki"
-#: cps/templates/index.xml:39 cps/web.py:1407
+#: cps/templates/index.xml:39 cps/web.py:1310
msgid "Random Books"
msgstr "Losowe książki"
-#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236
+#: cps/web.py:1337 cps/web.py:1592 cps/web.py:2135
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/web.py:1462
+#: cps/web.py:1365
msgid "Publisher list"
msgstr ""
-#: cps/web.py:1477
+#: cps/web.py:1380
#, python-format
msgid "Publisher: %(name)s"
msgstr ""
-#: cps/templates/index.xml:83 cps/web.py:1509
+#: cps/templates/index.xml:83 cps/web.py:1412
msgid "Series list"
msgstr "Lista serii"
-#: cps/web.py:1523
+#: cps/web.py:1426
#, python-format
msgid "Series: %(serie)s"
msgstr "Seria: %(serie)s"
-#: cps/web.py:1549
+#: cps/web.py:1452
msgid "Available languages"
msgstr "Dostępne języki"
-#: cps/web.py:1569
+#: cps/web.py:1472
#, python-format
msgid "Language: %(name)s"
msgstr "Język: %(name)s"
-#: cps/templates/index.xml:76 cps/web.py:1580
+#: cps/templates/index.xml:76 cps/web.py:1483
msgid "Category list"
msgstr "Lista kategorii"
-#: cps/web.py:1594
+#: cps/web.py:1497
#, python-format
msgid "Category: %(name)s"
msgstr "Kategoria: %(name)s"
-#: cps/templates/layout.html:71 cps/web.py:1725
+#: cps/templates/layout.html:71 cps/web.py:1628
msgid "Tasks"
msgstr ""
-#: cps/web.py:1759
+#: cps/web.py:1662
msgid "Statistics"
msgstr "Statystyki"
-#: cps/web.py:1867
+#: cps/web.py:1730
+msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
+msgstr ""
+
+#: cps/web.py:1775
msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
msgstr ""
-#: cps/web.py:1943
+#: cps/web.py:1851
msgid "Server restarted, please reload page"
msgstr "Serwer uruchomiony ponownie, proszę odświeżyć stronę"
-#: cps/web.py:1946
+#: cps/web.py:1854
msgid "Performing shutdown of server, please close window"
msgstr "Wykonano wyłączenie serwera, proszę zamknąć okno"
-#: cps/web.py:1965
-msgid "Update done"
-msgstr "Aktualizacja zakończona"
-
-#: cps/web.py:2035
+#: cps/web.py:1934
msgid "Published after "
msgstr ""
-#: cps/web.py:2042
+#: cps/web.py:1941
msgid "Published before "
msgstr ""
-#: cps/web.py:2056
+#: cps/web.py:1955
#, python-format
msgid "Rating <= %(rating)s"
msgstr ""
-#: cps/web.py:2058
+#: cps/web.py:1957
#, python-format
msgid "Rating >= %(rating)s"
msgstr ""
-#: cps/web.py:2119 cps/web.py:2128
+#: cps/web.py:2018 cps/web.py:2027
msgid "search"
msgstr "szukaj"
#: cps/templates/index.xml:47 cps/templates/index.xml:51
-#: cps/templates/layout.html:146 cps/web.py:2195
+#: cps/templates/layout.html:146 cps/web.py:2094
msgid "Read Books"
msgstr "Przeczytane książki"
#: cps/templates/index.xml:55 cps/templates/index.xml:59
-#: cps/templates/layout.html:148 cps/web.py:2198
+#: cps/templates/layout.html:148 cps/web.py:2097
msgid "Unread Books"
msgstr "Nieprzeczytane książki"
-#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262
+#: cps/web.py:2145 cps/web.py:2147 cps/web.py:2149 cps/web.py:2161
msgid "Read a Book"
msgstr "Czytaj książkę"
-#: cps/web.py:2321 cps/web.py:3230
+#: cps/web.py:2220 cps/web.py:3138
msgid "Please fill out all fields!"
msgstr "Proszę wypełnić wszystkie pola!"
-#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352
-#: cps/web.py:2354
+#: cps/web.py:2221 cps/web.py:2243 cps/web.py:2247 cps/web.py:2252
+#: cps/web.py:2254
msgid "register"
msgstr "rejestracja"
-#: cps/web.py:2342 cps/web.py:3444
+#: cps/web.py:2242 cps/web.py:3357
msgid "An unknown error occurred. Please try again later."
msgstr ""
-#: cps/web.py:2345
+#: cps/web.py:2245
msgid "Your e-mail is not allowed to register"
msgstr ""
-#: cps/web.py:2348
+#: cps/web.py:2248
msgid "Confirmation e-mail was send to your e-mail account."
msgstr ""
-#: cps/web.py:2351
+#: cps/web.py:2251
msgid "This username or e-mail address is already in use."
msgstr ""
-#: cps/web.py:2368 cps/web.py:2464
+#: cps/web.py:2268 cps/web.py:2364
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr "Zalogowałeś się jako: '%(nickname)s'"
-#: cps/web.py:2373
+#: cps/web.py:2273
msgid "Wrong Username or Password"
msgstr "Błędna nazwa użytkownika lub hasło"
-#: cps/web.py:2379 cps/web.py:2400
+#: cps/web.py:2279 cps/web.py:2300
msgid "login"
msgstr "logowanie"
-#: cps/web.py:2412 cps/web.py:2443
+#: cps/web.py:2312 cps/web.py:2343
msgid "Token not found"
msgstr ""
-#: cps/web.py:2420 cps/web.py:2451
+#: cps/web.py:2320 cps/web.py:2351
msgid "Token has expired"
msgstr ""
-#: cps/web.py:2428
+#: cps/web.py:2328
msgid "Success! Please return to your device"
msgstr ""
-#: cps/web.py:2478
+#: cps/web.py:2378
msgid "Please configure the SMTP mail settings first..."
msgstr "Proszę najpierw skonfigurować ustawienia SMTP poczty e-mail..."
-#: cps/web.py:2483
+#: cps/web.py:2383
#, python-format
msgid "Book successfully queued for sending to %(kindlemail)s"
msgstr ""
-#: cps/web.py:2487
+#: cps/web.py:2387
#, 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:2489 cps/web.py:3283
+#: cps/web.py:2389 cps/web.py:3191
msgid "Please configure your kindle e-mail address first..."
msgstr ""
-#: cps/web.py:2500 cps/web.py:2552
+#: cps/web.py:2400 cps/web.py:2452
msgid "Invalid shelf specified"
msgstr ""
-#: cps/web.py:2507
+#: cps/web.py:2407
#, python-format
msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s"
msgstr ""
-#: cps/web.py:2515
+#: cps/web.py:2415
msgid "You are not allowed to edit public shelves"
msgstr ""
-#: cps/web.py:2524
+#: cps/web.py:2424
#, python-format
msgid "Book is already part of the shelf: %(shelfname)s"
msgstr ""
-#: cps/web.py:2538
+#: cps/web.py:2438
#, 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:2557
+#: cps/web.py:2457
#, python-format
msgid "You are not allowed to add a book to the the shelf: %(name)s"
msgstr ""
-#: cps/web.py:2562
+#: cps/web.py:2462
msgid "User is not allowed to edit public shelves"
msgstr ""
-#: cps/web.py:2580
+#: cps/web.py:2480
#, python-format
msgid "Books are already part of the shelf: %(name)s"
msgstr ""
-#: cps/web.py:2594
+#: cps/web.py:2494
#, python-format
msgid "Books have been added to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2596
+#: cps/web.py:2496
#, python-format
msgid "Could not add books to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2633
+#: cps/web.py:2533
#, 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:2639
+#: cps/web.py:2539
#, python-format
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2660 cps/web.py:2684
+#: cps/web.py:2560 cps/web.py:2584
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr "Półka o nazwie '%(title)s' już istnieje."
-#: cps/web.py:2665
+#: cps/web.py:2565
#, python-format
msgid "Shelf %(title)s created"
msgstr "Półka %(title)s została utworzona"
-#: cps/web.py:2667 cps/web.py:2695
+#: cps/web.py:2567 cps/web.py:2595
msgid "There was an error"
msgstr "Wystąpił błąd"
-#: cps/web.py:2668 cps/web.py:2670
+#: cps/web.py:2568 cps/web.py:2570
msgid "create a shelf"
msgstr "utwórz półkę"
-#: cps/web.py:2693
+#: cps/web.py:2593
#, python-format
msgid "Shelf %(title)s changed"
msgstr "Półka %(title)s została zmieniona"
-#: cps/web.py:2696 cps/web.py:2698
+#: cps/web.py:2596 cps/web.py:2598
msgid "Edit a shelf"
msgstr "Edytuj półkę"
-#: cps/web.py:2719
+#: cps/web.py:2619
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr "pomyślnie usunięto półkę %(name)s"
-#: cps/web.py:2746
+#: cps/web.py:2646
#, python-format
msgid "Shelf: '%(name)s'"
msgstr "Półka: '%(name)s'"
-#: cps/web.py:2749
+#: cps/web.py:2649
msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr ""
-#: cps/web.py:2780
+#: cps/web.py:2680
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr "Zmieniono kolejność półki: '%(name)s'"
-#: cps/web.py:2809 cps/web.py:3236
+#: cps/web.py:2709 cps/web.py:3144
msgid "E-mail is not from valid domain"
msgstr ""
-#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856
+#: cps/web.py:2711 cps/web.py:2753 cps/web.py:2756
#, python-format
msgid "%(name)s's profile"
msgstr "Profil użytkownika %(name)s"
-#: cps/web.py:2851
+#: cps/web.py:2751
msgid "Found an existing account for this e-mail address."
msgstr ""
-#: cps/web.py:2854
+#: cps/web.py:2754
msgid "Profile updated"
msgstr "Zaktualizowano profil"
-#: cps/web.py:2882
+#: cps/web.py:2785
msgid "Admin page"
msgstr "Portal administracyjny"
-#: cps/web.py:2964 cps/web.py:3139
+#: cps/web.py:2867 cps/web.py:3047
msgid "Calibre-Web configuration updated"
msgstr "Konfiguracja Calibre-Web została zaktualizowana"
-#: cps/templates/admin.html:100 cps/web.py:2978
+#: cps/templates/admin.html:100 cps/web.py:2881
msgid "UI Configuration"
msgstr ""
-#: cps/web.py:2996
+#: cps/web.py:2899
msgid "Import of optional Google Drive requirements missing"
msgstr ""
-#: cps/web.py:2999
+#: cps/web.py:2902
msgid "client_secrets.json is missing or not readable"
msgstr ""
-#: cps/web.py:3004 cps/web.py:3031
+#: cps/web.py:2907 cps/web.py:2936
msgid "client_secrets.json is not configured for web application"
msgstr ""
-#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072
-#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156
-#: cps/web.py:3172
+#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977
+#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3056 cps/web.py:3064
+#: cps/web.py:3080
msgid "Basic Configuration"
msgstr "Podstawowa konfiguracja"
-#: cps/web.py:3057
+#: cps/web.py:2962
msgid "Keyfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:3069
+#: cps/web.py:2974
msgid "Certfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:3112
+#: cps/web.py:3019
msgid "Logfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:3152
+#: cps/web.py:3060
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:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254
+#: cps/templates/admin.html:33 cps/web.py:3140 cps/web.py:3146 cps/web.py:3162
msgid "Add new user"
msgstr "Dodaj nowego użytkownika"
-#: cps/web.py:3244
+#: cps/web.py:3152
#, python-format
msgid "User '%(user)s' created"
msgstr "Użytkownik '%(user)s' został utworzony"
-#: cps/web.py:3248
+#: cps/web.py:3156
msgid "Found an existing account for this e-mail address or nickname."
msgstr ""
-#: cps/web.py:3278
+#: cps/web.py:3186
#, python-format
msgid "Test e-mail successfully send to %(kindlemail)s"
msgstr ""
-#: cps/web.py:3281
+#: cps/web.py:3189
#, python-format
msgid "There was an error sending the Test e-mail: %(res)s"
msgstr ""
-#: cps/web.py:3285
+#: cps/web.py:3193
msgid "E-mail server settings updated"
msgstr ""
-#: cps/web.py:3286
+#: cps/web.py:3194
msgid "Edit e-mail server settings"
msgstr ""
-#: cps/web.py:3311
+#: cps/web.py:3219
#, python-format
msgid "User '%(nick)s' deleted"
msgstr "Użytkownik '%(nick)s' został usunięty"
-#: cps/web.py:3419
+#: cps/web.py:3332
#, python-format
msgid "User '%(nick)s' updated"
msgstr "Użytkownik '%(nick)s' został zaktualizowany"
-#: cps/web.py:3422
+#: cps/web.py:3335
msgid "An unknown error occured."
msgstr "Wystąpił nieznany błąd."
-#: cps/web.py:3424
+#: cps/web.py:3337
#, python-format
msgid "Edit User %(nick)s"
msgstr "Edytuj użytkownika %(nick)s"
-#: cps/web.py:3441
+#: cps/web.py:3354
#, python-format
msgid "Password for user %(user)s reset"
msgstr ""
-#: cps/web.py:3455 cps/web.py:3661
+#: cps/web.py:3368 cps/web.py:3574
msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr ""
-#: cps/web.py:3483 cps/web.py:3955
+#: cps/web.py:3396 cps/web.py:3868
msgid "edit metadata"
msgstr "edytuj metadane"
-#: cps/web.py:3576 cps/web.py:3823
+#: cps/web.py:3489 cps/web.py:3736
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Rozszerzenie pliku '%(ext)s' nie jest dozwolone do przesłania na ten serwer"
-#: cps/web.py:3580 cps/web.py:3827
+#: cps/web.py:3493 cps/web.py:3740
msgid "File to be uploaded must have an extension"
msgstr "Plik do przesłania musi mieć rozszerzenie"
-#: cps/web.py:3592 cps/web.py:3847
+#: cps/web.py:3505 cps/web.py:3760
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Nie udało się utworzyć łącza %(path)s (Odmowa dostępu)."
-#: cps/web.py:3597
+#: cps/web.py:3510
#, python-format
msgid "Failed to store file %(file)s."
msgstr ""
-#: cps/web.py:3614
+#: cps/web.py:3527
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr ""
-#: cps/web.py:3632
+#: cps/web.py:3545
#, python-format
msgid "Failed to create path for cover %(path)s (Permission denied)."
msgstr ""
-#: cps/web.py:3640
+#: cps/web.py:3553
#, python-format
msgid "Failed to store cover-file %(cover)s."
msgstr ""
-#: cps/web.py:3643
+#: cps/web.py:3556
msgid "Cover-file is not a valid image file"
msgstr ""
-#: cps/web.py:3673 cps/web.py:3682
+#: cps/web.py:3586 cps/web.py:3595
msgid "unknown"
msgstr ""
-#: cps/web.py:3714
+#: cps/web.py:3627
msgid "Cover is not a jpg file, can't save"
msgstr ""
-#: cps/web.py:3762
+#: cps/web.py:3675
#, python-format
msgid "%(langname)s is not a valid language"
msgstr ""
-#: cps/web.py:3793
+#: cps/web.py:3706
msgid "Metadata successfully updated"
msgstr ""
-#: cps/web.py:3802
+#: cps/web.py:3715
msgid "Error editing book, please check logfile for details"
msgstr ""
-#: cps/web.py:3852
+#: cps/web.py:3765
#, python-format
msgid "Failed to store file %(file)s (Permission denied)."
msgstr "Nie można przechowywać pliku %(file)s (Odmowa dostępu)."
-#: cps/web.py:3857
+#: cps/web.py:3770
#, python-format
msgid "Failed to delete file %(file)s (Permission denied)."
msgstr "Nie udało się usunąć pliku %(file)s (Odmowa dostępu)."
-#: cps/web.py:3975
+#: cps/web.py:3888
msgid "Source or destination format for conversion missing"
msgstr ""
-#: cps/web.py:3985
+#: cps/web.py:3898
#, python-format
msgid "Book successfully queued for converting to %(book_format)s"
msgstr ""
-#: cps/web.py:3989
+#: cps/web.py:3902
#, python-format
msgid "There was an error converting this book: %(res)s"
msgstr ""
-#: cps/worker.py:289
+#: cps/worker.py:305
#, python-format
msgid "Ebook-converter failed: %(error)s"
msgstr ""
-#: cps/worker.py:300
+#: cps/worker.py:316
#, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr ""
@@ -903,10 +912,10 @@ msgstr "OK"
#: cps/templates/admin.html:151 cps/templates/admin.html:165
#: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200
-#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175
+#: cps/templates/config_edit.html:226 cps/templates/config_view_edit.html:175
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
#: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19
-#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147
+#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:149
msgid "Back"
msgstr "Wróć"
@@ -1036,10 +1045,10 @@ msgstr "wyświetl książkę po edycji"
msgid "Get metadata"
msgstr "Uzyskaj metadane"
-#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210
+#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:224
#: cps/templates/config_view_edit.html:174 cps/templates/login.html:20
-#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17
-#: cps/templates/user_edit.html:145
+#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17
+#: cps/templates/user_edit.html:147
msgid "Submit"
msgstr "Wyślij"
@@ -1112,115 +1121,139 @@ msgid "Authenticate Google Drive"
msgstr ""
#: cps/templates/config_edit.html:40
+msgid "Please hit submit to continue with setup"
+msgstr ""
+
+#: cps/templates/config_edit.html:43
msgid "Please finish Google Drive setup after login"
msgstr ""
-#: cps/templates/config_edit.html:44
+#: cps/templates/config_edit.html:48
msgid "Google Drive Calibre folder"
msgstr ""
-#: cps/templates/config_edit.html:52
+#: cps/templates/config_edit.html:56
#, fuzzy
msgid "Metadata Watch Channel ID"
msgstr "Metadane Watch Channel ID"
-#: cps/templates/config_edit.html:55
+#: cps/templates/config_edit.html:59
msgid "Revoke"
msgstr ""
-#: cps/templates/config_edit.html:73
+#: cps/templates/config_edit.html:78
msgid "Server Configuration"
msgstr ""
-#: cps/templates/config_edit.html:80
+#: cps/templates/config_edit.html:85
msgid "Server Port"
msgstr "Port serwera"
-#: cps/templates/config_edit.html:84
+#: cps/templates/config_edit.html:89
msgid "SSL certfile location (leave it empty for non-SSL Servers)"
msgstr ""
-#: cps/templates/config_edit.html:88
+#: cps/templates/config_edit.html:93
msgid "SSL Keyfile location (leave it empty for non-SSL Servers)"
msgstr ""
+#: cps/templates/config_edit.html:97
+msgid "Update channel"
+msgstr ""
+
#: cps/templates/config_edit.html:99
+msgid "Stable"
+msgstr ""
+
+#: cps/templates/config_edit.html:100
+msgid "Stable (Automatic)"
+msgstr ""
+
+#: cps/templates/config_edit.html:101
+msgid "Nightly"
+msgstr ""
+
+#: cps/templates/config_edit.html:102
+msgid "Nightly (Automatic)"
+msgstr ""
+
+#: cps/templates/config_edit.html:113
msgid "Logfile Configuration"
msgstr ""
-#: cps/templates/config_edit.html:106
+#: cps/templates/config_edit.html:120
msgid "Log Level"
msgstr "Poziom logów"
-#: cps/templates/config_edit.html:115
+#: cps/templates/config_edit.html:129
msgid "Location and name of logfile (calibre-web.log for no entry)"
msgstr ""
-#: cps/templates/config_edit.html:126
+#: cps/templates/config_edit.html:140
msgid "Feature Configuration"
msgstr ""
-#: cps/templates/config_edit.html:134
+#: cps/templates/config_edit.html:148
msgid "Enable uploading"
msgstr "Włącz wysyłanie"
-#: cps/templates/config_edit.html:138
+#: cps/templates/config_edit.html:152
msgid "Enable anonymous browsing"
msgstr "Włącz anonimowe przeglądanie"
-#: cps/templates/config_edit.html:142
+#: cps/templates/config_edit.html:156
msgid "Enable public registration"
msgstr "Włącz publiczną rejestrację"
-#: cps/templates/config_edit.html:146
+#: cps/templates/config_edit.html:160
msgid "Enable remote login (\"magic link\")"
msgstr ""
-#: cps/templates/config_edit.html:151
+#: cps/templates/config_edit.html:165
msgid "Use"
msgstr ""
-#: cps/templates/config_edit.html:152
+#: cps/templates/config_edit.html:166
msgid "Obtain an API Key"
msgstr ""
-#: cps/templates/config_edit.html:156
+#: cps/templates/config_edit.html:170
msgid "Goodreads API Key"
msgstr ""
-#: cps/templates/config_edit.html:160
+#: cps/templates/config_edit.html:174
msgid "Goodreads API Secret"
msgstr ""
-#: cps/templates/config_edit.html:173
+#: cps/templates/config_edit.html:187
msgid "External binaries"
msgstr ""
-#: cps/templates/config_edit.html:181
+#: cps/templates/config_edit.html:195
msgid "No converter"
msgstr ""
-#: cps/templates/config_edit.html:183
+#: cps/templates/config_edit.html:197
msgid "Use Kindlegen"
msgstr ""
-#: cps/templates/config_edit.html:185
+#: cps/templates/config_edit.html:199
msgid "Use calibre's ebook converter"
msgstr ""
-#: cps/templates/config_edit.html:189
+#: cps/templates/config_edit.html:203
msgid "E-Book converter settings"
msgstr ""
-#: cps/templates/config_edit.html:193
+#: cps/templates/config_edit.html:207
msgid "Path to convertertool"
msgstr ""
-#: cps/templates/config_edit.html:199
+#: cps/templates/config_edit.html:213
msgid "Location of Unrar binary"
msgstr ""
-#: cps/templates/config_edit.html:215 cps/templates/layout.html:82
+#: cps/templates/config_edit.html:229 cps/templates/layout.html:82
#: cps/templates/login.html:4
msgid "Login"
msgstr "Zaloguj się"
@@ -1270,31 +1303,31 @@ msgstr ""
msgid "Default settings for new users"
msgstr "Domyślne ustawienia dla nowych użytkowników"
-#: cps/templates/config_view_edit.html:77 cps/templates/user_edit.html:102
+#: cps/templates/config_view_edit.html:77 cps/templates/user_edit.html:104
msgid "Admin user"
msgstr "Użytkownik z uprawnieniami administratora"
-#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:111
+#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:113
msgid "Allow Downloads"
msgstr "Zezwalaj na pobieranie"
-#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:115
+#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:117
msgid "Allow Uploads"
msgstr "Zezwalaj na wysyłanie"
-#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:119
+#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:121
msgid "Allow Edit"
msgstr "Zezwalaj na edycję"
-#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:123
+#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:125
msgid "Allow Delete books"
msgstr ""
-#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:128
+#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:130
msgid "Allow Changing Password"
msgstr "Zezwalaj na zmianę hasła"
-#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:132
+#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:134
msgid "Allow Editing Public Shelfs"
msgstr ""
@@ -1342,15 +1375,15 @@ msgstr "Pokaż wybór autora"
msgid "Show publisher selection"
msgstr ""
-#: cps/templates/config_view_edit.html:159 cps/templates/user_edit.html:90
+#: cps/templates/config_view_edit.html:159 cps/templates/user_edit.html:91
msgid "Show read and unread"
msgstr "Pokaż przeczytane i nieprzeczytane"
-#: cps/templates/config_view_edit.html:163 cps/templates/user_edit.html:94
+#: cps/templates/config_view_edit.html:163 cps/templates/user_edit.html:96
msgid "Show random books in detail view"
msgstr "Pokaz losowe książki w widoku szczegółowym"
-#: cps/templates/config_view_edit.html:167 cps/templates/user_edit.html:107
+#: cps/templates/config_view_edit.html:167 cps/templates/user_edit.html:109
msgid "Show mature content"
msgstr ""
@@ -1736,6 +1769,10 @@ msgstr ""
msgid "PDF.js viewer"
msgstr "PDF.js viewer"
+#: cps/templates/readpdf.html:418
+msgid "Preparing document for printing..."
+msgstr ""
+
#: cps/templates/readtxt.html:6
msgid "Basic txt Reader"
msgstr "Podstawowy czytnik txt"
@@ -1920,83 +1957,1265 @@ msgstr "Pokaż książki w języku"
msgid "Show all"
msgstr "Pokaż wszystko"
-#: cps/templates/user_edit.html:139
+#: cps/templates/user_edit.html:141
msgid "Delete this user"
msgstr "Usuń tego użytkownika"
-#: cps/templates/user_edit.html:154
+#: cps/templates/user_edit.html:156
msgid "Recent Downloads"
msgstr "Ostatnio pobierane"
-#~ msgid "Convert: %s"
-#~ msgstr ""
+#~ msgid "Afar"
+#~ msgstr "afarski"
-#~ msgid "%s: %s"
-#~ msgstr ""
+#~ msgid "Abkhazian"
+#~ msgstr "abchaski"
-#~ msgid "E-Mail: %(book)s"
-#~ msgstr ""
+#~ msgid "Achinese"
+#~ msgstr "aczineski"
-#~ msgid "E-mail: %stitle"
-#~ msgstr ""
+#~ msgid "Acoli"
+#~ msgstr "aczoli"
-#~ msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
-#~ msgstr ""
+#~ msgid "Adangme"
+#~ msgstr "adangme"
-#~ msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
-#~ msgstr ""
+#~ msgid "Adyghe"
+#~ msgstr "adygejski"
-#~ msgid "Password for user %(user)s reset"
-#~ msgstr ""
+#~ msgid "Afrihili"
+#~ msgstr "afrihili"
-#~ msgid "Password for user %s reset"
-#~ msgstr ""
+#~ msgid "Afrikaans"
+#~ msgstr "afrykanerski"
-#~ msgid "Rename title from: '%(src)s' to '%(src)s' failed with error: %(error)s"
-#~ msgstr ""
+#~ msgid "Ainu (Japan)"
+#~ msgstr "ajnoski (Japonia)"
-#~ msgid "Rename author from: '%(src)s' to '%(src)s' failed with error: %(error)s"
-#~ msgstr ""
+#~ msgid "Akan"
+#~ msgstr "akan"
-#~ msgid "Failed to create path for cover %(cover)s (Permission denied)."
-#~ msgstr ""
+#~ msgid "Akkadian"
+#~ msgstr "akadyjski"
-#~ msgid "File extension '%s' is not allowed to be uploaded to this server"
-#~ msgstr ""
+#~ msgid "Aleut"
+#~ msgstr "aleucki"
-#~ msgid "File extension \"%(ext)s\" is not allowed to be uploaded to this server"
-#~ msgstr "Rozszerzenie pliku \"%(ext)s\" nie jest dozwolone do przesłania na ten serwer"
+#~ msgid "Altai; Southern"
+#~ msgstr "ałtajski południowy"
-#~ msgid "Current commit timestamp"
-#~ msgstr "Znacznik czasowy zainstalowanej wersji"
+#~ msgid "Amharic"
+#~ msgstr "amharski"
-#~ msgid "Newest commit timestamp"
-#~ msgstr "Znacznik czasowy nowej wersji"
+#~ msgid "English; Old (ca. 450-1100)"
+#~ msgstr "Staroangielski (ok. 450-1100)"
-#~ msgid "Convert: %(book)s"
-#~ msgstr ""
+#~ msgid "Angika"
+#~ msgstr "angika"
-#~ msgid "Convert to %(format)s: %(book)s"
-#~ msgstr ""
+#~ msgid "Arabic"
+#~ msgstr "arabski"
-#~ msgid "Files are replaced"
-#~ msgstr "Pliki zostały zastąpione"
+#~ msgid "Aramaic; Official (700-300 BCE)"
+#~ msgstr "aramejski oficjalny (700-300 p.n.e.)"
-#~ msgid "Server is stopped"
-#~ msgstr "Serwer jest zatrzymany"
+#~ msgid "Aragonese"
+#~ msgstr "aragoński"
-#~ msgid "Convertertool %(converter)s not found"
-#~ msgstr ""
+#~ msgid "Mapudungun"
+#~ msgstr "araukański"
-#~ msgid "Choose a password"
-#~ msgstr "Wybierz hasło"
+#~ msgid "Arapaho"
+#~ msgstr "arapaho"
-#~ msgid "Could not find any formats suitable for sending by e-mail"
-#~ msgstr ""
+#~ msgid "Arawak"
+#~ msgstr "arawak"
-#~ msgid "Author list"
-#~ msgstr "Lista autorów"
+#~ msgid "Assamese"
+#~ msgstr "asamski"
-#~ msgid "File %(file)s uploaded"
-#~ msgstr ""
+#~ msgid "Asturian"
+#~ msgstr "asturyjski"
+
+#~ msgid "Avaric"
+#~ msgstr "awarski"
+
+#~ msgid "Avestan"
+#~ msgstr "awestyjski"
+
+#~ msgid "Awadhi"
+#~ msgstr "awadhi"
+
+#~ msgid "Aymara"
+#~ msgstr "ajmara"
+
+#~ msgid "Azerbaijani"
+#~ msgstr "azerski"
+
+#~ msgid "Bashkir"
+#~ msgstr "baszkirski"
+
+#~ msgid "Baluchi"
+#~ msgstr "baluczi"
+
+#~ msgid "Bambara"
+#~ msgstr "bambara"
+
+#~ msgid "Balinese"
+#~ msgstr "balijski"
+
+#~ msgid "Basa (Cameroon)"
+#~ msgstr "basa (Kamerun)"
+
+#~ msgid "Beja"
+#~ msgstr "bedża"
+
+#~ msgid "Belarusian"
+#~ msgstr "białoruski"
+
+#~ msgid "Bemba (Zambia)"
+#~ msgstr "bemba (Zambia)"
+
+#~ msgid "Bengali"
+#~ msgstr "bengalski"
+
+#~ msgid "Bhojpuri"
+#~ msgstr "bhodźpuri"
+
+#~ msgid "Bikol"
+#~ msgstr "bikol"
+
+#~ msgid "Bini"
+#~ msgstr "edo"
+
+#~ msgid "Bislama"
+#~ msgstr "bislama"
+
+#~ msgid "Siksika"
+#~ msgstr "siksika"
+
+#~ msgid "Tibetan"
+#~ msgstr "tybetański"
+
+#~ msgid "Bosnian"
+#~ msgstr "bośniacki"
+
+#~ msgid "Braj"
+#~ msgstr "bradź"
+
+#~ msgid "Breton"
+#~ msgstr "bretoński"
+
+#~ msgid "Buriat"
+#~ msgstr "buriacki"
+
+#~ msgid "Buginese"
+#~ msgstr "bugijski"
+
+#~ msgid "Bulgarian"
+#~ msgstr "bułgarski"
+
+#~ msgid "Bilin"
+#~ msgstr "blin"
+
+#~ msgid "Caddo"
+#~ msgstr "kaddo"
+
+#~ msgid "Carib; Galibi"
+#~ msgstr "karaibski galibi"
+
+#~ msgid "Catalan"
+#~ msgstr "kataloński"
+
+#~ msgid "Cebuano"
+#~ msgstr "cebuański"
+
+#~ msgid "Czech"
+#~ msgstr "czeski"
+
+#~ msgid "Chamorro"
+#~ msgstr "czamorro"
+
+#~ msgid "Chibcha"
+#~ msgstr "czibcza"
+
+#~ msgid "Chechen"
+#~ msgstr "czeczeński"
+
+#~ msgid "Chagatai"
+#~ msgstr "czagatajski"
+
+#~ msgid "Chuukese"
+#~ msgstr "chuuk"
+
+#~ msgid "Mari (Russia)"
+#~ msgstr "maryjski (Rosja)"
+
+#~ msgid "Chinook jargon"
+#~ msgstr "żargon chinoocki"
+
+#~ msgid "Choctaw"
+#~ msgstr "czoktaw"
+
+#~ msgid "Chipewyan"
+#~ msgstr "chipewyan"
+
+#~ msgid "Cherokee"
+#~ msgstr "czerokeski"
+
+#~ msgid "Slavonic; Old"
+#~ msgstr "starosłowiański"
+
+#~ msgid "Chuvash"
+#~ msgstr "czuwaski"
+
+#~ msgid "Cheyenne"
+#~ msgstr "czejeński"
+
+#~ msgid "Coptic"
+#~ msgstr "koptyjski"
+
+#~ msgid "Cornish"
+#~ msgstr "kornijski"
+
+#~ msgid "Corsican"
+#~ msgstr "korsykański"
+
+#~ msgid "Cree"
+#~ msgstr "kri"
+
+#~ msgid "Turkish; Crimean"
+#~ msgstr "krymskotatarski"
+
+#~ msgid "Kashubian"
+#~ msgstr "kaszubski"
+
+#~ msgid "Welsh"
+#~ msgstr "walijski"
+
+#~ msgid "Dakota"
+#~ msgstr "dakota"
+
+#~ msgid "Danish"
+#~ msgstr "duński"
+
+#~ msgid "Dargwa"
+#~ msgstr "dargwijski"
+
+#~ msgid "Delaware"
+#~ msgstr "delaware"
+
+#~ msgid "Slave (Athapascan)"
+#~ msgstr "slavey (atapaskański)"
+
+#~ msgid "German"
+#~ msgstr "niemiecki"
+
+#~ msgid "Dogrib"
+#~ msgstr "dogrib"
+
+#~ msgid "Dinka"
+#~ msgstr "dinka"
+
+#~ msgid "Dhivehi"
+#~ msgstr "malediwski; divehi"
+
+#~ msgid "Dogri (macrolanguage)"
+#~ msgstr "dogri (makrojęzyk)"
+
+#~ msgid "Sorbian; Lower"
+#~ msgstr "dolnołużycki"
+
+#~ msgid "Duala"
+#~ msgstr "duala"
+
+#~ msgid "Dutch; Middle (ca. 1050-1350)"
+#~ msgstr "holenderski średniowieczny (ok. 1050-1350)"
+
+#~ msgid "Dyula"
+#~ msgstr "diula"
+
+#~ msgid "Dzongkha"
+#~ msgstr "dzongka"
+
+#~ msgid "Efik"
+#~ msgstr "efik"
+
+#~ msgid "Egyptian (Ancient)"
+#~ msgstr "egipski (starożytny)"
+
+#~ msgid "Ekajuk"
+#~ msgstr "ekajuk"
+
+#~ msgid "Greek; Modern (1453-)"
+#~ msgstr "grecki współczesny (1453-)"
+
+#~ msgid "Elamite"
+#~ msgstr "elamicki"
+
+#~ msgid "English"
+#~ msgstr "Angielski"
+
+#~ msgid "English; Middle (1100-1500)"
+#~ msgstr "angielski średniowieczny (1100-1500)"
+
+#~ msgid "Esperanto"
+#~ msgstr "esperanto"
+
+#~ msgid "Estonian"
+#~ msgstr "estoński"
+
+#~ msgid "Basque"
+#~ msgstr "baskijski"
+
+#~ msgid "Ewe"
+#~ msgstr "ewe"
+
+#~ msgid "Ewondo"
+#~ msgstr "ewondo"
+
+#~ msgid "Fang (Equatorial Guinea)"
+#~ msgstr "fang (Gwinea Równikowa)"
+
+#~ msgid "Faroese"
+#~ msgstr "farerski"
+
+#~ msgid "Persian"
+#~ msgstr "perski"
+
+#~ msgid "Fanti"
+#~ msgstr "fanti"
+
+#~ msgid "Fijian"
+#~ msgstr "fidżyjski"
+
+#~ msgid "Filipino"
+#~ msgstr "pilipino"
+
+#~ msgid "Finnish"
+#~ msgstr "fiński"
+
+#~ msgid "Fon"
+#~ msgstr "fon"
+
+#~ msgid "French"
+#~ msgstr "francuski"
+
+#~ msgid "French; Middle (ca. 1400-1600)"
+#~ msgstr "francuski średniowieczny (ok. 1400-1600)"
+
+#~ msgid "French; Old (842-ca. 1400)"
+#~ msgstr "starofrancuski (842-ok. 1400)"
+
+#~ msgid "Frisian; Northern"
+#~ msgstr "północnofryzyjski"
+
+#~ msgid "Frisian; Eastern"
+#~ msgstr "wschodniofryzyjski"
+
+#~ msgid "Frisian; Western"
+#~ msgstr "zachodniofryzyjski"
+
+#~ msgid "Fulah"
+#~ msgstr "fulani"
+
+#~ msgid "Friulian"
+#~ msgstr "friulski"
+
+#~ msgid "Ga"
+#~ msgstr "ga"
+
+#~ msgid "Gayo"
+#~ msgstr "gayo"
+
+#~ msgid "Gbaya (Central African Republic)"
+#~ msgstr "gbaya (Republika Środkowoafrykańska)"
+
+#~ msgid "Geez"
+#~ msgstr "gyyz"
+
+#~ msgid "Gilbertese"
+#~ msgstr "gilbertański"
+
+#~ msgid "Gaelic; Scottish"
+#~ msgstr "szkocki gaelicki"
+
+#~ msgid "Irish"
+#~ msgstr "irlandzki"
+
+#~ msgid "Galician"
+#~ msgstr "galicyjski"
+
+#~ msgid "Manx"
+#~ msgstr "manx"
+
+#~ msgid "German; Middle High (ca. 1050-1500)"
+#~ msgstr "średnio-wysoko-niemiecki (ok. 1050-1500)"
+
+#~ msgid "German; Old High (ca. 750-1050)"
+#~ msgstr "staro-wysoko-niemiecki (ok. 750-1050)"
+
+#~ msgid "Gondi"
+#~ msgstr "gondi"
+
+#~ msgid "Gorontalo"
+#~ msgstr "gorontalo"
+
+#~ msgid "Gothic"
+#~ msgstr "gocki"
+
+#~ msgid "Grebo"
+#~ msgstr "grebo"
+
+#~ msgid "Greek; Ancient (to 1453)"
+#~ msgstr "grecki starożytny (do 1453)"
+
+#~ msgid "Guarani"
+#~ msgstr "guarani"
+
+#~ msgid "German; Swiss"
+#~ msgstr "niemiecki szwajcarski"
+
+#~ msgid "Gujarati"
+#~ msgstr "gudźarati"
+
+#~ msgid "Gwichʼin"
+#~ msgstr "gwichʼin"
+
+#~ msgid "Haida"
+#~ msgstr "haida"
+
+#~ msgid "Creole; Haitian"
+#~ msgstr "kreolski haitański"
+
+#~ msgid "Hausa"
+#~ msgstr "hausa"
+
+#~ msgid "Hawaiian"
+#~ msgstr "hawajski"
+
+#~ msgid "Hebrew"
+#~ msgstr "hebrajski"
+
+#~ msgid "Herero"
+#~ msgstr "herero"
+
+#~ msgid "Hiligaynon"
+#~ msgstr "hiligajnon"
+
+#~ msgid "Hindi"
+#~ msgstr "hindi"
+
+#~ msgid "Hittite"
+#~ msgstr "hetycki"
+
+#~ msgid "Hmong"
+#~ msgstr "hmong"
+
+#~ msgid "Hiri Motu"
+#~ msgstr "hiri motu"
+
+#~ msgid "Croatian"
+#~ msgstr "chorwacki"
+
+#~ msgid "Sorbian; Upper"
+#~ msgstr "górnołużycki"
+
+#~ msgid "Hungarian"
+#~ msgstr "węgierski"
+
+#~ msgid "Hupa"
+#~ msgstr "hupa"
+
+#~ msgid "Armenian"
+#~ msgstr "ormiański"
+
+#~ msgid "Iban"
+#~ msgstr "ibanag"
+
+#~ msgid "Igbo"
+#~ msgstr "ibo"
+
+#~ msgid "Ido"
+#~ msgstr "ido"
+
+#~ msgid "Yi; Sichuan"
+#~ msgstr "syczuański"
+
+#~ msgid "Inuktitut"
+#~ msgstr "inuktitut"
+
+#~ msgid "Interlingue"
+#~ msgstr "interlingue"
+
+#~ msgid "Iloko"
+#~ msgstr "ilokano"
+
+#~ msgid "Interlingua (International Auxiliary Language Association)"
+#~ msgstr "interlingua (Międzynarodowe Stowarzyszenie Języka Pomocniczego)"
+
+#~ msgid "Indonesian"
+#~ msgstr "indonezyjski"
+
+#~ msgid "Ingush"
+#~ msgstr "inguski"
+
+#~ msgid "Inupiaq"
+#~ msgstr "inupiaq"
+
+#~ msgid "Icelandic"
+#~ msgstr "islandzki"
+
+#~ msgid "Italian"
+#~ msgstr "włoski"
+
+#~ msgid "Javanese"
+#~ msgstr "jawajski"
+
+#~ msgid "Lojban"
+#~ msgstr "lojban"
+
+#~ msgid "Japanese"
+#~ msgstr "japoński"
+
+#~ msgid "Judeo-Persian"
+#~ msgstr "judeo-perski"
+
+#~ msgid "Judeo-Arabic"
+#~ msgstr "judeoarabski"
+
+#~ msgid "Kara-Kalpak"
+#~ msgstr "karakałpacki"
+
+#~ msgid "Kabyle"
+#~ msgstr "kabylski"
+
+#~ msgid "Kachin"
+#~ msgstr "kaczin"
+
+#~ msgid "Kalaallisut"
+#~ msgstr "kalaallisut"
+
+#~ msgid "Kamba (Kenya)"
+#~ msgstr "kamba (Kenia)"
+
+#~ msgid "Kannada"
+#~ msgstr "kannada"
+
+#~ msgid "Kashmiri"
+#~ msgstr "kaszmirski"
+
+#~ msgid "Georgian"
+#~ msgstr "gruziński"
+
+#~ msgid "Kanuri"
+#~ msgstr "kanuri"
+
+#~ msgid "Kawi"
+#~ msgstr "kawi"
+
+#~ msgid "Kazakh"
+#~ msgstr "kazaski"
+
+#~ msgid "Kabardian"
+#~ msgstr "kabardyjski"
+
+#~ msgid "Khasi"
+#~ msgstr "khasi"
+
+#~ msgid "Khmer; Central"
+#~ msgstr "środkowokhmerski"
+
+#~ msgid "Khotanese"
+#~ msgstr "chotański"
+
+#~ msgid "Kikuyu"
+#~ msgstr "kikiju"
+
+#~ msgid "Kinyarwanda"
+#~ msgstr "ruanda"
+
+#~ msgid "Kirghiz"
+#~ msgstr "kirgiski"
+
+#~ msgid "Kimbundu"
+#~ msgstr "kimbundu"
+
+#~ msgid "Konkani (macrolanguage)"
+#~ msgstr "konkani (makrojęzyk)"
+
+#~ msgid "Komi"
+#~ msgstr "komi"
+
+#~ msgid "Kongo"
+#~ msgstr "kongo"
+
+#~ msgid "Korean"
+#~ msgstr "koreański"
+
+#~ msgid "Kosraean"
+#~ msgstr "kosrae"
+
+#~ msgid "Kpelle"
+#~ msgstr "kpelle"
+
+#~ msgid "Karachay-Balkar"
+#~ msgstr "karaczajsko-bałkarski"
+
+#~ msgid "Karelian"
+#~ msgstr "karelski"
+
+#~ msgid "Kurukh"
+#~ msgstr "kurukh"
+
+#~ msgid "Kuanyama"
+#~ msgstr "kwanyama"
+
+#~ msgid "Kumyk"
+#~ msgstr "kumycki"
+
+#~ msgid "Kurdish"
+#~ msgstr "kurdyjski"
+
+#~ msgid "Kutenai"
+#~ msgstr "kutenai"
+
+#~ msgid "Ladino"
+#~ msgstr "ladino"
+
+#~ msgid "Lahnda"
+#~ msgstr "lahnda"
+
+#~ msgid "Lamba"
+#~ msgstr "lamba"
+
+#~ msgid "Lao"
+#~ msgstr "laotański"
+
+#~ msgid "Latin"
+#~ msgstr "łaciński"
+
+#~ msgid "Latvian"
+#~ msgstr "łotewski"
+
+#~ msgid "Lezghian"
+#~ msgstr "lezgiński"
+
+#~ msgid "Limburgan"
+#~ msgstr "limburgijski"
+
+#~ msgid "Lingala"
+#~ msgstr "lingala"
+
+#~ msgid "Lithuanian"
+#~ msgstr "litewski"
+
+#~ msgid "Mongo"
+#~ msgstr "mongo"
+
+#~ msgid "Lozi"
+#~ msgstr "lozi"
+
+#~ msgid "Luxembourgish"
+#~ msgstr "luksemburski"
+
+#~ msgid "Luba-Lulua"
+#~ msgstr "luba-lulua"
+
+#~ msgid "Luba-Katanga"
+#~ msgstr "luba-katanga"
+
+#~ msgid "Ganda"
+#~ msgstr "luganda"
+
+#~ msgid "Luiseno"
+#~ msgstr "luiseno"
+
+#~ msgid "Lunda"
+#~ msgstr "lunda"
+
+#~ msgid "Luo (Kenya and Tanzania)"
+#~ msgstr "luo (Kenia i Tanzania)"
+
+#~ msgid "Lushai"
+#~ msgstr "lushai"
+
+#~ msgid "Madurese"
+#~ msgstr "madurajski"
+
+#~ msgid "Magahi"
+#~ msgstr "magahi"
+
+#~ msgid "Marshallese"
+#~ msgstr "marshalski"
+
+#~ msgid "Maithili"
+#~ msgstr "maithili"
+
+#~ msgid "Makasar"
+#~ msgstr "makasar"
+
+#~ msgid "Malayalam"
+#~ msgstr "malajalam"
+
+#~ msgid "Mandingo"
+#~ msgstr "mandingo"
+
+#~ msgid "Marathi"
+#~ msgstr "marathi"
+
+#~ msgid "Masai"
+#~ msgstr "masajski"
+
+#~ msgid "Moksha"
+#~ msgstr "moksza"
+
+#~ msgid "Mandar"
+#~ msgstr "mandar"
+
+#~ msgid "Mende (Sierra Leone)"
+#~ msgstr "mende (Sierra Leone)"
+
+#~ msgid "Irish; Middle (900-1200)"
+#~ msgstr "irlandzki średniowieczny (900-1200)"
+
+#~ msgid "Mi'kmaq"
+#~ msgstr "micmac"
+
+#~ msgid "Minangkabau"
+#~ msgstr "minangkabau"
+
+#~ msgid "Uncoded languages"
+#~ msgstr "języki niezakodowane"
+
+#~ msgid "Macedonian"
+#~ msgstr "macedoński"
+
+#~ msgid "Malagasy"
+#~ msgstr "malgaski"
+
+#~ msgid "Maltese"
+#~ msgstr "maltański"
+
+#~ msgid "Manchu"
+#~ msgstr "mandżurski"
+
+#~ msgid "Manipuri"
+#~ msgstr "manipuri"
+
+#~ msgid "Mohawk"
+#~ msgstr "mohawk"
+
+#~ msgid "Mongolian"
+#~ msgstr "mongolski"
+
+#~ msgid "Mossi"
+#~ msgstr "mossi"
+
+#~ msgid "Maori"
+#~ msgstr "maoryski"
+
+#~ msgid "Malay (macrolanguage)"
+#~ msgstr "malajski (makrojęzyk)"
+
+#~ msgid "Multiple languages"
+#~ msgstr "wiele języków"
+
+#~ msgid "Creek"
+#~ msgstr "krik"
+
+#~ msgid "Mirandese"
+#~ msgstr "mirandyjski"
+
+#~ msgid "Marwari"
+#~ msgstr "marwari"
+
+#~ msgid "Burmese"
+#~ msgstr "birmański"
+
+#~ msgid "Erzya"
+#~ msgstr "erzja"
+
+#~ msgid "Neapolitan"
+#~ msgstr "neapolitański"
+
+#~ msgid "Nauru"
+#~ msgstr "nauruański"
+
+#~ msgid "Navajo"
+#~ msgstr "navaho"
+
+#~ msgid "Ndebele; South"
+#~ msgstr "ndebele południowy"
+
+#~ msgid "Ndebele; North"
+#~ msgstr "ndebele północny"
+
+#~ msgid "Ndonga"
+#~ msgstr "ndonga"
+
+#~ msgid "German; Low"
+#~ msgstr "German; Low"
+
+#~ msgid "Nepali"
+#~ msgstr "nepalski"
+
+#~ msgid "Bhasa; Nepal"
+#~ msgstr "newarski"
+
+#~ msgid "Nias"
+#~ msgstr "nias"
+
+#~ msgid "Niuean"
+#~ msgstr "niue"
+
+#~ msgid "Dutch"
+#~ msgstr "holenderski"
+
+#~ msgid "Norwegian Nynorsk"
+#~ msgstr "norweski Nynorsk"
+
+#~ msgid "Norwegian Bokmål"
+#~ msgstr "norweski Bokmål"
+
+#~ msgid "Nogai"
+#~ msgstr "nogajski"
+
+#~ msgid "Norse; Old"
+#~ msgstr "staronordyjski"
+
+#~ msgid "Norwegian"
+#~ msgstr "norweski"
+
+#~ msgid "N'Ko"
+#~ msgstr "n’ko"
+
+#~ msgid "Sotho; Northern"
+#~ msgstr "sotho północny"
+
+#~ msgid "Newari; Old"
+#~ msgstr "newarski klasyczny"
+
+#~ msgid "Nyanja"
+#~ msgstr "njandża"
+
+#~ msgid "Nyamwezi"
+#~ msgstr "nyamwezi"
+
+#~ msgid "Nyankole"
+#~ msgstr "nyankole"
+
+#~ msgid "Nyoro"
+#~ msgstr "nyoro"
+
+#~ msgid "Nzima"
+#~ msgstr "nzema"
+
+#~ msgid "Occitan (post 1500)"
+#~ msgstr "okcytański (po 1500)"
+
+#~ msgid "Ojibwa"
+#~ msgstr "odżibwe"
+
+#~ msgid "Oriya"
+#~ msgstr "orija"
+
+#~ msgid "Oromo"
+#~ msgstr "oromo"
+
+#~ msgid "Osage"
+#~ msgstr "osage"
+
+#~ msgid "Ossetian"
+#~ msgstr "osetyjski"
+
+#~ msgid "Turkish; Ottoman (1500-1928)"
+#~ msgstr "turecki otomański (1500-1928)"
+
+#~ msgid "Pangasinan"
+#~ msgstr "pangasino"
+
+#~ msgid "Pahlavi"
+#~ msgstr "pahlawi"
+
+#~ msgid "Pampanga"
+#~ msgstr "pampango"
+
+#~ msgid "Panjabi"
+#~ msgstr "pendżabski"
+
+#~ msgid "Papiamento"
+#~ msgstr "papiamento"
+
+#~ msgid "Palauan"
+#~ msgstr "palau"
+
+#~ msgid "Persian; Old (ca. 600-400 B.C.)"
+#~ msgstr "staroperski (ok. 600-400 p.n.e)"
+
+#~ msgid "Phoenician"
+#~ msgstr "fenicki"
+
+#~ msgid "Pali"
+#~ msgstr "pali"
+
+#~ msgid "Polish"
+#~ msgstr "Polski"
+
+#~ msgid "Pohnpeian"
+#~ msgstr "pohnpei"
+
+#~ msgid "Portuguese"
+#~ msgstr "portugalski"
+
+#~ msgid "Provençal; Old (to 1500)"
+#~ msgstr "prowansalski średniowieczny (do 1500)"
+
+#~ msgid "Pushto"
+#~ msgstr "paszto"
+
+#~ msgid "Quechua"
+#~ msgstr "keczua"
+
+#~ msgid "Rajasthani"
+#~ msgstr "radźasthani"
+
+#~ msgid "Rapanui"
+#~ msgstr "rapanui"
+
+#~ msgid "Maori; Cook Islands"
+#~ msgstr "maoryski Wysp Cooka"
+
+#~ msgid "Romansh"
+#~ msgstr "retoromański"
+
+#~ msgid "Romany"
+#~ msgstr "romski"
+
+#~ msgid "Romanian"
+#~ msgstr "rumuński"
+
+#~ msgid "Rundi"
+#~ msgstr "rundi"
+
+#~ msgid "Romanian; Macedo-"
+#~ msgstr "arumuński"
+
+#~ msgid "Russian"
+#~ msgstr "rosyjski"
+
+#~ msgid "Sandawe"
+#~ msgstr "sandawe"
+
+#~ msgid "Sango"
+#~ msgstr "sango"
+
+#~ msgid "Yakut"
+#~ msgstr "jakucki"
+
+#~ msgid "Aramaic; Samaritan"
+#~ msgstr "samarytański aramejski"
+
+#~ msgid "Sanskrit"
+#~ msgstr "sanskryt"
+
+#~ msgid "Sasak"
+#~ msgstr "sasak"
+
+#~ msgid "Santali"
+#~ msgstr "santali"
+
+#~ msgid "Sicilian"
+#~ msgstr "sycylijski"
+
+#~ msgid "Scots"
+#~ msgstr "scots"
+
+#~ msgid "Selkup"
+#~ msgstr "selkupski"
+
+#~ msgid "Irish; Old (to 900)"
+#~ msgstr "staroirlandzki (do 900)"
+
+#~ msgid "Shan"
+#~ msgstr "szan"
+
+#~ msgid "Sidamo"
+#~ msgstr "sidamo"
+
+#~ msgid "Sinhala"
+#~ msgstr "syngaleski"
+
+#~ msgid "Slovak"
+#~ msgstr "słowacki"
+
+#~ msgid "Slovenian"
+#~ msgstr "słoweński"
+
+#~ msgid "Sami; Southern"
+#~ msgstr "południowolapoński"
+
+#~ msgid "Sami; Northern"
+#~ msgstr "północnolapoński"
+
+#~ msgid "Lule Sami"
+#~ msgstr "lapoński lule"
+
+#~ msgid "Sami; Inari"
+#~ msgstr "lapoński inari"
+
+#~ msgid "Samoan"
+#~ msgstr "samoański"
+
+#~ msgid "Sami; Skolt"
+#~ msgstr "lapoński skolt"
+
+#~ msgid "Shona"
+#~ msgstr "shona"
+
+#~ msgid "Sindhi"
+#~ msgstr "sindhi"
+
+#~ msgid "Soninke"
+#~ msgstr "soninke"
+
+#~ msgid "Sogdian"
+#~ msgstr "sogdiański"
+
+#~ msgid "Somali"
+#~ msgstr "somalijski"
+
+#~ msgid "Sotho; Southern"
+#~ msgstr "sotho południowy"
+
+#~ msgid "Spanish"
+#~ msgstr "hiszpański"
+
+#~ msgid "Albanian"
+#~ msgstr "albański"
+
+#~ msgid "Sardinian"
+#~ msgstr "sardyński"
+
+#~ msgid "Sranan Tongo"
+#~ msgstr "sranan tongo"
+
+#~ msgid "Serbian"
+#~ msgstr "serbski"
+
+#~ msgid "Serer"
+#~ msgstr "serer"
+
+#~ msgid "Swati"
+#~ msgstr "suazi"
+
+#~ msgid "Sukuma"
+#~ msgstr "sukuma"
+
+#~ msgid "Sundanese"
+#~ msgstr "sundajski"
+
+#~ msgid "Susu"
+#~ msgstr "susu"
+
+#~ msgid "Sumerian"
+#~ msgstr "sumeryjski"
+
+#~ msgid "Swahili (macrolanguage)"
+#~ msgstr "suahili (makrojęzyk)"
+
+#~ msgid "Swedish"
+#~ msgstr "szwedzki"
+
+#~ msgid "Syriac; Classical"
+#~ msgstr "syryjski klasyczny"
+
+#~ msgid "Syriac"
+#~ msgstr "syryjski"
+
+#~ msgid "Tahitian"
+#~ msgstr "tahitański"
+
+#~ msgid "Tamil"
+#~ msgstr "tamilski"
+
+#~ msgid "Tatar"
+#~ msgstr "tatarski"
+
+#~ msgid "Telugu"
+#~ msgstr "telugu"
+
+#~ msgid "Timne"
+#~ msgstr "temne"
+
+#~ msgid "Tereno"
+#~ msgstr "tereno"
+
+#~ msgid "Tetum"
+#~ msgstr "tetum"
+
+#~ msgid "Tajik"
+#~ msgstr "tadżycki"
+
+#~ msgid "Tagalog"
+#~ msgstr "tagalski"
+
+#~ msgid "Thai"
+#~ msgstr "tajski"
+
+#~ msgid "Tigre"
+#~ msgstr "tigre"
+
+#~ msgid "Tigrinya"
+#~ msgstr "tigrinia"
+
+#~ msgid "Tiv"
+#~ msgstr "tiw"
+
+#~ msgid "Tokelau"
+#~ msgstr "tokelau"
+
+#~ msgid "Klingon"
+#~ msgstr "klingoński"
+
+#~ msgid "Tlingit"
+#~ msgstr "tlingit"
+
+#~ msgid "Tamashek"
+#~ msgstr "tuareski"
+
+#~ msgid "Tonga (Nyasa)"
+#~ msgstr "tongański (Nyasa)"
+
+#~ msgid "Tonga (Tonga Islands)"
+#~ msgstr "tongański (Wyspy Tonga)"
+
+#~ msgid "Tok Pisin"
+#~ msgstr "tok pisin"
+
+#~ msgid "Tsimshian"
+#~ msgstr "tsimszian"
+
+#~ msgid "Tswana"
+#~ msgstr "tswana"
+
+#~ msgid "Tsonga"
+#~ msgstr "tsonga"
+
+#~ msgid "Turkmen"
+#~ msgstr "turkmeński"
+
+#~ msgid "Tumbuka"
+#~ msgstr "tumbuka"
+
+#~ msgid "Turkish"
+#~ msgstr "turecki"
+
+#~ msgid "Tuvalu"
+#~ msgstr "tuvalu"
+
+#~ msgid "Twi"
+#~ msgstr "twi"
+
+#~ msgid "Tuvinian"
+#~ msgstr "tuwiński"
+
+#~ msgid "Udmurt"
+#~ msgstr "udmurcki"
+
+#~ msgid "Ugaritic"
+#~ msgstr "ugarycki"
+
+#~ msgid "Uighur"
+#~ msgstr "ujgurski"
+
+#~ msgid "Ukrainian"
+#~ msgstr "ukraiński"
+
+#~ msgid "Umbundu"
+#~ msgstr "umbundu"
+
+#~ msgid "Undetermined"
+#~ msgstr "nieokreślony"
+
+#~ msgid "Urdu"
+#~ msgstr "urdu"
+
+#~ msgid "Uzbek"
+#~ msgstr "uzbecki"
+
+#~ msgid "Vai"
+#~ msgstr "wai"
+
+#~ msgid "Venda"
+#~ msgstr "venda"
+
+#~ msgid "Vietnamese"
+#~ msgstr "wietnamski"
+
+#~ msgid "Volapük"
+#~ msgstr "wolapik"
+
+#~ msgid "Votic"
+#~ msgstr "wotycki"
+
+#~ msgid "Wolaytta"
+#~ msgstr "walamo"
+
+#~ msgid "Waray (Philippines)"
+#~ msgstr "warajski (Filipiny)"
+
+#~ msgid "Washo"
+#~ msgstr "washo"
+
+#~ msgid "Walloon"
+#~ msgstr "waloński"
+
+#~ msgid "Wolof"
+#~ msgstr "wolof"
+
+#~ msgid "Kalmyk"
+#~ msgstr "kałmucki"
+
+#~ msgid "Xhosa"
+#~ msgstr "xhosa"
+
+#~ msgid "Yao"
+#~ msgstr "yao"
+
+#~ msgid "Yapese"
+#~ msgstr "japski"
+
+#~ msgid "Yiddish"
+#~ msgstr "jidysz"
+
+#~ msgid "Yoruba"
+#~ msgstr "joruba"
+
+#~ msgid "Zapotec"
+#~ msgstr "zapotecki"
+
+#~ msgid "Blissymbols"
+#~ msgstr "bliss"
+
+#~ msgid "Zenaga"
+#~ msgstr "zenaga"
+
+#~ msgid "Zhuang"
+#~ msgstr "zhuang"
+
+#~ msgid "Chinese"
+#~ msgstr "chiński"
+
+#~ msgid "Zulu"
+#~ msgstr "zuluski"
+
+#~ msgid "Zuni"
+#~ msgstr "zuni"
+
+#~ msgid "No linguistic content"
+#~ msgstr "brak kontekstu językowego"
+
+#~ msgid "Zaza"
+#~ msgstr "zazaki"
diff --git a/cps/translations/ru/LC_MESSAGES/messages.mo b/cps/translations/ru/LC_MESSAGES/messages.mo
index f8df5ed2..3860f5cb 100644
Binary files a/cps/translations/ru/LC_MESSAGES/messages.mo and b/cps/translations/ru/LC_MESSAGES/messages.mo differ
diff --git a/cps/translations/ru/LC_MESSAGES/messages.po b/cps/translations/ru/LC_MESSAGES/messages.po
index f16abe54..736500be 100644
--- a/cps/translations/ru/LC_MESSAGES/messages.po
+++ b/cps/translations/ru/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
-"POT-Creation-Date: 2019-01-12 09:00+0100\n"
+"POT-Creation-Date: 2019-02-03 16:21+0100\n"
"PO-Revision-Date: 2018-12-14 16:26+0300\n"
"Last-Translator: Pavel Korovin \n"
"Language: ru\n"
@@ -18,734 +18,743 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.6.0\n"
-#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134
-#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27
+#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150
+#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45
msgid "not installed"
msgstr "не установлено"
-#: cps/converter.py:22 cps/converter.py:38
+#: cps/converter.py:40 cps/converter.py:56
msgid "Excecution permissions missing"
msgstr "Отсутствуют разрешения на выполнение"
-#: cps/converter.py:48
+#: cps/converter.py:66
msgid "not configured"
msgstr "не настроен"
-#: cps/helper.py:59
+#: cps/helper.py:77
#, python-format
msgid "%(format)s format not found for book id: %(book)d"
msgstr "%(format)s форма не найден для книги с id: %(book)d"
-#: cps/helper.py:71
+#: cps/helper.py:89
#, python-format
msgid "%(format)s not found on Google Drive: %(fn)s"
msgstr "%(format)s не найден на Google Drive: %(fn)s"
-#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49
+#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49
msgid "Send to Kindle"
msgstr "Отправить на Kindle"
-#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188
+#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206
msgid "This e-mail has been sent via Calibre-Web."
msgstr "Это электронное письмо было отправлено через Caliber-Web."
-#: cps/helper.py:90
+#: cps/helper.py:108
#, python-format
msgid "%(format)s not found: %(fn)s"
msgstr "%(format)s не найден: %(fn)s"
-#: cps/helper.py:95
+#: cps/helper.py:113
msgid "Calibre-Web test e-mail"
msgstr "Тестовый e-mail для Calibre-Web"
-#: cps/helper.py:96
+#: cps/helper.py:114
msgid "Test e-mail"
msgstr "Тестовый e-mail"
-#: cps/helper.py:112
+#: cps/helper.py:130
msgid "Get Started with Calibre-Web"
msgstr "Начать работать с Calibre-Web"
-#: cps/helper.py:113
+#: cps/helper.py:131
#, python-format
msgid "Registration e-mail for user: %(name)s"
msgstr "Регистрационный e-mail для пользователя: %(name)s"
-#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132
-#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144
+#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150
+#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162
#, python-format
msgid "Send %(format)s to Kindle"
msgstr ""
-#: cps/helper.py:148 cps/helper.py:152
+#: cps/helper.py:166 cps/helper.py:170
#, python-format
msgid "Convert %(orig)s to %(format)s and send to Kindle"
msgstr ""
-#: cps/helper.py:187
+#: cps/helper.py:205
#, python-format
msgid "E-mail: %(book)s"
msgstr "Эл. почта: %(book)s"
-#: cps/helper.py:190
+#: cps/helper.py:208
msgid "The requested file could not be read. Maybe wrong permissions?"
msgstr "Запрашиваемый файл не может быть прочитан. Возможно не верные разрешения?"
-#: cps/helper.py:295
+#: cps/helper.py:313
#, python-format
msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr "Переименовывание заголовка с: '%(src)s' на '%(dest)s' не удалось из-за ошибки: %(error)s"
-#: cps/helper.py:305
+#: cps/helper.py:323
#, python-format
msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr "Переименовывание автора с: '%(src)s' на '%(dest)s' не удалось из-за ошибки: %(error)s"
-#: cps/helper.py:319
+#: cps/helper.py:337
#, python-format
msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr ""
-#: cps/helper.py:344 cps/helper.py:353
+#: cps/helper.py:362 cps/helper.py:371
#, python-format
msgid "File %(file)s not found on Google Drive"
msgstr "Файл %(file)s не найден на Google Drive"
-#: cps/helper.py:384
+#: cps/helper.py:402
#, python-format
msgid "Book path %(path)s not found on Google Drive"
msgstr "Путь книги %(path)s не найден на Google Drive"
-#: cps/helper.py:650
+#: cps/helper.py:510
msgid "Error excecuting UnRar"
msgstr "Ошибка извлечения UnRar"
-#: cps/helper.py:652
+#: cps/helper.py:512
msgid "Unrar binary file not found"
msgstr "Unrar двочиный файл не найден"
-#: cps/helper.py:703
+#: cps/helper.py:543
msgid "Waiting"
msgstr "Ожидание"
-#: cps/helper.py:705
+#: cps/helper.py:545
msgid "Failed"
msgstr "Неудачно"
-#: cps/helper.py:707
+#: cps/helper.py:547
msgid "Started"
msgstr "Начало"
-#: cps/helper.py:709
+#: cps/helper.py:549
msgid "Finished"
msgstr "Закончено"
-#: cps/helper.py:711
+#: cps/helper.py:551
msgid "Unknown Status"
msgstr "Неизвестный статус"
-#: cps/helper.py:716
+#: cps/helper.py:556
msgid "E-mail: "
msgstr "E-mail: "
-#: cps/helper.py:718 cps/helper.py:722
+#: cps/helper.py:558 cps/helper.py:562
msgid "Convert: "
msgstr "Конвертировать:"
-#: cps/helper.py:720
+#: cps/helper.py:560
msgid "Upload: "
msgstr "Загрузить:"
-#: cps/helper.py:724
+#: cps/helper.py:564
msgid "Unknown Task: "
msgstr "Неизвестная задача:"
-#: cps/web.py:1156 cps/web.py:2866
-msgid "Unknown"
-msgstr "Неизвестно"
-
-#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281
-msgid "HTTP Error"
-msgstr "Ошибка HTTP"
-
-#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282
-msgid "Connection error"
-msgstr "Ошибка соединения"
-
-#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283
-msgid "Timeout while establishing connection"
-msgstr "Таймаут при установлении соединения"
-
-#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284
-msgid "General error"
-msgstr "Общая ошибка"
-
-#: cps/web.py:1177
+#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423
msgid "Unexpected data while reading update information"
msgstr "Некорректные данные при чтении информации об обновлении"
-#: cps/web.py:1184
+#: cps/updater.py:258 cps/updater.py:416
msgid "No update available. You already have the latest version installed"
msgstr "Обновление недоступно. Вы используете самую последнюю версию"
-#: cps/web.py:1209
+#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1184
+msgid "HTTP Error"
+msgstr "Ошибка HTTP"
+
+#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1185
+msgid "Connection error"
+msgstr "Ошибка соединения"
+
+#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1186
+msgid "Timeout while establishing connection"
+msgstr "Таймаут при установлении соединения"
+
+#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1187
+msgid "General error"
+msgstr "Общая ошибка"
+
+#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468
msgid "A new update is available. Click on the button below to update to the latest version."
msgstr "Доступно обновление. Нажмите на кнопку, что бы обновиться до последней версии."
-#: cps/web.py:1259
+#: cps/updater.py:335
msgid "Could not fetch update information"
msgstr "Не удалось получить информацию об обновлении"
-#: cps/web.py:1274
+#: cps/updater.py:403
+msgid "No release information available"
+msgstr ""
+
+#: cps/updater.py:449 cps/updater.py:458
+#, python-format
+msgid "A new update is available. Click on the button below to update to version: %(version)s"
+msgstr ""
+
+#: cps/updater.py:491 cps/web.py:2766
+msgid "Unknown"
+msgstr "Неизвестно"
+
+#: cps/web.py:1177
msgid "Requesting update package"
msgstr "Проверка обновлений"
-#: cps/web.py:1275
+#: cps/web.py:1178
msgid "Downloading update package"
msgstr "Загрузка обновлений"
-#: cps/web.py:1276
+#: cps/web.py:1179
msgid "Unzipping update package"
msgstr "Распаковка обновлений"
-#: cps/web.py:1277
+#: cps/web.py:1180
msgid "Replacing files"
msgstr "Замена файлов"
-#: cps/web.py:1278
+#: cps/web.py:1181
msgid "Database connections are closed"
msgstr "Соеднинения с базой данных закрыты"
-#: cps/web.py:1279
+#: cps/web.py:1182
msgid "Stopping server"
msgstr "Остановка сервера"
-#: cps/web.py:1280
+#: cps/web.py:1183
msgid "Update finished, please press okay and reload page"
msgstr "Обновления установлены, нажмите okay и перезагрузите страницу"
-#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284
+#: cps/web.py:1184 cps/web.py:1185 cps/web.py:1186 cps/web.py:1187
msgid "Update failed:"
msgstr "Ошибка обновления:"
-#: cps/web.py:1307
+#: cps/web.py:1210
msgid "Recently Added Books"
msgstr "Недавно Добавленные Книги"
-#: cps/web.py:1317
+#: cps/web.py:1220
msgid "Newest Books"
msgstr "Новые Книги"
-#: cps/web.py:1329
+#: cps/web.py:1232
msgid "Oldest Books"
msgstr "Старые Книги"
-#: cps/web.py:1341
+#: cps/web.py:1244
msgid "Books (A-Z)"
msgstr "Книги (А-Я)"
-#: cps/web.py:1352
+#: cps/web.py:1255
msgid "Books (Z-A)"
msgstr "Книги (Я-А)"
-#: cps/web.py:1381
+#: cps/web.py:1284
msgid "Hot Books (most downloaded)"
msgstr "Популярные книги (часто загружаемые)"
-#: cps/web.py:1394
+#: cps/web.py:1297
msgid "Best rated books"
msgstr "Книги с наивысшим рейтингом"
-#: cps/templates/index.xml:39 cps/web.py:1407
+#: cps/templates/index.xml:39 cps/web.py:1310
msgid "Random Books"
msgstr "Случайный выбор"
-#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236
+#: cps/web.py:1337 cps/web.py:1592 cps/web.py:2135
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "Невозможно открыть книгу. Файл не существует или недоступен."
-#: cps/web.py:1462
+#: cps/web.py:1365
msgid "Publisher list"
msgstr "Список издателей"
-#: cps/web.py:1477
+#: cps/web.py:1380
#, python-format
msgid "Publisher: %(name)s"
msgstr "Издатель: %(name)s"
-#: cps/templates/index.xml:83 cps/web.py:1509
+#: cps/templates/index.xml:83 cps/web.py:1412
msgid "Series list"
msgstr "Серии"
-#: cps/web.py:1523
+#: cps/web.py:1426
#, python-format
msgid "Series: %(serie)s"
msgstr "Серии: %(serie)s"
-#: cps/web.py:1549
+#: cps/web.py:1452
msgid "Available languages"
msgstr "Доступные языки"
-#: cps/web.py:1569
+#: cps/web.py:1472
#, python-format
msgid "Language: %(name)s"
msgstr "Язык: %(name)s"
-#: cps/templates/index.xml:76 cps/web.py:1580
+#: cps/templates/index.xml:76 cps/web.py:1483
msgid "Category list"
msgstr "Категории"
-#: cps/web.py:1594
+#: cps/web.py:1497
#, python-format
msgid "Category: %(name)s"
msgstr "Категория: %(name)s"
-#: cps/templates/layout.html:71 cps/web.py:1725
+#: cps/templates/layout.html:71 cps/web.py:1628
msgid "Tasks"
msgstr "Задания"
-#: cps/web.py:1759
+#: cps/web.py:1662
msgid "Statistics"
msgstr "Статистика"
-#: cps/web.py:1867
+#: cps/web.py:1730
+msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
+msgstr ""
+
+#: cps/web.py:1775
msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
msgstr "Не удалось проверить домен обратного вызова, пожалуйста, выполните шаги для проверки домена в консоли разработчика Google."
-#: cps/web.py:1943
+#: cps/web.py:1851
msgid "Server restarted, please reload page"
msgstr "Сервер перезагружен, пожалуйста, перезагрузите страницу"
-#: cps/web.py:1946
+#: cps/web.py:1854
msgid "Performing shutdown of server, please close window"
msgstr "Производится остановка сервера, пожалуйста, закройте окно"
-#: cps/web.py:1965
-msgid "Update done"
-msgstr "Обновление закончено"
-
-#: cps/web.py:2035
+#: cps/web.py:1934
msgid "Published after "
msgstr "Опубликовано до "
-#: cps/web.py:2042
+#: cps/web.py:1941
msgid "Published before "
msgstr "Опубликовано после "
-#: cps/web.py:2056
+#: cps/web.py:1955
#, python-format
msgid "Rating <= %(rating)s"
msgstr "Рейтинг <= %(rating)s"
-#: cps/web.py:2058
+#: cps/web.py:1957
#, python-format
msgid "Rating >= %(rating)s"
msgstr "Рейтинг >= %(rating)s"
-#: cps/web.py:2119 cps/web.py:2128
+#: cps/web.py:2018 cps/web.py:2027
msgid "search"
msgstr "поиск"
#: cps/templates/index.xml:47 cps/templates/index.xml:51
-#: cps/templates/layout.html:146 cps/web.py:2195
+#: cps/templates/layout.html:146 cps/web.py:2094
msgid "Read Books"
msgstr "Прочитанные Книги"
#: cps/templates/index.xml:55 cps/templates/index.xml:59
-#: cps/templates/layout.html:148 cps/web.py:2198
+#: cps/templates/layout.html:148 cps/web.py:2097
msgid "Unread Books"
msgstr "Непрочитанные Книги"
-#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262
+#: cps/web.py:2145 cps/web.py:2147 cps/web.py:2149 cps/web.py:2161
msgid "Read a Book"
msgstr "Читать Книгу"
-#: cps/web.py:2321 cps/web.py:3230
+#: cps/web.py:2220 cps/web.py:3138
msgid "Please fill out all fields!"
msgstr "Пожалуйста, заполните все поля!"
-#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352
-#: cps/web.py:2354
+#: cps/web.py:2221 cps/web.py:2243 cps/web.py:2247 cps/web.py:2252
+#: cps/web.py:2254
msgid "register"
msgstr "регистрация"
-#: cps/web.py:2342 cps/web.py:3444
+#: cps/web.py:2242 cps/web.py:3357
msgid "An unknown error occurred. Please try again later."
msgstr "Неизвестная ошибка. Попробуйте позже."
-#: cps/web.py:2345
+#: cps/web.py:2245
msgid "Your e-mail is not allowed to register"
msgstr "Ваш e-mail не подходит для регистрации"
-#: cps/web.py:2348
+#: cps/web.py:2248
msgid "Confirmation e-mail was send to your e-mail account."
msgstr "Письмо с подтверждением отправлено вам на e-mail"
-#: cps/web.py:2351
+#: cps/web.py:2251
msgid "This username or e-mail address is already in use."
msgstr "Этот никнейм или e-mail уже используются"
-#: cps/web.py:2368 cps/web.py:2464
+#: cps/web.py:2268 cps/web.py:2364
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr "Вы вошли как пользователь '%(nickname)s'"
-#: cps/web.py:2373
+#: cps/web.py:2273
msgid "Wrong Username or Password"
msgstr "Ошибка в имени пользователя или пароле"
-#: cps/web.py:2379 cps/web.py:2400
+#: cps/web.py:2279 cps/web.py:2300
msgid "login"
msgstr "войти"
-#: cps/web.py:2412 cps/web.py:2443
+#: cps/web.py:2312 cps/web.py:2343
msgid "Token not found"
msgstr "Ключ не найден"
-#: cps/web.py:2420 cps/web.py:2451
+#: cps/web.py:2320 cps/web.py:2351
msgid "Token has expired"
msgstr "Ключ просрочен"
-#: cps/web.py:2428
+#: cps/web.py:2328
msgid "Success! Please return to your device"
msgstr "Успешно! Пожалуйста, проверьте свое устройство"
-#: cps/web.py:2478
+#: cps/web.py:2378
msgid "Please configure the SMTP mail settings first..."
msgstr "Пожалуйста, сначала сконфигурируйте параметры SMTP"
-#: cps/web.py:2483
+#: cps/web.py:2383
#, python-format
msgid "Book successfully queued for sending to %(kindlemail)s"
msgstr "Книга успешно поставлена в очередь для отправки на %(kindlemail)s"
-#: cps/web.py:2487
+#: cps/web.py:2387
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr "Ошибка при отправке книги: %(res)s"
-#: cps/web.py:2489 cps/web.py:3283
+#: cps/web.py:2389 cps/web.py:3191
msgid "Please configure your kindle e-mail address first..."
msgstr "Пожалуйста, сначала настройте e-mail на вашем kindle..."
-#: cps/web.py:2500 cps/web.py:2552
+#: cps/web.py:2400 cps/web.py:2452
msgid "Invalid shelf specified"
msgstr "Указана неверная полка"
-#: cps/web.py:2507
+#: cps/web.py:2407
#, python-format
msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s"
msgstr "Извините, но вам не разрешено добавлять книгу на полку: %(shelfname)s"
-#: cps/web.py:2515
+#: cps/web.py:2415
msgid "You are not allowed to edit public shelves"
msgstr "Вы не можете редактировать общедоступные полки"
-#: cps/web.py:2524
+#: cps/web.py:2424
#, python-format
msgid "Book is already part of the shelf: %(shelfname)s"
msgstr "Книги уже размещены на полке: %(shelfname)s"
-#: cps/web.py:2538
+#: cps/web.py:2438
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr "Книга добавлена на книжную полку: %(sname)s"
-#: cps/web.py:2557
+#: cps/web.py:2457
#, python-format
msgid "You are not allowed to add a book to the the shelf: %(name)s"
msgstr "Вам не разрешено добавлять книгу на полку: %(name)s"
-#: cps/web.py:2562
+#: cps/web.py:2462
msgid "User is not allowed to edit public shelves"
msgstr "Пользователь не может редактировать общедоступные полки"
-#: cps/web.py:2580
+#: cps/web.py:2480
#, python-format
msgid "Books are already part of the shelf: %(name)s"
msgstr "Книги уже размещены на полке: %(name)s"
-#: cps/web.py:2594
+#: cps/web.py:2494
#, python-format
msgid "Books have been added to shelf: %(sname)s"
msgstr "Книги добавлены в полку: %(sname)s"
-#: cps/web.py:2596
+#: cps/web.py:2496
#, python-format
msgid "Could not add books to shelf: %(sname)s"
msgstr "Не удалось добавить книги на полку: %(sname)s"
-#: cps/web.py:2633
+#: cps/web.py:2533
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr "Книга удалена с полки: %(sname)s"
-#: cps/web.py:2639
+#: cps/web.py:2539
#, python-format
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
msgstr "Извините, вы не можете удалить книгу с полки: %(sname)s"
-#: cps/web.py:2660 cps/web.py:2684
+#: cps/web.py:2560 cps/web.py:2584
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr "Полка с названием '%(title)s' уже существует."
-#: cps/web.py:2665
+#: cps/web.py:2565
#, python-format
msgid "Shelf %(title)s created"
msgstr "Создана полка %(title)s"
-#: cps/web.py:2667 cps/web.py:2695
+#: cps/web.py:2567 cps/web.py:2595
msgid "There was an error"
msgstr "Произошла ошибка"
-#: cps/web.py:2668 cps/web.py:2670
+#: cps/web.py:2568 cps/web.py:2570
msgid "create a shelf"
msgstr "создать полку"
-#: cps/web.py:2693
+#: cps/web.py:2593
#, python-format
msgid "Shelf %(title)s changed"
msgstr "Колка %(title)s изменена"
-#: cps/web.py:2696 cps/web.py:2698
+#: cps/web.py:2596 cps/web.py:2598
msgid "Edit a shelf"
msgstr "Изменить полку"
-#: cps/web.py:2719
+#: cps/web.py:2619
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr "удачно удалена полка %(name)s"
-#: cps/web.py:2746
+#: cps/web.py:2646
#, python-format
msgid "Shelf: '%(name)s'"
msgstr "Полка: '%(name)s'"
-#: cps/web.py:2749
+#: cps/web.py:2649
msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "Ошибка открытия Полки. Полка не существует или недоступна"
-#: cps/web.py:2780
+#: cps/web.py:2680
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr "Изменить расположение полки '%(name)s'"
-#: cps/web.py:2809 cps/web.py:3236
+#: cps/web.py:2709 cps/web.py:3144
msgid "E-mail is not from valid domain"
msgstr "E-mail не из существующей доменной зоны"
-#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856
+#: cps/web.py:2711 cps/web.py:2753 cps/web.py:2756
#, python-format
msgid "%(name)s's profile"
msgstr "Профиль %(name)s"
-#: cps/web.py:2851
+#: cps/web.py:2751
msgid "Found an existing account for this e-mail address."
msgstr "Этот адрес электронной почты уже зарегистрирован."
-#: cps/web.py:2854
+#: cps/web.py:2754
msgid "Profile updated"
msgstr "Профиль обновлён"
-#: cps/web.py:2882
+#: cps/web.py:2785
msgid "Admin page"
msgstr "Администрирование"
-#: cps/web.py:2964 cps/web.py:3139
+#: cps/web.py:2867 cps/web.py:3047
msgid "Calibre-Web configuration updated"
msgstr "Конфигурация Calibre-Web обновлена"
-#: cps/templates/admin.html:100 cps/web.py:2978
+#: cps/templates/admin.html:100 cps/web.py:2881
msgid "UI Configuration"
msgstr "Настройка интерфейса"
-#: cps/web.py:2996
+#: cps/web.py:2899
msgid "Import of optional Google Drive requirements missing"
msgstr "Импорт дополнительных требований к Google Диску отсутствует"
-#: cps/web.py:2999
+#: cps/web.py:2902
msgid "client_secrets.json is missing or not readable"
msgstr "client_secrets.json отсутствует или его невозможно прочесть"
-#: cps/web.py:3004 cps/web.py:3031
+#: cps/web.py:2907 cps/web.py:2936
msgid "client_secrets.json is not configured for web application"
msgstr "client_secrets.json не настроен для веб-приложения"
-#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072
-#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156
-#: cps/web.py:3172
+#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977
+#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3056 cps/web.py:3064
+#: cps/web.py:3080
msgid "Basic Configuration"
msgstr "Настройки сервера"
-#: cps/web.py:3057
+#: cps/web.py:2962
msgid "Keyfile location is not valid, please enter correct path"
msgstr "Неверное расположение файла-ключа, введите правильный путь"
-#: cps/web.py:3069
+#: cps/web.py:2974
msgid "Certfile location is not valid, please enter correct path"
msgstr "Неверное расположение сертификата, введите правильный путь"
-#: cps/web.py:3112
+#: cps/web.py:3019
msgid "Logfile location is not valid, please enter correct path"
msgstr "Неверное расположение лог-файла, введите правильный путь"
-#: cps/web.py:3152
+#: cps/web.py:3060
msgid "DB location is not valid, please enter correct path"
msgstr "Неверное расположение базы данных, введите правильный путь"
-#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254
+#: cps/templates/admin.html:33 cps/web.py:3140 cps/web.py:3146 cps/web.py:3162
msgid "Add new user"
msgstr "Добавить пользователя"
-#: cps/web.py:3244
+#: cps/web.py:3152
#, python-format
msgid "User '%(user)s' created"
msgstr "Пользователь '%(user)s' добавлен"
-#: cps/web.py:3248
+#: cps/web.py:3156
msgid "Found an existing account for this e-mail address or nickname."
msgstr "Для этого адреса электронной почты или логина уже есть аккаунт."
-#: cps/web.py:3278
+#: cps/web.py:3186
#, python-format
msgid "Test e-mail successfully send to %(kindlemail)s"
msgstr "Тестовое письмо успешно отправлено на %(kindlemail)s"
-#: cps/web.py:3281
+#: cps/web.py:3189
#, python-format
msgid "There was an error sending the Test e-mail: %(res)s"
msgstr "Произошла ошибка при отправке тестового письма на: %(res)s"
-#: cps/web.py:3285
+#: cps/web.py:3193
msgid "E-mail server settings updated"
msgstr "Настройки E-mail сервера обновлены"
-#: cps/web.py:3286
+#: cps/web.py:3194
msgid "Edit e-mail server settings"
msgstr "Изменить настройки e-mail сервера"
-#: cps/web.py:3311
+#: cps/web.py:3219
#, python-format
msgid "User '%(nick)s' deleted"
msgstr "Пользователь '%(nick)s' удалён"
-#: cps/web.py:3419
+#: cps/web.py:3332
#, python-format
msgid "User '%(nick)s' updated"
msgstr "Пользователь '%(nick)s' обновлён"
-#: cps/web.py:3422
+#: cps/web.py:3335
msgid "An unknown error occured."
msgstr "Произошла неизвестная ошибка."
-#: cps/web.py:3424
+#: cps/web.py:3337
#, python-format
msgid "Edit User %(nick)s"
msgstr "Изменить пользователя %(nick)s"
-#: cps/web.py:3441
+#: cps/web.py:3354
#, python-format
msgid "Password for user %(user)s reset"
msgstr "Пароль для пользователя %(user)s сброшен"
-#: cps/web.py:3455 cps/web.py:3661
+#: cps/web.py:3368 cps/web.py:3574
msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "Ошибка при открытии eBook. Файл не существует или файл недоступен"
-#: cps/web.py:3483 cps/web.py:3955
+#: cps/web.py:3396 cps/web.py:3868
msgid "edit metadata"
msgstr "изменить метаданные"
-#: cps/web.py:3576 cps/web.py:3823
+#: cps/web.py:3489 cps/web.py:3736
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Запрещена загрузка файлов с расширением '%(ext)s'"
-#: cps/web.py:3580 cps/web.py:3827
+#: cps/web.py:3493 cps/web.py:3740
msgid "File to be uploaded must have an extension"
msgstr "Загружаемый файл должен иметь расширение"
-#: cps/web.py:3592 cps/web.py:3847
+#: cps/web.py:3505 cps/web.py:3760
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Ошибка при создании пути %(path)s (Доступ запрещён)."
-#: cps/web.py:3597
+#: cps/web.py:3510
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Не удалось сохранить файл %(file)s."
-#: cps/web.py:3614
+#: cps/web.py:3527
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Формат файла %(ext)s добавлен в %(book)s"
-#: cps/web.py:3632
+#: cps/web.py:3545
#, python-format
msgid "Failed to create path for cover %(path)s (Permission denied)."
msgstr "Не удалось создать путь для обложки %(path)s (Доступ запрещён)."
-#: cps/web.py:3640
+#: cps/web.py:3553
#, python-format
msgid "Failed to store cover-file %(cover)s."
msgstr "Не удалось сохранить файл обложки %(cover)s."
-#: cps/web.py:3643
+#: cps/web.py:3556
msgid "Cover-file is not a valid image file"
msgstr "Файл обложки не соответствует изображению"
-#: cps/web.py:3673 cps/web.py:3682
+#: cps/web.py:3586 cps/web.py:3595
msgid "unknown"
msgstr "неизвестно"
-#: cps/web.py:3714
+#: cps/web.py:3627
msgid "Cover is not a jpg file, can't save"
msgstr "Обложка не jpg файл, невозможно сохранить"
-#: cps/web.py:3762
+#: cps/web.py:3675
#, python-format
msgid "%(langname)s is not a valid language"
msgstr "%(langname)s не допустимый язык"
-#: cps/web.py:3793
+#: cps/web.py:3706
msgid "Metadata successfully updated"
msgstr "Метаданные обновлены"
-#: cps/web.py:3802
+#: cps/web.py:3715
msgid "Error editing book, please check logfile for details"
msgstr "Ошибка редактирования книги. Пожалуйста, проверьте лог-файл для дополнительной информации"
-#: cps/web.py:3852
+#: cps/web.py:3765
#, python-format
msgid "Failed to store file %(file)s (Permission denied)."
msgstr "Ошибка записи файла %(file)s (Доступ запрещён)."
-#: cps/web.py:3857
+#: cps/web.py:3770
#, python-format
msgid "Failed to delete file %(file)s (Permission denied)."
msgstr "Ошибка удаления файла %(file)s (Доступ запрещён)."
-#: cps/web.py:3975
+#: cps/web.py:3888
msgid "Source or destination format for conversion missing"
msgstr "Исходный или целевой формат для конвертирования отсутствует"
-#: cps/web.py:3985
+#: cps/web.py:3898
#, python-format
msgid "Book successfully queued for converting to %(book_format)s"
msgstr "Книга успешно поставлена в очередь для конвертирования в %(book_format)s"
-#: cps/web.py:3989
+#: cps/web.py:3902
#, python-format
msgid "There was an error converting this book: %(res)s"
msgstr "Произошла ошибка при конвертирования этой книги: %(res)s"
-#: cps/worker.py:289
+#: cps/worker.py:305
#, python-format
msgid "Ebook-converter failed: %(error)s"
msgstr "Ошибка Ebook-конвертора: %(error)s"
-#: cps/worker.py:300
+#: cps/worker.py:316
#, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "Kindlegen - неудачно, с Ошибкой %(error)s. Сообщение: %(message)s"
@@ -902,10 +911,10 @@ msgstr "Ok"
#: cps/templates/admin.html:151 cps/templates/admin.html:165
#: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200
-#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175
+#: cps/templates/config_edit.html:226 cps/templates/config_view_edit.html:175
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
#: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19
-#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147
+#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:149
msgid "Back"
msgstr "Назад"
@@ -1035,10 +1044,10 @@ msgstr "смотреть книгу после редактирования"
msgid "Get metadata"
msgstr "Получить метаданные"
-#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210
+#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:224
#: cps/templates/config_view_edit.html:174 cps/templates/login.html:20
-#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17
-#: cps/templates/user_edit.html:145
+#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17
+#: cps/templates/user_edit.html:147
msgid "Submit"
msgstr "Отправить"
@@ -1111,114 +1120,138 @@ msgid "Authenticate Google Drive"
msgstr "Аутентификация Google Drive"
#: cps/templates/config_edit.html:40
+msgid "Please hit submit to continue with setup"
+msgstr ""
+
+#: cps/templates/config_edit.html:43
msgid "Please finish Google Drive setup after login"
msgstr "Завершите настройку Google Диска после входа в систему"
-#: cps/templates/config_edit.html:44
+#: cps/templates/config_edit.html:48
msgid "Google Drive Calibre folder"
msgstr "Google Диск Calibre папка"
-#: cps/templates/config_edit.html:52
+#: cps/templates/config_edit.html:56
msgid "Metadata Watch Channel ID"
msgstr "ID Канала Просмотра Метаданных"
-#: cps/templates/config_edit.html:55
+#: cps/templates/config_edit.html:59
msgid "Revoke"
msgstr "Отозвано"
-#: cps/templates/config_edit.html:73
+#: cps/templates/config_edit.html:78
msgid "Server Configuration"
msgstr "Настройки сервера"
-#: cps/templates/config_edit.html:80
+#: cps/templates/config_edit.html:85
msgid "Server Port"
msgstr "Порт сервера"
-#: cps/templates/config_edit.html:84
+#: cps/templates/config_edit.html:89
msgid "SSL certfile location (leave it empty for non-SSL Servers)"
msgstr "Расположение SSL сертификата (оставьте его пустым для серверов без SSL)"
-#: cps/templates/config_edit.html:88
+#: cps/templates/config_edit.html:93
msgid "SSL Keyfile location (leave it empty for non-SSL Servers)"
msgstr "Расположение SSL файла-ключа (оставьте его пустым для серверов без SSL)"
+#: cps/templates/config_edit.html:97
+msgid "Update channel"
+msgstr ""
+
#: cps/templates/config_edit.html:99
+msgid "Stable"
+msgstr ""
+
+#: cps/templates/config_edit.html:100
+msgid "Stable (Automatic)"
+msgstr ""
+
+#: cps/templates/config_edit.html:101
+msgid "Nightly"
+msgstr ""
+
+#: cps/templates/config_edit.html:102
+msgid "Nightly (Automatic)"
+msgstr ""
+
+#: cps/templates/config_edit.html:113
msgid "Logfile Configuration"
msgstr "Настройки лог-файла"
-#: cps/templates/config_edit.html:106
+#: cps/templates/config_edit.html:120
msgid "Log Level"
msgstr "Уровень Логирования"
-#: cps/templates/config_edit.html:115
+#: cps/templates/config_edit.html:129
msgid "Location and name of logfile (calibre-web.log for no entry)"
msgstr "Расположение и имя лог-файла (не вводите calibre-web.log)"
-#: cps/templates/config_edit.html:126
+#: cps/templates/config_edit.html:140
msgid "Feature Configuration"
msgstr "Дополнительный Настройки"
-#: cps/templates/config_edit.html:134
+#: cps/templates/config_edit.html:148
msgid "Enable uploading"
msgstr "Разрешить загрузку на сервер"
-#: cps/templates/config_edit.html:138
+#: cps/templates/config_edit.html:152
msgid "Enable anonymous browsing"
msgstr "Разрешить анонимный просмотр"
-#: cps/templates/config_edit.html:142
+#: cps/templates/config_edit.html:156
msgid "Enable public registration"
msgstr "Разрешить публичную регистрацию"
-#: cps/templates/config_edit.html:146
+#: cps/templates/config_edit.html:160
msgid "Enable remote login (\"magic link\")"
msgstr "Включить удаленный логин (\"magic link\")"
-#: cps/templates/config_edit.html:151
+#: cps/templates/config_edit.html:165
msgid "Use"
msgstr "Использовать"
-#: cps/templates/config_edit.html:152
+#: cps/templates/config_edit.html:166
msgid "Obtain an API Key"
msgstr "Получить ключ API"
-#: cps/templates/config_edit.html:156
+#: cps/templates/config_edit.html:170
msgid "Goodreads API Key"
msgstr "Ключ API Goodreads"
-#: cps/templates/config_edit.html:160
+#: cps/templates/config_edit.html:174
msgid "Goodreads API Secret"
msgstr "Goodreads API Секрет"
-#: cps/templates/config_edit.html:173
+#: cps/templates/config_edit.html:187
msgid "External binaries"
msgstr "Внешние двоичные файлы"
-#: cps/templates/config_edit.html:181
+#: cps/templates/config_edit.html:195
msgid "No converter"
msgstr "Нет конвертера"
-#: cps/templates/config_edit.html:183
+#: cps/templates/config_edit.html:197
msgid "Use Kindlegen"
msgstr "Использовать Kindlegen"
-#: cps/templates/config_edit.html:185
+#: cps/templates/config_edit.html:199
msgid "Use calibre's ebook converter"
msgstr "Использовать конвертер calibre's ebook"
-#: cps/templates/config_edit.html:189
+#: cps/templates/config_edit.html:203
msgid "E-Book converter settings"
msgstr "Настройки конвертера E-Book"
-#: cps/templates/config_edit.html:193
+#: cps/templates/config_edit.html:207
msgid "Path to convertertool"
msgstr "Путь к конвертеру"
-#: cps/templates/config_edit.html:199
+#: cps/templates/config_edit.html:213
msgid "Location of Unrar binary"
msgstr "Расположение двоичного файла Unrar"
-#: cps/templates/config_edit.html:215 cps/templates/layout.html:82
+#: cps/templates/config_edit.html:229 cps/templates/layout.html:82
#: cps/templates/login.html:4
msgid "Login"
msgstr "Логин"
@@ -1268,31 +1301,31 @@ msgstr "Теги для Зрелого Контента"
msgid "Default settings for new users"
msgstr "Настройки по умолчанию для новых пользователей"
-#: cps/templates/config_view_edit.html:77 cps/templates/user_edit.html:102
+#: cps/templates/config_view_edit.html:77 cps/templates/user_edit.html:104
msgid "Admin user"
msgstr "Управление сервером"
-#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:111
+#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:113
msgid "Allow Downloads"
msgstr "Разрешить скачивание с сервера"
-#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:115
+#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:117
msgid "Allow Uploads"
msgstr "Разрешить загрузку на сервер"
-#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:119
+#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:121
msgid "Allow Edit"
msgstr "Разрешить редактирование книг"
-#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:123
+#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:125
msgid "Allow Delete books"
msgstr "Разрешить удаление книг"
-#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:128
+#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:130
msgid "Allow Changing Password"
msgstr "Разрешить смену пароля"
-#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:132
+#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:134
msgid "Allow Editing Public Shelfs"
msgstr "Разрешить редактирование публичных книжных полок"
@@ -1340,15 +1373,15 @@ msgstr "Показывать выбор автора"
msgid "Show publisher selection"
msgstr "Показать выбор издателя"
-#: cps/templates/config_view_edit.html:159 cps/templates/user_edit.html:90
+#: cps/templates/config_view_edit.html:159 cps/templates/user_edit.html:91
msgid "Show read and unread"
msgstr "Показывать прочитанные и непрочитанные"
-#: cps/templates/config_view_edit.html:163 cps/templates/user_edit.html:94
+#: cps/templates/config_view_edit.html:163 cps/templates/user_edit.html:96
msgid "Show random books in detail view"
msgstr "Показывать случайные книги при просмотре деталей"
-#: cps/templates/config_view_edit.html:167 cps/templates/user_edit.html:107
+#: cps/templates/config_view_edit.html:167 cps/templates/user_edit.html:109
msgid "Show mature content"
msgstr "Показывать взрослый контент"
@@ -1733,6 +1766,10 @@ msgstr "Вертикально"
msgid "PDF.js viewer"
msgstr "Просмотровщик PDF.js"
+#: cps/templates/readpdf.html:418
+msgid "Preparing document for printing..."
+msgstr ""
+
#: cps/templates/readtxt.html:6
msgid "Basic txt Reader"
msgstr "Средство для чтения txt-файлов"
@@ -1917,47 +1954,1265 @@ msgstr "Показать книги на языках"
msgid "Show all"
msgstr "Показать все"
-#: cps/templates/user_edit.html:139
+#: cps/templates/user_edit.html:141
msgid "Delete this user"
msgstr "Удалить этого пользователя"
-#: cps/templates/user_edit.html:154
+#: cps/templates/user_edit.html:156
msgid "Recent Downloads"
msgstr "Недавние скачивания"
-#~ msgid "E-mail: %s"
-#~ msgstr "Почта: %s"
+#~ msgid "Afar"
+#~ msgstr "Афар"
-#~ msgid "Current commit timestamp"
-#~ msgstr "Текущая метка фиксации"
+#~ msgid "Abkhazian"
+#~ msgstr "Абхазский"
-#~ msgid "Newest commit timestamp"
-#~ msgstr "Новая метка фиксации"
+#~ msgid "Achinese"
+#~ msgstr "Ачехский"
-#~ msgid "Choose a password"
-#~ msgstr "Выберите пароль"
+#~ msgid "Acoli"
+#~ msgstr "Ачоли"
-#~ msgid "Convert: %(book)s"
-#~ msgstr "Конвертировать: %(book)s"
+#~ msgid "Adangme"
+#~ msgstr "Адангме"
-#~ msgid "Convert to %(format)s: %(book)s"
-#~ msgstr "Конвертировать в %(format)s: %(book)s"
+#~ msgid "Adyghe"
+#~ msgstr "Адыгейский"
-#~ msgid "Files are replaced"
-#~ msgstr "Файлы заменены"
+#~ msgid "Afrihili"
+#~ msgstr "Африхили"
-#~ msgid "Server is stopped"
-#~ msgstr "Сервер остановлен"
+#~ msgid "Afrikaans"
+#~ msgstr "Африкаанс"
-#~ msgid "Convertertool %(converter)s not found"
-#~ msgstr "Инструмент конвертирования %(converter)s не найден"
+#~ msgid "Ainu (Japan)"
+#~ msgstr ""
-#~ msgid "Could not find any formats suitable for sending by e-mail"
-#~ msgstr "Не удалось найти форматы, которые подходят для отправки по e-mail"
+#~ msgid "Akan"
+#~ msgstr "Акан"
-#~ msgid "File %(file)s uploaded"
-#~ msgstr "Файл %(file)s загружен"
+#~ msgid "Akkadian"
+#~ msgstr "Аккадский"
-#~ msgid "Author list"
-#~ msgstr "Авторы"
+#~ msgid "Aleut"
+#~ msgstr "Алеутский"
+
+#~ msgid "Altai; Southern"
+#~ msgstr ""
+
+#~ msgid "Amharic"
+#~ msgstr "Амхарский (Амаринья)"
+
+#~ msgid "English; Old (ca. 450-1100)"
+#~ msgstr ""
+
+#~ msgid "Angika"
+#~ msgstr "Анжика"
+
+#~ msgid "Arabic"
+#~ msgstr "Арабский"
+
+#~ msgid "Aramaic; Official (700-300 BCE)"
+#~ msgstr "Арамейский; Официальный"
+
+#~ msgid "Aragonese"
+#~ msgstr "Арагонский"
+
+#~ msgid "Mapudungun"
+#~ msgstr ""
+
+#~ msgid "Arapaho"
+#~ msgstr "Арапахо"
+
+#~ msgid "Arawak"
+#~ msgstr "Аравакский"
+
+#~ msgid "Assamese"
+#~ msgstr "Ассамский"
+
+#~ msgid "Asturian"
+#~ msgstr "Астурийский"
+
+#~ msgid "Avaric"
+#~ msgstr "Аварский"
+
+#~ msgid "Avestan"
+#~ msgstr "Авестийский"
+
+#~ msgid "Awadhi"
+#~ msgstr "Авадхи"
+
+#~ msgid "Aymara"
+#~ msgstr "Аймара"
+
+#~ msgid "Azerbaijani"
+#~ msgstr "Азербайджанский"
+
+#~ msgid "Bashkir"
+#~ msgstr "Башкирский"
+
+#~ msgid "Baluchi"
+#~ msgstr ""
+
+#~ msgid "Bambara"
+#~ msgstr "Бамбара"
+
+#~ msgid "Balinese"
+#~ msgstr "Балийский"
+
+#~ msgid "Basa (Cameroon)"
+#~ msgstr "Баса (Камерун)"
+
+#~ msgid "Beja"
+#~ msgstr "Беджа"
+
+#~ msgid "Belarusian"
+#~ msgstr "Белорусский"
+
+#~ msgid "Bemba (Zambia)"
+#~ msgstr "Бемба (Замбия)"
+
+#~ msgid "Bengali"
+#~ msgstr "Бенгальский"
+
+#~ msgid "Bhojpuri"
+#~ msgstr "Бходжпури"
+
+#~ msgid "Bikol"
+#~ msgstr "Бикольский"
+
+#~ msgid "Bini"
+#~ msgstr "Бини"
+
+#~ msgid "Bislama"
+#~ msgstr "Бислама"
+
+#~ msgid "Siksika"
+#~ msgstr "Сиксика"
+
+#~ msgid "Tibetan"
+#~ msgstr "Тибетский"
+
+#~ msgid "Bosnian"
+#~ msgstr "Боснийский"
+
+#~ msgid "Braj"
+#~ msgstr "Браун"
+
+#~ msgid "Breton"
+#~ msgstr "Бретонский"
+
+#~ msgid "Buriat"
+#~ msgstr "Бурятский"
+
+#~ msgid "Buginese"
+#~ msgstr "Бугийский"
+
+#~ msgid "Bulgarian"
+#~ msgstr "Болгарский"
+
+#~ msgid "Bilin"
+#~ msgstr ""
+
+#~ msgid "Caddo"
+#~ msgstr "Каддо"
+
+#~ msgid "Carib; Galibi"
+#~ msgstr ""
+
+#~ msgid "Catalan"
+#~ msgstr "Каталанский"
+
+#~ msgid "Cebuano"
+#~ msgstr "Себуано"
+
+#~ msgid "Czech"
+#~ msgstr "Чешский"
+
+#~ msgid "Chamorro"
+#~ msgstr "Чаморро"
+
+#~ msgid "Chibcha"
+#~ msgstr "Чибча"
+
+#~ msgid "Chechen"
+#~ msgstr "Чеченский"
+
+#~ msgid "Chagatai"
+#~ msgstr "Чагатайский"
+
+#~ msgid "Chuukese"
+#~ msgstr "Трукский"
+
+#~ msgid "Mari (Russia)"
+#~ msgstr "Марийский (Россия)"
+
+#~ msgid "Chinook jargon"
+#~ msgstr "Чинук жаргон"
+
+#~ msgid "Choctaw"
+#~ msgstr "Чоктав"
+
+#~ msgid "Chipewyan"
+#~ msgstr "Чипевианский"
+
+#~ msgid "Cherokee"
+#~ msgstr "Чероки"
+
+#~ msgid "Slavonic; Old"
+#~ msgstr ""
+
+#~ msgid "Chuvash"
+#~ msgstr "Чувашский"
+
+#~ msgid "Cheyenne"
+#~ msgstr "Чейенн"
+
+#~ msgid "Coptic"
+#~ msgstr "Коптский"
+
+#~ msgid "Cornish"
+#~ msgstr "Корнский"
+
+#~ msgid "Corsican"
+#~ msgstr "Корсиканский"
+
+#~ msgid "Cree"
+#~ msgstr "Кри"
+
+#~ msgid "Turkish; Crimean"
+#~ msgstr ""
+
+#~ msgid "Kashubian"
+#~ msgstr "Кашубианский"
+
+#~ msgid "Welsh"
+#~ msgstr "Уэльский (Валлийский)"
+
+#~ msgid "Dakota"
+#~ msgstr "Дакота"
+
+#~ msgid "Danish"
+#~ msgstr "Датский"
+
+#~ msgid "Dargwa"
+#~ msgstr "Даргва"
+
+#~ msgid "Delaware"
+#~ msgstr "Делаварский"
+
+#~ msgid "Slave (Athapascan)"
+#~ msgstr "Атапачские языки"
+
+#~ msgid "German"
+#~ msgstr "Немецкий"
+
+#~ msgid "Dogrib"
+#~ msgstr "Догриб"
+
+#~ msgid "Dinka"
+#~ msgstr "Динка"
+
+#~ msgid "Dhivehi"
+#~ msgstr ""
+
+#~ msgid "Dogri (macrolanguage)"
+#~ msgstr ""
+
+#~ msgid "Sorbian; Lower"
+#~ msgstr ""
+
+#~ msgid "Duala"
+#~ msgstr "Дуала"
+
+#~ msgid "Dutch; Middle (ca. 1050-1350)"
+#~ msgstr ""
+
+#~ msgid "Dyula"
+#~ msgstr "Диула (Дьюла)"
+
+#~ msgid "Dzongkha"
+#~ msgstr "Дзонг-кэ"
+
+#~ msgid "Efik"
+#~ msgstr "Эфик"
+
+#~ msgid "Egyptian (Ancient)"
+#~ msgstr "Древнеегипетский"
+
+#~ msgid "Ekajuk"
+#~ msgstr "Экаджук"
+
+#~ msgid "Greek; Modern (1453-)"
+#~ msgstr "Новогреческий (с 1453)"
+
+#~ msgid "Elamite"
+#~ msgstr "Эламский"
+
+#~ msgid "English"
+#~ msgstr "Английский"
+
+#~ msgid "English; Middle (1100-1500)"
+#~ msgstr "Среднеанглийский (1100-1500)"
+
+#~ msgid "Esperanto"
+#~ msgstr "Эсперанто"
+
+#~ msgid "Estonian"
+#~ msgstr "Эстонский"
+
+#~ msgid "Basque"
+#~ msgstr "Баскский"
+
+#~ msgid "Ewe"
+#~ msgstr "Эве"
+
+#~ msgid "Ewondo"
+#~ msgstr "Эвондо"
+
+#~ msgid "Fang (Equatorial Guinea)"
+#~ msgstr ""
+
+#~ msgid "Faroese"
+#~ msgstr "Фарерский"
+
+#~ msgid "Persian"
+#~ msgstr "Персидский"
+
+#~ msgid "Fanti"
+#~ msgstr "Фанти"
+
+#~ msgid "Fijian"
+#~ msgstr "Фиджийский"
+
+#~ msgid "Filipino"
+#~ msgstr ""
+
+#~ msgid "Finnish"
+#~ msgstr "Финский"
+
+#~ msgid "Fon"
+#~ msgstr "Фон"
+
+#~ msgid "French"
+#~ msgstr "Французский"
+
+#~ msgid "French; Middle (ca. 1400-1600)"
+#~ msgstr ""
+
+#~ msgid "French; Old (842-ca. 1400)"
+#~ msgstr ""
+
+#~ msgid "Frisian; Northern"
+#~ msgstr ""
+
+#~ msgid "Frisian; Eastern"
+#~ msgstr ""
+
+#~ msgid "Frisian; Western"
+#~ msgstr ""
+
+#~ msgid "Fulah"
+#~ msgstr "Фулах"
+
+#~ msgid "Friulian"
+#~ msgstr "Фриулианский"
+
+#~ msgid "Ga"
+#~ msgstr "Га"
+
+#~ msgid "Gayo"
+#~ msgstr "Гайо"
+
+#~ msgid "Gbaya (Central African Republic)"
+#~ msgstr ""
+
+#~ msgid "Geez"
+#~ msgstr "Геэз"
+
+#~ msgid "Gilbertese"
+#~ msgstr "Гильбертский"
+
+#~ msgid "Gaelic; Scottish"
+#~ msgstr ""
+
+#~ msgid "Irish"
+#~ msgstr "Ирландский"
+
+#~ msgid "Galician"
+#~ msgstr ""
+
+#~ msgid "Manx"
+#~ msgstr "Мэнкский"
+
+#~ msgid "German; Middle High (ca. 1050-1500)"
+#~ msgstr ""
+
+#~ msgid "German; Old High (ca. 750-1050)"
+#~ msgstr ""
+
+#~ msgid "Gondi"
+#~ msgstr "Гонди"
+
+#~ msgid "Gorontalo"
+#~ msgstr "Горонтало"
+
+#~ msgid "Gothic"
+#~ msgstr "Готский"
+
+#~ msgid "Grebo"
+#~ msgstr "Гребо"
+
+#~ msgid "Greek; Ancient (to 1453)"
+#~ msgstr "Древнегреческий (по 1453)"
+
+#~ msgid "Guarani"
+#~ msgstr "Гуарани"
+
+#~ msgid "German; Swiss"
+#~ msgstr ""
+
+#~ msgid "Gujarati"
+#~ msgstr "Гуджарати"
+
+#~ msgid "Gwichʼin"
+#~ msgstr ""
+
+#~ msgid "Haida"
+#~ msgstr "Хайда"
+
+#~ msgid "Creole; Haitian"
+#~ msgstr ""
+
+#~ msgid "Hausa"
+#~ msgstr "Хауса"
+
+#~ msgid "Hawaiian"
+#~ msgstr "Гавайский"
+
+#~ msgid "Hebrew"
+#~ msgstr "Иврит"
+
+#~ msgid "Herero"
+#~ msgstr "Гереро"
+
+#~ msgid "Hiligaynon"
+#~ msgstr "Хилигайнон"
+
+#~ msgid "Hindi"
+#~ msgstr "Хинди"
+
+#~ msgid "Hittite"
+#~ msgstr "Хиттит"
+
+#~ msgid "Hmong"
+#~ msgstr "Хмонг"
+
+#~ msgid "Hiri Motu"
+#~ msgstr "Хири Моту"
+
+#~ msgid "Croatian"
+#~ msgstr "Хорватский"
+
+#~ msgid "Sorbian; Upper"
+#~ msgstr ""
+
+#~ msgid "Hungarian"
+#~ msgstr "Венгерский"
+
+#~ msgid "Hupa"
+#~ msgstr "Хупа"
+
+#~ msgid "Armenian"
+#~ msgstr "Армянский"
+
+#~ msgid "Iban"
+#~ msgstr "Ибанский"
+
+#~ msgid "Igbo"
+#~ msgstr "Игбо"
+
+#~ msgid "Ido"
+#~ msgstr "Идо"
+
+#~ msgid "Yi; Sichuan"
+#~ msgstr ""
+
+#~ msgid "Inuktitut"
+#~ msgstr "Инуктитут"
+
+#~ msgid "Interlingue"
+#~ msgstr "Интерлингве"
+
+#~ msgid "Iloko"
+#~ msgstr "Илоко"
+
+#~ msgid "Interlingua (International Auxiliary Language Association)"
+#~ msgstr "Интерлингва (Ассоциация международного вспомогательного языка)"
+
+#~ msgid "Indonesian"
+#~ msgstr "Индонезийский"
+
+#~ msgid "Ingush"
+#~ msgstr "Ингушский"
+
+#~ msgid "Inupiaq"
+#~ msgstr "Инулиак"
+
+#~ msgid "Icelandic"
+#~ msgstr "Исландский"
+
+#~ msgid "Italian"
+#~ msgstr "Итальянский"
+
+#~ msgid "Javanese"
+#~ msgstr "Яванский"
+
+#~ msgid "Lojban"
+#~ msgstr "Лоджбан"
+
+#~ msgid "Japanese"
+#~ msgstr "Японский"
+
+#~ msgid "Judeo-Persian"
+#~ msgstr "Еврейско-персидский"
+
+#~ msgid "Judeo-Arabic"
+#~ msgstr "Еврейско-арабский"
+
+#~ msgid "Kara-Kalpak"
+#~ msgstr "Каракалпакский"
+
+#~ msgid "Kabyle"
+#~ msgstr "Кабильский"
+
+#~ msgid "Kachin"
+#~ msgstr "Качинский"
+
+#~ msgid "Kalaallisut"
+#~ msgstr ""
+
+#~ msgid "Kamba (Kenya)"
+#~ msgstr ""
+
+#~ msgid "Kannada"
+#~ msgstr "Каннада"
+
+#~ msgid "Kashmiri"
+#~ msgstr "Кашмири"
+
+#~ msgid "Georgian"
+#~ msgstr "Грузинский"
+
+#~ msgid "Kanuri"
+#~ msgstr "Канури"
+
+#~ msgid "Kawi"
+#~ msgstr "Кави"
+
+#~ msgid "Kazakh"
+#~ msgstr "Казахский"
+
+#~ msgid "Kabardian"
+#~ msgstr "Кабардинский"
+
+#~ msgid "Khasi"
+#~ msgstr "Кхаси"
+
+#~ msgid "Khmer; Central"
+#~ msgstr ""
+
+#~ msgid "Khotanese"
+#~ msgstr "Хотанский"
+
+#~ msgid "Kikuyu"
+#~ msgstr "Кикуйю"
+
+#~ msgid "Kinyarwanda"
+#~ msgstr "Киньяруанда"
+
+#~ msgid "Kirghiz"
+#~ msgstr "Киргизский"
+
+#~ msgid "Kimbundu"
+#~ msgstr "Кимбунду"
+
+#~ msgid "Konkani (macrolanguage)"
+#~ msgstr ""
+
+#~ msgid "Komi"
+#~ msgstr "Коми"
+
+#~ msgid "Kongo"
+#~ msgstr "Конго"
+
+#~ msgid "Korean"
+#~ msgstr "Корейский"
+
+#~ msgid "Kosraean"
+#~ msgstr "Косраинский"
+
+#~ msgid "Kpelle"
+#~ msgstr "Кпелле"
+
+#~ msgid "Karachay-Balkar"
+#~ msgstr "Карачаево-балкарский"
+
+#~ msgid "Karelian"
+#~ msgstr "Карельский"
+
+#~ msgid "Kurukh"
+#~ msgstr "Курух"
+
+#~ msgid "Kuanyama"
+#~ msgstr "Киньяма"
+
+#~ msgid "Kumyk"
+#~ msgstr "Кумыкский"
+
+#~ msgid "Kurdish"
+#~ msgstr "Курдский"
+
+#~ msgid "Kutenai"
+#~ msgstr "Кутенаи"
+
+#~ msgid "Ladino"
+#~ msgstr "Ладино"
+
+#~ msgid "Lahnda"
+#~ msgstr "Лахнда"
+
+#~ msgid "Lamba"
+#~ msgstr "Ламба"
+
+#~ msgid "Lao"
+#~ msgstr "Лаосский"
+
+#~ msgid "Latin"
+#~ msgstr "Латинский"
+
+#~ msgid "Latvian"
+#~ msgstr "Латвийский"
+
+#~ msgid "Lezghian"
+#~ msgstr "Лезгинский"
+
+#~ msgid "Limburgan"
+#~ msgstr ""
+
+#~ msgid "Lingala"
+#~ msgstr "Лингала"
+
+#~ msgid "Lithuanian"
+#~ msgstr "Литовский"
+
+#~ msgid "Mongo"
+#~ msgstr "Монго"
+
+#~ msgid "Lozi"
+#~ msgstr "Лози"
+
+#~ msgid "Luxembourgish"
+#~ msgstr ""
+
+#~ msgid "Luba-Lulua"
+#~ msgstr "Луба-Лулуа"
+
+#~ msgid "Luba-Katanga"
+#~ msgstr "Луба-Катанга"
+
+#~ msgid "Ganda"
+#~ msgstr "Ганда"
+
+#~ msgid "Luiseno"
+#~ msgstr "Луисеньо"
+
+#~ msgid "Lunda"
+#~ msgstr "Лунда"
+
+#~ msgid "Luo (Kenya and Tanzania)"
+#~ msgstr "Луо (Кения и Танзания)"
+
+#~ msgid "Lushai"
+#~ msgstr "Лушай"
+
+#~ msgid "Madurese"
+#~ msgstr "Мадурский"
+
+#~ msgid "Magahi"
+#~ msgstr "Магахи"
+
+#~ msgid "Marshallese"
+#~ msgstr ""
+
+#~ msgid "Maithili"
+#~ msgstr "Майтхили"
+
+#~ msgid "Makasar"
+#~ msgstr "Макассарский"
+
+#~ msgid "Malayalam"
+#~ msgstr "Малаялам"
+
+#~ msgid "Mandingo"
+#~ msgstr "Мандинго"
+
+#~ msgid "Marathi"
+#~ msgstr "Маратхи"
+
+#~ msgid "Masai"
+#~ msgstr "Масаи"
+
+#~ msgid "Moksha"
+#~ msgstr "Мокшанский"
+
+#~ msgid "Mandar"
+#~ msgstr "Мандарский"
+
+#~ msgid "Mende (Sierra Leone)"
+#~ msgstr ""
+
+#~ msgid "Irish; Middle (900-1200)"
+#~ msgstr "Среднеирландский (900-1200)"
+
+#~ msgid "Mi'kmaq"
+#~ msgstr ""
+
+#~ msgid "Minangkabau"
+#~ msgstr "Минангкабау"
+
+#~ msgid "Uncoded languages"
+#~ msgstr ""
+
+#~ msgid "Macedonian"
+#~ msgstr "Македонский"
+
+#~ msgid "Malagasy"
+#~ msgstr "Малагаси"
+
+#~ msgid "Maltese"
+#~ msgstr "Мальтийский"
+
+#~ msgid "Manchu"
+#~ msgstr "Манчу"
+
+#~ msgid "Manipuri"
+#~ msgstr "Манипури"
+
+#~ msgid "Mohawk"
+#~ msgstr "Мохаук"
+
+#~ msgid "Mongolian"
+#~ msgstr "Монгольский"
+
+#~ msgid "Mossi"
+#~ msgstr "Моей"
+
+#~ msgid "Maori"
+#~ msgstr "Маори"
+
+#~ msgid "Malay (macrolanguage)"
+#~ msgstr ""
+
+#~ msgid "Multiple languages"
+#~ msgstr "Разных семей языки"
+
+#~ msgid "Creek"
+#~ msgstr "Крик"
+
+#~ msgid "Mirandese"
+#~ msgstr "Мирандские"
+
+#~ msgid "Marwari"
+#~ msgstr "Марвари"
+
+#~ msgid "Burmese"
+#~ msgstr "Бирманский"
+
+#~ msgid "Erzya"
+#~ msgstr "Эрзянский"
+
+#~ msgid "Neapolitan"
+#~ msgstr "Неаполитанский"
+
+#~ msgid "Nauru"
+#~ msgstr "Науру"
+
+#~ msgid "Navajo"
+#~ msgstr ""
+
+#~ msgid "Ndebele; South"
+#~ msgstr "Ндебеле южный"
+
+#~ msgid "Ndebele; North"
+#~ msgstr "Ндебеле северный"
+
+#~ msgid "Ndonga"
+#~ msgstr "Ндунга"
+
+#~ msgid "German; Low"
+#~ msgstr ""
+
+#~ msgid "Nepali"
+#~ msgstr "Непальский"
+
+#~ msgid "Bhasa; Nepal"
+#~ msgstr ""
+
+#~ msgid "Nias"
+#~ msgstr "Ниас"
+
+#~ msgid "Niuean"
+#~ msgstr "Ниуэ"
+
+#~ msgid "Dutch"
+#~ msgstr "Нидерландский"
+
+#~ msgid "Norwegian Nynorsk"
+#~ msgstr "Норвежский Нюнорск"
+
+#~ msgid "Norwegian Bokmål"
+#~ msgstr ""
+
+#~ msgid "Nogai"
+#~ msgstr "Ногайский"
+
+#~ msgid "Norse; Old"
+#~ msgstr "Старонорвежский"
+
+#~ msgid "Norwegian"
+#~ msgstr "Норвежский"
+
+#~ msgid "N'Ko"
+#~ msgstr "Н'ко"
+
+#~ msgid "Sotho; Northern"
+#~ msgstr ""
+
+#~ msgid "Newari; Old"
+#~ msgstr ""
+
+#~ msgid "Nyanja"
+#~ msgstr ""
+
+#~ msgid "Nyamwezi"
+#~ msgstr "Ньямвези"
+
+#~ msgid "Nyankole"
+#~ msgstr "Ньянколе"
+
+#~ msgid "Nyoro"
+#~ msgstr "Ньоро"
+
+#~ msgid "Nzima"
+#~ msgstr "Нзима"
+
+#~ msgid "Occitan (post 1500)"
+#~ msgstr ""
+
+#~ msgid "Ojibwa"
+#~ msgstr "Оджибва"
+
+#~ msgid "Oriya"
+#~ msgstr "Ория"
+
+#~ msgid "Oromo"
+#~ msgstr "Оромо"
+
+#~ msgid "Osage"
+#~ msgstr "Оседжи"
+
+#~ msgid "Ossetian"
+#~ msgstr ""
+
+#~ msgid "Turkish; Ottoman (1500-1928)"
+#~ msgstr "Турецкий; Отомангский (1500-1928)"
+
+#~ msgid "Pangasinan"
+#~ msgstr "Пангасинан"
+
+#~ msgid "Pahlavi"
+#~ msgstr "Пехлевийский"
+
+#~ msgid "Pampanga"
+#~ msgstr "Пампанга"
+
+#~ msgid "Panjabi"
+#~ msgstr ""
+
+#~ msgid "Papiamento"
+#~ msgstr "Папьяменто"
+
+#~ msgid "Palauan"
+#~ msgstr "Палау"
+
+#~ msgid "Persian; Old (ca. 600-400 B.C.)"
+#~ msgstr ""
+
+#~ msgid "Phoenician"
+#~ msgstr "Финикийский"
+
+#~ msgid "Pali"
+#~ msgstr "Пали"
+
+#~ msgid "Polish"
+#~ msgstr "Польский"
+
+#~ msgid "Pohnpeian"
+#~ msgstr "Фонпейский"
+
+#~ msgid "Portuguese"
+#~ msgstr "Португальский"
+
+#~ msgid "Provençal; Old (to 1500)"
+#~ msgstr "Старопровансальский (по 1500)"
+
+#~ msgid "Pushto"
+#~ msgstr "Пушту"
+
+#~ msgid "Quechua"
+#~ msgstr "Кечуа"
+
+#~ msgid "Rajasthani"
+#~ msgstr "Раджастхани"
+
+#~ msgid "Rapanui"
+#~ msgstr "Рапаню"
+
+#~ msgid "Maori; Cook Islands"
+#~ msgstr ""
+
+#~ msgid "Romansh"
+#~ msgstr ""
+
+#~ msgid "Romany"
+#~ msgstr "Цыганский"
+
+#~ msgid "Romanian"
+#~ msgstr "Румынский"
+
+#~ msgid "Rundi"
+#~ msgstr "Рунди"
+
+#~ msgid "Romanian; Macedo-"
+#~ msgstr ""
+
+#~ msgid "Russian"
+#~ msgstr "Русский"
+
+#~ msgid "Sandawe"
+#~ msgstr "Сандаве"
+
+#~ msgid "Sango"
+#~ msgstr "Санго"
+
+#~ msgid "Yakut"
+#~ msgstr "Якутский"
+
+#~ msgid "Aramaic; Samaritan"
+#~ msgstr ""
+
+#~ msgid "Sanskrit"
+#~ msgstr "Санскрит"
+
+#~ msgid "Sasak"
+#~ msgstr "Сасакский"
+
+#~ msgid "Santali"
+#~ msgstr "Сантали"
+
+#~ msgid "Sicilian"
+#~ msgstr "Сицилийский"
+
+#~ msgid "Scots"
+#~ msgstr "Шотландский"
+
+#~ msgid "Selkup"
+#~ msgstr "Селкапский"
+
+#~ msgid "Irish; Old (to 900)"
+#~ msgstr "Староирландский (по 900)"
+
+#~ msgid "Shan"
+#~ msgstr "Шанский"
+
+#~ msgid "Sidamo"
+#~ msgstr "Сидама"
+
+#~ msgid "Sinhala"
+#~ msgstr "Сингальский"
+
+#~ msgid "Slovak"
+#~ msgstr "Словацкий"
+
+#~ msgid "Slovenian"
+#~ msgstr "Словенский"
+
+#~ msgid "Sami; Southern"
+#~ msgstr ""
+
+#~ msgid "Sami; Northern"
+#~ msgstr ""
+
+#~ msgid "Lule Sami"
+#~ msgstr "Люле-саамский"
+
+#~ msgid "Sami; Inari"
+#~ msgstr ""
+
+#~ msgid "Samoan"
+#~ msgstr "Самоанский"
+
+#~ msgid "Sami; Skolt"
+#~ msgstr ""
+
+#~ msgid "Shona"
+#~ msgstr "Шона"
+
+#~ msgid "Sindhi"
+#~ msgstr "Синдхи"
+
+#~ msgid "Soninke"
+#~ msgstr "Сонинк"
+
+#~ msgid "Sogdian"
+#~ msgstr "Согдийский"
+
+#~ msgid "Somali"
+#~ msgstr "Сомали"
+
+#~ msgid "Sotho; Southern"
+#~ msgstr "Сото Южный"
+
+#~ msgid "Spanish"
+#~ msgstr "Испанский"
+
+#~ msgid "Albanian"
+#~ msgstr "Албанский"
+
+#~ msgid "Sardinian"
+#~ msgstr "Сардинский"
+
+#~ msgid "Sranan Tongo"
+#~ msgstr ""
+
+#~ msgid "Serbian"
+#~ msgstr "Сербский"
+
+#~ msgid "Serer"
+#~ msgstr "Серер"
+
+#~ msgid "Swati"
+#~ msgstr "Свати"
+
+#~ msgid "Sukuma"
+#~ msgstr "Сукума"
+
+#~ msgid "Sundanese"
+#~ msgstr "Сунданский"
+
+#~ msgid "Susu"
+#~ msgstr "Сусу"
+
+#~ msgid "Sumerian"
+#~ msgstr "Шумерский"
+
+#~ msgid "Swahili (macrolanguage)"
+#~ msgstr ""
+
+#~ msgid "Swedish"
+#~ msgstr "Шведский"
+
+#~ msgid "Syriac; Classical"
+#~ msgstr ""
+
+#~ msgid "Syriac"
+#~ msgstr "Сирийский"
+
+#~ msgid "Tahitian"
+#~ msgstr "Таитянский"
+
+#~ msgid "Tamil"
+#~ msgstr "Тамильский"
+
+#~ msgid "Tatar"
+#~ msgstr "Татарский"
+
+#~ msgid "Telugu"
+#~ msgstr "Телугу"
+
+#~ msgid "Timne"
+#~ msgstr "Темне"
+
+#~ msgid "Tereno"
+#~ msgstr "Терено"
+
+#~ msgid "Tetum"
+#~ msgstr "Тетумский"
+
+#~ msgid "Tajik"
+#~ msgstr "Таджикский"
+
+#~ msgid "Tagalog"
+#~ msgstr "Тагалог"
+
+#~ msgid "Thai"
+#~ msgstr "Таи"
+
+#~ msgid "Tigre"
+#~ msgstr "Тигре"
+
+#~ msgid "Tigrinya"
+#~ msgstr "Тигринья"
+
+#~ msgid "Tiv"
+#~ msgstr "Тив"
+
+#~ msgid "Tokelau"
+#~ msgstr "Токелау"
+
+#~ msgid "Klingon"
+#~ msgstr ""
+
+#~ msgid "Tlingit"
+#~ msgstr "Тлингит"
+
+#~ msgid "Tamashek"
+#~ msgstr "Тамашек"
+
+#~ msgid "Tonga (Nyasa)"
+#~ msgstr "Тонга (Ньяса)"
+
+#~ msgid "Tonga (Tonga Islands)"
+#~ msgstr "Тонга (острова Тонга)"
+
+#~ msgid "Tok Pisin"
+#~ msgstr "Ток Писин"
+
+#~ msgid "Tsimshian"
+#~ msgstr "Цимшиан"
+
+#~ msgid "Tswana"
+#~ msgstr "Тсвана"
+
+#~ msgid "Tsonga"
+#~ msgstr "Тсонга"
+
+#~ msgid "Turkmen"
+#~ msgstr "Туркменский"
+
+#~ msgid "Tumbuka"
+#~ msgstr "Тумбука"
+
+#~ msgid "Turkish"
+#~ msgstr "Турецкий"
+
+#~ msgid "Tuvalu"
+#~ msgstr "Тувалу"
+
+#~ msgid "Twi"
+#~ msgstr "Тви"
+
+#~ msgid "Tuvinian"
+#~ msgstr "Тувинский"
+
+#~ msgid "Udmurt"
+#~ msgstr "Удмуртский"
+
+#~ msgid "Ugaritic"
+#~ msgstr "Угаритский"
+
+#~ msgid "Uighur"
+#~ msgstr "Уйгурский"
+
+#~ msgid "Ukrainian"
+#~ msgstr "Украинский"
+
+#~ msgid "Umbundu"
+#~ msgstr "Умбунду"
+
+#~ msgid "Undetermined"
+#~ msgstr "Неидентифицированный"
+
+#~ msgid "Urdu"
+#~ msgstr "Урду"
+
+#~ msgid "Uzbek"
+#~ msgstr "Узбекский"
+
+#~ msgid "Vai"
+#~ msgstr "Ваи"
+
+#~ msgid "Venda"
+#~ msgstr "Венда"
+
+#~ msgid "Vietnamese"
+#~ msgstr "Вьетнамский"
+
+#~ msgid "Volapük"
+#~ msgstr "Волапюк"
+
+#~ msgid "Votic"
+#~ msgstr "Вотик"
+
+#~ msgid "Wolaytta"
+#~ msgstr ""
+
+#~ msgid "Waray (Philippines)"
+#~ msgstr ""
+
+#~ msgid "Washo"
+#~ msgstr "Вашо"
+
+#~ msgid "Walloon"
+#~ msgstr "Валлун"
+
+#~ msgid "Wolof"
+#~ msgstr "Волоф"
+
+#~ msgid "Kalmyk"
+#~ msgstr ""
+
+#~ msgid "Xhosa"
+#~ msgstr "Коса"
+
+#~ msgid "Yao"
+#~ msgstr "Яо"
+
+#~ msgid "Yapese"
+#~ msgstr "Яапийский"
+
+#~ msgid "Yiddish"
+#~ msgstr "Идиш"
+
+#~ msgid "Yoruba"
+#~ msgstr "Йоруба"
+
+#~ msgid "Zapotec"
+#~ msgstr "Сапотекский"
+
+#~ msgid "Blissymbols"
+#~ msgstr ""
+
+#~ msgid "Zenaga"
+#~ msgstr "Зенагский"
+
+#~ msgid "Zhuang"
+#~ msgstr "Чжуанский"
+
+#~ msgid "Chinese"
+#~ msgstr "Китайский"
+
+#~ msgid "Zulu"
+#~ msgstr "Зулусский"
+
+#~ msgid "Zuni"
+#~ msgstr "Зуньи"
+
+#~ msgid "No linguistic content"
+#~ msgstr "Нет языкового содержимого"
+
+#~ msgid "Zaza"
+#~ msgstr "Зазаки"
diff --git a/cps/translations/sv/LC_MESSAGES/messages.mo b/cps/translations/sv/LC_MESSAGES/messages.mo
index 8d95ba47..814cafa2 100644
Binary files a/cps/translations/sv/LC_MESSAGES/messages.mo and b/cps/translations/sv/LC_MESSAGES/messages.mo differ
diff --git a/cps/translations/sv/LC_MESSAGES/messages.po b/cps/translations/sv/LC_MESSAGES/messages.po
index ea227b99..8d352464 100644
--- a/cps/translations/sv/LC_MESSAGES/messages.po
+++ b/cps/translations/sv/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
-"POT-Creation-Date: 2019-01-12 09:00+0100\n"
+"POT-Creation-Date: 2019-02-03 16:21+0100\n"
"PO-Revision-Date: 2018-11-23 02:57+0100\n"
"Last-Translator: Jonatan Nyberg \n"
"Language: sv\n"
@@ -18,734 +18,743 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.6.0\n"
-#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134
-#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27
+#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150
+#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45
msgid "not installed"
msgstr "inte installerad"
-#: cps/converter.py:22 cps/converter.py:38
+#: cps/converter.py:40 cps/converter.py:56
msgid "Excecution permissions missing"
msgstr "Utförande behörighet saknas"
-#: cps/converter.py:48
+#: cps/converter.py:66
msgid "not configured"
msgstr "inte konfigurerad"
-#: cps/helper.py:59
+#: cps/helper.py:77
#, python-format
msgid "%(format)s format not found for book id: %(book)d"
msgstr "%(format)s formatet hittades inte för bok-id: %(book)d"
-#: cps/helper.py:71
+#: cps/helper.py:89
#, python-format
msgid "%(format)s not found on Google Drive: %(fn)s"
msgstr "%(format)s hittades inte på Google Drive: %(fn)s"
-#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49
+#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49
msgid "Send to Kindle"
msgstr "Skicka till Kindle"
-#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188
+#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206
msgid "This e-mail has been sent via Calibre-Web."
msgstr "Detta e-postmeddelande har skickats via Calibre-Web."
-#: cps/helper.py:90
+#: cps/helper.py:108
#, python-format
msgid "%(format)s not found: %(fn)s"
msgstr "%(format)s hittades inte: %(fn)s"
-#: cps/helper.py:95
+#: cps/helper.py:113
msgid "Calibre-Web test e-mail"
msgstr "Calibre-Web test e-post"
-#: cps/helper.py:96
+#: cps/helper.py:114
msgid "Test e-mail"
msgstr "Test e-post"
-#: cps/helper.py:112
+#: cps/helper.py:130
msgid "Get Started with Calibre-Web"
msgstr "Kom igång med Calibre-Web"
-#: cps/helper.py:113
+#: cps/helper.py:131
#, python-format
msgid "Registration e-mail for user: %(name)s"
msgstr "Registrera e-post för användare: %(name)s"
-#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132
-#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144
+#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150
+#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162
#, python-format
msgid "Send %(format)s to Kindle"
msgstr ""
-#: cps/helper.py:148 cps/helper.py:152
+#: cps/helper.py:166 cps/helper.py:170
#, python-format
msgid "Convert %(orig)s to %(format)s and send to Kindle"
msgstr ""
-#: cps/helper.py:187
+#: cps/helper.py:205
#, python-format
msgid "E-mail: %(book)s"
msgstr "E-post: %(book)s"
-#: cps/helper.py:190
+#: cps/helper.py:208
msgid "The requested file could not be read. Maybe wrong permissions?"
msgstr "Den begärda filen kunde inte läsas. Kanske fel behörigheter?"
-#: cps/helper.py:295
+#: cps/helper.py:313
#, python-format
msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr "Byt namn på titel från: \"%(src)s\" till \"%(dest)s\" misslyckades med fel: %(error)s"
-#: cps/helper.py:305
+#: cps/helper.py:323
#, python-format
msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr "Byt namn på författare från: \"%(src)s\" till \"%(dest)s\" misslyckades med fel: %(error)s"
-#: cps/helper.py:319
+#: cps/helper.py:337
#, python-format
msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr ""
-#: cps/helper.py:344 cps/helper.py:353
+#: cps/helper.py:362 cps/helper.py:371
#, python-format
msgid "File %(file)s not found on Google Drive"
msgstr "Filen %(file)s hittades inte på Google Drive"
-#: cps/helper.py:384
+#: cps/helper.py:402
#, python-format
msgid "Book path %(path)s not found on Google Drive"
msgstr "Boksökvägen %(path)s hittades inte på Google Drive"
-#: cps/helper.py:650
+#: cps/helper.py:510
msgid "Error excecuting UnRar"
msgstr "Fel vid körning av UnRar"
-#: cps/helper.py:652
+#: cps/helper.py:512
msgid "Unrar binary file not found"
msgstr "Unrar binärfil hittades inte"
-#: cps/helper.py:703
+#: cps/helper.py:543
msgid "Waiting"
msgstr "Väntar"
-#: cps/helper.py:705
+#: cps/helper.py:545
msgid "Failed"
msgstr "Misslyckades"
-#: cps/helper.py:707
+#: cps/helper.py:547
msgid "Started"
msgstr "Startad"
-#: cps/helper.py:709
+#: cps/helper.py:549
msgid "Finished"
msgstr "Klar"
-#: cps/helper.py:711
+#: cps/helper.py:551
msgid "Unknown Status"
msgstr "Okänd status"
-#: cps/helper.py:716
+#: cps/helper.py:556
msgid "E-mail: "
msgstr "E-post: "
-#: cps/helper.py:718 cps/helper.py:722
+#: cps/helper.py:558 cps/helper.py:562
msgid "Convert: "
msgstr "Konvertera: "
-#: cps/helper.py:720
+#: cps/helper.py:560
msgid "Upload: "
msgstr "Överför: "
-#: cps/helper.py:724
+#: cps/helper.py:564
msgid "Unknown Task: "
msgstr "Okänd uppgift: "
-#: cps/web.py:1156 cps/web.py:2866
-msgid "Unknown"
-msgstr "Okänd"
-
-#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281
-msgid "HTTP Error"
-msgstr "HTTP-fel"
-
-#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282
-msgid "Connection error"
-msgstr "Anslutningsfel"
-
-#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283
-msgid "Timeout while establishing connection"
-msgstr "Tiden ute när du etablerade anslutning"
-
-#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284
-msgid "General error"
-msgstr "Allmänt fel"
-
-#: cps/web.py:1177
+#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423
msgid "Unexpected data while reading update information"
msgstr "Oväntade data vid läsning av uppdateringsinformation"
-#: cps/web.py:1184
+#: cps/updater.py:258 cps/updater.py:416
msgid "No update available. You already have the latest version installed"
msgstr "Ingen uppdatering tillgänglig. Du har redan den senaste versionen installerad"
-#: cps/web.py:1209
+#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1184
+msgid "HTTP Error"
+msgstr "HTTP-fel"
+
+#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1185
+msgid "Connection error"
+msgstr "Anslutningsfel"
+
+#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1186
+msgid "Timeout while establishing connection"
+msgstr "Tiden ute när du etablerade anslutning"
+
+#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1187
+msgid "General error"
+msgstr "Allmänt fel"
+
+#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468
msgid "A new update is available. Click on the button below to update to the latest version."
msgstr "En ny uppdatering är tillgänglig. Klicka på knappen nedan för att uppdatera till den senaste versionen."
-#: cps/web.py:1259
+#: cps/updater.py:335
msgid "Could not fetch update information"
msgstr "Kunde inte hämta uppdateringsinformation"
-#: cps/web.py:1274
+#: cps/updater.py:403
+msgid "No release information available"
+msgstr ""
+
+#: cps/updater.py:449 cps/updater.py:458
+#, python-format
+msgid "A new update is available. Click on the button below to update to version: %(version)s"
+msgstr ""
+
+#: cps/updater.py:491 cps/web.py:2766
+msgid "Unknown"
+msgstr "Okänd"
+
+#: cps/web.py:1177
msgid "Requesting update package"
msgstr "Begär uppdateringspaketet"
-#: cps/web.py:1275
+#: cps/web.py:1178
msgid "Downloading update package"
msgstr "Hämtar uppdateringspaketet"
-#: cps/web.py:1276
+#: cps/web.py:1179
msgid "Unzipping update package"
msgstr "Packar upp uppdateringspaketet"
-#: cps/web.py:1277
+#: cps/web.py:1180
msgid "Replacing files"
msgstr "Ersätta filer"
-#: cps/web.py:1278
+#: cps/web.py:1181
msgid "Database connections are closed"
msgstr "Databasanslutningarna är stängda"
-#: cps/web.py:1279
+#: cps/web.py:1182
msgid "Stopping server"
msgstr "Stoppar server"
-#: cps/web.py:1280
+#: cps/web.py:1183
msgid "Update finished, please press okay and reload page"
msgstr "Uppdatering klar, tryck på okej och uppdatera sidan"
-#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284
+#: cps/web.py:1184 cps/web.py:1185 cps/web.py:1186 cps/web.py:1187
msgid "Update failed:"
msgstr "Uppdateringen misslyckades:"
-#: cps/web.py:1307
+#: cps/web.py:1210
msgid "Recently Added Books"
msgstr "Nyligen tillagda böcker"
-#: cps/web.py:1317
+#: cps/web.py:1220
msgid "Newest Books"
msgstr "Nyaste böcker"
-#: cps/web.py:1329
+#: cps/web.py:1232
msgid "Oldest Books"
msgstr "Äldsta böcker"
-#: cps/web.py:1341
+#: cps/web.py:1244
msgid "Books (A-Z)"
msgstr "Böcker (A-Ö)"
-#: cps/web.py:1352
+#: cps/web.py:1255
msgid "Books (Z-A)"
msgstr "Böcker (Ö-A)"
-#: cps/web.py:1381
+#: cps/web.py:1284
msgid "Hot Books (most downloaded)"
msgstr "Heta böcker (mest hämtade)"
-#: cps/web.py:1394
+#: cps/web.py:1297
msgid "Best rated books"
msgstr "Bäst rankade böcker"
-#: cps/templates/index.xml:39 cps/web.py:1407
+#: cps/templates/index.xml:39 cps/web.py:1310
msgid "Random Books"
msgstr "Slumpmässiga böcker"
-#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236
+#: cps/web.py:1337 cps/web.py:1592 cps/web.py:2135
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "Fel vid öppnande av e-bok. Filen finns inte eller filen är inte tillgänglig:"
-#: cps/web.py:1462
+#: cps/web.py:1365
msgid "Publisher list"
msgstr "Lista över förlag"
-#: cps/web.py:1477
+#: cps/web.py:1380
#, python-format
msgid "Publisher: %(name)s"
msgstr "Förlag: %(name)s"
-#: cps/templates/index.xml:83 cps/web.py:1509
+#: cps/templates/index.xml:83 cps/web.py:1412
msgid "Series list"
msgstr "Serielista"
-#: cps/web.py:1523
+#: cps/web.py:1426
#, python-format
msgid "Series: %(serie)s"
msgstr "Serier: %(serie)s"
-#: cps/web.py:1549
+#: cps/web.py:1452
msgid "Available languages"
msgstr "Tillgängliga språk"
-#: cps/web.py:1569
+#: cps/web.py:1472
#, python-format
msgid "Language: %(name)s"
msgstr "Språk: %(name)s"
-#: cps/templates/index.xml:76 cps/web.py:1580
+#: cps/templates/index.xml:76 cps/web.py:1483
msgid "Category list"
msgstr "Kategorilista"
-#: cps/web.py:1594
+#: cps/web.py:1497
#, python-format
msgid "Category: %(name)s"
msgstr "Kategori: %(name)s"
-#: cps/templates/layout.html:71 cps/web.py:1725
+#: cps/templates/layout.html:71 cps/web.py:1628
msgid "Tasks"
msgstr "Uppgifter"
-#: cps/web.py:1759
+#: cps/web.py:1662
msgid "Statistics"
msgstr "Statistik"
-#: cps/web.py:1867
+#: cps/web.py:1730
+msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
+msgstr ""
+
+#: cps/web.py:1775
msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
msgstr "Återuppringningsdomänen är inte verifierad, följ stegen för att verifiera domänen i Google utvecklarkonsol"
-#: cps/web.py:1943
+#: cps/web.py:1851
msgid "Server restarted, please reload page"
msgstr "Server startas om, vänligen uppdatera sidan"
-#: cps/web.py:1946
+#: cps/web.py:1854
msgid "Performing shutdown of server, please close window"
msgstr "Stänger servern, vänligen stäng fönstret"
-#: cps/web.py:1965
-msgid "Update done"
-msgstr "Uppdatering klar"
-
-#: cps/web.py:2035
+#: cps/web.py:1934
msgid "Published after "
msgstr "Publicerad efter "
-#: cps/web.py:2042
+#: cps/web.py:1941
msgid "Published before "
msgstr "Publicerad före "
-#: cps/web.py:2056
+#: cps/web.py:1955
#, python-format
msgid "Rating <= %(rating)s"
msgstr "Betyg <= %(rating)s"
-#: cps/web.py:2058
+#: cps/web.py:1957
#, python-format
msgid "Rating >= %(rating)s"
msgstr "Betyg >= %(rating)s"
-#: cps/web.py:2119 cps/web.py:2128
+#: cps/web.py:2018 cps/web.py:2027
msgid "search"
msgstr "sök"
#: cps/templates/index.xml:47 cps/templates/index.xml:51
-#: cps/templates/layout.html:146 cps/web.py:2195
+#: cps/templates/layout.html:146 cps/web.py:2094
msgid "Read Books"
msgstr "Lästa böcker"
#: cps/templates/index.xml:55 cps/templates/index.xml:59
-#: cps/templates/layout.html:148 cps/web.py:2198
+#: cps/templates/layout.html:148 cps/web.py:2097
msgid "Unread Books"
msgstr "Olästa böcker"
-#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262
+#: cps/web.py:2145 cps/web.py:2147 cps/web.py:2149 cps/web.py:2161
msgid "Read a Book"
msgstr "Läs en bok"
-#: cps/web.py:2321 cps/web.py:3230
+#: cps/web.py:2220 cps/web.py:3138
msgid "Please fill out all fields!"
msgstr "Fyll i alla fält!"
-#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352
-#: cps/web.py:2354
+#: cps/web.py:2221 cps/web.py:2243 cps/web.py:2247 cps/web.py:2252
+#: cps/web.py:2254
msgid "register"
msgstr "registrera"
-#: cps/web.py:2342 cps/web.py:3444
+#: cps/web.py:2242 cps/web.py:3357
msgid "An unknown error occurred. Please try again later."
msgstr "Ett okänt fel uppstod. Försök igen senare."
-#: cps/web.py:2345
+#: cps/web.py:2245
msgid "Your e-mail is not allowed to register"
msgstr "Din e-post är inte tillåten att registrera"
-#: cps/web.py:2348
+#: cps/web.py:2248
msgid "Confirmation e-mail was send to your e-mail account."
msgstr "Bekräftelsemail skickades till ditt e-postkonto."
-#: cps/web.py:2351
+#: cps/web.py:2251
msgid "This username or e-mail address is already in use."
msgstr "Det här användarnamnet eller e-postadressen är redan i bruk."
-#: cps/web.py:2368 cps/web.py:2464
+#: cps/web.py:2268 cps/web.py:2364
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr "du är nu inloggad som: \"%(nickname)s\""
-#: cps/web.py:2373
+#: cps/web.py:2273
msgid "Wrong Username or Password"
msgstr "Fel användarnamn eller lösenord"
-#: cps/web.py:2379 cps/web.py:2400
+#: cps/web.py:2279 cps/web.py:2300
msgid "login"
msgstr "logga in"
-#: cps/web.py:2412 cps/web.py:2443
+#: cps/web.py:2312 cps/web.py:2343
msgid "Token not found"
msgstr "Token hittades inte"
-#: cps/web.py:2420 cps/web.py:2451
+#: cps/web.py:2320 cps/web.py:2351
msgid "Token has expired"
msgstr "Token har löpt ut"
-#: cps/web.py:2428
+#: cps/web.py:2328
msgid "Success! Please return to your device"
msgstr "Lyckades! Vänligen återvänd till din enhet"
-#: cps/web.py:2478
+#: cps/web.py:2378
msgid "Please configure the SMTP mail settings first..."
msgstr "Konfigurera SMTP-postinställningarna först..."
-#: cps/web.py:2483
+#: cps/web.py:2383
#, python-format
msgid "Book successfully queued for sending to %(kindlemail)s"
msgstr "Boken är i kö för att skicka till %(kindlemail)s"
-#: cps/web.py:2487
+#: cps/web.py:2387
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr "Det gick inte att skicka den här boken: %(res)s"
-#: cps/web.py:2489 cps/web.py:3283
+#: cps/web.py:2389 cps/web.py:3191
msgid "Please configure your kindle e-mail address first..."
msgstr "Konfigurera din kindle-e-postadress först..."
-#: cps/web.py:2500 cps/web.py:2552
+#: cps/web.py:2400 cps/web.py:2452
msgid "Invalid shelf specified"
msgstr "Ogiltig hylla specificerad"
-#: cps/web.py:2507
+#: cps/web.py:2407
#, python-format
msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s"
msgstr ""
-#: cps/web.py:2515
+#: cps/web.py:2415
msgid "You are not allowed to edit public shelves"
msgstr "Du får inte redigera offentliga hyllor"
-#: cps/web.py:2524
+#: cps/web.py:2424
#, python-format
msgid "Book is already part of the shelf: %(shelfname)s"
msgstr "Boken är redan en del av hyllan: %(shelfname)s"
-#: cps/web.py:2538
+#: cps/web.py:2438
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr "Boken har lagts till i hyllan: %(sname)s"
-#: cps/web.py:2557
+#: cps/web.py:2457
#, python-format
msgid "You are not allowed to add a book to the the shelf: %(name)s"
msgstr "Du får inte lägga till en bok i hyllan: %(name)s"
-#: cps/web.py:2562
+#: cps/web.py:2462
msgid "User is not allowed to edit public shelves"
msgstr "Användaren får inte redigera publika hyllor"
-#: cps/web.py:2580
+#: cps/web.py:2480
#, python-format
msgid "Books are already part of the shelf: %(name)s"
msgstr "Böcker är redan en del av hyllan: %(name)s"
-#: cps/web.py:2594
+#: cps/web.py:2494
#, python-format
msgid "Books have been added to shelf: %(sname)s"
msgstr "Böcker har lagts till hyllan: %(sname)s"
-#: cps/web.py:2596
+#: cps/web.py:2496
#, python-format
msgid "Could not add books to shelf: %(sname)s"
msgstr "Kunde inte lägga till böcker till hyllan: %(sname)s"
-#: cps/web.py:2633
+#: cps/web.py:2533
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr "Boken har tagits bort från hyllan: %(sname)s"
-#: cps/web.py:2639
+#: cps/web.py:2539
#, python-format
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
msgstr "Tyvärr har du inte rätt att ta bort en bok från den här hyllan: %(sname)s"
-#: cps/web.py:2660 cps/web.py:2684
+#: cps/web.py:2560 cps/web.py:2584
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr "En hylla med namnet '%(title)s' finns redan."
-#: cps/web.py:2665
+#: cps/web.py:2565
#, python-format
msgid "Shelf %(title)s created"
msgstr "Hyllan %(title)s skapad"
-#: cps/web.py:2667 cps/web.py:2695
+#: cps/web.py:2567 cps/web.py:2595
msgid "There was an error"
msgstr "Det fanns ett fel"
-#: cps/web.py:2668 cps/web.py:2670
+#: cps/web.py:2568 cps/web.py:2570
msgid "create a shelf"
msgstr "skapa en hylla"
-#: cps/web.py:2693
+#: cps/web.py:2593
#, python-format
msgid "Shelf %(title)s changed"
msgstr "Hyllan %(title)s ändrad"
-#: cps/web.py:2696 cps/web.py:2698
+#: cps/web.py:2596 cps/web.py:2598
msgid "Edit a shelf"
msgstr "Redigera en hylla"
-#: cps/web.py:2719
+#: cps/web.py:2619
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr "tog bort hyllan %(name)s"
-#: cps/web.py:2746
+#: cps/web.py:2646
#, python-format
msgid "Shelf: '%(name)s'"
msgstr "Hylla: '%(name)s'"
-#: cps/web.py:2749
+#: cps/web.py:2649
msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "Fel vid öppning av hyllan. Hylla finns inte eller är inte tillgänglig"
-#: cps/web.py:2780
+#: cps/web.py:2680
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr "Ändra ordning på hyllan: '%(name)s'"
-#: cps/web.py:2809 cps/web.py:3236
+#: cps/web.py:2709 cps/web.py:3144
msgid "E-mail is not from valid domain"
msgstr "E-posten är inte från giltig domän"
-#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856
+#: cps/web.py:2711 cps/web.py:2753 cps/web.py:2756
#, python-format
msgid "%(name)s's profile"
msgstr "%(name)ss profil"
-#: cps/web.py:2851
+#: cps/web.py:2751
msgid "Found an existing account for this e-mail address."
msgstr "Hittade ett befintligt konto för den här e-postadressen."
-#: cps/web.py:2854
+#: cps/web.py:2754
msgid "Profile updated"
msgstr "Profilen uppdaterad"
-#: cps/web.py:2882
+#: cps/web.py:2785
msgid "Admin page"
msgstr "Administrationssida"
-#: cps/web.py:2964 cps/web.py:3139
+#: cps/web.py:2867 cps/web.py:3047
msgid "Calibre-Web configuration updated"
msgstr "Calibre-Web konfiguration uppdaterad"
-#: cps/templates/admin.html:100 cps/web.py:2978
+#: cps/templates/admin.html:100 cps/web.py:2881
msgid "UI Configuration"
msgstr "Användargränssnitt konfiguration"
-#: cps/web.py:2996
+#: cps/web.py:2899
msgid "Import of optional Google Drive requirements missing"
msgstr "Import av valfri Google Drive krav saknas"
-#: cps/web.py:2999
+#: cps/web.py:2902
msgid "client_secrets.json is missing or not readable"
msgstr "client_secrets.json saknas eller inte kan läsas"
-#: cps/web.py:3004 cps/web.py:3031
+#: cps/web.py:2907 cps/web.py:2936
msgid "client_secrets.json is not configured for web application"
msgstr "client_secrets.json är inte konfigurerad för webbapplikation"
-#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072
-#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156
-#: cps/web.py:3172
+#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977
+#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3056 cps/web.py:3064
+#: cps/web.py:3080
msgid "Basic Configuration"
msgstr "Grundläggande konfiguration"
-#: cps/web.py:3057
+#: cps/web.py:2962
msgid "Keyfile location is not valid, please enter correct path"
msgstr "Platsen för Keyfile är inte giltig, ange rätt sökväg"
-#: cps/web.py:3069
+#: cps/web.py:2974
msgid "Certfile location is not valid, please enter correct path"
msgstr "Platsen för Certfile är inte giltig, ange rätt sökväg"
-#: cps/web.py:3112
+#: cps/web.py:3019
msgid "Logfile location is not valid, please enter correct path"
msgstr "Platsen för Logfile platsen är inte giltig, ange rätt sökväg"
-#: cps/web.py:3152
+#: cps/web.py:3060
msgid "DB location is not valid, please enter correct path"
msgstr "Platsen för DB är inte giltig, ange rätt sökväg"
-#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254
+#: cps/templates/admin.html:33 cps/web.py:3140 cps/web.py:3146 cps/web.py:3162
msgid "Add new user"
msgstr "Lägg till ny användare"
-#: cps/web.py:3244
+#: cps/web.py:3152
#, python-format
msgid "User '%(user)s' created"
msgstr "Användaren '%(user)s' skapad"
-#: cps/web.py:3248
+#: cps/web.py:3156
msgid "Found an existing account for this e-mail address or nickname."
msgstr "Hittade ett befintligt konto för den här e-postadressen eller smeknamnet."
-#: cps/web.py:3278
+#: cps/web.py:3186
#, python-format
msgid "Test e-mail successfully send to %(kindlemail)s"
msgstr "Test-e-post skicka till %(kindlemail)s"
-#: cps/web.py:3281
+#: cps/web.py:3189
#, python-format
msgid "There was an error sending the Test e-mail: %(res)s"
msgstr "Det gick inte att skicka Testmeddelandet: %(res)s"
-#: cps/web.py:3285
+#: cps/web.py:3193
msgid "E-mail server settings updated"
msgstr "E-postserverinställningar uppdaterade"
-#: cps/web.py:3286
+#: cps/web.py:3194
msgid "Edit e-mail server settings"
msgstr "Redigera inställningar för e-postserver"
-#: cps/web.py:3311
+#: cps/web.py:3219
#, python-format
msgid "User '%(nick)s' deleted"
msgstr "Användaren '%(nick)s' borttagen"
-#: cps/web.py:3419
+#: cps/web.py:3332
#, python-format
msgid "User '%(nick)s' updated"
msgstr "Användaren '%(nick)s' uppdaterad"
-#: cps/web.py:3422
+#: cps/web.py:3335
msgid "An unknown error occured."
msgstr "Ett okänt fel uppstod."
-#: cps/web.py:3424
+#: cps/web.py:3337
#, python-format
msgid "Edit User %(nick)s"
msgstr "Redigera användaren %(nick)s"
-#: cps/web.py:3441
+#: cps/web.py:3354
#, python-format
msgid "Password for user %(user)s reset"
msgstr "Lösenord för användaren %(user)s återställd"
-#: cps/web.py:3455 cps/web.py:3661
+#: cps/web.py:3368 cps/web.py:3574
msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "Det gick inte att öppna e-boken. Filen finns inte eller filen är inte tillgänglig"
-#: cps/web.py:3483 cps/web.py:3955
+#: cps/web.py:3396 cps/web.py:3868
msgid "edit metadata"
msgstr "redigera metadata"
-#: cps/web.py:3576 cps/web.py:3823
+#: cps/web.py:3489 cps/web.py:3736
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Filändelsen '%(ext)s' får inte laddas upp till den här servern"
-#: cps/web.py:3580 cps/web.py:3827
+#: cps/web.py:3493 cps/web.py:3740
msgid "File to be uploaded must have an extension"
msgstr "Filen som ska laddas upp måste ha en ändelse"
-#: cps/web.py:3592 cps/web.py:3847
+#: cps/web.py:3505 cps/web.py:3760
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Det gick inte att skapa sökväg %(path)s (behörighet nekad)."
-#: cps/web.py:3597
+#: cps/web.py:3510
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Det gick inte att lagra filen %(file)s."
-#: cps/web.py:3614
+#: cps/web.py:3527
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Filformatet %(ext)s lades till %(book)s"
-#: cps/web.py:3632
+#: cps/web.py:3545
#, python-format
msgid "Failed to create path for cover %(path)s (Permission denied)."
msgstr "Det gick inte att skapa sökväg för omslag %(path)s (behörighet nekad)."
-#: cps/web.py:3640
+#: cps/web.py:3553
#, python-format
msgid "Failed to store cover-file %(cover)s."
msgstr "Det gick inte att lagra omslagsfilen %(cover)s."
-#: cps/web.py:3643
+#: cps/web.py:3556
msgid "Cover-file is not a valid image file"
msgstr "Omslagsfilen är inte en giltig bildfil"
-#: cps/web.py:3673 cps/web.py:3682
+#: cps/web.py:3586 cps/web.py:3595
msgid "unknown"
msgstr "okänd"
-#: cps/web.py:3714
+#: cps/web.py:3627
msgid "Cover is not a jpg file, can't save"
msgstr "Omslag är inte en jpg-fil, kan inte spara"
-#: cps/web.py:3762
+#: cps/web.py:3675
#, python-format
msgid "%(langname)s is not a valid language"
msgstr "%(langname)s är inte ett giltigt språk"
-#: cps/web.py:3793
+#: cps/web.py:3706
msgid "Metadata successfully updated"
msgstr "Metadata uppdaterades"
-#: cps/web.py:3802
+#: cps/web.py:3715
msgid "Error editing book, please check logfile for details"
msgstr "Det gick inte att redigera boken, kontrollera loggfilen för mer information"
-#: cps/web.py:3852
+#: cps/web.py:3765
#, python-format
msgid "Failed to store file %(file)s (Permission denied)."
msgstr "Det gick inte att lagra filen %(file)s (behörighet nekad)."
-#: cps/web.py:3857
+#: cps/web.py:3770
#, python-format
msgid "Failed to delete file %(file)s (Permission denied)."
msgstr "Det gick inte att ta bort filen %(file)s (behörighet nekad)."
-#: cps/web.py:3975
+#: cps/web.py:3888
msgid "Source or destination format for conversion missing"
msgstr "Källa eller målformat för konvertering saknas"
-#: cps/web.py:3985
+#: cps/web.py:3898
#, python-format
msgid "Book successfully queued for converting to %(book_format)s"
msgstr "Boken är i kö för konvertering till %(book_format)s"
-#: cps/web.py:3989
+#: cps/web.py:3902
#, python-format
msgid "There was an error converting this book: %(res)s"
msgstr "Det gick inte att konvertera den här boken: %(res)s"
-#: cps/worker.py:289
+#: cps/worker.py:305
#, python-format
msgid "Ebook-converter failed: %(error)s"
msgstr "E-bokkonverteraren misslyckades: %(error)s"
-#: cps/worker.py:300
+#: cps/worker.py:316
#, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "Kindlegen misslyckades med fel %(error)s. Meddelande: %(message)s"
@@ -902,10 +911,10 @@ msgstr "Ok"
#: cps/templates/admin.html:151 cps/templates/admin.html:165
#: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200
-#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175
+#: cps/templates/config_edit.html:226 cps/templates/config_view_edit.html:175
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
#: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19
-#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147
+#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:149
msgid "Back"
msgstr "Tillbaka"
@@ -1035,10 +1044,10 @@ msgstr "visa bok efter redigering"
msgid "Get metadata"
msgstr "Hämta metadata"
-#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210
+#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:224
#: cps/templates/config_view_edit.html:174 cps/templates/login.html:20
-#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17
-#: cps/templates/user_edit.html:145
+#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17
+#: cps/templates/user_edit.html:147
msgid "Submit"
msgstr "Skicka"
@@ -1111,114 +1120,138 @@ msgid "Authenticate Google Drive"
msgstr "Autentisera Google Drive"
#: cps/templates/config_edit.html:40
+msgid "Please hit submit to continue with setup"
+msgstr ""
+
+#: cps/templates/config_edit.html:43
msgid "Please finish Google Drive setup after login"
msgstr "Vänligen avsluta Google Drive-inställning efter inloggning"
-#: cps/templates/config_edit.html:44
+#: cps/templates/config_edit.html:48
msgid "Google Drive Calibre folder"
msgstr "Google Drive Calibre-mapp"
-#: cps/templates/config_edit.html:52
+#: cps/templates/config_edit.html:56
msgid "Metadata Watch Channel ID"
msgstr "Metadata Titta på kanal ID"
-#: cps/templates/config_edit.html:55
+#: cps/templates/config_edit.html:59
msgid "Revoke"
msgstr "Återkalla"
-#: cps/templates/config_edit.html:73
+#: cps/templates/config_edit.html:78
msgid "Server Configuration"
msgstr "Serverkonfiguration"
-#: cps/templates/config_edit.html:80
+#: cps/templates/config_edit.html:85
msgid "Server Port"
msgstr "Serverport"
-#: cps/templates/config_edit.html:84
+#: cps/templates/config_edit.html:89
msgid "SSL certfile location (leave it empty for non-SSL Servers)"
msgstr "SSL certfile plats (lämna den tom för icke-SSL-servrar)"
-#: cps/templates/config_edit.html:88
+#: cps/templates/config_edit.html:93
msgid "SSL Keyfile location (leave it empty for non-SSL Servers)"
msgstr "SSL Keyfile plats (lämna den tom för icke-SSL-servrar)"
+#: cps/templates/config_edit.html:97
+msgid "Update channel"
+msgstr ""
+
#: cps/templates/config_edit.html:99
+msgid "Stable"
+msgstr ""
+
+#: cps/templates/config_edit.html:100
+msgid "Stable (Automatic)"
+msgstr ""
+
+#: cps/templates/config_edit.html:101
+msgid "Nightly"
+msgstr ""
+
+#: cps/templates/config_edit.html:102
+msgid "Nightly (Automatic)"
+msgstr ""
+
+#: cps/templates/config_edit.html:113
msgid "Logfile Configuration"
msgstr "Loggfil konfiguration"
-#: cps/templates/config_edit.html:106
+#: cps/templates/config_edit.html:120
msgid "Log Level"
msgstr "Loggnivå"
-#: cps/templates/config_edit.html:115
+#: cps/templates/config_edit.html:129
msgid "Location and name of logfile (calibre-web.log for no entry)"
msgstr "Plats och namn på loggfilen (calibre-web.log för ingen post)"
-#: cps/templates/config_edit.html:126
+#: cps/templates/config_edit.html:140
msgid "Feature Configuration"
msgstr "Funktion konfiguration"
-#: cps/templates/config_edit.html:134
+#: cps/templates/config_edit.html:148
msgid "Enable uploading"
msgstr "Aktivera uppladdning"
-#: cps/templates/config_edit.html:138
+#: cps/templates/config_edit.html:152
msgid "Enable anonymous browsing"
msgstr "Aktivera anonym surfning"
-#: cps/templates/config_edit.html:142
+#: cps/templates/config_edit.html:156
msgid "Enable public registration"
msgstr "Aktivera offentlig registrering"
-#: cps/templates/config_edit.html:146
+#: cps/templates/config_edit.html:160
msgid "Enable remote login (\"magic link\")"
msgstr "Aktivera fjärrinloggning (\"magic link\")"
-#: cps/templates/config_edit.html:151
+#: cps/templates/config_edit.html:165
msgid "Use"
msgstr "Använd"
-#: cps/templates/config_edit.html:152
+#: cps/templates/config_edit.html:166
msgid "Obtain an API Key"
msgstr "Hämta en API-nyckel"
-#: cps/templates/config_edit.html:156
+#: cps/templates/config_edit.html:170
msgid "Goodreads API Key"
msgstr "Goodreads API-nyckel"
-#: cps/templates/config_edit.html:160
+#: cps/templates/config_edit.html:174
msgid "Goodreads API Secret"
msgstr "Goodreads API-hemlighet"
-#: cps/templates/config_edit.html:173
+#: cps/templates/config_edit.html:187
msgid "External binaries"
msgstr "Externa binärer"
-#: cps/templates/config_edit.html:181
+#: cps/templates/config_edit.html:195
msgid "No converter"
msgstr "Ingen konverterare"
-#: cps/templates/config_edit.html:183
+#: cps/templates/config_edit.html:197
msgid "Use Kindlegen"
msgstr "Använd Kindlegen"
-#: cps/templates/config_edit.html:185
+#: cps/templates/config_edit.html:199
msgid "Use calibre's ebook converter"
msgstr "Använd calibres e-bokkonverterare"
-#: cps/templates/config_edit.html:189
+#: cps/templates/config_edit.html:203
msgid "E-Book converter settings"
msgstr "Inställningar för e-bokkonverteraren"
-#: cps/templates/config_edit.html:193
+#: cps/templates/config_edit.html:207
msgid "Path to convertertool"
msgstr "Sökväg till convertertool"
-#: cps/templates/config_edit.html:199
+#: cps/templates/config_edit.html:213
msgid "Location of Unrar binary"
msgstr "Plats för Unrar-binär"
-#: cps/templates/config_edit.html:215 cps/templates/layout.html:82
+#: cps/templates/config_edit.html:229 cps/templates/layout.html:82
#: cps/templates/login.html:4
msgid "Login"
msgstr "Logga in"
@@ -1268,31 +1301,31 @@ msgstr "Taggar för vuxeninnehåll"
msgid "Default settings for new users"
msgstr "Standardinställningar för nya användare"
-#: cps/templates/config_view_edit.html:77 cps/templates/user_edit.html:102
+#: cps/templates/config_view_edit.html:77 cps/templates/user_edit.html:104
msgid "Admin user"
msgstr "Adminstratör användare"
-#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:111
+#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:113
msgid "Allow Downloads"
msgstr "Tillåt Hämtningar"
-#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:115
+#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:117
msgid "Allow Uploads"
msgstr "Tillåt Uppladdningar"
-#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:119
+#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:121
msgid "Allow Edit"
msgstr "Tillåt Redigera"
-#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:123
+#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:125
msgid "Allow Delete books"
msgstr "Tillåt Ta bort böcker"
-#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:128
+#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:130
msgid "Allow Changing Password"
msgstr "Tillåt Ändra lösenord"
-#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:132
+#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:134
msgid "Allow Editing Public Shelfs"
msgstr "Tillåt Redigering av offentliga hyllor"
@@ -1340,15 +1373,15 @@ msgstr "Visa författarval"
msgid "Show publisher selection"
msgstr "Visa urval av förlag"
-#: cps/templates/config_view_edit.html:159 cps/templates/user_edit.html:90
+#: cps/templates/config_view_edit.html:159 cps/templates/user_edit.html:91
msgid "Show read and unread"
msgstr "Visa lästa och olästa"
-#: cps/templates/config_view_edit.html:163 cps/templates/user_edit.html:94
+#: cps/templates/config_view_edit.html:163 cps/templates/user_edit.html:96
msgid "Show random books in detail view"
msgstr "Visa slumpmässiga böcker i detaljvyn"
-#: cps/templates/config_view_edit.html:167 cps/templates/user_edit.html:107
+#: cps/templates/config_view_edit.html:167 cps/templates/user_edit.html:109
msgid "Show mature content"
msgstr "Visa vuxeninnehåll"
@@ -1733,6 +1766,10 @@ msgstr "Vertikal"
msgid "PDF.js viewer"
msgstr "PDF.js visare"
+#: cps/templates/readpdf.html:418
+msgid "Preparing document for printing..."
+msgstr ""
+
#: cps/templates/readtxt.html:6
msgid "Basic txt Reader"
msgstr "Grundläggande txt-läsare"
@@ -1917,11 +1954,11 @@ msgstr "Visa böcker med språk"
msgid "Show all"
msgstr "Visa alla"
-#: cps/templates/user_edit.html:139
+#: cps/templates/user_edit.html:141
msgid "Delete this user"
msgstr "Ta bort den här användaren"
-#: cps/templates/user_edit.html:154
+#: cps/templates/user_edit.html:156
msgid "Recent Downloads"
msgstr "Senaste hämtningar"
@@ -1964,3 +2001,18 @@ msgstr "Senaste hämtningar"
#~ msgid "Author list"
#~ msgstr "Författarlista"
+#~ msgid "Update done"
+#~ msgstr "Uppdatering klar"
+
+#~ msgid "Stable (Automatic))"
+#~ msgstr ""
+
+#~ msgid "Nightly (Automatic))"
+#~ msgstr ""
+
+#~ msgid "A new update is available. Click on the button below to update to version: "
+#~ msgstr ""
+
+#~ msgid "A new update is available. Click on the button below to update to version: %(version)s"
+#~ msgstr ""
+
diff --git a/cps/translations/uk/LC_MESSAGES/messages.mo b/cps/translations/uk/LC_MESSAGES/messages.mo
new file mode 100644
index 00000000..189747b4
Binary files /dev/null and b/cps/translations/uk/LC_MESSAGES/messages.mo differ
diff --git a/cps/translations/uk/LC_MESSAGES/messages.po b/cps/translations/uk/LC_MESSAGES/messages.po
new file mode 100644
index 00000000..c1502491
--- /dev/null
+++ b/cps/translations/uk/LC_MESSAGES/messages.po
@@ -0,0 +1,2112 @@
+# Переклад на українську мову для Calibre-web.
+# Copyright (C) 2018 ABIS Team
+# This file is distributed under the same license as the Calibre-web project
+# ABIS Team , 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: Calibre-web\n"
+"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
+"POT-Creation-Date: 2019-02-03 16:21+0100\n"
+"PO-Revision-Date: 2017-04-30 00:47+0300\n"
+"Last-Translator: ABIS Team \n"
+"Language: ua\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.6.0\n"
+
+#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150
+#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45
+msgid "not installed"
+msgstr "не встановлено"
+
+#: cps/converter.py:40 cps/converter.py:56
+msgid "Excecution permissions missing"
+msgstr "Відсутній дозвіл на виконання"
+
+#: cps/converter.py:66
+msgid "not configured"
+msgstr ""
+
+#: cps/helper.py:77
+#, python-format
+msgid "%(format)s format not found for book id: %(book)d"
+msgstr ""
+
+#: cps/helper.py:89
+#, python-format
+msgid "%(format)s not found on Google Drive: %(fn)s"
+msgstr ""
+
+#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49
+msgid "Send to Kindle"
+msgstr "Відправити на Kindle"
+
+#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206
+msgid "This e-mail has been sent via Calibre-Web."
+msgstr ""
+
+#: cps/helper.py:108
+#, python-format
+msgid "%(format)s not found: %(fn)s"
+msgstr ""
+
+#: cps/helper.py:113
+msgid "Calibre-Web test e-mail"
+msgstr ""
+
+#: cps/helper.py:114
+msgid "Test e-mail"
+msgstr ""
+
+#: cps/helper.py:130
+msgid "Get Started with Calibre-Web"
+msgstr ""
+
+#: cps/helper.py:131
+#, python-format
+msgid "Registration e-mail for user: %(name)s"
+msgstr ""
+
+#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150
+#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162
+#, python-format
+msgid "Send %(format)s to Kindle"
+msgstr ""
+
+#: cps/helper.py:166 cps/helper.py:170
+#, python-format
+msgid "Convert %(orig)s to %(format)s and send to Kindle"
+msgstr ""
+
+#: cps/helper.py:205
+#, python-format
+msgid "E-mail: %(book)s"
+msgstr ""
+
+#: cps/helper.py:208
+msgid "The requested file could not be read. Maybe wrong permissions?"
+msgstr ""
+
+#: cps/helper.py:313
+#, python-format
+msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
+msgstr ""
+
+#: cps/helper.py:323
+#, python-format
+msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
+msgstr ""
+
+#: cps/helper.py:337
+#, python-format
+msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s"
+msgstr ""
+
+#: cps/helper.py:362 cps/helper.py:371
+#, python-format
+msgid "File %(file)s not found on Google Drive"
+msgstr ""
+
+#: cps/helper.py:402
+#, python-format
+msgid "Book path %(path)s not found on Google Drive"
+msgstr ""
+
+#: cps/helper.py:510
+msgid "Error excecuting UnRar"
+msgstr ""
+
+#: cps/helper.py:512
+msgid "Unrar binary file not found"
+msgstr ""
+
+#: cps/helper.py:543
+msgid "Waiting"
+msgstr ""
+
+#: cps/helper.py:545
+msgid "Failed"
+msgstr ""
+
+#: cps/helper.py:547
+msgid "Started"
+msgstr ""
+
+#: cps/helper.py:549
+msgid "Finished"
+msgstr ""
+
+#: cps/helper.py:551
+msgid "Unknown Status"
+msgstr ""
+
+#: cps/helper.py:556
+msgid "E-mail: "
+msgstr ""
+
+#: cps/helper.py:558 cps/helper.py:562
+msgid "Convert: "
+msgstr ""
+
+#: cps/helper.py:560
+msgid "Upload: "
+msgstr ""
+
+#: cps/helper.py:564
+msgid "Unknown Task: "
+msgstr ""
+
+#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423
+msgid "Unexpected data while reading update information"
+msgstr ""
+
+#: cps/updater.py:258 cps/updater.py:416
+msgid "No update available. You already have the latest version installed"
+msgstr ""
+
+#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1184
+msgid "HTTP Error"
+msgstr ""
+
+#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1185
+msgid "Connection error"
+msgstr ""
+
+#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1186
+msgid "Timeout while establishing connection"
+msgstr ""
+
+#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1187
+msgid "General error"
+msgstr ""
+
+#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468
+msgid "A new update is available. Click on the button below to update to the latest version."
+msgstr ""
+
+#: cps/updater.py:335
+msgid "Could not fetch update information"
+msgstr ""
+
+#: cps/updater.py:403
+msgid "No release information available"
+msgstr ""
+
+#: cps/updater.py:449 cps/updater.py:458
+#, python-format
+msgid "A new update is available. Click on the button below to update to version: %(version)s"
+msgstr ""
+
+#: cps/updater.py:491 cps/web.py:2766
+msgid "Unknown"
+msgstr "Невідомий"
+
+#: cps/web.py:1177
+msgid "Requesting update package"
+msgstr "Перевірка оновлень"
+
+#: cps/web.py:1178
+msgid "Downloading update package"
+msgstr "Завантаження оновлень"
+
+#: cps/web.py:1179
+msgid "Unzipping update package"
+msgstr "Розпакування оновлення"
+
+#: cps/web.py:1180
+msgid "Replacing files"
+msgstr ""
+
+#: cps/web.py:1181
+msgid "Database connections are closed"
+msgstr "З'єднання з базою даних закрите"
+
+#: cps/web.py:1182
+msgid "Stopping server"
+msgstr ""
+
+#: cps/web.py:1183
+msgid "Update finished, please press okay and reload page"
+msgstr "Оновлення встановлені, натисніть ok і перезавантажте сторінку"
+
+#: cps/web.py:1184 cps/web.py:1185 cps/web.py:1186 cps/web.py:1187
+msgid "Update failed:"
+msgstr ""
+
+#: cps/web.py:1210
+msgid "Recently Added Books"
+msgstr "Нещодавно додані книги"
+
+#: cps/web.py:1220
+msgid "Newest Books"
+msgstr "Найновіші книги"
+
+#: cps/web.py:1232
+msgid "Oldest Books"
+msgstr "Найстаріші книги"
+
+#: cps/web.py:1244
+msgid "Books (A-Z)"
+msgstr "Книги (А-Я)"
+
+#: cps/web.py:1255
+msgid "Books (Z-A)"
+msgstr "Книги (Я-А)"
+
+#: cps/web.py:1284
+msgid "Hot Books (most downloaded)"
+msgstr "Популярні книги (найбільш завантажувані)"
+
+#: cps/web.py:1297
+msgid "Best rated books"
+msgstr "Книги з найкращим рейтингом"
+
+#: cps/templates/index.xml:39 cps/web.py:1310
+msgid "Random Books"
+msgstr "Випадковий список книг"
+
+#: cps/web.py:1337 cps/web.py:1592 cps/web.py:2135
+msgid "Error opening eBook. File does not exist or file is not accessible:"
+msgstr "Неможливо відкрити книгу. Файл не існує або немає доступу."
+
+#: cps/web.py:1365
+msgid "Publisher list"
+msgstr ""
+
+#: cps/web.py:1380
+#, python-format
+msgid "Publisher: %(name)s"
+msgstr ""
+
+#: cps/templates/index.xml:83 cps/web.py:1412
+msgid "Series list"
+msgstr "Список серій"
+
+#: cps/web.py:1426
+#, python-format
+msgid "Series: %(serie)s"
+msgstr "Серії: %(serie)s"
+
+#: cps/web.py:1452
+msgid "Available languages"
+msgstr "Доступні мови"
+
+#: cps/web.py:1472
+#, python-format
+msgid "Language: %(name)s"
+msgstr "Мова: %(name)s"
+
+#: cps/templates/index.xml:76 cps/web.py:1483
+msgid "Category list"
+msgstr "Список категорій"
+
+#: cps/web.py:1497
+#, python-format
+msgid "Category: %(name)s"
+msgstr "Категорія: %(name)s"
+
+#: cps/templates/layout.html:71 cps/web.py:1628
+msgid "Tasks"
+msgstr ""
+
+#: cps/web.py:1662
+msgid "Statistics"
+msgstr "Статистика"
+
+#: cps/web.py:1730
+msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
+msgstr ""
+
+#: cps/web.py:1775
+msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
+msgstr "Домен зворотнього зв'язку не підтверджено. Виконайте дії для підтвердження домену, будь-ласка"
+
+#: cps/web.py:1851
+msgid "Server restarted, please reload page"
+msgstr "Сервер перезавантажено, будь-ласка, перезавантажте сторінку"
+
+#: cps/web.py:1854
+msgid "Performing shutdown of server, please close window"
+msgstr "Виконується зупинка серверу, будь-ласка, закрийте вікно"
+
+#: cps/web.py:1934
+msgid "Published after "
+msgstr ""
+
+#: cps/web.py:1941
+msgid "Published before "
+msgstr "Опубліковано до"
+
+#: cps/web.py:1955
+#, python-format
+msgid "Rating <= %(rating)s"
+msgstr ""
+
+#: cps/web.py:1957
+#, python-format
+msgid "Rating >= %(rating)s"
+msgstr ""
+
+#: cps/web.py:2018 cps/web.py:2027
+msgid "search"
+msgstr "пошук"
+
+#: cps/templates/index.xml:47 cps/templates/index.xml:51
+#: cps/templates/layout.html:146 cps/web.py:2094
+msgid "Read Books"
+msgstr "Прочитані книги"
+
+#: cps/templates/index.xml:55 cps/templates/index.xml:59
+#: cps/templates/layout.html:148 cps/web.py:2097
+msgid "Unread Books"
+msgstr "Непрочитані книги"
+
+#: cps/web.py:2145 cps/web.py:2147 cps/web.py:2149 cps/web.py:2161
+msgid "Read a Book"
+msgstr "Читати книгу"
+
+#: cps/web.py:2220 cps/web.py:3138
+msgid "Please fill out all fields!"
+msgstr "Будь-ласка, заповніть всі поля!"
+
+#: cps/web.py:2221 cps/web.py:2243 cps/web.py:2247 cps/web.py:2252
+#: cps/web.py:2254
+msgid "register"
+msgstr "зареєструватись"
+
+#: cps/web.py:2242 cps/web.py:3357
+msgid "An unknown error occurred. Please try again later."
+msgstr ""
+
+#: cps/web.py:2245
+msgid "Your e-mail is not allowed to register"
+msgstr ""
+
+#: cps/web.py:2248
+msgid "Confirmation e-mail was send to your e-mail account."
+msgstr ""
+
+#: cps/web.py:2251
+msgid "This username or e-mail address is already in use."
+msgstr ""
+
+#: cps/web.py:2268 cps/web.py:2364
+#, python-format
+msgid "you are now logged in as: '%(nickname)s'"
+msgstr "Ви увійшли як користувач: '%(nickname)s'"
+
+#: cps/web.py:2273
+msgid "Wrong Username or Password"
+msgstr "Помилка в імені користувача або паролі"
+
+#: cps/web.py:2279 cps/web.py:2300
+msgid "login"
+msgstr "увійти"
+
+#: cps/web.py:2312 cps/web.py:2343
+msgid "Token not found"
+msgstr "Токен не знайдено"
+
+#: cps/web.py:2320 cps/web.py:2351
+msgid "Token has expired"
+msgstr "Час дії токено вичерпано"
+
+#: cps/web.py:2328
+msgid "Success! Please return to your device"
+msgstr "Вдалося! Будь-ласка, поверніться до вашого пристрою"
+
+#: cps/web.py:2378
+msgid "Please configure the SMTP mail settings first..."
+msgstr "Будь-ласка, спочатку сконфігуруйте параметри SMTP"
+
+#: cps/web.py:2383
+#, python-format
+msgid "Book successfully queued for sending to %(kindlemail)s"
+msgstr ""
+
+#: cps/web.py:2387
+#, python-format
+msgid "There was an error sending this book: %(res)s"
+msgstr "Помилка при відправці книги: %(res)s"
+
+#: cps/web.py:2389 cps/web.py:3191
+msgid "Please configure your kindle e-mail address first..."
+msgstr ""
+
+#: cps/web.py:2400 cps/web.py:2452
+msgid "Invalid shelf specified"
+msgstr ""
+
+#: cps/web.py:2407
+#, python-format
+msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s"
+msgstr ""
+
+#: cps/web.py:2415
+msgid "You are not allowed to edit public shelves"
+msgstr ""
+
+#: cps/web.py:2424
+#, python-format
+msgid "Book is already part of the shelf: %(shelfname)s"
+msgstr ""
+
+#: cps/web.py:2438
+#, python-format
+msgid "Book has been added to shelf: %(sname)s"
+msgstr "Книга додана на книжкову полицю: %(sname)s"
+
+#: cps/web.py:2457
+#, python-format
+msgid "You are not allowed to add a book to the the shelf: %(name)s"
+msgstr ""
+
+#: cps/web.py:2462
+msgid "User is not allowed to edit public shelves"
+msgstr ""
+
+#: cps/web.py:2480
+#, python-format
+msgid "Books are already part of the shelf: %(name)s"
+msgstr ""
+
+#: cps/web.py:2494
+#, python-format
+msgid "Books have been added to shelf: %(sname)s"
+msgstr ""
+
+#: cps/web.py:2496
+#, python-format
+msgid "Could not add books to shelf: %(sname)s"
+msgstr ""
+
+#: cps/web.py:2533
+#, python-format
+msgid "Book has been removed from shelf: %(sname)s"
+msgstr "Книга видалена з книжкової полиці: %(sname)s"
+
+#: cps/web.py:2539
+#, python-format
+msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
+msgstr "Вибачте, але у вас немає дозволу для видалення книги з цієї полиці"
+
+#: cps/web.py:2560 cps/web.py:2584
+#, python-format
+msgid "A shelf with the name '%(title)s' already exists."
+msgstr "Книжкова полиця з назвою '%(title)s' уже существует."
+
+#: cps/web.py:2565
+#, python-format
+msgid "Shelf %(title)s created"
+msgstr "Створена книжкова полиця %(title)s"
+
+#: cps/web.py:2567 cps/web.py:2595
+msgid "There was an error"
+msgstr "Сталась помилка"
+
+#: cps/web.py:2568 cps/web.py:2570
+msgid "create a shelf"
+msgstr "створити книжкову полицю"
+
+#: cps/web.py:2593
+#, python-format
+msgid "Shelf %(title)s changed"
+msgstr "Книжкова полиця %(title)s змінена"
+
+#: cps/web.py:2596 cps/web.py:2598
+msgid "Edit a shelf"
+msgstr "Змінити книжкову полицю"
+
+#: cps/web.py:2619
+#, python-format
+msgid "successfully deleted shelf %(name)s"
+msgstr "Книжкова полиця %(name)s видалена"
+
+#: cps/web.py:2646
+#, python-format
+msgid "Shelf: '%(name)s'"
+msgstr "Книжкова полиця: '%(name)s'"
+
+#: cps/web.py:2649
+msgid "Error opening shelf. Shelf does not exist or is not accessible"
+msgstr "Помилка при відкриванні полиці. Полиця не існує або до неї відсутній доступ"
+
+#: cps/web.py:2680
+#, python-format
+msgid "Change order of Shelf: '%(name)s'"
+msgstr "Змінити розташування книжкової полиці '%(name)s'"
+
+#: cps/web.py:2709 cps/web.py:3144
+msgid "E-mail is not from valid domain"
+msgstr ""
+
+#: cps/web.py:2711 cps/web.py:2753 cps/web.py:2756
+#, python-format
+msgid "%(name)s's profile"
+msgstr "Профіль %(name)s"
+
+#: cps/web.py:2751
+msgid "Found an existing account for this e-mail address."
+msgstr ""
+
+#: cps/web.py:2754
+msgid "Profile updated"
+msgstr "Профіль оновлено"
+
+#: cps/web.py:2785
+msgid "Admin page"
+msgstr "Сторінка адміністратора"
+
+#: cps/web.py:2867 cps/web.py:3047
+msgid "Calibre-Web configuration updated"
+msgstr ""
+
+#: cps/templates/admin.html:100 cps/web.py:2881
+msgid "UI Configuration"
+msgstr "Конфігурація інтерфейсу"
+
+#: cps/web.py:2899
+msgid "Import of optional Google Drive requirements missing"
+msgstr "Імпорт додаткових вимог Google Drive відсутній"
+
+#: cps/web.py:2902
+msgid "client_secrets.json is missing or not readable"
+msgstr "Неможливо зчитати client_secrets.json або він відсутній"
+
+#: cps/web.py:2907 cps/web.py:2936
+msgid "client_secrets.json is not configured for web application"
+msgstr "Неможливо зконфігурувати client_secrets.json для веб-додатку"
+
+#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977
+#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3056 cps/web.py:3064
+#: cps/web.py:3080
+msgid "Basic Configuration"
+msgstr "Настройки сервера"
+
+#: cps/web.py:2962
+msgid "Keyfile location is not valid, please enter correct path"
+msgstr "Невідомий шлях до Keyfile. Будь-ласка введіть коректний"
+
+#: cps/web.py:2974
+msgid "Certfile location is not valid, please enter correct path"
+msgstr "Невідомий шлях до Certfile. Будь-ласка введіть коректний"
+
+#: cps/web.py:3019
+msgid "Logfile location is not valid, please enter correct path"
+msgstr "Невідомий шлях до Logfile. Будь-ласка введіть коректний"
+
+#: cps/web.py:3060
+msgid "DB location is not valid, please enter correct path"
+msgstr "Невідомий шлях до БД. Будь-ласка введіть коректний"
+
+#: cps/templates/admin.html:33 cps/web.py:3140 cps/web.py:3146 cps/web.py:3162
+msgid "Add new user"
+msgstr "Додати користувача"
+
+#: cps/web.py:3152
+#, python-format
+msgid "User '%(user)s' created"
+msgstr "Користувач '%(user)s' додан"
+
+#: cps/web.py:3156
+msgid "Found an existing account for this e-mail address or nickname."
+msgstr ""
+
+#: cps/web.py:3186
+#, python-format
+msgid "Test e-mail successfully send to %(kindlemail)s"
+msgstr ""
+
+#: cps/web.py:3189
+#, python-format
+msgid "There was an error sending the Test e-mail: %(res)s"
+msgstr ""
+
+#: cps/web.py:3193
+msgid "E-mail server settings updated"
+msgstr ""
+
+#: cps/web.py:3194
+msgid "Edit e-mail server settings"
+msgstr ""
+
+#: cps/web.py:3219
+#, python-format
+msgid "User '%(nick)s' deleted"
+msgstr "Користувача '%(nick)s' видалено"
+
+#: cps/web.py:3332
+#, python-format
+msgid "User '%(nick)s' updated"
+msgstr "Користувача '%(nick)s' оновлено"
+
+#: cps/web.py:3335
+msgid "An unknown error occured."
+msgstr "Сталась невідома помилка"
+
+#: cps/web.py:3337
+#, python-format
+msgid "Edit User %(nick)s"
+msgstr "Змінити користувача %(nick)s"
+
+#: cps/web.py:3354
+#, python-format
+msgid "Password for user %(user)s reset"
+msgstr ""
+
+#: cps/web.py:3368 cps/web.py:3574
+msgid "Error opening eBook. File does not exist or file is not accessible"
+msgstr "Сталась помилка при відкриванні eBook. Файл не існує або відсутній доступ до нього"
+
+#: cps/web.py:3396 cps/web.py:3868
+msgid "edit metadata"
+msgstr "змінити метадані"
+
+#: cps/web.py:3489 cps/web.py:3736
+#, python-format
+msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
+msgstr ""
+
+#: cps/web.py:3493 cps/web.py:3740
+msgid "File to be uploaded must have an extension"
+msgstr "Завантажувальний файл повинен мати розширення"
+
+#: cps/web.py:3505 cps/web.py:3760
+#, python-format
+msgid "Failed to create path %(path)s (Permission denied)."
+msgstr ""
+
+#: cps/web.py:3510
+#, python-format
+msgid "Failed to store file %(file)s."
+msgstr ""
+
+#: cps/web.py:3527
+#, python-format
+msgid "File format %(ext)s added to %(book)s"
+msgstr ""
+
+#: cps/web.py:3545
+#, python-format
+msgid "Failed to create path for cover %(path)s (Permission denied)."
+msgstr ""
+
+#: cps/web.py:3553
+#, python-format
+msgid "Failed to store cover-file %(cover)s."
+msgstr ""
+
+#: cps/web.py:3556
+msgid "Cover-file is not a valid image file"
+msgstr ""
+
+#: cps/web.py:3586 cps/web.py:3595
+msgid "unknown"
+msgstr "невідомий"
+
+#: cps/web.py:3627
+msgid "Cover is not a jpg file, can't save"
+msgstr "Обкладинка не є .jpg файлом. Неможливо зберегти"
+
+#: cps/web.py:3675
+#, python-format
+msgid "%(langname)s is not a valid language"
+msgstr ""
+
+#: cps/web.py:3706
+msgid "Metadata successfully updated"
+msgstr ""
+
+#: cps/web.py:3715
+msgid "Error editing book, please check logfile for details"
+msgstr "Сталась помилка при редагуванні книги. Будь-ласка, перевірте лог-файл для деталей"
+
+#: cps/web.py:3765
+#, python-format
+msgid "Failed to store file %(file)s (Permission denied)."
+msgstr ""
+
+#: cps/web.py:3770
+#, python-format
+msgid "Failed to delete file %(file)s (Permission denied)."
+msgstr ""
+
+#: cps/web.py:3888
+msgid "Source or destination format for conversion missing"
+msgstr ""
+
+#: cps/web.py:3898
+#, python-format
+msgid "Book successfully queued for converting to %(book_format)s"
+msgstr ""
+
+#: cps/web.py:3902
+#, python-format
+msgid "There was an error converting this book: %(res)s"
+msgstr ""
+
+#: cps/worker.py:305
+#, python-format
+msgid "Ebook-converter failed: %(error)s"
+msgstr ""
+
+#: cps/worker.py:316
+#, python-format
+msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
+msgstr "Kindlegen відхилено з помилкою %(error)s. Повідомлення: %(message)s "
+
+#: cps/templates/admin.html:6
+msgid "User list"
+msgstr "Список користувачів"
+
+#: cps/templates/admin.html:9
+msgid "Nickname"
+msgstr "Ім'я користувача"
+
+#: cps/templates/admin.html:10
+msgid "E-mail"
+msgstr ""
+
+#: cps/templates/admin.html:11
+msgid "Kindle"
+msgstr "Kindle"
+
+#: cps/templates/admin.html:12
+msgid "DLS"
+msgstr "DLS"
+
+#: cps/templates/admin.html:13 cps/templates/layout.html:74
+msgid "Admin"
+msgstr "Адмін"
+
+#: cps/templates/admin.html:14 cps/templates/detail.html:22
+#: cps/templates/detail.html:31
+msgid "Download"
+msgstr "Завантажити"
+
+#: cps/templates/admin.html:15 cps/templates/layout.html:64
+msgid "Upload"
+msgstr "Додати нову книгу"
+
+#: cps/templates/admin.html:16
+msgid "Edit"
+msgstr "Редагувати"
+
+#: cps/templates/admin.html:39
+msgid "SMTP e-mail server settings"
+msgstr ""
+
+#: cps/templates/admin.html:42 cps/templates/email_edit.html:11
+msgid "SMTP hostname"
+msgstr "SMTP-сервер"
+
+#: cps/templates/admin.html:43
+msgid "SMTP port"
+msgstr "SMTP-порт"
+
+#: cps/templates/admin.html:44
+msgid "SSL"
+msgstr "SSL"
+
+#: cps/templates/admin.html:45 cps/templates/email_edit.html:27
+msgid "SMTP login"
+msgstr "SMTP логін"
+
+#: cps/templates/admin.html:46
+msgid "From mail"
+msgstr "Відправник"
+
+#: cps/templates/admin.html:56
+msgid "Change SMTP settings"
+msgstr "Змінити налаштування SMTP"
+
+#: cps/templates/admin.html:62
+msgid "Configuration"
+msgstr "Налаштування сервера"
+
+#: cps/templates/admin.html:65
+msgid "Calibre DB dir"
+msgstr "Папка Calibre DB"
+
+#: cps/templates/admin.html:69
+msgid "Log level"
+msgstr ""
+
+#: cps/templates/admin.html:73
+msgid "Port"
+msgstr "Порт"
+
+#: cps/templates/admin.html:79 cps/templates/config_view_edit.html:23
+msgid "Books per page"
+msgstr "Кількість книг на сторінці"
+
+#: cps/templates/admin.html:83
+msgid "Uploading"
+msgstr "Загрузка на сервер"
+
+#: cps/templates/admin.html:87
+msgid "Anonymous browsing"
+msgstr "Анонімний перегляд"
+
+#: cps/templates/admin.html:91
+msgid "Public registration"
+msgstr "Публічна реєстрація"
+
+#: cps/templates/admin.html:95 cps/templates/remote_login.html:4
+msgid "Remote login"
+msgstr ""
+
+#: cps/templates/admin.html:106
+msgid "Administration"
+msgstr "Адміністрування"
+
+#: cps/templates/admin.html:107
+msgid "Reconnect to Calibre DB"
+msgstr "Повторне підключення до БД Calibre"
+
+#: cps/templates/admin.html:108
+msgid "Restart Calibre-Web"
+msgstr ""
+
+#: cps/templates/admin.html:109
+msgid "Stop Calibre-Web"
+msgstr ""
+
+#: cps/templates/admin.html:115
+msgid "Update"
+msgstr ""
+
+#: cps/templates/admin.html:119
+msgid "Version"
+msgstr ""
+
+#: cps/templates/admin.html:120
+msgid "Details"
+msgstr ""
+
+#: cps/templates/admin.html:126
+msgid "Current version"
+msgstr ""
+
+#: cps/templates/admin.html:132
+msgid "Check for update"
+msgstr "Перевірка оновлень"
+
+#: cps/templates/admin.html:133
+msgid "Perform Update"
+msgstr "Встановити оновлення"
+
+#: cps/templates/admin.html:145
+msgid "Do you really want to restart Calibre-Web?"
+msgstr ""
+
+#: cps/templates/admin.html:150 cps/templates/admin.html:164
+#: cps/templates/admin.html:184 cps/templates/shelf.html:63
+msgid "Ok"
+msgstr "Ok"
+
+#: cps/templates/admin.html:151 cps/templates/admin.html:165
+#: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200
+#: cps/templates/config_edit.html:226 cps/templates/config_view_edit.html:175
+#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
+#: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19
+#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:149
+msgid "Back"
+msgstr "Назад"
+
+#: cps/templates/admin.html:163
+msgid "Do you really want to stop Calibre-Web?"
+msgstr ""
+
+#: cps/templates/admin.html:175
+msgid "Updating, please do not reload page"
+msgstr "Встановлення оновлень, будь-ласка, не оновлюйте сторінку"
+
+#: cps/templates/author.html:15
+msgid "via"
+msgstr "через"
+
+#: cps/templates/author.html:23
+msgid "In Library"
+msgstr "У бібліотеці"
+
+#: cps/templates/author.html:71
+msgid "More by"
+msgstr "Більше за"
+
+#: cps/templates/book_edit.html:16
+msgid "Delete Book"
+msgstr "Видалити книгу"
+
+#: cps/templates/book_edit.html:19
+msgid "Delete formats:"
+msgstr ""
+
+#: cps/templates/book_edit.html:22 cps/templates/book_edit.html:199
+#: cps/templates/email_edit.html:73 cps/templates/email_edit.html:74
+msgid "Delete"
+msgstr "Видалити"
+
+#: 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:36 cps/templates/book_edit.html:43
+msgid "select an option"
+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:63 cps/templates/book_edit.html:259
+#: cps/templates/book_edit.html:277 cps/templates/search_form.html:10
+msgid "Author"
+msgstr "Автор"
+
+#: cps/templates/book_edit.html:67 cps/templates/book_edit.html:264
+#: cps/templates/book_edit.html:279 cps/templates/search_form.html:106
+msgid "Description"
+msgstr "Опис"
+
+#: cps/templates/book_edit.html:71 cps/templates/search_form.html:33
+msgid "Tags"
+msgstr "Теги"
+
+#: cps/templates/book_edit.html:75 cps/templates/layout.html:157
+#: cps/templates/search_form.html:53
+msgid "Series"
+msgstr "Серії"
+
+#: cps/templates/book_edit.html:79
+msgid "Series id"
+msgstr "Серія"
+
+#: cps/templates/book_edit.html:83
+msgid "Rating"
+msgstr "Рейтинг"
+
+#: cps/templates/book_edit.html:87
+msgid "Cover URL (jpg, cover is downloaded and stored in database, field is afterwards empty again)"
+msgstr ""
+
+#: cps/templates/book_edit.html:91
+msgid "Upload Cover from local drive"
+msgstr ""
+
+#: cps/templates/book_edit.html:96 cps/templates/detail.html:148
+msgid "Publishing date"
+msgstr "Опубліковано"
+
+#: cps/templates/book_edit.html:103 cps/templates/book_edit.html:261
+#: cps/templates/book_edit.html:278 cps/templates/detail.html:139
+#: cps/templates/search_form.html:14
+msgid "Publisher"
+msgstr "Видавець"
+
+#: cps/templates/book_edit.html:107 cps/templates/user_edit.html:31
+msgid "Language"
+msgstr "Мова"
+
+#: cps/templates/book_edit.html:117 cps/templates/search_form.html:117
+msgid "Yes"
+msgstr "Так"
+
+#: cps/templates/book_edit.html:118 cps/templates/search_form.html:118
+msgid "No"
+msgstr "Ні"
+
+#: cps/templates/book_edit.html:164
+msgid "Upload format"
+msgstr "Формат завантаження"
+
+#: cps/templates/book_edit.html:173
+msgid "view book after edit"
+msgstr "переглянути книгу після редагування"
+
+#: cps/templates/book_edit.html:176 cps/templates/book_edit.html:212
+msgid "Get metadata"
+msgstr "Отримати метадані"
+
+#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:224
+#: cps/templates/config_view_edit.html:174 cps/templates/login.html:20
+#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17
+#: cps/templates/user_edit.html:147
+msgid "Submit"
+msgstr "Зберегти"
+
+#: cps/templates/book_edit.html:191
+msgid "Are you really sure?"
+msgstr ""
+
+#: cps/templates/book_edit.html:194
+msgid "Book will be deleted from Calibre database"
+msgstr "Книга буде видалена з БД Calibre"
+
+#: cps/templates/book_edit.html:195
+msgid "and from hard disk"
+msgstr "і з диску"
+
+#: cps/templates/book_edit.html:215
+msgid "Keyword"
+msgstr "Ключове слово"
+
+#: cps/templates/book_edit.html:216
+msgid " Search keyword "
+msgstr " Пошук по ключовому слову"
+
+#: cps/templates/book_edit.html:218 cps/templates/layout.html:46
+msgid "Go!"
+msgstr "Шукати"
+
+#: cps/templates/book_edit.html:222
+msgid "Click the cover to load metadata to the form"
+msgstr "Натисніть на обкладинку, щоб отримати метадані"
+
+#: cps/templates/book_edit.html:234 cps/templates/book_edit.html:274
+msgid "Loading..."
+msgstr "Завантаження..."
+
+#: cps/templates/book_edit.html:239 cps/templates/layout.html:224
+msgid "Close"
+msgstr "Закрити"
+
+#: cps/templates/book_edit.html:266 cps/templates/book_edit.html:280
+msgid "Source"
+msgstr "Джерело"
+
+#: cps/templates/book_edit.html:275
+msgid "Search error!"
+msgstr "Помилка пошуку!"
+
+#: cps/templates/book_edit.html:276
+msgid "No Result(s) found! Please try aonther keyword."
+msgstr ""
+
+#: cps/templates/config_edit.html:12
+msgid "Library Configuration"
+msgstr "Налаштування бібліотеки"
+
+#: cps/templates/config_edit.html:19
+msgid "Location of Calibre database"
+msgstr "Розташування БД Calibre"
+
+#: cps/templates/config_edit.html:24
+msgid "Use Google Drive?"
+msgstr "Використовувати Google Drive?"
+
+#: cps/templates/config_edit.html:30
+msgid "Google Drive config problem"
+msgstr "Google Drive проблема налаштування"
+
+#: cps/templates/config_edit.html:36
+msgid "Authenticate Google Drive"
+msgstr "Автентифікація Google Drive"
+
+#: cps/templates/config_edit.html:40
+msgid "Please hit submit to continue with setup"
+msgstr ""
+
+#: cps/templates/config_edit.html:43
+msgid "Please finish Google Drive setup after login"
+msgstr ""
+
+#: cps/templates/config_edit.html:48
+msgid "Google Drive Calibre folder"
+msgstr "Папка Calibre в Google Drive"
+
+#: cps/templates/config_edit.html:56
+msgid "Metadata Watch Channel ID"
+msgstr "Metadata Watch Channel ID"
+
+#: cps/templates/config_edit.html:59
+msgid "Revoke"
+msgstr "Скасувати"
+
+#: cps/templates/config_edit.html:78
+msgid "Server Configuration"
+msgstr "Налаштування серверу"
+
+#: cps/templates/config_edit.html:85
+msgid "Server Port"
+msgstr "Порт сервера"
+
+#: cps/templates/config_edit.html:89
+msgid "SSL certfile location (leave it empty for non-SSL Servers)"
+msgstr "Розташування сертифіката SSL (залиште його порожнім для серверів, які не використовують SSL)"
+
+#: cps/templates/config_edit.html:93
+msgid "SSL Keyfile location (leave it empty for non-SSL Servers)"
+msgstr "Розташування ключових слів SSL (залиште його порожнім для серверів, які не використовують SSL)"
+
+#: cps/templates/config_edit.html:97
+msgid "Update channel"
+msgstr ""
+
+#: cps/templates/config_edit.html:99
+msgid "Stable"
+msgstr ""
+
+#: cps/templates/config_edit.html:100
+msgid "Stable (Automatic)"
+msgstr ""
+
+#: cps/templates/config_edit.html:101
+msgid "Nightly"
+msgstr ""
+
+#: cps/templates/config_edit.html:102
+msgid "Nightly (Automatic)"
+msgstr ""
+
+#: cps/templates/config_edit.html:113
+msgid "Logfile Configuration"
+msgstr "Logfile налаштування"
+
+#: cps/templates/config_edit.html:120
+msgid "Log Level"
+msgstr "Рівень логовання"
+
+#: cps/templates/config_edit.html:129
+msgid "Location and name of logfile (calibre-web.log for no entry)"
+msgstr "Розташування і назва логфайлу (calibre-web.log for no entry)"
+
+#: cps/templates/config_edit.html:140
+msgid "Feature Configuration"
+msgstr "Особливі налаштування"
+
+#: cps/templates/config_edit.html:148
+msgid "Enable uploading"
+msgstr "Дозволити завантаження книг на сервер"
+
+#: cps/templates/config_edit.html:152
+msgid "Enable anonymous browsing"
+msgstr "Дозволити анонімний перегляд"
+
+#: cps/templates/config_edit.html:156
+msgid "Enable public registration"
+msgstr "Дозволити публічну реєстрацію"
+
+#: cps/templates/config_edit.html:160
+msgid "Enable remote login (\"magic link\")"
+msgstr "Включити віддалений логін (\"magic link\")"
+
+#: cps/templates/config_edit.html:165
+msgid "Use"
+msgstr "Використовувати"
+
+#: cps/templates/config_edit.html:166
+msgid "Obtain an API Key"
+msgstr "Отримати ключ API"
+
+#: cps/templates/config_edit.html:170
+msgid "Goodreads API Key"
+msgstr ""
+
+#: cps/templates/config_edit.html:174
+msgid "Goodreads API Secret"
+msgstr ""
+
+#: cps/templates/config_edit.html:187
+msgid "External binaries"
+msgstr ""
+
+#: cps/templates/config_edit.html:195
+msgid "No converter"
+msgstr ""
+
+#: cps/templates/config_edit.html:197
+msgid "Use Kindlegen"
+msgstr ""
+
+#: cps/templates/config_edit.html:199
+msgid "Use calibre's ebook converter"
+msgstr ""
+
+#: cps/templates/config_edit.html:203
+msgid "E-Book converter settings"
+msgstr ""
+
+#: cps/templates/config_edit.html:207
+msgid "Path to convertertool"
+msgstr ""
+
+#: cps/templates/config_edit.html:213
+msgid "Location of Unrar binary"
+msgstr ""
+
+#: cps/templates/config_edit.html:229 cps/templates/layout.html:82
+#: cps/templates/login.html:4
+msgid "Login"
+msgstr "Ім'я користувача"
+
+#: cps/templates/config_view_edit.html:12
+msgid "View Configuration"
+msgstr "Переглянути налаштування"
+
+#: cps/templates/config_view_edit.html:19 cps/templates/layout.html:133
+#: cps/templates/layout.html:134 cps/templates/shelf_edit.html:7
+msgid "Title"
+msgstr "Заголовок"
+
+#: cps/templates/config_view_edit.html:27
+msgid "No. of random books to show"
+msgstr "Кількість показаних випадкових книг"
+
+#: cps/templates/config_view_edit.html:31 cps/templates/readcbr.html:108
+msgid "Theme"
+msgstr "Тема"
+
+#: cps/templates/config_view_edit.html:33
+msgid "Standard Theme"
+msgstr "Стандартна тема"
+
+#: cps/templates/config_view_edit.html:34
+msgid "caliBlur! Dark Theme"
+msgstr ""
+
+#: cps/templates/config_view_edit.html:38
+msgid "Regular expression for ignoring columns"
+msgstr "Regexp для ігнорування стовпців"
+
+#: cps/templates/config_view_edit.html:42
+msgid "Link read/unread status to Calibre column"
+msgstr ""
+
+#: cps/templates/config_view_edit.html:51
+msgid "Regular expression for title sorting"
+msgstr "Regexp для сортування по назві"
+
+#: cps/templates/config_view_edit.html:55
+msgid "Tags for Mature Content"
+msgstr ""
+
+#: cps/templates/config_view_edit.html:69
+msgid "Default settings for new users"
+msgstr "Налаштування по замовчуванню для нових користувачів"
+
+#: cps/templates/config_view_edit.html:77 cps/templates/user_edit.html:104
+msgid "Admin user"
+msgstr "Керування сервером"
+
+#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:113
+msgid "Allow Downloads"
+msgstr "Дозволити завантажувати з сервера"
+
+#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:117
+msgid "Allow Uploads"
+msgstr "Дозволити завантаження на сервер"
+
+#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:121
+msgid "Allow Edit"
+msgstr "Дозволити редагування книг"
+
+#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:125
+msgid "Allow Delete books"
+msgstr "Дозволити видалення книг"
+
+#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:130
+msgid "Allow Changing Password"
+msgstr "Дозволити зміну пароля"
+
+#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:134
+msgid "Allow Editing Public Shelfs"
+msgstr "Дозволити редагування публічних книжкових полиць"
+
+#: cps/templates/config_view_edit.html:111
+msgid "Default visibilities for new users"
+msgstr "Можливості за замовчуванням для нових користувачів"
+
+#: cps/templates/config_view_edit.html:119 cps/templates/user_edit.html:50
+msgid "Show random books"
+msgstr "Показувати випадкові книги"
+
+#: cps/templates/config_view_edit.html:123 cps/templates/user_edit.html:54
+msgid "Show recent books"
+msgstr "Показувати останні книги"
+
+#: cps/templates/config_view_edit.html:127 cps/templates/user_edit.html:58
+msgid "Show sorted books"
+msgstr "Показувати відсортовані книги"
+
+#: cps/templates/config_view_edit.html:131 cps/templates/user_edit.html:62
+msgid "Show hot books"
+msgstr "Показувати популярні книги"
+
+#: cps/templates/config_view_edit.html:135 cps/templates/user_edit.html:66
+msgid "Show best rated books"
+msgstr "Показувати книги з найвищим рейтингом"
+
+#: cps/templates/config_view_edit.html:139 cps/templates/user_edit.html:70
+msgid "Show language selection"
+msgstr "Показувати вибір мови"
+
+#: cps/templates/config_view_edit.html:143 cps/templates/user_edit.html:74
+msgid "Show series selection"
+msgstr "Показувати вибір серії"
+
+#: cps/templates/config_view_edit.html:147 cps/templates/user_edit.html:78
+msgid "Show category selection"
+msgstr "Показувати вибір категорії"
+
+#: cps/templates/config_view_edit.html:151 cps/templates/user_edit.html:82
+msgid "Show author selection"
+msgstr "Показувати вибір автора"
+
+#: cps/templates/config_view_edit.html:155 cps/templates/user_edit.html:86
+msgid "Show publisher selection"
+msgstr ""
+
+#: cps/templates/config_view_edit.html:159 cps/templates/user_edit.html:91
+msgid "Show read and unread"
+msgstr "Показувати прочитані та непрочитані книги"
+
+#: cps/templates/config_view_edit.html:163 cps/templates/user_edit.html:96
+msgid "Show random books in detail view"
+msgstr "Показувати випадкові книги при перегляді деталей"
+
+#: cps/templates/config_view_edit.html:167 cps/templates/user_edit.html:109
+msgid "Show mature content"
+msgstr ""
+
+#: cps/templates/detail.html:63
+msgid "Read in browser"
+msgstr "Відкрити в браузері"
+
+#: cps/templates/detail.html:100
+msgid "Book"
+msgstr "Книга"
+
+#: cps/templates/detail.html:100
+msgid "of"
+msgstr "з"
+
+#: cps/templates/detail.html:106
+msgid "language"
+msgstr "Мова"
+
+#: cps/templates/detail.html:186
+msgid "Read"
+msgstr "Прочитано"
+
+#: cps/templates/detail.html:196
+msgid "Description:"
+msgstr "Опис:"
+
+#: cps/templates/detail.html:209 cps/templates/search.html:14
+msgid "Add to shelf"
+msgstr "Додати на книжкову полицю"
+
+#: cps/templates/detail.html:271
+msgid "Edit metadata"
+msgstr "Редагувати метадані"
+
+#: cps/templates/email_edit.html:15
+msgid "SMTP port (usually 25 for plain SMTP and 465 for SSL and 587 for STARTTLS)"
+msgstr "SMTP-порт (зазвичай 25 для SMTP, 465 для SSL і 587 для STARTTLS)"
+
+#: cps/templates/email_edit.html:19
+msgid "Encryption"
+msgstr "Шифрування"
+
+#: cps/templates/email_edit.html:21
+msgid "None"
+msgstr "Ні"
+
+#: cps/templates/email_edit.html:22
+msgid "STARTTLS"
+msgstr "STARTTLS"
+
+#: cps/templates/email_edit.html:23
+msgid "SSL/TLS"
+msgstr "SSL/TLS"
+
+#: cps/templates/email_edit.html:31
+msgid "SMTP password"
+msgstr "Пароль SMTP"
+
+#: cps/templates/email_edit.html:35
+msgid "From e-mail"
+msgstr "Адрес відправника"
+
+#: cps/templates/email_edit.html:38
+msgid "Save settings"
+msgstr "Зберегти налаштування"
+
+#: cps/templates/email_edit.html:39
+msgid "Save settings and send Test E-Mail"
+msgstr "Зберегти налаштування і відправити тестове повідомлення"
+
+#: cps/templates/email_edit.html:43
+msgid "Allowed domains for registering"
+msgstr ""
+
+#: cps/templates/email_edit.html:47
+msgid "Enter domainname"
+msgstr ""
+
+#: cps/templates/email_edit.html:55
+msgid "Add Domain"
+msgstr ""
+
+#: cps/templates/email_edit.html:58
+msgid "Add"
+msgstr ""
+
+#: cps/templates/email_edit.html:72
+msgid "Do you really want to delete this domain rule?"
+msgstr ""
+
+#: cps/templates/feed.xml:21 cps/templates/layout.html:208
+msgid "Next"
+msgstr "Далі"
+
+#: cps/templates/feed.xml:33 cps/templates/index.xml:11
+#: cps/templates/layout.html:43 cps/templates/layout.html:44
+msgid "Search"
+msgstr "Пошук"
+
+#: cps/templates/http_error.html:23
+msgid "Back to home"
+msgstr ""
+
+#: cps/templates/index.html:5
+msgid "Discover (Random Books)"
+msgstr "Огляд (випадкові книги)"
+
+#: cps/templates/index.xml:6
+msgid "Start"
+msgstr "Старт"
+
+#: cps/templates/index.xml:18 cps/templates/layout.html:139
+msgid "Hot Books"
+msgstr "Популярні книги"
+
+#: cps/templates/index.xml:22
+msgid "Popular publications from this catalog based on Downloads."
+msgstr "Популярні книги в цьому каталозі, на основі кількості завантажень"
+
+#: cps/templates/index.xml:25 cps/templates/layout.html:142
+msgid "Best rated Books"
+msgstr "Книги з найкращим рейтингом"
+
+#: cps/templates/index.xml:29
+msgid "Popular publications from this catalog based on Rating."
+msgstr "Популярні книги з цього каталогу на основі рейтингу"
+
+#: cps/templates/index.xml:32
+msgid "New Books"
+msgstr "Нові книги"
+
+#: cps/templates/index.xml:36
+msgid "The latest Books"
+msgstr "Останні книги"
+
+#: cps/templates/index.xml:43
+msgid "Show Random Books"
+msgstr "Показувати випадкові книги"
+
+#: cps/templates/index.xml:62 cps/templates/layout.html:160
+msgid "Authors"
+msgstr "Автори"
+
+#: cps/templates/index.xml:66
+msgid "Books ordered by Author"
+msgstr "Книги відсортовані за автором"
+
+#: cps/templates/index.xml:69 cps/templates/layout.html:163
+msgid "Publishers"
+msgstr ""
+
+#: cps/templates/index.xml:73
+msgid "Books ordered by publisher"
+msgstr ""
+
+#: cps/templates/index.xml:80
+msgid "Books ordered by category"
+msgstr "Книги відсортовані за категоріями"
+
+#: cps/templates/index.xml:87
+msgid "Books ordered by series"
+msgstr "Книги відсортовані за серією"
+
+#: cps/templates/index.xml:90 cps/templates/layout.html:169
+msgid "Public Shelves"
+msgstr "Загальні книжкові полиці"
+
+#: cps/templates/index.xml:94
+msgid "Books organized in public shelfs, visible to everyone"
+msgstr "Книги, організовані на публічних полицях, видимі всім"
+
+#: cps/templates/index.xml:98 cps/templates/layout.html:173
+msgid "Your Shelves"
+msgstr "Ваші книжкові полиці"
+
+#: cps/templates/index.xml:102
+msgid "User's own shelfs, only visible to the current user himself"
+msgstr "Власні полиці користувача, видимі тільки поточному користувачеві"
+
+#: cps/templates/layout.html:33
+msgid "Toggle navigation"
+msgstr "Включити навігацію"
+
+#: cps/templates/layout.html:54
+msgid "Advanced Search"
+msgstr "Розширений пошук"
+
+#: cps/templates/layout.html:78
+msgid "Logout"
+msgstr "Вийти"
+
+#: cps/templates/layout.html:83 cps/templates/register.html:14
+msgid "Register"
+msgstr "Зареєструватись"
+
+#: cps/templates/layout.html:108
+msgid "Uploading..."
+msgstr "Завантаження..."
+
+#: cps/templates/layout.html:109
+msgid "please don't refresh the page"
+msgstr "будь ласка, не перезавантажуйте сторінку"
+
+#: cps/templates/layout.html:120
+msgid "Browse"
+msgstr "Перегляд"
+
+#: cps/templates/layout.html:122
+msgid "Recently Added"
+msgstr "Останні додані"
+
+#: cps/templates/layout.html:127
+msgid "Sorted Books"
+msgstr "Відсортовані книги"
+
+#: cps/templates/layout.html:131 cps/templates/layout.html:132
+#: cps/templates/layout.html:133 cps/templates/layout.html:134
+msgid "Sort By"
+msgstr "Сортувати за"
+
+#: cps/templates/layout.html:131
+msgid "Newest"
+msgstr "Найновіші"
+
+#: cps/templates/layout.html:132
+msgid "Oldest"
+msgstr "Найстаріші"
+
+#: cps/templates/layout.html:133
+msgid "Ascending"
+msgstr "За зростанням"
+
+#: cps/templates/layout.html:134
+msgid "Descending"
+msgstr "За спаданням"
+
+#: cps/templates/layout.html:151
+msgid "Discover"
+msgstr "Огляд"
+
+#: cps/templates/layout.html:154
+msgid "Categories"
+msgstr "Категорії"
+
+#: cps/templates/layout.html:166 cps/templates/search_form.html:74
+msgid "Languages"
+msgstr "Мови"
+
+#: cps/templates/layout.html:178
+msgid "Create a Shelf"
+msgstr "Створити книжкову полицю"
+
+#: cps/templates/layout.html:179 cps/templates/stats.html:3
+msgid "About"
+msgstr "Про програму"
+
+#: cps/templates/layout.html:193
+msgid "Previous"
+msgstr "Попередній перегляд"
+
+#: cps/templates/layout.html:220
+msgid "Book Details"
+msgstr "Деталі"
+
+#: cps/templates/login.html:8 cps/templates/login.html:9
+#: cps/templates/register.html:7 cps/templates/user_edit.html:8
+msgid "Username"
+msgstr "Ім'я користувача"
+
+#: cps/templates/login.html:12 cps/templates/login.html:13
+#: cps/templates/user_edit.html:21
+msgid "Password"
+msgstr "Пароль"
+
+#: cps/templates/login.html:17
+msgid "Remember me"
+msgstr "Запам'ятати мене"
+
+#: cps/templates/login.html:22
+msgid "Log in with magic link"
+msgstr "Увійдіть в систему за допомогою magic link"
+
+#: cps/templates/osd.xml:5
+msgid "Calibre-Web ebook catalog"
+msgstr ""
+
+#: cps/templates/read.html:69 cps/templates/readcbr.html:79
+#: cps/templates/readcbr.html:103
+msgid "Settings"
+msgstr "Налаштування"
+
+#: cps/templates/read.html:72
+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: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"
+
+#: cps/templates/readpdf.html:418
+msgid "Preparing document for printing..."
+msgstr ""
+
+#: cps/templates/readtxt.html:6
+msgid "Basic txt Reader"
+msgstr "Засіб для читання txt-файлів"
+
+#: cps/templates/register.html:4
+msgid "Register a new account"
+msgstr "Зареєструвати нового користувача"
+
+#: cps/templates/register.html:8
+msgid "Choose a username"
+msgstr "Виберіть ім'я користувача"
+
+#: cps/templates/register.html:11 cps/templates/user_edit.html:13
+msgid "E-mail address"
+msgstr ""
+
+#: cps/templates/register.html:12
+msgid "Your email address"
+msgstr "Ваш email-адрес"
+
+#: cps/templates/remote_login.html:6
+msgid "Using your another device, visit"
+msgstr ""
+
+#: cps/templates/remote_login.html:6
+msgid "and log in"
+msgstr "і логін"
+
+#: cps/templates/remote_login.html:9
+msgid "Once you do so, you will automatically get logged in on this device."
+msgstr "Після цього ви автоматично ввійдете в систему на цьому пристрої."
+
+#: cps/templates/search.html:5
+msgid "No Results for:"
+msgstr "Нічого не знайдено за запитом:"
+
+#: cps/templates/search.html:6
+msgid "Please try a different search"
+msgstr "Спробуйте змінити критерії пошук"
+
+#: cps/templates/search.html:8
+msgid "Results for:"
+msgstr "Результати для:"
+
+#: cps/templates/search_form.html:19
+msgid "Publishing date from"
+msgstr "Дата публікації з"
+
+#: cps/templates/search_form.html:26
+msgid "Publishing date to"
+msgstr "Дата публікації до"
+
+#: cps/templates/search_form.html:43
+msgid "Exclude Tags"
+msgstr "Виключити теги"
+
+#: cps/templates/search_form.html:63
+msgid "Exclude Series"
+msgstr "Виключити серії"
+
+#: cps/templates/search_form.html:84
+msgid "Exclude Languages"
+msgstr "Виключити мови"
+
+#: cps/templates/search_form.html:97
+msgid "Rating bigger than"
+msgstr ""
+
+#: cps/templates/search_form.html:101
+msgid "Rating less than"
+msgstr ""
+
+#: cps/templates/shelf.html:7
+msgid "Delete this Shelf"
+msgstr "Видалити цю книжкову полицю"
+
+#: cps/templates/shelf.html:8
+msgid "Edit Shelf"
+msgstr ""
+
+#: cps/templates/shelf.html:9 cps/templates/shelf_order.html:11
+msgid "Change order"
+msgstr "Змінити порядок"
+
+#: cps/templates/shelf.html:58
+msgid "Do you really want to delete the shelf?"
+msgstr "Ви справді хочете видалити книжкову полицю?"
+
+#: cps/templates/shelf.html:61
+msgid "Shelf will be lost for everybody and forever!"
+msgstr "Книжкова полиця буде остаточно видалена для всіх"
+
+#: cps/templates/shelf_edit.html:13
+msgid "should the shelf be public?"
+msgstr "зробити книжкову полицю доступною для всіх?"
+
+#: cps/templates/shelf_order.html:5
+msgid "Drag 'n drop to rearrange order"
+msgstr "Перетягніть для змінення порядку"
+
+#: cps/templates/stats.html:7
+msgid "Calibre library statistics"
+msgstr "Статистика бібліотеки Calibre"
+
+#: cps/templates/stats.html:12
+msgid "Books in this Library"
+msgstr "Книг в цій бібліотеці"
+
+#: cps/templates/stats.html:16
+msgid "Authors in this Library"
+msgstr "Авторів в цій бібліотеці"
+
+#: cps/templates/stats.html:20
+msgid "Categories in this Library"
+msgstr "Категорій в цій бібліотеці"
+
+#: cps/templates/stats.html:24
+msgid "Series in this Library"
+msgstr "Серій в цій бібліотеці"
+
+#: cps/templates/stats.html:28
+msgid "Linked libraries"
+msgstr "Встановлене ПЗ"
+
+#: cps/templates/stats.html:32
+msgid "Program library"
+msgstr "Назва"
+
+#: cps/templates/stats.html:33
+msgid "Installed Version"
+msgstr "Встановлена версія"
+
+#: cps/templates/tasks.html:7
+msgid "Tasks list"
+msgstr ""
+
+#: cps/templates/tasks.html:12
+msgid "User"
+msgstr ""
+
+#: cps/templates/tasks.html:14
+msgid "Task"
+msgstr ""
+
+#: cps/templates/tasks.html:15
+msgid "Status"
+msgstr ""
+
+#: cps/templates/tasks.html:16
+msgid "Progress"
+msgstr ""
+
+#: cps/templates/tasks.html:17
+msgid "Runtime"
+msgstr ""
+
+#: cps/templates/tasks.html:18
+msgid "Starttime"
+msgstr ""
+
+#: cps/templates/tasks.html:24
+msgid "Delete finished tasks"
+msgstr ""
+
+#: cps/templates/tasks.html:25
+msgid "Hide all tasks"
+msgstr ""
+
+#: cps/templates/user_edit.html:18
+msgid "Reset user Password"
+msgstr ""
+
+#: cps/templates/user_edit.html:27
+msgid "Kindle E-Mail"
+msgstr "Електронний адрес Kindle"
+
+#: cps/templates/user_edit.html:39
+msgid "Show books with language"
+msgstr "Показувати книги на мовах"
+
+#: cps/templates/user_edit.html:41
+msgid "Show all"
+msgstr "Показати всі"
+
+#: cps/templates/user_edit.html:141
+msgid "Delete this user"
+msgstr "Видалити цього користувача"
+
+#: cps/templates/user_edit.html:156
+msgid "Recent Downloads"
+msgstr "Нещодавно переглянуті"
+
+#~ msgid "kindlegen binary %(kindlepath)s not found"
+#~ msgstr "Бінарний %(kindlepath)s не знайдено "
+
+#~ msgid "epub format not found for book id: %(book)d"
+#~ msgstr "Формат epub не знайдено для книги: %(book)d"
+
+#~ msgid "kindlegen failed, no execution permissions"
+#~ msgstr "kindlegen відхилено, відсутній дозвіл на виконання"
+
+#~ msgid "Failed to send mail: %s"
+#~ msgstr "Помилка відправлення листа: %s"
+
+#~ msgid "Calibre-web test email"
+#~ msgstr "Тестове повідомлення від Calibre-web"
+
+#~ msgid "This email has been sent via calibre web."
+#~ msgstr "Це повідомлення було відправлено через calibre web"
+
+#~ msgid "Could not find any formats suitable for sending by email"
+#~ msgstr "Неможливо знайти формат, відповідний для відправки по email"
+
+#~ msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s"
+#~ msgstr "Не вдалося перейменувати заголовок з: \"%s\" на \"%s\". Помилка: %s"
+
+#~ msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s"
+#~ msgstr "Не вдалося перейменувати автора з: \"%s\" на \"%s\". Помилка: %s"
+
+#~ msgid "File %s not found on Google Drive"
+#~ msgstr "Файл %s не знайдено на Google Drive"
+
+#~ msgid "Book path %s not found on Google Drive"
+#~ msgstr "Шлях до книги %s не знайдено на Google Drive"
+
+#~ msgid "Files are replaced"
+#~ msgstr "Файли замінені"
+
+#~ msgid "Server is stopped"
+#~ msgstr "Сервер зупинено"
+
+#~ msgid "Author list"
+#~ msgstr "Автори"
+
+#~ msgid "Update done"
+#~ msgstr "Оновлення завершено"
+
+#~ msgid "Published after %s"
+#~ msgstr "Опубліковано після %s"
+
+#~ msgid "An unknown error occured. Please try again later."
+#~ msgstr "Невідома помилка. Будь-ласка, спробуйте пізніше."
+
+#~ msgid "This username or email address is already in use."
+#~ msgstr "Ім'я користувача або адреса ел. пошти вже використовується"
+
+#~ msgid "Book successfully send to %(kindlemail)s"
+#~ msgstr "Книга успішно відправлена на %(kindlemail)s"
+
+#~ msgid "Please configure your kindle email address first..."
+#~ msgstr "Будь-ласка, спочатку вкажіть ваш kindle email..."
+
+#~ msgid "Found an existing account for this email address."
+#~ msgstr "Знайден обліковий запис для даної адреси email."
+
+#~ msgid "Calibre-web configuration updated"
+#~ msgstr "Конфігурація Calibre-web оновлена"
+
+#~ msgid "Found an existing account for this email address or nickname."
+#~ msgstr "Для вказаної адреси або імені знайдено існуючий обліковий запис."
+
+#~ msgid "Mail settings updated"
+#~ msgstr "Налаштування пошти змінено"
+
+#~ msgid "Test E-Mail successfully send to %(kindlemail)s"
+#~ msgstr "Тестове повідомлення успішно відправлено на адресу %(kindlemail)s"
+
+#~ msgid "There was an error sending the Test E-Mail: %(res)s"
+#~ msgstr "Помилка відправки тестового повідомлення: %(res)s"
+
+#~ msgid "E-Mail settings updated"
+#~ msgstr "Оновлено налаштування e-mail"
+
+#~ msgid "Edit mail settings"
+#~ msgstr "Змінити поштові налаштування"
+
+#~ msgid "File extension \"%s\" is not allowed to be uploaded to this server"
+#~ msgstr "Заборонене завантаження файлів з розширенням \"%s\""
+
+#~ msgid "Failed to store file %s."
+#~ msgstr "Не вдалося зберегти файл"
+
+#~ msgid "Failed to create path %s (Permission denied)."
+#~ msgstr "Помилка при створенні шляху %s (доступ відсутній)"
+
+#~ msgid "Failed to store file %s (Permission denied)."
+#~ msgstr "Помилка запису файлу %s (доступ відсутній)"
+
+#~ msgid "Failed to delete file %s (Permission denied)."
+#~ msgstr "Помилка видалення файлу %s (доступ відсутній)"
+
+#~ msgid "Email"
+#~ msgstr "Імейл"
+
+#~ msgid "Passwd"
+#~ msgstr "Змінити пароль"
+
+#~ msgid "SMTP mail settings"
+#~ msgstr "Параметри SMTP"
+
+#~ msgid "Remote Login"
+#~ msgstr "Віддалений логін"
+
+#~ msgid "Current commit timestamp"
+#~ msgstr "Поточна мітка передачі"
+
+#~ msgid "Newest commit timestamp"
+#~ msgstr "Найновіша мітка передачі"
+
+#~ msgid "Restart Calibre-web"
+#~ msgstr "Перезавантажити Calibre-web"
+
+#~ msgid "Stop Calibre-web"
+#~ msgstr "Зупинити Calibre-web"
+
+#~ msgid "Do you really want to restart Calibre-web?"
+#~ msgstr "Ви дійсно бажаєте перезавантажити Calibre-web?"
+
+#~ msgid "Do you really want to stop Calibre-web?"
+#~ msgstr "Ви дійсно бажаєте зупинити Calibre-web?"
+
+#~ msgid "Are really you sure?"
+#~ msgstr "Ви впевнені?"
+
+#~ msgid "No Result! Please try anonther keyword."
+#~ msgstr "Немає результатів. Будь ласка, спробуйте інше ключове слово"
+
+#~ msgid "Calibre Web ebook catalog"
+#~ msgstr "Каталог електронних книг Calibre Web"
+
+#~ msgid "Choose a password"
+#~ msgstr "Виберіть пароль"
+
+#~ msgid "Email address"
+#~ msgstr "Електронна пошта"
+
+#~ msgid "Edit Shelf name"
+#~ msgstr "Змінити ім'я книжкової полиці"
+
+#~ msgid "caliBlur! Dark Theme (Beta)"
+#~ msgstr "caliBlur! Темна тема (тестова версія)"
+
diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo
index e30fe914..229896f3 100644
Binary files a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo and b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo differ
diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po
index 2b4b31e5..95084e97 100644
--- a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po
+++ b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
-"POT-Creation-Date: 2019-01-12 09:00+0100\n"
+"POT-Creation-Date: 2019-02-03 16:21+0100\n"
"PO-Revision-Date: 2017-01-06 17:00+0000\n"
"Last-Translator: dalin \n"
"Language: zh_Hans_CN\n"
@@ -18,734 +18,743 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.6.0\n"
-#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134
-#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27
+#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150
+#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45
msgid "not installed"
msgstr "未安装"
-#: cps/converter.py:22 cps/converter.py:38
+#: cps/converter.py:40 cps/converter.py:56
msgid "Excecution permissions missing"
msgstr "可执行权限缺失"
-#: cps/converter.py:48
+#: cps/converter.py:66
msgid "not configured"
msgstr "未配置"
-#: cps/helper.py:59
+#: cps/helper.py:77
#, python-format
msgid "%(format)s format not found for book id: %(book)d"
msgstr "找不到id为 %(book)d 的书的 %(format)s 格式"
-#: cps/helper.py:71
+#: cps/helper.py:89
#, python-format
msgid "%(format)s not found on Google Drive: %(fn)s"
msgstr "Google Drive %(fn)s 上找不到 %(format)s"
-#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49
+#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49
msgid "Send to Kindle"
msgstr "发送到Kindle"
-#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188
+#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206
msgid "This e-mail has been sent via Calibre-Web."
msgstr "此邮件已经通过Calibre-Web发送"
-#: cps/helper.py:90
+#: cps/helper.py:108
#, python-format
msgid "%(format)s not found: %(fn)s"
msgstr "找不到 %(format)s: %(fn)s"
-#: cps/helper.py:95
+#: cps/helper.py:113
msgid "Calibre-Web test e-mail"
msgstr "Calibre-Web测试邮件"
-#: cps/helper.py:96
+#: cps/helper.py:114
msgid "Test e-mail"
msgstr "测试邮件"
-#: cps/helper.py:112
+#: cps/helper.py:130
msgid "Get Started with Calibre-Web"
msgstr "开启Calibre-Web之旅"
-#: cps/helper.py:113
+#: cps/helper.py:131
#, python-format
msgid "Registration e-mail for user: %(name)s"
msgstr "用户 %(name)s 的注册邮箱"
-#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132
-#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144
+#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150
+#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162
#, python-format
msgid "Send %(format)s to Kindle"
msgstr ""
-#: cps/helper.py:148 cps/helper.py:152
+#: cps/helper.py:166 cps/helper.py:170
#, python-format
msgid "Convert %(orig)s to %(format)s and send to Kindle"
msgstr ""
-#: cps/helper.py:187
+#: cps/helper.py:205
#, python-format
msgid "E-mail: %(book)s"
msgstr ""
-#: cps/helper.py:190
+#: cps/helper.py:208
msgid "The requested file could not be read. Maybe wrong permissions?"
msgstr "无法读取请求的文件。 可能有错误的权限设置?"
-#: cps/helper.py:295
+#: cps/helper.py:313
#, python-format
msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr "将标题从'%(src)s'改为'%(dest)s'时失败,出错信息: %(error)s"
-#: cps/helper.py:305
+#: cps/helper.py:323
#, python-format
msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr "将作者从'%(src)s'改为'%(dest)s'时失败,出错信息: %(error)s"
-#: cps/helper.py:319
+#: cps/helper.py:337
#, python-format
msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr ""
-#: cps/helper.py:344 cps/helper.py:353
+#: cps/helper.py:362 cps/helper.py:371
#, python-format
msgid "File %(file)s not found on Google Drive"
msgstr "Google Drive上找不到文件 %(file)s"
-#: cps/helper.py:384
+#: cps/helper.py:402
#, python-format
msgid "Book path %(path)s not found on Google Drive"
msgstr "Google Drive上找不到书籍路径 %(path)s"
-#: cps/helper.py:650
+#: cps/helper.py:510
msgid "Error excecuting UnRar"
msgstr "执行UnRar时出错"
-#: cps/helper.py:652
+#: cps/helper.py:512
msgid "Unrar binary file not found"
msgstr "找不到Unrar二进制文件"
-#: cps/helper.py:703
+#: cps/helper.py:543
msgid "Waiting"
msgstr "等待中"
-#: cps/helper.py:705
+#: cps/helper.py:545
msgid "Failed"
msgstr "失败"
-#: cps/helper.py:707
+#: cps/helper.py:547
msgid "Started"
msgstr "已开始"
-#: cps/helper.py:709
+#: cps/helper.py:549
msgid "Finished"
msgstr "已完成"
-#: cps/helper.py:711
+#: cps/helper.py:551
msgid "Unknown Status"
msgstr "未知状态"
-#: cps/helper.py:716
+#: cps/helper.py:556
msgid "E-mail: "
msgstr ""
-#: cps/helper.py:718 cps/helper.py:722
+#: cps/helper.py:558 cps/helper.py:562
msgid "Convert: "
msgstr "转换:"
-#: cps/helper.py:720
+#: cps/helper.py:560
msgid "Upload: "
msgstr "上传:"
-#: cps/helper.py:724
+#: cps/helper.py:564
msgid "Unknown Task: "
msgstr "未知任务:"
-#: cps/web.py:1156 cps/web.py:2866
-msgid "Unknown"
-msgstr "未知"
-
-#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281
-msgid "HTTP Error"
-msgstr "HTTP错误"
-
-#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282
-msgid "Connection error"
-msgstr "连接错误"
-
-#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283
-msgid "Timeout while establishing connection"
-msgstr "建立连接超时"
-
-#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284
-msgid "General error"
-msgstr "一般错误"
-
-#: cps/web.py:1177
+#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423
msgid "Unexpected data while reading update information"
msgstr "读取更新信息时出现异常数据"
-#: cps/web.py:1184
+#: cps/updater.py:258 cps/updater.py:416
msgid "No update available. You already have the latest version installed"
msgstr "没有可用更新。您已经安装了最新版本"
-#: cps/web.py:1209
+#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1184
+msgid "HTTP Error"
+msgstr "HTTP错误"
+
+#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1185
+msgid "Connection error"
+msgstr "连接错误"
+
+#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1186
+msgid "Timeout while establishing connection"
+msgstr "建立连接超时"
+
+#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1187
+msgid "General error"
+msgstr "一般错误"
+
+#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468
msgid "A new update is available. Click on the button below to update to the latest version."
msgstr "有一个更新可用。点击正文按钮更新到最新版本。"
-#: cps/web.py:1259
+#: cps/updater.py:335
msgid "Could not fetch update information"
msgstr "无法获取更新信息"
-#: cps/web.py:1274
+#: cps/updater.py:403
+msgid "No release information available"
+msgstr ""
+
+#: cps/updater.py:449 cps/updater.py:458
+#, python-format
+msgid "A new update is available. Click on the button below to update to version: %(version)s"
+msgstr ""
+
+#: cps/updater.py:491 cps/web.py:2766
+msgid "Unknown"
+msgstr "未知"
+
+#: cps/web.py:1177
msgid "Requesting update package"
msgstr "正在请求更新包"
-#: cps/web.py:1275
+#: cps/web.py:1178
msgid "Downloading update package"
msgstr "正在下载更新包"
-#: cps/web.py:1276
+#: cps/web.py:1179
msgid "Unzipping update package"
msgstr "正在解压更新包"
-#: cps/web.py:1277
+#: cps/web.py:1180
msgid "Replacing files"
msgstr "正在替换文件"
-#: cps/web.py:1278
+#: cps/web.py:1181
msgid "Database connections are closed"
msgstr "数据库连接已关闭"
-#: cps/web.py:1279
+#: cps/web.py:1182
msgid "Stopping server"
msgstr "正在停止服务器"
-#: cps/web.py:1280
+#: cps/web.py:1183
msgid "Update finished, please press okay and reload page"
msgstr "更新完成,请按确定并刷新页面"
-#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284
+#: cps/web.py:1184 cps/web.py:1185 cps/web.py:1186 cps/web.py:1187
msgid "Update failed:"
msgstr "更新失败:"
-#: cps/web.py:1307
+#: cps/web.py:1210
msgid "Recently Added Books"
msgstr "最近添加的书籍"
-#: cps/web.py:1317
+#: cps/web.py:1220
msgid "Newest Books"
msgstr "最新书籍"
-#: cps/web.py:1329
+#: cps/web.py:1232
msgid "Oldest Books"
msgstr "最旧书籍"
-#: cps/web.py:1341
+#: cps/web.py:1244
msgid "Books (A-Z)"
msgstr "书籍 (A-Z)"
-#: cps/web.py:1352
+#: cps/web.py:1255
msgid "Books (Z-A)"
msgstr "书籍 (Z-A)"
-#: cps/web.py:1381
+#: cps/web.py:1284
msgid "Hot Books (most downloaded)"
msgstr "热门书籍(最多下载)"
-#: cps/web.py:1394
+#: cps/web.py:1297
msgid "Best rated books"
msgstr "最高评分书籍"
-#: cps/templates/index.xml:39 cps/web.py:1407
+#: cps/templates/index.xml:39 cps/web.py:1310
msgid "Random Books"
msgstr "随机书籍"
-#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236
+#: cps/web.py:1337 cps/web.py:1592 cps/web.py:2135
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "无法打开电子书。 文件不存在或者文件不可访问:"
-#: cps/web.py:1462
+#: cps/web.py:1365
msgid "Publisher list"
msgstr "出版社列表"
-#: cps/web.py:1477
+#: cps/web.py:1380
#, python-format
msgid "Publisher: %(name)s"
msgstr "出版社: %(name)s"
-#: cps/templates/index.xml:83 cps/web.py:1509
+#: cps/templates/index.xml:83 cps/web.py:1412
msgid "Series list"
msgstr "丛书列表"
-#: cps/web.py:1523
+#: cps/web.py:1426
#, python-format
msgid "Series: %(serie)s"
msgstr "丛书: %(serie)s"
-#: cps/web.py:1549
+#: cps/web.py:1452
msgid "Available languages"
msgstr "可用语言"
-#: cps/web.py:1569
+#: cps/web.py:1472
#, python-format
msgid "Language: %(name)s"
msgstr "语言: %(name)s"
-#: cps/templates/index.xml:76 cps/web.py:1580
+#: cps/templates/index.xml:76 cps/web.py:1483
msgid "Category list"
msgstr "分类列表"
-#: cps/web.py:1594
+#: cps/web.py:1497
#, python-format
msgid "Category: %(name)s"
msgstr "分类: %(name)s"
-#: cps/templates/layout.html:71 cps/web.py:1725
+#: cps/templates/layout.html:71 cps/web.py:1628
msgid "Tasks"
msgstr "任务"
-#: cps/web.py:1759
+#: cps/web.py:1662
msgid "Statistics"
msgstr "统计"
-#: cps/web.py:1867
+#: cps/web.py:1730
+msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
+msgstr ""
+
+#: cps/web.py:1775
msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
msgstr "回调域名尚未被校验,请在google开发者控制台按步骤校验域名"
-#: cps/web.py:1943
+#: cps/web.py:1851
msgid "Server restarted, please reload page"
msgstr "服务器已重启,请刷新页面"
-#: cps/web.py:1946
+#: cps/web.py:1854
msgid "Performing shutdown of server, please close window"
msgstr "正在关闭服务器,请关闭窗口"
-#: cps/web.py:1965
-msgid "Update done"
-msgstr "更新完成"
-
-#: cps/web.py:2035
+#: cps/web.py:1934
msgid "Published after "
msgstr "出版时晚于 "
-#: cps/web.py:2042
+#: cps/web.py:1941
msgid "Published before "
msgstr "出版时早于 "
-#: cps/web.py:2056
+#: cps/web.py:1955
#, python-format
msgid "Rating <= %(rating)s"
msgstr "评分 <= %(rating)s"
-#: cps/web.py:2058
+#: cps/web.py:1957
#, python-format
msgid "Rating >= %(rating)s"
msgstr "评分 >= %(rating)s"
-#: cps/web.py:2119 cps/web.py:2128
+#: cps/web.py:2018 cps/web.py:2027
msgid "search"
msgstr "搜索"
#: cps/templates/index.xml:47 cps/templates/index.xml:51
-#: cps/templates/layout.html:146 cps/web.py:2195
+#: cps/templates/layout.html:146 cps/web.py:2094
msgid "Read Books"
msgstr "已读书籍"
#: cps/templates/index.xml:55 cps/templates/index.xml:59
-#: cps/templates/layout.html:148 cps/web.py:2198
+#: cps/templates/layout.html:148 cps/web.py:2097
msgid "Unread Books"
msgstr "未读书籍"
-#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262
+#: cps/web.py:2145 cps/web.py:2147 cps/web.py:2149 cps/web.py:2161
msgid "Read a Book"
msgstr "阅读一本书"
-#: cps/web.py:2321 cps/web.py:3230
+#: cps/web.py:2220 cps/web.py:3138
msgid "Please fill out all fields!"
msgstr "请填写所有字段"
-#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352
-#: cps/web.py:2354
+#: cps/web.py:2221 cps/web.py:2243 cps/web.py:2247 cps/web.py:2252
+#: cps/web.py:2254
msgid "register"
msgstr "注册"
-#: cps/web.py:2342 cps/web.py:3444
+#: cps/web.py:2242 cps/web.py:3357
msgid "An unknown error occurred. Please try again later."
msgstr "发生一个未知错误,请稍后再试。"
-#: cps/web.py:2345
+#: cps/web.py:2245
msgid "Your e-mail is not allowed to register"
msgstr "您的邮箱不能用来注册"
-#: cps/web.py:2348
+#: cps/web.py:2248
msgid "Confirmation e-mail was send to your e-mail account."
msgstr "确认邮件已经发送到您的邮箱。"
-#: cps/web.py:2351
+#: cps/web.py:2251
msgid "This username or e-mail address is already in use."
msgstr "这个用户名或者邮箱已经被使用。"
-#: cps/web.py:2368 cps/web.py:2464
+#: cps/web.py:2268 cps/web.py:2364
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr "您现在已以'%(nickname)s'身份登录"
-#: cps/web.py:2373
+#: cps/web.py:2273
msgid "Wrong Username or Password"
msgstr "用户名或密码错误"
-#: cps/web.py:2379 cps/web.py:2400
+#: cps/web.py:2279 cps/web.py:2300
msgid "login"
msgstr "登录"
-#: cps/web.py:2412 cps/web.py:2443
+#: cps/web.py:2312 cps/web.py:2343
msgid "Token not found"
msgstr "找不到Token"
-#: cps/web.py:2420 cps/web.py:2451
+#: cps/web.py:2320 cps/web.py:2351
msgid "Token has expired"
msgstr "Token已过期"
-#: cps/web.py:2428
+#: cps/web.py:2328
msgid "Success! Please return to your device"
msgstr "成功!请返回您的设备"
-#: cps/web.py:2478
+#: cps/web.py:2378
msgid "Please configure the SMTP mail settings first..."
msgstr "请先配置SMTP邮箱..."
-#: cps/web.py:2483
+#: cps/web.py:2383
#, python-format
msgid "Book successfully queued for sending to %(kindlemail)s"
msgstr "书籍已经被成功加入 %(kindlemail)s 的发送队列"
-#: cps/web.py:2487
+#: cps/web.py:2387
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr "发送这本书的时候出现错误: %(res)s"
-#: cps/web.py:2489 cps/web.py:3283
+#: cps/web.py:2389 cps/web.py:3191
msgid "Please configure your kindle e-mail address first..."
msgstr "请先配置您的kindle邮箱..."
-#: cps/web.py:2500 cps/web.py:2552
+#: cps/web.py:2400 cps/web.py:2452
msgid "Invalid shelf specified"
msgstr "指定的书架无效"
-#: cps/web.py:2507
+#: cps/web.py:2407
#, python-format
msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s"
msgstr "对不起,您没有添加书籍到书架 %(shelfname)s 的权限"
-#: cps/web.py:2515
+#: cps/web.py:2415
msgid "You are not allowed to edit public shelves"
msgstr "您没有编辑书架的权限"
-#: cps/web.py:2524
+#: cps/web.py:2424
#, python-format
msgid "Book is already part of the shelf: %(shelfname)s"
msgstr "此书已经是书架 %(shelfname)s 的一部分"
-#: cps/web.py:2538
+#: cps/web.py:2438
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr "此书已被添加到书架: %(sname)s"
-#: cps/web.py:2557
+#: cps/web.py:2457
#, python-format
msgid "You are not allowed to add a book to the the shelf: %(name)s"
msgstr "您没有添加书籍到书架 %(name)s 的权限"
-#: cps/web.py:2562
+#: cps/web.py:2462
msgid "User is not allowed to edit public shelves"
msgstr "用户没有编辑公开书架的权限"
-#: cps/web.py:2580
+#: cps/web.py:2480
#, python-format
msgid "Books are already part of the shelf: %(name)s"
msgstr "书籍已经在书架 %(name)s 中了"
-#: cps/web.py:2594
+#: cps/web.py:2494
#, python-format
msgid "Books have been added to shelf: %(sname)s"
msgstr "书籍已经被添加到书架 %(sname)s 中'"
-#: cps/web.py:2596
+#: cps/web.py:2496
#, python-format
msgid "Could not add books to shelf: %(sname)s"
msgstr "无法添加书籍到书架: %(sname)s"
-#: cps/web.py:2633
+#: cps/web.py:2533
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr "此书已从书架 %(sname)s 中删除"
-#: cps/web.py:2639
+#: cps/web.py:2539
#, python-format
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
msgstr "对不起,您没有从书架 %(sname)s 中删除书籍的权限"
-#: cps/web.py:2660 cps/web.py:2684
+#: cps/web.py:2560 cps/web.py:2584
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr "已存在书架 '%(title)s'。"
-#: cps/web.py:2665
+#: cps/web.py:2565
#, python-format
msgid "Shelf %(title)s created"
msgstr "书架 %(title)s 已被创建"
-#: cps/web.py:2667 cps/web.py:2695
+#: cps/web.py:2567 cps/web.py:2595
msgid "There was an error"
msgstr "发生错误"
-#: cps/web.py:2668 cps/web.py:2670
+#: cps/web.py:2568 cps/web.py:2570
msgid "create a shelf"
msgstr "创建书架"
-#: cps/web.py:2693
+#: cps/web.py:2593
#, python-format
msgid "Shelf %(title)s changed"
msgstr "书架 %(title)s 已被修改"
-#: cps/web.py:2696 cps/web.py:2698
+#: cps/web.py:2596 cps/web.py:2598
msgid "Edit a shelf"
msgstr "编辑书架"
-#: cps/web.py:2719
+#: cps/web.py:2619
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr "成功删除书架 %(name)s"
-#: cps/web.py:2746
+#: cps/web.py:2646
#, python-format
msgid "Shelf: '%(name)s'"
msgstr "书架: '%(name)s'"
-#: cps/web.py:2749
+#: cps/web.py:2649
msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "打开书架出错。书架不存在或不可访问"
-#: cps/web.py:2780
+#: cps/web.py:2680
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr "修改书架 '%(name)s' 顺序"
-#: cps/web.py:2809 cps/web.py:3236
+#: cps/web.py:2709 cps/web.py:3144
msgid "E-mail is not from valid domain"
msgstr "邮箱不在有效域中'"
-#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856
+#: cps/web.py:2711 cps/web.py:2753 cps/web.py:2756
#, python-format
msgid "%(name)s's profile"
msgstr "%(name)s 的资料"
-#: cps/web.py:2851
+#: cps/web.py:2751
msgid "Found an existing account for this e-mail address."
msgstr "找到一个已有账号使用这个邮箱。"
-#: cps/web.py:2854
+#: cps/web.py:2754
msgid "Profile updated"
msgstr "资料已更新"
-#: cps/web.py:2882
+#: cps/web.py:2785
msgid "Admin page"
msgstr "管理页"
-#: cps/web.py:2964 cps/web.py:3139
+#: cps/web.py:2867 cps/web.py:3047
msgid "Calibre-Web configuration updated"
msgstr "Calibre-Web配置已更新"
-#: cps/templates/admin.html:100 cps/web.py:2978
+#: cps/templates/admin.html:100 cps/web.py:2881
msgid "UI Configuration"
msgstr "UI配置"
-#: cps/web.py:2996
+#: cps/web.py:2899
msgid "Import of optional Google Drive requirements missing"
msgstr "可选的Google Drive依赖导入缺失"
-#: cps/web.py:2999
+#: cps/web.py:2902
msgid "client_secrets.json is missing or not readable"
msgstr "client_secrets.json文件缺失或不可读"
-#: cps/web.py:3004 cps/web.py:3031
+#: cps/web.py:2907 cps/web.py:2936
msgid "client_secrets.json is not configured for web application"
msgstr "没有为web应用配置client_secrets.json"
-#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072
-#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156
-#: cps/web.py:3172
+#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977
+#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3056 cps/web.py:3064
+#: cps/web.py:3080
msgid "Basic Configuration"
msgstr "基本配置"
-#: cps/web.py:3057
+#: cps/web.py:2962
msgid "Keyfile location is not valid, please enter correct path"
msgstr "key文件位置无效,请输入正确路径"
-#: cps/web.py:3069
+#: cps/web.py:2974
msgid "Certfile location is not valid, please enter correct path"
msgstr "证书文件位置无效,请输入正确路径"
-#: cps/web.py:3112
+#: cps/web.py:3019
msgid "Logfile location is not valid, please enter correct path"
msgstr "日志文件位置无效,请输入正确路径"
-#: cps/web.py:3152
+#: cps/web.py:3060
msgid "DB location is not valid, please enter correct path"
msgstr "DB位置无效,请输入正确路径"
-#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254
+#: cps/templates/admin.html:33 cps/web.py:3140 cps/web.py:3146 cps/web.py:3162
msgid "Add new user"
msgstr "添加新用户"
-#: cps/web.py:3244
+#: cps/web.py:3152
#, python-format
msgid "User '%(user)s' created"
msgstr "用户 '%(user)s' 已被创建"
-#: cps/web.py:3248
+#: cps/web.py:3156
msgid "Found an existing account for this e-mail address or nickname."
msgstr "此邮箱或昵称的账号已经存在。"
-#: cps/web.py:3278
+#: cps/web.py:3186
#, python-format
msgid "Test e-mail successfully send to %(kindlemail)s"
msgstr "测试邮件已经被成功发到 %(kindlemail)s"
-#: cps/web.py:3281
+#: cps/web.py:3189
#, python-format
msgid "There was an error sending the Test e-mail: %(res)s"
msgstr "发送测试邮件出错了: %(res)s"
-#: cps/web.py:3285
+#: cps/web.py:3193
msgid "E-mail server settings updated"
msgstr "已更新邮件服务器设置"
-#: cps/web.py:3286
+#: cps/web.py:3194
msgid "Edit e-mail server settings"
msgstr "编辑邮箱服务器设置"
-#: cps/web.py:3311
+#: cps/web.py:3219
#, python-format
msgid "User '%(nick)s' deleted"
msgstr "用户 '%(nick)s' 已被删除"
-#: cps/web.py:3419
+#: cps/web.py:3332
#, python-format
msgid "User '%(nick)s' updated"
msgstr "用户 '%(nick)s' 已被更新"
-#: cps/web.py:3422
+#: cps/web.py:3335
msgid "An unknown error occured."
msgstr "发生未知错误。"
-#: cps/web.py:3424
+#: cps/web.py:3337
#, python-format
msgid "Edit User %(nick)s"
msgstr "编辑用户 %(nick)s"
-#: cps/web.py:3441
+#: cps/web.py:3354
#, python-format
msgid "Password for user %(user)s reset"
msgstr "用户 %(user)s 的密码已重置"
-#: cps/web.py:3455 cps/web.py:3661
+#: cps/web.py:3368 cps/web.py:3574
msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "打开电子书出错。文件不存在或不可访问"
-#: cps/web.py:3483 cps/web.py:3955
+#: cps/web.py:3396 cps/web.py:3868
msgid "edit metadata"
msgstr "编辑元数据"
-#: cps/web.py:3576 cps/web.py:3823
+#: cps/web.py:3489 cps/web.py:3736
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "不能上传后缀为 '%(ext)s' 的文件到此服务器"
-#: cps/web.py:3580 cps/web.py:3827
+#: cps/web.py:3493 cps/web.py:3740
msgid "File to be uploaded must have an extension"
msgstr "要上传的文件必须有一个后缀"
-#: cps/web.py:3592 cps/web.py:3847
+#: cps/web.py:3505 cps/web.py:3760
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "创建路径 %(path)s 失败(权限拒绝)。"
-#: cps/web.py:3597
+#: cps/web.py:3510
#, python-format
msgid "Failed to store file %(file)s."
msgstr "保存文件 %(file)s 失败。"
-#: cps/web.py:3614
+#: cps/web.py:3527
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "已添加 %(ext)s 格式到 %(book)s"
-#: cps/web.py:3632
+#: cps/web.py:3545
#, python-format
msgid "Failed to create path for cover %(path)s (Permission denied)."
msgstr "为封面 %(path)s 创建路径失败(权限拒绝)。"
-#: cps/web.py:3640
+#: cps/web.py:3553
#, python-format
msgid "Failed to store cover-file %(cover)s."
msgstr "保存封面文件 %(cover)s 失败。"
-#: cps/web.py:3643
+#: cps/web.py:3556
msgid "Cover-file is not a valid image file"
msgstr "封面文件不是一个有效的图片文件"
-#: cps/web.py:3673 cps/web.py:3682
+#: cps/web.py:3586 cps/web.py:3595
msgid "unknown"
msgstr "未知"
-#: cps/web.py:3714
+#: cps/web.py:3627
msgid "Cover is not a jpg file, can't save"
msgstr "封面不是一个jpg文件,无法保存"
-#: cps/web.py:3762
+#: cps/web.py:3675
#, python-format
msgid "%(langname)s is not a valid language"
msgstr "%(langname)s 不是一种有效语言"
-#: cps/web.py:3793
+#: cps/web.py:3706
msgid "Metadata successfully updated"
msgstr "已成功更新元数据"
-#: cps/web.py:3802
+#: cps/web.py:3715
msgid "Error editing book, please check logfile for details"
msgstr "编辑书籍出错,详情请检查日志文件"
-#: cps/web.py:3852
+#: cps/web.py:3765
#, python-format
msgid "Failed to store file %(file)s (Permission denied)."
msgstr "存储文件 %(file)s 失败(权限拒绝)。"
-#: cps/web.py:3857
+#: cps/web.py:3770
#, python-format
msgid "Failed to delete file %(file)s (Permission denied)."
msgstr "删除文件 %(file)s 失败(权限拒绝)。"
-#: cps/web.py:3975
+#: cps/web.py:3888
msgid "Source or destination format for conversion missing"
msgstr "转换的源或目的格式缺失"
-#: cps/web.py:3985
+#: cps/web.py:3898
#, python-format
msgid "Book successfully queued for converting to %(book_format)s"
msgstr "书籍已经被成功加入 %(book_format)s 的转换队列"
-#: cps/web.py:3989
+#: cps/web.py:3902
#, python-format
msgid "There was an error converting this book: %(res)s"
msgstr "转换此书时出现错误: %(res)s"
-#: cps/worker.py:289
+#: cps/worker.py:305
#, python-format
msgid "Ebook-converter failed: %(error)s"
msgstr "电子书转换器失败: %(error)s"
-#: cps/worker.py:300
+#: cps/worker.py:316
#, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "Kindlegen 因为错误 %(error)s 失败。消息: %(message)s"
@@ -902,10 +911,10 @@ msgstr "确定"
#: cps/templates/admin.html:151 cps/templates/admin.html:165
#: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200
-#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175
+#: cps/templates/config_edit.html:226 cps/templates/config_view_edit.html:175
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
#: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19
-#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147
+#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:149
msgid "Back"
msgstr "后退"
@@ -1035,10 +1044,10 @@ msgstr "编辑后查看书籍"
msgid "Get metadata"
msgstr "获取元数据"
-#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210
+#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:224
#: cps/templates/config_view_edit.html:174 cps/templates/login.html:20
-#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17
-#: cps/templates/user_edit.html:145
+#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17
+#: cps/templates/user_edit.html:147
msgid "Submit"
msgstr "提交"
@@ -1111,114 +1120,138 @@ msgid "Authenticate Google Drive"
msgstr "认证 Google Drive"
#: cps/templates/config_edit.html:40
+msgid "Please hit submit to continue with setup"
+msgstr ""
+
+#: cps/templates/config_edit.html:43
msgid "Please finish Google Drive setup after login"
msgstr "登录后请完成Google Drive设置"
-#: cps/templates/config_edit.html:44
+#: cps/templates/config_edit.html:48
msgid "Google Drive Calibre folder"
msgstr "Google Drive Calibre 目录"
-#: cps/templates/config_edit.html:52
+#: cps/templates/config_edit.html:56
msgid "Metadata Watch Channel ID"
msgstr "元数据监视频道ID"
-#: cps/templates/config_edit.html:55
+#: cps/templates/config_edit.html:59
msgid "Revoke"
msgstr "撤回"
-#: cps/templates/config_edit.html:73
+#: cps/templates/config_edit.html:78
msgid "Server Configuration"
msgstr "服务器配置"
-#: cps/templates/config_edit.html:80
+#: cps/templates/config_edit.html:85
msgid "Server Port"
msgstr "服务器端口"
-#: cps/templates/config_edit.html:84
+#: cps/templates/config_edit.html:89
msgid "SSL certfile location (leave it empty for non-SSL Servers)"
msgstr "SSL 证书文件位置(非SSL服务器请留空)"
-#: cps/templates/config_edit.html:88
+#: cps/templates/config_edit.html:93
msgid "SSL Keyfile location (leave it empty for non-SSL Servers)"
msgstr "SSL Key文件位置(非SSL服务器请留空)"
+#: cps/templates/config_edit.html:97
+msgid "Update channel"
+msgstr ""
+
#: cps/templates/config_edit.html:99
+msgid "Stable"
+msgstr ""
+
+#: cps/templates/config_edit.html:100
+msgid "Stable (Automatic)"
+msgstr ""
+
+#: cps/templates/config_edit.html:101
+msgid "Nightly"
+msgstr ""
+
+#: cps/templates/config_edit.html:102
+msgid "Nightly (Automatic)"
+msgstr ""
+
+#: cps/templates/config_edit.html:113
msgid "Logfile Configuration"
msgstr "日志文件配置"
-#: cps/templates/config_edit.html:106
+#: cps/templates/config_edit.html:120
msgid "Log Level"
msgstr "日志级别"
-#: cps/templates/config_edit.html:115
+#: cps/templates/config_edit.html:129
msgid "Location and name of logfile (calibre-web.log for no entry)"
msgstr "日志文件位置和名称(默认为calibre-web.log)"
-#: cps/templates/config_edit.html:126
+#: cps/templates/config_edit.html:140
msgid "Feature Configuration"
msgstr "特性配置"
-#: cps/templates/config_edit.html:134
+#: cps/templates/config_edit.html:148
msgid "Enable uploading"
msgstr "启用上传"
-#: cps/templates/config_edit.html:138
+#: cps/templates/config_edit.html:152
msgid "Enable anonymous browsing"
msgstr "启用匿名浏览"
-#: cps/templates/config_edit.html:142
+#: cps/templates/config_edit.html:156
msgid "Enable public registration"
msgstr "启用注册"
-#: cps/templates/config_edit.html:146
+#: cps/templates/config_edit.html:160
msgid "Enable remote login (\"magic link\")"
msgstr "启用远程登录 ('魔法链接')"
-#: cps/templates/config_edit.html:151
+#: cps/templates/config_edit.html:165
msgid "Use"
msgstr "使用"
-#: cps/templates/config_edit.html:152
+#: cps/templates/config_edit.html:166
msgid "Obtain an API Key"
msgstr "获取API Key"
-#: cps/templates/config_edit.html:156
+#: cps/templates/config_edit.html:170
msgid "Goodreads API Key"
msgstr ""
-#: cps/templates/config_edit.html:160
+#: cps/templates/config_edit.html:174
msgid "Goodreads API Secret"
msgstr ""
-#: cps/templates/config_edit.html:173
+#: cps/templates/config_edit.html:187
msgid "External binaries"
msgstr "外部二进制"
-#: cps/templates/config_edit.html:181
+#: cps/templates/config_edit.html:195
msgid "No converter"
msgstr "没有转换器"
-#: cps/templates/config_edit.html:183
+#: cps/templates/config_edit.html:197
msgid "Use Kindlegen"
msgstr "使用Kindlegen"
-#: cps/templates/config_edit.html:185
+#: cps/templates/config_edit.html:199
msgid "Use calibre's ebook converter"
msgstr "使用calibre的电子书转换器"
-#: cps/templates/config_edit.html:189
+#: cps/templates/config_edit.html:203
msgid "E-Book converter settings"
msgstr "电子书转换设置"
-#: cps/templates/config_edit.html:193
+#: cps/templates/config_edit.html:207
msgid "Path to convertertool"
msgstr "转换工具路径"
-#: cps/templates/config_edit.html:199
+#: cps/templates/config_edit.html:213
msgid "Location of Unrar binary"
msgstr "Unrar二进制位置"
-#: cps/templates/config_edit.html:215 cps/templates/layout.html:82
+#: cps/templates/config_edit.html:229 cps/templates/layout.html:82
#: cps/templates/login.html:4
msgid "Login"
msgstr "登录"
@@ -1268,31 +1301,31 @@ msgstr "成人内容标签"
msgid "Default settings for new users"
msgstr "新用户默认设置"
-#: cps/templates/config_view_edit.html:77 cps/templates/user_edit.html:102
+#: cps/templates/config_view_edit.html:77 cps/templates/user_edit.html:104
msgid "Admin user"
msgstr "管理用户"
-#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:111
+#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:113
msgid "Allow Downloads"
msgstr "允许下载"
-#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:115
+#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:117
msgid "Allow Uploads"
msgstr "允许上传"
-#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:119
+#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:121
msgid "Allow Edit"
msgstr "允许编辑"
-#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:123
+#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:125
msgid "Allow Delete books"
msgstr "允许删除书籍"
-#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:128
+#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:130
msgid "Allow Changing Password"
msgstr "允许修改密码"
-#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:132
+#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:134
msgid "Allow Editing Public Shelfs"
msgstr "允许编辑公共书架"
@@ -1340,15 +1373,15 @@ msgstr "显示作者选择"
msgid "Show publisher selection"
msgstr "显示出版社选择"
-#: cps/templates/config_view_edit.html:159 cps/templates/user_edit.html:90
+#: cps/templates/config_view_edit.html:159 cps/templates/user_edit.html:91
msgid "Show read and unread"
msgstr "显示已读和未读"
-#: cps/templates/config_view_edit.html:163 cps/templates/user_edit.html:94
+#: cps/templates/config_view_edit.html:163 cps/templates/user_edit.html:96
msgid "Show random books in detail view"
msgstr "在详情页显示随机书籍"
-#: cps/templates/config_view_edit.html:167 cps/templates/user_edit.html:107
+#: cps/templates/config_view_edit.html:167 cps/templates/user_edit.html:109
msgid "Show mature content"
msgstr "显示成人内容"
@@ -1733,6 +1766,10 @@ msgstr "垂直"
msgid "PDF.js viewer"
msgstr "PDF.js 查看器"
+#: cps/templates/readpdf.html:418
+msgid "Preparing document for printing..."
+msgstr ""
+
#: cps/templates/readtxt.html:6
msgid "Basic txt Reader"
msgstr "简单txt阅读器"
@@ -1917,80 +1954,1265 @@ msgstr "按语言显示书籍"
msgid "Show all"
msgstr "显示全部"
-#: cps/templates/user_edit.html:139
+#: cps/templates/user_edit.html:141
msgid "Delete this user"
msgstr "删除此用户"
-#: cps/templates/user_edit.html:154
+#: cps/templates/user_edit.html:156
msgid "Recent Downloads"
msgstr "最近下载"
-#~ msgid "Published after %s"
-#~ msgstr "出版时晚于 %s"
+#~ msgid "Afar"
+#~ msgstr "阿法尔语"
-#~ msgid "%s: %s"
+#~ msgid "Abkhazian"
+#~ msgstr "阿布哈兹语"
+
+#~ msgid "Achinese"
+#~ msgstr "亚齐语"
+
+#~ msgid "Acoli"
+#~ msgstr "阿乔利语"
+
+#~ msgid "Adangme"
+#~ msgstr "阿当梅语"
+
+#~ msgid "Adyghe"
+#~ msgstr "阿迪格语"
+
+#~ msgid "Afrihili"
+#~ msgstr "阿弗里希利语"
+
+#~ msgid "Afrikaans"
+#~ msgstr "南非荷兰语"
+
+#~ msgid "Ainu (Japan)"
+#~ msgstr "阿伊努语(日本)"
+
+#~ msgid "Akan"
+#~ msgstr "阿坎语"
+
+#~ msgid "Akkadian"
+#~ msgstr "阿卡德语"
+
+#~ msgid "Aleut"
+#~ msgstr "阿留申语"
+
+#~ msgid "Altai; Southern"
+#~ msgstr "阿尔泰语(南)"
+
+#~ msgid "Amharic"
+#~ msgstr "阿姆哈拉语"
+
+#~ msgid "English; Old (ca. 450-1100)"
+#~ msgstr "英语(上古,约 450-1100)"
+
+#~ msgid "Angika"
+#~ msgstr "安吉卡语"
+
+#~ msgid "Arabic"
+#~ msgstr "阿拉伯语"
+
+#~ msgid "Aramaic; Official (700-300 BCE)"
+#~ msgstr "阿拉米语(官方,公元前 700-300)"
+
+#~ msgid "Aragonese"
+#~ msgstr "阿拉贡语"
+
+#~ msgid "Mapudungun"
+#~ msgstr "阿劳坎语"
+
+#~ msgid "Arapaho"
+#~ msgstr "阿拉帕霍语"
+
+#~ msgid "Arawak"
+#~ msgstr "阿拉瓦克语"
+
+#~ msgid "Assamese"
+#~ msgstr "阿萨姆语"
+
+#~ msgid "Asturian"
+#~ msgstr "阿斯图里亚斯语"
+
+#~ msgid "Avaric"
+#~ msgstr "阿瓦尔语"
+
+#~ msgid "Avestan"
+#~ msgstr "阿维斯陀语"
+
+#~ msgid "Awadhi"
+#~ msgstr "阿瓦德语"
+
+#~ msgid "Aymara"
+#~ msgstr "艾马拉语"
+
+#~ msgid "Azerbaijani"
+#~ msgstr "阿塞拜疆语"
+
+#~ msgid "Bashkir"
+#~ msgstr "巴什基尔语"
+
+#~ msgid "Baluchi"
+#~ msgstr "俾路支语"
+
+#~ msgid "Bambara"
+#~ msgstr "班巴拉语"
+
+#~ msgid "Balinese"
+#~ msgstr "巴厘语"
+
+#~ msgid "Basa (Cameroon)"
+#~ msgstr "巴萨语(喀麦隆)"
+
+#~ msgid "Beja"
+#~ msgstr "贝扎语"
+
+#~ msgid "Belarusian"
+#~ msgstr "白俄罗斯语"
+
+#~ msgid "Bemba (Zambia)"
+#~ msgstr "本巴语(赞比亚)"
+
+#~ msgid "Bengali"
+#~ msgstr "孟加拉语"
+
+#~ msgid "Bhojpuri"
+#~ msgstr "博杰普尔语"
+
+#~ msgid "Bikol"
+#~ msgstr "比科尔语"
+
+#~ msgid "Bini"
+#~ msgstr "比尼语"
+
+#~ msgid "Bislama"
+#~ msgstr "比斯拉马语"
+
+#~ msgid "Siksika"
+#~ msgstr "西克西卡语"
+
+#~ msgid "Tibetan"
+#~ msgstr "藏语"
+
+#~ msgid "Bosnian"
+#~ msgstr "波斯尼亚语"
+
+#~ msgid "Braj"
+#~ msgstr "布拉吉语"
+
+#~ msgid "Breton"
+#~ msgstr "布列塔尼语"
+
+#~ msgid "Buriat"
+#~ msgstr "布里亚特语"
+
+#~ msgid "Buginese"
+#~ msgstr "布吉语"
+
+#~ msgid "Bulgarian"
+#~ msgstr "保加利亚语"
+
+#~ msgid "Bilin"
+#~ msgstr "比林语"
+
+#~ msgid "Caddo"
+#~ msgstr "卡多语"
+
+#~ msgid "Carib; Galibi"
+#~ msgstr "加勒比语"
+
+#~ msgid "Catalan"
+#~ msgstr "加泰罗尼亚语"
+
+#~ msgid "Cebuano"
+#~ msgstr "宿务语"
+
+#~ msgid "Czech"
+#~ msgstr "捷克语"
+
+#~ msgid "Chamorro"
+#~ msgstr "查莫罗语"
+
+#~ msgid "Chibcha"
+#~ msgstr "奇布查语"
+
+#~ msgid "Chechen"
+#~ msgstr "车臣语"
+
+#~ msgid "Chagatai"
+#~ msgstr "察合台语"
+
+#~ msgid "Chuukese"
+#~ msgstr "丘克语"
+
+#~ msgid "Mari (Russia)"
+#~ msgstr "马里语(俄罗斯)"
+
+#~ msgid "Chinook jargon"
+#~ msgstr "奇努克混合语"
+
+#~ msgid "Choctaw"
+#~ msgstr "乔克托语"
+
+#~ msgid "Chipewyan"
+#~ msgstr "奇佩维安语"
+
+#~ msgid "Cherokee"
+#~ msgstr "切罗基语"
+
+#~ msgid "Slavonic; Old"
+#~ msgstr "斯拉夫语(古教会)"
+
+#~ msgid "Chuvash"
+#~ msgstr "楚瓦什语"
+
+#~ msgid "Cheyenne"
+#~ msgstr "夏延语"
+
+#~ msgid "Coptic"
+#~ msgstr "科普特语"
+
+#~ msgid "Cornish"
+#~ msgstr "康沃尔语"
+
+#~ msgid "Corsican"
+#~ msgstr "科西嘉语"
+
+#~ msgid "Cree"
+#~ msgstr "克里语"
+
+#~ msgid "Turkish; Crimean"
+#~ msgstr "鞑靼语(克里米亚)"
+
+#~ msgid "Kashubian"
+#~ msgstr "卡舒比语"
+
+#~ msgid "Welsh"
+#~ msgstr "威尔士语"
+
+#~ msgid "Dakota"
+#~ msgstr "达科他语"
+
+#~ msgid "Danish"
+#~ msgstr "丹麦语"
+
+#~ msgid "Dargwa"
+#~ msgstr "达尔格瓦语"
+
+#~ msgid "Delaware"
+#~ msgstr "特拉华语"
+
+#~ msgid "Slave (Athapascan)"
+#~ msgstr "史拉维语(阿沙巴斯甘)"
+
+#~ msgid "German"
+#~ msgstr "德语"
+
+#~ msgid "Dogrib"
+#~ msgstr "多格里布语"
+
+#~ msgid "Dinka"
+#~ msgstr "丁卡语"
+
+#~ msgid "Dhivehi"
+#~ msgstr "迪维希语"
+
+#~ msgid "Dogri (macrolanguage)"
+#~ msgstr "多格拉语"
+
+#~ msgid "Sorbian; Lower"
+#~ msgstr "索布语(下)"
+
+#~ msgid "Duala"
+#~ msgstr "杜亚拉语"
+
+#~ msgid "Dutch; Middle (ca. 1050-1350)"
+#~ msgstr "荷兰语(中古,约 1050-1350)"
+
+#~ msgid "Dyula"
+#~ msgstr "迪尤拉语"
+
+#~ msgid "Dzongkha"
+#~ msgstr "宗喀语"
+
+#~ msgid "Efik"
+#~ msgstr "埃菲克语"
+
+#~ msgid "Egyptian (Ancient)"
+#~ msgstr "埃及语(古)"
+
+#~ msgid "Ekajuk"
+#~ msgstr "埃克丘克语"
+
+#~ msgid "Greek; Modern (1453-)"
+#~ msgstr "希腊语(现代,1453-)"
+
+#~ msgid "Elamite"
+#~ msgstr "埃兰语"
+
+#~ msgid "English"
+#~ msgstr "英语"
+
+#~ msgid "English; Middle (1100-1500)"
+#~ msgstr "英语(中古,1100-1500)"
+
+#~ msgid "Esperanto"
+#~ msgstr "世界语"
+
+#~ msgid "Estonian"
+#~ msgstr "爱沙尼亚语"
+
+#~ msgid "Basque"
+#~ msgstr "巴斯克语"
+
+#~ msgid "Ewe"
+#~ msgstr "埃维语"
+
+#~ msgid "Ewondo"
+#~ msgstr "埃翁多语"
+
+#~ msgid "Fang (Equatorial Guinea)"
+#~ msgstr "芳语(赤道几内亚)"
+
+#~ msgid "Faroese"
+#~ msgstr "法罗语"
+
+#~ msgid "Persian"
+#~ msgstr "波斯语"
+
+#~ msgid "Fanti"
+#~ msgstr "芳蒂语"
+
+#~ msgid "Fijian"
+#~ msgstr "斐济语"
+
+#~ msgid "Filipino"
+#~ msgstr "菲律宾语"
+
+#~ msgid "Finnish"
+#~ msgstr "芬兰语"
+
+#~ msgid "Fon"
+#~ msgstr "丰语"
+
+#~ msgid "French"
+#~ msgstr "法语"
+
+#~ msgid "French; Middle (ca. 1400-1600)"
+#~ msgstr "法语(中古,约 1400-1600)"
+
+#~ msgid "French; Old (842-ca. 1400)"
+#~ msgstr "法语(上古,842-约 1400)"
+
+#~ msgid "Frisian; Northern"
+#~ msgstr "弗里西语(北)"
+
+#~ msgid "Frisian; Eastern"
+#~ msgstr "弗里西亚语(东)"
+
+#~ msgid "Frisian; Western"
+#~ msgstr "弗里西亚语(西)"
+
+#~ msgid "Fulah"
+#~ msgstr "富拉语"
+
+#~ msgid "Friulian"
+#~ msgstr "弗留利语"
+
+#~ msgid "Ga"
+#~ msgstr "加语"
+
+#~ msgid "Gayo"
+#~ msgstr "卡约语"
+
+#~ msgid "Gbaya (Central African Republic)"
+#~ msgstr "巴亚语(中非共和国)"
+
+#~ msgid "Geez"
+#~ msgstr "吉兹语"
+
+#~ msgid "Gilbertese"
+#~ msgstr "吉尔伯特语"
+
+#~ msgid "Gaelic; Scottish"
+#~ msgstr "盖尔语(苏格兰)"
+
+#~ msgid "Irish"
+#~ msgstr "爱尔兰语"
+
+#~ msgid "Galician"
+#~ msgstr "加利西亚语"
+
+#~ msgid "Manx"
+#~ msgstr "马恩岛语"
+
+#~ msgid "German; Middle High (ca. 1050-1500)"
+#~ msgstr "德语(中古高地,约 1050-1500)"
+
+#~ msgid "German; Old High (ca. 750-1050)"
+#~ msgstr "德语(上古高地,约 750-1050)"
+
+#~ msgid "Gondi"
+#~ msgstr "贡德语"
+
+#~ msgid "Gorontalo"
+#~ msgstr "哥伦打洛语"
+
+#~ msgid "Gothic"
+#~ msgstr "哥特语"
+
+#~ msgid "Grebo"
+#~ msgstr "格列博语"
+
+#~ msgid "Greek; Ancient (to 1453)"
+#~ msgstr "希腊语(古典,直到 1453)"
+
+#~ msgid "Guarani"
+#~ msgstr "瓜拉尼语"
+
+#~ msgid "German; Swiss"
+#~ msgstr "德语(瑞士)"
+
+#~ msgid "Gujarati"
+#~ msgstr "古吉拉特语"
+
+#~ msgid "Gwichʼin"
+#~ msgstr "库臣语"
+
+#~ msgid "Haida"
+#~ msgstr "海达语"
+
+#~ msgid "Creole; Haitian"
+#~ msgstr "克里奥尔语(海地)"
+
+#~ msgid "Hausa"
+#~ msgstr "豪萨语"
+
+#~ msgid "Hawaiian"
+#~ msgstr "夏威夷语"
+
+#~ msgid "Hebrew"
+#~ msgstr "希伯来语"
+
+#~ msgid "Herero"
+#~ msgstr "赫雷罗语"
+
+#~ msgid "Hiligaynon"
+#~ msgstr "希利盖农语"
+
+#~ msgid "Hindi"
+#~ msgstr "印地语"
+
+#~ msgid "Hittite"
+#~ msgstr "赫梯语"
+
+#~ msgid "Hmong"
+#~ msgstr "苗语"
+
+#~ msgid "Hiri Motu"
+#~ msgstr "希里莫图语"
+
+#~ msgid "Croatian"
+#~ msgstr "克罗地亚语"
+
+#~ msgid "Sorbian; Upper"
+#~ msgstr "索布语(上)"
+
+#~ msgid "Hungarian"
+#~ msgstr "匈牙利语"
+
+#~ msgid "Hupa"
+#~ msgstr "胡帕语"
+
+#~ msgid "Armenian"
+#~ msgstr "亚美尼亚语"
+
+#~ msgid "Iban"
+#~ msgstr "伊班语"
+
+#~ msgid "Igbo"
+#~ msgstr "伊博语"
+
+#~ msgid "Ido"
+#~ msgstr "伊多语"
+
+#~ msgid "Yi; Sichuan"
+#~ msgstr "彝语(四川)"
+
+#~ msgid "Inuktitut"
+#~ msgstr "伊努伊特语"
+
+#~ msgid "Interlingue"
+#~ msgstr "国际语(西方)"
+
+#~ msgid "Iloko"
+#~ msgstr "伊洛卡诺语"
+
+#~ msgid "Interlingua (International Auxiliary Language Association)"
+#~ msgstr "国际语"
+
+#~ msgid "Indonesian"
+#~ msgstr "印尼语"
+
+#~ msgid "Ingush"
+#~ msgstr "印古什语"
+
+#~ msgid "Inupiaq"
+#~ msgstr "依努庇克语"
+
+#~ msgid "Icelandic"
+#~ msgstr "冰岛语"
+
+#~ msgid "Italian"
+#~ msgstr "意大利语"
+
+#~ msgid "Javanese"
+#~ msgstr "爪哇语"
+
+#~ msgid "Lojban"
+#~ msgstr "逻辑语"
+
+#~ msgid "Japanese"
+#~ msgstr "日语"
+
+#~ msgid "Judeo-Persian"
+#~ msgstr "犹太-波斯语"
+
+#~ msgid "Judeo-Arabic"
+#~ msgstr "犹太-阿拉伯语"
+
+#~ msgid "Kara-Kalpak"
+#~ msgstr "卡拉卡尔帕克语"
+
+#~ msgid "Kabyle"
+#~ msgstr "卡布列语"
+
+#~ msgid "Kachin"
+#~ msgstr "景颇语"
+
+#~ msgid "Kalaallisut"
+#~ msgstr "格陵兰语"
+
+#~ msgid "Kamba (Kenya)"
+#~ msgstr "坎巴语(肯尼亚)"
+
+#~ msgid "Kannada"
+#~ msgstr "卡纳达语"
+
+#~ msgid "Kashmiri"
+#~ msgstr "克什米尔语"
+
+#~ msgid "Georgian"
+#~ msgstr "格鲁吉亚语"
+
+#~ msgid "Kanuri"
+#~ msgstr "卡努里语"
+
+#~ msgid "Kawi"
+#~ msgstr "卡威语"
+
+#~ msgid "Kazakh"
+#~ msgstr "哈萨克语"
+
+#~ msgid "Kabardian"
+#~ msgstr "卡巴尔达语"
+
+#~ msgid "Khasi"
+#~ msgstr "卡西语"
+
+#~ msgid "Khmer; Central"
+#~ msgstr "高棉语"
+
+#~ msgid "Khotanese"
+#~ msgstr "和田语"
+
+#~ msgid "Kikuyu"
+#~ msgstr "基库尤语"
+
+#~ msgid "Kinyarwanda"
+#~ msgstr "基尼阿万达语"
+
+#~ msgid "Kirghiz"
+#~ msgstr "吉尔吉斯语"
+
+#~ msgid "Kimbundu"
+#~ msgstr "金本杜语"
+
+#~ msgid "Konkani (macrolanguage)"
+#~ msgstr "孔卡尼语"
+
+#~ msgid "Komi"
+#~ msgstr "科米语"
+
+#~ msgid "Kongo"
+#~ msgstr "刚果语"
+
+#~ msgid "Korean"
+#~ msgstr "朝鲜语"
+
+#~ msgid "Kosraean"
+#~ msgstr "科斯拉伊语"
+
+#~ msgid "Kpelle"
+#~ msgstr "克佩勒语"
+
+#~ msgid "Karachay-Balkar"
+#~ msgstr "卡拉恰伊-巴尔卡尔语"
+
+#~ msgid "Karelian"
+#~ msgstr "卡累利阿语"
+
+#~ msgid "Kurukh"
+#~ msgstr "库卢克语"
+
+#~ msgid "Kuanyama"
+#~ msgstr "宽亚玛语"
+
+#~ msgid "Kumyk"
+#~ msgstr "库梅克语"
+
+#~ msgid "Kurdish"
+#~ msgstr "库尔德语"
+
+#~ msgid "Kutenai"
+#~ msgstr "库特内语"
+
+#~ msgid "Ladino"
+#~ msgstr "拉迪诺语"
+
+#~ msgid "Lahnda"
+#~ msgstr "拉亨达语"
+
+#~ msgid "Lamba"
+#~ msgstr "兰巴语"
+
+#~ msgid "Lao"
+#~ msgstr "老挝语"
+
+#~ msgid "Latin"
+#~ msgstr "拉丁语"
+
+#~ msgid "Latvian"
+#~ msgstr "拉脱维亚语"
+
+#~ msgid "Lezghian"
+#~ msgstr "列兹金语"
+
+#~ msgid "Limburgan"
+#~ msgstr "林堡语"
+
+#~ msgid "Lingala"
+#~ msgstr "林加拉语"
+
+#~ msgid "Lithuanian"
+#~ msgstr "立陶宛语"
+
+#~ msgid "Mongo"
+#~ msgstr "芒戈语"
+
+#~ msgid "Lozi"
+#~ msgstr "洛齐语"
+
+#~ msgid "Luxembourgish"
+#~ msgstr "卢森堡语"
+
+#~ msgid "Luba-Lulua"
+#~ msgstr "卢巴-卢拉语"
+
+#~ msgid "Luba-Katanga"
+#~ msgstr "卢巴-加丹加语"
+
+#~ msgid "Ganda"
+#~ msgstr "干达语"
+
+#~ msgid "Luiseno"
+#~ msgstr "卢伊塞诺语"
+
+#~ msgid "Lunda"
+#~ msgstr "隆达语"
+
+#~ msgid "Luo (Kenya and Tanzania)"
+#~ msgstr "卢奥语(肯尼亚和坦桑尼亚)"
+
+#~ msgid "Lushai"
+#~ msgstr "卢萨语"
+
+#~ msgid "Madurese"
+#~ msgstr "马都拉语"
+
+#~ msgid "Magahi"
+#~ msgstr "摩揭陀语"
+
+#~ msgid "Marshallese"
+#~ msgstr "马绍尔语"
+
+#~ msgid "Maithili"
+#~ msgstr "米德勒语"
+
+#~ msgid "Makasar"
+#~ msgstr "望加锡语"
+
+#~ msgid "Malayalam"
+#~ msgstr "马拉雅拉姆语"
+
+#~ msgid "Mandingo"
+#~ msgstr "曼丁哥语"
+
+#~ msgid "Marathi"
+#~ msgstr "马拉地语"
+
+#~ msgid "Masai"
+#~ msgstr "马萨伊语"
+
+#~ msgid "Moksha"
+#~ msgstr "莫克沙语"
+
+#~ msgid "Mandar"
+#~ msgstr "曼达语"
+
+#~ msgid "Mende (Sierra Leone)"
+#~ msgstr "门德语(塞拉利昂)"
+
+#~ msgid "Irish; Middle (900-1200)"
+#~ msgstr "爱尔兰语(中古,900-1200)"
+
+#~ msgid "Mi'kmaq"
+#~ msgstr "米克马克语"
+
+#~ msgid "Minangkabau"
+#~ msgstr "米南卡保语"
+
+#~ msgid "Uncoded languages"
+#~ msgstr "未被编码的语言"
+
+#~ msgid "Macedonian"
+#~ msgstr "马其顿语"
+
+#~ msgid "Malagasy"
+#~ msgstr "马达加斯加语"
+
+#~ msgid "Maltese"
+#~ msgstr "马耳他语"
+
+#~ msgid "Manchu"
+#~ msgstr "满语"
+
+#~ msgid "Manipuri"
+#~ msgstr "曼尼普尔语"
+
+#~ msgid "Mohawk"
+#~ msgstr "莫霍克语"
+
+#~ msgid "Mongolian"
+#~ msgstr "蒙古语"
+
+#~ msgid "Mossi"
+#~ msgstr "莫西语"
+
+#~ msgid "Maori"
+#~ msgstr "毛利语"
+
+#~ msgid "Malay (macrolanguage)"
+#~ msgstr "马来语族"
+
+#~ msgid "Multiple languages"
+#~ msgstr "多种语言"
+
+#~ msgid "Creek"
+#~ msgstr "克里克语"
+
+#~ msgid "Mirandese"
+#~ msgstr "米兰德斯语"
+
+#~ msgid "Marwari"
+#~ msgstr "马尔瓦利语"
+
+#~ msgid "Burmese"
+#~ msgstr "缅甸语"
+
+#~ msgid "Erzya"
+#~ msgstr "厄尔兹亚语"
+
+#~ msgid "Neapolitan"
+#~ msgstr "拿坡里语"
+
+#~ msgid "Nauru"
+#~ msgstr "瑙鲁语"
+
+#~ msgid "Navajo"
+#~ msgstr "纳瓦霍语"
+
+#~ msgid "Ndebele; South"
+#~ msgstr "恩德贝勒语(南)"
+
+#~ msgid "Ndebele; North"
+#~ msgstr "恩德贝勒语(北)"
+
+#~ msgid "Ndonga"
+#~ msgstr "恩敦加语"
+
+#~ msgid "German; Low"
+#~ msgstr "撒克逊语(低地)"
+
+#~ msgid "Nepali"
+#~ msgstr "尼泊尔语"
+
+#~ msgid "Bhasa; Nepal"
+#~ msgstr "尼瓦尔语"
+
+#~ msgid "Nias"
+#~ msgstr "尼亚斯语"
+
+#~ msgid "Niuean"
+#~ msgstr "纽埃语"
+
+#~ msgid "Dutch"
+#~ msgstr "荷兰语"
+
+#~ msgid "Norwegian Nynorsk"
+#~ msgstr "新挪威语"
+
+#~ msgid "Norwegian Bokmål"
+#~ msgstr "挪威布克莫尔语"
+
+#~ msgid "Nogai"
+#~ msgstr "诺盖语"
+
+#~ msgid "Norse; Old"
+#~ msgstr "诺尔斯语(古)"
+
+#~ msgid "Norwegian"
+#~ msgstr "挪威语"
+
+#~ msgid "N'Ko"
+#~ msgstr "西非书面语言字母"
+
+#~ msgid "Sotho; Northern"
+#~ msgstr "索托语(北)"
+
+#~ msgid "Newari; Old"
+#~ msgstr "尼瓦尔语(古典)"
+
+#~ msgid "Nyanja"
+#~ msgstr "尼扬贾语"
+
+#~ msgid "Nyamwezi"
+#~ msgstr "尼扬韦齐语"
+
+#~ msgid "Nyankole"
+#~ msgstr "尼扬科勒语"
+
+#~ msgid "Nyoro"
+#~ msgstr "尼奥罗语"
+
+#~ msgid "Nzima"
+#~ msgstr "恩济马语"
+
+#~ msgid "Occitan (post 1500)"
+#~ msgstr "奥克西唐语(1500 后)"
+
+#~ msgid "Ojibwa"
+#~ msgstr "奥吉布瓦语"
+
+#~ msgid "Oriya"
+#~ msgstr "奥利亚语"
+
+#~ msgid "Oromo"
+#~ msgstr "奥罗莫语"
+
+#~ msgid "Osage"
+#~ msgstr "奥萨格语"
+
+#~ msgid "Ossetian"
+#~ msgstr "奥塞梯语"
+
+#~ msgid "Turkish; Ottoman (1500-1928)"
+#~ msgstr "土耳其语(奥斯曼,1500-1928)"
+
+#~ msgid "Pangasinan"
+#~ msgstr "邦阿西楠语"
+
+#~ msgid "Pahlavi"
+#~ msgstr "钵罗钵语"
+
+#~ msgid "Pampanga"
+#~ msgstr "邦板牙语"
+
+#~ msgid "Panjabi"
+#~ msgstr "旁遮普语"
+
+#~ msgid "Papiamento"
+#~ msgstr "帕皮亚门托语"
+
+#~ msgid "Palauan"
+#~ msgstr "帕劳语"
+
+#~ msgid "Persian; Old (ca. 600-400 B.C.)"
+#~ msgstr "波斯语(古,公元前约 600-400)"
+
+#~ msgid "Phoenician"
+#~ msgstr "腓尼基语"
+
+#~ msgid "Pali"
+#~ msgstr "巴利语"
+
+#~ msgid "Polish"
+#~ msgstr "波兰语"
+
+#~ msgid "Pohnpeian"
+#~ msgstr "波纳佩语"
+
+#~ msgid "Portuguese"
+#~ msgstr "葡萄牙语"
+
+#~ msgid "Provençal; Old (to 1500)"
+#~ msgstr "普罗旺斯语(古,至 1500)"
+
+#~ msgid "Pushto"
+#~ msgstr "普什图语"
+
+#~ msgid "Quechua"
+#~ msgstr "克丘亚语"
+
+#~ msgid "Rajasthani"
+#~ msgstr "拉贾斯坦语"
+
+#~ msgid "Rapanui"
+#~ msgstr "拉帕努伊语"
+
+#~ msgid "Maori; Cook Islands"
+#~ msgstr "拉罗汤加语"
+
+#~ msgid "Romansh"
+#~ msgstr "罗曼什语"
+
+#~ msgid "Romany"
+#~ msgstr "罗姆语"
+
+#~ msgid "Romanian"
+#~ msgstr "罗马尼亚语"
+
+#~ msgid "Rundi"
+#~ msgstr "基隆迪语"
+
+#~ msgid "Romanian; Macedo-"
+#~ msgstr "阿罗马尼亚语"
+
+#~ msgid "Russian"
+#~ msgstr "俄语"
+
+#~ msgid "Sandawe"
+#~ msgstr "桑达韦语"
+
+#~ msgid "Sango"
+#~ msgstr "桑戈语"
+
+#~ msgid "Yakut"
+#~ msgstr "雅库特语"
+
+#~ msgid "Aramaic; Samaritan"
+#~ msgstr "阿拉米语(萨马利亚)"
+
+#~ msgid "Sanskrit"
+#~ msgstr "梵语"
+
+#~ msgid "Sasak"
+#~ msgstr "萨萨克语"
+
+#~ msgid "Santali"
+#~ msgstr "桑塔利语"
+
+#~ msgid "Sicilian"
+#~ msgstr "西西里语"
+
+#~ msgid "Scots"
+#~ msgstr "苏格兰语"
+
+#~ msgid "Selkup"
+#~ msgstr "塞尔库普语"
+
+#~ msgid "Irish; Old (to 900)"
+#~ msgstr "爱尔兰语(古,至 900)"
+
+#~ msgid "Shan"
+#~ msgstr "掸语"
+
+#~ msgid "Sidamo"
+#~ msgstr "锡达莫语"
+
+#~ msgid "Sinhala"
+#~ msgstr "僧加罗语"
+
+#~ msgid "Slovak"
+#~ msgstr "斯洛伐克语"
+
+#~ msgid "Slovenian"
+#~ msgstr "斯洛文尼亚语"
+
+#~ msgid "Sami; Southern"
+#~ msgstr "萨米语(南)"
+
+#~ msgid "Sami; Northern"
+#~ msgstr "萨米语(北)"
+
+#~ msgid "Lule Sami"
+#~ msgstr "律勒欧-萨米语"
+
+#~ msgid "Sami; Inari"
+#~ msgstr "伊纳里-萨米语"
+
+#~ msgid "Samoan"
+#~ msgstr "萨摩亚语"
+
+#~ msgid "Sami; Skolt"
+#~ msgstr "斯科特-萨米语"
+
+#~ msgid "Shona"
+#~ msgstr "修纳语"
+
+#~ msgid "Sindhi"
+#~ msgstr "信德语"
+
+#~ msgid "Soninke"
+#~ msgstr "索宁克语"
+
+#~ msgid "Sogdian"
+#~ msgstr "粟特语"
+
+#~ msgid "Somali"
+#~ msgstr "索马里语"
+
+#~ msgid "Sotho; Southern"
+#~ msgstr "索托语(南)"
+
+#~ msgid "Spanish"
+#~ msgstr "西班牙语"
+
+#~ msgid "Albanian"
+#~ msgstr "阿尔巴尼亚语"
+
+#~ msgid "Sardinian"
+#~ msgstr "撒丁语"
+
+#~ msgid "Sranan Tongo"
+#~ msgstr "苏里南汤加语"
+
+#~ msgid "Serbian"
+#~ msgstr "塞尔维亚语"
+
+#~ msgid "Serer"
+#~ msgstr "塞雷尔语"
+
+#~ msgid "Swati"
+#~ msgstr "斯瓦特语"
+
+#~ msgid "Sukuma"
+#~ msgstr "苏库马语"
+
+#~ msgid "Sundanese"
+#~ msgstr "巽他语"
+
+#~ msgid "Susu"
+#~ msgstr "苏苏语"
+
+#~ msgid "Sumerian"
+#~ msgstr "苏美尔语"
+
+#~ msgid "Swahili (macrolanguage)"
+#~ msgstr "斯瓦希里语族"
+
+#~ msgid "Swedish"
+#~ msgstr "瑞典语"
+
+#~ msgid "Syriac; Classical"
+#~ msgstr "叙利亚语(古典)"
+
+#~ msgid "Syriac"
+#~ msgstr "古叙利亚语"
+
+#~ msgid "Tahitian"
+#~ msgstr "塔希提语"
+
+#~ msgid "Tamil"
+#~ msgstr "泰米尔语"
+
+#~ msgid "Tatar"
+#~ msgstr "塔塔尔语"
+
+#~ msgid "Telugu"
+#~ msgstr "泰卢固语"
+
+#~ msgid "Timne"
+#~ msgstr "滕内语"
+
+#~ msgid "Tereno"
+#~ msgstr "特列纳语"
+
+#~ msgid "Tetum"
+#~ msgstr "特塔姆语"
+
+#~ msgid "Tajik"
+#~ msgstr "塔吉克语"
+
+#~ msgid "Tagalog"
+#~ msgstr "塔加洛语"
+
+#~ msgid "Thai"
+#~ msgstr "泰语"
+
+#~ msgid "Tigre"
+#~ msgstr "提格雷语"
+
+#~ msgid "Tigrinya"
+#~ msgstr "提格里尼亚语"
+
+#~ msgid "Tiv"
+#~ msgstr "蒂夫语"
+
+#~ msgid "Tokelau"
+#~ msgstr "托克劳语"
+
+#~ msgid "Klingon"
+#~ msgstr "克林贡语"
+
+#~ msgid "Tlingit"
+#~ msgstr "特林吉特语"
+
+#~ msgid "Tamashek"
+#~ msgstr "塔马舍克语"
+
+#~ msgid "Tonga (Nyasa)"
+#~ msgstr "汤加语 (尼亚萨)"
+
+#~ msgid "Tonga (Tonga Islands)"
+#~ msgstr "汤加语(汤加岛)"
+
+#~ msgid "Tok Pisin"
+#~ msgstr "托克皮辛语"
+
+#~ msgid "Tsimshian"
+#~ msgstr "钦西安语"
+
+#~ msgid "Tswana"
+#~ msgstr "茨瓦纳语"
+
+#~ msgid "Tsonga"
+#~ msgstr "聪加语"
+
+#~ msgid "Turkmen"
+#~ msgstr "土库曼语"
+
+#~ msgid "Tumbuka"
+#~ msgstr "奇图姆布卡语"
+
+#~ msgid "Turkish"
+#~ msgstr "土耳其语"
+
+#~ msgid "Tuvalu"
+#~ msgstr "图瓦卢语"
+
+#~ msgid "Twi"
+#~ msgstr "契维语"
+
+#~ msgid "Tuvinian"
+#~ msgstr "图瓦语"
+
+#~ msgid "Udmurt"
+#~ msgstr "乌德穆尔特语"
+
+#~ msgid "Ugaritic"
+#~ msgstr "乌加里特语"
+
+#~ msgid "Uighur"
+#~ msgstr "维吾尔语"
+
+#~ msgid "Ukrainian"
+#~ msgstr "乌克兰语"
+
+#~ msgid "Umbundu"
+#~ msgstr "翁本杜语"
+
+#~ msgid "Undetermined"
+#~ msgstr "未确定的语言"
+
+#~ msgid "Urdu"
+#~ msgstr "乌尔都语"
+
+#~ msgid "Uzbek"
+#~ msgstr "乌兹别克语"
+
+#~ msgid "Vai"
+#~ msgstr "瓦伊语"
+
+#~ msgid "Venda"
+#~ msgstr "文达语"
+
+#~ msgid "Vietnamese"
+#~ msgstr "越南语"
+
+#~ msgid "Volapük"
+#~ msgstr "沃拉普克语"
+
+#~ msgid "Votic"
+#~ msgstr "沃提克语"
+
+#~ msgid "Wolaytta"
+#~ msgstr "瓦拉莫语"
+
+#~ msgid "Waray (Philippines)"
+#~ msgstr "瓦赖语(菲律宾)"
+
+#~ msgid "Washo"
+#~ msgstr "瓦肖语"
+
+#~ msgid "Walloon"
+#~ msgstr "瓦龙语"
+
+#~ msgid "Wolof"
+#~ msgstr "沃洛夫语"
+
+#~ msgid "Kalmyk"
+#~ msgstr "卡尔梅克语"
+
+#~ msgid "Xhosa"
+#~ msgstr "科萨语"
+
+#~ msgid "Yao"
+#~ msgstr "瑶语"
+
+#~ msgid "Yapese"
+#~ msgstr "雅浦语"
+
+#~ msgid "Yiddish"
+#~ msgstr "依地语"
+
+#~ msgid "Yoruba"
+#~ msgstr "约鲁巴语"
+
+#~ msgid "Zapotec"
+#~ msgstr "萨波特克语"
+
+#~ msgid "Blissymbols"
+#~ msgstr "布利斯符号"
+
+#~ msgid "Zenaga"
+#~ msgstr "哲纳加语"
+
+#~ msgid "Zhuang"
+#~ msgstr "壮语"
+
+#~ msgid "Chinese"
+#~ msgstr "中文"
+
+#~ msgid "Zulu"
+#~ msgstr "祖鲁语"
+
+#~ msgid "Zuni"
+#~ msgstr "祖尼语"
+
+#~ msgid "No linguistic content"
#~ msgstr ""
-#~ msgid "E-Mail: %s"
-#~ msgstr ""
-
-#~ msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
-#~ msgstr "将标题从'%(src)s'改为'%(dest)s'时失败,出错信息: %(error)s"
-
-#~ msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
-#~ msgstr "将作者从'%(src)s'改为'%(dest)s'时失败,出错信息: %(error)s"
-
-#~ msgid "Password for user %(user)s reset"
-#~ msgstr "用户 %(user)s 的密码已重置"
-
-#~ msgid "Password for user %s reset"
-#~ msgstr ""
-
-#~ msgid "Rename title from: '%(src)s' to '%(src)s' failed with error: %(error)s"
-#~ msgstr ""
-
-#~ msgid "Rename author from: '%(src)s' to '%(src)s' failed with error: %(error)s"
-#~ msgstr ""
-
-#~ msgid "Failed to create path for cover %(cover)s (Permission denied)."
-#~ msgstr "为封面 %(cover)s 创建路径失败(权限拒绝)。"
-
-#~ msgid "File extension '%s' is not allowed to be uploaded to this server"
-#~ msgstr ""
-
-#~ msgid "File extension \"%(ext)s\" is not allowed to be uploaded to this server"
-#~ msgstr "不能上传后缀为 \"%(ext)s\" 的文件到此服务器"
-
-#~ msgid "Current commit timestamp"
-#~ msgstr "当前提交时间戳"
-
-#~ msgid "Newest commit timestamp"
-#~ msgstr "最新提交时间戳"
-
-#~ msgid "Convert: %(book)s"
-#~ msgstr "转换: %(book)s"
-
-#~ msgid "Convert to %(format)s: %(book)s"
-#~ msgstr "转换到 %(format)s: %(book)s"
-
-#~ msgid "Files are replaced"
-#~ msgstr "文件已替换"
-
-#~ msgid "Server is stopped"
-#~ msgstr "服务器已停止"
-
-#~ msgid "Convertertool %(converter)s not found"
-#~ msgstr "找不到转换工具 $(converter)s"
-
-#~ msgid "Choose a password"
-#~ msgstr "选择一个密码"
-
-#~ msgid "Could not find any formats suitable for sending by e-mail"
-#~ msgstr "找不到任何适合邮件发送的格式"
-
-#~ msgid "Author list"
-#~ msgstr "作者列表"
-
-#~ msgid "File %(file)s uploaded"
-#~ msgstr "文件 %(file)s 已上传"
+#~ msgid "Zaza"
+#~ msgstr "扎扎其语"
diff --git a/cps/ub.py b/cps/ub.py
index f5822738..f1f8f02d 100644
--- a/cps/ub.py
+++ b/cps/ub.py
@@ -1,6 +1,23 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web)
+# Copyright (C) 2012-2019 mutschler, jkrehm, cervinko, janeczku, OzzieIsaacs, csitko
+# ok11, issmirnov, idalin
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
from sqlalchemy import *
from sqlalchemy import exc
from sqlalchemy.ext.declarative import declarative_base
@@ -44,8 +61,17 @@ MATURE_CONTENT = 2048
SIDEBAR_PUBLISHER = 4096
DEFAULT_PASS = "admin123"
-DEFAULT_PORT = int(os.environ.get("CALIBRE_PORT", 8083))
+try:
+ DEFAULT_PORT = int(os.environ.get("CALIBRE_PORT", 8083))
+except ValueError:
+ print ('Environmentvariable CALIBRE_PORT is set to an invalid value: ' +
+ os.environ.get("CALIBRE_PORT", 8083) + ', faling back to default (8083)')
+ DEFAULT_PORT = 8083
+UPDATE_STABLE = 0
+AUTO_UPDATE_STABLE = 1
+UPDATE_NIGHTLY = 2
+AUTO_UPDATE_NIGHTLY = 4
class UserBase:
@@ -166,7 +192,6 @@ class User(UserBase, Base):
sidebar_view = Column(Integer, default=1)
default_language = Column(String(3), default="all")
mature_content = Column(Boolean, default=True)
- # theme = Column(Integer, default=0)
# Class for anonymous user is derived from User base and completly overrides methods and properties for the
@@ -259,7 +284,7 @@ class Downloads(Base):
def __repr__(self):
return '.
+
+import threading
+import zipfile
+import requests
+import re
+import logging
+import server
+import time
+from io import BytesIO
+import os
+import sys
+import shutil
+from ub import config, UPDATE_STABLE
+from tempfile import gettempdir
+import datetime
+import json
+from flask_babel import gettext as _
+from babel.dates import format_datetime
+import web
+
+
+def is_sha1(sha1):
+ if len(sha1) != 40:
+ return False
+ try:
+ int(sha1, 16)
+ except ValueError:
+ return False
+ return True
+
+
+class Updater(threading.Thread):
+
+ def __init__(self):
+ threading.Thread.__init__(self)
+ self.status = 0
+ self.updateIndex = None
+
+ def get_current_version_info(self):
+ if config.get_update_channel == UPDATE_STABLE:
+ return self._stable_version_info()
+ else:
+ return self._nightly_version_info()
+
+ def get_available_updates(self, request_method):
+ if config.get_update_channel == UPDATE_STABLE:
+ return self._stable_available_updates(request_method)
+ else:
+ return self._nightly_available_updates(request_method)
+
+ def run(self):
+ try:
+ self.status = 1
+ r = requests.get(self._get_request_path(), stream=True)
+ r.raise_for_status()
+
+ self.status = 2
+ z = zipfile.ZipFile(BytesIO(r.content))
+ self.status = 3
+ tmp_dir = gettempdir()
+ z.extractall(tmp_dir)
+ foldername = os.path.join(tmp_dir, z.namelist()[0])[:-1]
+ if not os.path.isdir(foldername):
+ self.status = 11
+ logging.getLogger('cps.web').info(u'Extracted contents of zipfile not found in temp folder')
+ return
+ self.status = 4
+ self.update_source(foldername, config.get_main_dir)
+ self.status = 6
+ time.sleep(2)
+ server.Server.setRestartTyp(True)
+ server.Server.stopServer()
+ self.status = 7
+ time.sleep(2)
+ except requests.exceptions.HTTPError as ex:
+ logging.getLogger('cps.web').info( u'HTTP Error' + ' ' + str(ex))
+ self.status = 8
+ except requests.exceptions.ConnectionError:
+ logging.getLogger('cps.web').info(u'Connection error')
+ self.status = 9
+ except requests.exceptions.Timeout:
+ logging.getLogger('cps.web').info(u'Timeout while establishing connection')
+ self.status = 10
+ except requests.exceptions.RequestException:
+ self.status = 11
+ logging.getLogger('cps.web').info(u'General error')
+
+ def get_update_status(self):
+ return self.status
+
+ @classmethod
+ def file_to_list(self, filelist):
+ return [x.strip() for x in open(filelist, 'r') if not x.startswith('#EXT')]
+
+ @classmethod
+ def one_minus_two(self, one, two):
+ return [x for x in one if x not in set(two)]
+
+ @classmethod
+ def reduce_dirs(self, delete_files, new_list):
+ new_delete = []
+ for filename in delete_files:
+ parts = filename.split(os.sep)
+ sub = ''
+ for part in parts:
+ sub = os.path.join(sub, part)
+ if sub == '':
+ sub = os.sep
+ count = 0
+ for song in new_list:
+ if song.startswith(sub):
+ count += 1
+ break
+ if count == 0:
+ if sub != '\\':
+ new_delete.append(sub)
+ break
+ return list(set(new_delete))
+
+ @classmethod
+ def reduce_files(self, remove_items, exclude_items):
+ rf = []
+ for item in remove_items:
+ if not item.startswith(exclude_items):
+ rf.append(item)
+ return rf
+
+ @classmethod
+ def moveallfiles(self, root_src_dir, root_dst_dir):
+ change_permissions = True
+ if sys.platform == "win32" or sys.platform == "darwin":
+ change_permissions = False
+ else:
+ logging.getLogger('cps.web').debug('Update on OS-System : ' + sys.platform)
+ new_permissions = os.stat(root_dst_dir)
+ # print new_permissions
+ for src_dir, __, files in os.walk(root_src_dir):
+ dst_dir = src_dir.replace(root_src_dir, root_dst_dir, 1)
+ if not os.path.exists(dst_dir):
+ os.makedirs(dst_dir)
+ logging.getLogger('cps.web').debug('Create-Dir: '+dst_dir)
+ if change_permissions:
+ # print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid))
+ os.chown(dst_dir, new_permissions.st_uid, new_permissions.st_gid)
+ for file_ in files:
+ src_file = os.path.join(src_dir, file_)
+ dst_file = os.path.join(dst_dir, file_)
+ if os.path.exists(dst_file):
+ if change_permissions:
+ permission = os.stat(dst_file)
+ logging.getLogger('cps.web').debug('Remove file before copy: '+dst_file)
+ os.remove(dst_file)
+ else:
+ if change_permissions:
+ permission = new_permissions
+ shutil.move(src_file, dst_dir)
+ logging.getLogger('cps.web').debug('Move File '+src_file+' to '+dst_dir)
+ if change_permissions:
+ try:
+ os.chown(dst_file, permission.st_uid, permission.st_gid)
+ except (Exception) as e:
+ # ex = sys.exc_info()
+ old_permissions = os.stat(dst_file)
+ logging.getLogger('cps.web').debug('Fail change permissions of ' + str(dst_file) + '. Before: '
+ + str(old_permissions.st_uid) + ':' + str(old_permissions.st_gid) + ' After: '
+ + str(permission.st_uid) + ':' + str(permission.st_gid) + ' error: '+str(e))
+ return
+
+ def update_source(self, source, destination):
+ # destination files
+ old_list = list()
+ exclude = (
+ os.sep + 'app.db', os.sep + 'calibre-web.log1', os.sep + 'calibre-web.log2', os.sep + 'gdrive.db',
+ os.sep + 'vendor', os.sep + 'calibre-web.log', os.sep + '.git', os.sep +'client_secrets.json',
+ os.sep + 'gdrive_credentials', os.sep + 'settings.yaml')
+ for root, dirs, files in os.walk(destination, topdown=True):
+ for name in files:
+ old_list.append(os.path.join(root, name).replace(destination, ''))
+ for name in dirs:
+ old_list.append(os.path.join(root, name).replace(destination, ''))
+ # source files
+ new_list = list()
+ for root, dirs, files in os.walk(source, topdown=True):
+ for name in files:
+ new_list.append(os.path.join(root, name).replace(source, ''))
+ for name in dirs:
+ new_list.append(os.path.join(root, name).replace(source, ''))
+
+ delete_files = self.one_minus_two(old_list, new_list)
+
+ rf = self.reduce_files(delete_files, exclude)
+
+ remove_items = self.reduce_dirs(rf, new_list)
+
+ self.moveallfiles(source, destination)
+
+ for item in remove_items:
+ item_path = os.path.join(destination, item[1:])
+ if os.path.isdir(item_path):
+ logging.getLogger('cps.web').debug("Delete dir " + item_path)
+ shutil.rmtree(item_path, ignore_errors=True)
+ else:
+ try:
+ logging.getLogger('cps.web').debug("Delete file " + item_path)
+ # log_from_thread("Delete file " + item_path)
+ os.remove(item_path)
+ except Exception:
+ logging.getLogger('cps.web').debug("Could not remove:" + item_path)
+ shutil.rmtree(source, ignore_errors=True)
+
+ def _nightly_version_info(self):
+ content = {}
+ content[0] = '$Format:%H$'
+ content[1] = '$Format:%cI$'
+ # content[0] = 'bb7d2c6273ae4560e83950d36d64533343623a57'
+ # content[1] = '2018-09-09T10:13:08+02:00'
+ if is_sha1(content[0]) and len(content[1]) > 0:
+ return {'version': content[0], 'datetime': content[1]}
+ return False
+
+ def _stable_version_info(self):
+ return {'version': '0.6.1'} # Current version
+
+ def _nightly_available_updates(self, request_method):
+ tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone)
+ if request_method == "GET":
+ repository_url = 'https://api.github.com/repos/janeczku/calibre-web'
+ status, commit = self._load_remote_data(repository_url +'/git/refs/heads/master')
+ parents = []
+ if status['message'] != '':
+ return json.dumps(status)
+ if 'object' not in commit:
+ status['message'] = _(u'Unexpected data while reading update information')
+ return json.dumps(status)
+
+ if commit['object']['sha'] == status['current_commit_hash']:
+ status.update({
+ 'update': False,
+ 'success': True,
+ 'message': _(u'No update available. You already have the latest version installed')
+ })
+ return json.dumps(status)
+
+ # a new update is available
+ status['update'] = True
+
+ try:
+ r = requests.get(repository_url + '/git/commits/' + commit['object']['sha'])
+ r.raise_for_status()
+ update_data = r.json()
+ except requests.exceptions.HTTPError as e:
+ status['error'] = _(u'HTTP Error') + ' ' + str(e)
+ except requests.exceptions.ConnectionError:
+ status['error'] = _(u'Connection error')
+ except requests.exceptions.Timeout:
+ status['error'] = _(u'Timeout while establishing connection')
+ except requests.exceptions.RequestException:
+ status['error'] = _(u'General error')
+
+ if status['message'] != '':
+ return json.dumps(status)
+
+ if 'committer' in update_data and 'message' in update_data:
+ status['success'] = True
+ status['message'] = _(
+ u'A new update is available. Click on the button below to update to the latest version.')
+
+ new_commit_date = datetime.datetime.strptime(
+ update_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz
+ parents.append(
+ [
+ format_datetime(new_commit_date, format='short', locale=web.get_locale()),
+ update_data['message'],
+ update_data['sha']
+ ]
+ )
+
+ # it only makes sense to analyze the parents if we know the current commit hash
+ if status['current_commit_hash'] != '':
+ try:
+ parent_commit = update_data['parents'][0]
+ # limit the maximum search depth
+ remaining_parents_cnt = 10
+ except IndexError:
+ remaining_parents_cnt = None
+
+ if remaining_parents_cnt is not None:
+ while True:
+ if remaining_parents_cnt == 0:
+ break
+
+ # check if we are more than one update behind if so, go up the tree
+ if parent_commit['sha'] != status['current_commit_hash']:
+ try:
+ r = requests.get(parent_commit['url'])
+ r.raise_for_status()
+ parent_data = r.json()
+
+ parent_commit_date = datetime.datetime.strptime(
+ parent_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz
+ parent_commit_date = format_datetime(
+ parent_commit_date, format='short', locale=web.get_locale())
+
+ parents.append([parent_commit_date,
+ parent_data['message'].replace('\r\n','').replace('\n','
')])
+ parent_commit = parent_data['parents'][0]
+ remaining_parents_cnt -= 1
+ except Exception:
+ # it isn't crucial if we can't get information about the parent
+ break
+ else:
+ # parent is our current version
+ break
+
+ else:
+ status['success'] = False
+ status['message'] = _(u'Could not fetch update information')
+
+ # a new update is available
+ status['update'] = True
+ if 'body' in commit:
+ status['success'] = True
+ status['message'] = _(
+ u'A new update is available. Click on the button below to update to the latest version.')
+
+ new_commit_date = datetime.datetime.strptime(
+ commit['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz
+ parents.append(
+ [
+ format_datetime(new_commit_date, format='short', locale=web.get_locale()),
+ commit['message'],
+ commit['sha']
+ ]
+ )
+
+ # it only makes sense to analyze the parents if we know the current commit hash
+ if status['current_commit_hash'] != '':
+ try:
+ parent_commit = commit['parents'][0]
+ # limit the maximum search depth
+ remaining_parents_cnt = 10
+ except IndexError:
+ remaining_parents_cnt = None
+
+ if remaining_parents_cnt is not None:
+ while True:
+ if remaining_parents_cnt == 0:
+ break
+
+ # check if we are more than one update behind if so, go up the tree
+ if commit['sha'] != status['current_commit_hash']:
+ try:
+ r = requests.get(parent_commit['url'])
+ r.raise_for_status()
+ parent_data = r.json()
+
+ parent_commit_date = datetime.datetime.strptime(
+ parent_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz
+ parent_commit_date = format_datetime(
+ parent_commit_date, format='short', locale=web.get_locale())
+
+ parents.append([parent_commit_date, parent_data['message'], parent_data['sha']])
+ parent_commit = parent_data['parents'][0]
+ remaining_parents_cnt -= 1
+ except Exception:
+ # it isn't crucial if we can't get information about the parent
+ break
+ else:
+ # parent is our current version
+ break
+ status['history'] = parents[::-1]
+ return json.dumps(status)
+ return ''
+
+ def _stable_available_updates(self, request_method):
+ if request_method == "GET":
+ parents = []
+ # repository_url = 'https://api.github.com/repos/flatpak/flatpak/releases' # test URL
+ repository_url = 'https://api.github.com/repos/janeczku/calibre-web/releases'
+ status, commit = self._load_remote_data(repository_url)
+ if status['message'] != '':
+ return json.dumps(status)
+ if not commit:
+ status['success'] = True
+ status['message'] = _(u'No release information available')
+ return json.dumps(status)
+ version = status['current_commit_hash']
+ current_version = status['current_commit_hash'].split('.')
+
+ # we are already on newest version, no update available
+ if 'tag_name' not in commit[0]:
+ status['message'] = _(u'Unexpected data while reading update information')
+ return json.dumps(status)
+ if commit[0]['tag_name'] == version:
+ status.update({
+ 'update': False,
+ 'success': True,
+ 'message': _(u'No update available. You already have the latest version installed')
+ })
+ return json.dumps(status)
+
+ i = len(commit) - 1
+ while i >= 0:
+ if 'tag_name' not in commit[i] or 'body' not in commit[i]:
+ status['message'] = _(u'Unexpected data while reading update information')
+ return json.dumps(status)
+ major_version_update = int(commit[i]['tag_name'].split('.')[0])
+ minor_version_update = int(commit[i]['tag_name'].split('.')[1])
+ patch_version_update = int(commit[i]['tag_name'].split('.')[2])
+
+ # Check if major versions are identical search for newest nonenqual commit and update to this one
+ if major_version_update == int(current_version[0]):
+ if (minor_version_update == int(current_version[1]) and
+ patch_version_update > int(current_version[2])) or \
+ minor_version_update > int(current_version[1]):
+ parents.append([commit[i]['tag_name'],commit[i]['body'].replace('\r\n', '
')])
+ i -= 1
+ continue
+ if major_version_update < int(current_version[0]):
+ i -= 1
+ continue
+ if major_version_update > int(current_version[0]):
+ # found update update to last version before major update, unless current version is on last version
+ # before major update
+ if commit[i+1]['tag_name'].split('.')[1] == current_version[1]:
+ parents.append([commit[i]['tag_name'],
+ commit[i]['body'].replace('\r\n', '
').replace('\n', '
')])
+ status.update({
+ 'update': True,
+ 'success': True,
+ 'message': _(u'A new update is available. Click on the button below to '
+ u'update to version: %(version)s', version=commit[i]['tag_name']),
+ 'history': parents
+ })
+ self.updateFile = commit[i]['zipball_url']
+ else:
+ status.update({
+ 'update': True,
+ 'success': True,
+ 'message': _(u'A new update is available. Click on the button below to '
+ u'update to version: %(version)s', version=commit[i]['tag_name']),
+ 'history': parents
+ })
+ self.updateFile = commit[i +1]['zipball_url']
+ break
+ if i == -1:
+ status.update({
+ 'update': True,
+ 'success': True,
+ 'message': _(
+ u'A new update is available. Click on the button below to update to the latest version.'),
+ 'history': parents
+ })
+ self.updateFile = commit[0]['zipball_url']
+ return json.dumps(status)
+
+ def _get_request_path(self):
+ if config.get_update_channel == UPDATE_STABLE:
+ return self.updateFile
+ else:
+ return 'https://api.github.com/repos/janeczku/calibre-web/zipball/master'
+
+ def _load_remote_data(self, repository_url):
+ status = {
+ 'update': False,
+ 'success': False,
+ 'message': '',
+ 'current_commit_hash': ''
+ }
+ commit = None
+ version = self.get_current_version_info()
+ if version is False:
+ status['current_commit_hash'] = _(u'Unknown')
+ else:
+ status['current_commit_hash'] = version['version']
+ try:
+ r = requests.get(repository_url)
+ commit = r.json()
+ r.raise_for_status()
+ except requests.exceptions.HTTPError as e:
+ if commit:
+ if 'message' in commit:
+ status['message'] = _(u'HTTP Error') + ': ' + commit['message']
+ else:
+ status['message'] = _(u'HTTP Error') + ': ' + str(e)
+ except requests.exceptions.ConnectionError:
+ status['message'] = _(u'Connection error')
+ except requests.exceptions.Timeout:
+ status['message'] = _(u'Timeout while establishing connection')
+ except requests.exceptions.RequestException:
+ status['message'] = _(u'General error')
+
+ return status, commit
+
+
+updater_thread = Updater()
diff --git a/cps/uploader.py b/cps/uploader.py
index 40741bfd..8d9b74a4 100644
--- a/cps/uploader.py
+++ b/cps/uploader.py
@@ -1,6 +1,22 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web)
+# Copyright (C) 2012-2019 lemmsh, OzzieIsaacs
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
import os
from tempfile import gettempdir
import hashlib
diff --git a/cps/web.py b/cps/web.py
index 0a52947e..2aeb78ad 100644
--- a/cps/web.py
+++ b/cps/web.py
@@ -1,6 +1,26 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web)
+# Copyright (C) 2018-2019 OzzieIsaacs, cervinko, jkrehm, bodybybuddha, ok11,
+# andy29485, idalin, Kyosfonica, wuqi, Kennyl, lemmsh,
+# falgh1, grunjol, csitko, ytils, xybydy, trasba, vrabe,
+# ruben-herold, marblepebble, JackED42, SiphonSquirrel,
+# apetresc, nanu-c, mutschler
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
import mimetypes
import logging
from logging.handlers import RotatingFileHandler
@@ -57,6 +77,8 @@ from redirect import redirect_back
import time
import server
from reverseproxy import ReverseProxied
+from updater import updater_thread
+import hashlib
try:
from googleapiclient.errors import HttpError
@@ -111,6 +133,9 @@ except ImportError:
# Global variables
current_milli_time = lambda: int(round(time.time() * 1000))
gdrive_watch_callback_token = 'target=calibreweb-watch_files'
+# ToDo: Somehow caused by circular import under python3 refactor
+py3_gevent_link = None
+py3_restart_Typ = False
EXTENSIONS_UPLOAD = {'txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx',
'fb2', 'html', 'rtf', 'odt'}
EXTENSIONS_CONVERT = {'pdf', 'epub', 'mobi', 'azw3', 'docx', 'rtf', 'fb2', 'lit', 'lrf', 'txt', 'htmlz'}
@@ -937,11 +962,9 @@ def get_email_status_json():
# example SELECT * FROM @TABLE WHERE 'abcdefg' LIKE Name;
# from https://code.luasoftware.com/tutorials/flask/execute-raw-sql-in-flask-sqlalchemy/
def check_valid_domain(domain_text):
- # result = session.query(Notification).from_statement(text(sql)).params(id=5).all()
- #ToDo: check possible SQL injection
domain_text = domain_text.split('@',1)[-1].lower()
- sql = "SELECT * FROM registration WHERE '%s' LIKE domain;" % domain_text
- result = ub.session.query(ub.Registration).from_statement(text(sql)).all()
+ sql = "SELECT * FROM registration WHERE :domain LIKE domain;"
+ result = ub.session.query(ub.Registration).from_statement(text(sql)).params(domain=domain_text).all()
return len(result)
@@ -1139,127 +1162,7 @@ def get_matching_tags():
@app.route("/get_update_status", methods=['GET'])
@login_required_if_no_ano
def get_update_status():
- status = {
- 'update': False,
- 'success': False,
- 'message': '',
- 'current_commit_hash': ''
- }
- parents = []
-
- repository_url = 'https://api.github.com/repos/janeczku/calibre-web'
- tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone)
-
- if request.method == "GET":
- version = helper.get_current_version_info()
- if version is False:
- status['current_commit_hash'] = _(u'Unknown')
- else:
- status['current_commit_hash'] = version['hash']
-
- try:
- r = requests.get(repository_url + '/git/refs/heads/master')
- r.raise_for_status()
- commit = r.json()
- except requests.exceptions.HTTPError as e:
- status['message'] = _(u'HTTP Error') + ' ' + str(e)
- except requests.exceptions.ConnectionError:
- status['message'] = _(u'Connection error')
- except requests.exceptions.Timeout:
- status['message'] = _(u'Timeout while establishing connection')
- except requests.exceptions.RequestException:
- status['message'] = _(u'General error')
-
- if status['message'] != '':
- return json.dumps(status)
-
- if 'object' not in commit:
- status['message'] = _(u'Unexpected data while reading update information')
- return json.dumps(status)
-
- if commit['object']['sha'] == status['current_commit_hash']:
- status.update({
- 'update': False,
- 'success': True,
- 'message': _(u'No update available. You already have the latest version installed')
- })
- return json.dumps(status)
-
- # a new update is available
- status['update'] = True
-
- try:
- r = requests.get(repository_url + '/git/commits/' + commit['object']['sha'])
- r.raise_for_status()
- update_data = r.json()
- except requests.exceptions.HTTPError as e:
- status['error'] = _(u'HTTP Error') + ' ' + str(e)
- except requests.exceptions.ConnectionError:
- status['error'] = _(u'Connection error')
- except requests.exceptions.Timeout:
- status['error'] = _(u'Timeout while establishing connection')
- except requests.exceptions.RequestException:
- status['error'] = _(u'General error')
-
- if status['message'] != '':
- return json.dumps(status)
-
- if 'committer' in update_data and 'message' in update_data:
- status['success'] = True
- status['message'] = _(u'A new update is available. Click on the button below to update to the latest version.')
-
- new_commit_date = datetime.datetime.strptime(
- update_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz
- parents.append(
- [
- format_datetime(new_commit_date, format='short', locale=get_locale()),
- update_data['message'],
- update_data['sha']
- ]
- )
-
- # it only makes sense to analyze the parents if we know the current commit hash
- if status['current_commit_hash'] != '':
- try:
- parent_commit = update_data['parents'][0]
- # limit the maximum search depth
- remaining_parents_cnt = 10
- except IndexError:
- remaining_parents_cnt = None
-
- if remaining_parents_cnt is not None:
- while True:
- if remaining_parents_cnt == 0:
- break
-
- # check if we are more than one update behind if so, go up the tree
- if parent_commit['sha'] != status['current_commit_hash']:
- try:
- r = requests.get(parent_commit['url'])
- r.raise_for_status()
- parent_data = r.json()
-
- parent_commit_date = datetime.datetime.strptime(
- parent_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz
- parent_commit_date = format_datetime(
- parent_commit_date, format='short', locale=get_locale())
-
- parents.append([parent_commit_date, parent_data['message'], parent_data['sha']])
- parent_commit = parent_data['parents'][0]
- remaining_parents_cnt -= 1
- except Exception:
- # it isn't crucial if we can't get information about the parent
- break
- else:
- # parent is our current version
- break
-
- else:
- status['success'] = False
- status['message'] = _(u'Could not fetch update information')
-
- status['history'] = parents
- return json.dumps(status)
+ return updater_thread.get_available_updates(request.method)
@app.route("/get_updater_status", methods=['GET', 'POST'])
@@ -1284,12 +1187,12 @@ def get_updater_status():
"11": _(u'Update failed:') + u' ' + _(u'General error')
}
status['text'] = text
- helper.updater_thread = helper.Updater()
- helper.updater_thread.start()
- status['status'] = helper.updater_thread.get_update_status()
+ # helper.updater_thread = helper.Updater()
+ updater_thread.start()
+ status['status'] = updater_thread.get_update_status()
elif request.method == "GET":
try:
- status['status'] = helper.updater_thread.get_update_status()
+ status['status'] = updater_thread.get_update_status()
except AttributeError:
# thread is not active, occours after restart on update
status['status'] = 7
@@ -1425,7 +1328,7 @@ def author_list():
@app.route("/author/", defaults={'page': 1})
-@app.route("/author//'")
+@app.route("/author//")
@login_required_if_no_ano
def author(book_id, page):
entries, __, pagination = fill_indexpage(page, db.Books, db.Books.authors.any(db.Authors.id == book_id),
@@ -1821,7 +1724,12 @@ def delete_book(book_id, book_format):
@login_required
@admin_required
def authenticate_google_drive():
- authUrl = gdriveutils.Gauth.Instance().auth.GetAuthUrl()
+ try:
+ authUrl = gdriveutils.Gauth.Instance().auth.GetAuthUrl()
+ except gdriveutils.InvalidConfigError:
+ flash(_(u'Google Drive setup not completed, try to deactivate and activate Google Drive again'),
+ category="error")
+ return redirect(url_for('index'))
return redirect(authUrl)
@@ -1909,7 +1817,7 @@ def on_received_watch_confirmation():
app.logger.debug(response)
if response:
dbpath = os.path.join(config.config_calibre_dir, "metadata.db")
- if not response['deleted'] and response['file']['title'] == 'metadata.db' and response['file']['md5Checksum'] != md5(dbpath):
+ if not response['deleted'] and response['file']['title'] == 'metadata.db' and response['file']['md5Checksum'] != hashlib.md5(dbpath):
tmpDir = tempfile.gettempdir()
app.logger.info('Database file updated')
copyfile(dbpath, os.path.join(tmpDir, "metadata.db_" + str(current_milli_time())))
@@ -1957,15 +1865,6 @@ def shutdown():
abort(404)
-@app.route("/update")
-@login_required
-@admin_required
-def update():
- helper.updater_thread = helper.Updater()
- flash(_(u"Update done"), category="info")
- return abort(404)
-
-
@app.route("/search", methods=["GET"])
@login_required_if_no_ano
def search():
@@ -2128,10 +2027,11 @@ def advanced_search():
series=series, title=_(u"search"), cc=cc, page="advsearch")
-@app.route("/cover/")
+@app.route("/cover/")
@login_required_if_no_ano
-def get_cover(cover_path):
- return helper.get_book_cover(cover_path)
+def get_cover(book_id):
+ book = db.session.query(db.Books).filter(db.Books.id == book_id).first()
+ return helper.get_book_cover(book.path)
@app.route("/show//")
@@ -2153,10 +2053,10 @@ def serve_book(book_id, book_format):
return send_from_directory(os.path.join(config.config_calibre_dir, book.path), data.name + "." + book_format)
-@app.route("/opds/thumb_240_240/")
-@app.route("/opds/cover_240_240/")
-@app.route("/opds/cover_90_90/")
-@app.route("/opds/cover/")
+@app.route("/opds/thumb_240_240/")
+@app.route("/opds/cover_240_240/")
+@app.route("/opds/cover_90_90/")
+@app.route("/opds/cover/")
@requires_basic_auth_if_no_ano
def feed_get_cover(book_id):
book = db.session.query(db.Books).filter(db.Books.id == book_id).first()
@@ -2333,6 +2233,7 @@ def register():
content.password = generate_password_hash(password)
content.role = config.config_default_role
content.sidebar_view = config.config_default_show
+ content.mature_content = bool(config.config_default_show & ub.MATURE_CONTENT)
try:
ub.session.add(content)
ub.session.commit()
@@ -2861,20 +2762,23 @@ def profile():
@login_required
@admin_required
def admin():
- version = helper.get_current_version_info()
+ version = updater_thread.get_current_version_info()
if version is False:
commit = _(u'Unknown')
else:
- commit = version['datetime']
+ if 'datetime' in version:
+ commit = version['datetime']
- tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone)
- form_date = datetime.datetime.strptime(commit[:19], "%Y-%m-%dT%H:%M:%S")
- if len(commit) > 19: # check if string has timezone
- if commit[19] == '+':
- form_date -= datetime.timedelta(hours=int(commit[20:22]), minutes=int(commit[23:]))
- elif commit[19] == '-':
- form_date += datetime.timedelta(hours=int(commit[20:22]), minutes=int(commit[23:]))
- commit = format_datetime(form_date - tz, format='short', locale=get_locale())
+ tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone)
+ form_date = datetime.datetime.strptime(commit[:19], "%Y-%m-%dT%H:%M:%S")
+ if len(commit) > 19: # check if string has timezone
+ if commit[19] == '+':
+ form_date -= datetime.timedelta(hours=int(commit[20:22]), minutes=int(commit[23:]))
+ elif commit[19] == '-':
+ form_date += datetime.timedelta(hours=int(commit[20:22]), minutes=int(commit[23:]))
+ commit = format_datetime(form_date - tz, format='short', locale=get_locale())
+ else:
+ commit = version['version']
content = ub.session.query(ub.User).all()
settings = ub.session.query(ub.Settings).first()
@@ -3010,6 +2914,8 @@ def configuration_helper(origin):
content.config_calibre_dir = to_save["config_calibre_dir"]
db_change = True
# Google drive setup
+ if not os.path.isfile(os.path.join(config.get_main_dir, 'settings.yaml')):
+ content.config_use_google_drive = False
if "config_use_google_drive" in to_save and not content.config_use_google_drive and not gdriveError:
if filedata:
if filedata['web']['redirect_uris'][0].endswith('/'):
@@ -3099,6 +3005,8 @@ def configuration_helper(origin):
content.config_goodreads_api_key = to_save["config_goodreads_api_key"]
if "config_goodreads_api_secret" in to_save:
content.config_goodreads_api_secret = to_save["config_goodreads_api_secret"]
+ if "config_updater" in to_save:
+ content.config_updatechannel = int(to_save["config_updater"])
if "config_log_level" in to_save:
content.config_log_level = int(to_save["config_log_level"])
if content.config_logfile != to_save["config_logfile"]:
@@ -3129,7 +3037,8 @@ def configuration_helper(origin):
gdrive=gdriveutils.gdrive_support, goodreads=goodreads_support,
rarfile_support=rar_support, title=_(u"Basic Configuration"))
try:
- if content.config_use_google_drive and is_gdrive_ready() and not os.path.exists(config.config_calibre_dir + "/metadata.db"):
+ if content.config_use_google_drive and is_gdrive_ready() and not \
+ os.path.exists(os.path.join(content.config_calibre_dir, "metadata.db")):
gdriveutils.downloadFile(None, "metadata.db", config.config_calibre_dir + "/metadata.db")
if db_change:
if config.db_configured:
@@ -3161,7 +3070,7 @@ def configuration_helper(origin):
app.logger.info('Reboot required, restarting')
if origin:
success = True
- if is_gdrive_ready() and gdriveutils.gdrive_support == True and config.config_use_google_drive == True:
+ if is_gdrive_ready() and gdriveutils.gdrive_support == True: # and config.config_use_google_drive == True:
gdrivefolders=gdriveutils.listRootFolders()
else:
gdrivefolders=list()
@@ -3379,6 +3288,11 @@ def edit_user(user_id):
elif "show_sorted" not in to_save and content.show_sorted():
content.sidebar_view -= ub.SIDEBAR_SORTED
+ if "show_publisher" in to_save and not content.show_publisher():
+ content.sidebar_view += ub.SIDEBAR_PUBLISHER
+ elif "show_publisher" not in to_save and content.show_publisher():
+ content.sidebar_view -= ub.SIDEBAR_PUBLISHER
+
if "show_hot" in to_save and not content.show_hot_books():
content.sidebar_view += ub.SIDEBAR_HOT
elif "show_hot" not in to_save and content.show_hot_books():
@@ -3948,19 +3862,13 @@ def upload():
for author in db_book.authors:
author_names.append(author.name)
if len(request.files.getlist("btn-upload")) < 2:
- cc = db.session.query(db.Custom_Columns).filter(db.Custom_Columns.
- datatype.notin_(db.cc_exceptions)).all()
if current_user.role_edit() or current_user.role_admin():
- return render_title_template('book_edit.html', book=book, authors=author_names,
- cc=cc, title=_(u"edit metadata"), page="upload")
- book_in_shelfs = []
- kindle_list = helper.check_send_to_kindle(book)
- reader_list = helper.check_read_formats(book)
-
- return render_title_template('detail.html', entry=book, cc=cc,
- title=book.title, books_shelfs=book_in_shelfs, kindle_list=kindle_list,
- reader_list=reader_list, page="upload")
- return redirect(url_for("index"))
+ resp = {"location": url_for('edit_book', book_id=db_book.id)}
+ return Response(json.dumps(resp), mimetype='application/json')
+ else:
+ resp = {"location": url_for('show_book', book_id=db_book.id)}
+ return Response(json.dumps(resp), mimetype='application/json')
+ return Response(json.dumps({"location": url_for("index")}), mimetype='application/json')
@app.route("/admin/book/convert/", methods=['POST'])
diff --git a/cps/worker.py b/cps/worker.py
index 3dd7a68c..65d4a850 100644
--- a/cps/worker.py
+++ b/cps/worker.py
@@ -1,6 +1,22 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web)
+# Copyright (C) 2018-2019 OzzieIsaacs, bodybybuddha, janeczku
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
from __future__ import print_function
import smtplib
import threading
diff --git a/messages.pot b/messages.pot
index e651e816..0c5ac9b6 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: 2019-01-12 09:00+0100\n"
+"POT-Creation-Date: 2019-02-03 16:21+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -17,734 +17,743 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.6.0\n"
-#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134
-#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27
+#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150
+#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45
msgid "not installed"
msgstr ""
-#: cps/converter.py:22 cps/converter.py:38
+#: cps/converter.py:40 cps/converter.py:56
msgid "Excecution permissions missing"
msgstr ""
-#: cps/converter.py:48
+#: cps/converter.py:66
msgid "not configured"
msgstr ""
-#: cps/helper.py:59
+#: cps/helper.py:77
#, python-format
msgid "%(format)s format not found for book id: %(book)d"
msgstr ""
-#: cps/helper.py:71
+#: cps/helper.py:89
#, python-format
msgid "%(format)s not found on Google Drive: %(fn)s"
msgstr ""
-#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49
+#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49
msgid "Send to Kindle"
msgstr ""
-#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188
+#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206
msgid "This e-mail has been sent via Calibre-Web."
msgstr ""
-#: cps/helper.py:90
+#: cps/helper.py:108
#, python-format
msgid "%(format)s not found: %(fn)s"
msgstr ""
-#: cps/helper.py:95
+#: cps/helper.py:113
msgid "Calibre-Web test e-mail"
msgstr ""
-#: cps/helper.py:96
+#: cps/helper.py:114
msgid "Test e-mail"
msgstr ""
-#: cps/helper.py:112
+#: cps/helper.py:130
msgid "Get Started with Calibre-Web"
msgstr ""
-#: cps/helper.py:113
+#: cps/helper.py:131
#, python-format
msgid "Registration e-mail for user: %(name)s"
msgstr ""
-#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132
-#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144
+#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150
+#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162
#, python-format
msgid "Send %(format)s to Kindle"
msgstr ""
-#: cps/helper.py:148 cps/helper.py:152
+#: cps/helper.py:166 cps/helper.py:170
#, python-format
msgid "Convert %(orig)s to %(format)s and send to Kindle"
msgstr ""
-#: cps/helper.py:187
+#: cps/helper.py:205
#, python-format
msgid "E-mail: %(book)s"
msgstr ""
-#: cps/helper.py:190
+#: cps/helper.py:208
msgid "The requested file could not be read. Maybe wrong permissions?"
msgstr ""
-#: cps/helper.py:295
+#: cps/helper.py:313
#, python-format
msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr ""
-#: cps/helper.py:305
+#: cps/helper.py:323
#, python-format
msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr ""
-#: cps/helper.py:319
+#: cps/helper.py:337
#, python-format
msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s"
msgstr ""
-#: cps/helper.py:344 cps/helper.py:353
+#: cps/helper.py:362 cps/helper.py:371
#, python-format
msgid "File %(file)s not found on Google Drive"
msgstr ""
-#: cps/helper.py:384
+#: cps/helper.py:402
#, python-format
msgid "Book path %(path)s not found on Google Drive"
msgstr ""
-#: cps/helper.py:650
+#: cps/helper.py:510
msgid "Error excecuting UnRar"
msgstr ""
-#: cps/helper.py:652
+#: cps/helper.py:512
msgid "Unrar binary file not found"
msgstr ""
-#: cps/helper.py:703
+#: cps/helper.py:543
msgid "Waiting"
msgstr ""
-#: cps/helper.py:705
+#: cps/helper.py:545
msgid "Failed"
msgstr ""
-#: cps/helper.py:707
+#: cps/helper.py:547
msgid "Started"
msgstr ""
-#: cps/helper.py:709
+#: cps/helper.py:549
msgid "Finished"
msgstr ""
-#: cps/helper.py:711
+#: cps/helper.py:551
msgid "Unknown Status"
msgstr ""
-#: cps/helper.py:716
+#: cps/helper.py:556
msgid "E-mail: "
msgstr ""
-#: cps/helper.py:718 cps/helper.py:722
+#: cps/helper.py:558 cps/helper.py:562
msgid "Convert: "
msgstr ""
-#: cps/helper.py:720
+#: cps/helper.py:560
msgid "Upload: "
msgstr ""
-#: cps/helper.py:724
+#: cps/helper.py:564
msgid "Unknown Task: "
msgstr ""
-#: cps/web.py:1156 cps/web.py:2866
-msgid "Unknown"
-msgstr ""
-
-#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281
-msgid "HTTP Error"
-msgstr ""
-
-#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282
-msgid "Connection error"
-msgstr ""
-
-#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283
-msgid "Timeout while establishing connection"
-msgstr ""
-
-#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284
-msgid "General error"
-msgstr ""
-
-#: cps/web.py:1177
+#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423
msgid "Unexpected data while reading update information"
msgstr ""
-#: cps/web.py:1184
+#: cps/updater.py:258 cps/updater.py:416
msgid "No update available. You already have the latest version installed"
msgstr ""
-#: cps/web.py:1209
+#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1184
+msgid "HTTP Error"
+msgstr ""
+
+#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1185
+msgid "Connection error"
+msgstr ""
+
+#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1186
+msgid "Timeout while establishing connection"
+msgstr ""
+
+#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1187
+msgid "General error"
+msgstr ""
+
+#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468
msgid "A new update is available. Click on the button below to update to the latest version."
msgstr ""
-#: cps/web.py:1259
+#: cps/updater.py:335
msgid "Could not fetch update information"
msgstr ""
-#: cps/web.py:1274
+#: cps/updater.py:403
+msgid "No release information available"
+msgstr ""
+
+#: cps/updater.py:449 cps/updater.py:458
+#, python-format
+msgid "A new update is available. Click on the button below to update to version: %(version)s"
+msgstr ""
+
+#: cps/updater.py:491 cps/web.py:2766
+msgid "Unknown"
+msgstr ""
+
+#: cps/web.py:1177
msgid "Requesting update package"
msgstr ""
-#: cps/web.py:1275
+#: cps/web.py:1178
msgid "Downloading update package"
msgstr ""
-#: cps/web.py:1276
+#: cps/web.py:1179
msgid "Unzipping update package"
msgstr ""
-#: cps/web.py:1277
+#: cps/web.py:1180
msgid "Replacing files"
msgstr ""
-#: cps/web.py:1278
+#: cps/web.py:1181
msgid "Database connections are closed"
msgstr ""
-#: cps/web.py:1279
+#: cps/web.py:1182
msgid "Stopping server"
msgstr ""
-#: cps/web.py:1280
+#: cps/web.py:1183
msgid "Update finished, please press okay and reload page"
msgstr ""
-#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284
+#: cps/web.py:1184 cps/web.py:1185 cps/web.py:1186 cps/web.py:1187
msgid "Update failed:"
msgstr ""
-#: cps/web.py:1307
+#: cps/web.py:1210
msgid "Recently Added Books"
msgstr ""
-#: cps/web.py:1317
+#: cps/web.py:1220
msgid "Newest Books"
msgstr ""
-#: cps/web.py:1329
+#: cps/web.py:1232
msgid "Oldest Books"
msgstr ""
-#: cps/web.py:1341
+#: cps/web.py:1244
msgid "Books (A-Z)"
msgstr ""
-#: cps/web.py:1352
+#: cps/web.py:1255
msgid "Books (Z-A)"
msgstr ""
-#: cps/web.py:1381
+#: cps/web.py:1284
msgid "Hot Books (most downloaded)"
msgstr ""
-#: cps/web.py:1394
+#: cps/web.py:1297
msgid "Best rated books"
msgstr ""
-#: cps/templates/index.xml:39 cps/web.py:1407
+#: cps/templates/index.xml:39 cps/web.py:1310
msgid "Random Books"
msgstr ""
-#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236
+#: cps/web.py:1337 cps/web.py:1592 cps/web.py:2135
msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr ""
-#: cps/web.py:1462
+#: cps/web.py:1365
msgid "Publisher list"
msgstr ""
-#: cps/web.py:1477
+#: cps/web.py:1380
#, python-format
msgid "Publisher: %(name)s"
msgstr ""
-#: cps/templates/index.xml:83 cps/web.py:1509
+#: cps/templates/index.xml:83 cps/web.py:1412
msgid "Series list"
msgstr ""
-#: cps/web.py:1523
+#: cps/web.py:1426
#, python-format
msgid "Series: %(serie)s"
msgstr ""
-#: cps/web.py:1549
+#: cps/web.py:1452
msgid "Available languages"
msgstr ""
-#: cps/web.py:1569
+#: cps/web.py:1472
#, python-format
msgid "Language: %(name)s"
msgstr ""
-#: cps/templates/index.xml:76 cps/web.py:1580
+#: cps/templates/index.xml:76 cps/web.py:1483
msgid "Category list"
msgstr ""
-#: cps/web.py:1594
+#: cps/web.py:1497
#, python-format
msgid "Category: %(name)s"
msgstr ""
-#: cps/templates/layout.html:71 cps/web.py:1725
+#: cps/templates/layout.html:71 cps/web.py:1628
msgid "Tasks"
msgstr ""
-#: cps/web.py:1759
+#: cps/web.py:1662
msgid "Statistics"
msgstr ""
-#: cps/web.py:1867
+#: cps/web.py:1730
+msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
+msgstr ""
+
+#: cps/web.py:1775
msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
msgstr ""
-#: cps/web.py:1943
+#: cps/web.py:1851
msgid "Server restarted, please reload page"
msgstr ""
-#: cps/web.py:1946
+#: cps/web.py:1854
msgid "Performing shutdown of server, please close window"
msgstr ""
-#: cps/web.py:1965
-msgid "Update done"
-msgstr ""
-
-#: cps/web.py:2035
+#: cps/web.py:1934
msgid "Published after "
msgstr ""
-#: cps/web.py:2042
+#: cps/web.py:1941
msgid "Published before "
msgstr ""
-#: cps/web.py:2056
+#: cps/web.py:1955
#, python-format
msgid "Rating <= %(rating)s"
msgstr ""
-#: cps/web.py:2058
+#: cps/web.py:1957
#, python-format
msgid "Rating >= %(rating)s"
msgstr ""
-#: cps/web.py:2119 cps/web.py:2128
+#: cps/web.py:2018 cps/web.py:2027
msgid "search"
msgstr ""
#: cps/templates/index.xml:47 cps/templates/index.xml:51
-#: cps/templates/layout.html:146 cps/web.py:2195
+#: cps/templates/layout.html:146 cps/web.py:2094
msgid "Read Books"
msgstr ""
#: cps/templates/index.xml:55 cps/templates/index.xml:59
-#: cps/templates/layout.html:148 cps/web.py:2198
+#: cps/templates/layout.html:148 cps/web.py:2097
msgid "Unread Books"
msgstr ""
-#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262
+#: cps/web.py:2145 cps/web.py:2147 cps/web.py:2149 cps/web.py:2161
msgid "Read a Book"
msgstr ""
-#: cps/web.py:2321 cps/web.py:3230
+#: cps/web.py:2220 cps/web.py:3138
msgid "Please fill out all fields!"
msgstr ""
-#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352
-#: cps/web.py:2354
+#: cps/web.py:2221 cps/web.py:2243 cps/web.py:2247 cps/web.py:2252
+#: cps/web.py:2254
msgid "register"
msgstr ""
-#: cps/web.py:2342 cps/web.py:3444
+#: cps/web.py:2242 cps/web.py:3357
msgid "An unknown error occurred. Please try again later."
msgstr ""
-#: cps/web.py:2345
+#: cps/web.py:2245
msgid "Your e-mail is not allowed to register"
msgstr ""
-#: cps/web.py:2348
+#: cps/web.py:2248
msgid "Confirmation e-mail was send to your e-mail account."
msgstr ""
-#: cps/web.py:2351
+#: cps/web.py:2251
msgid "This username or e-mail address is already in use."
msgstr ""
-#: cps/web.py:2368 cps/web.py:2464
+#: cps/web.py:2268 cps/web.py:2364
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr ""
-#: cps/web.py:2373
+#: cps/web.py:2273
msgid "Wrong Username or Password"
msgstr ""
-#: cps/web.py:2379 cps/web.py:2400
+#: cps/web.py:2279 cps/web.py:2300
msgid "login"
msgstr ""
-#: cps/web.py:2412 cps/web.py:2443
+#: cps/web.py:2312 cps/web.py:2343
msgid "Token not found"
msgstr ""
-#: cps/web.py:2420 cps/web.py:2451
+#: cps/web.py:2320 cps/web.py:2351
msgid "Token has expired"
msgstr ""
-#: cps/web.py:2428
+#: cps/web.py:2328
msgid "Success! Please return to your device"
msgstr ""
-#: cps/web.py:2478
+#: cps/web.py:2378
msgid "Please configure the SMTP mail settings first..."
msgstr ""
-#: cps/web.py:2483
+#: cps/web.py:2383
#, python-format
msgid "Book successfully queued for sending to %(kindlemail)s"
msgstr ""
-#: cps/web.py:2487
+#: cps/web.py:2387
#, python-format
msgid "There was an error sending this book: %(res)s"
msgstr ""
-#: cps/web.py:2489 cps/web.py:3283
+#: cps/web.py:2389 cps/web.py:3191
msgid "Please configure your kindle e-mail address first..."
msgstr ""
-#: cps/web.py:2500 cps/web.py:2552
+#: cps/web.py:2400 cps/web.py:2452
msgid "Invalid shelf specified"
msgstr ""
-#: cps/web.py:2507
+#: cps/web.py:2407
#, python-format
msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s"
msgstr ""
-#: cps/web.py:2515
+#: cps/web.py:2415
msgid "You are not allowed to edit public shelves"
msgstr ""
-#: cps/web.py:2524
+#: cps/web.py:2424
#, python-format
msgid "Book is already part of the shelf: %(shelfname)s"
msgstr ""
-#: cps/web.py:2538
+#: cps/web.py:2438
#, python-format
msgid "Book has been added to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2557
+#: cps/web.py:2457
#, python-format
msgid "You are not allowed to add a book to the the shelf: %(name)s"
msgstr ""
-#: cps/web.py:2562
+#: cps/web.py:2462
msgid "User is not allowed to edit public shelves"
msgstr ""
-#: cps/web.py:2580
+#: cps/web.py:2480
#, python-format
msgid "Books are already part of the shelf: %(name)s"
msgstr ""
-#: cps/web.py:2594
+#: cps/web.py:2494
#, python-format
msgid "Books have been added to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2596
+#: cps/web.py:2496
#, python-format
msgid "Could not add books to shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2633
+#: cps/web.py:2533
#, python-format
msgid "Book has been removed from shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2639
+#: cps/web.py:2539
#, python-format
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
msgstr ""
-#: cps/web.py:2660 cps/web.py:2684
+#: cps/web.py:2560 cps/web.py:2584
#, python-format
msgid "A shelf with the name '%(title)s' already exists."
msgstr ""
-#: cps/web.py:2665
+#: cps/web.py:2565
#, python-format
msgid "Shelf %(title)s created"
msgstr ""
-#: cps/web.py:2667 cps/web.py:2695
+#: cps/web.py:2567 cps/web.py:2595
msgid "There was an error"
msgstr ""
-#: cps/web.py:2668 cps/web.py:2670
+#: cps/web.py:2568 cps/web.py:2570
msgid "create a shelf"
msgstr ""
-#: cps/web.py:2693
+#: cps/web.py:2593
#, python-format
msgid "Shelf %(title)s changed"
msgstr ""
-#: cps/web.py:2696 cps/web.py:2698
+#: cps/web.py:2596 cps/web.py:2598
msgid "Edit a shelf"
msgstr ""
-#: cps/web.py:2719
+#: cps/web.py:2619
#, python-format
msgid "successfully deleted shelf %(name)s"
msgstr ""
-#: cps/web.py:2746
+#: cps/web.py:2646
#, python-format
msgid "Shelf: '%(name)s'"
msgstr ""
-#: cps/web.py:2749
+#: cps/web.py:2649
msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr ""
-#: cps/web.py:2780
+#: cps/web.py:2680
#, python-format
msgid "Change order of Shelf: '%(name)s'"
msgstr ""
-#: cps/web.py:2809 cps/web.py:3236
+#: cps/web.py:2709 cps/web.py:3144
msgid "E-mail is not from valid domain"
msgstr ""
-#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856
+#: cps/web.py:2711 cps/web.py:2753 cps/web.py:2756
#, python-format
msgid "%(name)s's profile"
msgstr ""
-#: cps/web.py:2851
+#: cps/web.py:2751
msgid "Found an existing account for this e-mail address."
msgstr ""
-#: cps/web.py:2854
+#: cps/web.py:2754
msgid "Profile updated"
msgstr ""
-#: cps/web.py:2882
+#: cps/web.py:2785
msgid "Admin page"
msgstr ""
-#: cps/web.py:2964 cps/web.py:3139
+#: cps/web.py:2867 cps/web.py:3047
msgid "Calibre-Web configuration updated"
msgstr ""
-#: cps/templates/admin.html:100 cps/web.py:2978
+#: cps/templates/admin.html:100 cps/web.py:2881
msgid "UI Configuration"
msgstr ""
-#: cps/web.py:2996
+#: cps/web.py:2899
msgid "Import of optional Google Drive requirements missing"
msgstr ""
-#: cps/web.py:2999
+#: cps/web.py:2902
msgid "client_secrets.json is missing or not readable"
msgstr ""
-#: cps/web.py:3004 cps/web.py:3031
+#: cps/web.py:2907 cps/web.py:2936
msgid "client_secrets.json is not configured for web application"
msgstr ""
-#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072
-#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156
-#: cps/web.py:3172
+#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977
+#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3056 cps/web.py:3064
+#: cps/web.py:3080
msgid "Basic Configuration"
msgstr ""
-#: cps/web.py:3057
+#: cps/web.py:2962
msgid "Keyfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:3069
+#: cps/web.py:2974
msgid "Certfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:3112
+#: cps/web.py:3019
msgid "Logfile location is not valid, please enter correct path"
msgstr ""
-#: cps/web.py:3152
+#: cps/web.py:3060
msgid "DB location is not valid, please enter correct path"
msgstr ""
-#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254
+#: cps/templates/admin.html:33 cps/web.py:3140 cps/web.py:3146 cps/web.py:3162
msgid "Add new user"
msgstr ""
-#: cps/web.py:3244
+#: cps/web.py:3152
#, python-format
msgid "User '%(user)s' created"
msgstr ""
-#: cps/web.py:3248
+#: cps/web.py:3156
msgid "Found an existing account for this e-mail address or nickname."
msgstr ""
-#: cps/web.py:3278
+#: cps/web.py:3186
#, python-format
msgid "Test e-mail successfully send to %(kindlemail)s"
msgstr ""
-#: cps/web.py:3281
+#: cps/web.py:3189
#, python-format
msgid "There was an error sending the Test e-mail: %(res)s"
msgstr ""
-#: cps/web.py:3285
+#: cps/web.py:3193
msgid "E-mail server settings updated"
msgstr ""
-#: cps/web.py:3286
+#: cps/web.py:3194
msgid "Edit e-mail server settings"
msgstr ""
-#: cps/web.py:3311
+#: cps/web.py:3219
#, python-format
msgid "User '%(nick)s' deleted"
msgstr ""
-#: cps/web.py:3419
+#: cps/web.py:3332
#, python-format
msgid "User '%(nick)s' updated"
msgstr ""
-#: cps/web.py:3422
+#: cps/web.py:3335
msgid "An unknown error occured."
msgstr ""
-#: cps/web.py:3424
+#: cps/web.py:3337
#, python-format
msgid "Edit User %(nick)s"
msgstr ""
-#: cps/web.py:3441
+#: cps/web.py:3354
#, python-format
msgid "Password for user %(user)s reset"
msgstr ""
-#: cps/web.py:3455 cps/web.py:3661
+#: cps/web.py:3368 cps/web.py:3574
msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr ""
-#: cps/web.py:3483 cps/web.py:3955
+#: cps/web.py:3396 cps/web.py:3868
msgid "edit metadata"
msgstr ""
-#: cps/web.py:3576 cps/web.py:3823
+#: cps/web.py:3489 cps/web.py:3736
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr ""
-#: cps/web.py:3580 cps/web.py:3827
+#: cps/web.py:3493 cps/web.py:3740
msgid "File to be uploaded must have an extension"
msgstr ""
-#: cps/web.py:3592 cps/web.py:3847
+#: cps/web.py:3505 cps/web.py:3760
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr ""
-#: cps/web.py:3597
+#: cps/web.py:3510
#, python-format
msgid "Failed to store file %(file)s."
msgstr ""
-#: cps/web.py:3614
+#: cps/web.py:3527
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr ""
-#: cps/web.py:3632
+#: cps/web.py:3545
#, python-format
msgid "Failed to create path for cover %(path)s (Permission denied)."
msgstr ""
-#: cps/web.py:3640
+#: cps/web.py:3553
#, python-format
msgid "Failed to store cover-file %(cover)s."
msgstr ""
-#: cps/web.py:3643
+#: cps/web.py:3556
msgid "Cover-file is not a valid image file"
msgstr ""
-#: cps/web.py:3673 cps/web.py:3682
+#: cps/web.py:3586 cps/web.py:3595
msgid "unknown"
msgstr ""
-#: cps/web.py:3714
+#: cps/web.py:3627
msgid "Cover is not a jpg file, can't save"
msgstr ""
-#: cps/web.py:3762
+#: cps/web.py:3675
#, python-format
msgid "%(langname)s is not a valid language"
msgstr ""
-#: cps/web.py:3793
+#: cps/web.py:3706
msgid "Metadata successfully updated"
msgstr ""
-#: cps/web.py:3802
+#: cps/web.py:3715
msgid "Error editing book, please check logfile for details"
msgstr ""
-#: cps/web.py:3852
+#: cps/web.py:3765
#, python-format
msgid "Failed to store file %(file)s (Permission denied)."
msgstr ""
-#: cps/web.py:3857
+#: cps/web.py:3770
#, python-format
msgid "Failed to delete file %(file)s (Permission denied)."
msgstr ""
-#: cps/web.py:3975
+#: cps/web.py:3888
msgid "Source or destination format for conversion missing"
msgstr ""
-#: cps/web.py:3985
+#: cps/web.py:3898
#, python-format
msgid "Book successfully queued for converting to %(book_format)s"
msgstr ""
-#: cps/web.py:3989
+#: cps/web.py:3902
#, python-format
msgid "There was an error converting this book: %(res)s"
msgstr ""
-#: cps/worker.py:289
+#: cps/worker.py:305
#, python-format
msgid "Ebook-converter failed: %(error)s"
msgstr ""
-#: cps/worker.py:300
+#: cps/worker.py:316
#, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr ""
@@ -901,10 +910,10 @@ msgstr ""
#: cps/templates/admin.html:151 cps/templates/admin.html:165
#: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200
-#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175
+#: cps/templates/config_edit.html:226 cps/templates/config_view_edit.html:175
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
#: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19
-#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147
+#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:149
msgid "Back"
msgstr ""
@@ -1034,10 +1043,10 @@ msgstr ""
msgid "Get metadata"
msgstr ""
-#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210
+#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:224
#: cps/templates/config_view_edit.html:174 cps/templates/login.html:20
-#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17
-#: cps/templates/user_edit.html:145
+#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17
+#: cps/templates/user_edit.html:147
msgid "Submit"
msgstr ""
@@ -1110,114 +1119,138 @@ msgid "Authenticate Google Drive"
msgstr ""
#: cps/templates/config_edit.html:40
+msgid "Please hit submit to continue with setup"
+msgstr ""
+
+#: cps/templates/config_edit.html:43
msgid "Please finish Google Drive setup after login"
msgstr ""
-#: cps/templates/config_edit.html:44
+#: cps/templates/config_edit.html:48
msgid "Google Drive Calibre folder"
msgstr ""
-#: cps/templates/config_edit.html:52
+#: cps/templates/config_edit.html:56
msgid "Metadata Watch Channel ID"
msgstr ""
-#: cps/templates/config_edit.html:55
+#: cps/templates/config_edit.html:59
msgid "Revoke"
msgstr ""
-#: cps/templates/config_edit.html:73
+#: cps/templates/config_edit.html:78
msgid "Server Configuration"
msgstr ""
-#: cps/templates/config_edit.html:80
+#: cps/templates/config_edit.html:85
msgid "Server Port"
msgstr ""
-#: cps/templates/config_edit.html:84
+#: cps/templates/config_edit.html:89
msgid "SSL certfile location (leave it empty for non-SSL Servers)"
msgstr ""
-#: cps/templates/config_edit.html:88
+#: cps/templates/config_edit.html:93
msgid "SSL Keyfile location (leave it empty for non-SSL Servers)"
msgstr ""
+#: cps/templates/config_edit.html:97
+msgid "Update channel"
+msgstr ""
+
#: cps/templates/config_edit.html:99
+msgid "Stable"
+msgstr ""
+
+#: cps/templates/config_edit.html:100
+msgid "Stable (Automatic)"
+msgstr ""
+
+#: cps/templates/config_edit.html:101
+msgid "Nightly"
+msgstr ""
+
+#: cps/templates/config_edit.html:102
+msgid "Nightly (Automatic)"
+msgstr ""
+
+#: cps/templates/config_edit.html:113
msgid "Logfile Configuration"
msgstr ""
-#: cps/templates/config_edit.html:106
+#: cps/templates/config_edit.html:120
msgid "Log Level"
msgstr ""
-#: cps/templates/config_edit.html:115
+#: cps/templates/config_edit.html:129
msgid "Location and name of logfile (calibre-web.log for no entry)"
msgstr ""
-#: cps/templates/config_edit.html:126
+#: cps/templates/config_edit.html:140
msgid "Feature Configuration"
msgstr ""
-#: cps/templates/config_edit.html:134
+#: cps/templates/config_edit.html:148
msgid "Enable uploading"
msgstr ""
-#: cps/templates/config_edit.html:138
+#: cps/templates/config_edit.html:152
msgid "Enable anonymous browsing"
msgstr ""
-#: cps/templates/config_edit.html:142
+#: cps/templates/config_edit.html:156
msgid "Enable public registration"
msgstr ""
-#: cps/templates/config_edit.html:146
+#: cps/templates/config_edit.html:160
msgid "Enable remote login (\"magic link\")"
msgstr ""
-#: cps/templates/config_edit.html:151
+#: cps/templates/config_edit.html:165
msgid "Use"
msgstr ""
-#: cps/templates/config_edit.html:152
+#: cps/templates/config_edit.html:166
msgid "Obtain an API Key"
msgstr ""
-#: cps/templates/config_edit.html:156
+#: cps/templates/config_edit.html:170
msgid "Goodreads API Key"
msgstr ""
-#: cps/templates/config_edit.html:160
+#: cps/templates/config_edit.html:174
msgid "Goodreads API Secret"
msgstr ""
-#: cps/templates/config_edit.html:173
+#: cps/templates/config_edit.html:187
msgid "External binaries"
msgstr ""
-#: cps/templates/config_edit.html:181
+#: cps/templates/config_edit.html:195
msgid "No converter"
msgstr ""
-#: cps/templates/config_edit.html:183
+#: cps/templates/config_edit.html:197
msgid "Use Kindlegen"
msgstr ""
-#: cps/templates/config_edit.html:185
+#: cps/templates/config_edit.html:199
msgid "Use calibre's ebook converter"
msgstr ""
-#: cps/templates/config_edit.html:189
+#: cps/templates/config_edit.html:203
msgid "E-Book converter settings"
msgstr ""
-#: cps/templates/config_edit.html:193
+#: cps/templates/config_edit.html:207
msgid "Path to convertertool"
msgstr ""
-#: cps/templates/config_edit.html:199
+#: cps/templates/config_edit.html:213
msgid "Location of Unrar binary"
msgstr ""
-#: cps/templates/config_edit.html:215 cps/templates/layout.html:82
+#: cps/templates/config_edit.html:229 cps/templates/layout.html:82
#: cps/templates/login.html:4
msgid "Login"
msgstr ""
@@ -1267,31 +1300,31 @@ msgstr ""
msgid "Default settings for new users"
msgstr ""
-#: cps/templates/config_view_edit.html:77 cps/templates/user_edit.html:102
+#: cps/templates/config_view_edit.html:77 cps/templates/user_edit.html:104
msgid "Admin user"
msgstr ""
-#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:111
+#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:113
msgid "Allow Downloads"
msgstr ""
-#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:115
+#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:117
msgid "Allow Uploads"
msgstr ""
-#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:119
+#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:121
msgid "Allow Edit"
msgstr ""
-#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:123
+#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:125
msgid "Allow Delete books"
msgstr ""
-#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:128
+#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:130
msgid "Allow Changing Password"
msgstr ""
-#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:132
+#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:134
msgid "Allow Editing Public Shelfs"
msgstr ""
@@ -1339,15 +1372,15 @@ msgstr ""
msgid "Show publisher selection"
msgstr ""
-#: cps/templates/config_view_edit.html:159 cps/templates/user_edit.html:90
+#: cps/templates/config_view_edit.html:159 cps/templates/user_edit.html:91
msgid "Show read and unread"
msgstr ""
-#: cps/templates/config_view_edit.html:163 cps/templates/user_edit.html:94
+#: cps/templates/config_view_edit.html:163 cps/templates/user_edit.html:96
msgid "Show random books in detail view"
msgstr ""
-#: cps/templates/config_view_edit.html:167 cps/templates/user_edit.html:107
+#: cps/templates/config_view_edit.html:167 cps/templates/user_edit.html:109
msgid "Show mature content"
msgstr ""
@@ -1732,6 +1765,10 @@ msgstr ""
msgid "PDF.js viewer"
msgstr ""
+#: cps/templates/readpdf.html:418
+msgid "Preparing document for printing..."
+msgstr ""
+
#: cps/templates/readtxt.html:6
msgid "Basic txt Reader"
msgstr ""
@@ -1916,11 +1953,11 @@ msgstr ""
msgid "Show all"
msgstr ""
-#: cps/templates/user_edit.html:139
+#: cps/templates/user_edit.html:141
msgid "Delete this user"
msgstr ""
-#: cps/templates/user_edit.html:154
+#: cps/templates/user_edit.html:156
msgid "Recent Downloads"
msgstr ""
diff --git a/readme.md b/readme.md
old mode 100755
new mode 100644
index 803ba257..f06d50da
--- a/readme.md
+++ b/readme.md
@@ -4,7 +4,7 @@ Calibre-Web is a web app providing a clean interface for browsing, reading and d
*This software is a fork of [library](https://github.com/mutschler/calibreserver) and licensed under the GPL v3 License.*
-![screenshot](https://raw.githubusercontent.com/janeczku/docker-calibre-web/master/screenshot.png)
+![Main screen](../../wiki/images/main_screen.png)
## Features
@@ -12,17 +12,17 @@ Calibre-Web is a web app providing a clean interface for browsing, reading and d
- full graphical setup
- User management with fine grained per-user permissions
- Admin interface
-- User Interface in dutch, english, french, german, hungarian, italian, japanese, khmer, polish, russian, simplified chinese, spanish, swedish
+- User Interface in dutch, english, french, german, hungarian, italian, japanese, khmer, polish, russian, simplified chinese, spanish, swedish, ukrainian
- OPDS feed for eBook reader apps
- Filter and search by titles, authors, tags, series and language
- Create custom book collection (shelves)
- Support for editing eBook metadata and deleting eBooks from Calibre library
-- Support for converting eBooks from EPUB to Kindle format (mobi/azw)
+- Support for converting eBooks through Calibre binaries
- Restrict eBook download to logged-in users
- Support for public user registration
- Send eBooks to Kindle devices with the click of a button
- Support for reading eBooks directly in the browser (.txt, .epub, .pdf, .cbr, .cbt, .cbz)
-- Upload new books in PDF, epub, fb2 format
+- Upload new books in many formats
- Support for Calibre custom columns
- Ability to hide content based on categories for certain users
- Self update capability
@@ -33,81 +33,29 @@ Calibre-Web is a web app providing a clean interface for browsing, reading and d
1. Install dependencies by running `pip install --target vendor -r requirements.txt`.
2. Execute the command: `python cps.py` (or `nohup python cps.py` - recommended if you want to exit the terminal window)
3. Point your browser to `http://localhost:8083` or `http://localhost:8083/opds` for the OPDS catalog
-4. Set `Location of Calibre database` to the path of the folder where your Calibre library (metadata.db) lives, push "submit" button
- optionally a google drive can be used to host the calibre library (-> Using Google Drive integration)
+4. Set `Location of Calibre database` to the path of the folder where your Calibre library (metadata.db) lives, push "submit" button\
+ Optionally a Google Drive can be used to host the calibre library [-> Using Google Drive integration](https://github.com/janeczku/calibre-web/wiki/Configuration#using-google-drive-integration)
5. Go to Login page
-**Default admin login:**
-*Username:* admin
+**Default admin login:**\
+*Username:* admin\
*Password:* admin123
**Issues with Ubuntu:**
Please note that running the above install command can fail on some versions of Ubuntu, saying `"can't combine user with prefix"`. This is a [known bug](https://github.com/pypa/pip/issues/3826) and can be remedied by using the command `pip install --system --target vendor -r requirements.txt` instead.
-## Runtime Configuration Options
-
-The configuration can be changed as admin in the admin panel under "Configuration"
-
-Server Port:
-Changes the port Calibre-Web is listening, changes take effect after pressing submit button
-
-Enable public registration:
-Tick to enable public user registration.
-
-Enable anonymous browsing:
-Tick to allow not logged in users to browse the catalog, anonymous user permissions can be set as admin ("Guest" user)
-
-Enable uploading:
-Tick to enable uploading of PDF, epub, FB2. This requires the imagemagick library to be installed.
-
-Enable remote login ("magic link"):
-Tick to enable remote login, i.e. a link that allows user to log in via a different device.
-
## Requirements
-Python 2.7+
+Python 2.7+, python 3.x+
-Optionally, to enable on-the-fly conversion from EPUB to MOBI when using the send-to-kindle feature:
+Optionally, to enable on-the-fly conversion from one ebook format to another when using the send-to-kindle feature, or during editing of ebooks metadata:
+
+[Download and install](https://calibre-ebook.com/download) the Calibre desktop program for your platform and enter the folder including programm name (normally /opt/calibre/ebook-convert, or C:\Program Files\calibre\ebook-convert.exe) in the field "calibre's converter tool" on the setup page.
+
+\*** DEPRECATED \*** Support will be removed in future releases
[Download](http://www.amazon.com/gp/feature.html?docId=1000765211) Amazon's KindleGen tool for your platform and place the binary named as `kindlegen` in the `vendor` folder.
-## Using Google Drive integration
-
-Calibre Calibre library (metadata.db) can be located on a Google Drive. Additional optional dependencys are necessary to get this work. Please install all optional requirements by executing `pip install --target vendor -r optional-requirements.txt`
-
-To use google drive integration, you have to use the google developer console to create a new app. https://console.developers.google.com
-
-Once a project has been created, we need to create a client ID and a client secret that will be used to enable the OAuth request with google, and enable the Drive API. To do this, follow the steps below: -
-
-1. Open project in developer console
-2. Click Enable API, and enable google drive
-3. Now on the sidebar, click Credentials
-4. Click Create Credentials and OAuth Client ID
-5. Select Web Application and then next
-6. Give the Credentials a name and enter your callback, which will be CALIBRE_WEB_URL/gdrive/callback
-7. Click save
-8. Download json file and place it in `calibre-web` directory, with the name `client_secrets.json`
-
-The Drive API should now be setup and ready to use, so we need to integrate it into Calibre-Web. This is done as below: -
-
-1. Open config page
-2. Enter the location that will be used to store the metadata.db file locally, and to temporary store uploaded books and other temporary files for upload ("Location of Calibre database")
-2. Tick Use Google Drive
-3. Click the "Submit" button
-4. Now select Authenticate Google Drive
-5. This should redirect you to Google. After allowing it to use your Drive, it redirects you back to the config page
-6. Select the folder that is the root of your calibre library on Gdrive ("Google drive Calibre folder")
-7. Click the "Submit" button
-8. Google Drive should now be connected and be used to get images and download Epubs. The metadata.db is stored in the calibre library location
-
-### Optional
-If your Calibre-Web is using https, it is possible to add a "watch" to the drive. This will inform us if the metadata.db file is updated and allow us to update our calibre library accordingly.
-Additionally the public adress your server uses (e.g.https://example.com) has to be verified in the Google developer console. After this is done, please wait a few minutes.
-
-9. Open config page
-10. Click enable watch of metadata.db
-11. Note that this expires after a week, so will need to be manually refresh
-
## Docker images
Pre-built Docker images based on Alpine Linux are available in these Docker Hub repositories:
@@ -122,94 +70,6 @@ Pre-built Docker images based on Alpine Linux are available in these Docker Hub
**aarch64**
+ **linuxserver.io** at [lsioarmhf/calibre-web-aarch64](https://hub.docker.com/r/lsioarmhf/calibre-web-aarch64)
-## Reverse Proxy
+# Wiki
-Reverse proxy configuration examples for apache and nginx to use Calibre-Web:
-
-nginx configuration for a local server listening on port 8080, mapping Calibre-Web to /calibre:
-
-```
-http {
- upstream calibre {
- server 127.0.0.1:8083;
- }
- server {
- client_max_body_size 20M;
- location /calibre {
- proxy_bind $server_adress;
- proxy_pass http://127.0.0.1:8083;
- proxy_set_header Host $http_host;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Scheme $scheme;
- proxy_set_header X-Script-Name /calibre;
- }
- }
-}
-```
-*Note: If using SSL in your reverse proxy on a non-standard port (e.g.12345), the following proxy_redirect line may be required:*
-```
-proxy_redirect http://$host/ https://$host:12345/;
-```
-
-Apache 2.4 configuration for a local server listening on port 443, mapping Calibre-Web to /calibre-web:
-
-The following modules have to be activated: headers, proxy, rewrite.
-```
-Listen 443
-
-
- SSLEngine on
- SSLProxyEngine on
- SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
- SSLCertificateFile "C:\Apache24\conf\ssl\test.crt"
- SSLCertificateKeyFile "C:\Apache24\conf\ssl\test.key"
-
-
- RequestHeader set X-SCRIPT-NAME /calibre-web
- RequestHeader set X-SCHEME https
- ProxyPass http://localhost:8083/
- ProxyPassReverse http://localhost:8083/
-
-
-```
-
-## (Optional) SSL Configuration
-
-For configuration of calibre-web as SSL Server go to the Config page in the Admin section. Enter the certfile- and keyfile-location, optionally change port to 443 and press submit.
-Afterwards the server can only be accessed via SSL. In case of a misconfiguration (wrong/invalid files) both files can be overridden via command line options
--c [certfile location] -k [keyfile location]
-By using "" as file locations the server runs as non SSL server again. The correct file path can than be entered on the Config page. After the next restart without command line options the changed file paths are applied.
-
-
-## Start Calibre-Web as service under Linux
-
-Create a file "cps.service" as root in the folder /etc/systemd/system with the following content:
-
-```[Unit]
-Description=Calibre-Web
-
-[Service]
-Type=simple
-User=[Username]
-ExecStart=[path to python] [/PATH/TO/cps.py]
-WorkingDirectory=[/PATH/TO/cps.py]
-
-[Install]
-WantedBy=multi-user.target
-```
-
-Replace the user and ExecStart with your user and foldernames.
-
-`sudo systemctl enable cps.service`
-
-enables the service.
-
-## Command line options
-
-Starting the script with `-h` lists all supported command line options
-Currently supported are 2 options, which are both useful for running multiple instances of Calibre-Web
-
-`"-p path"` allows to specify the location of the settings database
-`"-g path"` allows to specify the location of the google-drive database
-`"-c path"` allows to specify the location of SSL certfile, works only in combination with keyfile
-`"-k path"` allows to specify the location of SSL keyfile, works only in combination with certfile
+For further informations, How To's and FAQ please check the ![Wiki](../../wiki)
diff --git a/test/Calibre-Web TestSummary.html b/test/Calibre-Web TestSummary.html
index eb381c0a..97d89880 100644
--- a/test/Calibre-Web TestSummary.html
+++ b/test/Calibre-Web TestSummary.html
@@ -30,15 +30,15 @@
@@ -608,8 +608,8 @@
ret['edit_enable'] = bool(tree.find("//*[@class='glyphicon glyphicon-edit']"))
/home/matthias/Entwicklung/calibre-web-test/test/ui_helper.py:664: FutureWarning: The behavior of this method will change in future versions. Use specific 'len(elem)' or 'elem is not None' test instead.
ret['read']= bool(tree.find("//*[@id='have_read_cb']"))
-Incomming connection 127.0.0.1:54218
-127.0.0.1:54218 Timeouted
+Incomming connection 127.0.0.1:44852
+127.0.0.1:44852 Timeouted