oops forgot the translation files.

This commit is contained in:
Kovid Goyal 2007-11-09 00:24:17 +00:00
parent bb4ca7f46c
commit 9de8a9c16c
6 changed files with 2282 additions and 0 deletions

View File

@ -0,0 +1,59 @@
## Copyright (C) 2007 Kovid Goyal kovid@kovidgoyal.net
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License along
## with this program; if not, write to the Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
'''
Manage translation of user visible strings.
'''
import sys, os, cStringIO, tempfile, subprocess, functools
check_call = functools.partial(subprocess.check_call, shell=True)
from libprs500.translations.pygettext import main as pygettext
from libprs500.translations.msgfmt import main as msgfmt
TRANSLATIONS = [
'sl',
'de'
]
def source_files():
ans = []
for root, dirs, files in os.walk(os.getcwdu()):
for name in files:
if name.endswith('.py'):
ans.append(os.path.abspath(os.path.join(root, name)))
return ans
def main(args=sys.argv):
tdir = os.path.dirname(__file__)
files = source_files()
buf = cStringIO.StringIO()
pygettext(buf, ['-p', tdir]+files)
src = buf.getvalue()
template = tempfile.NamedTemporaryFile(suffix='.pot')
template.write(src)
translations = {}
for tr in TRANSLATIONS:
po = os.path.join(tdir, tr+'.po')
if not os.path.exists(po):
open(po, 'wb').write(src.replace('LANGUAGE', tr))
buf = cStringIO.StringIO()
msgfmt(buf, [po])
translations[tr] = buf.getvalue()
open(os.path.join(tdir, 'data.py'), 'wb').write('translations = '+repr(translations))
return 0
if __name__ == '__main__':
sys.exit(main())

View File

@ -0,0 +1 @@
translations = {'de': '\xde\x12\x04\x95\x00\x00\x00\x00\x03\x00\x00\x00\x1c\x00\x00\x004\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00L\x00\x00\x00\t\x00\x00\x00M\x00\x00\x00\x0b\x00\x00\x00W\x00\x00\x00(\x01\x00\x00c\x00\x00\x00\x14\x00\x00\x00\x8c\x01\x00\x00\x12\x00\x00\x00\xa1\x01\x00\x00\x00Add books\x00Created by \x00Project-Id-Version: libprs500 0.4.17\nPOT-Creation-Date: 2007-11-08 14:39+PST\nPO-Revision-Date: 2007-11-08 14:39+PST\nLast-Translator: Automatically generated\nLanguage-Team: de\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nGenerated-By: pygettext.py 1.5\n\x00Addieren Sie B\xc3\xbccher\x00Vorbei verursacht \x00', 'sl': '\xde\x12\x04\x95\x00\x00\x00\x00\x01\x00\x00\x00\x1c\x00\x00\x00$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00(\x01\x00\x00-\x00\x00\x00\x00Project-Id-Version: libprs500 0.4.17\nPOT-Creation-Date: 2007-11-08 14:39+PST\nPO-Revision-Date: 2007-11-08 14:39+PST\nLast-Translator: Automatically generated\nLanguage-Team: sl\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nGenerated-By: pygettext.py 1.5\n\x00'}

View File

@ -0,0 +1,709 @@
# Translation template file..
# Copyright (C) 2007 Kovid Goyal
# Kovid Goyal <kovid@kovidgoyal.net>, 2007.
#
msgid ""
msgstr ""
"Project-Id-Version: libprs500 0.4.17\n"
"POT-Creation-Date: 2007-11-08 14:39+PST\n"
"PO-Revision-Date: 2007-11-08 14:39+PST\n"
"Last-Translator: Automatically generated\n"
"Language-Team: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:90
msgid "Created by "
msgstr "Vorbei verursacht "
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:93
msgid "Set the title. Default: filename."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:95
msgid "Set the author(s). Multiple authors should be set as a comma separated list. Default: %default"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:96
msgid "Unknown"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:98
msgid "Set the comment."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:100
msgid "Set the category"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:102
msgid "Sort key for the title"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:104
msgid "Sort key for the author"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:106
msgid "Publisher"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:108
msgid "Path to file containing image to be used as cover"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:110
msgid "If there is a cover graphic detected in the source file, use that instead of the specified cover."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:113
msgid "Output file name. Default is derived from input filename"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:115
msgid "Render HTML tables as blocks of text instead of actual tables. This is neccessary if the HTML contains very large or complex tables."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:118
msgid "Increase the font size by 2 * FONT_DELTA pts and the line spacing by FONT_DELTA pts. FONT_DELTA can be a fraction.If FONT_DELTA is negative, the font size is decreased."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:123
msgid "Enable autorotation of images that are wider than the screen width."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:126
msgid "Set the space between words in pts. Default is %default"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:128
msgid "Separate paragraphs by blank lines."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:130
msgid "Add a header to all the pages with title and author."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:132
msgid "Set the format of the header. %a is replaced by the author and %t by the title. Default is %default"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:134
msgid "Override the CSS. Can be either a path to a CSS stylesheet or a string. If it is a string it is interpreted as CSS."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:136
msgid "Use the <spine> element from the OPF file to determine the order in which the HTML files are appended to the LRF. The .opf file must be in the same directory as the base HTML file."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:142
msgid "Profile of the target device for which this LRF is being generated. The profile determines things like the resolution and screen size of the target device. Default: %s Supported profiles: "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:148
msgid "Left margin of page. Default is %default px."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:150
msgid "Right margin of page. Default is %default px."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:152
msgid "Top margin of page. Default is %default px."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:154
msgid "Bottom margin of page. Default is %default px."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:158
msgid "The maximum number of levels to recursively process links. A value of 0 means thats links are not followed. A negative value means that <a> tags are ignored."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:162
msgid "A regular expression. <a> tags whoose href matches will be ignored. Defaults to %default"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:167
msgid "Prevent the automatic insertion of page breaks before detected chapters."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:171
msgid "The regular expression used to detect chapter titles. It is searched for in heading tags (h1-h6). Defaults to %default"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:174
msgid "If html2lrf does not find any page breaks in the html file and cannot detect chapter headings, it will automatically insert page-breaks before the tags whose names match this regular expression. Defaults to %default. You can disable it by setting the regexp to \"$\". The purpose of this option is to try to ensure that there are no really long pages as this degrades the page turn performance of the LRF. Thus this option is ignored if the current page has only a few elements."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:184
msgid "Force a page break before tags whoose names match this regular expression."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:186
msgid "Force a page break before an element having the specified attribute. The format for this option is tagname regexp,attribute name,attribute value regexp. For example to match all heading tags that have the attribute class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:189
msgid "Preprocess Baen HTML files to improve generated LRF."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:191
msgid "You must add this option if processing files generated by pdftohtml, otherwise conversion will fail."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:193
msgid "Use this option on html0 files from Book Designer."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:196
msgid ""
"Specify trutype font families for serif, sans-serif and monospace fonts. These fonts will be embedded in the LRF file. Note that custom fonts lead to slower page turns. Each family specification is of the form: \"path to fonts directory, family\" For example: --serif-family \"%s, Times New Roman\"\n"
" "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:205
msgid "The serif family of fonts to embed"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:208
msgid "The sans-serif family of fonts to embed"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:211
msgid "The monospace family of fonts to embed"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/choose_format_ui.py:42
msgid "Choose Format"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/choose_format_ui.py:43
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/password_ui.py:58
msgid "TextLabel"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/conversion_error_ui.py:37
msgid "ERROR"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:79
msgid "Fetch metadata"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:80
msgid "Fetching metadata for <b>%1</b>"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:81
msgid "Sign up for a free account from <a href=\"http://www.isbndb.com\">ISBNdb.com</a> to get an access key."
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:82
msgid "&Access Key;"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:83
msgid "Fetch"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:84
msgid "Matches"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:85
msgid "Select the book that most closely matches your copy from the list below"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/jobs_ui.py:35
msgid "Active Jobs"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:510
msgid "Convert to LRF"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:511
msgid "Category"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:515
msgid "Metadata"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:519
msgid "Look & Feel"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:523
msgid "Page Setup"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:527
msgid "Chapter Detection"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:529
msgid "Options"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:530
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:296
msgid "Book Cover"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:531
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:297
msgid "Change &cover image:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:532
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:298
msgid "Browse for an image to use as the cover of this book."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:533
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:293
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:295
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:299
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:185
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:186
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:187
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:188
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:189
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:190
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:250
msgid "..."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:534
msgid "Use &metadata cover"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:535
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:268
msgid "&Title: "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:536
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:269
msgid "Change the title of this book"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:537
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:120
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:270
msgid "&Author(s): "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:538
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:540
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:121
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:271
msgid "Change the author(s) of this book. Multiple authors should be separated by a comma"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:539
msgid "Author So&rt:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:541
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:128
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:278
msgid "&Publisher: "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:542
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:129
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:279
msgid "Change the publisher of this book"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:543
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:280
msgid "Ta&gs: "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:544
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:131
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:281
msgid "Tags categorize the book. This is particularly useful while searching. <br><br>They can be any words or phrases, separated by commas."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:545
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:132
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:282
msgid "&Series:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:546
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:547
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:133
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:134
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:283
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:284
msgid "List of known series. You can add new series."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:548
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:549
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:285
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:286
msgid "Series index."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:550
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:287
msgid "Book "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:551
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:289
msgid "Comments"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:552
msgid "&Font delta:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:553
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:555
msgid " pts"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:554
msgid "&Word spacing:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:556
msgid "&Preprocess:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:557
msgid "Header"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:558
msgid "&Show header"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:559
msgid "&Header format:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:560
msgid "Enable auto &rotation of images"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:561
msgid "Insert &blank lines between paragraphs"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:562
msgid "Ignore &tables"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:563
msgid "Override<br>CSS"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:564
msgid "&Profile:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:565
msgid "&Left Margin:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:566
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:568
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:570
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:572
msgid " px"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:567
msgid "&Right Margin:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:569
msgid "&Top Margin:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:571
msgid "&Bottom Margin:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:573
msgid "Title based detection"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:574
msgid "&Disable chapter detection"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:575
msgid "&Regular expression:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:576
msgid "Tag based detection"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:577
msgid "&Page break before tag:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:578
msgid "&Force page break before tag:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:579
msgid "Force page break before &attribute:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:580
msgid "Help on item"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:581
msgid ""
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p></body></html>"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:118
msgid "Edit Meta information"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:119
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:267
msgid "Meta information"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:122
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:272
msgid "Author S&ort: "
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:123
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:273
msgid "Specify how the author(s) of this book should be sorted. For example Charles Dickens should be sorted as Dickens, Charles."
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:124
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:274
msgid "&Rating:"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:125
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:126
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:275
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:276
msgid "Rating of this book. 0-5 stars"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:127
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:277
msgid " stars"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:130
msgid "Add Ta&gs: "
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:266
msgid "Edit Meta Information"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:288
msgid "IS&BN:"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:290
msgid "Fetch metadata from server"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:291
msgid "Available Formats"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:292
msgid "Add a new format for this book to the database"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:294
msgid "Remove the selected formats for this book from the database."
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:300
msgid "Fetch cover image from server"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/password_ui.py:57
msgid "Password needed"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/password_ui.py:59
msgid "&Username:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/password_ui.py:60
msgid "&Password:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/config_ui.py:51
msgid "Configure Viewer"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/config_ui.py:52
msgid "Use white background"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/config_ui.py:53
msgid "Hyphenate"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/config_ui.py:54
msgid "<b>Changes will only take affect after a restart."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:184
msgid "LRF Viewer"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:191
msgid "Parsing LRF file"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:192
msgid "Next Page"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:193
msgid "Previous Page"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:194
msgid "Back"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:195
msgid "Forward"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:196
msgid "Next match"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:197
msgid "Open ebook"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:198
msgid "Configure"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:241
msgid "libprs500"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:242
msgid ""
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">For help visit <a href=\"https://libprs500.kovidgoyal.net/wiki/WikiStart#Usage\"><span style=\" text-decoration: underline; color:#0000ff;\">libprs500.kovidgoyal.net</span></a><br /><br /><span style=\" font-weight:600;\">libprs500</span>: %1 by <span style=\" font-weight:600;\">Kovid Goyal</span> <br />%2</p></body></html>"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:246
msgid "&Search:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:247
msgid "Search the list of books by title or author<br><br>Words separated by spaces are ANDed"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:248
msgid "Search the list of books by title, author, publisher, tags and comments<br><br>Words separated by spaces are ANDed"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:249
msgid "Reset Quick Search"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:251
msgid "Add books"
msgstr "Addieren Sie Bücher"
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:252
msgid "A"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:253
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:254
msgid "Remove books"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:255
msgid "Del"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:256
msgid "Edit meta information"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:257
msgid "E"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:258
msgid "Send to device"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:259
msgid "Save to disk"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:260
msgid "Fetch news"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:261
msgid "Convert E-books"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:262
msgid "View"
msgstr ""

View File

@ -0,0 +1,160 @@
#! /usr/bin/env python
# Written by Martin v. Loewis <loewis@informatik.hu-berlin.de>
"""Generate binary message catalog from textual translation description.
This program converts a textual Uniforum-style message catalog (.po file) into
a binary GNU catalog (.mo file). This is essentially the same function as the
GNU msgfmt program, however, it is a simpler implementation.
"""
import sys
import os
import struct
import array
__version__ = "1.1"
MESSAGES = {}
def usage(code, msg=''):
print >> sys.stderr, __doc__
if msg:
print >> sys.stderr, msg
sys.exit(code)
def add(id, str, fuzzy):
"Add a non-fuzzy translation to the dictionary."
global MESSAGES
if not fuzzy and str:
MESSAGES[id] = str
def generate():
"Return the generated output."
global MESSAGES
keys = MESSAGES.keys()
# the keys are sorted in the .mo file
keys.sort()
offsets = []
ids = strs = ''
for id in keys:
# For each string, we need size and file offset. Each string is NUL
# terminated; the NUL does not count into the size.
offsets.append((len(ids), len(id), len(strs), len(MESSAGES[id])))
ids += id + '\0'
strs += MESSAGES[id] + '\0'
# The header is 7 32-bit unsigned integers. We don't use hash tables, so
# the keys start right after the index tables.
# translated string.
keystart = 7*4+16*len(keys)
# and the values start after the keys
valuestart = keystart + len(ids)
koffsets = []
voffsets = []
# The string table first has the list of keys, then the list of values.
# Each entry has first the size of the string, then the file offset.
for o1, l1, o2, l2 in offsets:
koffsets += [l1, o1+keystart]
voffsets += [l2, o2+valuestart]
offsets = koffsets + voffsets
output = struct.pack("Iiiiiii",
0x950412deL, # Magic
0, # Version
len(keys), # # of entries
7*4, # start of key index
7*4+len(keys)*8, # start of value index
0, 0) # size and offset of hash table
output += array.array("i", offsets).tostring()
output += ids
output += strs
return output
def make(filename, outfile):
ID = 1
STR = 2
# Compute .mo name from .po name and arguments
if filename.endswith('.po'):
infile = filename
else:
infile = filename + '.po'
if outfile is None:
outfile = os.path.splitext(infile)[0] + '.mo'
try:
lines = open(infile).readlines()
except IOError, msg:
print >> sys.stderr, msg
sys.exit(1)
section = None
fuzzy = 0
# Parse the catalog
lno = 0
for l in lines:
lno += 1
# If we get a comment line after a msgstr, this is a new entry
if l[0] == '#' and section == STR:
add(msgid, msgstr, fuzzy)
section = None
fuzzy = 0
# Record a fuzzy mark
if l[:2] == '#,' and 'fuzzy' in l:
fuzzy = 1
# Skip comments
if l[0] == '#':
continue
# Now we are in a msgid section, output previous section
if l.startswith('msgid'):
if section == STR:
add(msgid, msgstr, fuzzy)
section = ID
l = l[5:]
msgid = msgstr = ''
# Now we are in a msgstr section
elif l.startswith('msgstr'):
section = STR
l = l[6:]
# Skip empty lines
l = l.strip()
if not l:
continue
# XXX: Does this always follow Python escape semantics?
l = eval(l)
if section == ID:
msgid += l
elif section == STR:
msgstr += l
else:
print >> sys.stderr, 'Syntax error on %s:%d' % (infile, lno), \
'before:'
print >> sys.stderr, l
sys.exit(1)
# Add last entry
if section == STR:
add(msgid, msgstr, fuzzy)
# Compute output
output = generate()
try:
outfile.write(output)
except IOError,msg:
print >> sys.stderr, msg
def main(outfile, args=sys.argv[1:]):
for filename in args:
make(filename, outfile)

View File

@ -0,0 +1,644 @@
#! /usr/bin/env python
# Originally written by Barry Warsaw <barry@zope.com>
#
# Minimally patched to make it even more xgettext compatible
# by Peter Funk <pf@artcom-gmbh.de>
#
# 2002-11-22 Jrgen Hermann <jh@web.de>
# Added checks that _() only contains string literals, and
# command line args are resolved to module lists, i.e. you
# can now pass a filename, a module or package name, or a
# directory (including globbing chars, important for Win32).
# Made docstring fit in 80 chars wide displays using pydoc.
#
__doc__ = """pygettext -- Python equivalent of xgettext(1)
Many systems (Solaris, Linux, Gnu) provide extensive tools that ease the
internationalization of C programs. Most of these tools are independent of
the programming language and can be used from within Python programs.
Martin von Loewis' work[1] helps considerably in this regard.
There's one problem though; xgettext is the program that scans source code
looking for message strings, but it groks only C (or C++). Python
introduces a few wrinkles, such as dual quoting characters, triple quoted
strings, and raw strings. xgettext understands none of this.
Enter pygettext, which uses Python's standard tokenize module to scan
Python source code, generating .pot files identical to what GNU xgettext[2]
generates for C and C++ code. From there, the standard GNU tools can be
used.
A word about marking Python strings as candidates for translation. GNU
xgettext recognizes the following keywords: gettext, dgettext, dcgettext,
and gettext_noop. But those can be a lot of text to include all over your
code. C and C++ have a trick: they use the C preprocessor. Most
internationalized C source includes a #define for gettext() to _() so that
what has to be written in the source is much less. Thus these are both
translatable strings:
gettext("Translatable String")
_("Translatable String")
Python of course has no preprocessor so this doesn't work so well. Thus,
pygettext searches only for _() by default, but see the -k/--keyword flag
below for how to augment this.
[1] http://www.python.org/workshops/1997-10/proceedings/loewis.html
[2] http://www.gnu.org/software/gettext/gettext.html
NOTE: pygettext attempts to be option and feature compatible with GNU
xgettext where ever possible. However some options are still missing or are
not fully implemented. Also, xgettext's use of command line switches with
option arguments is broken, and in these cases, pygettext just defines
additional switches.
Usage: pygettext [options] inputfile ...
Options:
-a
--extract-all
Extract all strings.
-d name
--default-domain=name
Rename the default output file from messages.pot to name.pot.
-E
--escape
Replace non-ASCII characters with octal escape sequences.
-D
--docstrings
Extract module, class, method, and function docstrings. These do
not need to be wrapped in _() markers, and in fact cannot be for
Python to consider them docstrings. (See also the -X option).
-h
--help
Print this help message and exit.
-k word
--keyword=word
Keywords to look for in addition to the default set, which are:
%(DEFAULTKEYWORDS)s
You can have multiple -k flags on the command line.
-K
--no-default-keywords
Disable the default set of keywords (see above). Any keywords
explicitly added with the -k/--keyword option are still recognized.
--no-location
Do not write filename/lineno location comments.
-n
--add-location
Write filename/lineno location comments indicating where each
extracted string is found in the source. These lines appear before
each msgid. The style of comments is controlled by the -S/--style
option. This is the default.
-o filename
--output=filename
Rename the default output file from messages.pot to filename. If
filename is `-' then the output is sent to standard out.
-p dir
--output-dir=dir
Output files will be placed in directory dir.
-S stylename
--style stylename
Specify which style to use for location comments. Two styles are
supported:
Solaris # File: filename, line: line-number
GNU #: filename:line
The style name is case insensitive. GNU style is the default.
-v
--verbose
Print the names of the files being processed.
-V
--version
Print the version of pygettext and exit.
-w columns
--width=columns
Set width of output to columns.
-x filename
--exclude-file=filename
Specify a file that contains a list of strings that are not be
extracted from the input files. Each string to be excluded must
appear on a line by itself in the file.
-X filename
--no-docstrings=filename
Specify a file that contains a list of files (one per line) that
should not have their docstrings extracted. This is only useful in
conjunction with the -D option above.
If `inputfile' is -, standard input is read.
"""
import os
import imp
import sys
import glob
import time
import getopt
import token
import tokenize
import operator
__version__ = '1.5'
default_keywords = ['_']
DEFAULTKEYWORDS = ', '.join(default_keywords)
EMPTYSTRING = ''
from libprs500 import __appname__
from libprs500 import __version__ as version
# The normal pot-file header. msgmerge and Emacs's po-mode work better if it's
# there.
pot_header = '''\
# Translation template file..
# Copyright (C) 2007 Kovid Goyal
# Kovid Goyal <kovid@kovidgoyal.net>, 2007.
#
msgid ""
msgstr ""
"Project-Id-Version: %(appname)s %(version)s\\n"
"POT-Creation-Date: %%(time)s\\n"
"PO-Revision-Date: %%(time)s\\n"
"Last-Translator: Automatically generated\\n"
"Language-Team: LANGUAGE\\n"
"MIME-Version: 1.0\\n"
"Content-Type: text/plain; charset=UTF-8\\n"
"Content-Transfer-Encoding: 8bit\\n"
"Generated-By: pygettext.py %%(version)s\\n"
'''%dict(appname=__appname__, version=version)
def usage(code, msg=''):
print >> sys.stderr, __doc__ % globals()
if msg:
print >> sys.stderr, msg
sys.exit(code)
escapes = []
def make_escapes(pass_iso8859):
global escapes
if pass_iso8859:
# Allow iso-8859 characters to pass through so that e.g. 'msgid
# would result not result in 'msgid "H\366he"'. Otherwise we
# escape any character outside the 32..126 range.
mod = 128
else:
mod = 256
for i in range(256):
if 32 <= (i % mod) <= 126:
escapes.append(chr(i))
else:
escapes.append("\\%03o" % i)
escapes[ord('\\')] = '\\\\'
escapes[ord('\t')] = '\\t'
escapes[ord('\r')] = '\\r'
escapes[ord('\n')] = '\\n'
escapes[ord('\"')] = '\\"'
def escape(s):
global escapes
s = list(s)
for i in range(len(s)):
s[i] = escapes[ord(s[i])]
return EMPTYSTRING.join(s)
def safe_eval(s):
# unwrap quotes, safely
return eval(s, {'__builtins__':{}}, {})
def normalize(s):
# This converts the various Python string types into a format that is
# appropriate for .po files, namely much closer to C style.
lines = s.split('\n')
if len(lines) == 1:
s = '"' + escape(s) + '"'
else:
if not lines[-1]:
del lines[-1]
lines[-1] = lines[-1] + '\n'
for i in range(len(lines)):
lines[i] = escape(lines[i])
lineterm = '\\n"\n"'
s = '""\n"' + lineterm.join(lines) + '"'
return s
def containsAny(str, set):
"""Check whether 'str' contains ANY of the chars in 'set'"""
return 1 in [c in str for c in set]
def _visit_pyfiles(list, dirname, names):
"""Helper for getFilesForName()."""
# get extension for python source files
if not globals().has_key('_py_ext'):
global _py_ext
_py_ext = [triple[0] for triple in imp.get_suffixes()
if triple[2] == imp.PY_SOURCE][0]
# don't recurse into CVS directories
if 'CVS' in names:
names.remove('CVS')
# add all *.py files to list
list.extend(
[os.path.join(dirname, file) for file in names
if os.path.splitext(file)[1] == _py_ext]
)
def _get_modpkg_path(dotted_name, pathlist=None):
"""Get the filesystem path for a module or a package.
Return the file system path to a file for a module, and to a directory for
a package. Return None if the name is not found, or is a builtin or
extension module.
"""
# split off top-most name
parts = dotted_name.split('.', 1)
if len(parts) > 1:
# we have a dotted path, import top-level package
try:
file, pathname, description = imp.find_module(parts[0], pathlist)
if file: file.close()
except ImportError:
return None
# check if it's indeed a package
if description[2] == imp.PKG_DIRECTORY:
# recursively handle the remaining name parts
pathname = _get_modpkg_path(parts[1], [pathname])
else:
pathname = None
else:
# plain name
try:
file, pathname, description = imp.find_module(
dotted_name, pathlist)
if file:
file.close()
if description[2] not in [imp.PY_SOURCE, imp.PKG_DIRECTORY]:
pathname = None
except ImportError:
pathname = None
return pathname
def getFilesForName(name):
"""Get a list of module files for a filename, a module or package name,
or a directory.
"""
if not os.path.exists(name):
# check for glob chars
if containsAny(name, "*?[]"):
files = glob.glob(name)
list = []
for file in files:
list.extend(getFilesForName(file))
return list
# try to find module or package
name = _get_modpkg_path(name)
if not name:
return []
if os.path.isdir(name):
# find all python files in directory
list = []
os.path.walk(name, _visit_pyfiles, list)
return list
elif os.path.exists(name):
# a single file
return [name]
return []
class TokenEater:
def __init__(self, options):
self.__options = options
self.__messages = {}
self.__state = self.__waiting
self.__data = []
self.__lineno = -1
self.__freshmodule = 1
self.__curfile = None
def __call__(self, ttype, tstring, stup, etup, line):
# dispatch
## import token
## print >> sys.stderr, 'ttype:', token.tok_name[ttype], \
## 'tstring:', tstring
self.__state(ttype, tstring, stup[0])
def __waiting(self, ttype, tstring, lineno):
opts = self.__options
# Do docstring extractions, if enabled
if opts.docstrings and not opts.nodocstrings.get(self.__curfile):
# module docstring?
if self.__freshmodule:
if ttype == tokenize.STRING:
self.__addentry(safe_eval(tstring), lineno, isdocstring=1)
self.__freshmodule = 0
elif ttype not in (tokenize.COMMENT, tokenize.NL):
self.__freshmodule = 0
return
# class docstring?
if ttype == tokenize.NAME and tstring in ('class', 'def'):
self.__state = self.__suiteseen
return
if ttype == tokenize.NAME and tstring in opts.keywords:
self.__state = self.__keywordseen
def __suiteseen(self, ttype, tstring, lineno):
# ignore anything until we see the colon
if ttype == tokenize.OP and tstring == ':':
self.__state = self.__suitedocstring
def __suitedocstring(self, ttype, tstring, lineno):
# ignore any intervening noise
if ttype == tokenize.STRING:
self.__addentry(safe_eval(tstring), lineno, isdocstring=1)
self.__state = self.__waiting
elif ttype not in (tokenize.NEWLINE, tokenize.INDENT,
tokenize.COMMENT):
# there was no class docstring
self.__state = self.__waiting
def __keywordseen(self, ttype, tstring, lineno):
if ttype == tokenize.OP and tstring == '(':
self.__data = []
self.__lineno = lineno
self.__state = self.__openseen
else:
self.__state = self.__waiting
def __openseen(self, ttype, tstring, lineno):
if ttype == tokenize.OP and tstring == ')':
# We've seen the last of the translatable strings. Record the
# line number of the first line of the strings and update the list
# of messages seen. Reset state for the next batch. If there
# were no strings inside _(), then just ignore this entry.
if self.__data:
self.__addentry(EMPTYSTRING.join(self.__data))
self.__state = self.__waiting
elif ttype == tokenize.STRING:
self.__data.append(safe_eval(tstring))
elif ttype not in [tokenize.COMMENT, token.INDENT, token.DEDENT,
token.NEWLINE, tokenize.NL]:
# warn if we see anything else than STRING or whitespace
print >> sys.stderr, \
'*** %(file)s:%(lineno)s: Seen unexpected token "%(token)s"'\
% {
'token': tstring,
'file': self.__curfile,
'lineno': self.__lineno
}
self.__state = self.__waiting
def __addentry(self, msg, lineno=None, isdocstring=0):
if lineno is None:
lineno = self.__lineno
if not msg in self.__options.toexclude:
entry = (self.__curfile, lineno)
self.__messages.setdefault(msg, {})[entry] = isdocstring
def set_filename(self, filename):
self.__curfile = filename
self.__freshmodule = 1
def write(self, fp):
options = self.__options
timestamp = time.strftime('%Y-%m-%d %H:%M+%Z')
# The time stamp in the header doesn't have the same format as that
# generated by xgettext...
print >> fp, pot_header % {'time': timestamp, 'version': __version__}
# Sort the entries. First sort each particular entry's keys, then
# sort all the entries by their first item.
reverse = {}
for k, v in self.__messages.items():
keys = v.keys()
keys.sort()
reverse.setdefault(tuple(keys), []).append((k, v))
rkeys = reverse.keys()
rkeys.sort()
for rkey in rkeys:
rentries = reverse[rkey]
rentries.sort()
for k, v in rentries:
isdocstring = 0
# If the entry was gleaned out of a docstring, then add a
# comment stating so. This is to aid translators who may wish
# to skip translating some unimportant docstrings.
if reduce(operator.__add__, v.values()):
isdocstring = 1
# k is the message string, v is a dictionary-set of (filename,
# lineno) tuples. We want to sort the entries in v first by
# file name and then by line number.
v = v.keys()
v.sort()
if not options.writelocations:
pass
# location comments are different b/w Solaris and GNU:
elif options.locationstyle == options.SOLARIS:
for filename, lineno in v:
d = {'filename': filename, 'lineno': lineno}
print >>fp, \
'# File: %(filename)s, line: %(lineno)d' % d
elif options.locationstyle == options.GNU:
# fit as many locations on one line, as long as the
# resulting line length doesn't exceeds 'options.width'
locline = '#:'
for filename, lineno in v:
d = {'filename': filename, 'lineno': lineno}
s = ' %(filename)s:%(lineno)d' % d
if len(locline) + len(s) <= options.width:
locline = locline + s
else:
print >> fp, locline
locline = "#:" + s
if len(locline) > 2:
print >> fp, locline
if isdocstring:
print >> fp, '#, docstring'
print >> fp, 'msgid', normalize(k)
print >> fp, 'msgstr ""\n'
def main(outfile, args=sys.argv[1:]):
global default_keywords
try:
opts, args = getopt.getopt(
args,
'ad:DEhk:Kno:p:S:Vvw:x:X:',
['extract-all', 'default-domain=', 'escape', 'help',
'keyword=', 'no-default-keywords',
'add-location', 'no-location', 'output=', 'output-dir=',
'style=', 'verbose', 'version', 'width=', 'exclude-file=',
'docstrings', 'no-docstrings',
])
except getopt.error, msg:
usage(1, msg)
# for holding option values
class Options:
# constants
GNU = 1
SOLARIS = 2
# defaults
extractall = 0 # FIXME: currently this option has no effect at all.
escape = 0
keywords = []
outpath = ''
outfile = 'messages.pot'
writelocations = 1
locationstyle = GNU
verbose = 0
width = 78
excludefilename = ''
docstrings = 0
nodocstrings = {}
options = Options()
locations = {'gnu' : options.GNU,
'solaris' : options.SOLARIS,
}
# parse options
for opt, arg in opts:
if opt in ('-h', '--help'):
usage(0)
elif opt in ('-a', '--extract-all'):
options.extractall = 1
elif opt in ('-d', '--default-domain'):
options.outfile = arg + '.pot'
elif opt in ('-E', '--escape'):
options.escape = 1
elif opt in ('-D', '--docstrings'):
options.docstrings = 1
elif opt in ('-k', '--keyword'):
options.keywords.append(arg)
elif opt in ('-K', '--no-default-keywords'):
default_keywords = []
elif opt in ('-n', '--add-location'):
options.writelocations = 1
elif opt in ('--no-location',):
options.writelocations = 0
elif opt in ('-S', '--style'):
options.locationstyle = locations.get(arg.lower())
if options.locationstyle is None:
usage(1, ('Invalid value for --style: %s') % arg)
elif opt in ('-o', '--output'):
options.outfile = arg
elif opt in ('-p', '--output-dir'):
options.outpath = arg
elif opt in ('-v', '--verbose'):
options.verbose = 1
elif opt in ('-V', '--version'):
print ('pygettext.py (xgettext for Python) %s') % __version__
sys.exit(0)
elif opt in ('-w', '--width'):
try:
options.width = int(arg)
except ValueError:
usage(1, ('--width argument must be an integer: %s') % arg)
elif opt in ('-x', '--exclude-file'):
options.excludefilename = arg
elif opt in ('-X', '--no-docstrings'):
fp = open(arg)
try:
while 1:
line = fp.readline()
if not line:
break
options.nodocstrings[line[:-1]] = 1
finally:
fp.close()
# calculate escapes
make_escapes(options.escape)
# calculate all keywords
options.keywords.extend(default_keywords)
# initialize list of strings to exclude
if options.excludefilename:
try:
fp = open(options.excludefilename)
options.toexclude = fp.readlines()
fp.close()
except IOError:
print >> sys.stderr, (
"Can't read --exclude-file: %s") % options.excludefilename
sys.exit(1)
else:
options.toexclude = []
# resolve args to module lists
expanded = []
for arg in args:
if arg == '-':
expanded.append(arg)
else:
expanded.extend(getFilesForName(arg))
args = expanded
# slurp through all the files
eater = TokenEater(options)
for filename in args:
if filename == '-':
if options.verbose:
print ('Reading standard input')
fp = sys.stdin
closep = 0
else:
if options.verbose:
print ('Working on %s') % filename
fp = open(filename)
closep = 1
try:
eater.set_filename(filename)
try:
tokenize.tokenize(fp.readline, eater)
except tokenize.TokenError, e:
print >> sys.stderr, '%s: %s, line %d, column %d' % (
e[0], filename, e[1][0], e[1][1])
finally:
if closep:
fp.close()
# write the output
eater.write(outfile)
if __name__ == '__main__':
main()

View File

@ -0,0 +1,709 @@
# Translation template file..
# Copyright (C) 2007 Kovid Goyal
# Kovid Goyal <kovid@kovidgoyal.net>, 2007.
#
msgid ""
msgstr ""
"Project-Id-Version: libprs500 0.4.17\n"
"POT-Creation-Date: 2007-11-08 14:39+PST\n"
"PO-Revision-Date: 2007-11-08 14:39+PST\n"
"Last-Translator: Automatically generated\n"
"Language-Team: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:90
msgid "Created by "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:93
msgid "Set the title. Default: filename."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:95
msgid "Set the author(s). Multiple authors should be set as a comma separated list. Default: %default"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:96
msgid "Unknown"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:98
msgid "Set the comment."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:100
msgid "Set the category"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:102
msgid "Sort key for the title"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:104
msgid "Sort key for the author"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:106
msgid "Publisher"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:108
msgid "Path to file containing image to be used as cover"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:110
msgid "If there is a cover graphic detected in the source file, use that instead of the specified cover."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:113
msgid "Output file name. Default is derived from input filename"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:115
msgid "Render HTML tables as blocks of text instead of actual tables. This is neccessary if the HTML contains very large or complex tables."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:118
msgid "Increase the font size by 2 * FONT_DELTA pts and the line spacing by FONT_DELTA pts. FONT_DELTA can be a fraction.If FONT_DELTA is negative, the font size is decreased."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:123
msgid "Enable autorotation of images that are wider than the screen width."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:126
msgid "Set the space between words in pts. Default is %default"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:128
msgid "Separate paragraphs by blank lines."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:130
msgid "Add a header to all the pages with title and author."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:132
msgid "Set the format of the header. %a is replaced by the author and %t by the title. Default is %default"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:134
msgid "Override the CSS. Can be either a path to a CSS stylesheet or a string. If it is a string it is interpreted as CSS."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:136
msgid "Use the <spine> element from the OPF file to determine the order in which the HTML files are appended to the LRF. The .opf file must be in the same directory as the base HTML file."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:142
msgid "Profile of the target device for which this LRF is being generated. The profile determines things like the resolution and screen size of the target device. Default: %s Supported profiles: "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:148
msgid "Left margin of page. Default is %default px."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:150
msgid "Right margin of page. Default is %default px."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:152
msgid "Top margin of page. Default is %default px."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:154
msgid "Bottom margin of page. Default is %default px."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:158
msgid "The maximum number of levels to recursively process links. A value of 0 means thats links are not followed. A negative value means that <a> tags are ignored."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:162
msgid "A regular expression. <a> tags whoose href matches will be ignored. Defaults to %default"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:167
msgid "Prevent the automatic insertion of page breaks before detected chapters."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:171
msgid "The regular expression used to detect chapter titles. It is searched for in heading tags (h1-h6). Defaults to %default"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:174
msgid "If html2lrf does not find any page breaks in the html file and cannot detect chapter headings, it will automatically insert page-breaks before the tags whose names match this regular expression. Defaults to %default. You can disable it by setting the regexp to \"$\". The purpose of this option is to try to ensure that there are no really long pages as this degrades the page turn performance of the LRF. Thus this option is ignored if the current page has only a few elements."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:184
msgid "Force a page break before tags whoose names match this regular expression."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:186
msgid "Force a page break before an element having the specified attribute. The format for this option is tagname regexp,attribute name,attribute value regexp. For example to match all heading tags that have the attribute class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:189
msgid "Preprocess Baen HTML files to improve generated LRF."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:191
msgid "You must add this option if processing files generated by pdftohtml, otherwise conversion will fail."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:193
msgid "Use this option on html0 files from Book Designer."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:196
msgid ""
"Specify trutype font families for serif, sans-serif and monospace fonts. These fonts will be embedded in the LRF file. Note that custom fonts lead to slower page turns. Each family specification is of the form: \"path to fonts directory, family\" For example: --serif-family \"%s, Times New Roman\"\n"
" "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:205
msgid "The serif family of fonts to embed"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:208
msgid "The sans-serif family of fonts to embed"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/ebooks/lrf/__init__.py:211
msgid "The monospace family of fonts to embed"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/choose_format_ui.py:42
msgid "Choose Format"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/choose_format_ui.py:43
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/password_ui.py:58
msgid "TextLabel"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/conversion_error_ui.py:37
msgid "ERROR"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:79
msgid "Fetch metadata"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:80
msgid "Fetching metadata for <b>%1</b>"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:81
msgid "Sign up for a free account from <a href=\"http://www.isbndb.com\">ISBNdb.com</a> to get an access key."
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:82
msgid "&Access Key;"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:83
msgid "Fetch"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:84
msgid "Matches"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/fetch_metadata_ui.py:85
msgid "Select the book that most closely matches your copy from the list below"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/jobs_ui.py:35
msgid "Active Jobs"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:510
msgid "Convert to LRF"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:511
msgid "Category"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:515
msgid "Metadata"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:519
msgid "Look & Feel"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:523
msgid "Page Setup"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:527
msgid "Chapter Detection"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:529
msgid "Options"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:530
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:296
msgid "Book Cover"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:531
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:297
msgid "Change &cover image:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:532
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:298
msgid "Browse for an image to use as the cover of this book."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:533
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:293
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:295
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:299
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:185
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:186
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:187
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:188
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:189
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:190
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:250
msgid "..."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:534
msgid "Use &metadata cover"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:535
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:268
msgid "&Title: "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:536
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:269
msgid "Change the title of this book"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:537
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:120
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:270
msgid "&Author(s): "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:538
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:540
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:121
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:271
msgid "Change the author(s) of this book. Multiple authors should be separated by a comma"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:539
msgid "Author So&rt:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:541
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:128
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:278
msgid "&Publisher: "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:542
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:129
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:279
msgid "Change the publisher of this book"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:543
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:280
msgid "Ta&gs: "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:544
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:131
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:281
msgid "Tags categorize the book. This is particularly useful while searching. <br><br>They can be any words or phrases, separated by commas."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:545
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:132
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:282
msgid "&Series:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:546
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:547
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:133
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:134
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:283
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:284
msgid "List of known series. You can add new series."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:548
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:549
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:285
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:286
msgid "Series index."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:550
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:287
msgid "Book "
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:551
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:289
msgid "Comments"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:552
msgid "&Font delta:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:553
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:555
msgid " pts"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:554
msgid "&Word spacing:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:556
msgid "&Preprocess:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:557
msgid "Header"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:558
msgid "&Show header"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:559
msgid "&Header format:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:560
msgid "Enable auto &rotation of images"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:561
msgid "Insert &blank lines between paragraphs"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:562
msgid "Ignore &tables"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:563
msgid "Override<br>CSS"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:564
msgid "&Profile:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:565
msgid "&Left Margin:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:566
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:568
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:570
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:572
msgid " px"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:567
msgid "&Right Margin:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:569
msgid "&Top Margin:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:571
msgid "&Bottom Margin:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:573
msgid "Title based detection"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:574
msgid "&Disable chapter detection"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:575
msgid "&Regular expression:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:576
msgid "Tag based detection"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:577
msgid "&Page break before tag:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:578
msgid "&Force page break before tag:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:579
msgid "Force page break before &attribute:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:580
msgid "Help on item"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/lrf_single_ui.py:581
msgid ""
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p></body></html>"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:118
msgid "Edit Meta information"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:119
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:267
msgid "Meta information"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:122
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:272
msgid "Author S&ort: "
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:123
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:273
msgid "Specify how the author(s) of this book should be sorted. For example Charles Dickens should be sorted as Dickens, Charles."
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:124
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:274
msgid "&Rating:"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:125
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:126
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:275
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:276
msgid "Rating of this book. 0-5 stars"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:127
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:277
msgid " stars"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_bulk_ui.py:130
msgid "Add Ta&gs: "
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:266
msgid "Edit Meta Information"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:288
msgid "IS&BN:"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:290
msgid "Fetch metadata from server"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:291
msgid "Available Formats"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:292
msgid "Add a new format for this book to the database"
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:294
msgid "Remove the selected formats for this book from the database."
msgstr ""
#:
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/metadata_single_ui.py:300
msgid "Fetch cover image from server"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/password_ui.py:57
msgid "Password needed"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/password_ui.py:59
msgid "&Username:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/dialogs/password_ui.py:60
msgid "&Password:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/config_ui.py:51
msgid "Configure Viewer"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/config_ui.py:52
msgid "Use white background"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/config_ui.py:53
msgid "Hyphenate"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/config_ui.py:54
msgid "<b>Changes will only take affect after a restart."
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:184
msgid "LRF Viewer"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:191
msgid "Parsing LRF file"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:192
msgid "Next Page"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:193
msgid "Previous Page"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:194
msgid "Back"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:195
msgid "Forward"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:196
msgid "Next match"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:197
msgid "Open ebook"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/lrf_renderer/main_ui.py:198
msgid "Configure"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:241
msgid "libprs500"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:242
msgid ""
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">For help visit <a href=\"https://libprs500.kovidgoyal.net/wiki/WikiStart#Usage\"><span style=\" text-decoration: underline; color:#0000ff;\">libprs500.kovidgoyal.net</span></a><br /><br /><span style=\" font-weight:600;\">libprs500</span>: %1 by <span style=\" font-weight:600;\">Kovid Goyal</span> <br />%2</p></body></html>"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:246
msgid "&Search:"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:247
msgid "Search the list of books by title or author<br><br>Words separated by spaces are ANDed"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:248
msgid "Search the list of books by title, author, publisher, tags and comments<br><br>Words separated by spaces are ANDed"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:249
msgid "Reset Quick Search"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:251
msgid "Add books"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:252
msgid "A"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:253
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:254
msgid "Remove books"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:255
msgid "Del"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:256
msgid "Edit meta information"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:257
msgid "E"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:258
msgid "Send to device"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:259
msgid "Save to disk"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:260
msgid "Fetch news"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:261
msgid "Convert E-books"
msgstr ""
#: /home/kovid/work/libprs500/src/libprs500/gui2/main_ui.py:262
msgid "View"
msgstr ""