mirror of
				https://github.com/janeczku/calibre-web
				synced 2025-10-31 07:13:02 +00:00 
			
		
		
		
	Merge branch 'master' into Develop
This commit is contained in:
		
							
								
								
									
										22
									
								
								cps/cw_advocate/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								cps/cw_advocate/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | # | ||||||
|  | # Copyright 2015 Jordan Milne | ||||||
|  | # | ||||||
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | # you may not use this file except in compliance with the License. | ||||||
|  | # You may obtain a copy of the License at | ||||||
|  | # | ||||||
|  | #     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | # | ||||||
|  | # Unless required by applicable law or agreed to in writing, software | ||||||
|  | # distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | # See the License for the specific language governing permissions and | ||||||
|  | # limitations under the License. | ||||||
|  | # | ||||||
|  | # Source: https://github.com/JordanMilne/Advocate | ||||||
|  |  | ||||||
|  |  | ||||||
|  | from .adapters import ValidatingHTTPAdapter | ||||||
|  | from .api import * | ||||||
|  | from .addrvalidator import AddrValidator | ||||||
|  | from .exceptions import UnacceptableAddressException | ||||||
							
								
								
									
										48
									
								
								cps/cw_advocate/adapters.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								cps/cw_advocate/adapters.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | |||||||
|  | # | ||||||
|  | # Copyright 2015 Jordan Milne | ||||||
|  | # | ||||||
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | # you may not use this file except in compliance with the License. | ||||||
|  | # You may obtain a copy of the License at | ||||||
|  | # | ||||||
|  | #     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | # | ||||||
|  | # Unless required by applicable law or agreed to in writing, software | ||||||
|  | # distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | # See the License for the specific language governing permissions and | ||||||
|  | # limitations under the License. | ||||||
|  | # | ||||||
|  | # Source: https://github.com/JordanMilne/Advocate | ||||||
|  |  | ||||||
|  | from requests.adapters import HTTPAdapter, DEFAULT_POOLBLOCK | ||||||
|  |  | ||||||
|  | from .addrvalidator import AddrValidator | ||||||
|  | from .exceptions import ProxyDisabledException | ||||||
|  | from .poolmanager import ValidatingPoolManager | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ValidatingHTTPAdapter(HTTPAdapter): | ||||||
|  |     __attrs__ = HTTPAdapter.__attrs__ + ['_validator'] | ||||||
|  |  | ||||||
|  |     def __init__(self, *args, **kwargs): | ||||||
|  |         self._validator = kwargs.pop('validator', None) | ||||||
|  |         if not self._validator: | ||||||
|  |             self._validator = AddrValidator() | ||||||
|  |         super().__init__(*args, **kwargs) | ||||||
|  |  | ||||||
|  |     def init_poolmanager(self, connections, maxsize, block=DEFAULT_POOLBLOCK, | ||||||
|  |                          **pool_kwargs): | ||||||
|  |         self._pool_connections = connections | ||||||
|  |         self._pool_maxsize = maxsize | ||||||
|  |         self._pool_block = block | ||||||
|  |         self.poolmanager = ValidatingPoolManager( | ||||||
|  |             num_pools=connections, | ||||||
|  |             maxsize=maxsize, | ||||||
|  |             block=block, | ||||||
|  |             validator=self._validator, | ||||||
|  |             **pool_kwargs | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     def proxy_manager_for(self, proxy, **proxy_kwargs): | ||||||
|  |         raise ProxyDisabledException("Proxies cannot be used with Advocate") | ||||||
							
								
								
									
										281
									
								
								cps/cw_advocate/addrvalidator.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										281
									
								
								cps/cw_advocate/addrvalidator.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,281 @@ | |||||||
|  | # | ||||||
|  | # Copyright 2015 Jordan Milne | ||||||
|  | # | ||||||
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | # you may not use this file except in compliance with the License. | ||||||
|  | # You may obtain a copy of the License at | ||||||
|  | # | ||||||
|  | #     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | # | ||||||
|  | # Unless required by applicable law or agreed to in writing, software | ||||||
|  | # distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | # See the License for the specific language governing permissions and | ||||||
|  | # limitations under the License. | ||||||
|  | # | ||||||
|  | # Source: https://github.com/JordanMilne/Advocate | ||||||
|  |  | ||||||
|  | import functools | ||||||
|  | import fnmatch | ||||||
|  | import ipaddress | ||||||
|  | import re | ||||||
|  |  | ||||||
|  | try: | ||||||
|  |     import netifaces | ||||||
|  |     HAVE_NETIFACES = True | ||||||
|  | except ImportError: | ||||||
|  |     netifaces = None | ||||||
|  |     HAVE_NETIFACES = False | ||||||
|  |  | ||||||
|  | from .exceptions import NameserverException, ConfigException | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def canonicalize_hostname(hostname): | ||||||
|  |     """Lowercase and punycodify a hostname""" | ||||||
|  |     # We do the lowercasing after IDNA encoding because we only want to | ||||||
|  |     # lowercase the *ASCII* chars. | ||||||
|  |     # TODO: The differences between IDNA2003 and IDNA2008 might be relevant | ||||||
|  |     # to us, but both specs are damn confusing. | ||||||
|  |     return str(hostname.encode("idna").lower(), 'utf-8') | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def determine_local_addresses(): | ||||||
|  |     """Get all IPs that refer to this machine according to netifaces""" | ||||||
|  |     if not HAVE_NETIFACES: | ||||||
|  |         raise ConfigException("Tried to determine local addresses, " | ||||||
|  |                               "but netifaces module was not importable") | ||||||
|  |     ips = [] | ||||||
|  |     for interface in netifaces.interfaces(): | ||||||
|  |         if_families = netifaces.ifaddresses(interface) | ||||||
|  |         for family_kind in {netifaces.AF_INET, netifaces.AF_INET6}: | ||||||
|  |             addrs = if_families.get(family_kind, []) | ||||||
|  |             for addr in (x.get("addr", "") for x in addrs): | ||||||
|  |                 if family_kind == netifaces.AF_INET6: | ||||||
|  |                     # We can't do anything sensible with the scope here | ||||||
|  |                     addr = addr.split("%")[0] | ||||||
|  |                 ips.append(ipaddress.ip_network(addr)) | ||||||
|  |     return ips | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def add_local_address_arg(func): | ||||||
|  |     """Add the "_local_addresses" kwarg if it's missing | ||||||
|  |  | ||||||
|  |     IMO this information shouldn't be cached between calls (what if one of the | ||||||
|  |     adapters got a new IP at runtime?,) and we don't want each function to | ||||||
|  |     recalculate it. Just recalculate it if the caller didn't provide it for us. | ||||||
|  |     """ | ||||||
|  |     @functools.wraps(func) | ||||||
|  |     def wrapper(self, *args, **kwargs): | ||||||
|  |         if "_local_addresses" not in kwargs: | ||||||
|  |             if self.autodetect_local_addresses: | ||||||
|  |                 kwargs["_local_addresses"] = determine_local_addresses() | ||||||
|  |             else: | ||||||
|  |                 kwargs["_local_addresses"] = [] | ||||||
|  |         return func(self, *args, **kwargs) | ||||||
|  |     return wrapper | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class AddrValidator: | ||||||
|  |     _6TO4_RELAY_NET = ipaddress.ip_network("192.88.99.0/24") | ||||||
|  |     # Just the well known prefix, DNS64 servers can set their own | ||||||
|  |     # prefix, but in practice most probably don't. | ||||||
|  |     _DNS64_WK_PREFIX = ipaddress.ip_network("64:ff9b::/96") | ||||||
|  |     DEFAULT_PORT_WHITELIST = {80, 8080, 443, 8443, 8000} | ||||||
|  |  | ||||||
|  |     def __init__( | ||||||
|  |             self, | ||||||
|  |             ip_blacklist=None, | ||||||
|  |             ip_whitelist=None, | ||||||
|  |             port_whitelist=None, | ||||||
|  |             port_blacklist=None, | ||||||
|  |             hostname_blacklist=None, | ||||||
|  |             allow_ipv6=False, | ||||||
|  |             allow_teredo=False, | ||||||
|  |             allow_6to4=False, | ||||||
|  |             allow_dns64=False, | ||||||
|  |             # Must be explicitly set to "False" if you don't want to try | ||||||
|  |             # detecting local interface addresses with netifaces. | ||||||
|  |             autodetect_local_addresses=True, | ||||||
|  |     ): | ||||||
|  |         if not port_blacklist and not port_whitelist: | ||||||
|  |             # An assortment of common HTTPS? ports. | ||||||
|  |             port_whitelist = self.DEFAULT_PORT_WHITELIST.copy() | ||||||
|  |         self.ip_blacklist = ip_blacklist or set() | ||||||
|  |         self.ip_whitelist = ip_whitelist or set() | ||||||
|  |         self.port_blacklist = port_blacklist or set() | ||||||
|  |         self.port_whitelist = port_whitelist or set() | ||||||
|  |         # TODO: ATM this can contain either regexes or globs that are converted | ||||||
|  |         # to regexes upon every check. Create a collection that automagically | ||||||
|  |         # converts them to regexes on insert? | ||||||
|  |         self.hostname_blacklist = hostname_blacklist or set() | ||||||
|  |         self.allow_ipv6 = allow_ipv6 | ||||||
|  |         self.allow_teredo = allow_teredo | ||||||
|  |         self.allow_6to4 = allow_6to4 | ||||||
|  |         self.allow_dns64 = allow_dns64 | ||||||
|  |         self.autodetect_local_addresses = autodetect_local_addresses | ||||||
|  |  | ||||||
|  |     @add_local_address_arg | ||||||
|  |     def is_ip_allowed(self, addr_ip, _local_addresses=None): | ||||||
|  |         if not isinstance(addr_ip, | ||||||
|  |                           (ipaddress.IPv4Address, ipaddress.IPv6Address)): | ||||||
|  |             addr_ip = ipaddress.ip_address(addr_ip) | ||||||
|  |  | ||||||
|  |         # The whitelist should take precedence over the blacklist so we can | ||||||
|  |         # punch holes in blacklisted ranges | ||||||
|  |         if any(addr_ip in net for net in self.ip_whitelist): | ||||||
|  |             return True | ||||||
|  |  | ||||||
|  |         if any(addr_ip in net for net in self.ip_blacklist): | ||||||
|  |             return False | ||||||
|  |  | ||||||
|  |         if any(addr_ip in net for net in _local_addresses): | ||||||
|  |             return False | ||||||
|  |  | ||||||
|  |         if addr_ip.version == 4: | ||||||
|  |             if not addr_ip.is_private: | ||||||
|  |                 # IPs for carrier-grade NAT. Seems weird that it doesn't set | ||||||
|  |                 # `is_private`, but we need to check `not is_global` | ||||||
|  |                 if not ipaddress.ip_network(addr_ip).is_global: | ||||||
|  |                     return False | ||||||
|  |         elif addr_ip.version == 6: | ||||||
|  |             # You'd better have a good reason for enabling IPv6 | ||||||
|  |             # because Advocate's techniques don't work well without NAT. | ||||||
|  |             if not self.allow_ipv6: | ||||||
|  |                 return False | ||||||
|  |  | ||||||
|  |             # v6 addresses can also map to IPv4 addresses! Tricky! | ||||||
|  |             v4_nested = [] | ||||||
|  |             if addr_ip.ipv4_mapped: | ||||||
|  |                 v4_nested.append(addr_ip.ipv4_mapped) | ||||||
|  |             # WTF IPv6? Why you gotta have a billion tunneling mechanisms? | ||||||
|  |             # XXX: Do we even really care about these? If we're tunneling | ||||||
|  |             # through public servers we shouldn't be able to access | ||||||
|  |             # addresses on our private network, right? | ||||||
|  |             if addr_ip.sixtofour: | ||||||
|  |                 if not self.allow_6to4: | ||||||
|  |                     return False | ||||||
|  |                 v4_nested.append(addr_ip.sixtofour) | ||||||
|  |             if addr_ip.teredo: | ||||||
|  |                 if not self.allow_teredo: | ||||||
|  |                     return False | ||||||
|  |                 # Check both the client *and* server IPs | ||||||
|  |                 v4_nested.extend(addr_ip.teredo) | ||||||
|  |             if addr_ip in self._DNS64_WK_PREFIX: | ||||||
|  |                 if not self.allow_dns64: | ||||||
|  |                     return False | ||||||
|  |                 # When using the well-known prefix the last 4 bytes | ||||||
|  |                 # are the IPv4 addr | ||||||
|  |                 v4_nested.append(ipaddress.ip_address(addr_ip.packed[-4:])) | ||||||
|  |  | ||||||
|  |             if not all(self.is_ip_allowed(addr_v4) for addr_v4 in v4_nested): | ||||||
|  |                 return False | ||||||
|  |  | ||||||
|  |             # fec0::*, apparently deprecated? | ||||||
|  |             if addr_ip.is_site_local: | ||||||
|  |                 return False | ||||||
|  |         else: | ||||||
|  |             raise ValueError("Unsupported IP version(?): %r" % addr_ip) | ||||||
|  |  | ||||||
|  |         # 169.254.XXX.XXX, AWS uses these for autoconfiguration | ||||||
|  |         if addr_ip.is_link_local: | ||||||
|  |             return False | ||||||
|  |         # 127.0.0.1, ::1, etc. | ||||||
|  |         if addr_ip.is_loopback: | ||||||
|  |             return False | ||||||
|  |         if addr_ip.is_multicast: | ||||||
|  |             return False | ||||||
|  |         # 192.168.XXX.XXX, 10.XXX.XXX.XXX | ||||||
|  |         if addr_ip.is_private: | ||||||
|  |             return False | ||||||
|  |         # 255.255.255.255, ::ffff:XXXX:XXXX (v6->v4) mapping | ||||||
|  |         if addr_ip.is_reserved: | ||||||
|  |             return False | ||||||
|  |         # There's no reason to connect directly to a 6to4 relay | ||||||
|  |         if addr_ip in self._6TO4_RELAY_NET: | ||||||
|  |             return False | ||||||
|  |         # 0.0.0.0 | ||||||
|  |         if addr_ip.is_unspecified: | ||||||
|  |             return False | ||||||
|  |  | ||||||
|  |         # It doesn't look bad, so... it's must be ok! | ||||||
|  |         return True | ||||||
|  |  | ||||||
|  |     def _hostname_matches_pattern(self, hostname, pattern): | ||||||
|  |         # If they specified a string, just assume they only want basic globbing. | ||||||
|  |         # This stops people from not realizing they're dealing in REs and | ||||||
|  |         # not escaping their periods unless they specifically pass in an RE. | ||||||
|  |         # This has the added benefit of letting us sanely handle globbed | ||||||
|  |         # IDNs by default. | ||||||
|  |         if isinstance(pattern, str): | ||||||
|  |             # convert the glob to a punycode glob, then a regex | ||||||
|  |             pattern = fnmatch.translate(canonicalize_hostname(pattern)) | ||||||
|  |  | ||||||
|  |         hostname = canonicalize_hostname(hostname) | ||||||
|  |         # Down the line the hostname may get treated as a null-terminated string | ||||||
|  |         # (as with `socket.getaddrinfo`.) Try to account for that. | ||||||
|  |         # | ||||||
|  |         #    >>> socket.getaddrinfo("example.com\x00aaaa", 80) | ||||||
|  |         #    [(2, 1, 6, '', ('93.184.216.34', 80)), [...] | ||||||
|  |         no_null_hostname = hostname.split("\x00")[0] | ||||||
|  |  | ||||||
|  |         return any(re.match(pattern, x.strip(".")) for x | ||||||
|  |                    in (no_null_hostname, hostname)) | ||||||
|  |  | ||||||
|  |     def is_hostname_allowed(self, hostname): | ||||||
|  |         # Sometimes (like with "external" services that your IP has privileged | ||||||
|  |         # access to) you might not always know the IP range to blacklist access | ||||||
|  |         # to, or the `A` record might change without you noticing. | ||||||
|  |         # For e.x.: `foocorp.external.org`. | ||||||
|  |         # | ||||||
|  |         # Another option is doing something like: | ||||||
|  |         # | ||||||
|  |         #     for addrinfo in socket.getaddrinfo("foocorp.external.org", 80): | ||||||
|  |         #         global_validator.ip_blacklist.add(ip_address(addrinfo[4][0])) | ||||||
|  |         # | ||||||
|  |         # but that's not always a good idea if they're behind a third-party lb. | ||||||
|  |         for pattern in self.hostname_blacklist: | ||||||
|  |             if self._hostname_matches_pattern(hostname, pattern): | ||||||
|  |                 return False | ||||||
|  |         return True | ||||||
|  |  | ||||||
|  |     @add_local_address_arg | ||||||
|  |     def is_addrinfo_allowed(self, addrinfo, _local_addresses=None): | ||||||
|  |         assert(len(addrinfo) == 5) | ||||||
|  |         # XXX: Do we care about any of the other elements? Guessing not. | ||||||
|  |         family, socktype, proto, canonname, sockaddr = addrinfo | ||||||
|  |  | ||||||
|  |         # The 4th elem inaddrinfo may either be a touple of two or four items, | ||||||
|  |         # depending on whether we're dealing with IPv4 or v6 | ||||||
|  |         if len(sockaddr) == 2: | ||||||
|  |             # v4 | ||||||
|  |             ip, port = sockaddr | ||||||
|  |         elif len(sockaddr) == 4: | ||||||
|  |             # v6 | ||||||
|  |             # XXX: what *are* `flow_info` and `scope_id`? Anything useful? | ||||||
|  |             # Seems like we can figure out all we need about the scope from | ||||||
|  |             # the `is_<x>` properties. | ||||||
|  |             ip, port, flow_info, scope_id = sockaddr | ||||||
|  |         else: | ||||||
|  |             raise ValueError("Unexpected addrinfo format %r" % sockaddr) | ||||||
|  |  | ||||||
|  |         # Probably won't help protect against SSRF, but might prevent our being | ||||||
|  |         # used to attack others' non-HTTP services. See | ||||||
|  |         # http://www.remote.org/jochen/sec/hfpa/ | ||||||
|  |         if self.port_whitelist and port not in self.port_whitelist: | ||||||
|  |             return False | ||||||
|  |         if port in self.port_blacklist: | ||||||
|  |             return False | ||||||
|  |  | ||||||
|  |         if self.hostname_blacklist: | ||||||
|  |             if not canonname: | ||||||
|  |                 raise NameserverException( | ||||||
|  |                     "addrinfo must contain the canon name to do blacklisting " | ||||||
|  |                     "based on hostname. Make sure you use the " | ||||||
|  |                     "`socket.AI_CANONNAME` flag, and that each record contains " | ||||||
|  |                     "the canon name. Your DNS server might also be garbage." | ||||||
|  |                 ) | ||||||
|  |  | ||||||
|  |             if not self.is_hostname_allowed(canonname): | ||||||
|  |                 return False | ||||||
|  |  | ||||||
|  |         return self.is_ip_allowed(ip, _local_addresses=_local_addresses) | ||||||
							
								
								
									
										280
									
								
								cps/cw_advocate/api.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										280
									
								
								cps/cw_advocate/api.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,280 @@ | |||||||
|  | # | ||||||
|  | # Copyright 2015 Jordan Milne | ||||||
|  | # | ||||||
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | # you may not use this file except in compliance with the License. | ||||||
|  | # You may obtain a copy of the License at | ||||||
|  | # | ||||||
|  | #     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | # | ||||||
|  | # Unless required by applicable law or agreed to in writing, software | ||||||
|  | # distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | # See the License for the specific language governing permissions and | ||||||
|  | # limitations under the License. | ||||||
|  | # | ||||||
|  | # Source: https://github.com/JordanMilne/Advocate | ||||||
|  |  | ||||||
|  | """ | ||||||
|  | advocate.api | ||||||
|  | ~~~~~~~~~~~~ | ||||||
|  |  | ||||||
|  | This module implements the Requests API, largely a copy/paste from `requests` | ||||||
|  | itself. | ||||||
|  |  | ||||||
|  | :copyright: (c) 2015 by Jordan Milne. | ||||||
|  | :license: Apache2, see LICENSE for more details. | ||||||
|  |  | ||||||
|  | """ | ||||||
|  | from collections import OrderedDict | ||||||
|  | import hashlib | ||||||
|  | import pickle | ||||||
|  |  | ||||||
|  | from requests import Session as RequestsSession | ||||||
|  |  | ||||||
|  | # import cw_advocate | ||||||
|  | from .adapters import ValidatingHTTPAdapter | ||||||
|  | from .exceptions import MountDisabledException | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Session(RequestsSession): | ||||||
|  |     """Convenience wrapper around `requests.Session` set up for `advocate`ing""" | ||||||
|  |  | ||||||
|  |     __attrs__ = RequestsSession.__attrs__ + ["validator"] | ||||||
|  |     DEFAULT_VALIDATOR = None | ||||||
|  |     """ | ||||||
|  |     User-replaceable default validator to use for all Advocate sessions, | ||||||
|  |     includes sessions created by advocate.get() | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |     def __init__(self, *args, **kwargs): | ||||||
|  |         self.validator = kwargs.pop("validator", None) or self.DEFAULT_VALIDATOR | ||||||
|  |         adapter_kwargs = kwargs.pop("_adapter_kwargs", {}) | ||||||
|  |  | ||||||
|  |         # `Session.__init__()` calls `mount()` internally, so we need to allow | ||||||
|  |         # it temporarily | ||||||
|  |         self.__mount_allowed = True | ||||||
|  |         RequestsSession.__init__(self, *args, **kwargs) | ||||||
|  |  | ||||||
|  |         # Drop any existing adapters | ||||||
|  |         self.adapters = OrderedDict() | ||||||
|  |  | ||||||
|  |         self.mount("http://", ValidatingHTTPAdapter(validator=self.validator, **adapter_kwargs)) | ||||||
|  |         self.mount("https://", ValidatingHTTPAdapter(validator=self.validator, **adapter_kwargs)) | ||||||
|  |         self.__mount_allowed = False | ||||||
|  |  | ||||||
|  |     def mount(self, *args, **kwargs): | ||||||
|  |         """Wrapper around `mount()` to prevent a protection bypass""" | ||||||
|  |         if self.__mount_allowed: | ||||||
|  |             super().mount(*args, **kwargs) | ||||||
|  |         else: | ||||||
|  |             raise MountDisabledException( | ||||||
|  |                 "mount() is disabled to prevent protection bypasses" | ||||||
|  |             ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def session(*args, **kwargs): | ||||||
|  |     return Session(*args, **kwargs) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def request(method, url, **kwargs): | ||||||
|  |     """Constructs and sends a :class:`Request <Request>`. | ||||||
|  |  | ||||||
|  |     :param method: method for the new :class:`Request` object. | ||||||
|  |     :param url: URL for the new :class:`Request` object. | ||||||
|  |     :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`. | ||||||
|  |     :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. | ||||||
|  |     :param json: (optional) json data to send in the body of the :class:`Request`. | ||||||
|  |     :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`. | ||||||
|  |     :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`. | ||||||
|  |     :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': ('filename', fileobj)}``) for multipart encoding upload. | ||||||
|  |     :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth. | ||||||
|  |     :param timeout: (optional) How long to wait for the server to send data | ||||||
|  |         before giving up, as a float, or a (`connect timeout, read timeout | ||||||
|  |         <user/advanced.html#timeouts>`_) tuple. | ||||||
|  |     :type timeout: float or tuple | ||||||
|  |     :param allow_redirects: (optional) Boolean. Set to True if POST/PUT/DELETE redirect following is allowed. | ||||||
|  |     :type allow_redirects: bool | ||||||
|  |     :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy. | ||||||
|  |     :param verify: (optional) if ``True``, the SSL cert will be verified. A CA_BUNDLE path can also be provided. | ||||||
|  |     :param stream: (optional) if ``False``, the response content will be immediately downloaded. | ||||||
|  |     :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair. | ||||||
|  |     :return: :class:`Response <Response>` object | ||||||
|  |     :rtype: requests.Response | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |     validator = kwargs.pop("validator", None) | ||||||
|  |     with Session(validator=validator) as sess: | ||||||
|  |         response = sess.request(method=method, url=url, **kwargs) | ||||||
|  |     return response | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def get(url, **kwargs): | ||||||
|  |     """Sends a GET request. | ||||||
|  |  | ||||||
|  |     :param url: URL for the new :class:`Request` object. | ||||||
|  |     :param \*\*kwargs: Optional arguments that ``request`` takes. | ||||||
|  |     :return: :class:`Response <Response>` object | ||||||
|  |     :rtype: requests.Response | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |     kwargs.setdefault('allow_redirects', True) | ||||||
|  |     return request('get', url, **kwargs) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | '''def options(url, **kwargs): | ||||||
|  |     """Sends a OPTIONS request. | ||||||
|  |  | ||||||
|  |     :param url: URL for the new :class:`Request` object. | ||||||
|  |     :param \*\*kwargs: Optional arguments that ``request`` takes. | ||||||
|  |     :return: :class:`Response <Response>` object | ||||||
|  |     :rtype: requests.Response | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |     kwargs.setdefault('allow_redirects', True) | ||||||
|  |     return request('options', url, **kwargs) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def head(url, **kwargs): | ||||||
|  |     """Sends a HEAD request. | ||||||
|  |  | ||||||
|  |     :param url: URL for the new :class:`Request` object. | ||||||
|  |     :param \*\*kwargs: Optional arguments that ``request`` takes. | ||||||
|  |     :return: :class:`Response <Response>` object | ||||||
|  |     :rtype: requests.Response | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |     kwargs.setdefault('allow_redirects', False) | ||||||
|  |     return request('head', url, **kwargs) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def post(url, data=None, json=None, **kwargs): | ||||||
|  |     """Sends a POST request. | ||||||
|  |  | ||||||
|  |     :param url: URL for the new :class:`Request` object. | ||||||
|  |     :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. | ||||||
|  |     :param json: (optional) json data to send in the body of the :class:`Request`. | ||||||
|  |     :param \*\*kwargs: Optional arguments that ``request`` takes. | ||||||
|  |     :return: :class:`Response <Response>` object | ||||||
|  |     :rtype: requests.Response | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |     return request('post', url, data=data, json=json, **kwargs) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def put(url, data=None, **kwargs): | ||||||
|  |     """Sends a PUT request. | ||||||
|  |  | ||||||
|  |     :param url: URL for the new :class:`Request` object. | ||||||
|  |     :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. | ||||||
|  |     :param \*\*kwargs: Optional arguments that ``request`` takes. | ||||||
|  |     :return: :class:`Response <Response>` object | ||||||
|  |     :rtype: requests.Response | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |     return request('put', url, data=data, **kwargs) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def patch(url, data=None, **kwargs): | ||||||
|  |     """Sends a PATCH request. | ||||||
|  |  | ||||||
|  |     :param url: URL for the new :class:`Request` object. | ||||||
|  |     :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. | ||||||
|  |     :param \*\*kwargs: Optional arguments that ``request`` takes. | ||||||
|  |     :return: :class:`Response <Response>` object | ||||||
|  |     :rtype: requests.Response | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |     return request('patch', url, data=data, **kwargs) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def delete(url, **kwargs): | ||||||
|  |     """Sends a DELETE request. | ||||||
|  |  | ||||||
|  |     :param url: URL for the new :class:`Request` object. | ||||||
|  |     :param \*\*kwargs: Optional arguments that ``request`` takes. | ||||||
|  |     :return: :class:`Response <Response>` object | ||||||
|  |     :rtype: requests.Response | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |     return request('delete', url, **kwargs)''' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class RequestsAPIWrapper: | ||||||
|  |     """Provides a `requests.api`-like interface with a specific validator""" | ||||||
|  |  | ||||||
|  |     # Due to how the classes are dynamically constructed pickling may not work | ||||||
|  |     # correctly unless loaded within the same interpreter instance. | ||||||
|  |     # Enable at your peril. | ||||||
|  |     SUPPORT_WRAPPER_PICKLING = False | ||||||
|  |  | ||||||
|  |     def __init__(self, validator): | ||||||
|  |         # Do this here to avoid circular import issues | ||||||
|  |         try: | ||||||
|  |             from .futures import FuturesSession | ||||||
|  |             have_requests_futures = True | ||||||
|  |         except ImportError as e: | ||||||
|  |             have_requests_futures = False | ||||||
|  |  | ||||||
|  |         self.validator = validator | ||||||
|  |         outer_self = self | ||||||
|  |  | ||||||
|  |         class _WrappedSession(Session): | ||||||
|  |             """An `advocate.Session` that uses the wrapper's blacklist | ||||||
|  |  | ||||||
|  |             the wrapper is meant to be a transparent replacement for `requests`, | ||||||
|  |             so people should be able to subclass `wrapper.Session` and still | ||||||
|  |             get the desired validation behaviour | ||||||
|  |             """ | ||||||
|  |             DEFAULT_VALIDATOR = outer_self.validator | ||||||
|  |  | ||||||
|  |         self._make_wrapper_cls_global(_WrappedSession) | ||||||
|  |  | ||||||
|  |         if have_requests_futures: | ||||||
|  |  | ||||||
|  |             class _WrappedFuturesSession(FuturesSession): | ||||||
|  |                 """Like _WrappedSession, but for `FuturesSession`s""" | ||||||
|  |                 DEFAULT_VALIDATOR = outer_self.validator | ||||||
|  |             self._make_wrapper_cls_global(_WrappedFuturesSession) | ||||||
|  |  | ||||||
|  |             self.FuturesSession = _WrappedFuturesSession | ||||||
|  |  | ||||||
|  |         self.request = self._default_arg_wrapper(request) | ||||||
|  |         self.get = self._default_arg_wrapper(get) | ||||||
|  |         self.Session = _WrappedSession | ||||||
|  |  | ||||||
|  |     def __getattr__(self, item): | ||||||
|  |         # This class is meant to mimic the requests base module, so if we don't | ||||||
|  |         # have this attribute, it might be on the base module (like the Request | ||||||
|  |         # class, etc.) | ||||||
|  |         try: | ||||||
|  |             return object.__getattribute__(self, item) | ||||||
|  |         except AttributeError: | ||||||
|  |             from . import cw_advocate | ||||||
|  |             return getattr(cw_advocate, item) | ||||||
|  |  | ||||||
|  |     def _default_arg_wrapper(self, fun): | ||||||
|  |         def wrapped_func(*args, **kwargs): | ||||||
|  |             kwargs.setdefault("validator", self.validator) | ||||||
|  |             return fun(*args, **kwargs) | ||||||
|  |         return wrapped_func | ||||||
|  |  | ||||||
|  |     def _make_wrapper_cls_global(self, cls): | ||||||
|  |         if not self.SUPPORT_WRAPPER_PICKLING: | ||||||
|  |             return | ||||||
|  |         # Gnarly, but necessary to give pickle a consistent module-level | ||||||
|  |         # reference for each wrapper. | ||||||
|  |         wrapper_hash = hashlib.sha256(pickle.dumps(self)).hexdigest() | ||||||
|  |         cls.__name__ = "_".join((cls.__name__, wrapper_hash)) | ||||||
|  |         cls.__qualname__ = ".".join((__name__, cls.__name__)) | ||||||
|  |         if not globals().get(cls.__name__): | ||||||
|  |             globals()[cls.__name__] = cls | ||||||
|  |  | ||||||
|  |  | ||||||
|  | __all__ = ( | ||||||
|  |     "get", | ||||||
|  |     "request", | ||||||
|  |     "session", | ||||||
|  |     "Session", | ||||||
|  |     "RequestsAPIWrapper", | ||||||
|  | ) | ||||||
							
								
								
									
										201
									
								
								cps/cw_advocate/connection.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								cps/cw_advocate/connection.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,201 @@ | |||||||
|  | # | ||||||
|  | # Copyright 2015 Jordan Milne | ||||||
|  | # | ||||||
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | # you may not use this file except in compliance with the License. | ||||||
|  | # You may obtain a copy of the License at | ||||||
|  | # | ||||||
|  | #     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | # | ||||||
|  | # Unless required by applicable law or agreed to in writing, software | ||||||
|  | # distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | # See the License for the specific language governing permissions and | ||||||
|  | # limitations under the License. | ||||||
|  | # | ||||||
|  | # Source: https://github.com/JordanMilne/Advocate | ||||||
|  |  | ||||||
|  | import ipaddress | ||||||
|  | import socket | ||||||
|  | from socket import timeout as SocketTimeout | ||||||
|  |  | ||||||
|  | from urllib3.connection import HTTPSConnection, HTTPConnection | ||||||
|  | from urllib3.exceptions import ConnectTimeoutError | ||||||
|  | from urllib3.util.connection import _set_socket_options | ||||||
|  | from urllib3.util.connection import create_connection as old_create_connection | ||||||
|  |  | ||||||
|  | from . import addrvalidator | ||||||
|  | from .exceptions import UnacceptableAddressException | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def advocate_getaddrinfo(host, port, get_canonname=False): | ||||||
|  |     addrinfo = socket.getaddrinfo( | ||||||
|  |         host, | ||||||
|  |         port, | ||||||
|  |         0, | ||||||
|  |         socket.SOCK_STREAM, | ||||||
|  |         0, | ||||||
|  |         # We need what the DNS client sees the hostname as, correctly handles | ||||||
|  |         # IDNs and tricky things like `private.foocorp.org\x00.google.com`. | ||||||
|  |         # All IDNs will be converted to punycode. | ||||||
|  |         socket.AI_CANONNAME if get_canonname else 0, | ||||||
|  |     ) | ||||||
|  |     return fix_addrinfo(addrinfo) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def fix_addrinfo(records): | ||||||
|  |     """ | ||||||
|  |     Propagate the canonname across records and parse IPs | ||||||
|  |  | ||||||
|  |     I'm not sure if this is just the behaviour of `getaddrinfo` on Linux, but | ||||||
|  |     it seems like only the first record in the set has the canonname field | ||||||
|  |     populated. | ||||||
|  |     """ | ||||||
|  |     def fix_record(record, canonname): | ||||||
|  |         sa = record[4] | ||||||
|  |         sa = (ipaddress.ip_address(sa[0]),) + sa[1:] | ||||||
|  |         return record[0], record[1], record[2], canonname, sa | ||||||
|  |  | ||||||
|  |     canonname = None | ||||||
|  |     if records: | ||||||
|  |         # Apparently the canonical name is only included in the first record? | ||||||
|  |         # Add it to all of them. | ||||||
|  |         assert(len(records[0]) == 5) | ||||||
|  |         canonname = records[0][3] | ||||||
|  |     return tuple(fix_record(x, canonname) for x in records) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Lifted from requests' urllib3, which in turn lifted it from `socket.py`. Oy! | ||||||
|  | def validating_create_connection(address, | ||||||
|  |                        timeout=socket._GLOBAL_DEFAULT_TIMEOUT, | ||||||
|  |                        source_address=None, socket_options=None, | ||||||
|  |                        validator=None): | ||||||
|  |     """Connect to *address* and return the socket object. | ||||||
|  |  | ||||||
|  |     Convenience function.  Connect to *address* (a 2-tuple ``(host, | ||||||
|  |     port)``) and return the socket object.  Passing the optional | ||||||
|  |     *timeout* parameter will set the timeout on the socket instance | ||||||
|  |     before attempting to connect.  If no *timeout* is supplied, the | ||||||
|  |     global default timeout setting returned by :func:`getdefaulttimeout` | ||||||
|  |     is used.  If *source_address* is set it must be a tuple of (host, port) | ||||||
|  |     for the socket to bind as a source address before making the connection. | ||||||
|  |     An host of '' or port 0 tells the OS to use the default. | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |     host, port = address | ||||||
|  |     # We can skip asking for the canon name if we're not doing hostname-based | ||||||
|  |     # blacklisting. | ||||||
|  |     need_canonname = False | ||||||
|  |     if validator.hostname_blacklist: | ||||||
|  |         need_canonname = True | ||||||
|  |         # We check both the non-canonical and canonical hostnames so we can | ||||||
|  |         # catch both of these: | ||||||
|  |         # CNAME from nonblacklisted.com -> blacklisted.com | ||||||
|  |         # CNAME from blacklisted.com -> nonblacklisted.com | ||||||
|  |         if not validator.is_hostname_allowed(host): | ||||||
|  |             raise UnacceptableAddressException(host) | ||||||
|  |  | ||||||
|  |     err = None | ||||||
|  |     addrinfo = advocate_getaddrinfo(host, port, get_canonname=need_canonname) | ||||||
|  |     if addrinfo: | ||||||
|  |         if validator.autodetect_local_addresses: | ||||||
|  |             local_addresses = addrvalidator.determine_local_addresses() | ||||||
|  |         else: | ||||||
|  |             local_addresses = [] | ||||||
|  |         for res in addrinfo: | ||||||
|  |             # Are we allowed to connect with this result? | ||||||
|  |             if not validator.is_addrinfo_allowed( | ||||||
|  |                 res, | ||||||
|  |                 _local_addresses=local_addresses, | ||||||
|  |             ): | ||||||
|  |                 continue | ||||||
|  |             af, socktype, proto, canonname, sa = res | ||||||
|  |             # Unparse the validated IP | ||||||
|  |             sa = (sa[0].exploded,) + sa[1:] | ||||||
|  |             sock = None | ||||||
|  |             try: | ||||||
|  |                 sock = socket.socket(af, socktype, proto) | ||||||
|  |  | ||||||
|  |                 # If provided, set socket level options before connecting. | ||||||
|  |                 # This is the only addition urllib3 makes to this function. | ||||||
|  |                 _set_socket_options(sock, socket_options) | ||||||
|  |  | ||||||
|  |                 if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: | ||||||
|  |                     sock.settimeout(timeout) | ||||||
|  |                 if source_address: | ||||||
|  |                     sock.bind(source_address) | ||||||
|  |                 sock.connect(sa) | ||||||
|  |                 return sock | ||||||
|  |  | ||||||
|  |             except socket.error as _: | ||||||
|  |                 err = _ | ||||||
|  |                 if sock is not None: | ||||||
|  |                     sock.close() | ||||||
|  |                     sock = None | ||||||
|  |  | ||||||
|  |         if err is None: | ||||||
|  |             # If we got here, none of the results were acceptable | ||||||
|  |             err = UnacceptableAddressException(address) | ||||||
|  |     if err is not None: | ||||||
|  |         raise err | ||||||
|  |     else: | ||||||
|  |         raise socket.error("getaddrinfo returns an empty list") | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # TODO: Is there a better way to add this to multiple classes with different | ||||||
|  | # base classes? I tried a mixin, but it used the base method instead. | ||||||
|  | def _validating_new_conn(self): | ||||||
|  |     """ Establish a socket connection and set nodelay settings on it. | ||||||
|  |  | ||||||
|  |     :return: New socket connection. | ||||||
|  |     """ | ||||||
|  |     extra_kw = {} | ||||||
|  |     if self.source_address: | ||||||
|  |         extra_kw['source_address'] = self.source_address | ||||||
|  |  | ||||||
|  |     if self.socket_options: | ||||||
|  |         extra_kw['socket_options'] = self.socket_options | ||||||
|  |  | ||||||
|  |     try: | ||||||
|  |         # Hack around HTTPretty's patched sockets | ||||||
|  |         # TODO: some better method of hacking around it that checks if we | ||||||
|  |         # _would have_ connected to a private addr? | ||||||
|  |         conn_func = validating_create_connection | ||||||
|  |         if socket.getaddrinfo.__module__.startswith("httpretty"): | ||||||
|  |             conn_func = old_create_connection | ||||||
|  |         else: | ||||||
|  |             extra_kw["validator"] = self._validator | ||||||
|  |  | ||||||
|  |         conn = conn_func( | ||||||
|  |             (self.host, self.port), | ||||||
|  |             self.timeout, | ||||||
|  |             **extra_kw | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     except SocketTimeout: | ||||||
|  |         raise ConnectTimeoutError( | ||||||
|  |             self, "Connection to %s timed out. (connect timeout=%s)" % | ||||||
|  |             (self.host, self.timeout)) | ||||||
|  |  | ||||||
|  |     return conn | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Don't silently break if the private API changes across urllib3 versions | ||||||
|  | assert(hasattr(HTTPConnection, '_new_conn')) | ||||||
|  | assert(hasattr(HTTPSConnection, '_new_conn')) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ValidatingHTTPConnection(HTTPConnection): | ||||||
|  |     _new_conn = _validating_new_conn | ||||||
|  |  | ||||||
|  |     def __init__(self, *args, **kwargs): | ||||||
|  |         self._validator = kwargs.pop("validator") | ||||||
|  |         HTTPConnection.__init__(self, *args, **kwargs) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ValidatingHTTPSConnection(HTTPSConnection): | ||||||
|  |     _new_conn = _validating_new_conn | ||||||
|  |  | ||||||
|  |     def __init__(self, *args, **kwargs): | ||||||
|  |         self._validator = kwargs.pop("validator") | ||||||
|  |         HTTPSConnection.__init__(self, *args, **kwargs) | ||||||
							
								
								
									
										39
									
								
								cps/cw_advocate/connectionpool.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								cps/cw_advocate/connectionpool.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | |||||||
|  | # | ||||||
|  | # Copyright 2015 Jordan Milne | ||||||
|  | # | ||||||
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | # you may not use this file except in compliance with the License. | ||||||
|  | # You may obtain a copy of the License at | ||||||
|  | # | ||||||
|  | #     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | # | ||||||
|  | # Unless required by applicable law or agreed to in writing, software | ||||||
|  | # distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | # See the License for the specific language governing permissions and | ||||||
|  | # limitations under the License. | ||||||
|  | # | ||||||
|  | # Source: https://github.com/JordanMilne/Advocate | ||||||
|  |  | ||||||
|  | from urllib3 import HTTPConnectionPool, HTTPSConnectionPool | ||||||
|  |  | ||||||
|  | from .connection import ( | ||||||
|  |     ValidatingHTTPConnection, | ||||||
|  |     ValidatingHTTPSConnection, | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | # Don't silently break if the private API changes across urllib3 versions | ||||||
|  | assert(hasattr(HTTPConnectionPool, 'ConnectionCls')) | ||||||
|  | assert(hasattr(HTTPSConnectionPool, 'ConnectionCls')) | ||||||
|  | assert(hasattr(HTTPConnectionPool, 'scheme')) | ||||||
|  | assert(hasattr(HTTPSConnectionPool, 'scheme')) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ValidatingHTTPConnectionPool(HTTPConnectionPool): | ||||||
|  |     scheme = 'http' | ||||||
|  |     ConnectionCls = ValidatingHTTPConnection | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ValidatingHTTPSConnectionPool(HTTPSConnectionPool): | ||||||
|  |     scheme = 'https' | ||||||
|  |     ConnectionCls = ValidatingHTTPSConnection | ||||||
							
								
								
									
										39
									
								
								cps/cw_advocate/exceptions.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								cps/cw_advocate/exceptions.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | |||||||
|  | # | ||||||
|  | # Copyright 2015 Jordan Milne | ||||||
|  | # | ||||||
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | # you may not use this file except in compliance with the License. | ||||||
|  | # You may obtain a copy of the License at | ||||||
|  | # | ||||||
|  | #     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | # | ||||||
|  | # Unless required by applicable law or agreed to in writing, software | ||||||
|  | # distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | # See the License for the specific language governing permissions and | ||||||
|  | # limitations under the License. | ||||||
|  | # | ||||||
|  | # Source: https://github.com/JordanMilne/Advocate | ||||||
|  |  | ||||||
|  | class AdvocateException(Exception): | ||||||
|  |     pass | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class UnacceptableAddressException(AdvocateException): | ||||||
|  |     pass | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class NameserverException(AdvocateException): | ||||||
|  |     pass | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class MountDisabledException(AdvocateException): | ||||||
|  |     pass | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ProxyDisabledException(NotImplementedError, AdvocateException): | ||||||
|  |     pass | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ConfigException(AdvocateException): | ||||||
|  |     pass | ||||||
							
								
								
									
										61
									
								
								cps/cw_advocate/poolmanager.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								cps/cw_advocate/poolmanager.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | |||||||
|  | # | ||||||
|  | # Copyright 2015 Jordan Milne | ||||||
|  | # | ||||||
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | # you may not use this file except in compliance with the License. | ||||||
|  | # You may obtain a copy of the License at | ||||||
|  | # | ||||||
|  | #     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | # | ||||||
|  | # Unless required by applicable law or agreed to in writing, software | ||||||
|  | # distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | # See the License for the specific language governing permissions and | ||||||
|  | # limitations under the License. | ||||||
|  | # | ||||||
|  | # Source: https://github.com/JordanMilne/Advocate | ||||||
|  |  | ||||||
|  | import collections | ||||||
|  | import functools | ||||||
|  |  | ||||||
|  | from urllib3 import PoolManager | ||||||
|  | from urllib3.poolmanager import _default_key_normalizer, PoolKey | ||||||
|  |  | ||||||
|  | from .connectionpool import ( | ||||||
|  |     ValidatingHTTPSConnectionPool, | ||||||
|  |     ValidatingHTTPConnectionPool, | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | pool_classes_by_scheme = { | ||||||
|  |     "http": ValidatingHTTPConnectionPool, | ||||||
|  |     "https": ValidatingHTTPSConnectionPool, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | AdvocatePoolKey = collections.namedtuple('AdvocatePoolKey', | ||||||
|  |                                          PoolKey._fields + ('key_validator',)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def key_normalizer(key_class, request_context): | ||||||
|  |     request_context = request_context.copy() | ||||||
|  |     # TODO: add ability to serialize validator rules to dict, | ||||||
|  |     # allowing pool to be shared between sessions with the same | ||||||
|  |     # rules. | ||||||
|  |     request_context["validator"] = id(request_context["validator"]) | ||||||
|  |     return _default_key_normalizer(key_class, request_context) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | key_fn_by_scheme = { | ||||||
|  |     'http': functools.partial(key_normalizer, AdvocatePoolKey), | ||||||
|  |     'https': functools.partial(key_normalizer, AdvocatePoolKey), | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ValidatingPoolManager(PoolManager): | ||||||
|  |     def __init__(self, *args, **kwargs): | ||||||
|  |         super().__init__(*args, **kwargs) | ||||||
|  |  | ||||||
|  |         # Make sure the API hasn't changed | ||||||
|  |         assert (hasattr(self, 'pool_classes_by_scheme')) | ||||||
|  |  | ||||||
|  |         self.pool_classes_by_scheme = pool_classes_by_scheme | ||||||
|  |         self.key_fn_by_scheme = key_fn_by_scheme.copy() | ||||||
| @@ -43,10 +43,10 @@ from markupsafe import escape | |||||||
| from urllib.parse import quote | from urllib.parse import quote | ||||||
|  |  | ||||||
| try: | try: | ||||||
|     import advocate |     from . import cw_advocate | ||||||
|     from advocate.exceptions import UnacceptableAddressException |     from .cw_advocate.exceptions import UnacceptableAddressException | ||||||
|     use_advocate = True |     use_advocate = True | ||||||
| except ImportError: | except ImportError as e: | ||||||
|     use_advocate = False |     use_advocate = False | ||||||
|     advocate = requests |     advocate = requests | ||||||
|     UnacceptableAddressException = MissingSchema = BaseException |     UnacceptableAddressException = MissingSchema = BaseException | ||||||
| @@ -841,7 +841,7 @@ def save_cover_from_url(url, book_path): | |||||||
|         if cli_param.allow_localhost: |         if cli_param.allow_localhost: | ||||||
|             img = requests.get(url, timeout=(10, 200), allow_redirects=False)  # ToDo: Error Handling |             img = requests.get(url, timeout=(10, 200), allow_redirects=False)  # ToDo: Error Handling | ||||||
|         elif use_advocate: |         elif use_advocate: | ||||||
|             img = advocate.get(url, timeout=(10, 200), allow_redirects=False)      # ToDo: Error Handling |             img = cw_advocate.get(url, timeout=(10, 200), allow_redirects=False)      # ToDo: Error Handling | ||||||
|         else: |         else: | ||||||
|             log.error("python module advocate is not installed but is needed") |             log.error("python module advocate is not installed but is needed") | ||||||
|             return False, _("Python module 'advocate' is not installed but is needed for cover uploads") |             return False, _("Python module 'advocate' is not installed but is needed for cover uploads") | ||||||
|   | |||||||
| @@ -15,5 +15,5 @@ | |||||||
|  |  | ||||||
| .blackTheme { | .blackTheme { | ||||||
| 	background: #000; | 	background: #000; | ||||||
| 	color: #fff | 	color: #fff; | ||||||
| } | } | ||||||
							
								
								
									
										1
									
								
								cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sl.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sl.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | !function(a){a.fn.datepicker.dates.sl={days:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],daysShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],daysMin:["Ne","Po","To","Sr","Če","Pe","So"],months:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danes",weekStart:1}}(jQuery); | ||||||
| @@ -135,19 +135,23 @@ | |||||||
|         window.themes = { |         window.themes = { | ||||||
|             "darkTheme": { |             "darkTheme": { | ||||||
|                 "bgColor": "#202124", |                 "bgColor": "#202124", | ||||||
|                 "css_path": "{{ url_for('static', filename='css/epub_themes.css') }}" |                 "css_path": "{{ url_for('static', filename='css/epub_themes.css') }}", | ||||||
|  |                 "title-color": "#fff" | ||||||
|             }, |             }, | ||||||
|             "lightTheme": { |             "lightTheme": { | ||||||
|                 "bgColor": "white", |                 "bgColor": "white", | ||||||
|                 "css_path": "{{ url_for('static', filename='css/epub_themes.css') }}" |                 "css_path": "{{ url_for('static', filename='css/epub_themes.css') }}", | ||||||
|  |                 "title-color": "#4f4f4f" | ||||||
|             }, |             }, | ||||||
|             "sepiaTheme": { |             "sepiaTheme": { | ||||||
|                 "bgColor": "#ece1ca", |                 "bgColor": "#ece1ca", | ||||||
|                 "css_path": "{{ url_for('static', filename='css/epub_themes.css') }}" |                 "css_path": "{{ url_for('static', filename='css/epub_themes.css') }}", | ||||||
|  |                 "title-color": "#4f4f4f" | ||||||
|             }, |             }, | ||||||
|             "blackTheme": { |             "blackTheme": { | ||||||
|                 "bgColor": "black", |                 "bgColor": "black", | ||||||
|                 "css_path": "{{ url_for('static', filename='css/epub_themes.css') }}" |                 "css_path": "{{ url_for('static', filename='css/epub_themes.css') }}", | ||||||
|  |                 "title-color": "#fff" | ||||||
|             }, |             }, | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
| @@ -170,6 +174,7 @@ | |||||||
|  |  | ||||||
|             // Apply theme to rest of the page.  |             // Apply theme to rest of the page.  | ||||||
|             document.getElementById("main").style.backgroundColor = themes[id]["bgColor"]; |             document.getElementById("main").style.backgroundColor = themes[id]["bgColor"]; | ||||||
|  |             document.getElementById("titlebar").style.color = themes[id]["title-color"] || "#fff"; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // font size settings logic |         // font size settings logic | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -6,7 +6,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2020-06-09 21:11+0100\n" | "PO-Revision-Date: 2020-06-09 21:11+0100\n" | ||||||
| "Last-Translator: Lukas Heroudek <lukas.heroudek@gmail.com>\n" | "Last-Translator: Lukas Heroudek <lukas.heroudek@gmail.com>\n" | ||||||
| "Language: cs_CZ\n" | "Language: cs_CZ\n" | ||||||
| @@ -749,121 +749,121 @@ msgstr "Mazání knihy selhalo %(id)s failed: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Mazání knihy %(id)s, cesta ke knize není platná %(path)s" | msgstr "Mazání knihy %(id)s, cesta ke knize není platná %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Přejmenování názvu z: '%(src)s' na '%(dest)s'  selhalo chybou: %(error)s" | msgstr "Přejmenování názvu z: '%(src)s' na '%(dest)s'  selhalo chybou: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Soubor %(file)s nenalezen na Google Drive" | msgstr "Soubor %(file)s nenalezen na Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Přejmenování názvu z: '%(src)s' na '%(dest)s'  selhalo chybou: %(error)s" | msgstr "Přejmenování názvu z: '%(src)s' na '%(dest)s'  selhalo chybou: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Cesta ke knize %(path)s nebyla nalezena na Google Drive" | msgstr "Cesta ke knize %(path)s nebyla nalezena na Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Zadané uživatelské jméno je již použito" | msgstr "Zadané uživatelské jméno je již použito" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Chyba stahování obalu" | msgstr "Chyba stahování obalu" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Chyba formátu obalu" | msgstr "Chyba formátu obalu" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Vytvoření cesty obalu selhalo" | msgstr "Vytvoření cesty obalu selhalo" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "Soubor obalu není platný, nebo nelze uložit" | msgstr "Soubor obalu není platný, nebo nelze uložit" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Pouze jpg/jpeg jsou podporované soubory pro obal" | msgstr "Pouze jpg/jpeg jsou podporované soubory pro obal" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Objevte" | msgstr "Objevte" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "UnRar binární soubor nenalezen" | msgstr "UnRar binární soubor nenalezen" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Chyba provádění UnRar" | msgstr "Chyba provádění UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "Databáze není zapisovatelná" | msgstr "Databáze není zapisovatelná" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Chybí povolení k exekuci" | msgstr "Chybí povolení k exekuci" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Chyba provádění UnRar" | msgstr "Chyba provádění UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2024-08-17 13:49+0200\n" | "PO-Revision-Date: 2024-08-17 13:49+0200\n" | ||||||
| "Last-Translator: Ozzie Isaacs\n" | "Last-Translator: Ozzie Isaacs\n" | ||||||
| "Language: de\n" | "Language: de\n" | ||||||
| @@ -730,117 +730,117 @@ msgstr "Löschen von Buch %(id)s fehlgeschlagen: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Lösche Buch %(id)s nur aus Datenbank, Pfad zum Buch in Datenbank ist nicht gültig: %(path)s" | msgstr "Lösche Buch %(id)s nur aus Datenbank, Pfad zum Buch in Datenbank ist nicht gültig: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Umbenennen des Autors '%(src)s' zu '%(dest)s' schlug fehl: %(error)s" | msgstr "Umbenennen des Autors '%(src)s' zu '%(dest)s' schlug fehl: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Datei %(file)s wurde nicht auf Google Drive gefunden" | msgstr "Datei %(file)s wurde nicht auf Google Drive gefunden" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Umbenennen des Titels '%(src)s' zu '%(dest)s' schlug fehl: %(error)s" | msgstr "Umbenennen des Titels '%(src)s' zu '%(dest)s' schlug fehl: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Buchpfad %(path)s wurde nicht auf Google Drive gefunden" | msgstr "Buchpfad %(path)s wurde nicht auf Google Drive gefunden" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "Es existiert bereits ein Benutzerkonto für diese E-Mail Adresse" | msgstr "Es existiert bereits ein Benutzerkonto für diese E-Mail Adresse" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Benutzername ist schon vorhanden" | msgstr "Benutzername ist schon vorhanden" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Ungültiges E-Mail Adressformat" | msgstr "Ungültiges E-Mail Adressformat" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "Passwort stimmt nicht mit den Passwortregln überein" | msgstr "Passwort stimmt nicht mit den Passwortregln überein" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "Python Module 'advocate' ist nicht installiert, wird aber für das Cover hochladen benötigt" | msgstr "Python Module 'advocate' ist nicht installiert, wird aber für das Cover hochladen benötigt" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Fehler beim Herunterladen des Covers" | msgstr "Fehler beim Herunterladen des Covers" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Coverdatei fehlerhaft" | msgstr "Coverdatei fehlerhaft" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "Keine Berechtigung Cover von Localhost oder dem lokalen Netzwerk hochzuladen" | msgstr "Keine Berechtigung Cover von Localhost oder dem lokalen Netzwerk hochzuladen" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Fehler beim Erzeugen des Ordners für die Coverdatei" | msgstr "Fehler beim Erzeugen des Ordners für die Coverdatei" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "Cover Datei ist keine gültige Bilddatei, kann nicht gespeichert werden" | msgstr "Cover Datei ist keine gültige Bilddatei, kann nicht gespeichert werden" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "Nur jpg/jpeg/png/webp/bmp Dateien werden als Coverdatei unterstützt" | msgstr "Nur jpg/jpeg/png/webp/bmp Dateien werden als Coverdatei unterstützt" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "Ungültiger Cover Dateiinhalt" | msgstr "Ungültiger Cover Dateiinhalt" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Es werden nur jpg/jpeg Dateien als Cover untertützt" | msgstr "Es werden nur jpg/jpeg Dateien als Cover untertützt" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Titelbild" | msgstr "Titelbild" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "UnRar Programm nicht gefunden" | msgstr "UnRar Programm nicht gefunden" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Fehler beim Ausführen von UnRar" | msgstr "Fehler beim Ausführen von UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "Angegebener Ordner konnte nicht gefunden werden" | msgstr "Angegebener Ordner konnte nicht gefunden werden" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "Bitte keine Datei sondern einen Ordner angeben" | msgstr "Bitte keine Datei sondern einen Ordner angeben" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "Calibre Programm ist nicht nutzbar" | msgstr "Calibre Programm ist nicht nutzbar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "Fehlende Calibre Binärdateien: %(missing)s" | msgstr "Fehlende Calibre Binärdateien: %(missing)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Ausführeberechtigung fehlt: %(missing)s" | msgstr "Ausführeberechtigung fehlt: %(missing)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Fehler beim Ausführen von Calibre" | msgstr "Fehler beim Ausführen von Calibre" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "Alle Bücher für Metadaten Backup einreihen" | msgstr "Alle Bücher für Metadaten Backup einreihen" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -6,7 +6,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||||
| "Last-Translator: Depountis Georgios\n" | "Last-Translator: Depountis Georgios\n" | ||||||
| "Language: el\n" | "Language: el\n" | ||||||
| @@ -749,121 +749,121 @@ msgstr "Η διαγραφή βιβλίου %(id)s απέτυχε: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Διαγραφή βιβλίου %(id)s, η πορεία βιβλίου δεν είναι έγκυρη: %(path)s" | msgstr "Διαγραφή βιβλίου %(id)s, η πορεία βιβλίου δεν είναι έγκυρη: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Η μετονομασία τίτλου από: '%(src)s' σε '%(dest)s' απέτυχε με σφάλμα: %(error)s" | msgstr "Η μετονομασία τίτλου από: '%(src)s' σε '%(dest)s' απέτυχε με σφάλμα: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Το αρχείο %(file)s δεν βρέθηκε στο Google Drive" | msgstr "Το αρχείο %(file)s δεν βρέθηκε στο Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Η μετονομασία τίτλου από: '%(src)s' σε '%(dest)s' απέτυχε με σφάλμα: %(error)s" | msgstr "Η μετονομασία τίτλου από: '%(src)s' σε '%(dest)s' απέτυχε με σφάλμα: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Η πορεία βιβλίου %(path)s δεν βρέθηκε στο Google Drive" | msgstr "Η πορεία βιβλίου %(path)s δεν βρέθηκε στο Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Αυτό το όνομα χρήστη έχει ήδη παρθεί" | msgstr "Αυτό το όνομα χρήστη έχει ήδη παρθεί" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Σφάλμα Κατεβάσματος Φόντου" | msgstr "Σφάλμα Κατεβάσματος Φόντου" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Σφάλμα Μορφής Φόντου" | msgstr "Σφάλμα Μορφής Φόντου" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Αποτυχία δημιουργίας πορείας για φόντο" | msgstr "Αποτυχία δημιουργίας πορείας για φόντο" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "Το αρχείο φόντου δεν είναι ένα έγκυρο αρχείο εικόνας, ή δεν μπόρεσε να αποθηκευτεί" | msgstr "Το αρχείο φόντου δεν είναι ένα έγκυρο αρχείο εικόνας, ή δεν μπόρεσε να αποθηκευτεί" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Μόνο jpg/jpeg αρχεία υποστηρίζονται ως αρχεία φόντου" | msgstr "Μόνο jpg/jpeg αρχεία υποστηρίζονται ως αρχεία φόντου" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Ανακάλυψε" | msgstr "Ανακάλυψε" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "Δεν βρέθηκε δυαδικό αρχείο UnRar" | msgstr "Δεν βρέθηκε δυαδικό αρχείο UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Σφάλμα εκτέλεσης UnRar" | msgstr "Σφάλμα εκτέλεσης UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "Η DB δεν μπορεί να Γραφτεί" | msgstr "Η DB δεν μπορεί να Γραφτεί" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Λείπουν άδειες εκτέλεσης" | msgstr "Λείπουν άδειες εκτέλεσης" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Σφάλμα εκτέλεσης UnRar" | msgstr "Σφάλμα εκτέλεσης UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -9,7 +9,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2020-05-25 17:22+0200\n" | "PO-Revision-Date: 2020-05-25 17:22+0200\n" | ||||||
| "Last-Translator: minakmostoles <xxx@xxx.com>\n" | "Last-Translator: minakmostoles <xxx@xxx.com>\n" | ||||||
| "Language: es\n" | "Language: es\n" | ||||||
| @@ -753,122 +753,122 @@ msgstr "El eliminado del libro %(id)s falló: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Borrando el libro %(id)s, la ruta del libro es no válida: %(path)s" | msgstr "Borrando el libro %(id)s, la ruta del libro es no válida: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "El renombrado del título de: '%(src)s' a '%(dest)s' falló con el error: %(error)s" | msgstr "El renombrado del título de: '%(src)s' a '%(dest)s' falló con el error: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Fichero %(file)s no encontrado en Google Drive" | msgstr "Fichero %(file)s no encontrado en Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "El renombrado del título de: '%(src)s' a '%(dest)s' falló con el error: %(error)s" | msgstr "El renombrado del título de: '%(src)s' a '%(dest)s' falló con el error: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "La ruta %(path)s del libro no fue encontrada en Google Drive" | msgstr "La ruta %(path)s del libro no fue encontrada en Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Este nombre de usuario ya está en uso" | msgstr "Este nombre de usuario ya está en uso" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Dirección de correo no válida" | msgstr "Dirección de correo no válida" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Error al descargar la cubierta" | msgstr "Error al descargar la cubierta" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Error en el formato de la cubierta" | msgstr "Error en el formato de la cubierta" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Error al crear una ruta para la cubierta" | msgstr "Error al crear una ruta para la cubierta" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "El archivo de cubierta no es una imágen válida" | msgstr "El archivo de cubierta no es una imágen válida" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "Sólo se admiten como portada los archivos jpg/jpeg/png/webp/bmp" | msgstr "Sólo se admiten como portada los archivos jpg/jpeg/png/webp/bmp" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Sólo se admiten como portada los archivos jpg/jpeg" | msgstr "Sólo se admiten como portada los archivos jpg/jpeg" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Descubrir" | msgstr "Descubrir" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "No se encuentra el archivo binario UnRar" | msgstr "No se encuentra el archivo binario UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Error ejecutando UnRar" | msgstr "Error ejecutando UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "La base de datos no es modificable" | msgstr "La base de datos no es modificable" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Faltan permisos de ejecución" | msgstr "Faltan permisos de ejecución" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Error ejecutando UnRar" | msgstr "Error ejecutando UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2020-01-12 13:56+0100\n" | "PO-Revision-Date: 2020-01-12 13:56+0100\n" | ||||||
| "Last-Translator: Samuli Valavuo <svalavuo@gmail.com>\n" | "Last-Translator: Samuli Valavuo <svalavuo@gmail.com>\n" | ||||||
| "Language: fi\n" | "Language: fi\n" | ||||||
| @@ -747,118 +747,118 @@ msgstr "" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Tiedon muuttaminen arvosta: '%(src)s' arvoon '%(dest)s' epäonnistui virheeseen: %(error)s" | msgstr "Tiedon muuttaminen arvosta: '%(src)s' arvoon '%(dest)s' epäonnistui virheeseen: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Tiedostoa %(file)s ei löytynyt Google Drivesta" | msgstr "Tiedostoa %(file)s ei löytynyt Google Drivesta" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Tiedon muuttaminen arvosta: '%(src)s' arvoon '%(dest)s' epäonnistui virheeseen: %(error)s" | msgstr "Tiedon muuttaminen arvosta: '%(src)s' arvoon '%(dest)s' epäonnistui virheeseen: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Kirjan polkua %(path)s ei löytynyt Google Drivesta" | msgstr "Kirjan polkua %(path)s ei löytynyt Google Drivesta" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Löydä" | msgstr "Löydä" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -22,7 +22,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2020-06-07 06:47+0200\n" | "PO-Revision-Date: 2020-06-07 06:47+0200\n" | ||||||
| "Last-Translator: <thovi98@gmail.com>\n" | "Last-Translator: <thovi98@gmail.com>\n" | ||||||
| "Language: fr\n" | "Language: fr\n" | ||||||
| @@ -765,122 +765,122 @@ msgstr "La suppression du livre %(id)s a échoué: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Suppression du livre %(id)s, le chemin du livre est invalide : %(path)s" | msgstr "Suppression du livre %(id)s, le chemin du livre est invalide : %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Renommer le titre de : '%(src)s' à '%(dest)s' a échoué avec l’erreur : %(error)s" | msgstr "Renommer le titre de : '%(src)s' à '%(dest)s' a échoué avec l’erreur : %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Le fichier %(file)s n'a pas été trouvé dans Google Drive" | msgstr "Le fichier %(file)s n'a pas été trouvé dans Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Renommer le titre de : '%(src)s' à '%(dest)s' a échoué avec l’erreur : %(error)s" | msgstr "Renommer le titre de : '%(src)s' à '%(dest)s' a échoué avec l’erreur : %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Le chemin du livre %(path)s n'a pas été trouvé dans Google Drive" | msgstr "Le chemin du livre %(path)s n'a pas été trouvé dans Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Cet utilisateur est déjà pris" | msgstr "Cet utilisateur est déjà pris" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Format de l’adresse courriel invalide" | msgstr "Format de l’adresse courriel invalide" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Erreur lors du téléchargement de la couverture" | msgstr "Erreur lors du téléchargement de la couverture" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Erreur de format de couverture" | msgstr "Erreur de format de couverture" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Impossible de créer le chemin pour la couverture" | msgstr "Impossible de créer le chemin pour la couverture" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "Le fichier couverture n'est pas un fichier image valide, ou ne peut pas être stocké" | msgstr "Le fichier couverture n'est pas un fichier image valide, ou ne peut pas être stocké" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "Seuls les fichiers jpg/jpeg/png/webp/bmp sont supportés comme fichier de couverture" | msgstr "Seuls les fichiers jpg/jpeg/png/webp/bmp sont supportés comme fichier de couverture" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "Contenu du fichier de couverture invalide" | msgstr "Contenu du fichier de couverture invalide" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Seuls les fichiers jpg/jpeg sont supportés comme fichier de couverture" | msgstr "Seuls les fichiers jpg/jpeg sont supportés comme fichier de couverture" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Découvrir" | msgstr "Découvrir" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "Fichier binaire UnRar non trouvé" | msgstr "Fichier binaire UnRar non trouvé" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Une erreur est survenue lors de l'exécution d'UnRar" | msgstr "Une erreur est survenue lors de l'exécution d'UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "La base de données n'est pas accessible en écriture" | msgstr "La base de données n'est pas accessible en écriture" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Les permissions d'exécutions manquantes" | msgstr "Les permissions d'exécutions manquantes" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Une erreur est survenue lors de l'exécution d'UnRar" | msgstr "Une erreur est survenue lors de l'exécution d'UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -5,7 +5,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2022-08-11 16:46+0200\n" | "PO-Revision-Date: 2022-08-11 16:46+0200\n" | ||||||
| "Last-Translator: pollitor <pollitor@gmx.com>\n" | "Last-Translator: pollitor <pollitor@gmx.com>\n" | ||||||
| "Language: gl\n" | "Language: gl\n" | ||||||
| @@ -736,121 +736,121 @@ msgstr "O borrado do libro %(id)s fallou: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Borrando o libro %(id)s, a ruta de libro non é válida: %(path)s" | msgstr "Borrando o libro %(id)s, a ruta de libro non é válida: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "O renomeado do título de: '%(src)s' a '%(dest)s' fallou co erro: %(error)s" | msgstr "O renomeado do título de: '%(src)s' a '%(dest)s' fallou co erro: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Ficheiro %(file)s non atopado en Google Drive" | msgstr "Ficheiro %(file)s non atopado en Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "O renomeado do título de: '%(src)s' a '%(dest)s' fallou co erro: %(error)s" | msgstr "O renomeado do título de: '%(src)s' a '%(dest)s' fallou co erro: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "A ruta %(path)s do libro non se atopou en Google Drive" | msgstr "A ruta %(path)s do libro non se atopou en Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Este nome de usuario xa está en uso" | msgstr "Este nome de usuario xa está en uso" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Enderezo de correo non válido" | msgstr "Enderezo de correo non válido" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "O módulo Python 'advocate' non está instalado pero se necesita para as cargas de cubertas" | msgstr "O módulo Python 'advocate' non está instalado pero se necesita para as cargas de cubertas" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Erro ao descargar a cuberta" | msgstr "Erro ao descargar a cuberta" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Erro no formato da cuberta" | msgstr "Erro no formato da cuberta" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "Non ten permiso para acceder a localhost ou á rede local para as cargas de cubertas" | msgstr "Non ten permiso para acceder a localhost ou á rede local para as cargas de cubertas" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Erro ao crear unha ruta para a cuberta" | msgstr "Erro ao crear unha ruta para a cuberta" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "O arquivo de cuberta non é unha imaxe válida" | msgstr "O arquivo de cuberta non é unha imaxe válida" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "Soamente se admiten como cuberta os arquivos jpg/jpeg/png/webp/bmp" | msgstr "Soamente se admiten como cuberta os arquivos jpg/jpeg/png/webp/bmp" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "Contido do arquivo de cuberta non válido" | msgstr "Contido do arquivo de cuberta non válido" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Soamente se admiten como cuberta os arquivos jpg/jpeg" | msgstr "Soamente se admiten como cuberta os arquivos jpg/jpeg" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Descubrir" | msgstr "Descubrir" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "Non se atopa o arquivo binario de UnRar" | msgstr "Non se atopa o arquivo binario de UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Erro executando UnRar" | msgstr "Erro executando UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "A base de datos non é modificable" | msgstr "A base de datos non é modificable" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Faltan permisos de execución" | msgstr "Faltan permisos de execución" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Erro executando UnRar" | msgstr "Erro executando UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: PROJECT VERSION\n" | "Project-Id-Version: PROJECT VERSION\n" | ||||||
| "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2019-04-06 23:36+0200\n" | "PO-Revision-Date: 2019-04-06 23:36+0200\n" | ||||||
| "Last-Translator: \n" | "Last-Translator: \n" | ||||||
| "Language: hu\n" | "Language: hu\n" | ||||||
| @@ -746,118 +746,118 @@ msgstr "" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "A cím átnevezése \"%(src)s\"-ról \"%(dest)s\"-ra nem sikerült a következő hiba miatt: %(error)s" | msgstr "A cím átnevezése \"%(src)s\"-ról \"%(dest)s\"-ra nem sikerült a következő hiba miatt: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "A \"%(file)s\" fájl nem található a Google Drive-on" | msgstr "A \"%(file)s\" fájl nem található a Google Drive-on" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "A cím átnevezése \"%(src)s\"-ról \"%(dest)s\"-ra nem sikerült a következő hiba miatt: %(error)s" | msgstr "A cím átnevezése \"%(src)s\"-ról \"%(dest)s\"-ra nem sikerült a következő hiba miatt: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "A könyv elérési útja (\"%(path)s\") nem található a Google Drive-on" | msgstr "A könyv elérési útja (\"%(path)s\") nem található a Google Drive-on" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Felfedezés" | msgstr "Felfedezés" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2023-01-21 10:00+0700\n" | "PO-Revision-Date: 2023-01-21 10:00+0700\n" | ||||||
| "Last-Translator: Arief Hidayat<arihid95@gmail.com>\n" | "Last-Translator: Arief Hidayat<arihid95@gmail.com>\n" | ||||||
| "Language: id\n" | "Language: id\n" | ||||||
| @@ -738,122 +738,122 @@ msgstr "Gagal menghapus buku %(id)s: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Menghapus buku %(id)s hanya dari basis data, jalur buku di basis data tidak valid: %(path)s" | msgstr "Menghapus buku %(id)s hanya dari basis data, jalur buku di basis data tidak valid: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Ganti nama pengarang dari: '%(src)s' menjadi '%(dest)s' gagal dengan kesalahan: %(error)s" | msgstr "Ganti nama pengarang dari: '%(src)s' menjadi '%(dest)s' gagal dengan kesalahan: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Berkas %(file)s tidak ditemukan di Google Drive" | msgstr "Berkas %(file)s tidak ditemukan di Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Ganti nama judul dari: '%(src)s' menjadi '%(dest)s' gagal dengan kesalahan: %(error)s" | msgstr "Ganti nama judul dari: '%(src)s' menjadi '%(dest)s' gagal dengan kesalahan: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Jalur buku %(path)s tidak ditemukan di Google Drive" | msgstr "Jalur buku %(path)s tidak ditemukan di Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Nama pengguna ini sudah digunakan" | msgstr "Nama pengguna ini sudah digunakan" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Format alamat email tidak valid" | msgstr "Format alamat email tidak valid" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "Modul 'advocate' Python tidak diinstal tetapi diperlukan untuk unggahan sampul" | msgstr "Modul 'advocate' Python tidak diinstal tetapi diperlukan untuk unggahan sampul" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Kesalahan Mengunduh Sampul" | msgstr "Kesalahan Mengunduh Sampul" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Kesalahan Format Sampul" | msgstr "Kesalahan Format Sampul" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "Anda tidak diizinkan mengakses localhost atau jaringan lokal untuk unggahan sampul" | msgstr "Anda tidak diizinkan mengakses localhost atau jaringan lokal untuk unggahan sampul" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Gagal membuat jalur untuk sampul" | msgstr "Gagal membuat jalur untuk sampul" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "Berkas sampul bukan berkas gambar yang valid, atau tidak dapat disimpan" | msgstr "Berkas sampul bukan berkas gambar yang valid, atau tidak dapat disimpan" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "Hanya berkas jpg/jpeg/png/webp/bmp yang didukung sebagai berkas sampul" | msgstr "Hanya berkas jpg/jpeg/png/webp/bmp yang didukung sebagai berkas sampul" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "Konten berkas sampul tidak valid" | msgstr "Konten berkas sampul tidak valid" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Hanya berkas jpg/jpeg yang didukung sebagai berkas sampul" | msgstr "Hanya berkas jpg/jpeg yang didukung sebagai berkas sampul" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Sampul" | msgstr "Sampul" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "Berkas biner unrar tidak ditemukan" | msgstr "Berkas biner unrar tidak ditemukan" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Kesalahan saat menjalankan UnRar" | msgstr "Kesalahan saat menjalankan UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "Basis Data tidak dapat ditulisi" | msgstr "Basis Data tidak dapat ditulisi" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Izin eksekusi hilang" | msgstr "Izin eksekusi hilang" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Kesalahan saat menjalankan UnRar" | msgstr "Kesalahan saat menjalankan UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "Antrian semua buku untuk cadangan metadata" | msgstr "Antrian semua buku untuk cadangan metadata" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2024-08-24 05:32+0200\n" | "PO-Revision-Date: 2024-08-24 05:32+0200\n" | ||||||
| "Last-Translator: Massimo Pissarello <mapi68@gmail.com>\n" | "Last-Translator: Massimo Pissarello <mapi68@gmail.com>\n" | ||||||
| "Language: it\n" | "Language: it\n" | ||||||
| @@ -730,117 +730,117 @@ msgstr "Eliminazione del libro %(id)s non riuscita: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Eliminazione del libro %(id)s solo dal database, percorso del libro nel database non valido: %(path)s" | msgstr "Eliminazione del libro %(id)s solo dal database, percorso del libro nel database non valido: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "La modifica dell'autore da '%(src)s' a '%(dest)s' è terminata con l'errore: %(error)s" | msgstr "La modifica dell'autore da '%(src)s' a '%(dest)s' è terminata con l'errore: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Il file %(file) non è stato trovato su Google Drive" | msgstr "Il file %(file) non è stato trovato su Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "La modifica del titolo da '%(src)s' a '%(dest)s' è terminata con l'errore: %(error)s" | msgstr "La modifica del titolo da '%(src)s' a '%(dest)s' è terminata con l'errore: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Il percorso del libro %(path)s non è stato trovato su Google Drive" | msgstr "Il percorso del libro %(path)s non è stato trovato su Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "Trovato un account esistente per questo indirizzo e-mail" | msgstr "Trovato un account esistente per questo indirizzo e-mail" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Questo nome utente è già utilizzato" | msgstr "Questo nome utente è già utilizzato" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Formato dell'indirizzo e-mail non valido" | msgstr "Formato dell'indirizzo e-mail non valido" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "La password non è conforme alle regole di convalida della password" | msgstr "La password non è conforme alle regole di convalida della password" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "Il modulo Python \"advocate\" non è installato ma è necessario per il caricamento delle copertine" | msgstr "Il modulo Python \"advocate\" non è installato ma è necessario per il caricamento delle copertine" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Errore nello scaricare la copertina" | msgstr "Errore nello scaricare la copertina" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Errore nel formato della copertina" | msgstr "Errore nel formato della copertina" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "Non ti è consentito accedere all'host locale o alla rete locale per caricare le copertine" | msgstr "Non ti è consentito accedere all'host locale o alla rete locale per caricare le copertine" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Impossibile creare il percorso per la copertina" | msgstr "Impossibile creare il percorso per la copertina" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "Il file della copertina non è in un formato di immagine valido o non può essere salvato" | msgstr "Il file della copertina non è in un formato di immagine valido o non può essere salvato" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "Solo i file jpg/jpeg/png/webp/bmp sono supportati come file di copertina" | msgstr "Solo i file jpg/jpeg/png/webp/bmp sono supportati come file di copertina" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "Contenuto del file di copertina non valido" | msgstr "Contenuto del file di copertina non valido" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Solo i file jpg/jpeg sono supportati come file di copertina" | msgstr "Solo i file jpg/jpeg sono supportati come file di copertina" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Copertina" | msgstr "Copertina" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "File binario UnRar non trovato" | msgstr "File binario UnRar non trovato" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Errore nell'eseguire UnRar" | msgstr "Errore nell'eseguire UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "Impossibile trovare la cartella specificata" | msgstr "Impossibile trovare la cartella specificata" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "Specifica una cartella, non un file" | msgstr "Specifica una cartella, non un file" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "Eseguibili di Calibre non validi" | msgstr "Eseguibili di Calibre non validi" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "File eseguibili di Calibre mancanti: %(missing)s" | msgstr "File eseguibili di Calibre mancanti: %(missing)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Permessi di esecuzione mancanti: %(missing)s" | msgstr "Permessi di esecuzione mancanti: %(missing)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Errore durante l'esecuzione di Calibre" | msgstr "Errore durante l'esecuzione di Calibre" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "Metti in coda tutti i libri per il backup dei metadati" | msgstr "Metti in coda tutti i libri per il backup dei metadati" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2018-02-07 02:20-0500\n" | "PO-Revision-Date: 2018-02-07 02:20-0500\n" | ||||||
| "Last-Translator: subdiox <subdiox@gmail.com>\n" | "Last-Translator: subdiox <subdiox@gmail.com>\n" | ||||||
| "Language: ja\n" | "Language: ja\n" | ||||||
| @@ -738,122 +738,122 @@ msgstr "本 %(id)s の削除に失敗しました: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "本 %(id)s はDBのみから削除されます。DB内の本のパスが有効ではありません: %(path)s" | msgstr "本 %(id)s はDBのみから削除されます。DB内の本のパスが有効ではありません: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "エラー: %(error)s により、著者名を %(src)s から %(dest)s に変更できませんでした" | msgstr "エラー: %(error)s により、著者名を %(src)s から %(dest)s に変更できませんでした" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "ファイル %(file)s はGoogleドライブ上にありません" | msgstr "ファイル %(file)s はGoogleドライブ上にありません" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "エラー: %(error)s により、タイトルを %(src)s から %(dest)s に変更できませんでした" | msgstr "エラー: %(error)s により、タイトルを %(src)s から %(dest)s に変更できませんでした" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "本のパス %(path)s はGoogleドライブ上にありません" | msgstr "本のパス %(path)s はGoogleドライブ上にありません" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "このユーザー名はすでに使われています" | msgstr "このユーザー名はすでに使われています" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "メールアドレスの形式が無効" | msgstr "メールアドレスの形式が無効" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "表紙のアップロードに必要なPythonモジュール 'advocate' がインストールされていません" | msgstr "表紙のアップロードに必要なPythonモジュール 'advocate' がインストールされていません" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "表紙のダウンロードに失敗しました" | msgstr "表紙のダウンロードに失敗しました" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "表紙形式エラー" | msgstr "表紙形式エラー" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "表紙アップロードのためにlocalhostやローカルネットワークにアクセスすることは許可されていません" | msgstr "表紙アップロードのためにlocalhostやローカルネットワークにアクセスすることは許可されていません" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "表紙ファイルの作成に失敗しました" | msgstr "表紙ファイルの作成に失敗しました" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "表紙ファイルが有効な画像ファイルでないか、または保存できませんでした" | msgstr "表紙ファイルが有効な画像ファイルでないか、または保存できませんでした" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "表紙ファイルは jpg/jpeg/png/webp/bmp のみ対応しています" | msgstr "表紙ファイルは jpg/jpeg/png/webp/bmp のみ対応しています" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "表紙ファイルの内容が無効です" | msgstr "表紙ファイルの内容が無効です" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "表紙ファイルは jpg/jpeg のみ対応しています" | msgstr "表紙ファイルは jpg/jpeg のみ対応しています" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "見つける" | msgstr "見つける" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "UnRarのバイナリファイルが見つかりません" | msgstr "UnRarのバイナリファイルが見つかりません" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "UnRarの実行中にエラーが発生しました" | msgstr "UnRarの実行中にエラーが発生しました" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "DBへの書き込みができません" | msgstr "DBへの書き込みができません" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "実行権限がありません" | msgstr "実行権限がありません" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "UnRarの実行中にエラーが発生しました" | msgstr "UnRarの実行中にエラーが発生しました" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -8,7 +8,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2018-08-27 17:06+0700\n" | "PO-Revision-Date: 2018-08-27 17:06+0700\n" | ||||||
| "Last-Translator: \n" | "Last-Translator: \n" | ||||||
| "Language: km_KH\n" | "Language: km_KH\n" | ||||||
| @@ -744,118 +744,118 @@ msgstr "" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "ប្តូរចំណងជើងពី “%(src)s” ទៅជា “%(dest)s” បរាជ័យដោយបញ្ហា: %(error)s" | msgstr "ប្តូរចំណងជើងពី “%(src)s” ទៅជា “%(dest)s” បរាជ័យដោយបញ្ហា: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "ឯកសារ %(file)s រកមិនឃើញក្នុង Google Drive" | msgstr "ឯកសារ %(file)s រកមិនឃើញក្នុង Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "ប្តូរចំណងជើងពី “%(src)s” ទៅជា “%(dest)s” បរាជ័យដោយបញ្ហា: %(error)s" | msgstr "ប្តូរចំណងជើងពី “%(src)s” ទៅជា “%(dest)s” បរាជ័យដោយបញ្ហា: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "ទីតាំងសៀវភៅ %(path)s រកមិនឃើញក្នុង Google Drive" | msgstr "ទីតាំងសៀវភៅ %(path)s រកមិនឃើញក្នុង Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "ស្រាវជ្រាវ" | msgstr "ស្រាវជ្រាវ" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -6,7 +6,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-web\n" | "Project-Id-Version:  Calibre-web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2022-01-10 11:30+0900\n" | "PO-Revision-Date: 2022-01-10 11:30+0900\n" | ||||||
| "Last-Translator: 내맘대로의 EPUBGUIDE.NET <byword77@gmail.com>\n" | "Last-Translator: 내맘대로의 EPUBGUIDE.NET <byword77@gmail.com>\n" | ||||||
| "Language: ko\n" | "Language: ko\n" | ||||||
| @@ -738,122 +738,122 @@ msgstr "%(id)s 도서 삭제 실패: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "데이터베이스에서만 책 %(id)s 을(를) 삭제 중, 데이터베이스의 책 경로가 유효하지 않음: %(path)s" | msgstr "데이터베이스에서만 책 %(id)s 을(를) 삭제 중, 데이터베이스의 책 경로가 유효하지 않음: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "제목 이름을 '%(src)s'에서 '%(dest)s'(으)로 변경하지 못했습니다. 오류: %(error)s" | msgstr "제목 이름을 '%(src)s'에서 '%(dest)s'(으)로 변경하지 못했습니다. 오류: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Google 드라이브에서 %(file)s 파일을 찾을 수 없습니다" | msgstr "Google 드라이브에서 %(file)s 파일을 찾을 수 없습니다" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "제목 이름을 '%(src)s'에서 '%(dest)s'(으)로 변경하지 못했습니다. 오류: %(error)s" | msgstr "제목 이름을 '%(src)s'에서 '%(dest)s'(으)로 변경하지 못했습니다. 오류: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Google 드라이브에서 책 경로 %(path)s을(를) 찾을 수 없습니다" | msgstr "Google 드라이브에서 책 경로 %(path)s을(를) 찾을 수 없습니다" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "다른 계정에서 사용하고 있는 이메일 주소입니다." | msgstr "다른 계정에서 사용하고 있는 이메일 주소입니다." | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "등록되어 있는 username입니다" | msgstr "등록되어 있는 username입니다" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "이메일 주소 형식이 잘못되었습니다" | msgstr "이메일 주소 형식이 잘못되었습니다" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "규칙에 어긋나는 비밀번호입니다." | msgstr "규칙에 어긋나는 비밀번호입니다." | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "표지 업로드에 필요한 Python 모듈 'advocate'이 설치되지 않았습니다." | msgstr "표지 업로드에 필요한 Python 모듈 'advocate'이 설치되지 않았습니다." | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "표지 다운로드 중 오류 발생" | msgstr "표지 다운로드 중 오류 발생" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "표지 형식 오류" | msgstr "표지 형식 오류" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "표지 업로드를 위해 localhost 또는 로컬 네트워크에 액세스할 수 없습니다." | msgstr "표지 업로드를 위해 localhost 또는 로컬 네트워크에 액세스할 수 없습니다." | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "표지 경로 생성 실패" | msgstr "표지 경로 생성 실패" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "표지 파일이 유효한 이미지 파일이 아니거나 저장할 수 없습니다" | msgstr "표지 파일이 유효한 이미지 파일이 아니거나 저장할 수 없습니다" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "표지는 jpg/jpeg/png/webp/bmp 파일만 지원됩니다" | msgstr "표지는 jpg/jpeg/png/webp/bmp 파일만 지원됩니다" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "잘못된 표지 파일 콘텐츠" | msgstr "잘못된 표지 파일 콘텐츠" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "표지 파일로 jpg/jpeg 파일만 지원됩니다" | msgstr "표지 파일로 jpg/jpeg 파일만 지원됩니다" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "발견" | msgstr "발견" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "UnRar 바이너리 파일을 찾을 수 없습니다" | msgstr "UnRar 바이너리 파일을 찾을 수 없습니다" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "UnRar 실행 오류" | msgstr "UnRar 실행 오류" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "쓰기 권한이 없는 DB" | msgstr "쓰기 권한이 없는 DB" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "실행 권한 누락" | msgstr "실행 권한 누락" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "UnRar 실행 오류" | msgstr "UnRar 실행 오류" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "메타데이터 백업을 위해 모든 도서를 대기열에 추가" | msgstr "메타데이터 백업을 위해 모든 도서를 대기열에 추가" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -8,7 +8,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: Calibre-Web (GPLV3)\n" | "Project-Id-Version: Calibre-Web (GPLV3)\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2023-12-20 22:00+0100\n" | "PO-Revision-Date: 2023-12-20 22:00+0100\n" | ||||||
| "Last-Translator: Michiel Cornelissen <michiel.cornelissen+gitbhun at proton.me>\n" | "Last-Translator: Michiel Cornelissen <michiel.cornelissen+gitbhun at proton.me>\n" | ||||||
| "Language: nl\n" | "Language: nl\n" | ||||||
| @@ -750,122 +750,122 @@ msgstr "Verwijderen van boek %(id)s mislukt: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Verwijder boek %(id)s alleen uit database, boek pad is ongeldig: %(path)s" | msgstr "Verwijder boek %(id)s alleen uit database, boek pad is ongeldig: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Kan de titel '%(src)s' niet wijzigen in '%(dest)s': %(error)s" | msgstr "Kan de titel '%(src)s' niet wijzigen in '%(dest)s': %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Bestand '%(file)s' niet aangetroffen op Google Drive" | msgstr "Bestand '%(file)s' niet aangetroffen op Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Kan de titel '%(src)s' niet wijzigen in '%(dest)s': %(error)s" | msgstr "Kan de titel '%(src)s' niet wijzigen in '%(dest)s': %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Boeken locatie '%(path)s' niet aangetroffen op Google Drive" | msgstr "Boeken locatie '%(path)s' niet aangetroffen op Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "Bestaand account gevondne met dit e-mailadres" | msgstr "Bestaand account gevondne met dit e-mailadres" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Deze gebruikersnaam is al in gebruik" | msgstr "Deze gebruikersnaam is al in gebruik" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Ongeldig E-Mail adres" | msgstr "Ongeldig E-Mail adres" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "Het wachtwoord voldoet niet aan de validatieregels" | msgstr "Het wachtwoord voldoet niet aan de validatieregels" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "Pythonmodule 'advocate' is niet geïnstalleerd maar is nodig omslag uploads" | msgstr "Pythonmodule 'advocate' is niet geïnstalleerd maar is nodig omslag uploads" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Fout bij downloaden omslag" | msgstr "Fout bij downloaden omslag" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Onjuist omslagformaat" | msgstr "Onjuist omslagformaat" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "Toegang tot localhost of het lokale netwerk niet toegestaant voor omslag uploaden" | msgstr "Toegang tot localhost of het lokale netwerk niet toegestaant voor omslag uploaden" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Locatie aanmaken voor omslag mislukt" | msgstr "Locatie aanmaken voor omslag mislukt" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "Omslag-bestand is geen afbeelding of kon niet opgeslagen worden" | msgstr "Omslag-bestand is geen afbeelding of kon niet opgeslagen worden" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "Alleen jpg/jpeg/png/webp/bmp bestanden worden ondersteund als omslag" | msgstr "Alleen jpg/jpeg/png/webp/bmp bestanden worden ondersteund als omslag" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "Ongeldig omslagbestand" | msgstr "Ongeldig omslagbestand" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Alleen jpg/jpeg bestanden zijn toegestaan als omslag" | msgstr "Alleen jpg/jpeg bestanden zijn toegestaan als omslag" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Willekeurige boeken" | msgstr "Willekeurige boeken" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "UnRar executable niet gevonden" | msgstr "UnRar executable niet gevonden" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Fout bij het uitvoeren van UnRar" | msgstr "Fout bij het uitvoeren van UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "Kan niet schrijven naar database" | msgstr "Kan niet schrijven naar database" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Kan programma niet uitvoeren" | msgstr "Kan programma niet uitvoeren" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Fout bij het uitvoeren van UnRar" | msgstr "Fout bij het uitvoeren van UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "Voeg alle boeken toe aan de wachtrij voor het maken van een metagegevens backup" | msgstr "Voeg alle boeken toe aan de wachtrij voor het maken van een metagegevens backup" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2023-01-06 11:00+0000\n" | "PO-Revision-Date: 2023-01-06 11:00+0000\n" | ||||||
| "Last-Translator: Vegard Fladby <vegard.fladby@gmail.com>\n" | "Last-Translator: Vegard Fladby <vegard.fladby@gmail.com>\n" | ||||||
| "Language: no\n" | "Language: no\n" | ||||||
| @@ -746,121 +746,121 @@ msgstr "Sletting av bok %(id)s mislyktes: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Sletter bok %(id)s kun fra databasen, bokbanen i databasen er ikke gyldig: %(path)s" | msgstr "Sletter bok %(id)s kun fra databasen, bokbanen i databasen er ikke gyldig: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Endre navn på forfatter fra: '%(src)s' til '%(dest)s' mislyktes med feil: %(error)s" | msgstr "Endre navn på forfatter fra: '%(src)s' til '%(dest)s' mislyktes med feil: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Fil %(file)s ikke funnet på Google Disk" | msgstr "Fil %(file)s ikke funnet på Google Disk" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Endre navn på tittel fra: '%(src)s' til '%(dest)s' mislyktes med feil: %(error)s" | msgstr "Endre navn på tittel fra: '%(src)s' til '%(dest)s' mislyktes med feil: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Finner ikke bokbane %(path)s på Google Disk" | msgstr "Finner ikke bokbane %(path)s på Google Disk" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "Fant en eksisterende konto for denne e-postadressen" | msgstr "Fant en eksisterende konto for denne e-postadressen" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Dette brukernavnet er allerede tatt" | msgstr "Dette brukernavnet er allerede tatt" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Ugyldig format for e-postadresse" | msgstr "Ugyldig format for e-postadresse" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "Python-modulen 'advocate' er ikke installert, men er nødvendig for omslagsopplastinger" | msgstr "Python-modulen 'advocate' er ikke installert, men er nødvendig for omslagsopplastinger" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Feil ved nedlasting av cover" | msgstr "Feil ved nedlasting av cover" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Omslagsformatfeil" | msgstr "Omslagsformatfeil" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "Du har ikke tilgang til localhost eller det lokale nettverket for coveropplastinger" | msgstr "Du har ikke tilgang til localhost eller det lokale nettverket for coveropplastinger" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Kunne ikke opprette bane for dekning" | msgstr "Kunne ikke opprette bane for dekning" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "Cover-filen er ikke en gyldig bildefil, eller kunne ikke lagres" | msgstr "Cover-filen er ikke en gyldig bildefil, eller kunne ikke lagres" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "Bare jpg/jpeg/png/webp/bmp-filer støttes som coverfile" | msgstr "Bare jpg/jpeg/png/webp/bmp-filer støttes som coverfile" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "Ugyldig omslagsfilinnhold" | msgstr "Ugyldig omslagsfilinnhold" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Bare jpg/jpeg-filer støttes som coverfile" | msgstr "Bare jpg/jpeg-filer støttes som coverfile" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Dekke" | msgstr "Dekke" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "UnRar binær fil ikke funnet" | msgstr "UnRar binær fil ikke funnet" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Feil ved kjøring av UnRar" | msgstr "Feil ved kjøring av UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "DB er ikke skrivbar" | msgstr "DB er ikke skrivbar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Utførelsestillatelser mangler" | msgstr "Utførelsestillatelser mangler" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Feil ved kjøring av UnRar" | msgstr "Feil ved kjøring av UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "Sett alle bøker i kø for sikkerhetskopiering av metadata" | msgstr "Sett alle bøker i kø for sikkerhetskopiering av metadata" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -8,7 +8,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: Calibre Web - polski (POT: 2021-06-12 08:52)\n" | "Project-Id-Version: Calibre Web - polski (POT: 2021-06-12 08:52)\n" | ||||||
| "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2021-06-12 15:35+0200\n" | "PO-Revision-Date: 2021-06-12 15:35+0200\n" | ||||||
| "Last-Translator: Radosław Kierznowski <radek.kierznowski@outlook.com>\n" | "Last-Translator: Radosław Kierznowski <radek.kierznowski@outlook.com>\n" | ||||||
| "Language: pl\n" | "Language: pl\n" | ||||||
| @@ -753,122 +753,122 @@ msgstr "Usuwanie książki %(id)s zakończyło się błędem: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Usuwanie książki %(id)s, ścieżka książki jest niepoprawna: %(path)s" | msgstr "Usuwanie książki %(id)s, ścieżka książki jest niepoprawna: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Zmiana nazwy tytułu z: „%(src)s” na „%(dest)s” zakończyła się błędem: %(error)s" | msgstr "Zmiana nazwy tytułu z: „%(src)s” na „%(dest)s” zakończyła się błędem: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Nie znaleziono pliku %(file)s na Google Drive" | msgstr "Nie znaleziono pliku %(file)s na Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Zmiana nazwy tytułu z: „%(src)s” na „%(dest)s” zakończyła się błędem: %(error)s" | msgstr "Zmiana nazwy tytułu z: „%(src)s” na „%(dest)s” zakończyła się błędem: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Nie znaleziono ścieżki do książki %(path)s na Google Drive" | msgstr "Nie znaleziono ścieżki do książki %(path)s na Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Nazwa użytkownika jest już zajęta" | msgstr "Nazwa użytkownika jest już zajęta" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Nieprawidłowy format adresu e-mail" | msgstr "Nieprawidłowy format adresu e-mail" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Błąd przy pobieraniu okładki" | msgstr "Błąd przy pobieraniu okładki" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Błędny format okładki" | msgstr "Błędny format okładki" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Nie udało się utworzyć ścieżki dla okładki" | msgstr "Nie udało się utworzyć ścieżki dla okładki" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "Plik okładki nie jest poprawnym plikiem obrazu lub nie mógł zostać zapisany" | msgstr "Plik okładki nie jest poprawnym plikiem obrazu lub nie mógł zostać zapisany" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "Jako plik okładki obsługiwane są tylko pliki jpg/jpeg/png/webp/bmp" | msgstr "Jako plik okładki obsługiwane są tylko pliki jpg/jpeg/png/webp/bmp" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Jako plik okładki dopuszczalne są jedynie pliki jpg/jpeg" | msgstr "Jako plik okładki dopuszczalne są jedynie pliki jpg/jpeg" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Odkrywaj" | msgstr "Odkrywaj" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "Plik wykonywalny programu unrar nie znaleziony" | msgstr "Plik wykonywalny programu unrar nie znaleziony" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Błąd przy wykonywaniu unrar" | msgstr "Błąd przy wykonywaniu unrar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "Baza danych nie jest zapisywalna" | msgstr "Baza danych nie jest zapisywalna" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Brak uprawnienia do wykonywania pliku" | msgstr "Brak uprawnienia do wykonywania pliku" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Błąd przy wykonywaniu unrar" | msgstr "Błąd przy wykonywaniu unrar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -4,7 +4,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2023-07-25 11:30+0100\n" | "PO-Revision-Date: 2023-07-25 11:30+0100\n" | ||||||
| "Last-Translator: horus68 <https://github.com/horus68>\n" | "Last-Translator: horus68 <https://github.com/horus68>\n" | ||||||
| "Language: pt\n" | "Language: pt\n" | ||||||
| @@ -735,122 +735,122 @@ msgstr "Falha ao eliminar livro %(id)s: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Eliminar livro %(id)s apenas da base de dados, caminho do livro inválido: %(path)s" | msgstr "Eliminar livro %(id)s apenas da base de dados, caminho do livro inválido: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Renomear autor de: '%(src)s' para '%(dest)s' falhou com o erro: %(error)s" | msgstr "Renomear autor de: '%(src)s' para '%(dest)s' falhou com o erro: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Ficheiro %(file)s não encontrado no Google Drive" | msgstr "Ficheiro %(file)s não encontrado no Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Renomear título de: '%(src)s' para '%(dest)s' falhou com o erro: %(error)s" | msgstr "Renomear título de: '%(src)s' para '%(dest)s' falhou com o erro: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Caminho do livro %(path)s não encontrado no Google Drive" | msgstr "Caminho do livro %(path)s não encontrado no Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "Encontrada uma conta existente para este endereço de email" | msgstr "Encontrada uma conta existente para este endereço de email" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Este nome de utilizador já está registado" | msgstr "Este nome de utilizador já está registado" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Formato de endereço de email inválido" | msgstr "Formato de endereço de email inválido" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "O módulo Python 'advocate' não está instalado, mas é necessário para carregar capas" | msgstr "O módulo Python 'advocate' não está instalado, mas é necessário para carregar capas" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Erro ao descarregar a capa" | msgstr "Erro ao descarregar a capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Erro de formato da capa" | msgstr "Erro de formato da capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "Não possui permissões para aceder a localhost ou à rede local para carregar capas" | msgstr "Não possui permissões para aceder a localhost ou à rede local para carregar capas" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Falha em criar um caminho para a capa" | msgstr "Falha em criar um caminho para a capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "O ficheiro de capa não é um ficheiro de imagem válido, ou não foi possível ser armazenado" | msgstr "O ficheiro de capa não é um ficheiro de imagem válido, ou não foi possível ser armazenado" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "Apenas ficheiros jpg/jpeg/png/webp/bmp são suportados como ficheiros de capa" | msgstr "Apenas ficheiros jpg/jpeg/png/webp/bmp são suportados como ficheiros de capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "Conteúdo do ficheiro de capa inválido" | msgstr "Conteúdo do ficheiro de capa inválido" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Apenas ficheiros jpg/jpeg são suportados como ficheiros de capa" | msgstr "Apenas ficheiros jpg/jpeg são suportados como ficheiros de capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Capa" | msgstr "Capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "Binário UnRar não encontrado" | msgstr "Binário UnRar não encontrado" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Erro a executar UnRar" | msgstr "Erro a executar UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "DB não é gravável" | msgstr "DB não é gravável" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Falta de permissões de execução" | msgstr "Falta de permissões de execução" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Erro a executar UnRar" | msgstr "Erro a executar UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "Enviar todos os livros para lista de espera para cópia de segurança de metadados" | msgstr "Enviar todos os livros para lista de espera para cópia de segurança de metadados" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -4,7 +4,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: PROJECT VERSION\n" | "Project-Id-Version: PROJECT VERSION\n" | ||||||
| "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||||
| "Language: br\n" | "Language: br\n" | ||||||
| @@ -735,122 +735,122 @@ msgstr "Falha ao excluir livro %(id)s: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Excluindo livro %(id)s somente do banco de dados, caminho do livro inválido: %(path)s" | msgstr "Excluindo livro %(id)s somente do banco de dados, caminho do livro inválido: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Renomear autor de: '%(src)s' para '%(dest)s' falhou com o erro: %(error)s" | msgstr "Renomear autor de: '%(src)s' para '%(dest)s' falhou com o erro: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Arquivo %(file)s não encontrado no Google Drive" | msgstr "Arquivo %(file)s não encontrado no Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Renomear título de: '%(src)s' para '%(dest)s' falhou com o erro: %(error)s" | msgstr "Renomear título de: '%(src)s' para '%(dest)s' falhou com o erro: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Caminho do livro %(path)s não encontrado no Google Drive" | msgstr "Caminho do livro %(path)s não encontrado no Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Este nome de usuário já está registrado" | msgstr "Este nome de usuário já está registrado" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Formato de endereço de e-mail inválido" | msgstr "Formato de endereço de e-mail inválido" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "O módulo Python 'advocate' não está instalado, mas é necessário para uploads de capa" | msgstr "O módulo Python 'advocate' não está instalado, mas é necessário para uploads de capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Erro ao Baixar a capa" | msgstr "Erro ao Baixar a capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Erro de Formato da Capa" | msgstr "Erro de Formato da Capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "Você não tem permissão para acessar localhost ou a rede local para uploads de capa" | msgstr "Você não tem permissão para acessar localhost ou a rede local para uploads de capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Falha em criar caminho para a capa" | msgstr "Falha em criar caminho para a capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "O arquivo de capa não é um arquivo de imagem válido, ou não pôde ser armazenado" | msgstr "O arquivo de capa não é um arquivo de imagem válido, ou não pôde ser armazenado" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "Apenas arquivos jpg/jpeg/png/webp/bmp são suportados como arquivos de capa" | msgstr "Apenas arquivos jpg/jpeg/png/webp/bmp são suportados como arquivos de capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "Conteúdo do arquivo de capa inválido" | msgstr "Conteúdo do arquivo de capa inválido" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Apenas arquivos jpg/jpeg são suportados como arquivos de capa" | msgstr "Apenas arquivos jpg/jpeg são suportados como arquivos de capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Capa" | msgstr "Capa" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "Binário UnRar não encontrado" | msgstr "Binário UnRar não encontrado" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Erro excecutando UnRar" | msgstr "Erro excecutando UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "DB não é gravável" | msgstr "DB não é gravável" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Faltam as permissões de execução" | msgstr "Faltam as permissões de execução" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Erro excecutando UnRar" | msgstr "Erro excecutando UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -8,7 +8,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2020-04-29 01:20+0400\n" | "PO-Revision-Date: 2020-04-29 01:20+0400\n" | ||||||
| "Last-Translator: ZIZA\n" | "Last-Translator: ZIZA\n" | ||||||
| "Language: ru\n" | "Language: ru\n" | ||||||
| @@ -751,118 +751,118 @@ msgstr "" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Переименовывание заголовка с: '%(src)s' на '%(dest)s' не удалось из-за ошибки: %(error)s" | msgstr "Переименовывание заголовка с: '%(src)s' на '%(dest)s' не удалось из-за ошибки: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Файл %(file)s не найден на Google Drive" | msgstr "Файл %(file)s не найден на Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Переименовывание заголовка с: '%(src)s' на '%(dest)s' не удалось из-за ошибки: %(error)s" | msgstr "Переименовывание заголовка с: '%(src)s' на '%(dest)s' не удалось из-за ошибки: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Путь книги %(path)s не найден на Google Drive" | msgstr "Путь книги %(path)s не найден на Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Это имя пользователя уже занято" | msgstr "Это имя пользователя уже занято" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Не удалось создать путь для обложки." | msgstr "Не удалось создать путь для обложки." | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Только файлы в формате jpg / jpeg поддерживаются как файл обложки" | msgstr "Только файлы в формате jpg / jpeg поддерживаются как файл обложки" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Обзор" | msgstr "Обзор" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2023-11-01 06:12+0100\n" | "PO-Revision-Date: 2023-11-01 06:12+0100\n" | ||||||
| "Last-Translator: Branislav Hanáček <brango@brango.sk>\n" | "Last-Translator: Branislav Hanáček <brango@brango.sk>\n" | ||||||
| "Language: sk_SK\n" | "Language: sk_SK\n" | ||||||
| @@ -731,119 +731,119 @@ msgstr "Mazanie knihy %(id)s zlyhalo: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Mazanie knihy %(id)s iba z databázy, cesta ku knihe v databáze nie je platná: %(path)s" | msgstr "Mazanie knihy %(id)s iba z databázy, cesta ku knihe v databáze nie je platná: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Premenovanie autora z: '%(src)s' na '%(dest)s' zlyhalo s chybou: %(error)s" | msgstr "Premenovanie autora z: '%(src)s' na '%(dest)s' zlyhalo s chybou: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Súbor %(file)s sa nenašiel na Google Drive" | msgstr "Súbor %(file)s sa nenašiel na Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Zmena názvu knihy z: '%(src)s' na '%(dest)s' zlyhalo s chybou: %(error)s" | msgstr "Zmena názvu knihy z: '%(src)s' na '%(dest)s' zlyhalo s chybou: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Cesta ku knihe %(path)s sa nenašla na Google Drive" | msgstr "Cesta ku knihe %(path)s sa nenašla na Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "Pre túto poštovú adresu sa našiel existujúci účet" | msgstr "Pre túto poštovú adresu sa našiel existujúci účet" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Toto meno používateľa sa už používa" | msgstr "Toto meno používateľa sa už používa" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Neplatný formát poštovej adresy" | msgstr "Neplatný formát poštovej adresy" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "Heslo nedodržiava pravidlá validácie" | msgstr "Heslo nedodržiava pravidlá validácie" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "Python modul 'advocate' nie je nainštalovaný ale je potrebný pre nahrávanie obálok kníh" | msgstr "Python modul 'advocate' nie je nainštalovaný ale je potrebný pre nahrávanie obálok kníh" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Chyba pri sťahovaní obálky knihy" | msgstr "Chyba pri sťahovaní obálky knihy" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Chyba formátu obálky knihy" | msgstr "Chyba formátu obálky knihy" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "Nemáte povolené pristupovať na lokálneho hostiteľa alebo lokálnu sieť na pre nahrávanie obálok kníh" | msgstr "Nemáte povolené pristupovať na lokálneho hostiteľa alebo lokálnu sieť na pre nahrávanie obálok kníh" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Vytváranie cesty k obálke knihy zlyhalo" | msgstr "Vytváranie cesty k obálke knihy zlyhalo" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "Súbor obálky knihy nie je platný súbor s obrázkom alebo nie je uložený" | msgstr "Súbor obálky knihy nie je platný súbor s obrázkom alebo nie je uložený" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "Ako súbor obálky knihy sú podporované iba súbory jpg/jpeg/png/webp/bmp" | msgstr "Ako súbor obálky knihy sú podporované iba súbory jpg/jpeg/png/webp/bmp" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "Neplatný obsah súboru obalky knihy" | msgstr "Neplatný obsah súboru obalky knihy" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Ako súbor obálky knihy sú podporované iba súbory jpg/jpeg" | msgstr "Ako súbor obálky knihy sú podporované iba súbory jpg/jpeg" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Obálka knihy" | msgstr "Obálka knihy" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "Binárny súbor pre UnRar sa nenašiel" | msgstr "Binárny súbor pre UnRar sa nenašiel" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Chyba pri spustení UnRar" | msgstr "Chyba pri spustení UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "Do databázy nie je možné zapisovať" | msgstr "Do databázy nie je možné zapisovať" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Chýba právo na vykonanie" | msgstr "Chýba právo na vykonanie" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Chyba pri spustení UnRar" | msgstr "Chyba pri spustení UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "Zaradiť všetky knihy na zálohovanie metadát" | msgstr "Zaradiť všetky knihy na zálohovanie metadát" | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								cps/translations/sl/LC_MESSAGES/messages.mo
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								cps/translations/sl/LC_MESSAGES/messages.mo
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										3587
									
								
								cps/translations/sl/LC_MESSAGES/messages.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3587
									
								
								cps/translations/sl/LC_MESSAGES/messages.po
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2021-05-13 11:00+0000\n" | "PO-Revision-Date: 2021-05-13 11:00+0000\n" | ||||||
| "Last-Translator: Jonatan Nyberg <jonatan.nyberg.karl@gmail.com>\n" | "Last-Translator: Jonatan Nyberg <jonatan.nyberg.karl@gmail.com>\n" | ||||||
| "Language: sv\n" | "Language: sv\n" | ||||||
| @@ -747,122 +747,122 @@ msgstr "Borttagning av boken %(id)s misslyckades: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "Borttagning av boken %(id)s, boksökväg inte giltig: %(path)s" | msgstr "Borttagning av boken %(id)s, boksökväg inte giltig: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Byt namn på titel från: \"%(src)s\" till \"%(dest)s\" misslyckades med fel: %(error)s" | msgstr "Byt namn på titel från: \"%(src)s\" till \"%(dest)s\" misslyckades med fel: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Filen %(file)s hittades inte på Google Drive" | msgstr "Filen %(file)s hittades inte på Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Byt namn på titel från: \"%(src)s\" till \"%(dest)s\" misslyckades med fel: %(error)s" | msgstr "Byt namn på titel från: \"%(src)s\" till \"%(dest)s\" misslyckades med fel: %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Boksökvägen %(path)s hittades inte på Google Drive" | msgstr "Boksökvägen %(path)s hittades inte på Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Detta användarnamn är redan taget" | msgstr "Detta användarnamn är redan taget" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Ogiltigt e-postadressformat" | msgstr "Ogiltigt e-postadressformat" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Fel vid hämtning av omslaget" | msgstr "Fel vid hämtning av omslaget" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Fel på omslagsformat" | msgstr "Fel på omslagsformat" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Det gick inte att skapa sökväg för omslag" | msgstr "Det gick inte att skapa sökväg för omslag" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "Omslagsfilen är inte en giltig bildfil eller kunde inte lagras" | msgstr "Omslagsfilen är inte en giltig bildfil eller kunde inte lagras" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "Endast jpg/jpeg/png/webp/bmp-filer stöds som omslagsfil" | msgstr "Endast jpg/jpeg/png/webp/bmp-filer stöds som omslagsfil" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "Endast jpg/jpeg-filer stöds som omslagsfil" | msgstr "Endast jpg/jpeg-filer stöds som omslagsfil" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Upptäck" | msgstr "Upptäck" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "UnRar binär fil hittades inte" | msgstr "UnRar binär fil hittades inte" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "Fel vid körning av UnRar" | msgstr "Fel vid körning av UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "DB är inte skrivbar" | msgstr "DB är inte skrivbar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "Körningstillstånd saknas" | msgstr "Körningstillstånd saknas" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "Fel vid körning av UnRar" | msgstr "Fel vid körning av UnRar" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2020-04-23 22:47+0300\n" | "PO-Revision-Date: 2020-04-23 22:47+0300\n" | ||||||
| "Last-Translator: iz <iz7iz7iz@protonmail.ch>\n" | "Last-Translator: iz <iz7iz7iz@protonmail.ch>\n" | ||||||
| "Language: tr\n" | "Language: tr\n" | ||||||
| @@ -744,118 +744,118 @@ msgstr "" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Kitap adını değiştirme sırasında hata oluştu ('%(src)s' → '%(dest)s'): %(error)s" | msgstr "Kitap adını değiştirme sırasında hata oluştu ('%(src)s' → '%(dest)s'): %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "%(file)s dosyası Google Drive'da bulunamadı" | msgstr "%(file)s dosyası Google Drive'da bulunamadı" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "Kitap adını değiştirme sırasında hata oluştu ('%(src)s' → '%(dest)s'): %(error)s" | msgstr "Kitap adını değiştirme sırasında hata oluştu ('%(src)s' → '%(dest)s'): %(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "eKitap yolu %(path)s Google Drive'da bulunamadı" | msgstr "eKitap yolu %(path)s Google Drive'da bulunamadı" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Bu kullanıcı adı zaten alındı" | msgstr "Bu kullanıcı adı zaten alındı" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Keşfet" | msgstr "Keşfet" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -6,7 +6,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-web\n" | "Project-Id-Version:  Calibre-web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2017-04-30 00:47+0300\n" | "PO-Revision-Date: 2017-04-30 00:47+0300\n" | ||||||
| "Last-Translator: ABIS Team <biblio.if.abis@gmail.com>\n" | "Last-Translator: ABIS Team <biblio.if.abis@gmail.com>\n" | ||||||
| "Language: uk\n" | "Language: uk\n" | ||||||
| @@ -740,118 +740,118 @@ msgstr "" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Огляд" | msgstr "Огляд" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -4,7 +4,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-web\n" | "Project-Id-Version:  Calibre-web\n" | ||||||
| "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" | "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2022-09-20 21:36+0700\n" | "PO-Revision-Date: 2022-09-20 21:36+0700\n" | ||||||
| "Last-Translator: Ha Link <halink0803@gmail.com>\n" | "Last-Translator: Ha Link <halink0803@gmail.com>\n" | ||||||
| "Language: vi\n" | "Language: vi\n" | ||||||
| @@ -734,119 +734,119 @@ msgstr "Xoá sách %(id)s thất bại: %(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "File %(file)s không tìm thấy trẻn Google Drive" | msgstr "File %(file)s không tìm thấy trẻn Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Không tìm thấy được dẫn sách %(path)s trên Google Drive" | msgstr "Không tìm thấy được dẫn sách %(path)s trên Google Drive" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "Username này đã bị sử dụng" | msgstr "Username này đã bị sử dụng" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "Định dạng email address không hợp lệ" | msgstr "Định dạng email address không hợp lệ" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "Lỗi tải xuống ảnh bìa" | msgstr "Lỗi tải xuống ảnh bìa" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "Định dạng ảnh bìa lỗi" | msgstr "Định dạng ảnh bìa lỗi" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "Tạo đường dẫn cho ảnh bìa thất bại" | msgstr "Tạo đường dẫn cho ảnh bìa thất bại" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "Khám phá" | msgstr "Khám phá" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2020-09-27 22:18+0800\n" | "PO-Revision-Date: 2020-09-27 22:18+0800\n" | ||||||
| "Last-Translator: xlivevil <xlivevil@aliyun.com>\n" | "Last-Translator: xlivevil <xlivevil@aliyun.com>\n" | ||||||
| "Language: zh_CN\n" | "Language: zh_CN\n" | ||||||
| @@ -731,119 +731,119 @@ msgstr "删除书籍 %(id)s 失败:%(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "仅从数据库中删除书籍 %(id)s,数据库中的书籍路径无效: %(path)s" | msgstr "仅从数据库中删除书籍 %(id)s,数据库中的书籍路径无效: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "将作者从“%(src)s”改为“%(dest)s”时失败,出错信息:%(error)s" | msgstr "将作者从“%(src)s”改为“%(dest)s”时失败,出错信息:%(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Google Drive 上找不到文件 %(file)s" | msgstr "Google Drive 上找不到文件 %(file)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "将标题从“%(src)s”改为“%(dest)s”时失败,出错信息:%(error)s" | msgstr "将标题从“%(src)s”改为“%(dest)s”时失败,出错信息:%(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Google Drive 上找不到书籍路径 %(path)s" | msgstr "Google Drive 上找不到书籍路径 %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "已存在使用此邮箱的账户" | msgstr "已存在使用此邮箱的账户" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "此用户名已被使用" | msgstr "此用户名已被使用" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "无效的邮箱格式" | msgstr "无效的邮箱格式" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "密码不符合密码验证规则" | msgstr "密码不符合密码验证规则" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "上传封面所需的 Python 模块 'advocate' 未安装" | msgstr "上传封面所需的 Python 模块 'advocate' 未安装" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "下载封面时出错" | msgstr "下载封面时出错" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "封面格式出错" | msgstr "封面格式出错" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "您没有访问本地主机或本地网络进行封面上传" | msgstr "您没有访问本地主机或本地网络进行封面上传" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "创建封面路径失败" | msgstr "创建封面路径失败" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "封面文件不是有效的图片文件,或者无法存储它" | msgstr "封面文件不是有效的图片文件,或者无法存储它" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "封面文件只支持 jpg、jpeg、png、webp、bmp 文件" | msgstr "封面文件只支持 jpg、jpeg、png、webp、bmp 文件" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "封面文件内容无效" | msgstr "封面文件内容无效" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "仅将 jpg、jpeg 文件作为封面文件" | msgstr "仅将 jpg、jpeg 文件作为封面文件" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "封面" | msgstr "封面" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "找不到 UnRar 执行文件" | msgstr "找不到 UnRar 执行文件" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "执行 UnRar 时出错" | msgstr "执行 UnRar 时出错" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "数据库不可写入" | msgstr "数据库不可写入" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "缺少执行权限" | msgstr "缺少执行权限" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "执行 UnRar 时出错" | msgstr "执行 UnRar 时出错" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "将所有书籍加入元数据备份队列" | msgstr "将所有书籍加入元数据备份队列" | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -7,7 +7,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version:  Calibre-Web\n" | "Project-Id-Version:  Calibre-Web\n" | ||||||
| "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: 2020-09-27 22:18+0800\n" | "PO-Revision-Date: 2020-09-27 22:18+0800\n" | ||||||
| "Last-Translator: xlivevil <xlivevil@aliyun.com>\n" | "Last-Translator: xlivevil <xlivevil@aliyun.com>\n" | ||||||
| "Language: zh_TW\n" | "Language: zh_TW\n" | ||||||
| @@ -741,122 +741,122 @@ msgstr "刪除書籍 %(id)s失敗:%(message)s" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "僅從數據庫中刪除書籍 %(id)s,數據庫中的書籍路徑無效: %(path)s" | msgstr "僅從數據庫中刪除書籍 %(id)s,數據庫中的書籍路徑無效: %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "將標題從“%(src)s”改為“%(dest)s”時失敗,錯誤錯信息:%(error)s" | msgstr "將標題從“%(src)s”改為“%(dest)s”時失敗,錯誤錯信息:%(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "Google Drive上找不到文件 %(file)s" | msgstr "Google Drive上找不到文件 %(file)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "將標題從“%(src)s”改為“%(dest)s”時失敗,錯誤錯信息:%(error)s" | msgstr "將標題從“%(src)s”改為“%(dest)s”時失敗,錯誤錯信息:%(error)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "Google Drive上找不到書籍路徑 %(path)s" | msgstr "Google Drive上找不到書籍路徑 %(path)s" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "此用戶名已被使用" | msgstr "此用戶名已被使用" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "無效的郵件地址格式" | msgstr "無效的郵件地址格式" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "下載封面時出錯" | msgstr "下載封面時出錯" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "封面格式出錯" | msgstr "封面格式出錯" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "創建封面路徑失敗" | msgstr "創建封面路徑失敗" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "封面文件不是有效的圖片文件,或者無法儲存" | msgstr "封面文件不是有效的圖片文件,或者無法儲存" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "封面文件只支持jpg/jpeg/png/webp/bmp格式文件" | msgstr "封面文件只支持jpg/jpeg/png/webp/bmp格式文件" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "僅將jpg、jpeg文件作為封面文件" | msgstr "僅將jpg、jpeg文件作為封面文件" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "發現" | msgstr "發現" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "找不到UnRar執行文件" | msgstr "找不到UnRar執行文件" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "執行UnRar時出錯" | msgstr "執行UnRar時出錯" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "數據庫不可寫入" | msgstr "數據庫不可寫入" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, fuzzy, python-format | #, fuzzy, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "缺少執行權限" | msgstr "缺少執行權限" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| #, fuzzy | #, fuzzy | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "執行UnRar時出錯" | msgstr "執行UnRar時出錯" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										56
									
								
								messages.pot
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								messages.pot
									
									
									
									
									
								
							| @@ -8,7 +8,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: PROJECT VERSION\n" | "Project-Id-Version: PROJECT VERSION\n" | ||||||
| "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" | ||||||
| "POT-Creation-Date: 2024-09-14 10:51+0200\n" | "POT-Creation-Date: 2024-09-21 12:05+0200\n" | ||||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | "Language-Team: LANGUAGE <LL@li.org>\n" | ||||||
| @@ -729,117 +729,117 @@ msgstr "" | |||||||
| msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:441 | #: cps/helper.py:439 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:512 cps/helper.py:521 | #: cps/helper.py:507 cps/helper.py:516 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "File %(file)s not found on Google Drive" | msgid "File %(file)s not found on Google Drive" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:567 | #: cps/helper.py:559 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:605 | #: cps/helper.py:597 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Book path %(path)s not found on Google Drive" | msgid "Book path %(path)s not found on Google Drive" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:665 | #: cps/helper.py:657 | ||||||
| msgid "Found an existing account for this Email address" | msgid "Found an existing account for this Email address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:673 | #: cps/helper.py:665 | ||||||
| msgid "This username is already taken" | msgid "This username is already taken" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:687 | #: cps/helper.py:679 | ||||||
| msgid "Invalid Email address format" | msgid "Invalid Email address format" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:709 | #: cps/helper.py:701 | ||||||
| msgid "Password doesn't comply with password validation rules" | msgid "Password doesn't comply with password validation rules" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:855 | #: cps/helper.py:847 | ||||||
| msgid "Python module 'advocate' is not installed but is needed for cover uploads" | msgid "Python module 'advocate' is not installed but is needed for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:865 | #: cps/helper.py:857 | ||||||
| msgid "Error Downloading Cover" | msgid "Error Downloading Cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:868 | #: cps/helper.py:860 | ||||||
| msgid "Cover Format Error" | msgid "Cover Format Error" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:871 | #: cps/helper.py:863 | ||||||
| msgid "You are not allowed to access localhost or the local network for cover uploads" | msgid "You are not allowed to access localhost or the local network for cover uploads" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:881 | #: cps/helper.py:873 | ||||||
| msgid "Failed to create path for cover" | msgid "Failed to create path for cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:897 | #: cps/helper.py:889 | ||||||
| msgid "Cover-file is not a valid image file, or could not be stored" | msgid "Cover-file is not a valid image file, or could not be stored" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:908 | #: cps/helper.py:900 | ||||||
| msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:920 | #: cps/helper.py:912 | ||||||
| msgid "Invalid cover file content" | msgid "Invalid cover file content" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:924 | #: cps/helper.py:916 | ||||||
| msgid "Only jpg/jpeg files are supported as coverfile" | msgid "Only jpg/jpeg files are supported as coverfile" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:996 cps/helper.py:1153 | #: cps/helper.py:988 cps/helper.py:1145 | ||||||
| msgid "Cover" | msgid "Cover" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1013 | #: cps/helper.py:1005 | ||||||
| msgid "UnRar binary file not found" | msgid "UnRar binary file not found" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1024 | #: cps/helper.py:1016 | ||||||
| msgid "Error executing UnRar" | msgid "Error executing UnRar" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1032 | #: cps/helper.py:1024 | ||||||
| msgid "Could not find the specified directory" | msgid "Could not find the specified directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1035 | #: cps/helper.py:1027 | ||||||
| msgid "Please specify a directory, not a file" | msgid "Please specify a directory, not a file" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1049 | #: cps/helper.py:1041 | ||||||
| msgid "Calibre binaries not viable" | msgid "Calibre binaries not viable" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1058 | #: cps/helper.py:1050 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing calibre binaries: %(missing)s" | msgid "Missing calibre binaries: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1060 | #: cps/helper.py:1052 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "Missing executable permissions: %(missing)s" | msgid "Missing executable permissions: %(missing)s" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1065 | #: cps/helper.py:1057 | ||||||
| msgid "Error executing Calibre" | msgid "Error executing Calibre" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: cps/helper.py:1155 cps/templates/admin.html:216 | #: cps/helper.py:1147 cps/templates/admin.html:216 | ||||||
| msgid "Queue all books for metadata backup" | msgid "Queue all books for metadata backup" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ google-api-python-client>=1.7.11,<2.200.0 | |||||||
|  |  | ||||||
| # goodreads | # goodreads | ||||||
| goodreads>=0.3.2,<0.4.0 | goodreads>=0.3.2,<0.4.0 | ||||||
| python-Levenshtein>=0.12.0,<0.26.0 | python-Levenshtein>=0.12.0,<0.27.0 | ||||||
|  |  | ||||||
| # ldap login | # ldap login | ||||||
| python-ldap>=3.0.0,<3.5.0 | python-ldap>=3.0.0,<3.5.0 | ||||||
|   | |||||||
| @@ -33,9 +33,9 @@ dependencies = [ | |||||||
|     "Flask-Principal>=0.3.2,<0.5.1", |     "Flask-Principal>=0.3.2,<0.5.1", | ||||||
|     "Flask>=1.0.2,<3.1.0", |     "Flask>=1.0.2,<3.1.0", | ||||||
|     "iso-639>=0.4.5,<0.5.0", |     "iso-639>=0.4.5,<0.5.0", | ||||||
|     "PyPDF>=3.15.6,<4.3.0", |     "PyPDF>=3.15.6,<5.1.0", | ||||||
|     "pytz>=2016.10", |     "pytz>=2016.10", | ||||||
|     "requests>=2.28.0,<2.32.0", |     "requests>=2.28.0,<2.33.0", | ||||||
|     "SQLAlchemy>=1.3.0,<2.1.0", |     "SQLAlchemy>=1.3.0,<2.1.0", | ||||||
|     "tornado>=6.3,<6.5", |     "tornado>=6.3,<6.5", | ||||||
|     "Wand>=0.4.4,<0.7.0", |     "Wand>=0.4.4,<0.7.0", | ||||||
| @@ -43,7 +43,8 @@ dependencies = [ | |||||||
|     "lxml>=4.9.1,<5.3.0", |     "lxml>=4.9.1,<5.3.0", | ||||||
|     "flask-wtf>=0.14.2,<1.3.0", |     "flask-wtf>=0.14.2,<1.3.0", | ||||||
|     "chardet>=3.0.0,<5.3.0", |     "chardet>=3.0.0,<5.3.0", | ||||||
|     "advocate>=1.0.0,<1.1.0", |     "netifaces-plus>0.12.0,<0.13.0", | ||||||
|  |     "urllib3<2.0,>=1.22", | ||||||
|     "Flask-Limiter>=2.3.0,<3.9.0", |     "Flask-Limiter>=2.3.0,<3.9.0", | ||||||
|     "regex>=2022.3.2,<2024.6.25", |     "regex>=2022.3.2,<2024.6.25", | ||||||
|     "bleach>=6.0.0,<6.2.0", |     "bleach>=6.0.0,<6.2.0", | ||||||
| @@ -83,7 +84,7 @@ gmail = [ | |||||||
| ] | ] | ||||||
| goodreads = [ | goodreads = [ | ||||||
|     "goodreads>=0.3.2,<0.4.0", |     "goodreads>=0.3.2,<0.4.0", | ||||||
|     "python-Levenshtein>=0.12.0,<0.26.0", |     "python-Levenshtein>=0.12.0,<0.27.0", | ||||||
| ] | ] | ||||||
| ldap = [ | ldap = [ | ||||||
|     "python-ldap>=3.0.0,<3.5.0", |     "python-ldap>=3.0.0,<3.5.0", | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ Flask-Babel>=0.11.1,<4.1.0 | |||||||
| Flask-Principal>=0.3.2,<0.5.1 | Flask-Principal>=0.3.2,<0.5.1 | ||||||
| Flask>=1.0.2,<3.1.0 | Flask>=1.0.2,<3.1.0 | ||||||
| iso-639>=0.4.5,<0.5.0 | iso-639>=0.4.5,<0.5.0 | ||||||
| PyPDF>=3.15.6,<4.4.0 | PyPDF>=3.15.6,<5.1.0 | ||||||
| pytz>=2016.10 | pytz>=2016.10 | ||||||
| requests>=2.28.0,<2.33.0 | requests>=2.28.0,<2.33.0 | ||||||
| SQLAlchemy>=1.3.0,<2.1.0 | SQLAlchemy>=1.3.0,<2.1.0 | ||||||
| @@ -14,7 +14,8 @@ unidecode>=0.04.19,<1.4.0 | |||||||
| lxml>=4.9.1,<5.3.0 | lxml>=4.9.1,<5.3.0 | ||||||
| flask-wtf>=0.14.2,<1.3.0 | flask-wtf>=0.14.2,<1.3.0 | ||||||
| chardet>=3.0.0,<5.3.0 | chardet>=3.0.0,<5.3.0 | ||||||
| advocate>=1.0.0,<1.1.0 | netifaces-plus>0.12.0,<0.13.0 | ||||||
|  | urllib3<2.0,>=1.22 | ||||||
| Flask-Limiter>=2.3.0,<3.9.0 | Flask-Limiter>=2.3.0,<3.9.0 | ||||||
| regex>=2022.3.2,<2024.6.25 | regex>=2022.3.2,<2024.6.25 | ||||||
| bleach>=6.0.0,<6.2.0 | bleach>=6.0.0,<6.2.0 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Ozzie Isaacs
					Ozzie Isaacs