String changes

This commit is contained in:
Kovid Goyal 2020-03-11 17:37:19 +05:30
parent 2d38fb1b22
commit d7657cd34c
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 22 additions and 16 deletions

View File

@ -44,15 +44,15 @@ selected author.
You can switch back to the full library at any time by once again clicking the You can switch back to the full library at any time by once again clicking the
:guilabel:`Virtual library` and selecting the entry named :guilabel:`<None>`. :guilabel:`Virtual library` and selecting the entry named :guilabel:`<None>`.
Virtual libraries are based on *searches*. You can use any search as the Virtual libraries are based on *searches*. You can use any search as the
basis of a virtual library. The virtual library will contain only the basis of a Virtual library. The Virtual library will contain only the
books matched by that search. First, type in the search you want to use books matched by that search. First, type in the search you want to use
in the Search bar or build a search using the :guilabel:`Tag browser`. in the Search bar or build a search using the :guilabel:`Tag browser`.
When you are happy with the returned results, click the Virtual library When you are happy with the returned results, click the :guilabel:`Virtual library`
button, choose :guilabel:`Create library` and enter a name for the new virtual button, choose :guilabel:`Create library` and enter a name for the new Virtual
library. The virtual library will then be created based on the search library. The Virtual library will then be created based on the search
you just typed in. Searches are very powerful, for examples of the kinds you just typed in. Searches are very powerful, for examples of the kinds
of things you can do with them, see :ref:`search_interface`. of things you can do with them, see :ref:`search_interface`.
Examples of useful Virtual libraries Examples of useful Virtual libraries
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -82,7 +82,7 @@ You can edit a previously created virtual library or remove it, by clicking the
You can tell calibre that you always want to apply a particular virtual library You can tell calibre that you always want to apply a particular virtual library
when the current library is opened, by going to when the current library is opened, by going to
:guilabel:`Preferences->Interface->Behavior`. :guilabel:`Preferences->Interface->Behavior`.
You can quickly use the current search as a temporary virtual library by You can quickly use the current search as a temporary virtual library by
clicking the :guilabel:`Virtual library` button and choosing the clicking the :guilabel:`Virtual library` button and choosing the
@ -103,7 +103,7 @@ example, ``vl:Read`` will find all the books in the *Read* virtual library. The
``vl:Read and vl:"Science Fiction"`` will find all the books that are in both the *Read* and ``vl:Read and vl:"Science Fiction"`` will find all the books that are in both the *Read* and
*Science Fiction* virtual libraries. *Science Fiction* virtual libraries.
The value following ``vl:`` must be the name of a virtual library. If the virtual library name The value following ``vl:`` must be the name of a virtual library. If the virtual library name
contains spaces then surround it with quotes. contains spaces then surround it with quotes.
One use for a virtual library search is in the content server. In One use for a virtual library search is in the content server. In
@ -124,4 +124,3 @@ saved search that shows you unread books, you can click the :guilabel:`Virtual
Library` button and choose the :guilabel:`Additional restriction` option to Library` button and choose the :guilabel:`Additional restriction` option to
show only unread Historical Fiction books. To learn about saved searches, see show only unread Historical Fiction books. To learn about saved searches, see
:ref:`saved_searches`. :ref:`saved_searches`.

View File

@ -114,7 +114,7 @@ class TagBrowserMixin(object): # {{{
if new_category_name is not None: if new_category_name is not None:
new_name = new_category_name.replace('.', '') new_name = new_category_name.replace('.', '')
else: else:
new_name = _('New Category').replace('.', '') new_name = _('New category').replace('.', '')
n = new_name n = new_name
while True: while True:
new_cat = on_category_key[1:] + '.' + n new_cat = on_category_key[1:] + '.' + n

View File

@ -3,7 +3,7 @@
from __python__ import bound_methods, hash_literals from __python__ import bound_methods, hash_literals
from elementmaker import E from elementmaker import E
from gettext import gettext as _ from gettext import gettext as _, ngettext
from book_list.globals import get_db from book_list.globals import get_db
from book_list.router import home, open_book from book_list.router import home, open_book
@ -62,7 +62,10 @@ def confirm_delete_all():
else: else:
close_modal() close_modal()
msg = _('This will remove all {} downloaded books from local storage. Are you sure?').format(num_of_books) msg = ngettext(
'This will remove the downloaded book from local storage. Are you sure?',
'This will remove all {} downloaded books from local storage. Are you sure?',
num_of_books).format(num_of_books)
m = E.div() m = E.div()
safe_set_inner_html(m, msg) safe_set_inner_html(m, msg)
parent.appendChild(E.div( parent.appendChild(E.div(
@ -90,7 +93,11 @@ def delete_all(msg_parent, close_modal):
refresh() refresh()
return return
clear(msg_parent) clear(msg_parent)
safe_set_inner_html(msg_parent, _('Deleting {} books, please wait...').format(books.length)) safe_set_inner_html(msg_parent, ngettext(
'Deleting one book, please wait...',
'Deleting {} books, please wait...',
books.length or 0).format(books.length)
)
book_to_delete = books.pop() book_to_delete = books.pop()
db.delete_book(book_list_data.book_data[book_to_delete], def(book, err_string): db.delete_book(book_list_data.book_data[book_to_delete], def(book, err_string):
if err_string: if err_string: