mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
oops forgot the translation files.
This commit is contained in:
parent
bb4ca7f46c
commit
9de8a9c16c
59
src/libprs500/translations/__init__.py
Normal file
59
src/libprs500/translations/__init__.py
Normal 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())
|
1
src/libprs500/translations/data.py
Normal file
1
src/libprs500/translations/data.py
Normal 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'}
|
709
src/libprs500/translations/de.po
Normal file
709
src/libprs500/translations/de.po
Normal 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 ""
|
||||
|
160
src/libprs500/translations/msgfmt.py
Normal file
160
src/libprs500/translations/msgfmt.py
Normal 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)
|
||||
|
||||
|
644
src/libprs500/translations/pygettext.py
Normal file
644
src/libprs500/translations/pygettext.py
Normal 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()
|
709
src/libprs500/translations/sl.po
Normal file
709
src/libprs500/translations/sl.po
Normal 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 ""
|
||||
|
Loading…
x
Reference in New Issue
Block a user