1
0
mirror of https://github.com/janeczku/calibre-web synced 2025-04-06 10:47:00 +00:00

Merge branch 'master' into Develop

This commit is contained in:
Ozzie Isaacs 2024-11-01 09:44:10 +01:00
commit 85368c89dd
86 changed files with 1801 additions and 1327 deletions

140
README.md
View File

@ -19,13 +19,13 @@ Calibre-Web is a web app that offers a clean and intuitive interface for browsin
- [Quick start](#quick-start)
- [Requirements](#requirements)
4. [Docker Images](#docker-images)
5. [Contributor Recognition](#contributor-recognition)
6. [Contact](#contact)
7. [Contributing to Calibre-Web](#contributing-to-calibre-web)
5. [Troubleshooting](#troubleshooting)
6. [Contributor Recognition](#contributor-recognition)
7. [Contact](#contact)
8. [Contributing to Calibre-Web](#contributing-to-calibre-web)
</details>
*This software is a fork of [library](https://github.com/mutschler/calibreserver) and licensed under the GPL v3 License.*
![Main screen](https://github.com/janeczku/calibre-web/wiki/images/main_screen.png)
@ -57,52 +57,103 @@ Calibre-Web is a web app that offers a clean and intuitive interface for browsin
## Installation
#### Installation via pip (recommended)
1. Create a virtual environment for Calibre-Web to avoid conflicts with existing Python dependencies
2. Install Calibre-Web via pip: `pip install calibreweb` (or `pip3` depending on your OS/distro)
3. Install optional features via pip as needed, see [this page](https://github.com/janeczku/calibre-web/wiki/Dependencies-in-Calibre-Web-Linux-and-Windows) for details
4. Start Calibre-Web by typing `cps`
### Installation via pip (recommended)
*Note: Raspberry Pi OS users may encounter issues during installation. If so, please update pip (`./venv/bin/python3 -m pip install --upgrade pip`) and/or install cargo (`sudo apt install cargo`) before retrying the installation.*
1. **Create a virtual environment**: Its essential to isolate your Calibre-Web installation to avoid dependency conflicts. You can create a virtual environment by running:
```
python3 -m venv calibre-web-env
```
2. **Activate the virtual environment**:
```
source calibre-web-env/bin/activate
```
3. **Install Calibre-Web**: Use pip to install the application:
```
pip install calibreweb
```
4. **Install optional features**: For additional functionality, you may need to install optional features. Refer to [this page](https://github.com/janeczku/calibre-web/wiki/Dependencies-in-Calibre-Web-Linux-and-Windows) for details on what can be installed.
5. **Start Calibre-Web**: After installation, you can start the application with:
```
cps
```
Refer to the Wiki for additional installation examples: [manual installation](https://github.com/janeczku/calibre-web/wiki/Manual-installation), [Linux Mint](https://github.com/janeczku/calibre-web/wiki/How-To:-Install-Calibre-Web-in-Linux-Mint-19-or-20), [Cloud Provider](https://github.com/janeczku/calibre-web/wiki/How-To:-Install-Calibre-Web-on-a-Cloud-Provider).
*Note: Users of Raspberry Pi OS may encounter installation issues. If you do, try upgrading pip and/or installing cargo as follows:*
```
./venv/bin/python3 -m pip install --upgrade pip
sudo apt install cargo
```
### Important Links
- For additional installation examples, check the following:
- [Manual installation](https://github.com/janeczku/calibre-web/wiki/Manual-installation)
- [Linux Mint installation](https://github.com/janeczku/calibre-web/wiki/How-To:-Install-Calibre-Web-in-Linux-Mint-19-or-20)
- [Cloud Provider setup](https://github.com/janeczku/calibre-web/wiki/How-To:-Install-Calibre-Web-on-a-Cloud-Provider)
## Quick Start
1. Open your browser and navigate to `http://localhost:8083` or `http://localhost:8083/opds` for the OPDS catalog
2. Log in with the default admin credentials
3. If you don't have a Calibre database, you can use [this database](https://github.com/janeczku/calibre-web/raw/master/library/metadata.db) (move it out of the Calibre-Web folder to prevent overwriting during updates)
4. Set `Location of Calibre database` to the path of the folder containing your Calibre library (metadata.db) and click "Save"
5. Optionally, use Google Drive to host your Calibre library by following the [Google Drive integration guide](https://github.com/janeczku/calibre-web/wiki/G-Drive-Setup#using-google-drive-integration)
6. Configure your Calibre-Web instance via the admin page, referring to the [Basic Configuration](https://github.com/janeczku/calibre-web/wiki/Configuration#basic-configuration) and [UI Configuration](https://github.com/janeczku/calibre-web/wiki/Configuration#ui-configuration) guides
#### Default Admin Login:
- **Username:** admin
- **Password:** admin123
1. **Access Calibre-Web**: Open your browser and navigate to:
```
http://localhost:8083
```
or for the OPDS catalog:
```
http://localhost:8083/opds
```
2. **Log in**: Use the default admin credentials:
- **Username:** admin
- **Password:** admin123
3. **Database Setup**: If you do not have a Calibre database, download a sample from:
```
https://github.com/janeczku/calibre-web/raw/master/library/metadata.db
```
Move it out of the Calibre-Web folder to avoid overwriting during updates.
4. **Configure Calibre Database**: In the admin interface, set the `Location of Calibre database` to the path of the folder containing your Calibre library (where `metadata.db` is located) and click "Save".
5. **Google Drive Integration**: For hosting your Calibre library on Google Drive, refer to the [Google Drive integration guide](https://github.com/janeczku/calibre-web/wiki/G-Drive-Setup#using-google-drive-integration).
6. **Admin Configuration**: Configure your instance via the admin page, referring to the [Basic Configuration](https://github.com/janeczku/calibre-web/wiki/Configuration#basic-configuration) and [UI Configuration](https://github.com/janeczku/calibre-web/wiki/Configuration#ui-configuration) guides.
## Requirements
- Python 3.7+
- [Imagemagick](https://imagemagick.org/script/download.php) for cover extraction from EPUBs (Windows users may need to install [Ghostscript](https://ghostscript.com/releases/gsdnld.html) for PDF cover extraction)
- Windows users need to install [libmagic for 32bit python](https://gnuwin32.sourceforge.net/downlinks/file.php) or [libmagic for 64bit python](https://github.com/nscaife/file-windows/releases/tag/20170108), depending on the python version; The files need to be installed in path (e.g. script folder of your Calibre-Web venv, or in the root folder of Calibre-Web
- Optional: [Calibre desktop program](https://calibre-ebook.com/download) for on-the-fly conversion and metadata editing (set "calibre's converter tool" path on the setup page)
- Optional: [Kepubify tool](https://github.com/pgaskin/kepubify/releases/latest) for Kobo device support (place the binary in `/opt/kepubify` on Linux or `C:\Program Files\kepubify` on Windows)
- **Python Version**: Ensure you have Python 3.7 or newer.
- **Imagemagick**: Required for cover extraction from EPUBs. Windows users may also need to install [Ghostscript](https://ghostscript.com/releases/gsdnld.html) for PDF cover extraction.
- **Windows Users**: Install [libmagic](https://gnuwin32.sourceforge.net/downlinks/file.php) for 32bit python or [libmagic for 64bit python](https://github.com/nscaife/file-windows/releases/tag/20170108), depending on your Python version. Make sure these files are included in your path.
- **Optional Tools**:
- **Calibre desktop program**: Recommended for on-the-fly conversion and metadata editing. Set the path to Calibres converter tool on the setup page.
- **Kepubify tool**: Needed for Kobo device support. Download the tool and place the binary in `/opt/kepubify` on Linux or `C:\Program Files\kepubify` on Windows.
## Docker Images
Pre-built Docker images are available in the following Docker Hub repositories (maintained by the LinuxServer team):
Pre-built Docker images are available:
#### **LinuxServer - x64, aarch64**
- [Docker Hub](https://hub.docker.com/r/linuxserver/calibre-web)
- [GitHub](https://github.com/linuxserver/docker-calibre-web)
- [GitHub - Optional Calibre layer](https://github.com/linuxserver/docker-mods/tree/universal-calibre)
### **LinuxServer - x64, aarch64**
- **Docker Hub**: [linuxserver/calibre-web](https://hub.docker.com/r/linuxserver/calibre-web)
- **GitHub**: [linuxserver/docker-calibre-web](https://github.com/linuxserver/docker-calibre-web)
- **Optional Calibre layer**: [linuxserver/docker-mods](https://github.com/linuxserver/docker-mods/tree/universal-calibre)
Include the environment variable `DOCKER_MODS=linuxserver/mods:universal-calibre` in your Docker run/compose file to add the Calibre `ebook-convert` binary (x64 only). Omit this variable for a lightweight image.
To include the Calibre `ebook-convert` binary (x64 only), add the environment variable:
```
DOCKER_MODS=linuxserver/mods:universal-calibre
```
in your Docker run/compose file. Omit this variable for a lightweight image.
Both the Calibre-Web and Calibre-Mod images are automatically rebuilt on new releases and updates.
- **Paths Configuration**:
- Set **Path to Calibre Binaries** to `/usr/bin`.
- Set **Path to Unrar** to `/usr/bin/unrar`.
- Set "Path to Calibre Binaries" to `/usr/bin`
- Set "Path to Unrar" to `/usr/bin/unrar`
## Troubleshooting
- **Common Issues**:
- If you experience issues starting the application, check the log files located in the `logs` directory for error messages.
- If eBooks fail to load, verify that the `Location of Calibre database` is correctly set and that the database file is accessible.
- **Configuration Errors**: Ensure that your Calibre database is compatible and properly formatted. Refer to the Calibre documentation for guidance on maintaining the database.
- **Performance Problems**:
- If the application is slow, consider increasing the allocated resources (CPU/RAM) to your server or optimizing the Calibre database by removing duplicates and unnecessary entries.
- Regularly clear the cache in your web browser to improve loading times.
- **User Management Issues**: If users are unable to log in or register, check the user permission settings in the admin interface. Ensure that registration is enabled and that users are being assigned appropriate roles.
- **Support Resources**: For additional help, consider visiting the [FAQ section](https://github.com/janeczku/calibre-web/wiki/FAQ) of the wiki or posting your questions in the [Discord community](https://discord.gg/h2VsJ2NEfB).
## Contributor Recognition
@ -116,4 +167,21 @@ For more information, How To's, and FAQs, please visit the [Wiki](https://github
## Contributing to Calibre-Web
Check out our [Contributing Guidelines](https://github.com/janeczku/calibre-web/blob/master/CONTRIBUTING.md)
To contribute, please check our [Contributing Guidelines](https://github.com/janeczku/calibre-web/blob/master/CONTRIBUTING.md). We welcome issues, feature requests, and pull requests from the community.
### Reporting Bugs
If you encounter bugs or issues, please report them in the [issues section](https://github.com/janeczku/calibre-web/issues) of the repository. Be sure to include detailed information about your setup and the problem encountered.
### Feature Requests
We welcome suggestions for new features. Please create a new issue in the repository to discuss your ideas.
## Additional Resources
- **Documentation**: Comprehensive documentation is available on the [Calibre-Web wiki](https://github.com/janeczku/calibre-web/wiki).
- **Community Contributions**: Explore the [community contributions](https://github.com/janeczku/calibre-web/pulls) to see ongoing work and how you can get involved.
---
Thank you for using Calibre-Web! We hope you enjoy managing your eBook library with our tool.

View File

@ -34,7 +34,6 @@ from .cli import CliParameter
from .reverseproxy import ReverseProxied
from .server import WebServer
from .dep_check import dependency_check
# from .babel import babel, get_locale
from .updater import Updater
from . import config_sql
from . import cache_buster
@ -85,7 +84,7 @@ log = logger.create()
app = Flask(__name__)
app.config.update(
SESSION_COOKIE_HTTPONLY=True,
SESSION_COOKIE_SAMESITE='Strict',
SESSION_COOKIE_SAMESITE='Lax',
REMEMBER_COOKIE_SAMESITE='Strict',
WTF_CSRF_SSL_STRICT=False,
SESSION_COOKIE_NAME=os.environ.get('COOKIE_PREFIX', "") + "session",

View File

@ -306,7 +306,15 @@ def edit_user_table():
.group_by(text('books_tags_link.tag')) \
.order_by(db.Tags.name).all()
if config.config_restricted_column:
custom_values = calibre_db.session.query(db.cc_classes[config.config_restricted_column]).all()
try:
custom_values = calibre_db.session.query(db.cc_classes[config.config_restricted_column]).all()
except (KeyError, AttributeError, IndexError):
custom_values = []
log.error("Custom Column No.{} does not exist in calibre database".format(
config.config_restricted_column))
flash(_("Custom Column No.%(column)d does not exist in calibre database",
column=config.config_restricted_column),
category="error")
else:
custom_values = []
if not config.config_anonbrowse:
@ -982,8 +990,14 @@ def prepare_tags(user, action, tags_name, id_list):
raise Exception(_("Tag not found"))
new_tags_list = [x.name for x in tags]
else:
tags = calibre_db.session.query(db.cc_classes[config.config_restricted_column]) \
.filter(db.cc_classes[config.config_restricted_column].id.in_(id_list)).all()
try:
tags = calibre_db.session.query(db.cc_classes[config.config_restricted_column]) \
.filter(db.cc_classes[config.config_restricted_column].id.in_(id_list)).all()
except (KeyError, AttributeError, IndexError):
log.error("Custom Column No.{} does not exist in calibre database".format(
config.config_restricted_column))
raise Exception(_("Custom Column No.%(column)d does not exist in calibre database",
column=config.config_restricted_column))
new_tags_list = [x.value for x in tags]
saved_tags_list = user.__dict__[tags_name].split(",") if len(user.__dict__[tags_name]) else []
if action == "remove":
@ -1744,6 +1758,14 @@ def _db_configuration_update_helper():
ub.session.query(ub.KoboSyncedBooks).delete()
helper.delete_thumbnail_cache()
ub.session_commit()
# deleted visibilities based on custom column and tags
config.config_restricted_column = 0
config.config_denied_tags = ""
config.config_allowed_tags = ""
config.config_columns_to_ignore = ""
config.config_denied_column_value = ""
config.config_allowed_column_value = ""
config.config_read_column = 0
_config_string(to_save, "config_calibre_dir")
calibre_db.update_config(config)
if not os.access(os.path.join(config.config_calibre_dir, "metadata.db"), os.W_OK):
@ -2081,7 +2103,7 @@ def _handle_edit_user(to_save, content, languages, translations, kobo_support):
def extract_user_data_from_field(user, field):
match = re.search(field + r"=([@\.\d\s\w-]+)", user, re.IGNORECASE | re.UNICODE)
match = re.search(field + r"=(.*?)($|(?<!\\),)", user, re.IGNORECASE | re.UNICODE)
if match:
return match.group(1)
else:
@ -2089,7 +2111,7 @@ def extract_user_data_from_field(user, field):
def extract_dynamic_field_from_filter(user, filtr):
match = re.search("([a-zA-Z0-9-]+)=%s", filtr, re.IGNORECASE | re.UNICODE)
match = re.search(r"([a-zA-Z0-9-]+)=%s", filtr, re.IGNORECASE | re.UNICODE)
if match:
return match.group(1)
else:

View File

@ -114,7 +114,7 @@ class Identifiers(Base):
if format_type == 'amazon':
return "Amazon"
elif format_type.startswith("amazon_"):
return "Amazon.{0}".format(format_type[7:])
return "Amazon.{0}".format(format_type[7:].lower().replace("uk","co.uk"))
elif format_type == "isbn":
return "ISBN"
elif format_type == "doi":
@ -149,7 +149,7 @@ class Identifiers(Base):
if format_type == "amazon" or format_type == "asin":
return "https://amazon.com/dp/{0}".format(self.val)
elif format_type.startswith('amazon_'):
return "https://amazon.{0}/dp/{1}".format(format_type[7:], self.val)
return "https://amazon.{0}/dp/{1}".format(format_type[7:].lower().replace("uk","co.uk"), self.val)
elif format_type == "isbn":
return "https://www.worldcat.org/isbn/{0}".format(self.val)
elif format_type == "doi":

View File

@ -501,6 +501,7 @@ def do_edit_book(book_id, upload_formats=None):
modify_date = True
helper.replace_cover_thumbnail_cache(book.id)
else:
edit_error = True
flash(error, category="error")
# Add default series_index to book

View File

@ -32,7 +32,6 @@ try:
l.part3 = getattr(l, 'alpha_3', None)
return l
def get(name=None, part1=None, part3=None):
if part3 is not None:
return _copy_fields(pyc_languages.get(alpha_3=part3))

View File

@ -8138,6 +8138,384 @@ LANGUAGE_NAMES = {
"zul": "Zulu",
"zun": "Zuni"
},
"sl": {
"abk": "abhazijski",
"ace": "achinese",
"ach": "Acoli",
"ada": "Adangme",
"ady": "Adyghe",
"aar": "afarski",
"afh": "Afrihili",
"afr": "afrikanski",
"ain": "Ainu (Japan)",
"aka": "Akan",
"akk": "akadski",
"sqi": "albanščina",
"ale": "aleutski",
"amh": "amharski",
"anp": "Angika",
"ara": "arabski",
"arg": "aragonski",
"arp": "Arapaho",
"arw": "araukanski",
"hye": "armenščina",
"asm": "asamski",
"ast": "Asturian",
"ava": "avarski",
"ave": "avestijski jeziki",
"awa": "Awadhi",
"aym": "Aymara",
"aze": "azerbajdžanski",
"ban": "balijščina",
"bal": "belučijski",
"bam": "bambarski",
"bas": "Basa (Cameroon)",
"bak": "baškirski",
"eus": "baskovščina",
"bej": "Beja",
"bel": "beloruščina",
"bem": "Bemba (Zambia)",
"ben": "bengalščina",
"bit": "Berinomo",
"bho": "Bhojpuri",
"bik": "bikolščina",
"byn": "Bilin",
"bin": "Bini",
"bis": "bislama",
"zbl": "Blissymbols",
"bos": "bošnjaščina",
"bra": "Braj",
"bre": "bretonščina",
"bug": "buginščina",
"bul": "bolgarščina",
"bua": "burjatščina",
"mya": "burmanščina",
"cad": "kadajščina?",
"cat": "katalonščina",
"ceb": "cebuanščina",
"chg": "Chagatai",
"cha": "čamorščina",
"che": "čečenščina",
"chr": "čerokeščina",
"chy": "čejenščina",
"chb": "čibčevščina",
"zho": "kitajščina",
"chn": "Chinook jargon",
"chp": "čipevščina",
"cho": "Choctaw",
"cht": "Cholón",
"chk": "Chuukese",
"chv": "čuvaščina",
"cop": "koptščina",
"cor": "kornijščina",
"cos": "korzijščina",
"cre": "krijščina",
"mus": "Creek",
"hrv": "hrvaščina",
"ces": "češčina",
"dak": "Dakota",
"dan": "danski",
"dar": "Dargwa",
"del": "Delaware",
"div": "Dhivehi",
"din": "Dinka",
"doi": "Dogri (macrolanguage)",
"dgr": "Dogrib",
"dua": "Duala",
"nld": "nizozemščina",
"dse": "Dutch Sign Language",
"dyu": "Dyula",
"dzo": "dzongkha",
"efi": "Efik",
"egy": "egipčanski",
"eka": "Ekajuk",
"elx": "elamščina",
"eng": "angleščina",
"enu": "Enu",
"myv": "Erzya",
"epo": "esperanto",
"est": "estonščina",
"ewe": "evenščina",
"ewo": "Ewondo",
"fan": "Fang (Equatorial Guinea)",
"fat": "Fanti",
"fao": "ferščina",
"fij": "fidžijščina",
"fil": "Filipino",
"fin": "finščina",
"fon": "Fon",
"fra": "francoščina",
"fur": "furlanščina",
"ful": "fulščina",
"gaa": "Ga",
"glg": "Galician",
"lug": "Ganda",
"gay": "gajščina?",
"gba": "Gbaya (Central African Republic)",
"hmj": "Ge",
"gez": "etiopščina?",
"kat": "gruzinščina",
"deu": "nemški",
"gil": "gilbertščina",
"gon": "Gondi",
"gor": "Gorontalo",
"got": "gotščina",
"grb": "Grebo",
"grn": "gvaranijščina",
"guj": "gudžaratščina",
"gwi": "Gwichʼin",
"hai": "haidščina",
"hau": "havščina",
"haw": "havajščina",
"heb": "hebrejščina",
"her": "Herero",
"hil": "hilingajnonščina",
"hin": "hindijščina",
"hmo": "hiri motu",
"hit": "hetitščina",
"hmn": "hmonščina; miaojščina",
"hun": "madžarščina",
"hup": "hupščina",
"iba": "ibanščina",
"isl": "islandščina",
"ido": "Ido",
"ibo": "Igbo",
"ilo": "Iloko",
"ind": "indonezijščina",
"inh": "inguščina",
"ina": "interlingva",
"ile": "Interlingue",
"iku": "inuktituščina",
"ipk": "Inupiaq",
"gle": "irščina",
"ita": "italijanščina",
"jpn": "japonščina",
"jav": "javanščina",
"jrb": "Judeo-Arabic",
"jpr": "Judeo-Persian",
"kbd": "kabardinščina",
"kab": "Kabyle",
"kac": "Kachin",
"kal": "Kalaallisut",
"xal": "Kalmyk",
"kam": "Kamba (Kenya)",
"kan": "kanareščina",
"kau": "Kanuri",
"kaa": "Kara-Kalpak",
"krc": "Karachay-Balkar",
"krl": "Karelian",
"kas": "kašmirščina",
"csb": "Kashubian",
"kaw": "kavi",
"kaz": "kazaščina",
"kha": "Khasi",
"kho": "Khotanese",
"kik": "kikujščina",
"kmb": "Kimbundu",
"kin": "Kinyarwanda",
"kir": "kirgiščina",
"tlh": "Klingon",
"kom": "komijščina",
"kon": "Kongo",
"kok": "Konkani (macrolanguage)",
"kor": "korejščina",
"kos": "Kosraean",
"kpe": "Kpelle",
"kua": "Kuanyama",
"kum": "kumiščina",
"kur": "kurdščina",
"kru": "Kurukh",
"kut": "kutenajščina",
"lad": "ladinščina",
"lah": "Lahnda",
"lam": "Lamba",
"lao": "laoščina",
"lat": "latinščina",
"lav": "latvijščina",
"lez": "lezginščina",
"lim": "Limburgan",
"lin": "lingala",
"lit": "litvanščina",
"jbo": "Lojban",
"loz": "Lozi",
"lub": "Luba-Katanga",
"lua": "lubalulujščina",
"lui": "Luiseno",
"smj": "Lule Sami",
"lun": "Lunda",
"luo": "Luo (Kenya and Tanzania)",
"lus": "Lushai",
"ltz": "Luxembourgish",
"mkd": "makedonščina",
"mad": "madurščina",
"mag": "Magahi",
"mai": "Maithili",
"mak": "makasarščina",
"mlg": "malgaščina",
"msa": "Malay (macrolanguage)",
"mal": "malajalščina",
"mlt": "malteščina",
"mnc": "Manchu",
"mdr": "Mandar",
"man": "Mandingo",
"mni": "manipurščina",
"glv": "manska gelščina",
"mri": "maorščina",
"arn": "Mapudungun",
"mar": "maratščina",
"chm": "Mari (Russia)",
"mah": "Marshallese",
"mwr": "Marwari",
"mas": "masajščina",
"men": "Mende (Sierra Leone)",
"mic": "Mi'kmaq",
"min": "Minangkabau",
"mwl": "Mirandese",
"moh": "mohoščina",
"mdf": "Moksha",
"lol": "Mongo",
"mon": "mongolščina",
"mos": "mosanščina",
"mul": "Več jezikov",
"nqo": "N'Ko",
"nau": "Nauru",
"nav": "navaščina",
"ndo": "Ndonga",
"nap": "napolitanščina",
"nia": "niaščina",
"niu": "niuejščina",
"zxx": "No linguistic content",
"nog": "Nogai",
"nor": "norveščina",
"nob": "Norwegian Bokmål",
"nno": "norveščina; nynorsk",
"nym": "Nyamwezi",
"nya": "Nyanja",
"nyn": "Nyankole",
"nyo": "Nyoro",
"nzi": "Nzima",
"oci": "Occitan (post 1500)",
"oji": "Ojibwa",
"orm": "Oromo",
"osa": "Osage",
"oss": "Ossetian",
"pal": "Pahlavi",
"pau": "palavanščina",
"pli": "Pali",
"pam": "Pampanga",
"pag": "pangasinanščina",
"pan": "Panjabi",
"pap": "papiamentu",
"fas": "perzijščina",
"phn": "feničanščina",
"pon": "Pohnpeian",
"pol": "poljščina",
"por": "portugalđščina",
"pus": "paštu",
"que": "Quechua",
"raj": "radžastanščina",
"rap": "rapanujščina",
"ron": "romunščina",
"roh": "Romansh",
"rom": "romščina",
"run": "rundščina",
"rus": "ruščina",
"smo": "samoanščina",
"sad": "Sandawe",
"sag": "Sango",
"san": "sanskrt",
"sat": "santalščina",
"srd": "sardinščina",
"sas": "Sasak",
"sco": "škotščina",
"sel": "selkupščina",
"srp": "srbščina",
"srr": "Serer",
"shn": "šanščina",
"sna": "šonščina",
"scn": "sicilijanščina",
"sid": "Sidamo",
"bla": "Siksika",
"snd": "sindščina",
"sin": "Sinhala",
"den": "Slave (Athapascan)",
"slk": "slovaščina",
"slv": "slovenščina",
"sog": "Sogdian",
"som": "Somali",
"snk": "Soninke",
"spa": "španščina",
"srn": "Sranan Tongo",
"suk": "Sukuma",
"sux": "sumerščina",
"sun": "sundščina",
"sus": "susuamijščina?",
"swa": "Swahili (macrolanguage)",
"ssw": "svazijščina?",
"swe": "švedščina",
"syr": "sirščina",
"tgl": "tagaloščina",
"tah": "tahitijščina",
"tgk": "tadžiščina",
"tmh": "Tamashek",
"tam": "tamilščina",
"tat": "tatarščina",
"tel": "Telugu",
"ter": "Tereno",
"tet": "Tetum",
"tha": "tajščina",
"bod": "tibetanščina",
"tig": "Tigre",
"tir": "Tigrinya",
"tem": "Timne",
"tiv": "Tiv",
"tli": "Tlingit",
"tpi": "tok pisin",
"tkl": "Tokelau",
"tog": "Tonga (Nyasa)",
"ton": "tonganščina",
"tsi": "tsimšijščina",
"tso": "Tsonga",
"tsn": "Tswana",
"tum": "Tumbuka",
"tur": "turščina",
"tuk": "turkmenščina",
"tvl": "tuvalujščina",
"tyv": "Tuvinian",
"twi": "Twi",
"udm": "Udmurt",
"uga": "ugaritščina",
"uig": "ujgurščina",
"ukr": "ukrajinščina",
"umb": "Umbundu",
"mis": "Uncoded languages",
"und": "nedoločen",
"urd": "urdujščina",
"uzb": "uzbeščina",
"vai": "vajščina",
"ven": "Venda",
"vie": "vietnamščina",
"vol": "Volapük",
"vot": "votjaščina",
"wln": "valonščina",
"war": "Waray (Philippines)",
"was": "Washo",
"cym": "valižanščina",
"wal": "Wolaytta",
"wol": "Wolof",
"xho": "koščina",
"sah": "jakutščina",
"yao": "jaojščina",
"yap": "Yapese",
"yid": "jidiš",
"yor": "jorubščina",
"zap": "Zapotec",
"zza": "Zaza",
"zen": "Zenaga",
"zha": "Zhuang",
"zul": "zulujščina",
"zun": "Zuni"
},
"sv": {
"aar": "Afar",
"abk": "Abchaziska",

View File

@ -111,14 +111,15 @@ def yesno(value, yes, no):
@jinjia.app_template_filter('formatfloat')
def formatfloat(value, decimals=1):
value = 0 if not value else value
if not value:
return value
formated_value = ('{0:.' + str(decimals) + 'f}').format(value)
if formated_value.endswith('.' + "0" * decimals):
formated_value = formated_value.rstrip('0').rstrip('.')
return formated_value
@jinjia.app_template_filter('formatseriesindex')
'''@jinjia.app_template_filter('formatseriesindex')
def formatseriesindex_filter(series_index):
if series_index:
try:
@ -129,6 +130,7 @@ def formatseriesindex_filter(series_index):
except (ValueError, TypeError):
return series_index
return 0
'''
@jinjia.app_template_filter('escapedlink')

View File

@ -423,7 +423,7 @@ def get_series(book):
def get_seriesindex(book):
return book.series_index or 1
return book.series_index if isinstance(book.series_index, float) else 1
def get_language(book):
@ -486,14 +486,16 @@ def get_metadata(book):
if get_series(book):
name = get_series(book)
metadata["Series"] = {
"Name": get_series(book),
"Number": get_seriesindex(book), # ToDo Check int() ?
"NumberFloat": float(get_seriesindex(book)),
# Get a deterministic id based on the series name.
"Id": str(uuid.uuid3(uuid.NAMESPACE_DNS, name)),
}
try:
metadata["Series"] = {
"Name": get_series(book),
"Number": get_seriesindex(book), # ToDo Check int() ?
"NumberFloat": float(get_seriesindex(book)),
# Get a deterministic id based on the series name.
"Id": str(uuid.uuid3(uuid.NAMESPACE_DNS, name)),
}
except Exception as e:
print(e)
return metadata

View File

@ -424,11 +424,8 @@ def feed_shelf(book_id):
@requires_basic_auth_if_no_ano
def opds_download_link(book_id, book_format):
if not auth.current_user().role_download():
return abort(403)
if "Kobo" in request.headers.get('User-Agent'):
client = "kobo"
else:
client = ""
return abort(401)
client = "kobo" if "Kobo" in request.headers.get('User-Agent') else ""
return get_download_link(book_id, book_format.lower(), client)

View File

@ -265,7 +265,7 @@ def render_adv_search_results(term, offset=None, order=None, limit=None):
pub_end = term.get("publishend")
rating_low = term.get("ratinghigh")
rating_high = term.get("ratinglow")
description = term.get("comment")
description = term.get("comments")
read_status = term.get("read_status")
if author_name:
author_name = strip_whitespaces(author_name).lower().replace(',', '|')

View File

@ -3268,6 +3268,10 @@ div.btn-group[role=group][aria-label="Download, send to Kindle, reading"] > div.
left: auto !important
}
ul.dropdown-menu.offscreen {
margin: 2px -160px 0
}
div.btn-group[role=group][aria-label="Download, send to Kindle, reading"] .dropdown-menu.offscreen {
position: fixed;
top: 120px;
@ -4333,6 +4337,7 @@ body.advanced_search > div.container-fluid > div.row-fluid > div.col-sm-10 > div
.navbar-right > li > ul.dropdown-menu.offscreen {
right: -10px
}
.login .plexBack, body.login > div.container-fluid > div.row-fluid > div.col-sm-2, body.login > div.navbar.navbar-default.navbar-static-top > div > form {
@ -7951,3 +7956,5 @@ div.comments[data-readmore] {
transition: height 300ms;
overflow: hidden
}
.dropdown-menu > .offscreen

View File

@ -77,7 +77,6 @@ body {
}
#panels a {
visibility: hidden;
width: 18px;
height: 20px;
overflow: hidden;

View File

@ -3,7 +3,7 @@
*/
/* global Bloodhound, language, Modernizr, tinymce, getPath */
if ($("#comments").length) {
if ($("#comments").length && typeof tinymce !== "undefined") {
tinymce.init({
selector: "#comments",
plugins: 'code',

View File

@ -685,6 +685,17 @@ function ratingFormatter(value, row) {
return (value/2);
}
function seriesIndexFormatter(value, row) {
if (!value) {
return value;
}
formated_value = Number(value).toFixed(2);
if (formated_value.endsWith(".00")) {
formated_value = parseInt(formated_value).toString();
}
return formated_value;
}
/* Do some hiding disabling after user list is loaded */
function loadSuccess() {
@ -849,6 +860,7 @@ function BookCheckboxChange(checkbox, userId, field) {
},
success: handleListServerResponse
});
console.log("test");
}

View File

@ -19,5 +19,5 @@ import re
def strip_whitespaces(text):
return re.sub("(^[\s\u200B-\u200D\ufeff]+)|([\s\u200B-\u200D\ufeff]+$)","", text)
return re.sub(r"(^[\s\u200B-\u200D\ufeff]+)|([\s\u200B-\u200D\ufeff]+$)","", text)

691
cps/tasks/convert.py Normal file → Executable file
View File

@ -1,340 +1,351 @@
# -*- coding: utf-8 -*-
# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web)
# Copyright (C) 2020 pwr
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
import re
from glob import glob
from shutil import copyfile, copyfileobj
from markupsafe import escape
from time import time
from uuid import uuid4
from sqlalchemy.exc import SQLAlchemyError
from flask_babel import lazy_gettext as N_
from cps.services.worker import CalibreTask
from cps import db
from cps import logger, config
from cps.subproc_wrapper import process_open
from flask_babel import gettext as _
from cps.kobo_sync_status import remove_synced_book
from cps.ub import init_db_thread
from cps.file_helper import get_temp_dir
from cps.tasks.mail import TaskEmail
from cps import gdriveutils, helper
from cps.constants import SUPPORTED_CALIBRE_BINARIES
from cps.string_helper import strip_whitespaces
log = logger.create()
current_milli_time = lambda: int(round(time() * 1000))
class TaskConvert(CalibreTask):
def __init__(self, file_path, book_id, task_message, settings, ereader_mail, user=None):
super(TaskConvert, self).__init__(task_message)
self.worker_thread = None
self.file_path = file_path
self.book_id = book_id
self.title = ""
self.settings = settings
self.ereader_mail = ereader_mail
self.user = user
self.results = dict()
def run(self, worker_thread):
self.worker_thread = worker_thread
if config.config_use_google_drive:
worker_db = db.CalibreDB(expire_on_commit=False, init=True)
cur_book = worker_db.get_book(self.book_id)
self.title = cur_book.title
data = worker_db.get_book_format(self.book_id, self.settings['old_book_format'])
df = gdriveutils.getFileFromEbooksFolder(cur_book.path,
data.name + "." + self.settings['old_book_format'].lower())
df_cover = gdriveutils.getFileFromEbooksFolder(cur_book.path, "cover.jpg")
if df:
datafile_cover = None
datafile = os.path.join(config.get_book_path(),
cur_book.path,
data.name + "." + self.settings['old_book_format'].lower())
if df_cover:
datafile_cover = os.path.join(config.get_book_path(),
cur_book.path, "cover.jpg")
if not os.path.exists(os.path.join(config.get_book_path(), cur_book.path)):
os.makedirs(os.path.join(config.get_book_path(), cur_book.path))
df.GetContentFile(datafile)
if df_cover:
df_cover.GetContentFile(datafile_cover)
worker_db.session.close()
else:
# ToDo Include cover in error handling
error_message = _("%(format)s not found on Google Drive: %(fn)s",
format=self.settings['old_book_format'],
fn=data.name + "." + self.settings['old_book_format'].lower())
worker_db.session.close()
return self._handleError(error_message)
filename = self._convert_ebook_format()
if config.config_use_google_drive:
os.remove(self.file_path + '.' + self.settings['old_book_format'].lower())
if df_cover:
os.remove(os.path.join(config.config_calibre_dir, cur_book.path, "cover.jpg"))
if filename:
if config.config_use_google_drive:
# Upload files to gdrive
gdriveutils.updateGdriveCalibreFromLocal()
self._handleSuccess()
if self.ereader_mail:
# if we're sending to E-Reader after converting, create a one-off task and run it immediately
# todo: figure out how to incorporate this into the progress
try:
EmailText = N_(u"%(book)s send to E-Reader", book=escape(self.title))
for email in self.ereader_mail.split(','):
email = strip_whitespaces(email)
worker_thread.add(self.user, TaskEmail(self.settings['subject'],
self.results["path"],
filename,
self.settings,
email,
EmailText,
self.settings['body'],
id=self.book_id,
internal=True)
)
except Exception as ex:
return self._handleError(str(ex))
def _convert_ebook_format(self):
error_message = None
local_db = db.CalibreDB(expire_on_commit=False, init=True)
file_path = self.file_path
book_id = self.book_id
format_old_ext = '.' + self.settings['old_book_format'].lower()
format_new_ext = '.' + self.settings['new_book_format'].lower()
# check to see if destination format already exists - or if book is in database
# if it does - mark the conversion task as complete and return a success
# this will allow to send to E-Reader workflow to continue to work
if os.path.isfile(file_path + format_new_ext) or\
local_db.get_book_format(self.book_id, self.settings['new_book_format']):
log.info("Book id %d already converted to %s", book_id, format_new_ext)
cur_book = local_db.get_book(book_id)
self.title = cur_book.title
self.results['path'] = cur_book.path
self.results['title'] = self.title
new_format = local_db.session.query(db.Data).filter(db.Data.book == book_id)\
.filter(db.Data.format == self.settings['new_book_format'].upper()).one_or_none()
if not new_format:
new_format = db.Data(name=os.path.basename(file_path),
book_format=self.settings['new_book_format'].upper(),
book=book_id, uncompressed_size=os.path.getsize(file_path + format_new_ext))
try:
local_db.session.merge(new_format)
local_db.session.commit()
except SQLAlchemyError as e:
local_db.session.rollback()
log.error("Database error: %s", e)
local_db.session.close()
self._handleError(N_("Oops! Database Error: %(error)s.", error=e))
return
self._handleSuccess()
local_db.session.close()
return os.path.basename(file_path + format_new_ext)
else:
log.info("Book id %d - target format of %s does not exist. Moving forward with convert.",
book_id,
format_new_ext)
if config.config_kepubifypath and format_old_ext == '.epub' and format_new_ext == '.kepub':
check, error_message = self._convert_kepubify(file_path,
format_old_ext,
format_new_ext)
else:
# check if calibre converter-executable is existing
if not os.path.exists(config.config_converterpath):
self._handleError(N_("Calibre ebook-convert %(tool)s not found", tool=config.config_converterpath))
return
has_cover = local_db.get_book(book_id).has_cover
check, error_message = self._convert_calibre(file_path, format_old_ext, format_new_ext, has_cover)
if check == 0:
cur_book = local_db.get_book(book_id)
if os.path.isfile(file_path + format_new_ext):
new_format = local_db.session.query(db.Data).filter(db.Data.book == book_id) \
.filter(db.Data.format == self.settings['new_book_format'].upper()).one_or_none()
if not new_format:
new_format = db.Data(name=cur_book.data[0].name,
book_format=self.settings['new_book_format'].upper(),
book=book_id, uncompressed_size=os.path.getsize(file_path + format_new_ext))
try:
local_db.session.merge(new_format)
local_db.session.commit()
if self.settings['new_book_format'].upper() in ['KEPUB', 'EPUB', 'EPUB3']:
ub_session = init_db_thread()
remove_synced_book(book_id, True, ub_session)
ub_session.close()
except SQLAlchemyError as e:
local_db.session.rollback()
log.error("Database error: %s", e)
local_db.session.close()
self._handleError(error_message)
return
self.results['path'] = cur_book.path
self.title = cur_book.title
self.results['title'] = self.title
if not config.config_use_google_drive:
self._handleSuccess()
return os.path.basename(file_path + format_new_ext)
else:
error_message = N_('%(format)s format not found on disk', format=format_new_ext.upper())
local_db.session.close()
log.info("ebook converter failed with error while converting book")
if not error_message:
error_message = N_('Ebook converter failed with unknown error')
else:
log.error(error_message)
self._handleError(error_message)
return
def _convert_kepubify(self, file_path, format_old_ext, format_new_ext):
if config.config_embed_metadata and config.config_binariesdir:
tmp_dir, temp_file_name = helper.do_calibre_export(self.book_id, format_old_ext[1:])
filename = os.path.join(tmp_dir, temp_file_name + format_old_ext)
temp_file_path = tmp_dir
else:
filename = file_path + format_old_ext
temp_file_path = os.path.dirname(file_path)
quotes = [1, 3]
command = [config.config_kepubifypath, filename, '-o', temp_file_path, '-i']
try:
p = process_open(command, quotes)
except OSError as e:
return 1, N_("Kepubify-converter failed: %(error)s", error=e)
self.progress = 0.01
while True:
nextline = p.stdout.readlines()
nextline = [x.strip('\n') for x in nextline if x != '\n']
for line in nextline:
log.debug(line)
if p.poll() is not None:
break
# process returncode
check = p.returncode
# move file
if check == 0:
converted_file = glob(os.path.splitext(filename)[0] + "*.kepub.epub")
if len(converted_file) == 1:
copyfile(converted_file[0], (file_path + format_new_ext))
os.unlink(converted_file[0])
else:
return 1, N_("Converted file not found or more than one file in folder %(folder)s",
folder=os.path.dirname(file_path))
return check, None
def _convert_calibre(self, file_path, format_old_ext, format_new_ext, has_cover):
path_tmp_opf = None
try:
# path_tmp_opf = self._embed_metadata()
if config.config_embed_metadata:
quotes = [5]
tmp_dir = get_temp_dir()
calibredb_binarypath = os.path.join(config.config_binariesdir, SUPPORTED_CALIBRE_BINARIES["calibredb"])
my_env = os.environ.copy()
if config.config_calibre_split:
my_env['CALIBRE_OVERRIDE_DATABASE_PATH'] = os.path.join(config.config_calibre_dir, "metadata.db")
library_path = config.config_calibre_split_dir
else:
library_path = config.config_calibre_dir
opf_command = [calibredb_binarypath, 'show_metadata', '--as-opf', str(self.book_id),
'--with-library', library_path]
p = process_open(opf_command, quotes, my_env)
p.wait()
check = p.returncode
calibre_traceback = p.stderr.readlines()
if check == 0:
path_tmp_opf = os.path.join(tmp_dir, "metadata_" + str(uuid4()) + ".opf")
with open(path_tmp_opf, 'w') as fd:
copyfileobj(p.stdout, fd)
else:
error_message = ""
for ele in calibre_traceback:
if not ele.startswith('Traceback') and not ele.startswith(' File'):
error_message = N_("Calibre failed with error: %(error)s", error=ele)
return check, error_message
quotes = [1, 2, 4, 6]
command = [config.config_converterpath, (file_path + format_old_ext),
(file_path + format_new_ext)]
if config.config_embed_metadata:
command.extend(['--from-opf', path_tmp_opf])
if has_cover:
command.extend(['--cover', os.path.join(os.path.dirname(file_path), 'cover.jpg')])
quotes_index = 3
if config.config_calibre:
parameters = config.config_calibre.split(" ")
for param in parameters:
command.append(param)
quotes.append(quotes_index)
quotes_index += 1
p = process_open(command, quotes, newlines=False)
except OSError as e:
return 1, N_("Ebook-converter failed: %(error)s", error=e)
while p.poll() is None:
nextline = p.stdout.readline()
if isinstance(nextline, bytes):
nextline = nextline.decode('utf-8', errors="ignore").strip('\r\n')
if nextline:
log.debug(nextline)
# parse progress string from calibre-converter
progress = re.search(r"(\d+)%\s.*", nextline)
if progress:
self.progress = int(progress.group(1)) / 100
if config.config_use_google_drive:
self.progress *= 0.9
# process returncode
check = p.returncode
calibre_traceback = p.stderr.readlines()
error_message = ""
for ele in calibre_traceback:
ele = ele.decode('utf-8', errors="ignore").strip('\n')
log.debug(ele)
if not ele.startswith('Traceback') and not ele.startswith(' File'):
error_message = N_("Calibre failed with error: %(error)s", error=ele)
return check, error_message
@property
def name(self):
return N_("Convert")
def __str__(self):
if self.ereader_mail:
return "Convert Book {} and mail it to {}".format(self.book_id, self.ereader_mail)
else:
return "Convert Book {}".format(self.book_id)
@property
def is_cancellable(self):
return False
# -*- coding: utf-8 -*-
# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web)
# Copyright (C) 2020 pwr
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
import re
import glob
from shutil import copyfile, copyfileobj
from markupsafe import escape
from time import time
from uuid import uuid4
from sqlalchemy.exc import SQLAlchemyError
from flask_babel import lazy_gettext as N_
from cps.services.worker import CalibreTask
from cps import db
from cps import logger, config
from cps.subproc_wrapper import process_open
from flask_babel import gettext as _
from cps.kobo_sync_status import remove_synced_book
from cps.ub import init_db_thread
from cps.file_helper import get_temp_dir
from cps.tasks.mail import TaskEmail
from cps import gdriveutils, helper
from cps.constants import SUPPORTED_CALIBRE_BINARIES
from cps.string_helper import strip_whitespaces
log = logger.create()
current_milli_time = lambda: int(round(time() * 1000))
class TaskConvert(CalibreTask):
def __init__(self, file_path, book_id, task_message, settings, ereader_mail, user=None):
super(TaskConvert, self).__init__(task_message)
self.worker_thread = None
self.file_path = file_path
self.book_id = book_id
self.title = ""
self.settings = settings
self.ereader_mail = ereader_mail
self.user = user
self.results = dict()
def run(self, worker_thread):
self.worker_thread = worker_thread
if config.config_use_google_drive:
worker_db = db.CalibreDB(expire_on_commit=False, init=True)
cur_book = worker_db.get_book(self.book_id)
self.title = cur_book.title
data = worker_db.get_book_format(self.book_id, self.settings['old_book_format'])
df = gdriveutils.getFileFromEbooksFolder(cur_book.path,
data.name + "." + self.settings['old_book_format'].lower())
df_cover = gdriveutils.getFileFromEbooksFolder(cur_book.path, "cover.jpg")
if df:
datafile_cover = None
datafile = os.path.join(config.get_book_path(),
cur_book.path,
data.name + "." + self.settings['old_book_format'].lower())
if df_cover:
datafile_cover = os.path.join(config.get_book_path(),
cur_book.path, "cover.jpg")
if not os.path.exists(os.path.join(config.get_book_path(), cur_book.path)):
os.makedirs(os.path.join(config.get_book_path(), cur_book.path))
df.GetContentFile(datafile)
if df_cover:
df_cover.GetContentFile(datafile_cover)
worker_db.session.close()
else:
# ToDo Include cover in error handling
error_message = _("%(format)s not found on Google Drive: %(fn)s",
format=self.settings['old_book_format'],
fn=data.name + "." + self.settings['old_book_format'].lower())
worker_db.session.close()
return self._handleError(error_message)
filename = self._convert_ebook_format()
if config.config_use_google_drive:
os.remove(self.file_path + '.' + self.settings['old_book_format'].lower())
if df_cover:
os.remove(os.path.join(config.config_calibre_dir, cur_book.path, "cover.jpg"))
if filename:
if config.config_use_google_drive:
# Upload files to gdrive
gdriveutils.updateGdriveCalibreFromLocal()
self._handleSuccess()
if self.ereader_mail:
# if we're sending to E-Reader after converting, create a one-off task and run it immediately
# todo: figure out how to incorporate this into the progress
try:
EmailText = N_(u"%(book)s send to E-Reader", book=escape(self.title))
for email in self.ereader_mail.split(','):
email = strip_whitespaces(email)
worker_thread.add(self.user, TaskEmail(self.settings['subject'],
self.results["path"],
filename,
self.settings,
email,
EmailText,
self.settings['body'],
id=self.book_id,
internal=True)
)
except Exception as ex:
return self._handleError(str(ex))
def _convert_ebook_format(self):
error_message = None
local_db = db.CalibreDB(expire_on_commit=False, init=True)
file_path = self.file_path
book_id = self.book_id
format_old_ext = '.' + self.settings['old_book_format'].lower()
format_new_ext = '.' + self.settings['new_book_format'].lower()
# check to see if destination format already exists - or if book is in database
# if it does - mark the conversion task as complete and return a success
# this will allow to send to E-Reader workflow to continue to work
if os.path.isfile(file_path + format_new_ext) or\
local_db.get_book_format(self.book_id, self.settings['new_book_format']):
log.info("Book id %d already converted to %s", book_id, format_new_ext)
cur_book = local_db.get_book(book_id)
self.title = cur_book.title
self.results['path'] = cur_book.path
self.results['title'] = self.title
new_format = local_db.session.query(db.Data).filter(db.Data.book == book_id)\
.filter(db.Data.format == self.settings['new_book_format'].upper()).one_or_none()
if not new_format:
new_format = db.Data(name=os.path.basename(file_path),
book_format=self.settings['new_book_format'].upper(),
book=book_id, uncompressed_size=os.path.getsize(file_path + format_new_ext))
try:
local_db.session.merge(new_format)
local_db.session.commit()
except SQLAlchemyError as e:
local_db.session.rollback()
log.error("Database error: %s", e)
local_db.session.close()
self._handleError(N_("Oops! Database Error: %(error)s.", error=e))
return
self._handleSuccess()
local_db.session.close()
return os.path.basename(file_path + format_new_ext)
else:
log.info("Book id %d - target format of %s does not exist. Moving forward with convert.",
book_id,
format_new_ext)
if config.config_kepubifypath and format_old_ext == '.epub' and format_new_ext == '.kepub':
check, error_message = self._convert_kepubify(file_path,
format_old_ext,
format_new_ext)
else:
# check if calibre converter-executable is existing
if not os.path.exists(config.config_converterpath):
self._handleError(N_("Calibre ebook-convert %(tool)s not found", tool=config.config_converterpath))
return
has_cover = local_db.get_book(book_id).has_cover
check, error_message = self._convert_calibre(file_path, format_old_ext, format_new_ext, has_cover)
if check == 0:
cur_book = local_db.get_book(book_id)
if os.path.isfile(file_path + format_new_ext):
new_format = local_db.session.query(db.Data).filter(db.Data.book == book_id) \
.filter(db.Data.format == self.settings['new_book_format'].upper()).one_or_none()
if not new_format:
new_format = db.Data(name=cur_book.data[0].name,
book_format=self.settings['new_book_format'].upper(),
book=book_id, uncompressed_size=os.path.getsize(file_path + format_new_ext))
try:
local_db.session.merge(new_format)
local_db.session.commit()
if self.settings['new_book_format'].upper() in ['KEPUB', 'EPUB', 'EPUB3']:
ub_session = init_db_thread()
remove_synced_book(book_id, True, ub_session)
ub_session.close()
except SQLAlchemyError as e:
local_db.session.rollback()
log.error("Database error: %s", e)
local_db.session.close()
self._handleError(error_message)
return
self.results['path'] = cur_book.path
self.title = cur_book.title
self.results['title'] = self.title
if not config.config_use_google_drive:
self._handleSuccess()
return os.path.basename(file_path + format_new_ext)
else:
error_message = N_('%(format)s format not found on disk', format=format_new_ext.upper())
local_db.session.close()
log.info("ebook converter failed with error while converting book")
if not error_message:
error_message = N_('Ebook converter failed with unknown error')
else:
log.error(error_message)
self._handleError(error_message)
return
def _convert_kepubify(self, file_path, format_old_ext, format_new_ext):
if config.config_embed_metadata and config.config_binariesdir:
tmp_dir, temp_file_name = helper.do_calibre_export(self.book_id, format_old_ext[1:])
filename = os.path.join(tmp_dir, temp_file_name + format_old_ext)
temp_file_path = tmp_dir
else:
filename = file_path + format_old_ext
temp_file_path = os.path.dirname(file_path)
quotes = [1, 3]
command = [config.config_kepubifypath, filename, '-o', temp_file_path, '-i']
try:
p = process_open(command, quotes)
except OSError as e:
return 1, N_("Kepubify-converter failed: %(error)s", error=e)
self.progress = 0.01
while True:
nextline = p.stdout.readlines()
nextline = [x.strip('\n') for x in nextline if x != '\n']
for line in nextline:
log.debug(line)
if p.poll() is not None:
break
# process returncode
check = p.returncode
# move file
if check == 0:
converted_file = glob.glob(glob.escape(os.path.splitext(filename)[0]) + "*.kepub.epub")
if len(converted_file) == 1:
copyfile(converted_file[0], (file_path + format_new_ext))
os.unlink(converted_file[0])
else:
return 1, N_("Converted file not found or more than one file in folder %(folder)s",
folder=os.path.dirname(file_path))
return check, None
def _convert_calibre(self, file_path, format_old_ext, format_new_ext, has_cover):
path_tmp_opf = None
try:
# path_tmp_opf = self._embed_metadata()
if config.config_embed_metadata:
quotes = [5]
tmp_dir = get_temp_dir()
calibredb_binarypath = os.path.join(config.config_binariesdir, SUPPORTED_CALIBRE_BINARIES["calibredb"])
my_env = os.environ.copy()
if config.config_calibre_split:
my_env['CALIBRE_OVERRIDE_DATABASE_PATH'] = os.path.join(config.config_calibre_dir, "metadata.db")
library_path = config.config_calibre_split_dir
else:
library_path = config.config_calibre_dir
opf_command = [calibredb_binarypath, 'show_metadata', '--as-opf', str(self.book_id),
'--with-library', library_path]
p = process_open(opf_command, quotes, my_env, newlines=False)
lines = list()
while p.poll() is None:
lines.append(p.stdout.readline())
check = p.returncode
calibre_traceback = p.stderr.readlines()
if check == 0:
path_tmp_opf = os.path.join(tmp_dir, "metadata_" + str(uuid4()) + ".opf")
with open(path_tmp_opf, 'wb') as fd:
fd.write(b''.join(lines))
else:
error_message = ""
for ele in calibre_traceback:
if not ele.startswith('Traceback') and not ele.startswith(' File'):
error_message = N_("Calibre failed with error: %(error)s", error=ele)
return check, error_message
quotes = [1, 2]
quotes_index = 3
command = [config.config_converterpath, (file_path + format_old_ext),
(file_path + format_new_ext)]
if config.config_embed_metadata:
quotes.append(4)
quotes_index = 5
command.extend(['--from-opf', path_tmp_opf])
if has_cover:
quotes.append(6)
command.extend(['--cover', os.path.join(os.path.dirname(file_path), 'cover.jpg')])
quotes_index = 7
if config.config_calibre:
parameters = re.findall(r"(--[\w-]+)(?:(\s(?:(\".+\")|(?:.+?)))(?:\s|$))?",
config.config_calibre, re.IGNORECASE | re.UNICODE)
if parameters:
for param in parameters:
command.append(strip_whitespaces(param[0]))
quotes_index += 1
if param[1] != "":
parsed = strip_whitespaces(param[1]).strip("\"")
command.append(parsed)
quotes.append(quotes_index)
quotes_index += 1
p = process_open(command, quotes, newlines=False)
except OSError as e:
return 1, N_("Ebook-converter failed: %(error)s", error=e)
while p.poll() is None:
nextline = p.stdout.readline()
if isinstance(nextline, bytes):
nextline = nextline.decode('utf-8', errors="ignore").strip('\r\n')
if nextline:
log.debug(nextline)
# parse progress string from calibre-converter
progress = re.search(r"(\d+)%\s.*", nextline)
if progress:
self.progress = int(progress.group(1)) / 100
if config.config_use_google_drive:
self.progress *= 0.9
# process returncode
check = p.returncode
calibre_traceback = p.stderr.readlines()
error_message = ""
for ele in calibre_traceback:
ele = ele.decode('utf-8', errors="ignore").strip('\n')
log.debug(ele)
if not ele.startswith('Traceback') and not ele.startswith(' File'):
error_message = N_("Calibre failed with error: %(error)s", error=ele)
return check, error_message
@property
def name(self):
return N_("Convert")
def __str__(self):
if self.ereader_mail:
return "Convert Book {} and mail it to {}".format(self.book_id, self.ereader_mail)
else:
return "Convert Book {}".format(self.book_id)
@property
def is_cancellable(self):
return False

View File

@ -71,7 +71,7 @@
<a href="{{url_for('web.books_list', data='series', sort_param='stored', book_id=entry.Books.series[0].id )}}">
{{entry.Books.series[0].name}}
</a>
({{entry.Books.series_index|formatseriesindex}})
({{entry.Books.series_index|formatfloat(2)}})
</p>
{% endif %}
{% if entry.Books.ratings.__len__() > 0 %}
@ -122,7 +122,7 @@
<a href="{{url_for('web.books_list', data='series', sort_param='stored', book_id=entry.series[0].id )}}">
{{entry.series[0].name}}
</a>
({{entry.series_index|formatseriesindex}})
({{entry.series_index|formatfloat(2)}})
</p>
{% endif %}
<div class="rating">

View File

@ -108,7 +108,7 @@
</div>
<div class="form-group">
<label for="series_index">{{_('Series ID')}}</label>
<input type="number" step="0.01" min="0" placeholder="1" class="form-control" name="series_index" id="series_index" value="{{book.series_index}}">
<input type="number" step="0.01" min="0" placeholder="1" class="form-control" name="series_index" id="series_index" value="{{book.series_index|formatfloat(2)}}">
</div>
<div class="form-group">
<label for="rating">{{_('Rating')}}</label>

View File

@ -66,7 +66,7 @@
{{ text_table_row('authors', _('Enter Authors'),_('Authors'), true, true) }}
{{ text_table_row('tags', _('Enter Categories'),_('Categories'), false, true) }}
{{ text_table_row('series', _('Enter Series'),_('Series'), false, true) }}
<th data-field="series_index" id="series_index" data-visible="{{visiblility.get('series_index')}}" data-edit-validate="{{ _('This Field is Required') }}" data-sortable="true" {% if current_user.role_edit() %} data-editable-type="number" data-editable-placeholder="1" data-editable-step="0.01" data-editable-min="0" data-editable-url="{{ url_for('edit-book.edit_list_book', param='series_index')}}" data-edit="true" data-editable-title="{{_('Enter Title')}}"{% endif %}>{{_('Series Index')}}</th>
<th data-field="series_index" id="series_index" data-visible="{{visiblility.get('series_index')}}" data-formatter="seriesIndexFormatter" data-edit-validate="{{ _('This Field is Required') }}" data-sortable="true" {% if current_user.role_edit() %} data-editable-type="number" data-editable-placeholder="1" data-editable-step="0.01" data-editable-min="0" data-editable-url="{{ url_for('edit-book.edit_list_book', param='series_index')}}" data-edit="true" data-editable-title="{{_('Enter Title')}}"{% endif %}>{{_('Series Index')}}</th>
{{ text_table_row('languages', _('Enter Languages'),_('Languages'), false, true) }}
<!--th data-field="pubdate" data-type="date" data-visible="{{visiblility.get('pubdate')}}" data-viewformat="dd.mm.yyyy" id="pubdate" data-sortable="true">{{_('Publishing Date')}}</th-->
{{ text_table_row('publishers', _('Enter Publishers'),_('Publishers'), false, true) }}

View File

@ -147,7 +147,7 @@
</div>
{% endif %}
{% if entry.series|length > 0 %}
<p>{{ _("Book %(index)s of %(range)s", index=entry.series_index | formatfloat(2), range=(url_for('web.books_list', data='series', sort_param='stored', book_id=entry.series[0].id)|escapedlink(entry.series[0].name))|safe) }}</p>
<p>{{ _("Book %(index)s of %(range)s", index=entry.series_index|formatfloat(2), range=(url_for('web.books_list', data='series', sort_param='stored', book_id=entry.series[0].id)|escapedlink(entry.series[0].name))|safe) }}</p>
{% endif %}

View File

@ -42,7 +42,7 @@
<a href="{{url_for('web.books_list', data='series', sort_param='stored', book_id=entry.Books.series[0].id )}}">
{{entry.Books.series[0].name}}
</a>
({{entry.Books.series_index|formatseriesindex}})
({{entry.Books.series_index|formatfloat(2)}})
</p>
{% endif %}
{% if entry.Books.ratings.__len__() > 0 %}
@ -132,7 +132,7 @@
{% else %}
<span>{{entry.Books.series[0].name}}</span>
{% endif %}
({{entry.Books.series_index|formatseriesindex}})
({{entry.Books.series_index|formatfloat(2)}})
</p>
{% endif %}
{% if entry.Books.ratings.__len__() > 0 %}

View File

@ -59,7 +59,7 @@
</div>
{% endif %}
{% if entry.series|length > 0 %}
<p>{{_("Book %(index)s of %(range)s", index=entry.series_index | formatfloat(2), range=(url_for('web.books_list', data='series', sort_param='stored', book_id=entry.series[0].id)|escapedlink(entry.series[0].name))|safe)}}</p>
<p>{{_("Book %(index)s of %(range)s", index=entry.series_index|formatfloat(2), range=(url_for('web.books_list', data='series', sort_param='stored', book_id=entry.series[0].id)|escapedlink(entry.series[0].name))|safe)}}</p>
{% endif %}

View File

@ -82,7 +82,7 @@
<a href="{{url_for('web.books_list', data='series', sort_param='stored', book_id=entry.Books.series[0].id )}}">
{{entry.Books.series[0].name}}
</a>
({{entry.Books.series_index|formatseriesindex}})
({{entry.Books.series_index|formatfloat(2)}})
</p>
{% endif %}

View File

@ -70,7 +70,7 @@
<a href="{{url_for('web.books_list', data='series', sort_param='stored', book_id=entry.Books.series[0].id )}}">
{{entry.Books.series[0].name}}
</a>
({{entry.Books.series_index|formatseriesindex}})
({{entry.Books.series_index|formatfloat(2)}})
</p>
{% endif %}
{% if entry.Books.ratings.__len__() > 0 %}

View File

@ -20,7 +20,7 @@
{{entry['Books']['title']}}
{% if entry['Books']['series']|length > 0 %}
<br>
{{entry['Books']['series_index']}} - {{entry['Books']['series'][0].name}}
{{entry['Books']['series_index']|formatfloat(2)}} - {{entry['Books']['series'][0].name}}
{% endif %}
<br>
{% for author in entry['Books']['author'] %}

View File

@ -45,7 +45,7 @@
<a href="{{url_for('web.books_list', data='series', sort_param='stored', book_id=entry.Books.series[0].id )}}">
{{entry.Books.series[0].name}}
</a>
({{entry.Books.series_index}})
({{entry.Books.series_index|formatfloat(2)}})
</p>
{% endif %}
</div>

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2020-06-09 21:11+0100\n"
"Last-Translator: Lukas Heroudek <lukas.heroudek@gmail.com>\n"
"Language: cs_CZ\n"
@ -44,9 +44,9 @@ msgstr "Neznámý příkaz"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Kniha byla úspěšně zařazena do fronty pro odeslání na %(eReadermail)s"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Neznámý"
@ -67,7 +67,7 @@ msgstr "Konfigurace uživatelského rozhraní"
msgid "Edit Users"
msgstr "Uživatel admin"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Vše"
@ -295,7 +295,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -565,96 +565,96 @@ msgstr "Kniha byla úspěšně zařazena do fronty pro převod do %(book_format)
msgid "There was an error converting this book: %(res)s"
msgstr "Při převodu této knihy došlo k chybě: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Jejda! Vybraná kniha není k dispozici. Soubor neexistuje nebo není přístupný"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr ""
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, fuzzy, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s není platným jazykem"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadata úspěšně aktualizována"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Nahraná kniha pravděpodobně existuje v knihovně, zvažte prosím změnu před nahráním nové: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Soubor s příponou '%(ext)s' nelze odeslat na tento server"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Soubor s příponou '%(ext)s' nelze odeslat na tento server"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Soubor, který má být odeslán musí mít příponu"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "Soubor %(filename)s nemohl být uložen do dočasného adresáře"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Nepodařilo se přesunout soubor obalu %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Formát knihy úspěšně smazán"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Kniha úspěšně smazána"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "upravit metadata"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr ""
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Nepodařilo se vytvořit cestu %(path)s (oprávnění odepřeno)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Uložení souboru %(file)s se nezdařilo."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Formát souboru %(ext)s přidán do %(book)s"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2024-08-17 13:49+0200\n"
"Last-Translator: Ozzie Isaacs\n"
"Language: de\n"
@ -42,9 +42,9 @@ msgstr "Unbekannter Befehl"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Bücher wurden für Metadaten Backup eingereiht, für das Ergebnis bitte Aufgaben überprüfen"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Unbekannt"
@ -64,7 +64,7 @@ msgstr "Benutzeroberflächenkonfiguration"
msgid "Edit Users"
msgstr "Benutzer bearbeiten"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Alle"
@ -287,7 +287,7 @@ msgstr "G-Mail Konto verifiziert."
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -551,95 +551,95 @@ msgstr "Buch wurde erfolgreich für die Konvertierung nach %(book_format)s einge
msgid "There was an error converting this book: %(res)s"
msgstr "Es trat ein Fehler beim Konvertieren des Buches auf: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Öffnen des Buchs fehlgeschlagen. Datei existiert nicht oder ist nicht zugänglich"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr "Benutzer hat keine Berechtigung Cover hochzuladen"
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "IDs unterscheiden nicht Groß-Kleinschreibung, alte ID wird überschrieben"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "'%(langname)s' ist keine gültige Sprache"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadaten wurden erfolgreich aktualisiert"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr "Fehler beim editieren des Buches: {}"
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Das hochgeladene Buch existiert evtl. schon in der Bibliothek: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Dateityp kann nicht auf diesen Server hochgeladen werden"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Dateiendung '%(ext)s' kann nicht auf diesen Server hochgeladen werden"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Dateien müssen eine Erweiterung haben, um hochgeladen zu werden"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "Die Datei %(filename)s konnte nicht im temporären Ordner gespeichert werden"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Fehler beim Verschieben der Cover Datei %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Buch Format erfolgreich gelöscht"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Buch erfolgreich gelöscht"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "Keine Erlaubnis zum Bücher löschen"
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "Metadaten editieren"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "Serien index %(seriesindex)s ist keine gültige Zahl, Eintrag wird ignoriert"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr "Benutzer hat kein Recht zusätzliche Dateiformate hochzuladen"
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Fehler beim Erzeugen des Pfads %(path)s (Zugriff verweigert)"
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Fehler beim Speichern der Datei %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Dateiformat %(ext)s zu %(book)s hinzugefügt"

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Depountis Georgios\n"
"Language: el\n"
@ -44,9 +44,9 @@ msgstr "Άγνωστη εντολή"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Το βιβλίο έχει επιτυχώς μπει σε σειρά για αποστολή στο %(eReadermail)s"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "ʼΑγνωστο"
@ -67,7 +67,7 @@ msgstr "UI Διαμόρφωση"
msgid "Edit Users"
msgstr "Χρήστης Διαχειριστής"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Όλα"
@ -295,7 +295,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -565,96 +565,96 @@ msgstr "Το βιβλίο είναι σε σειρά επιτυχώς για μ
msgid "There was an error converting this book: %(res)s"
msgstr "Υπήρξε ένα σφάλμα στη μετατροπή αυτού του βιβλίου: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Oυπς! Ο επιλεγμένος τίτλος βιβλίου δεν είναι διαθέσιμος. Το αρχείο δεν υπάρχει ή δεν είναι προσβάσιμο"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "Τα αναγνωριστικά δεν έχουν Διάκριση Πεζών-Κεφαλαίων Γραμμάτων, Αντικατάσταση Παλιού Αναγνωριστικού"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, fuzzy, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s δεν είναι μια έγκυρη γλώσσα"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Τα μεταδεδομένα ενημερώθηκαν επιτυχώς"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Το βιβλίο που ανέβηκε πιθανόν να υπάρχει στη βιβλιοθήκη, σκέψου να το αλλάξεις πριν ανεβάσεις νέο: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Η επέκταση αρχείου '%(ext)s' δεν επιτρέπεται να ανέβει σε αυτό το διακομιστή"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Η επέκταση αρχείου '%(ext)s' δεν επιτρέπεται να ανέβει σε αυτό το διακομιστή"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Το αρχείο προς ανέβασμα πρέπει να έχει μια επέκταση"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "Το αρχείο %(filename)s δεν μπόρεσε να αποθηκευτεί σε temp dir"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Αποτυχία Μετακίνησης Αρχείου Φόντου %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Η μορφή βιβλίου Διαγράφηκε Επιτυχώς"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Το Βιβλίο Διαγράφηκε Επιτυχώς"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "επεξεργασία μεταδεδομένων"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr ""
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Αποτυχεία δημιουργίας πορείας %(path)s (Η άδεια απορρήφθηκε)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Αποτυχία αποθήκευσης αρχείου %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Μορφή αρχείου %(ext)s προστέθηκε σε %(book)s"

View File

@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2020-05-25 17:22+0200\n"
"Last-Translator: minakmostoles <xxx@xxx.com>\n"
"Language: es\n"
@ -48,9 +48,9 @@ msgstr "Comando desconocido"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Puesto en cola un correo electrónico de prueba enviado a %(email)s, por favor, comprueba el resultado en Tareas"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Desconocido"
@ -71,7 +71,7 @@ msgstr "Configuración de la interfaz de usuario"
msgid "Edit Users"
msgstr "Editar usuarios"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Todo"
@ -299,7 +299,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -569,96 +569,96 @@ msgstr "Libro puesto a la cola para su conversión a %(book_format)s"
msgid "There was an error converting this book: %(res)s"
msgstr "Ocurrió un error al convertir este libro: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "oh, oh, el libro seleccionado no está disponible. El archivo no existe o no es accesible"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "Los identificadores no distinguen entre mayúsculas y minúsculas, sobrescribiendo el identificador antiguo"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, fuzzy, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s no es un idioma válido"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadatos actualizados con éxito"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "El libro cargado probablemente existe en la biblioteca, considera cambiarlo antes de subirlo de nuevo: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "No se permite subir archivos con la extensión '%(ext)s' a este servidor"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "No se permite subir archivos con la extensión '%(ext)s' a este servidor"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "El archivo a subir debe tener una extensión"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "El archivo %(filename)s no pudo salvarse en el directorio temporal (Temp Dir)"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Fallo al mover el archivo de cubierta %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Formato de libro eliminado con éxito"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Libro eliminado con éxito"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "editar metadatos"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex) no es un número válido, saltando"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Fallo al crear la ruta %(path)s (permiso denegado)"
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Fallo al guardar el archivo %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Archivo con formato %(ext)s añadido a %(book)s"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2020-01-12 13:56+0100\n"
"Last-Translator: Samuli Valavuo <svalavuo@gmail.com>\n"
"Language: fi\n"
@ -45,9 +45,9 @@ msgstr ""
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Kirja lisätty onnistuneeksi lähetettäväksi osoitteeseen %(eReadermail)s"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Tuntematon"
@ -68,7 +68,7 @@ msgstr "Käyttöliittymän asetukset"
msgid "Edit Users"
msgstr "Pääkäyttäjä"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Kaikki"
@ -295,7 +295,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -563,96 +563,96 @@ msgstr "Kirja lisätty muutosjonoon muotoon %(book_format)s"
msgid "There was an error converting this book: %(res)s"
msgstr "Kirjan muunnoksessa tapahtui virhe: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Virhe eKirjan avaamisessa. Tiedostoa ei ole tai se ei ole saatavilla:"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr ""
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, fuzzy, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s ei ole kelvollinen kieli"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadata päivitetty onnistuneesti"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr ""
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Tiedostopääte '%(ext)s' ei ole sallittujen palvelimelle ladattavien listalla"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Tiedostopääte '%(ext)s' ei ole sallittujen palvelimelle ladattavien listalla"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Ladattavalla tiedostolla on oltava tiedostopääte"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr ""
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr ""
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr ""
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr ""
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "muokkaa metadataa"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr ""
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Polun %(path)s luonti epäonnistui (Ei oikeutta)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Tiedoston %(file)s tallennus epäonnistui."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Tiedostoformaatti %(ext)s lisätty %(book)s"

View File

@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2020-06-07 06:47+0200\n"
"Last-Translator: <thovi98@gmail.com>\n"
"Language: fr\n"
@ -60,9 +60,9 @@ msgstr "Commande inconnue"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Teste les courriels en file dattente pour lenvoi à %(email)s, veuillez vérifier le résultat des tâches"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Inconnu"
@ -83,7 +83,7 @@ msgstr "Configuration de linterface utilisateur"
msgid "Edit Users"
msgstr "Éditer les utilisateurs"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Tout"
@ -311,7 +311,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -581,96 +581,96 @@ msgstr "Le livre a été mis avec succès en file de traitement pour conversion
msgid "There was an error converting this book: %(res)s"
msgstr "Une erreur est survenue au cours de la conversion du livre : %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Erreur d'ouverture du livre numérique. Le fichier n'existe pas ou n'est pas accessible"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "Les identificateurs ne sont pas sensibles à la casse, écrasant lancien identificateur"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, fuzzy, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s n'est pas une langue valide"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Les métadonnées ont bien été mises à jour"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Le fichier téléchargé existe probablement dans la librairie, veuillez le modifier avant de le télécharger de nouveau: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Lextension de fichier '%(ext)s' nest pas autorisée pour être déposée sur ce serveur"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Lextension de fichier '%(ext)s' nest pas autorisée pour être déposée sur ce serveur"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Pour être déposé le fichier doit avoir une extension"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "Le fichier %(filename)s ne peut pas être sauvegardé dans le répertoire temporaire"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Impossible de déplacer le fichier de couverture %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Le format du livre a été supprimé avec succès"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Le livre a été supprimé avec succès"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "Vous navez par les permissions pour supprimer les livres"
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "modifier les métadonnées"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex)s nest pas un nombre valide, ignoré"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Impossible de créer le chemin %(path)s (Permission refusée)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Échec de la sauvegarde du fichier %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Le format de fichier %(ext)s a été ajouté à %(book)s"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2022-08-11 16:46+0200\n"
"Last-Translator: pollitor <pollitor@gmx.com>\n"
"Language: gl\n"
@ -43,9 +43,9 @@ msgstr "Orde descoñecida"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Posto en cola un correo electrónico de proba enviado a %(email)s, por favor, comproba o resultado nas Tarefas"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Descoñecido"
@ -65,7 +65,7 @@ msgstr "Configuración da Interface de Usuario"
msgid "Edit Users"
msgstr "Editar Usuarios"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Todo"
@ -288,7 +288,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -553,96 +553,96 @@ msgstr "Libro posto na cola para a súa conversión a %(book_format)s"
msgid "There was an error converting this book: %(res)s"
msgstr "Houbo un erro ao convertir este libro: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "oh, oh, o libro seleccionado non está disponible. O arquivo non existe ou non está accesible"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr "O usuario non ten permisos para subir a cuberta"
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "Os identificadores non distinguen entre maiúsculas e minúsculas, sobrescribindo o identificador antigo"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s non é unha lingua válida"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadatos actualizados con éxito"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr "Erro editando libro: {}"
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "O libro cargado probablemente existe na biblioteca, considera cambialo antes de subilo outra vez: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Non se permite subir arquivos coa extensión '%(ext)s' a este servidor"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Non se permite subir arquivos coa extensión '%(ext)s' a este servidor"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "O arquivo que se vai cargar debe ter unha extensión"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "El archivo %(filename)s non puido gravarse no directorio temporal (Temp Dir)"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Fallo ao mover o arquivo de cuberta %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Formato de libro eliminado con éxito"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Libro eliminado con éxito"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "Vostede non ten permisos para borrar libros"
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "editar metadatos"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex)s non é un número válido, saltando"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr "O usuario non ten permisos para cargar formatos de ficheiro adicionais"
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Fallo ao crear a ruta %(path)s (permiso denegado)"
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Fallo ao gardar o arquivo %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Arquivo con formato %(ext)s engadido a %(book)s"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2019-04-06 23:36+0200\n"
"Last-Translator: \n"
"Language: hu\n"
@ -44,9 +44,9 @@ msgstr ""
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr ""
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Ismeretlen"
@ -67,7 +67,7 @@ msgstr "Felhasználói felület beállításai"
msgid "Edit Users"
msgstr "Rendszergazda felhasználó"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr ""
@ -294,7 +294,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -562,96 +562,96 @@ msgstr "A könyv sikeresen átalakításra lett jelölve a következő formátum
msgid "There was an error converting this book: %(res)s"
msgstr "Hiba történt a könyv átalakításakor: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Hiba történt az e-könyv megnyitásakor. A fájl nem létezik vagy nem érhető el:"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr ""
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, fuzzy, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "A(z) %(langname)s nem érvényes nyelv"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "A metaadatok sikeresen frissültek"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr ""
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "A(z) \"%(ext)s\" kiterjesztésű fájlok feltöltése nincs engedélyezve ezen a szerveren."
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "A(z) \"%(ext)s\" kiterjesztésű fájlok feltöltése nincs engedélyezve ezen a szerveren."
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "A feltöltendő fájlnak kiterjesztéssel kell rendelkeznie!"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr ""
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr ""
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr ""
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr ""
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "Metaadatok szerkesztése"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr ""
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Nem sikerült létrehozni az elérési utat (engedély megtagadva): %(path)s."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Nem sikerült elmenteni a %(file)s fájlt."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "A(z) %(ext)s fájlformátum hozzáadva a könyvhez: %(book)s."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2023-01-21 10:00+0700\n"
"Last-Translator: Arief Hidayat<arihid95@gmail.com>\n"
"Language: id\n"
@ -45,9 +45,9 @@ msgstr "Perintah tidak diketahui"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Uji email diantrean untuk dikirim ke %(email), harap periksa Tasks untuk hasilnya"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Tidak diketahui"
@ -67,7 +67,7 @@ msgstr "Pengaturan Antarmuka"
msgid "Edit Users"
msgstr "Edit pengguna"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Semua"
@ -290,7 +290,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -555,96 +555,96 @@ msgstr "Buku berhasil diantrekan untuk dikonversi ke %(book_format)s"
msgid "There was an error converting this book: %(res)s"
msgstr "Terjadi kesalahan saat mengonversi buku ini: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Ups! Judul buku yang dipilih tidak tersedia. Berkas tidak ada atau tidak dapat diakses"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr "Pengguna tidak berhak mengganti sampul"
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "IDは大文字小文字を区別しません。元のIDを上書きします"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "'%(langname)s' bukan bahasa yang valid"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadata berhasil diperbarui"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr "Kesalahan pengeditan buku: {}"
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Buku yang diunggah mungkin ada di perpustakaan, pertimbangkan untuk mengubahnya sebelum mengunggah yang baru: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Ekstensi berkas '%(ext)s' tidak diizinkan untuk diunggah ke server ini"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Ekstensi berkas '%(ext)s' tidak diizinkan untuk diunggah ke server ini"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Berkas yang akan diunggah harus memiliki ekstensi"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "Berkas %(filename)s tidak dapat disimpan ke direktori temp"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Gagal Memindahkan Berkas Sampul %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Format Buku Berhasil Dihapus"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Buku Berhasil Dihapus"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "Anda tidak memiliki izin untuk menghapus buku"
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "edit metadata"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex)s dilewati karena bukan angka yang valid"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr "Pengguna tidak memiliki izin untuk mengunggah format berkas tambahan"
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Gagal membuat jalur %(path)s (Izin ditolak)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Gagal menyimpan berkas %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Format berkas %(ext)s ditambahkan ke %(book)s"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2024-08-24 05:32+0200\n"
"Last-Translator: Massimo Pissarello <mapi68@gmail.com>\n"
"Language: it\n"
@ -42,9 +42,9 @@ msgstr "Comando sconosciuto"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Tutto OK! Libri in coda per il backup dei metadati, controlla le attività per il risultato"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Sconosciuto"
@ -64,7 +64,7 @@ msgstr "Configurazione dell'interfaccia utente"
msgid "Edit Users"
msgstr "Modifica utenti"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Tutti"
@ -287,7 +287,7 @@ msgstr "Tutto OK! Account Gmail verificato."
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -551,95 +551,95 @@ msgstr "Libro accodato correttamente per essere convertito in %(book_format)s"
msgid "There was an error converting this book: %(res)s"
msgstr "Si è verificato un errore durante la conversione del libro: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Il libro selezionato non è disponibile. Il file non esiste o non è accessibile"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr "L'utente non ha i permessi per caricare le copertine"
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "Gli identificatori non fanno distinzione tra maiuscole e minuscole e sovrascrivono il vecchio identificatore"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s non è una lingua valida"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadati aggiornati correttamente"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr "Errore nella modifica del libro: {}"
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Probabilmente il libro caricato esiste già nella biblioteca, cambialo prima di caricarlo di nuovo:"
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Non è consentito caricare questo tipo di file su questo server"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Non è consentito caricare l'estensione del file '%(ext)s' su questo server"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Il file da caricare deve avere un'estensione"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "Il file %(filename)s non può essere salvato nella cartella temporanea"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Impossibile spostare il file della copertina %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Il formato del libro è stato eliminato correttamente"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Il libro è stato eliminato correttamente"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "Ti mancano le autorizzazioni per eliminare i libri"
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "modifica i metadati"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "Indice serie: %(seriesindex)s non è un numero valido, lo salto"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr "L'utente non ha i permessi per caricare formati di file aggiuntivi"
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Impossibile creare il percorso %(path)s (autorizzazione negata)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Impossibile archiviare il file %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Formato file %(ext)s aggiunto a %(book)s"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2018-02-07 02:20-0500\n"
"Last-Translator: subdiox <subdiox@gmail.com>\n"
"Language: ja\n"
@ -45,9 +45,9 @@ msgstr "不明なコマンド"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "%(email)s へのテストメール送信がキューに追加されました。結果を見るにはタスクを確認してください"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "不明"
@ -67,7 +67,7 @@ msgstr "UI設定"
msgid "Edit Users"
msgstr "ユーザーを編集"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "全て"
@ -290,7 +290,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -555,96 +555,96 @@ msgstr "本の %(book_format)s への変換がキューに追加されました"
msgid "There was an error converting this book: %(res)s"
msgstr "この本の変換中にエラーが発生しました: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "選択した本は利用できません。ファイルが存在しないか、アクセスできません"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr "ユーザーは表紙をアップロードする権限がありません"
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "IDは大文字小文字を区別しません。元のIDを上書きします"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "'%(langname)s' は有効な言語ではありません"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "メタデータを更新しました"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr "本編集中のエラー: {}"
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "アップロードした本はすでにライブラリに存在します。新しくアップロードする前に変更を加えてください: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "ファイル拡張子 '%(ext)s' をこのサーバーにアップロードすることは許可されていません"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "ファイル拡張子 '%(ext)s' をこのサーバーにアップロードすることは許可されていません"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "アップロードするファイルには拡張子が必要です"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "ファイル %(filename)s は一時フォルダに保存できませんでした"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "表紙ファイル %(file)s の移動に失敗しました: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "本の形式を削除しました"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "本を削除しました"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "本を削除する権限がありません"
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "メタデータを編集"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex)s は有効な数字ではありません。スキップします"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr "新たなファイル形式をアップロードする権限がありません"
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "%(path)s の作成に失敗しました (Permission denied)。"
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "ファイル %(file)s を保存できません。"
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "ファイル形式 %(ext)s が %(book)s に追加されました"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2018-08-27 17:06+0700\n"
"Last-Translator: \n"
"Language: km_KH\n"
@ -46,9 +46,9 @@ msgstr ""
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "សៀវភៅបានចូលជួរសម្រាប់ផ្ញើទៅ %(eReadermail)s ដោយជោគជ័យ"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "មិនដឹង"
@ -69,7 +69,7 @@ msgstr "ការកំណត់ផ្ទាំងប្រើប្រាស់
msgid "Edit Users"
msgstr "អ្នកប្រើប្រាស់រដ្ឋបាល"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr ""
@ -296,7 +296,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -563,96 +563,96 @@ msgstr ""
msgid "There was an error converting this book: %(res)s"
msgstr ""
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr ""
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr ""
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr ""
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr ""
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr ""
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "ឯកសារប្រភេទ '%(ext)s' មិនត្រូវបានអនុញ្ញាតឲអាប់ឡូដទៅម៉ាស៊ីន server នេះទេ"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "ឯកសារប្រភេទ '%(ext)s' មិនត្រូវបានអនុញ្ញាតឲអាប់ឡូដទៅម៉ាស៊ីន server នេះទេ"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "ឯកសារដែលត្រូវអាប់ឡូដត្រូវមានកន្ទុយឯកសារ"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr ""
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr ""
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr ""
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr ""
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "កែប្រែទិន្នន័យមេតា"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr ""
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "មិនអាចបង្កើតទីតាំង %(path)s (ពុំមានសិទ្ធិ)។"
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "មិនអាចរក្សាទុកឯកសារ %(file)s ។"
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "ឯកសារទម្រង់ %(ext)s ត្រូវបានបន្ថែមទៅ %(book)s"

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2022-01-10 11:30+0900\n"
"Last-Translator: 내맘대로의 EPUBGUIDE.NET <byword77@gmail.com>\n"
"Language: ko\n"
@ -44,9 +44,9 @@ msgstr "알 수 없는 명령"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "%(email)s에 테스트를 위한 이메일을 보냄. 결과 확인 필요"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "알 수 없음"
@ -66,7 +66,7 @@ msgstr "UI 설정"
msgid "Edit Users"
msgstr "사용자 관리"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "모두"
@ -289,7 +289,7 @@ msgstr "Gmail 계정 인증에 성공하였습니다."
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -554,96 +554,96 @@ msgstr "책이 %(book_format)s(으)로 변환하기 위해 대기 중입니다"
msgid "There was an error converting this book: %(res)s"
msgstr "이 책을 변환하는 동안 오류가 발생했습니다: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "선택한 책 제목을 사용할 수 없습니다. 파일이 존재하지 않거나 액세스할 수 없습니다"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr "표지를 업로드 할 수 있는 권한이 없는 사용자입니다."
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "식별자는 대소문자를 구분하지 않으며 이전 식별자를 덮어씁니다"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "'%(langname)s'은(는) 유효한 언어가 아닙니다"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "메타데이터가 성공적으로 업데이트되었습니다"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr "책 편집 중 오류 발생: {}"
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "업로드한 책이 라이브러리에 있을 수 있음. 새로 업로드하기 전에 확인 필요: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "파일 확장자 '%(ext)s'은(는) 이 서버에 업로드할 수 없습니다"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "파일 확장자 '%(ext)s'은(는) 이 서버에 업로드할 수 없습니다"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "업로드할 파일에는 확장자가 있어야 합니다"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "파일 %(filename)s을(를) 임시 디렉토리에 저장할 수 없습니다"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "표지 파일%(file)s를 이동하지 못했습니다.:%(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "책 형식이 성공적으로 삭제되었습니다"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "책이 성공적으로 삭제되었습니다"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "책을 삭제할 수 있는 권한이 없습니다."
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "메타데이터 편집"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex)s은(는) 유효한 숫자가 아닙니다. 건너뜁니다"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr "추가 파일 유형을 업로드 할 권한이 없는 사용자입니다."
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "%(path)s 경로를 생성하지 못했습니다(권한이 없음)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "%(file)s 파일을 저장하지 못했습니다."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "파일 형식 %(ext)s이(가) %(book)s에 추가되었습니다"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web (GPLV3)\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2023-12-20 22:00+0100\n"
"Last-Translator: Michiel Cornelissen <michiel.cornelissen+gitbhun at proton.me>\n"
"Language: nl\n"
@ -46,9 +46,9 @@ msgstr "Onbekende opdracht"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Test E-Mail wordt verzonden naar %(email)s, controleer de taken voor het resultaat"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Onbekend"
@ -69,7 +69,7 @@ msgstr "Uiterlijk aanpassen"
msgid "Edit Users"
msgstr "Systeembeheerder"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Alles"
@ -296,7 +296,7 @@ msgstr "Gelukt! Gmail account geverifieerd."
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -566,96 +566,96 @@ msgstr "Het boek is in de wachtrij geplaatst voor conversie naar %(book_format)s
msgid "There was an error converting this book: %(res)s"
msgstr "Er is een fout opgetreden bij het converteren van dit boek: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Oeps! Geselecteerd boek is niet beschikbaar. Bestand bestaat niet of is niet toegankelijk"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr "Gebruiker mist rechten om de omslag te uploaden"
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "Identificatoren zijn niet hoofdlettergevoelig, overschrijf huidige identificatoren"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, fuzzy, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s is geen geldige taal"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "De metagegevens zijn bijgewerkt"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr "Fout tijdens bijwerken van boek: {}"
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Geüpload boek staat mogelijk al in de bibliotheek, controleer alvorens door te gaan: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "De bestandsextensie '%(ext)s' is niet toegestaan op deze server"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "De bestandsextensie '%(ext)s' is niet toegestaan op deze server"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Het te uploaden bestand moet voorzien zijn van een extensie"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "Bestand %(filename)s kon niet opgeslagen worden in de tijdelijke map"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Omslag %(file)s niet verplaatst: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Het boekformaat is verwijderd"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Het boek is verwijderd"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "U mist rechten om boeken te verwijderen"
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "metagegevens bewerken"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex)s is geen geldig nummer, sla het over"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr "Gebruiker mist rechten om extra bestandsformaten te uploaden"
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Kan de locatie '%(path)s' niet aanmaken (niet gemachtigd)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Kan %(file)s niet opslaan."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Bestandsformaat %(ext)s toegevoegd aan %(book)s"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2023-01-06 11:00+0000\n"
"Last-Translator: Vegard Fladby <vegard.fladby@gmail.com>\n"
"Language: no\n"
@ -45,9 +45,9 @@ msgstr "Ukjent kommando"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Test e-post i kø for sending til %(email)s, sjekk Oppgaver for resultat"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Ukjent"
@ -67,7 +67,7 @@ msgstr "UI-konfigurasjon"
msgid "Edit Users"
msgstr "Rediger brukere"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Alle"
@ -291,7 +291,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, fuzzy, python-format
@ -561,97 +561,97 @@ msgstr "Boken ble satt i kø for konvertering til %(book_format)s"
msgid "There was an error converting this book: %(res)s"
msgstr "Det oppsto en feil ved konvertering av denne boken: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
#, fuzzy
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Oops! Den valgte boktittelen er utilgjengelig. Filen eksisterer ikke eller er ikke tilgjengelig"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr "Brukeren har ingen rettigheter til å laste opp cover"
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "Identifikatorer skiller ikke mellom store og små bokstaver, overskriver gammel identifikator"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "'%(langname)s' er ikke et gyldig språk"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadata ble oppdatert"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr "Feil ved redigering av bok: {}"
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Opplastet bok finnes sannsynligvis i biblioteket, vurder å endre før du laster opp ny: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Filtypen «%(ext)s» er ikke tillatt å lastes opp til denne serveren"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Filtypen «%(ext)s» er ikke tillatt å lastes opp til denne serveren"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Filen som skal lastes opp må ha en utvidelse"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "Filen %(filename)s kunne ikke lagres i midlertidig dir"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Kunne ikke flytte omslagsfil %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Bokformatet er slettet"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Boken ble slettet"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "Du mangler tillatelser til å slette bøker"
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "redigere metadata"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex)s er ikke et gyldig tall, hopper over"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr "Brukeren har ingen rettigheter til å laste opp flere filformater"
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Kunne ikke opprette banen %(path)s (Tillatelse nektet)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Kunne ikke lagre filen %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Filformat %(ext)s lagt til %(book)s"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre Web - polski (POT: 2021-06-12 08:52)\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2021-06-12 15:35+0200\n"
"Last-Translator: Radosław Kierznowski <radek.kierznowski@outlook.com>\n"
"Language: pl\n"
@ -47,9 +47,9 @@ msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Testowy e-mail czeka w kolejce do wysłania do %(email)s, sprawdź zadania, aby uzyskać wynik"
# ???
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Nieznany"
@ -70,7 +70,7 @@ msgid "Edit Users"
msgstr "Edytuj użytkowników"
# ???
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Wszystko"
@ -296,7 +296,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -567,96 +567,96 @@ msgstr "Książka została pomyślnie umieszczona w zadaniach do konwersji %(boo
msgid "There was an error converting this book: %(res)s"
msgstr "Podczas konwersji książki wystąpił błąd: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Błąd otwierania e-booka. Plik nie istnieje lub jest niedostępny"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "W identyfikatorach nie jest rozróżniana wielkość liter, nadpisywanie starego identyfikatora"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, fuzzy, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s nie jest prawidłowym językiem"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadane zostały pomyślnie zaktualizowane"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Wysłana książka prawdopodobnie istnieje w bibliotece, rozważ zmianę przed przesłaniem nowej: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Rozszerzenie pliku '%(ext)s' nie jest dozwolone do wysłania na ten serwer"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Rozszerzenie pliku '%(ext)s' nie jest dozwolone do wysłania na ten serwer"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Plik do wysłania musi mieć rozszerzenie"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "Nie można zapisać pliku %(filename)s w katalogu tymczasowym"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Nie udało się przenieść pliku okładki %(file)s:%(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Plik książki w wybranym formacie został usunięty"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Książka została usunięta"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "edytuj metadane"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex)s nie jest poprawną liczbą, pomijanie"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Nie udało się utworzyć łącza %(path)s (Odmowa dostępu)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Nie można zapisać pliku %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Format pliku %(ext)s dodany do %(book)s"

View File

@ -4,7 +4,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2023-07-25 11:30+0100\n"
"Last-Translator: horus68 <https://github.com/horus68>\n"
"Language: pt\n"
@ -42,9 +42,9 @@ msgstr "Comando desconhecido"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Sucesso! Livros enviados para lista de espera para cópia de segurança de metadados. Por favor, verifique o resultado em Tarefas"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Desconhecido"
@ -64,7 +64,7 @@ msgstr "Configuração de IU"
msgid "Edit Users"
msgstr "Editar utilizadores"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Tudo"
@ -287,7 +287,7 @@ msgstr "Sucesso! Conta Gmail verificada"
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -552,96 +552,96 @@ msgstr "Livro enviado com sucesso para lista de espera de conversão para %(book
msgid "There was an error converting this book: %(res)s"
msgstr "Ocorreu um erro ao converter este livro: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Oops! O Livro selecionado não está disponível. O ficheiro não existe ou não está acessível"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr "Utilizador não tem permissão para carregar capas"
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "Os identificadores não diferenciam maiúsculas de minúsculas, substituindo o identificador antigo"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s não é um idioma válido"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadados atualizados com sucesso"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr "Erro ao editar o livro: {}"
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "O livro carregado provavelmente existe na biblioteca, considere alterar antes de carregar novo: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "A extensão de ficheiro '%(ext)s' não pode ser enviada para este servidor"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "A extensão de ficheiro '%(ext)s' não pode ser enviada para este servidor"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "O ficheiro a ser carregado deve ter uma extensão"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "O ficheiro %(filename)s não foi possível ser guardado na pasta temporária"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Falha ao mover ficheiro de capa %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Formato de livro eliminado com sucesso"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Livro eliminado com sucesso"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "Não tem permissões para apagar livros"
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "editar metadados"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex)s não é um número válido, ignorando"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr "Utilizador não tem direitos para carregar formatos de ficheiro adicionais"
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Falha ao criar o caminho %(path)s (Permissão negada)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Falha ao armazenar o ficheiro %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Formato de ficheiro %(ext)s adicionado a %(book)s"

View File

@ -4,7 +4,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: br\n"
@ -42,9 +42,9 @@ msgstr "Comando desconhecido"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "E-mail de teste enfileirado para envio para %(email)s, verifique o resultado em Tarefas"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Desconhecido"
@ -64,7 +64,7 @@ msgstr "Configuração de UI"
msgid "Edit Users"
msgstr "Editar Usuários"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Todos"
@ -287,7 +287,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -552,96 +552,96 @@ msgstr "Livro enfileirado com sucesso para conversão em %(book_format)s"
msgid "There was an error converting this book: %(res)s"
msgstr "Ocorreu um erro ao converter este livro: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Oops! O Livro selecionado não está disponível. O arquivo não existe ou não é acessível"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr "Usuário não tem permissão para fazer upload da capa"
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "Os identificadores não diferenciam maiúsculas de minúsculas, substituindo o identificador antigo"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s não é um idioma válido"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadados atualizados com sucesso"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr "Erro ao editar o livro: {}"
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "O livro carregado provavelmente existe na biblioteca, considere alterar antes de carregar novo: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "A extensão de arquivo '%(ext)s' não pode ser enviada para este servidor"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "A extensão de arquivo '%(ext)s' não pode ser enviada para este servidor"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "O arquivo a ser carregado deve ter uma extensão"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "O arquivo %(filename)s não pôde ser salvo no diretório temporário"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Falha ao mover arquivo de capa %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Formato do Livro Apagado com Sucesso"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Livro Apagado com Sucesso"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "Você não tem permissão para apagar livros"
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "editar metadados"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex)s não é um número válido, ignorando"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr "Usuário não tem direitos para fazer upload de formatos de arquivo adicionais"
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Falha ao criar o caminho %(path)s (Permission denied)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Falha ao armazenar o arquivo %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Formato de arquivo %(ext)s adicionado a %(book)s"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2020-04-29 01:20+0400\n"
"Last-Translator: ZIZA\n"
"Language: ru\n"
@ -46,9 +46,9 @@ msgstr "Неизвестная команда"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Книга успешно поставлена в очередь для отправки на %(eReadermail)s"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Неизвестно"
@ -69,7 +69,7 @@ msgstr "Настройка интерфейса"
msgid "Edit Users"
msgstr "Управление сервером"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Все"
@ -297,7 +297,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -567,96 +567,96 @@ msgstr "Книга успешно поставлена в очередь для
msgid "There was an error converting this book: %(res)s"
msgstr "Произошла ошибка при конвертирования этой книги: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Невозможно открыть книгу. Файл не существует или недоступен"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr ""
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, fuzzy, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s не допустимый язык"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Метаданные обновлены"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Загруженная книга, вероятно, существует в библиотеке, перед тем как загрузить новую, рассмотрите возможность изменения: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Запрещена загрузка файлов с расширением '%(ext)s'"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Запрещена загрузка файлов с расширением '%(ext)s'"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Загружаемый файл должен иметь расширение"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "Файл %(filename)s не удалось сохранить во временную папку"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr ""
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr ""
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr ""
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "изменить метаданные"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr ""
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Ошибка при создании пути %(path)s (Доступ запрещён)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Не удалось сохранить файл %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Формат файла %(ext)s добавлен в %(book)s"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2023-11-01 06:12+0100\n"
"Last-Translator: Branislav Hanáček <brango@brango.sk>\n"
"Language: sk_SK\n"
@ -42,9 +42,9 @@ msgstr "Neznámy príkaz"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Úspech! Knihy boli zaradená do zálohovania metadát, skontrolujte si Úlohy na kontrolu"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Neznámy"
@ -64,7 +64,7 @@ msgstr "Konfigurácia používateľského rozhrania"
msgid "Edit Users"
msgstr "Upraviť používateľov"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Všetko"
@ -287,7 +287,7 @@ msgstr "Úspech! Gmail konto bolo verifikované."
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -551,96 +551,96 @@ msgstr "Kniha bola úspešne zaradená na prevod do %(book_format)s"
msgid "There was an error converting this book: %(res)s"
msgstr "Vyskytla sa chyba pri prevode tejto knihy: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Vybraná kniha nie je dostupná. Súbor neexistuje alebo sa k nemu nedá pristupovať"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr "Používateľ nemá práva nahrať obálku knihy"
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "Identifikátory nerozlišujú malé a veľké písmená, prepisuje sa starý identifikátor"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "'%(langname)s' nie je platný jazyk"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadáta boli úspešne aktualizované"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr "Chyba pri úprave knihy: {}"
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Nahrávaná kniha pravdepodobne existuje v knižnici, zvážte zmenu pred nahraním novej: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Prípona súboru '%(ext)s' nemôže byť nahraná na tento server"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Prípona súboru '%(ext)s' nemôže byť nahraná na tento server"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Súbor ktorý sa má nahrať musí mať príponu"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "Súbor %(filename)s nebolo možné uložiť do dočasného adresára"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Zlyhal presun súboru obalky %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Kniha s formátom bola úspešne zmazaná"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Kniha bola úspešne zmazaná"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "Nemáte oprávnenia na mazanie kníh"
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "upraviť metadáta"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex)s nie je platné číslo, preskakuje sa"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr "Používateľ nemá práva na nahranie dodatočných súborových formátov"
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Nebolo možné vytvoriť cestu %(path)s (Povolenie zamietnuté)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Zlyhalo uloženie súboru: %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Súborový formát %(ext)s bol pridaný k %(book)s"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2024-09-18 19:45+0200\n"
"Last-Translator: Andrej Kralj\n"
"Language: sl\n"
@ -36,15 +36,15 @@ msgstr "Podatkovna baza je uspešno ponovno povezana"
#: cps/admin.py:164
msgid "Unknown command"
msgstr "Neznani ukaz"
msgstr "Neznan ukaz"
#: cps/admin.py:175
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Uspeh! Knjige so v čakalni vrsti za varnostno kopiranje metapodatkov, za rezultat preverite opravila"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Neznano"
@ -54,17 +54,17 @@ msgstr "Administrativna stran"
#: cps/admin.py:253
msgid "Basic Configuration"
msgstr "Osnovna nastavitev"
msgstr "Osnovne nastavitve"
#: cps/admin.py:291
msgid "UI Configuration"
msgstr "Nastavitev uporabniškega vmesnika"
msgstr "Nastavitve uporabniškega vmesnika"
#: cps/admin.py:325 cps/templates/admin.html:51
msgid "Edit Users"
msgstr "Urejanje uporabnikov"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Vse"
@ -287,7 +287,7 @@ msgstr "Uspeh! Račun Gmail je potrjen."
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -551,95 +551,95 @@ msgstr "Knjiga je uspešno dodana v čakalno vrsto za pretvorbo v %(book_format)
msgid "There was an error converting this book: %(res)s"
msgstr "Pri pretvorbi te knjige je prišlo do napake: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Ups! Izbrana knjiga ni na voljo. Datoteka ne obstaja ali ni dostopna"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr "Uporabnik nima pravice do nalaganja naslovnice"
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "Identifikatorji niso občutljivi na velikost črk, prepisovanje starega identifikatorja"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "'%(langname)s' ni veljaven jezik"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metapodatki so bili uspešno posodobljeni"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr "Napaka pri urejanju knjige: {}"
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Naložena knjiga verjetno obstaja v knjižnici, preden naložite novo, razmislite o spremembi:"
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Vrsta datoteke ni dovoljena za nalaganje v ta strežnik"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Datoteke s končnico '%(ext)s' ni dovoljeno naložiti na ta strežnik"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Datoteka, ki jo želite naložiti, mora imeti končnico"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "Datoteke %(filename)s ni bilo mogoče shraniti v začasno mapo"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Nisem uspel premakniti naslovne datoteke %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Uspešno izbrisana vrsta knjige"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Knjiga je bila uspešno izbrisana"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "Manjkajo vam dovoljenja za brisanje knjig"
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "urejanje metapodatkov"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "Številka serije: %(seriesindex)s ni veljavno število, preskočim"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr "Uporabnik nima pravic za nalaganje dodatnih formatov datotek"
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Nisem uspel ustvariti poti %(path)s (zavrnjeno dovoljenje)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Nisem uspel shraniti datoteke %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Oblina datotek %(ext)s je dodan v %(book)s"
@ -860,7 +860,7 @@ msgstr "Registracija pri %(provider)s"
#: cps/oauth_bb.py:139 cps/remotelogin.py:131
#, python-format
msgid "Success! You are now logged in as: %(nickname)s"
msgstr "Uspeh! Zdaj ste prijavljeni kot: %(nickname)s"
msgstr "Uspeh! Prijavljeni ste kot: %(nickname)s"
#: cps/oauth_bb.py:149
#, python-format
@ -1412,7 +1412,7 @@ msgstr "Pred naslednjo prijavo počakajte eno minuto"
#: cps/web.py:1402
#, python-format
msgid "you are now logged in as: '%(nickname)s'"
msgstr "zdaj ste prijavljeni kot: '%(nickname)s'"
msgstr "prijavljeni ste kot: '%(nickname)s'"
#: cps/web.py:1409
#, python-format
@ -1443,7 +1443,7 @@ msgstr "Za ponastavitev gesla vnesite veljavno uporabniško ime"
#: cps/web.py:1439
#, python-format
msgid "You are now logged in as: '%(nickname)s'"
msgstr "Zdaj ste prijavljeni kot: '%(nickname)s'"
msgstr "Prijavljeni ste kot: '%(nickname)s'"
#: cps/web.py:1504 cps/web.py:1554
#, python-format
@ -2643,7 +2643,7 @@ msgstr "Dodaj v arhiv"
#: cps/templates/detail.html:267
msgid "Mark Book as archived or not, to hide it in Calibre-Web and delete it from Kobo Reader"
msgstr "Označi knjigo kot arhivirano ali ne, da jo skriješ v Calibre-Web in izbrišeš iz Kobo bralnika"
msgstr "Označi knjigo kot arhivirano ali ne, da se skrije v Calibre-Web in izbriše iz Kobo bralnika"
#: cps/templates/detail.html:267
msgid "Archive"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2021-05-13 11:00+0000\n"
"Last-Translator: Jonatan Nyberg <jonatan.nyberg.karl@gmail.com>\n"
"Language: sv\n"
@ -45,9 +45,9 @@ msgstr "Okänt kommando"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "Testa e-post i kö för att skicka till %(email)s, vänligen kontrollera Uppgifter för resultat"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Okänd"
@ -67,7 +67,7 @@ msgstr "Användargränssnitt konfiguration"
msgid "Edit Users"
msgstr "Redigera användare"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Alla"
@ -294,7 +294,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -563,96 +563,96 @@ msgstr "Boken är i kö för konvertering till %(book_format)s"
msgid "There was an error converting this book: %(res)s"
msgstr "Det gick inte att konvertera den här boken: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Hoppsan! Vald boktitel är inte tillgänglig. Filen finns inte eller är inte tillgänglig"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "Identifierare är inte skiftlägeskänsliga, skriver över gammal identifierare"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, fuzzy, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s är inte ett giltigt språk"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadata uppdaterades"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Uppladdad bok finns förmodligen i biblioteket, överväg att ändra innan du laddar upp nya: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "Filändelsen '%(ext)s' får inte laddas upp till den här servern"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "Filändelsen '%(ext)s' får inte laddas upp till den här servern"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Filen som ska laddas upp måste ha en ändelse"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "Filen %(filename)s kunde inte sparas i temp dir"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "Det gick inte att flytta omslagsfil %(file)s: %(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "Bokformat har tagits bort"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "Boken har tagits bort"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "redigera metadata"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr ""
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "Det gick inte att skapa sökväg %(path)s (behörighet nekad)."
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Det gick inte att lagra filen %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "Filformatet %(ext)s lades till %(book)s"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2020-04-23 22:47+0300\n"
"Last-Translator: iz <iz7iz7iz@protonmail.ch>\n"
"Language: tr\n"
@ -45,9 +45,9 @@ msgstr ""
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "%(eReadermail)s'a gönderilmek üzere başarıyla sıraya alındı"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Bilinmeyen"
@ -67,7 +67,7 @@ msgstr "Arayüz Ayarları"
msgid "Edit Users"
msgstr ""
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Tümü"
@ -291,7 +291,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -560,96 +560,96 @@ msgstr "eKitap %(book_format)s formatlarına dönüştürülmek üzere başarıy
msgid "There was an error converting this book: %(res)s"
msgstr "Bu eKitabı dönüştürürken bir hata oluştu: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr ""
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr ""
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, fuzzy, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s geçerli bir dil değil"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metaveri başarıyla güncellendi"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "Yüklenen eKitap muhtemelen kitaplıkta zaten var. Yenisini yüklemeden değiştirmeyi düşünün: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "'%(ext)s' uzantılı dosyaların bu sunucuya yüklenmesine izin verilmiyor"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "'%(ext)s' uzantılı dosyaların bu sunucuya yüklenmesine izin verilmiyor"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Yüklenecek dosyanın mutlaka bir uzantısı olması gerekli"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "%(filename)s dosyası geçici dizine kaydedilemedi"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr ""
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr ""
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr ""
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "metaveri düzenle"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr ""
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "%(path)s dizini oluşturulamadı. (İzin reddedildi)"
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "%(file)s dosyası kaydedilemedi."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "%(book)s kitabına %(ext)s dosya biçimi eklendi"

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2017-04-30 00:47+0300\n"
"Last-Translator: ABIS Team <biblio.if.abis@gmail.com>\n"
"Language: uk\n"
@ -43,9 +43,9 @@ msgstr "Невідома команда"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr ""
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Невідомий"
@ -66,7 +66,7 @@ msgstr "Конфігурація інтерфейсу"
msgid "Edit Users"
msgstr "Керування сервером"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Всі"
@ -293,7 +293,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -560,95 +560,95 @@ msgstr ""
msgid "There was an error converting this book: %(res)s"
msgstr ""
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "Неможливо відкрити книгу. Файл не існує або немає доступу."
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr ""
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr ""
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr ""
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr ""
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
msgid "File type isn't allowed to be uploaded to this server"
msgstr ""
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr ""
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "Завантажувальний файл повинен мати розширення"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr ""
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr ""
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr ""
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr ""
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "змінити метадані"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr ""
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr ""
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr ""
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr ""

View File

@ -4,7 +4,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2022-09-20 21:36+0700\n"
"Last-Translator: Ha Link <halink0803@gmail.com>\n"
"Language: vi\n"
@ -41,9 +41,9 @@ msgstr "Lệnh không tồn tại"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr ""
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "Không rõ"
@ -63,7 +63,7 @@ msgstr "Thiết lập UI"
msgid "Edit Users"
msgstr "Chỉnh sửa người dùng"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "Tất cả"
@ -286,7 +286,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -551,95 +551,95 @@ msgstr ""
msgid "There was an error converting this book: %(res)s"
msgstr "Có lỗi xảy ra khi chuyển đổi định dạng cho sach: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr ""
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr ""
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s không phải là ngôn ngữ hợp lệ"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "Metadata đã được cập nhật thành công"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr ""
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
msgid "File type isn't allowed to be uploaded to this server"
msgstr ""
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr ""
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr ""
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr ""
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr ""
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr ""
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr ""
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr ""
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr ""
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr ""
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "Lưu file thất bại %(file)s."
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2020-09-27 22:18+0800\n"
"Last-Translator: xlivevil <xlivevil@aliyun.com>\n"
"Language: zh_CN\n"
@ -42,9 +42,9 @@ msgstr "未知命令"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "成功!书籍已排队进行元数据备份,请检查任务列表以获取结果"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "未知"
@ -64,7 +64,7 @@ msgstr "界面配置"
msgid "Edit Users"
msgstr "管理用户"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "全部"
@ -287,7 +287,7 @@ msgstr "Gmail 账户验证成功"
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -551,96 +551,96 @@ msgstr "书籍已经被成功加入 %(book_format)s 格式转换队列"
msgid "There was an error converting this book: %(res)s"
msgstr "转换此书籍时出现错误: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "糟糕!选择书名无法打开。文件不存在或者文件不可访问"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr "用户没有权限上传封面"
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "标识符不区分大小写,覆盖旧标识符"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "'%(langname)s' 不是一种有效语言"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "已成功更新元数据"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr "编辑书籍时出错: {}"
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "上传的书籍可能已经存在,建议修改后重新上传: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "不能上传文件扩展名为“%(ext)s”的文件到此服务器"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "不能上传文件扩展名为“%(ext)s”的文件到此服务器"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "要上传的文件必须具有扩展名"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "文件 %(filename)s 无法保存到临时目录"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "移动封面文件失败 %(file)s%(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "书籍的此格式副本已成功删除"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "书籍已成功删除"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr "您没有删除书籍的权限"
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "编辑元数据"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex)s 不是一个有效的数值,忽略"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr "用户没有权限上传其他文件格式"
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "创建路径 %(path)s 失败 (权限不足)"
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "保存文件 %(file)s 失败"
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "已添加 %(ext)s 格式到 %(book)s"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: 2020-09-27 22:18+0800\n"
"Last-Translator: xlivevil <xlivevil@aliyun.com>\n"
"Language: zh_TW\n"
@ -45,9 +45,9 @@ msgstr "未知命令"
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr "發送給%(email)s的測試郵件已進入隊列。請檢查任務結果"
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr "未知"
@ -67,7 +67,7 @@ msgstr "界面配置"
msgid "Edit Users"
msgstr "管理用戶"
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr "全部"
@ -290,7 +290,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -557,96 +557,96 @@ msgstr "書籍已經被成功加入到 %(book_format)s 格式轉換隊列"
msgid "There was an error converting this book: %(res)s"
msgstr "轉換此書籍時出現錯誤: %(res)s"
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr "糟糕!選擇書名無法打開。文件不存在或者文件不可訪問"
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr "標識符不區分大小寫,覆蓋舊標識符"
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, fuzzy, python-format
msgid "'%(langname)s' is not a valid language"
msgstr "%(langname)s 不是一種有效語言"
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr "已成功更新元數據"
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr "上傳的書籍可能已經存在,建議修改後重新上傳: "
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
#, fuzzy
msgid "File type isn't allowed to be uploaded to this server"
msgstr "不能上傳文件附檔名為“%(ext)s”的文件到此服務器"
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "不能上傳文件附檔名為“%(ext)s”的文件到此服務器"
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr "要上傳的文件必須具有附檔名"
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr "文件 %(filename)s 無法保存到臨時目錄"
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr "移動封面文件失敗 %(file)s%(error)s"
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr "書籍格式已成功刪除"
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr "書籍已成功刪除"
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr "編輯元數據"
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, fuzzy, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr "%(seriesindex)s 不是一個有效的數值,忽略"
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr "創建路徑 %(path)s 失敗(權限拒絕)。"
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr "保存文件 %(file)s 失敗。"
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr "已添加 %(ext)s 格式到 %(book)s"

View File

@ -39,17 +39,20 @@ except (ImportError, RuntimeError) as e:
try:
from pypdf import PdfReader
from pypdf.generic import NullObject
use_pdf_meta = True
except ImportError as ex:
log.debug('PyPDF is recommended for best performance in metadata extracting from pdf files: %s', ex)
try:
from PyPDF2 import PdfReader
from pypdf.generic import NullObject
use_pdf_meta = True
except ImportError as ex:
log.debug('PyPDF is recommended for best performance in metadata extracting from pdf files: %s', ex)
log.debug('PyPdf2 is also possible for metadata extracting from pdf files, but not recommended anymore')
try:
from PyPDF3 import PdfFileReader as PdfReader
from pypdf.generic import NullObject
use_pdf_meta = True
except ImportError as e:
log.debug('Cannot import PyPDF3/PyPDF2, extracting pdf metadata will not work: %s / %s', e)
@ -205,10 +208,12 @@ def pdf_meta(tmp_file_path, original_file_name, original_file_extension, no_cove
if subject == '':
subject = doc_info.subject or ""
if tags == '' and '/Keywords' in doc_info:
if isinstance(doc_info['/Keywords'], bytes):
tags = doc_info['/Keywords'].decode('utf-8')
else:
tags = doc_info['/Keywords']
keywords = doc_info['/Keywords']
if not isinstance(keywords, NullObject):
if isinstance(keywords, bytes):
tags = keywords.decode('utf-8')
else:
tags = keywords
else:
title = original_file_name

View File

@ -36,7 +36,6 @@ from sqlalchemy.exc import IntegrityError, InvalidRequestError, OperationalError
from sqlalchemy.sql.expression import text, func, false, not_, and_, or_
from sqlalchemy.orm.attributes import flag_modified
from sqlalchemy.sql.functions import coalesce
from sqlalchemy import __version__ as sql_version
from werkzeug.datastructures import Headers
from werkzeug.security import generate_password_hash, check_password_hash
@ -87,9 +86,6 @@ except ImportError:
sort = sorted # Just use regular sort then, may cause issues with badly named pages in cbz/cbr files
sqlalchemy_version2 = ([int(x) for x in sql_version.split('.')] >= [2, 0, 0])
@app.after_request
def add_security_headers(resp):
default_src = ([host.strip() for host in config.config_trustedhosts.split(',') if host] +

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-09-21 12:05+0200\n"
"POT-Creation-Date: 2024-10-23 18:42+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -41,9 +41,9 @@ msgstr ""
msgid "Success! Books queued for Metadata Backup, please check Tasks for result"
msgstr ""
#: cps/admin.py:208 cps/editbooks.py:628 cps/editbooks.py:671
#: cps/editbooks.py:1316 cps/updater.py:615 cps/uploader.py:105
#: cps/uploader.py:114
#: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672
#: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108
#: cps/uploader.py:117
msgid "Unknown"
msgstr ""
@ -63,7 +63,7 @@ msgstr ""
msgid "Edit Users"
msgstr ""
#: cps/admin.py:369 cps/opds.py:543 cps/templates/grid.html:14
#: cps/admin.py:369 cps/opds.py:540 cps/templates/grid.html:14
#: cps/templates/list.html:13
msgid "All"
msgstr ""
@ -286,7 +286,7 @@ msgstr ""
#: cps/admin.py:1323 cps/admin.py:1326 cps/admin.py:1711 cps/admin.py:1860
#: cps/admin.py:1958 cps/admin.py:2079 cps/editbooks.py:168
#: cps/editbooks.py:575 cps/editbooks.py:1270 cps/shelf.py:90 cps/shelf.py:150
#: cps/editbooks.py:576 cps/editbooks.py:1271 cps/shelf.py:90 cps/shelf.py:150
#: cps/shelf.py:193 cps/shelf.py:243 cps/shelf.py:280 cps/shelf.py:354
#: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1529
#, python-format
@ -550,95 +550,95 @@ msgstr ""
msgid "There was an error converting this book: %(res)s"
msgstr ""
#: cps/editbooks.py:448 cps/editbooks.py:942 cps/web.py:532 cps/web.py:1570
#: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:532 cps/web.py:1570
#: cps/web.py:1615 cps/web.py:1660
msgid "Oops! Selected book is unavailable. File does not exist or is not accessible"
msgstr ""
#: cps/editbooks.py:494 cps/editbooks.py:1299
#: cps/editbooks.py:494 cps/editbooks.py:1300
msgid "User has no rights to upload cover"
msgstr ""
#: cps/editbooks.py:514 cps/editbooks.py:757
#: cps/editbooks.py:515 cps/editbooks.py:758
msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier"
msgstr ""
#: cps/editbooks.py:529 cps/editbooks.py:731 cps/editbooks.py:1069
#: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070
#, python-format
msgid "'%(langname)s' is not a valid language"
msgstr ""
#: cps/editbooks.py:557
#: cps/editbooks.py:558
msgid "Metadata successfully updated"
msgstr ""
#: cps/editbooks.py:580
#: cps/editbooks.py:581
msgid "Error editing book: {}"
msgstr ""
#: cps/editbooks.py:675
#: cps/editbooks.py:676
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
msgstr ""
#: cps/editbooks.py:769 cps/editbooks.py:1216
#: cps/editbooks.py:770 cps/editbooks.py:1217
msgid "File type isn't allowed to be uploaded to this server"
msgstr ""
#: cps/editbooks.py:775 cps/editbooks.py:1227
#: cps/editbooks.py:776 cps/editbooks.py:1228
#, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr ""
#: cps/editbooks.py:779 cps/editbooks.py:1232
#: cps/editbooks.py:780 cps/editbooks.py:1233
msgid "File to be uploaded must have an extension"
msgstr ""
#: cps/editbooks.py:787
#: cps/editbooks.py:788
#, python-format
msgid "File %(filename)s could not saved to temp dir"
msgstr ""
#: cps/editbooks.py:807
#: cps/editbooks.py:808
#, python-format
msgid "Failed to Move Cover File %(file)s: %(error)s"
msgstr ""
#: cps/editbooks.py:864 cps/editbooks.py:866
#: cps/editbooks.py:865 cps/editbooks.py:867
msgid "Book Format Successfully Deleted"
msgstr ""
#: cps/editbooks.py:873 cps/editbooks.py:875
#: cps/editbooks.py:874 cps/editbooks.py:876
msgid "Book Successfully Deleted"
msgstr ""
#: cps/editbooks.py:927
#: cps/editbooks.py:928
msgid "You are missing permissions to delete books"
msgstr ""
#: cps/editbooks.py:977
#: cps/editbooks.py:978
msgid "edit metadata"
msgstr ""
#: cps/editbooks.py:1030
#: cps/editbooks.py:1031
#, python-format
msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping"
msgstr ""
#: cps/editbooks.py:1221
#: cps/editbooks.py:1222
msgid "User has no rights to upload additional file formats"
msgstr ""
#: cps/editbooks.py:1245
#: cps/editbooks.py:1246
#, python-format
msgid "Failed to create path %(path)s (Permission denied)."
msgstr ""
#: cps/editbooks.py:1252
#: cps/editbooks.py:1253
#, python-format
msgid "Failed to store file %(file)s."
msgstr ""
#: cps/editbooks.py:1277
#: cps/editbooks.py:1278
#, python-format
msgid "File format %(ext)s added to %(book)s"
msgstr ""

View File

@ -6,7 +6,7 @@ Flask>=1.0.2,<3.1.0
iso-639>=0.4.5,<0.5.0
PyPDF>=3.15.6,<5.1.0
pytz>=2016.10
requests>=2.28.0,<2.33.0
requests>=2.32.0,<2.33.0
SQLAlchemy>=1.3.0,<2.1.0
tornado>=6.3,<6.5
Wand>=0.4.4,<0.7.0
@ -14,10 +14,11 @@ unidecode>=0.04.19,<1.4.0
lxml>=4.9.1,<5.3.0
flask-wtf>=0.14.2,<1.3.0
chardet>=3.0.0,<5.3.0
netifaces-plus>0.12.0,<0.13.0
urllib3<2.0,>=1.22
netifaces-plus>=0.12.0,<0.13.0
urllib3>=1.22,<3.0
Flask-Limiter>=2.3.0,<3.9.0
regex>=2022.3.2,<2024.6.25
bleach>=6.0.0,<6.2.0
python-magic>=0.4.27,<0.5.0
flask-httpAuth>=4.4.0,<5.0.0
cryptography>=30.0.0,<44.0.0

View File

@ -37,20 +37,20 @@
<div class="row">
<div class="col-xs-6 col-md-6 col-sm-offset-3" style="margin-top:50px;">
<p class='text-justify attribute'><strong>Start Time: </strong>2024-08-21 19:35:06</p>
<p class='text-justify attribute'><strong>Start Time: </strong>2024-10-31 19:45:00</p>
</div>
</div>
<div class="row">
<div class="col-xs-6 col-md-6 col-sm-offset-3">
<p class='text-justify attribute'><strong>Stop Time: </strong>2024-08-22 02:49:49</p>
<p class='text-justify attribute'><strong>Stop Time: </strong>2024-11-01 03:02:38</p>
</div>
</div>
<div class="row">
<div class="col-xs-6 col-md-6 col-sm-offset-3">
<p class='text-justify attribute'><strong>Duration: </strong>6h 7 min</p>
<p class='text-justify attribute'><strong>Duration: </strong>6h 11 min</p>
</div>
</div>
</div>
@ -1237,13 +1237,13 @@
<tr id="su" class="skipClass">
<td>TestEditBooks</td>
<td class="text-center">38</td>
<td class="text-center">37</td>
<td class="text-center">36</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">1</td>
<td class="text-center">
<a onclick="showClassDetail('c13', 37)">Detail</a>
<a onclick="showClassDetail('c13', 38)">Detail</a>
</td>
</tr>
@ -1598,6 +1598,15 @@
</tr>
<tr id='pt13.38' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestEditBooks - test_xchange</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id="su" class="passClass">
@ -2056,12 +2065,12 @@
<tr id="su" class="failClass">
<tr id="su" class="errorClass">
<td>TestLoadMetadata</td>
<td class="text-center">1</td>
<td class="text-center">0</td>
<td class="text-center">1</td>
<td class="text-center">0</td>
<td class="text-center">1</td>
<td class="text-center">0</td>
<td class="text-center">
<a onclick="showClassDetail('c18', 1)">Detail</a>
@ -2070,28 +2079,26 @@
<tr id="ft18.1" class="none bg-danger">
<tr id="et18.1" class="none bg-info">
<td>
<div class='testcase'>TestLoadMetadata - test_load_metadata</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft18.1')">FAIL</a>
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_et18.1')">ERROR</a>
</div>
<!--css div popup start-->
<div id="div_ft18.1" class="popup_window test_output" style="display:block;">
<div id="div_et18.1" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_ft18.1').style.display='none'"><span
onclick="document.getElementById('div_et18.1').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">Traceback (most recent call last):
File &#34;/home/ozzie/Development/calibre-web-test/test/test_edit_books_metadata.py&#34;, line 100, in test_load_metadata
self.assertEqual(&#39;https://amazon.com/&#39;, results[am][&#39;source&#39;])
AssertionError: &#39;https://amazon.com/&#39; != &#39;https://comicvine.gamespot.com/&#39;
- https://amazon.com/
+ https://comicvine.gamespot.com/</pre>
File &#34;/home/ozzie/Development/calibre-web-test/test/test_edit_books_metadata.py&#34;, line 99, in test_load_metadata
if results[cont][&#39;source&#39;] == &#39;https://comicvine.gamespot.com/&#39;:
IndexError: list index out of range</pre>
</div>
<div class="clearfix"></div>
</div>
@ -2102,11 +2109,11 @@ AssertionError: &#39;https://amazon.com/&#39; != &#39;https://comicvine.gamespot
<tr id="su" class="failClass">
<tr id="su" class="passClass">
<td>TestEditBooksOnGdrive</td>
<td class="text-center">18</td>
<td class="text-center">17</td>
<td class="text-center">1</td>
<td class="text-center">18</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">
@ -2269,31 +2276,11 @@ AssertionError: &#39;https://amazon.com/&#39; != &#39;https://comicvine.gamespot
<tr id="ft19.18" class="none bg-danger">
<tr id='pt19.18' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestEditBooksOnGdrive - test_watch_metadata</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft19.18')">FAIL</a>
</div>
<!--css div popup start-->
<div id="div_ft19.18" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_ft19.18').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">Traceback (most recent call last):
File &#34;/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py&#34;, line 976, in test_watch_metadata
self.assertNotIn(&#39;series&#39;, book)
AssertionError: &#39;series&#39; unexpectedly found in {&#39;id&#39;: 5, &#39;reader&#39;: [], &#39;title&#39;: &#39;testbook&#39;, &#39;author&#39;: [&#39;John Döe&#39;], &#39;rating&#39;: 0, &#39;languages&#39;: [&#39;English&#39;], &#39;identifier&#39;: [], &#39;cover&#39;: &#39;/cover/5/og?c=1724266889&#39;, &#39;tag&#39;: [], &#39;publisher&#39;: [&#39;Randomhäus&#39;], &#39;pubdate&#39;: &#39;Jan 19, 2017&#39;, &#39;comment&#39;: &#39;Lorem ipsum dolor sit amet, consectetuer adipiscing elit.Aenean commodo ligula eget dolor.Aenean massa.Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.Nulla consequat massa quis enim.Donec pede justo, fringilla vel, aliquet nec, vulputate&#39;, &#39;add_shelf&#39;: [], &#39;del_shelf&#39;: [], &#39;edit_enable&#39;: True, &#39;kindle&#39;: None, &#39;kindlebtn&#39;: None, &#39;download&#39;: [&#39;EPUB\n (6.7 kB)&#39;], &#39;read&#39;: False, &#39;archived&#39;: False, &#39;series_all&#39;: &#39;Book 1 of test&#39;, &#39;series_index&#39;: &#39;1&#39;, &#39;series&#39;: &#39;test&#39;, &#39;cust_columns&#39;: []}</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -3926,43 +3913,49 @@ AssertionError: &#39;series&#39; unexpectedly found in {&#39;id&#39;: 5, &#39;re
<tr id="su" class="passClass">
<td>TestPipInstall</td>
<td class="text-center">3</td>
<td class="text-center">3</td>
<tr id="su" class="errorClass">
<td>_ErrorHolder</td>
<td class="text-center">1</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">1</td>
<td class="text-center">0</td>
<td class="text-center">
<a onclick="showClassDetail('c41', 3)">Detail</a>
<a onclick="showClassDetail('c41', 1)">Detail</a>
</td>
</tr>
<tr id='pt41.1' class='hiddenRow bg-success'>
<tr id="et41.1" class="none bg-info">
<td>
<div class='testcase'>TestPipInstall - test_command_start</div>
<div class='testcase'>setUpClass (test_pip_install)</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt41.2' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestPipInstall - test_foldername_database_location</div>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_et41.1')">ERROR</a>
</div>
<!--css div popup start-->
<div id="div_et41.1" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_et41.1').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">Traceback (most recent call last):
File &#34;/home/ozzie/Development/calibre-web-test/test/test_pip_install.py&#34;, line 39, in setUpClass
make_release.main(args)
File &#34;/home/ozzie/Development/calibre-web-test/build_release/make_release.py&#34;, line 456, in main
update_requirements()
File &#34;/home/ozzie/Development/calibre-web-test/build_release/make_release.py&#34;, line 92, in update_requirements
with open(os.path.join(FILEPATH, &#34;pyproject.toml&#34;), &#39;r&#39;) as fp:
FileNotFoundError: [Errno 2] No such file or directory: &#39;/home/ozzie/Development/calibre-web/pyproject.toml&#39;</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt41.3' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestPipInstall - test_module_start</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -4217,12 +4210,12 @@ AssertionError: &#39;series&#39; unexpectedly found in {&#39;id&#39;: 5, &#39;re
<tr id="su" class="errorClass">
<tr id="su" class="skipClass">
<td>TestShelf</td>
<td class="text-center">17</td>
<td class="text-center">15</td>
<td class="text-center">16</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">1</td>
<td class="text-center">1</td>
<td class="text-center">
<a onclick="showClassDetail('c46', 17)">Detail</a>
@ -4249,44 +4242,11 @@ AssertionError: &#39;series&#39; unexpectedly found in {&#39;id&#39;: 5, &#39;re
<tr id="et46.3" class="none bg-info">
<tr id='pt46.3' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestShelf - test_adv_search_shelf</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_et46.3')">ERROR</a>
</div>
<!--css div popup start-->
<div id="div_et46.3" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_et46.3').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">Traceback (most recent call last):
File &#34;/home/ozzie/Development/calibre-web-test/test/test_shelf.py&#34;, line 562, in test_adv_search_shelf
self.assertEqual(len(self.adv_search({u&#39;include_shelf&#39;: u&#39;Search&#39;, &#39;book_title&#39;: &#39;book&#39;})), 2)
File &#34;/home/ozzie/Development/calibre-web-test/test/helper_ui.py&#34;, line 2173, in adv_search
ele = self.driver.find_element(By.XPATH,
File &#34;/home/ozzie/Development/calibre-web-test/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py&#34;, line 830, in find_element
return self.execute(Command.FIND_ELEMENT, {&#34;using&#34;: by, &#34;value&#34;: value})[&#34;value&#34;]
File &#34;/home/ozzie/Development/calibre-web-test/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py&#34;, line 440, in execute
self.error_handler.check_response(response)
File &#34;/home/ozzie/Development/calibre-web-test/venv/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py&#34;, line 245, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //input[@value = &#39;book&#39; and starts-with(@id, &#39;book_title&#39;) ]/..
Stacktrace:
RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -4461,13 +4421,13 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr id="su" class="passClass">
<td>TestSplitLibrary</td>
<td class="text-center">7</td>
<td class="text-center">7</td>
<td class="text-center">8</td>
<td class="text-center">8</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">
<a onclick="showClassDetail('c48', 7)">Detail</a>
<a onclick="showClassDetail('c48', 8)">Detail</a>
</td>
</tr>
@ -4535,6 +4495,15 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
</tr>
<tr id='pt48.8' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestSplitLibrary - test_wrong_config_lib</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id="su" class="passClass">
@ -5873,9 +5842,9 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr id='total_row' class="text-center bg-grey">
<td>Total</td>
<td>523</td>
<td>511</td>
<td>512</td>
<td>0</td>
<td>2</td>
<td>1</td>
<td>9</td>
<td>&nbsp;</td>
</tr>
@ -5904,7 +5873,7 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr>
<th>Platform</th>
<td>Linux 6.8.0-40-generic #40~22.04.3-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 30 17:30:19 UTC 2 x86_64 x86_64</td>
<td>Linux 6.8.0-48-generic #48~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Oct 7 11:24:13 UTC 2 x86_64 x86_64</td>
<td>Basic</td>
</tr>
@ -5914,12 +5883,6 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<td>Basic</td>
</tr>
<tr>
<th>advocate</th>
<td>1.0.0</td>
<td>Basic</td>
</tr>
<tr>
<th>APScheduler</th>
<td>3.10.4</td>
@ -5944,6 +5907,12 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<td>Basic</td>
</tr>
<tr>
<th>cryptography</th>
<td>43.0.3</td>
<td>Basic</td>
</tr>
<tr>
<th>Flask</th>
<td>3.0.3</td>
@ -5976,13 +5945,13 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr>
<th>Flask-WTF</th>
<td>1.2.1</td>
<td>1.2.2</td>
<td>Basic</td>
</tr>
<tr>
<th>greenlet</th>
<td>3.0.3</td>
<td>3.1.1</td>
<td>Basic</td>
</tr>
@ -6005,14 +5974,14 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
</tr>
<tr>
<th>pyasn1</th>
<td>0.6.0</td>
<th>netifaces-plus</th>
<td>0.12.3</td>
<td>Basic</td>
</tr>
<tr>
<th>pypdf</th>
<td>4.2.0</td>
<td>5.0.1</td>
<td>Basic</td>
</tr>
@ -6024,7 +5993,7 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr>
<th>pytz</th>
<td>2024.1</td>
<td>2024.2</td>
<td>Basic</td>
</tr>
@ -6036,13 +6005,13 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr>
<th>requests</th>
<td>2.31.0</td>
<td>2.32.3</td>
<td>Basic</td>
</tr>
<tr>
<th>SQLAlchemy</th>
<td>2.0.32</td>
<td>2.0.36</td>
<td>Basic</td>
</tr>
@ -6058,6 +6027,12 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<td>Basic</td>
</tr>
<tr>
<th>urllib3</th>
<td>2.2.3</td>
<td>Basic</td>
</tr>
<tr>
<th>Wand</th>
<td>0.6.13</td>
@ -6066,13 +6041,13 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr>
<th>Werkzeug</th>
<td>3.0.3</td>
<td>3.1.0</td>
<td>Basic</td>
</tr>
<tr>
<th>google-api-python-client</th>
<td>2.142.0</td>
<td>2.151.0</td>
<td>TestBackupMetadataGdrive</td>
</tr>
@ -6102,7 +6077,7 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr>
<th>google-api-python-client</th>
<td>2.142.0</td>
<td>2.151.0</td>
<td>TestCliGdrivedb</td>
</tr>
@ -6132,7 +6107,7 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr>
<th>google-api-python-client</th>
<td>2.142.0</td>
<td>2.151.0</td>
<td>TestEbookConvertCalibreGDrive</td>
</tr>
@ -6162,7 +6137,7 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr>
<th>google-api-python-client</th>
<td>2.142.0</td>
<td>2.151.0</td>
<td>TestEbookConvertGDriveKepubify</td>
</tr>
@ -6210,7 +6185,7 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr>
<th>google-api-python-client</th>
<td>2.142.0</td>
<td>2.151.0</td>
<td>TestEditAuthorsGdrive</td>
</tr>
@ -6246,7 +6221,7 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr>
<th>google-api-python-client</th>
<td>2.142.0</td>
<td>2.151.0</td>
<td>TestEditBooksOnGdrive</td>
</tr>
@ -6288,7 +6263,7 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr>
<th>google-api-python-client</th>
<td>2.142.0</td>
<td>2.151.0</td>
<td>TestEmbedMetadataGdrive</td>
</tr>
@ -6318,7 +6293,7 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr>
<th>google-api-python-client</th>
<td>2.142.0</td>
<td>2.151.0</td>
<td>TestSetupGdrive</td>
</tr>
@ -6354,7 +6329,7 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
<tr>
<th>python-Levenshtein</th>
<td>0.25.1</td>
<td>0.26.1</td>
<td>TestGoodreads</td>
</tr>
@ -6414,7 +6389,7 @@ dom.find/&lt;/&lt;@chrome://remote/content/shared/DOM.sys.mjs:136:16</pre>
</div>
<script>
drawCircle(511, 2, 1, 9);
drawCircle(512, 0, 2, 9);
showCase(5);
</script>