mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Sync to trunk.
This commit is contained in:
commit
1286a5e600
@ -2,7 +2,7 @@ __license__ = 'GPL v3'
|
|||||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
__appname__ = 'calibre'
|
__appname__ = 'calibre'
|
||||||
__version__ = '0.6.2'
|
__version__ = '0.6.3'
|
||||||
__author__ = "Kovid Goyal <kovid@kovidgoyal.net>"
|
__author__ = "Kovid Goyal <kovid@kovidgoyal.net>"
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
@ -27,8 +27,11 @@ every time you add an HTML file to the library.\
|
|||||||
from calibre.ebooks.epub import initialize_container
|
from calibre.ebooks.epub import initialize_container
|
||||||
|
|
||||||
with TemporaryDirectory('_plugin_html2zip') as tdir:
|
with TemporaryDirectory('_plugin_html2zip') as tdir:
|
||||||
gui_convert(htmlfile, tdir, [('debug_input', tdir,
|
recs =[('debug_input', tdir, OptionRecommendation.HIGH)]
|
||||||
OptionRecommendation.HIGH)])
|
if self.site_customization and self.site_customization.strip():
|
||||||
|
recs.append(['input_encoding', self.site_customization.strip(),
|
||||||
|
OptionRecommendation.HIGH])
|
||||||
|
gui_convert(htmlfile, tdir, recs)
|
||||||
of = self.temporary_file('_plugin_html2zip.zip')
|
of = self.temporary_file('_plugin_html2zip.zip')
|
||||||
opf = glob.glob(os.path.join(tdir, '*.opf'))[0]
|
opf = glob.glob(os.path.join(tdir, '*.opf'))[0]
|
||||||
ncx = glob.glob(os.path.join(tdir, '*.ncx'))
|
ncx = glob.glob(os.path.join(tdir, '*.ncx'))
|
||||||
@ -40,6 +43,10 @@ every time you add an HTML file to the library.\
|
|||||||
|
|
||||||
return of.name
|
return of.name
|
||||||
|
|
||||||
|
def customization_help(self, gui=False):
|
||||||
|
return _('Character encoding for the input HTML files. Common choices '
|
||||||
|
'include: cp1252, latin1, iso-8859-1 and utf-8.')
|
||||||
|
|
||||||
|
|
||||||
class ComicMetadataReader(MetadataReaderPlugin):
|
class ComicMetadataReader(MetadataReaderPlugin):
|
||||||
|
|
||||||
|
@ -37,6 +37,9 @@ class CLI(object):
|
|||||||
path = os.path.join(path, infile.name)
|
path = os.path.join(path, infile.name)
|
||||||
if not replace_file and os.path.exists(path):
|
if not replace_file and os.path.exists(path):
|
||||||
raise PathError('File already exists: ' + path)
|
raise PathError('File already exists: ' + path)
|
||||||
|
d = os.path.dirname(path)
|
||||||
|
if not os.path.exists(d):
|
||||||
|
os.makedirs(d)
|
||||||
dest = open(path, 'wb')
|
dest = open(path, 'wb')
|
||||||
shutil.copyfileobj(infile, dest, 10*1024*1024)
|
shutil.copyfileobj(infile, dest, 10*1024*1024)
|
||||||
dest.flush()
|
dest.flush()
|
||||||
|
@ -14,7 +14,7 @@ from calibre.utils.config import OptionParser
|
|||||||
from calibre.utils.logging import Log
|
from calibre.utils.logging import Log
|
||||||
from calibre.constants import preferred_encoding
|
from calibre.constants import preferred_encoding
|
||||||
from calibre.customize.conversion import OptionRecommendation
|
from calibre.customize.conversion import OptionRecommendation
|
||||||
|
from calibre import patheq
|
||||||
|
|
||||||
USAGE = '%prog ' + _('''\
|
USAGE = '%prog ' + _('''\
|
||||||
input_file output_file [options]
|
input_file output_file [options]
|
||||||
@ -220,6 +220,9 @@ def create_option_parser(args, log):
|
|||||||
from calibre.ebooks.conversion.plumber import Plumber
|
from calibre.ebooks.conversion.plumber import Plumber
|
||||||
|
|
||||||
reporter = ProgressBar(log)
|
reporter = ProgressBar(log)
|
||||||
|
if patheq(input, output):
|
||||||
|
raise ValueError('Input file is the same as the output file')
|
||||||
|
|
||||||
plumber = Plumber(input, output, log, reporter)
|
plumber = Plumber(input, output, log, reporter)
|
||||||
add_input_output_options(parser, plumber)
|
add_input_output_options(parser, plumber)
|
||||||
add_pipeline_options(parser, plumber)
|
add_pipeline_options(parser, plumber)
|
||||||
|
@ -351,7 +351,7 @@ OptionRecommendation(name='read_metadata_from_opf',
|
|||||||
OptionRecommendation(name='asciiize',
|
OptionRecommendation(name='asciiize',
|
||||||
recommended_value=False, level=OptionRecommendation.LOW,
|
recommended_value=False, level=OptionRecommendation.LOW,
|
||||||
help=(_('Transliterate unicode characters to an ASCII '
|
help=(_('Transliterate unicode characters to an ASCII '
|
||||||
'representation. Use with care because this will remove replace '
|
'representation. Use with care because this will replace '
|
||||||
'unicode characters with ASCII. For instance it will replace "%s" '
|
'unicode characters with ASCII. For instance it will replace "%s" '
|
||||||
'with "Mikhail Gorbachiov". Also, note that in '
|
'with "Mikhail Gorbachiov". Also, note that in '
|
||||||
'cases where there are multiple representations of a character '
|
'cases where there are multiple representations of a character '
|
||||||
|
@ -21,6 +21,7 @@ from calibre.utils.podofo import get_metadata as podofo_get_metadata, \
|
|||||||
set_metadata as podofo_set_metadata, Unavailable, get_metadata_quick
|
set_metadata as podofo_set_metadata, Unavailable, get_metadata_quick
|
||||||
|
|
||||||
def get_quick_metadata(stream):
|
def get_quick_metadata(stream):
|
||||||
|
return get_metadata_pypdf(stream)
|
||||||
raw = stream.read()
|
raw = stream.read()
|
||||||
mi = get_metadata_quick(raw)
|
mi = get_metadata_quick(raw)
|
||||||
if mi.title == '_':
|
if mi.title == '_':
|
||||||
|
@ -411,6 +411,8 @@ class Style(object):
|
|||||||
result = size
|
result = size
|
||||||
else:
|
else:
|
||||||
result = self._unit_convert(value, base=base, font=base)
|
result = self._unit_convert(value, base=base, font=base)
|
||||||
|
if not isinstance(result, (int, float, long)):
|
||||||
|
return base
|
||||||
if result < 0:
|
if result < 0:
|
||||||
result = normalize_fontsize("smaller", base)
|
result = normalize_fontsize("smaller", base)
|
||||||
if factor:
|
if factor:
|
||||||
|
@ -275,7 +275,7 @@ class CSSFlattener(object):
|
|||||||
items = cssdict.items()
|
items = cssdict.items()
|
||||||
items.sort()
|
items.sort()
|
||||||
css = u';\n'.join(u'%s: %s' % (key, val) for key, val in items)
|
css = u';\n'.join(u'%s: %s' % (key, val) for key, val in items)
|
||||||
classes = node.get('class', None) or 'calibre'
|
classes = node.get('class', '').strip() or 'calibre'
|
||||||
klass = STRIPNUM.sub('', classes.split()[0].replace('_', ''))
|
klass = STRIPNUM.sub('', classes.split()[0].replace('_', ''))
|
||||||
if css in styles:
|
if css in styles:
|
||||||
match = styles[css]
|
match = styles[css]
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
'''
|
'''
|
||||||
UI for adding books to the database and saving books to disk
|
UI for adding books to the database and saving books to disk
|
||||||
'''
|
'''
|
||||||
import os
|
import os, shutil
|
||||||
from Queue import Queue, Empty
|
from Queue import Queue, Empty
|
||||||
|
|
||||||
from PyQt4.Qt import QThread, SIGNAL, QObject, QTimer, Qt
|
from PyQt4.Qt import QThread, SIGNAL, QObject, QTimer, Qt
|
||||||
@ -167,6 +167,15 @@ class Adder(QObject):
|
|||||||
self.add_formats(id, formats)
|
self.add_formats(id, formats)
|
||||||
self.number_of_books_added += 1
|
self.number_of_books_added += 1
|
||||||
|
|
||||||
|
def cleanup(self):
|
||||||
|
if hasattr(self, 'worker') and hasattr(self.worker, 'tdir') and \
|
||||||
|
self.worker.tdir is not None:
|
||||||
|
if os.path.exists(self.worker.tdir):
|
||||||
|
try:
|
||||||
|
shutil.rmtree(self.worker.tdir)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
class Saver(QObject):
|
class Saver(QObject):
|
||||||
|
|
||||||
def __init__(self, parent, db, callback, rows, path,
|
def __init__(self, parent, db, callback, rows, path,
|
||||||
|
@ -7,7 +7,7 @@ from PyQt4.Qt import QDialog, QMessageBox, QListWidgetItem, QIcon, \
|
|||||||
QStringListModel, QAbstractItemModel, QFont, \
|
QStringListModel, QAbstractItemModel, QFont, \
|
||||||
SIGNAL, QTimer, Qt, QSize, QVariant, QUrl, \
|
SIGNAL, QTimer, Qt, QSize, QVariant, QUrl, \
|
||||||
QModelIndex, QInputDialog, QAbstractTableModel, \
|
QModelIndex, QInputDialog, QAbstractTableModel, \
|
||||||
QDialogButtonBox, QTabWidget, QBrush
|
QDialogButtonBox, QTabWidget, QBrush, QLineEdit
|
||||||
|
|
||||||
from calibre.constants import islinux, iswindows
|
from calibre.constants import islinux, iswindows
|
||||||
from calibre.gui2.dialogs.config_ui import Ui_Dialog
|
from calibre.gui2.dialogs.config_ui import Ui_Dialog
|
||||||
@ -553,10 +553,14 @@ class ConfigDialog(QDialog, Ui_Dialog):
|
|||||||
self._plugin_model.refresh_plugin(plugin)
|
self._plugin_model.refresh_plugin(plugin)
|
||||||
else:
|
else:
|
||||||
help = plugin.customization_help()
|
help = plugin.customization_help()
|
||||||
|
sc = plugin_customization(plugin)
|
||||||
|
if not sc:
|
||||||
|
sc = ''
|
||||||
|
sc = sc.strip()
|
||||||
text, ok = QInputDialog.getText(self, _('Customize %s')%plugin.name,
|
text, ok = QInputDialog.getText(self, _('Customize %s')%plugin.name,
|
||||||
help)
|
help, QLineEdit.Normal, sc)
|
||||||
if ok:
|
if ok:
|
||||||
customize_plugin(plugin, unicode(text))
|
customize_plugin(plugin, unicode(text).strip())
|
||||||
self._plugin_model.refresh_plugin(plugin)
|
self._plugin_model.refresh_plugin(plugin)
|
||||||
if op == 'remove':
|
if op == 'remove':
|
||||||
if remove_plugin(plugin):
|
if remove_plugin(plugin):
|
||||||
|
@ -418,13 +418,16 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
try:
|
try:
|
||||||
db = LibraryDatabase2(self.library_path)
|
db = LibraryDatabase2(self.library_path)
|
||||||
except Exception, err:
|
except Exception, err:
|
||||||
|
import traceback
|
||||||
error_dialog(self, _('Bad database location'),
|
error_dialog(self, _('Bad database location'),
|
||||||
unicode(err)).exec_()
|
_('Bad database location')+':'+self.library_path,
|
||||||
|
det_msg=traceback.format_exc()).exec_()
|
||||||
dir = unicode(QFileDialog.getExistingDirectory(self,
|
dir = unicode(QFileDialog.getExistingDirectory(self,
|
||||||
_('Choose a location for your ebook library.'),
|
_('Choose a location for your ebook library.'),
|
||||||
os.path.expanduser('~')))
|
os.path.expanduser('~')))
|
||||||
if not dir:
|
if not dir:
|
||||||
QCoreApplication.exit(1)
|
QCoreApplication.exit(1)
|
||||||
|
raise SystemExit(1)
|
||||||
else:
|
else:
|
||||||
self.library_path = dir
|
self.library_path = dir
|
||||||
db = LibraryDatabase2(self.library_path)
|
db = LibraryDatabase2(self.library_path)
|
||||||
@ -520,6 +523,11 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def spare_server(self):
|
def spare_server(self):
|
||||||
|
# Because of the use of the property decorator, we're called one
|
||||||
|
# extra time. Ignore.
|
||||||
|
if not hasattr(self, '__spare_server_property_limiter'):
|
||||||
|
self.__spare_server_property_limiter = True
|
||||||
|
return None
|
||||||
try:
|
try:
|
||||||
QTimer.singleShot(1000, self.add_spare_server)
|
QTimer.singleShot(1000, self.add_spare_server)
|
||||||
return self.spare_servers.pop()
|
return self.spare_servers.pop()
|
||||||
@ -870,6 +878,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
_('Failed to read metadata from the following')+':',
|
_('Failed to read metadata from the following')+':',
|
||||||
det_msg='\n\n'.join(det_msg), show=True)
|
det_msg='\n\n'.join(det_msg), show=True)
|
||||||
|
|
||||||
|
self._adder.cleanup()
|
||||||
self._adder = None
|
self._adder = None
|
||||||
|
|
||||||
|
|
||||||
|
@ -287,6 +287,7 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
|
|||||||
self.set_max_width()
|
self.set_max_width()
|
||||||
ca = self.view.copy_action
|
ca = self.view.copy_action
|
||||||
ca.setShortcut(QKeySequence.Copy)
|
ca.setShortcut(QKeySequence.Copy)
|
||||||
|
self.addAction(ca)
|
||||||
|
|
||||||
|
|
||||||
def set_max_width(self):
|
def set_max_width(self):
|
||||||
|
@ -219,7 +219,7 @@ class KindlePage(QWizardPage, KindleUI):
|
|||||||
|
|
||||||
if self.send_email_widget.set_email_settings(True):
|
if self.send_email_widget.set_email_settings(True):
|
||||||
conf = smtp_prefs()
|
conf = smtp_prefs()
|
||||||
accounts = conf.get('accounts', {})
|
accounts = conf.parse().accounts
|
||||||
if not accounts: accounts = {}
|
if not accounts: accounts = {}
|
||||||
for y in accounts.values():
|
for y in accounts.values():
|
||||||
y[2] = False
|
y[2] = False
|
||||||
@ -494,6 +494,9 @@ class FinishPage(QWizardPage, FinishUI):
|
|||||||
def nextId(self):
|
def nextId(self):
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
|
def commit(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Wizard(QWizard):
|
class Wizard(QWizard):
|
||||||
@ -536,7 +539,11 @@ class Wizard(QWizard):
|
|||||||
|
|
||||||
|
|
||||||
def accept(self):
|
def accept(self):
|
||||||
self.device_page.commit()
|
pages = map(self.page, self.visitedPages())
|
||||||
|
for page in pages:
|
||||||
|
if page is not self.library_page:
|
||||||
|
page.commit()
|
||||||
|
|
||||||
if not self.library_page.commit(self.completed):
|
if not self.library_page.commit(self.completed):
|
||||||
self.completed(None)
|
self.completed(None)
|
||||||
|
|
||||||
|
@ -147,10 +147,10 @@ def setup_completion(fatal_errors):
|
|||||||
from calibre.utils.smtp import option_parser as smtp_op
|
from calibre.utils.smtp import option_parser as smtp_op
|
||||||
any_formats = ['epub', 'htm', 'html', 'xhtml', 'xhtm', 'rar', 'zip',
|
any_formats = ['epub', 'htm', 'html', 'xhtml', 'xhtm', 'rar', 'zip',
|
||||||
'txt', 'lit', 'rtf', 'pdf', 'prc', 'mobi', 'fb2', 'odt']
|
'txt', 'lit', 'rtf', 'pdf', 'prc', 'mobi', 'fb2', 'odt']
|
||||||
f = open_file('/etc/bash_completion.d/libprs500')
|
if os.path.exists('/usr/share/bash-completion'):
|
||||||
f.close()
|
f = open_file('/usr/share/bash-completion/calibre')
|
||||||
os.remove(f.name)
|
else:
|
||||||
f = open_file('/etc/bash_completion.d/calibre')
|
f = open_file('/etc/bash_completion.d/calibre')
|
||||||
manifest.append(f.name)
|
manifest.append(f.name)
|
||||||
|
|
||||||
f.write('# calibre Bash Shell Completion\n')
|
f.write('# calibre Bash Shell Completion\n')
|
||||||
|
@ -57,8 +57,9 @@ Then just add this HTML file to the GUI and use the convert button to create you
|
|||||||
How do I convert my file containing non-English characters?
|
How do I convert my file containing non-English characters?
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
There are two aspects to this problem:
|
There are two aspects to this problem:
|
||||||
1. Knowing the encoding of the source file: |app| tries to guess what character encoding your source files use, but often, this is impossible, so you need to tell it what encoding to use. This can be done in the GUI via the :guilabel:`Source encoding` field in the :guilabel:`Look & Feel` section. The command-line tools all have an :option:`--encoding` option.
|
1. Knowing the encoding of the source file: |app| tries to guess what character encoding your source files use, but often, this is impossible, so you need to tell it what encoding to use. This can be done in the GUI via the :guilabel:`Input character encoding` field in the :guilabel:`Look & Feel` section. The command-line tools all have an :option:`--input-encoding` option.
|
||||||
2. Embedding fonts: If you are generating an LRF file to read on your SONY Reader, you are limited by the fact that the Reader only supports a few non-English characters in the fonts it comes pre-loaded with. You can work around this problem by embedding a unicode-aware font that supports the character set your file uses into the LRF file. You should embed atleast a serif and a sans-serif font. Be aware that embedding fonts significantly slows down page-turn speed on the reader.
|
2. When adding HTML files to |app|, you may need to tell |app| what encoding the files are in. To do this go to Preferences->Plugins->File Type plugins and customize the HTML2Zip plugin, telling it what encoding your HTML files are in. |app| will then automatically convert the HTML files into the UTF-8 encoding when adding them.
|
||||||
|
3. Embedding fonts: If you are generating an LRF file to read on your SONY Reader, you are limited by the fact that the Reader only supports a few non-English characters in the fonts it comes pre-loaded with. You can work around this problem by embedding a unicode-aware font that supports the character set your file uses into the LRF file. You should embed atleast a serif and a sans-serif font. Be aware that embedding fonts significantly slows down page-turn speed on the reader.
|
||||||
|
|
||||||
|
|
||||||
How do I use some of the advanced features of the conversion tools?
|
How do I use some of the advanced features of the conversion tools?
|
||||||
|
@ -91,6 +91,10 @@ sudo python -c "import urllib2; exec urllib2.urlopen('http://calibre.kovidgoyal.
|
|||||||
You must have xdg-utils installed
|
You must have xdg-utils installed
|
||||||
on your system before running the installer.
|
on your system before running the installer.
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
For device automounting to work, you must have the pmount
|
||||||
|
package installed on your system.
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
On a 64bit machine, you must have 32-bit versions
|
On a 64bit machine, you must have 32-bit versions
|
||||||
of common libraries like X11, freetype, fontconfig,
|
of common libraries like X11, freetype, fontconfig,
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -4,9 +4,9 @@
|
|||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre 0.6.2\n"
|
"Project-Id-Version: calibre 0.6.3\n"
|
||||||
"POT-Creation-Date: 2009-07-27 15:35+MDT\n"
|
"POT-Creation-Date: 2009-07-29 16:21+MDT\n"
|
||||||
"PO-Revision-Date: 2009-07-27 15:35+MDT\n"
|
"PO-Revision-Date: 2009-07-29 16:21+MDT\n"
|
||||||
"Last-Translator: Automatically generated\n"
|
"Last-Translator: Automatically generated\n"
|
||||||
"Language-Team: LANGUAGE\n"
|
"Language-Team: LANGUAGE\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -52,8 +52,8 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:444
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:444
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:870
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:870
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdb.py:39
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdb.py:39
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:27
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:28
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:65
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:66
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/topaz.py:29
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/topaz.py:29
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:14
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:14
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:44
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:44
|
||||||
@ -159,46 +159,50 @@ msgstr ""
|
|||||||
msgid "Follow all local links in an HTML file and create a ZIP file containing all linked files. This plugin is run every time you add an HTML file to the library."
|
msgid "Follow all local links in an HTML file and create a ZIP file containing all linked files. This plugin is run every time you add an HTML file to the library."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:48
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:47
|
||||||
|
msgid "Character encoding for the input HTML files. Common choices include: cp1252, latin1, iso-8859-1 and utf-8."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:55
|
||||||
msgid "Extract cover from comic files"
|
msgid "Extract cover from comic files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:69
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:76
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:79
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:86
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:89
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:96
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:99
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:106
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:110
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:117
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:120
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:127
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:130
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:137
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:140
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:147
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:150
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:157
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:160
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:167
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:171
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:178
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:182
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:189
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:204
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:211
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:215
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:222
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:225
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:232
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:235
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:242
|
||||||
msgid "Read metadata from %s files"
|
msgid "Read metadata from %s files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:194
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:201
|
||||||
msgid "Read metadata from ebooks in RAR archives"
|
msgid "Read metadata from ebooks in RAR archives"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:246
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:253
|
||||||
msgid "Read metadata from ebooks in ZIP archives"
|
msgid "Read metadata from ebooks in ZIP archives"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:257
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:264
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:267
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:274
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:277
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:284
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:299
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:306
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:310
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:317
|
||||||
msgid "Set metadata in %s files"
|
msgid "Set metadata in %s files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:288
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:295
|
||||||
msgid "Set metadata from %s files"
|
msgid "Set metadata from %s files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -688,7 +692,7 @@ msgstr ""
|
|||||||
msgid "List builtin recipes"
|
msgid "List builtin recipes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:246
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:249
|
||||||
msgid "Output saved to"
|
msgid "Output saved to"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -837,7 +841,7 @@ msgid "Read metadata from the specified OPF file. Metadata read from this file w
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:353
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:353
|
||||||
msgid "Transliterate unicode characters to an ASCII representation. Use with care because this will remove replace unicode characters with ASCII. For instance it will replace \"%s\" with \"Mikhail Gorbachiov\". Also, note that in cases where there are multiple representations of a character (characters shared by Chinese and Japanese for instance) the representation used by the largest number of people will be used (Chinese in the previous example)."
|
msgid "Transliterate unicode characters to an ASCII representation. Use with care because this will replace unicode characters with ASCII. For instance it will replace \"%s\" with \"Mikhail Gorbachiov\". Also, note that in cases where there are multiple representations of a character (characters shared by Chinese and Japanese for instance) the representation used by the largest number of people will be used (Chinese in the previous example)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:368
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:368
|
||||||
@ -1904,11 +1908,11 @@ msgstr ""
|
|||||||
msgid "Books with the same title as the following already exist in the database. Add them anyway?"
|
msgid "Books with the same title as the following already exist in the database. Add them anyway?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:176
|
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:185
|
||||||
msgid "Saving..."
|
msgid "Saving..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:228
|
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:237
|
||||||
msgid "Saved"
|
msgid "Saved"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3030,66 +3034,66 @@ msgstr ""
|
|||||||
msgid "Plugin: %s does not need customization"
|
msgid "Plugin: %s does not need customization"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:556
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:560
|
||||||
msgid "Customize %s"
|
msgid "Customize %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:566
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:570
|
||||||
msgid "Cannot remove builtin plugin"
|
msgid "Cannot remove builtin plugin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:567
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:571
|
||||||
msgid " cannot be removed. It is a builtin plugin. Try disabling it instead."
|
msgid " cannot be removed. It is a builtin plugin. Try disabling it instead."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:600
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:604
|
||||||
msgid "Error log:"
|
msgid "Error log:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:607
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:611
|
||||||
msgid "Access log:"
|
msgid "Access log:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:632
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:636
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:562
|
||||||
msgid "Failed to start content server"
|
msgid "Failed to start content server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:656
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:660
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:460
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:460
|
||||||
msgid "Select location for books"
|
msgid "Select location for books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:673
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:677
|
||||||
msgid "Invalid size"
|
msgid "Invalid size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:674
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:678
|
||||||
msgid "The size %s is invalid. must be of the form widthxheight"
|
msgid "The size %s is invalid. must be of the form widthxheight"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:719
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:723
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:724
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:728
|
||||||
msgid "Invalid database location"
|
msgid "Invalid database location"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:720
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:724
|
||||||
msgid "Invalid database location "
|
msgid "Invalid database location "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:721
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:725
|
||||||
msgid "<br>Must be a directory."
|
msgid "<br>Must be a directory."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:725
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:729
|
||||||
msgid "Invalid database location.<br>Cannot write to "
|
msgid "Invalid database location.<br>Cannot write to "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:739
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:743
|
||||||
msgid "Compacting..."
|
msgid "Compacting..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:740
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:744
|
||||||
msgid "Compacting database. This may take a while."
|
msgid "Compacting database. This may take a while."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -4442,7 +4446,7 @@ msgid "<b>No matches</b> for the search phrase <i>%s</i> were found."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:157
|
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:157
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:416
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:417
|
||||||
msgid "No matches found"
|
msgid "No matches found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -4494,7 +4498,7 @@ msgid "Save single format to disk..."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:138
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:138
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:984
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:993
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:49
|
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:49
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -4569,7 +4573,7 @@ msgid "Save to disk in a single directory"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:278
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:278
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1457
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1466
|
||||||
msgid "Save only %s format to disk"
|
msgid "Save only %s format to disk"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -4598,36 +4602,37 @@ msgstr ""
|
|||||||
msgid "Similar books..."
|
msgid "Similar books..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:421
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:422
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:423
|
||||||
msgid "Bad database location"
|
msgid "Bad database location"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:424
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:426
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1585
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1594
|
||||||
msgid "Choose a location for your ebook library."
|
msgid "Choose a location for your ebook library."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:605
|
||||||
msgid "Browse by covers"
|
msgid "Browse by covers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:704
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:712
|
||||||
msgid "Device: "
|
msgid "Device: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:706
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:714
|
||||||
msgid " detected."
|
msgid " detected."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:728
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736
|
||||||
msgid "Connected "
|
msgid "Connected "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:748
|
||||||
msgid "Device database corrupted"
|
msgid "Device database corrupted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:741
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:749
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
" <p>The database of books on the reader is corrupted. Try the following:\n"
|
" <p>The database of books on the reader is corrupted. Try the following:\n"
|
||||||
@ -4638,301 +4643,301 @@ msgid ""
|
|||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:817
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:825
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:868
|
||||||
msgid "Uploading books to device."
|
msgid "Uploading books to device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:825
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833
|
||||||
msgid "Books"
|
msgid "Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:826
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834
|
||||||
msgid "EPUB Books"
|
msgid "EPUB Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:827
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835
|
||||||
msgid "LRF Books"
|
msgid "LRF Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:828
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:836
|
||||||
msgid "HTML Books"
|
msgid "HTML Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:837
|
||||||
msgid "LIT Books"
|
msgid "LIT Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:830
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:838
|
||||||
msgid "MOBI Books"
|
msgid "MOBI Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:839
|
||||||
msgid "Text books"
|
msgid "Text books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:840
|
||||||
msgid "PDF Books"
|
msgid "PDF Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:841
|
||||||
msgid "Comics"
|
msgid "Comics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:842
|
||||||
msgid "Archives"
|
msgid "Archives"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:869
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:877
|
||||||
msgid "Failed to read metadata"
|
msgid "Failed to read metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:870
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:878
|
||||||
msgid "Failed to read metadata from the following"
|
msgid "Failed to read metadata from the following"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:888
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:897
|
||||||
msgid "The selected books will be <b>permanently deleted</b> and the files removed from your computer. Are you sure?"
|
msgid "The selected books will be <b>permanently deleted</b> and the files removed from your computer. Are you sure?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:915
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:924
|
||||||
msgid "Deleting books from device."
|
msgid "Deleting books from device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:946
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:955
|
||||||
msgid "Cannot download metadata"
|
msgid "Cannot download metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:947
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:956
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:995
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1004
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1025
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1034
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1050
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1181
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1190
|
||||||
msgid "No books selected"
|
msgid "No books selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:956
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:965
|
||||||
msgid "covers"
|
msgid "covers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:956
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:965
|
||||||
msgid "metadata"
|
msgid "metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:958
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:967
|
||||||
msgid "Downloading %s for %d book(s)"
|
msgid "Downloading %s for %d book(s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:979
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:988
|
||||||
msgid "Failed to download some metadata"
|
msgid "Failed to download some metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:980
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:989
|
||||||
msgid "Failed to download metadata for the following:"
|
msgid "Failed to download metadata for the following:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:983
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:992
|
||||||
msgid "Failed to download metadata:"
|
msgid "Failed to download metadata:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:994
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1003
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1024
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1033
|
||||||
msgid "Cannot edit metadata"
|
msgid "Cannot edit metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1049
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058
|
||||||
msgid "Cannot save to disk"
|
msgid "Cannot save to disk"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1052
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061
|
||||||
msgid "Choose destination directory"
|
msgid "Choose destination directory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1075
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1084
|
||||||
msgid "Error while saving"
|
msgid "Error while saving"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1076
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085
|
||||||
msgid "There was an error while saving."
|
msgid "There was an error while saving."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1080
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1089
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1081
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1090
|
||||||
msgid "Could not save some books"
|
msgid "Could not save some books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1082
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1091
|
||||||
msgid "as the %s format is not available for them."
|
msgid "as the %s format is not available for them."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1083
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1092
|
||||||
msgid "Click the show details button to see which ones."
|
msgid "Click the show details button to see which ones."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1102
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1111
|
||||||
msgid "Fetching news from "
|
msgid "Fetching news from "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1115
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1124
|
||||||
msgid " fetched."
|
msgid " fetched."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1180
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1189
|
||||||
msgid "Cannot convert"
|
msgid "Cannot convert"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1350
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1359
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1369
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378
|
||||||
msgid "No book selected"
|
msgid "No book selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1350
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1359
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1402
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1411
|
||||||
msgid "Cannot view"
|
msgid "Cannot view"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1356
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1365
|
||||||
msgid "Choose the format to view"
|
msgid "Choose the format to view"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1368
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1377
|
||||||
msgid "Cannot open folder"
|
msgid "Cannot open folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1385
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1394
|
||||||
msgid "Multiple Books Selected"
|
msgid "Multiple Books Selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1386
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395
|
||||||
msgid "You are attempting to open %d books. Opening too many books at once can be slow and have a negative effect on the responsiveness of your computer. Once started the process cannot be stopped until complete. Do you wish to continue?"
|
msgid "You are attempting to open %d books. Opening too many books at once can be slow and have a negative effect on the responsiveness of your computer. Once started the process cannot be stopped until complete. Do you wish to continue?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1403
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1412
|
||||||
msgid "%s has no available formats."
|
msgid "%s has no available formats."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1441
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1450
|
||||||
msgid "Cannot configure"
|
msgid "Cannot configure"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1442
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1451
|
||||||
msgid "Cannot configure while there are running jobs."
|
msgid "Cannot configure while there are running jobs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1486
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1495
|
||||||
msgid "No detailed info available"
|
msgid "No detailed info available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1487
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1496
|
||||||
msgid "No detailed information is available for books on the device."
|
msgid "No detailed information is available for books on the device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1535
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1544
|
||||||
msgid "Error talking to device"
|
msgid "Error talking to device"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1536
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1545
|
||||||
msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot."
|
msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1553
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1562
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1568
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1577
|
||||||
msgid "Conversion Error"
|
msgid "Conversion Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1554
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1563
|
||||||
msgid "<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must first remove the DRM using 3rd party tools."
|
msgid "<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must first remove the DRM using 3rd party tools."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1569
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1578
|
||||||
msgid "<b>Failed</b>"
|
msgid "<b>Failed</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1594
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1603
|
||||||
msgid "Invalid library location"
|
msgid "Invalid library location"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1595
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1604
|
||||||
msgid "Could not access %s. Using %s as the library."
|
msgid "Could not access %s. Using %s as the library."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1643
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1652
|
||||||
msgid "is the result of the efforts of many volunteers from all over the world. If you find it useful, please consider donating to support its development."
|
msgid "is the result of the efforts of many volunteers from all over the world. If you find it useful, please consider donating to support its development."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1667
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1676
|
||||||
msgid "There are active jobs. Are you sure you want to quit?"
|
msgid "There are active jobs. Are you sure you want to quit?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1670
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1679
|
||||||
msgid ""
|
msgid ""
|
||||||
" is communicating with the device!<br>\n"
|
" is communicating with the device!<br>\n"
|
||||||
" Quitting may cause corruption on the device.<br>\n"
|
" Quitting may cause corruption on the device.<br>\n"
|
||||||
" Are you sure you want to quit?"
|
" Are you sure you want to quit?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1674
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1683
|
||||||
msgid "WARNING: Active jobs"
|
msgid "WARNING: Active jobs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1725
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1734
|
||||||
msgid "will keep running in the system tray. To close it, choose <b>Quit</b> in the context menu of the system tray."
|
msgid "will keep running in the system tray. To close it, choose <b>Quit</b> in the context menu of the system tray."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1744
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1753
|
||||||
msgid "<span style=\"color:red; font-weight:bold\">Latest version: <a href=\"%s\">%s</a></span>"
|
msgid "<span style=\"color:red; font-weight:bold\">Latest version: <a href=\"%s\">%s</a></span>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1752
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1761
|
||||||
msgid "Update available"
|
msgid "Update available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1753
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1762
|
||||||
msgid "%s has been updated to version %s. See the <a href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. Visit the download page?"
|
msgid "%s has been updated to version %s. See the <a href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. Visit the download page?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1771
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1780
|
||||||
msgid "Use the library located at the specified path."
|
msgid "Use the library located at the specified path."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1773
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1782
|
||||||
msgid "Start minimized to system tray."
|
msgid "Start minimized to system tray."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1775
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1784
|
||||||
msgid "Log debugging information to console"
|
msgid "Log debugging information to console"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1823
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1832
|
||||||
msgid "If you are sure it is not running"
|
msgid "If you are sure it is not running"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1825
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1834
|
||||||
msgid "Cannot Start "
|
msgid "Cannot Start "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1826
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1835
|
||||||
msgid "%s is already running."
|
msgid "%s is already running."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1829
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1838
|
||||||
msgid "may be running in the system tray, in the"
|
msgid "may be running in the system tray, in the"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1831
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1840
|
||||||
msgid "upper right region of the screen."
|
msgid "upper right region of the screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1833
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1842
|
||||||
msgid "lower right region of the screen."
|
msgid "lower right region of the screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1836
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1845
|
||||||
msgid "try rebooting your computer."
|
msgid "try rebooting your computer."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1838
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1847
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1858
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1867
|
||||||
msgid "try deleting the file"
|
msgid "try deleting the file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -5274,7 +5279,7 @@ msgid "Options to customize the ebook viewer"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:59
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:59
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:645
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:646
|
||||||
msgid "Remember last used window size"
|
msgid "Remember last used window size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -5351,67 +5356,67 @@ msgstr ""
|
|||||||
msgid "Print Preview"
|
msgid "Print Preview"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:376
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:377
|
||||||
msgid "Choose ebook"
|
msgid "Choose ebook"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:377
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:378
|
||||||
msgid "Ebooks"
|
msgid "Ebooks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:396
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:397
|
||||||
msgid "Add bookmark"
|
msgid "Add bookmark"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:396
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:397
|
||||||
msgid "Enter title for bookmark:"
|
msgid "Enter title for bookmark:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:417
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:418
|
||||||
msgid "No matches found for: %s"
|
msgid "No matches found for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:457
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:458
|
||||||
msgid "Loading flow..."
|
msgid "Loading flow..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:484
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:485
|
||||||
msgid "Laying out %s"
|
msgid "Laying out %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:513
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:514
|
||||||
msgid "Manage Bookmarks"
|
msgid "Manage Bookmarks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:548
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:549
|
||||||
msgid "Loading ebook..."
|
msgid "Loading ebook..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:556
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:557
|
||||||
msgid "DRM Error"
|
msgid "DRM Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:557
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:558
|
||||||
msgid "<p>This book is protected by <a href=\"%s\">DRM</a>"
|
msgid "<p>This book is protected by <a href=\"%s\">DRM</a>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:561
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:562
|
||||||
msgid "Could not open ebook"
|
msgid "Could not open ebook"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:635
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:636
|
||||||
msgid "Options to control the ebook viewer"
|
msgid "Options to control the ebook viewer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:642
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:643
|
||||||
msgid "If specified, viewer window will try to come to the front when started."
|
msgid "If specified, viewer window will try to come to the front when started."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:647
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:648
|
||||||
msgid "Print javascript alert and console messages to the console"
|
msgid "Print javascript alert and console messages to the console"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:653
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:654
|
||||||
msgid ""
|
msgid ""
|
||||||
"%prog [options] file\n"
|
"%prog [options] file\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -5578,7 +5583,7 @@ msgstr ""
|
|||||||
msgid "Could not move library"
|
msgid "Could not move library"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:503
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:506
|
||||||
msgid "welcome wizard"
|
msgid "welcome wizard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -6458,7 +6463,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jb_online.py:47
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jb_online.py:47
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_o_globo.py:69
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_o_globo.py:69
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_publico.py:20
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_publico.py:20
|
||||||
msgid "Portugese"
|
msgid "Portuguese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15
|
||||||
@ -6484,7 +6489,7 @@ msgstr ""
|
|||||||
msgid "Kovid Goyal and Sujata Raman"
|
msgid "Kovid Goyal and Sujata Raman"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zaobao.py:19
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zaobao.py:17
|
||||||
msgid "Chinese"
|
msgid "Chinese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -10,18 +10,17 @@ import re
|
|||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class ESPN(BasicNewsRecipe):
|
class ESPN(BasicNewsRecipe):
|
||||||
|
|
||||||
title = 'ESPN'
|
title = 'ESPN'
|
||||||
description = 'Sports news'
|
description = 'Sports news'
|
||||||
__author__ = 'Kovid Goyal'
|
__author__ = 'Kovid Goyal'
|
||||||
language = _('English')
|
language = _('English')
|
||||||
|
|
||||||
needs_subscription = True
|
needs_subscription = True
|
||||||
remove_tags = [dict(name='font', attrs={'class':'footer'}), dict(name='hr', noshade='noshade')]
|
remove_tags = [dict(name='font', attrs={'class':'footer'}), dict(name='hr', noshade='noshade')]
|
||||||
remove_tags_before = dict(name='font', attrs={'class':'date'})
|
remove_tags_before = dict(name='font', attrs={'class':'date'})
|
||||||
center_navbar = False
|
center_navbar = False
|
||||||
html2lrf_options = ['--base-font-size', '0']
|
|
||||||
|
|
||||||
feeds = [('Top Headlines', 'http://sports.espn.go.com/espn/rss/news'),
|
feeds = [('Top Headlines', 'http://sports.espn.go.com/espn/rss/news'),
|
||||||
'http://sports.espn.go.com/espn/rss/nfl/news',
|
'http://sports.espn.go.com/espn/rss/nfl/news',
|
||||||
'http://sports.espn.go.com/espn/rss/nba/news',
|
'http://sports.espn.go.com/espn/rss/nba/news',
|
||||||
@ -39,37 +38,37 @@ class ESPN(BasicNewsRecipe):
|
|||||||
'http://sports.espn.go.com/espn/rss/bassmaster/news',
|
'http://sports.espn.go.com/espn/rss/bassmaster/news',
|
||||||
'http://sports.espn.go.com/espn/rss/oly/news',
|
'http://sports.espn.go.com/espn/rss/oly/news',
|
||||||
'http://sports.espn.go.com/espn/rss/horse/news']
|
'http://sports.espn.go.com/espn/rss/horse/news']
|
||||||
|
|
||||||
def get_browser(self):
|
def get_browser(self):
|
||||||
br = BasicNewsRecipe.get_browser()
|
br = BasicNewsRecipe.get_browser()
|
||||||
br.set_handle_refresh(False)
|
br.set_handle_refresh(False)
|
||||||
if self.username is not None and self.password is not None:
|
if self.username is not None and self.password is not None:
|
||||||
br.open('http://espn.com')
|
br.open('http://espn.com')
|
||||||
br.select_form(nr=0)
|
br.select_form(nr=1)
|
||||||
br.form.find_control(name='username', type='text').value = self.username
|
br.form.find_control(name='username', type='text').value = self.username
|
||||||
br.form['password'] = self.password
|
br.form['password'] = self.password
|
||||||
br.submit()
|
br.submit()
|
||||||
br.set_handle_refresh(True)
|
br.set_handle_refresh(True)
|
||||||
return br
|
return br
|
||||||
|
|
||||||
def print_version(self, url):
|
def print_version(self, url):
|
||||||
if 'eticket' in url:
|
if 'eticket' in url:
|
||||||
return url.partition('&')[0].replace('story?', 'print?')
|
return url.partition('&')[0].replace('story?', 'print?')
|
||||||
match = re.search(r'story\?(id=\d+)', url)
|
match = re.search(r'story\?(id=\d+)', url)
|
||||||
if match:
|
if match:
|
||||||
return 'http://sports.espn.go.com/espn/print?'+match.group(1)+'&type=story'
|
return 'http://sports.espn.go.com/espn/print?'+match.group(1)+'&type=story'
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
for div in soup.findAll('div'):
|
for div in soup.findAll('div'):
|
||||||
if div.has_key('style') and 'px' in div['style']:
|
if div.has_key('style') and 'px' in div['style']:
|
||||||
div['style'] = ''
|
div['style'] = ''
|
||||||
|
|
||||||
return soup
|
return soup
|
||||||
|
|
||||||
def postprocess_html(self, soup, first_fetch):
|
def postprocess_html(self, soup, first_fetch):
|
||||||
for div in soup.findAll('div', style=True):
|
for div in soup.findAll('div', style=True):
|
||||||
div['style'] = div['style'].replace('center', 'left')
|
div['style'] = div['style'].replace('center', 'left')
|
||||||
return soup
|
return soup
|
||||||
|
|
||||||
|
@ -1,62 +1,62 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
estadao.com.br
|
estadao.com.br
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class Estadao(BasicNewsRecipe):
|
class Estadao(BasicNewsRecipe):
|
||||||
title = 'O Estado de S. Paulo'
|
title = 'O Estado de S. Paulo'
|
||||||
__author__ = 'Darko Miletic'
|
__author__ = 'Darko Miletic'
|
||||||
description = 'News from Brasil in Portugese'
|
description = 'News from Brasil in Portuguese'
|
||||||
publisher = 'O Estado de S. Paulo'
|
publisher = 'O Estado de S. Paulo'
|
||||||
category = 'news, politics, Brasil'
|
category = 'news, politics, Brasil'
|
||||||
oldest_article = 2
|
oldest_article = 2
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
encoding = 'utf8'
|
encoding = 'utf8'
|
||||||
cover_url = 'http://www.estadao.com.br/img/logo_estadao.png'
|
cover_url = 'http://www.estadao.com.br/img/logo_estadao.png'
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
|
|
||||||
html2lrf_options = [
|
html2lrf_options = [
|
||||||
'--comment', description
|
'--comment', description
|
||||||
, '--category', category
|
, '--category', category
|
||||||
, '--publisher', publisher
|
, '--publisher', publisher
|
||||||
]
|
]
|
||||||
|
|
||||||
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
|
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
|
||||||
|
|
||||||
keep_only_tags = [dict(name='div', attrs={'id':'c1'})]
|
keep_only_tags = [dict(name='div', attrs={'id':'c1'})]
|
||||||
|
|
||||||
remove_tags = [
|
remove_tags = [
|
||||||
dict(name=['script','object','form','ul'])
|
dict(name=['script','object','form','ul'])
|
||||||
,dict(name='div', attrs={'id':['votacao','estadaohoje']})
|
,dict(name='div', attrs={'id':['votacao','estadaohoje']})
|
||||||
,dict(name='p', attrs={'id':'ctrl_texto'})
|
,dict(name='p', attrs={'id':'ctrl_texto'})
|
||||||
,dict(name='p', attrs={'class':'texto'})
|
,dict(name='p', attrs={'class':'texto'})
|
||||||
]
|
]
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
(u'Manchetes Estadao', u'http://www.estadao.com.br/rss/manchetes.xml')
|
(u'Manchetes Estadao', u'http://www.estadao.com.br/rss/manchetes.xml')
|
||||||
,(u'Ultimas noticias', u'http://www.estadao.com.br/rss/ultimas.xml')
|
,(u'Ultimas noticias', u'http://www.estadao.com.br/rss/ultimas.xml')
|
||||||
,(u'Nacional', u'http://www.estadao.com.br/rss/nacional.xml')
|
,(u'Nacional', u'http://www.estadao.com.br/rss/nacional.xml')
|
||||||
,(u'Internacional', u'http://www.estadao.com.br/rss/internacional.xml')
|
,(u'Internacional', u'http://www.estadao.com.br/rss/internacional.xml')
|
||||||
,(u'Cidades', u'http://www.estadao.com.br/rss/cidades.xml')
|
,(u'Cidades', u'http://www.estadao.com.br/rss/cidades.xml')
|
||||||
,(u'Esportes', u'http://www.estadao.com.br/rss/esportes.xml')
|
,(u'Esportes', u'http://www.estadao.com.br/rss/esportes.xml')
|
||||||
,(u'Arte & Lazer', u'http://www.estadao.com.br/rss/arteelazer.xml')
|
,(u'Arte & Lazer', u'http://www.estadao.com.br/rss/arteelazer.xml')
|
||||||
,(u'Economia', u'http://www.estadao.com.br/rss/economia.xml')
|
,(u'Economia', u'http://www.estadao.com.br/rss/economia.xml')
|
||||||
,(u'Vida &', u'http://www.estadao.com.br/rss/vidae.xml')
|
,(u'Vida &', u'http://www.estadao.com.br/rss/vidae.xml')
|
||||||
]
|
]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
ifr = soup.find('iframe')
|
ifr = soup.find('iframe')
|
||||||
if ifr:
|
if ifr:
|
||||||
ifr.extract()
|
ifr.extract()
|
||||||
for item in soup.findAll(style=True):
|
for item in soup.findAll(style=True):
|
||||||
del item['style']
|
del item['style']
|
||||||
return soup
|
return soup
|
||||||
|
|
||||||
language = _('Portugese')
|
language = _('Portuguese')
|
||||||
|
@ -1,47 +1,47 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
jbonline.terra.com.br
|
jbonline.terra.com.br
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class JBOnline(BasicNewsRecipe):
|
class JBOnline(BasicNewsRecipe):
|
||||||
title = 'Jornal Brasileiro Online'
|
title = 'Jornal Brasileiro Online'
|
||||||
__author__ = 'Darko Miletic'
|
__author__ = 'Darko Miletic'
|
||||||
description = 'News from Brasil'
|
description = 'News from Brasil'
|
||||||
publisher = 'Jornal Brasileiro'
|
publisher = 'Jornal Brasileiro'
|
||||||
category = 'news, politics, Brasil'
|
category = 'news, politics, Brasil'
|
||||||
oldest_article = 2
|
oldest_article = 2
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
encoding = 'cp1252'
|
encoding = 'cp1252'
|
||||||
cover_url = 'http://jbonline.terra.com.br/img/logo_01.gif'
|
cover_url = 'http://jbonline.terra.com.br/img/logo_01.gif'
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
|
|
||||||
html2lrf_options = [
|
html2lrf_options = [
|
||||||
'--comment', description
|
'--comment', description
|
||||||
, '--category', category
|
, '--category', category
|
||||||
, '--publisher', publisher
|
, '--publisher', publisher
|
||||||
]
|
]
|
||||||
|
|
||||||
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
|
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
|
||||||
|
|
||||||
keep_only_tags = [dict(name='div', attrs={'id':'corpoNoticia'})]
|
keep_only_tags = [dict(name='div', attrs={'id':'corpoNoticia'})]
|
||||||
|
|
||||||
remove_tags = [dict(name=['script','object','form'])]
|
remove_tags = [dict(name=['script','object','form'])]
|
||||||
|
|
||||||
feeds = [(u'Todos as editorias', u'http://jbonline.terra.com.br/extra/rsstrjb.xml')]
|
feeds = [(u'Todos as editorias', u'http://jbonline.terra.com.br/extra/rsstrjb.xml')]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
ifr = soup.find('iframe')
|
ifr = soup.find('iframe')
|
||||||
if ifr:
|
if ifr:
|
||||||
ifr.extract()
|
ifr.extract()
|
||||||
for item in soup.findAll(style=True):
|
for item in soup.findAll(style=True):
|
||||||
del item['style']
|
del item['style']
|
||||||
return soup
|
return soup
|
||||||
|
|
||||||
language = _('Portugese')
|
language = _('Portuguese')
|
||||||
|
@ -30,6 +30,7 @@ class Newsweek(BasicNewsRecipe):
|
|||||||
remove_tags = [
|
remove_tags = [
|
||||||
{'class':['fwArticle noHr','fwArticle','subinfo','hdlBulletItem','head-content','navbar','link', 'ad', 'sponsorLinksArticle', 'mm-content',
|
{'class':['fwArticle noHr','fwArticle','subinfo','hdlBulletItem','head-content','navbar','link', 'ad', 'sponsorLinksArticle', 'mm-content',
|
||||||
'inline-social-links-wrapper', 'email-article',
|
'inline-social-links-wrapper', 'email-article',
|
||||||
|
'inlineComponentRight',
|
||||||
'comments-and-social-links-wrapper', 'EmailArticleBlock']},
|
'comments-and-social-links-wrapper', 'EmailArticleBlock']},
|
||||||
{'id' : ['footer', 'ticker-data', 'topTenVertical',
|
{'id' : ['footer', 'ticker-data', 'topTenVertical',
|
||||||
'digg-top-five', 'mesothorax', 'nw-comments',
|
'digg-top-five', 'mesothorax', 'nw-comments',
|
||||||
|
@ -1,69 +1,69 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
oglobo.globo.com
|
oglobo.globo.com
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class OGlobo(BasicNewsRecipe):
|
class OGlobo(BasicNewsRecipe):
|
||||||
title = 'O Globo'
|
title = 'O Globo'
|
||||||
__author__ = 'Darko Miletic'
|
__author__ = 'Darko Miletic'
|
||||||
description = 'News from Brasil'
|
description = 'News from Brasil'
|
||||||
publisher = 'O Globo'
|
publisher = 'O Globo'
|
||||||
category = 'news, politics, Brasil'
|
category = 'news, politics, Brasil'
|
||||||
oldest_article = 2
|
oldest_article = 2
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
encoding = 'cp1252'
|
encoding = 'cp1252'
|
||||||
cover_url = 'http://oglobo.globo.com/_img/o-globo.png'
|
cover_url = 'http://oglobo.globo.com/_img/o-globo.png'
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
|
|
||||||
html2lrf_options = [
|
html2lrf_options = [
|
||||||
'--comment', description
|
'--comment', description
|
||||||
, '--category', category
|
, '--category', category
|
||||||
, '--publisher', publisher
|
, '--publisher', publisher
|
||||||
]
|
]
|
||||||
|
|
||||||
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
|
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
|
||||||
|
|
||||||
keep_only_tags = [dict(name='div', attrs={'id':'ltintb'})]
|
keep_only_tags = [dict(name='div', attrs={'id':'ltintb'})]
|
||||||
|
|
||||||
remove_tags = [
|
remove_tags = [
|
||||||
dict(name='script')
|
dict(name='script')
|
||||||
,dict(name='object')
|
,dict(name='object')
|
||||||
,dict(name='form')
|
,dict(name='form')
|
||||||
,dict(name='div', attrs={'id':['linksPatGoogle','rdpm','cor','com','env','rcm_st']})
|
,dict(name='div', attrs={'id':['linksPatGoogle','rdpm','cor','com','env','rcm_st']})
|
||||||
,dict(name='div', attrs={'class':'box-zap-anu2'})
|
,dict(name='div', attrs={'class':'box-zap-anu2'})
|
||||||
,dict(name='a')
|
,dict(name='a')
|
||||||
,dict(name='link')
|
,dict(name='link')
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
(u'Todos os canais', u'http://oglobo.globo.com/rss/plantao.xml')
|
(u'Todos os canais', u'http://oglobo.globo.com/rss/plantao.xml')
|
||||||
,(u'Ciencia', u'http://oglobo.globo.com/rss/plantaociencia.xml')
|
,(u'Ciencia', u'http://oglobo.globo.com/rss/plantaociencia.xml')
|
||||||
,(u'Educacao', u'http://oglobo.globo.com/rss/plantaoeducacao.xml')
|
,(u'Educacao', u'http://oglobo.globo.com/rss/plantaoeducacao.xml')
|
||||||
,(u'Opiniao', u'http://oglobo.globo.com/rss/plantaoopiniao.xml')
|
,(u'Opiniao', u'http://oglobo.globo.com/rss/plantaoopiniao.xml')
|
||||||
,(u'Sao Paulo', u'http://oglobo.globo.com/rss/plantaosaopaulo.xml')
|
,(u'Sao Paulo', u'http://oglobo.globo.com/rss/plantaosaopaulo.xml')
|
||||||
,(u'Viagem', u'http://oglobo.globo.com/rss/plantaoviagem.xml')
|
,(u'Viagem', u'http://oglobo.globo.com/rss/plantaoviagem.xml')
|
||||||
,(u'Cultura', u'http://oglobo.globo.com/rss/plantaocultura.xml')
|
,(u'Cultura', u'http://oglobo.globo.com/rss/plantaocultura.xml')
|
||||||
,(u'Esportes', u'http://oglobo.globo.com/rss/plantaoesportes.xml')
|
,(u'Esportes', u'http://oglobo.globo.com/rss/plantaoesportes.xml')
|
||||||
,(u'Mundo', u'http://oglobo.globo.com/rss/plantaomundo.xml')
|
,(u'Mundo', u'http://oglobo.globo.com/rss/plantaomundo.xml')
|
||||||
,(u'Pais', u'http://oglobo.globo.com/rss/plantaopais.xml')
|
,(u'Pais', u'http://oglobo.globo.com/rss/plantaopais.xml')
|
||||||
,(u'Rio', u'http://oglobo.globo.com/rss/plantaorio.xml')
|
,(u'Rio', u'http://oglobo.globo.com/rss/plantaorio.xml')
|
||||||
,(u'Saude', u'http://oglobo.globo.com/rss/plantaosaude.xml')
|
,(u'Saude', u'http://oglobo.globo.com/rss/plantaosaude.xml')
|
||||||
,(u'Viver Melhor', u'http://oglobo.globo.com/rss/plantaovivermelhor.xml')
|
,(u'Viver Melhor', u'http://oglobo.globo.com/rss/plantaovivermelhor.xml')
|
||||||
,(u'Economia', u'http://oglobo.globo.com/rss/plantaoeconomia.xml')
|
,(u'Economia', u'http://oglobo.globo.com/rss/plantaoeconomia.xml')
|
||||||
,(u'Tecnologia', u'http://oglobo.globo.com/rss/plantaotecnologia.xml')
|
,(u'Tecnologia', u'http://oglobo.globo.com/rss/plantaotecnologia.xml')
|
||||||
]
|
]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
for item in soup.findAll(style=True):
|
for item in soup.findAll(style=True):
|
||||||
del item['style']
|
del item['style']
|
||||||
return soup
|
return soup
|
||||||
|
|
||||||
language = _('Portugese')
|
language = _('Portuguese')
|
||||||
|
@ -11,23 +11,23 @@ from calibre.web.feeds.news import BasicNewsRecipe
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
class Publico(BasicNewsRecipe):
|
class Publico(BasicNewsRecipe):
|
||||||
title = u'P\xc3\xbablico'
|
title = u'P\xfablico'
|
||||||
__author__ = 'David Rodrigues'
|
__author__ = 'David Rodrigues'
|
||||||
oldest_article = 1
|
oldest_article = 1
|
||||||
max_articles_per_feed = 30
|
max_articles_per_feed = 30
|
||||||
encoding='utf-8'
|
encoding='utf-8'
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
language = _('Portugese')
|
language = _('Portuguese')
|
||||||
preprocess_regexps = [(re.compile(u"\uFFFD", re.DOTALL|re.IGNORECASE), lambda match: ''),]
|
preprocess_regexps = [(re.compile(u"\uFFFD", re.DOTALL|re.IGNORECASE), lambda match: ''),]
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
(u'Geral', u'http://feeds.feedburner.com/PublicoUltimaHora'),
|
(u'Geral', u'http://feeds.feedburner.com/PublicoUltimaHora'),
|
||||||
(u'Internacional', u'http://www.publico.clix.pt/rss.ashx?idCanal=11'),
|
(u'Internacional', u'http://www.publico.clix.pt/rss.ashx?idCanal=11'),
|
||||||
(u'Pol\xc3\xadtica', u'http://www.publico.clix.pt/rss.ashx?idCanal=12'),
|
(u'Pol\xedtica', u'http://www.publico.clix.pt/rss.ashx?idCanal=12'),
|
||||||
(u'Ci\xc3\xaancias', u'http://www.publico.clix.pt/rss.ashx?idCanal=13'),
|
(u'Ci\xcencias', u'http://www.publico.clix.pt/rss.ashx?idCanal=13'),
|
||||||
(u'Desporto', u'http://desporto.publico.pt/rss.ashx'),
|
(u'Desporto', u'http://desporto.publico.pt/rss.ashx'),
|
||||||
(u'Economia', u'http://www.publico.clix.pt/rss.ashx?idCanal=57'),
|
(u'Economia', u'http://www.publico.clix.pt/rss.ashx?idCanal=57'),
|
||||||
(u'Educa\xc3\xa7\xc3\xa3o', u'http://www.publico.clix.pt/rss.ashx?idCanal=58'),
|
(u'Educa\xe7\xe3o', u'http://www.publico.clix.pt/rss.ashx?idCanal=58'),
|
||||||
(u'Local', u'http://www.publico.clix.pt/rss.ashx?idCanal=59'),
|
(u'Local', u'http://www.publico.clix.pt/rss.ashx?idCanal=59'),
|
||||||
(u'Media e Tecnologia', u'http://www.publico.clix.pt/rss.ashx?idCanal=61'),
|
(u'Media e Tecnologia', u'http://www.publico.clix.pt/rss.ashx?idCanal=61'),
|
||||||
(u'Sociedade', u'http://www.publico.clix.pt/rss.ashx?idCanal=62')
|
(u'Sociedade', u'http://www.publico.clix.pt/rss.ashx?idCanal=62')
|
||||||
|
@ -5,10 +5,8 @@ __copyright__ = '2009, Pu Bo <pubo at pubolab.com>'
|
|||||||
'''
|
'''
|
||||||
zaobao.com
|
zaobao.com
|
||||||
'''
|
'''
|
||||||
import time, os, traceback, sys
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
from calibre.web.feeds import feeds_from_index, Feed, Article
|
from calibre.web.feeds import feeds_from_index
|
||||||
from BeautifulSoup import Tag
|
|
||||||
|
|
||||||
class ZAOBAO(BasicNewsRecipe):
|
class ZAOBAO(BasicNewsRecipe):
|
||||||
title = u'\u8054\u5408\u65e9\u62a5\u7f51 zaobao.com'
|
title = u'\u8054\u5408\u65e9\u62a5\u7f51 zaobao.com'
|
||||||
@ -72,7 +70,7 @@ class ZAOBAO(BasicNewsRecipe):
|
|||||||
return soup
|
return soup
|
||||||
|
|
||||||
def parse_feeds(self):
|
def parse_feeds(self):
|
||||||
self.log_debug('ZAOBAO overrided parse_feeds()')
|
self.log.debug('ZAOBAO overrided parse_feeds()')
|
||||||
parsed_feeds = BasicNewsRecipe.parse_feeds(self)
|
parsed_feeds = BasicNewsRecipe.parse_feeds(self)
|
||||||
|
|
||||||
for id, obj in enumerate(self.INDEXES):
|
for id, obj in enumerate(self.INDEXES):
|
||||||
@ -89,7 +87,7 @@ class ZAOBAO(BasicNewsRecipe):
|
|||||||
a_title = self.tag_to_string(a)
|
a_title = self.tag_to_string(a)
|
||||||
date = ''
|
date = ''
|
||||||
description = ''
|
description = ''
|
||||||
self.log_debug('adding %s at %s'%(a_title,a_url))
|
self.log.debug('adding %s at %s'%(a_title,a_url))
|
||||||
articles.append({
|
articles.append({
|
||||||
'title':a_title,
|
'title':a_title,
|
||||||
'date':date,
|
'date':date,
|
||||||
@ -100,23 +98,23 @@ class ZAOBAO(BasicNewsRecipe):
|
|||||||
pfeeds = feeds_from_index([(title, articles)], oldest_article=self.oldest_article,
|
pfeeds = feeds_from_index([(title, articles)], oldest_article=self.oldest_article,
|
||||||
max_articles_per_feed=self.max_articles_per_feed)
|
max_articles_per_feed=self.max_articles_per_feed)
|
||||||
|
|
||||||
self.log_debug('adding %s to feed'%(title))
|
self.log.debug('adding %s to feed'%(title))
|
||||||
for feed in pfeeds:
|
for feed in pfeeds:
|
||||||
self.log_debug('adding feed: %s'%(feed.title))
|
self.log.debug('adding feed: %s'%(feed.title))
|
||||||
feed.description = self.DESC_SENSE
|
feed.description = self.DESC_SENSE
|
||||||
parsed_feeds.append(feed)
|
parsed_feeds.append(feed)
|
||||||
for a, article in enumerate(feed):
|
for a, article in enumerate(feed):
|
||||||
self.log_debug('added article %s from %s'%(article.title, article.url))
|
self.log.debug('added article %s from %s'%(article.title, article.url))
|
||||||
self.log_debug('added feed %s'%(feed.title))
|
self.log.debug('added feed %s'%(feed.title))
|
||||||
|
|
||||||
for i, feed in enumerate(parsed_feeds):
|
for i, feed in enumerate(parsed_feeds):
|
||||||
# workaorund a strange problem: Somethimes the xml encoding is not apllied correctly by parse()
|
# workaorund a strange problem: Somethimes the xml encoding is not apllied correctly by parse()
|
||||||
weired_encoding_detected = False
|
weired_encoding_detected = False
|
||||||
if not isinstance(feed.description, unicode) and self.encoding and feed.description:
|
if not isinstance(feed.description, unicode) and self.encoding and feed.description:
|
||||||
self.log_debug('Feed %s is not encoded correctly, manually replace it'%(feed.title))
|
self.log.debug('Feed %s is not encoded correctly, manually replace it'%(feed.title))
|
||||||
feed.description = feed.description.decode(self.encoding, 'replace')
|
feed.description = feed.description.decode(self.encoding, 'replace')
|
||||||
elif feed.description.find(self.DESC_SENSE) == -1 and self.encoding and feed.description:
|
elif feed.description.find(self.DESC_SENSE) == -1 and self.encoding and feed.description:
|
||||||
self.log_debug('Feed %s is strangely encoded, manually redo all'%(feed.title))
|
self.log.debug('Feed %s is strangely encoded, manually redo all'%(feed.title))
|
||||||
feed.description = feed.description.encode('cp1252', 'replace').decode(self.encoding, 'replace')
|
feed.description = feed.description.encode('cp1252', 'replace').decode(self.encoding, 'replace')
|
||||||
weired_encoding_detected = True
|
weired_encoding_detected = True
|
||||||
|
|
||||||
@ -138,7 +136,7 @@ class ZAOBAO(BasicNewsRecipe):
|
|||||||
article.text_summary = article.text_summary.encode('cp1252', 'replace').decode(self.encoding, 'replace')
|
article.text_summary = article.text_summary.encode('cp1252', 'replace').decode(self.encoding, 'replace')
|
||||||
|
|
||||||
if article.title == "Untitled article":
|
if article.title == "Untitled article":
|
||||||
self.log_debug('Removing empty article %s from %s'%(article.title, article.url))
|
self.log.debug('Removing empty article %s from %s'%(article.title, article.url))
|
||||||
# remove the article
|
# remove the article
|
||||||
feed.articles[a:a+1] = []
|
feed.articles[a:a+1] = []
|
||||||
return parsed_feeds
|
return parsed_feeds
|
||||||
|
Loading…
x
Reference in New Issue
Block a user