From 8b6a6802b757065ae416742b2035b32127106562 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 17 Aug 2014 21:53:18 +0530 Subject: [PATCH] Mark various CLI strings for translation --- manual/custom.py | 23 +++----- src/calibre/debug.py | 44 +++++++-------- src/calibre/ebooks/conversion/cli.py | 11 ++++ src/calibre/ebooks/lrf/lrfparser.py | 2 +- src/calibre/ebooks/metadata/sources/cli.py | 27 +++++----- src/calibre/gui2/__init__.py | 2 +- src/calibre/gui2/lrf_renderer/main.py | 14 ++--- src/calibre/gui2/main.py | 4 +- src/calibre/library/server/__init__.py | 2 +- src/calibre/library/server/main.py | 2 +- src/calibre/linux.py | 7 +++ src/calibre/utils/smtp.py | 63 +++++++++++----------- 12 files changed, 103 insertions(+), 98 deletions(-) diff --git a/manual/custom.py b/manual/custom.py index 9506e60cf1..8532a50bc2 100644 --- a/manual/custom.py +++ b/manual/custom.py @@ -10,7 +10,7 @@ del init_calibre from sphinx.util.console import bold sys.path.append(os.path.abspath('../../../')) -from calibre.linux import entry_points +from calibre.linux import entry_points, cli_index_strings from epub import EPUBHelpBuilder from latex import LaTeXHelpBuilder @@ -34,9 +34,7 @@ Command Line Interface .. image:: ../../images/cli.png .. note:: - On OS X, the command line tools are inside the |app| bundle, for example, - if you installed calibre in :file:`/Applications` the command line tools - are in :file:`/Applications/calibre.app/Contents/MacOS/calibre`. + %s Documented Commands -------------------- @@ -51,8 +49,7 @@ Undocumented Commands {undocumented} -You can see usage for undocumented commands by executing them without arguments -in a terminal. +%s ''' CLI_PREAMBLE='''\ @@ -114,20 +111,12 @@ def generate_calibredb_help(preamble, app): update_cli_doc('calibredb', raw, app) def generate_ebook_convert_help(preamble, app): - from calibre.ebooks.conversion.cli import create_option_parser + from calibre.ebooks.conversion.cli import create_option_parser, manual_index_strings from calibre.customize.ui import input_format_plugins, output_format_plugins from calibre.utils.logging import default_log preamble = re.sub(r'http.*\.html', ':ref:`conversion`', preamble) - raw = preamble + textwrap.dedent(''' - The options and default values for the options change depending on both the - input and output formats, so you should always check with:: - ebook-convert myfile.input_format myfile.output_format -h - - Below are the options that are common to all conversion, followed by the - options specific to every input and output format - - ''') + raw = preamble + '\n\n' + manual_index_strings() % 'ebook-convert myfile.input_format myfile.output_format -h' parser, plumber = create_option_parser(['ebook-convert', 'dummyi.mobi', 'dummyo.epub', '-h'], default_log) groups = [(None, None, parser.option_list)] @@ -225,7 +214,7 @@ def cli_docs(app): documented = [' '*4 + c[0] for c in documented_cmds] undocumented = [' * ' + c for c in undocumented_cmds] - raw = CLI_INDEX.format(documented='\n'.join(documented), + raw = (CLI_INDEX % cli_index_strings()).format(documented='\n'.join(documented), undocumented='\n'.join(undocumented)) if not os.path.exists('cli'): os.makedirs('cli') diff --git a/src/calibre/debug.py b/src/calibre/debug.py index 2f8b604511..041cbd0c19 100644 --- a/src/calibre/debug.py +++ b/src/calibre/debug.py @@ -29,51 +29,51 @@ You can also use %prog to run standalone scripts. To do that use it like this: Everything after the -- is passed to the script. ''')) - parser.add_option('-c', '--command', help='Run python code.') - parser.add_option('-e', '--exec-file', help='Run the python code in file.') - parser.add_option('-f', '--subset-font', help='Subset the specified font') + parser.add_option('-c', '--command', help=_('Run python code.')) + parser.add_option('-e', '--exec-file', help=_('Run the python code in file.')) + parser.add_option('-f', '--subset-font', help=_('Subset the specified font')) parser.add_option('-d', '--debug-device-driver', default=False, action='store_true', - help='Debug device detection') + help=_('Debug device detection')) parser.add_option('-g', '--gui', default=False, action='store_true', - help='Run the GUI with debugging enabled. Debug output is ' - 'printed to stdout and stderr.') + help=_('Run the GUI with debugging enabled. Debug output is ' + 'printed to stdout and stderr.')) parser.add_option('--gui-debug', default=None, - help='Run the GUI with a debug console, logging to the' + help=_('Run the GUI with a debug console, logging to the' ' specified path. For internal use only, use the -g' - ' option to run the GUI in debug mode',) + ' option to run the GUI in debug mode')) parser.add_option('--show-gui-debug', default=None, - help='Display the specified log file. For internal use' - ' only.',) + help=_('Display the specified log file. For internal use' + ' only.')) parser.add_option('-w', '--viewer', default=False, action='store_true', - help='Run the ebook viewer',) + help=_('Run the ebook viewer in debug mode')) parser.add_option('--paths', default=False, action='store_true', - help='Output the paths necessary to setup the calibre environment') + help=_('Output the paths necessary to setup the calibre environment')) parser.add_option('--add-simple-plugin', default=None, - help='Add a simple plugin (i.e. a plugin that consists of only a ' + help=_('Add a simple plugin (i.e. a plugin that consists of only a ' '.py file), by specifying the path to the py file containing the ' - 'plugin code.') + 'plugin code.')) parser.add_option('--reinitialize-db', default=None, - help='Re-initialize the sqlite calibre database at the ' - 'specified path. Useful to recover from db corruption.') - parser.add_option('-p', '--py-console', help='Run python console', + help=_('Re-initialize the sqlite calibre database at the ' + 'specified path. Useful to recover from db corruption.')) + parser.add_option('-p', '--py-console', help=_('Run python console'), default=False, action='store_true') parser.add_option('-m', '--inspect-mobi', action='store_true', default=False, - help='Inspect the MOBI file(s) at the specified path(s)') + help=_('Inspect the MOBI file(s) at the specified path(s)')) parser.add_option('-t', '--edit-book', action='store_true', - help='Launch the calibre Edit Book tool in debug mode.') + help=_('Launch the calibre Edit Book tool in debug mode.')) parser.add_option('-x', '--explode-book', default=None, - help='Explode the book (exports the book as a collection of HTML ' + help=_('Explode the book (exports the book as a collection of HTML ' 'files and metadata, which you can edit using standard HTML ' 'editing tools, and then rebuilds the file from the edited HTML. ' 'Makes no additional changes to the HTML, unlike a full calibre ' - 'conversion).') + 'conversion).')) parser.add_option('-s', '--shutdown-running-calibre', default=False, action='store_true', help=_('Cause a running calibre instance, if any, to be' ' shutdown. Note that if there are running jobs, they ' 'will be silently aborted, so use with care.')) - parser.add_option('--test-build', help='Test binary modules in build', + parser.add_option('--test-build', help=_('Test binary modules in build'), action='store_true', default=False) parser.add_option('-r', '--run-plugin', help=_( 'Run a plugin that provides a command line interface. For example:\n' diff --git a/src/calibre/ebooks/conversion/cli.py b/src/calibre/ebooks/conversion/cli.py index e19df1cc91..4358fb4c23 100644 --- a/src/calibre/ebooks/conversion/cli.py +++ b/src/calibre/ebooks/conversion/cli.py @@ -370,6 +370,17 @@ def main(args=sys.argv): return 0 +def manual_index_strings(): + return _('''\ +The options and default values for the options change depending on both the +input and output formats, so you should always check with:: + + %s + +Below are the options that are common to all conversion, followed by the +options specific to every input and output format.''') + + if __name__ == '__main__': sys.exit(main()) diff --git a/src/calibre/ebooks/lrf/lrfparser.py b/src/calibre/ebooks/lrf/lrfparser.py index ed39d3eaf9..08f37d339a 100644 --- a/src/calibre/ebooks/lrf/lrfparser.py +++ b/src/calibre/ebooks/lrf/lrfparser.py @@ -139,7 +139,7 @@ def option_parser(): parser.add_option('--dont-output-resources', default=True, action='store_false', help=_('Do not save embedded image and font files to disk'), dest='output_resources') - parser.add_option('--verbose', default=False, action='store_true', dest='verbose') + parser.add_option('--verbose', default=False, action='store_true', dest='verbose', help=_('Be more verbose')) return parser def main(args=sys.argv, logger=None): diff --git a/src/calibre/ebooks/metadata/sources/cli.py b/src/calibre/ebooks/metadata/sources/cli.py index b20c6a5bfa..59ac35d94e 100644 --- a/src/calibre/ebooks/metadata/sources/cli.py +++ b/src/calibre/ebooks/metadata/sources/cli.py @@ -7,7 +7,7 @@ __license__ = 'GPL v3' __copyright__ = '2011, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import sys, textwrap +import sys from io import BytesIO from threading import Event @@ -21,24 +21,23 @@ from calibre.ebooks.metadata.sources.identify import identify from calibre.ebooks.metadata.sources.covers import download_cover def option_parser(): - parser = OptionParser(textwrap.dedent( - '''\ - %prog [options] + parser = OptionParser(_('''\ +%prog [options] - Fetch book metadata from online sources. You must specify at least one - of title, authors or ISBN. - ''' +Fetch book metadata from online sources. You must specify at least one +of title, authors or ISBN. +''' )) - parser.add_option('-t', '--title', help='Book title') - parser.add_option('-a', '--authors', help='Book author(s)') - parser.add_option('-i', '--isbn', help='Book ISBN') + parser.add_option('-t', '--title', help=_('Book title')) + parser.add_option('-a', '--authors', help=_('Book author(s)')) + parser.add_option('-i', '--isbn', help=_('Book ISBN')) parser.add_option('-v', '--verbose', default=False, action='store_true', - help='Print the log to the console (stderr)') - parser.add_option('-o', '--opf', help='Output the metadata in OPF format instead of human readable text.', action='store_true', default=False) + help=_('Print the log to the console (stderr)')) + parser.add_option('-o', '--opf', help=_('Output the metadata in OPF format instead of human readable text.'), action='store_true', default=False) parser.add_option('-c', '--cover', - help='Specify a filename. The cover, if available, will be saved to it. Without this option, no cover will be downloaded.') + help=_('Specify a filename. The cover, if available, will be saved to it. Without this option, no cover will be downloaded.')) parser.add_option('-d', '--timeout', default='30', - help='Timeout in seconds. Default is 30') + help=_('Timeout in seconds. Default is 30')) return parser diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index 35ec63ecec..c7306e7abc 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -861,7 +861,7 @@ def load_builtin_fonts(): def setup_gui_option_parser(parser): if islinux: parser.add_option('--detach', default=False, action='store_true', - help='Detach from the controlling terminal, if any (linux only)') + help=_('Detach from the controlling terminal, if any (linux only)')) def detach_gui(): if islinux and not DEBUG: diff --git a/src/calibre/gui2/lrf_renderer/main.py b/src/calibre/gui2/lrf_renderer/main.py index 2c54a76a4e..0f3e02585c 100644 --- a/src/calibre/gui2/lrf_renderer/main.py +++ b/src/calibre/gui2/lrf_renderer/main.py @@ -266,21 +266,21 @@ def file_renderer(stream, opts, parent=None, logger=None): def option_parser(): from calibre.gui2.main_window import option_parser - parser = option_parser('''\ + parser = option_parser(_('''\ %prog [options] book.lrf Read the LRF ebook book.lrf -''') +''')) parser.add_option('--verbose', default=False, action='store_true', dest='verbose', - help='Print more information about the rendering process') - parser.add_option('--visual-debug', help='Turn on visual aids to debugging the rendering engine', + help=_('Print more information about the rendering process')) + parser.add_option('--visual-debug', help=_('Turn on visual aids to debugging the rendering engine'), default=False, action='store_true', dest='visual_debug') parser.add_option('--disable-hyphenation', dest='hyphenate', default=True, action='store_false', - help='Disable hyphenation. Should significantly speed up rendering.') + help=_('Disable hyphenation. Should significantly speed up rendering.')) parser.add_option('--white-background', dest='white_background', default=False, action='store_true', - help='By default the background is off white as I find this easier on the eyes. Use this option to make the background pure white.') + help=_('By default the background is off white as I find this easier on the eyes. Use this option to make the background pure white.')) parser.add_option('--profile', dest='profile', default=False, action='store_true', - help='Profile the LRF renderer') + help=_('Profile the LRF renderer')) return parser def normalize_settings(parser, opts): diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index a491baae22..a9a06db13f 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -25,12 +25,12 @@ class AbortInit(Exception): pass def option_parser(): - parser = _option_parser('''\ + parser = _option_parser(_('''\ %prog [opts] [path_to_ebook] Launch the main calibre Graphical User Interface and optionally add the ebook at path_to_ebook to the database. -''') +''')) parser.add_option('--with-library', default=None, action='store', help=_('Use the library located at the specified path.')) parser.add_option('--start-in-tray', default=False, action='store_true', diff --git a/src/calibre/library/server/__init__.py b/src/calibre/library/server/__init__.py index 4a7fdddc52..cdfffe7d22 100644 --- a/src/calibre/library/server/__init__.py +++ b/src/calibre/library/server/__init__.py @@ -32,7 +32,7 @@ def server_config(defaults=None): c.add_opt('username', ['--username'], default='calibre', help=_('Username for access. By default, it is: %default')) c.add_opt('develop', ['--develop'], default=False, - help='Development mode. Server automatically restarts on file changes and serves code files (html, css, js) from the file system instead of calibre\'s resource system.') + help=_('Development mode. Server automatically restarts on file changes and serves code files (html, css, js) from the file system instead of calibre\'s resource system.')) c.add_opt('max_cover', ['--max-cover'], default='600x800', help=_('The maximum size for displayed covers. Default is %default.')) c.add_opt('max_opds_items', ['--max-opds-items'], default=30, diff --git a/src/calibre/library/server/main.py b/src/calibre/library/server/main.py index 416c87de42..fd164cba40 100644 --- a/src/calibre/library/server/main.py +++ b/src/calibre/library/server/main.py @@ -54,7 +54,7 @@ The OPDS interface is advertised via BonJour automatically. parser.add_option('--pidfile', default=None, help=_('Write process PID to the specified file')) parser.add_option('--daemonize', default=False, action='store_true', - help='Run process in background as a daemon. No effect on windows.') + help=_('Run process in background as a daemon. No effect on windows.')) parser.add_option('--restriction', '--virtual-library', default=None, help=_('Specifies a virtual library to be used for this invocation. ' 'This option overrides any per-library settings specified' diff --git a/src/calibre/linux.py b/src/calibre/linux.py index 95d9aefd5d..c891f5ea5e 100644 --- a/src/calibre/linux.py +++ b/src/calibre/linux.py @@ -1100,6 +1100,13 @@ def main(): PostInstall(opts) return 0 +def cli_index_strings(): + return _('On OS X, the command line tools are inside the |app| bundle, for example,' + ' if you installed calibre in :file:`/Applications` the command line tools' + ' are in :file:`/Applications/calibre.app/Contents/MacOS/calibre`.'), _( + 'You can see usage for undocumented commands by executing them without arguments in a terminal.') + + if __name__ == '__main__': sys.exit(main()) diff --git a/src/calibre/utils/smtp.py b/src/calibre/utils/smtp.py index 02e43b79cd..74b53cec13 100644 --- a/src/calibre/utils/smtp.py +++ b/src/calibre/utils/smtp.py @@ -149,52 +149,51 @@ def option_parser(): OptionParser except ImportError: from optparse import OptionParser - import textwrap - parser = OptionParser(textwrap.dedent('''\ - %prog [options] [from to text] + parser = OptionParser(_('''\ +%prog [options] [from to text] - Send mail using the SMTP protocol. %prog has two modes of operation. In the - compose mode you specify from to and text and these are used to build and - send an email message. In the filter mode, %prog reads a complete email - message from STDIN and sends it. +Send mail using the SMTP protocol. %prog has two modes of operation. In the +compose mode you specify from to and text and these are used to build and +send an email message. In the filter mode, %prog reads a complete email +message from STDIN and sends it. - text is the body of the email message. - If text is not specified, a complete email message is read from STDIN. - from is the email address of the sender and to is the email address - of the recipient. When a complete email is read from STDIN, from and to - are only used in the SMTP negotiation, the message headers are not modified. - ''')) +text is the body of the email message. +If text is not specified, a complete email message is read from STDIN. +from is the email address of the sender and to is the email address +of the recipient. When a complete email is read from STDIN, from and to +are only used in the SMTP negotiation, the message headers are not modified. +''')) c=parser.add_option_group('COMPOSE MAIL', - 'Options to compose an email. Ignored if text is not specified').add_option - c('-a', '--attachment', help='File to attach to the email') - c('-s', '--subject', help='Subject of the email') + _('Options to compose an email. Ignored if text is not specified')).add_option + c('-a', '--attachment', help=_('File to attach to the email')) + c('-s', '--subject', help=_('Subject of the email')) parser.add_option('-l', '--localhost', - help=('Host name of localhost. Used when connecting ' + help=_('Host name of localhost. Used when connecting ' 'to SMTP server.')) r=parser.add_option_group('SMTP RELAY', - 'Options to use an SMTP relay server to send mail. ' + _('Options to use an SMTP relay server to send mail. ' 'calibre will try to send the email directly unless --relay is ' - 'specified.').add_option - r('-r', '--relay', help=('An SMTP relay server to use to send mail.')) + 'specified.')).add_option + r('-r', '--relay', help=_('An SMTP relay server to use to send mail.')) r('-p', '--port', default=-1, - help='Port to connect to on relay server. Default is to use 465 if ' - 'encryption method is SSL and 25 otherwise.') - r('-u', '--username', help='Username for relay') - r('-p', '--password', help='Password for relay') + help=_('Port to connect to on relay server. Default is to use 465 if ' + 'encryption method is SSL and 25 otherwise.')) + r('-u', '--username', help=_('Username for relay')) + r('-p', '--password', help=_('Password for relay')) r('-e', '--encryption-method', default='TLS', choices=['TLS', 'SSL', 'NONE'], - help='Encryption method to use when connecting to relay. Choices are ' - 'TLS, SSL and NONE. Default is TLS. WARNING: Choosing NONE is highly insecure') - parser.add_option('-o', '--outbox', help='Path to maildir folder to store ' - 'failed email messages in.') + help=_('Encryption method to use when connecting to relay. Choices are ' + 'TLS, SSL and NONE. Default is TLS. WARNING: Choosing NONE is highly insecure')) + parser.add_option('-o', '--outbox', help=_('Path to maildir folder to store ' + 'failed email messages in.')) parser.add_option('-f', '--fork', default=False, action='store_true', - help='Fork and deliver message in background. ' + help=_('Fork and deliver message in background. ' 'If you use this option, you should also use --outbox ' - 'to handle delivery failures.') - parser.add_option('-t', '--timeout', help='Timeout for connection') + 'to handle delivery failures.')) + parser.add_option('-t', '--timeout', help=_('Timeout for connection')) parser.add_option('-v', '--verbose', default=0, action='count', - help='Be more verbose') + help=_('Be more verbose')) return parser def extract_email_address(raw):