Book details panel: Display data in right-to-left format when the calibre interface language is set to a right-to-left language such as Hebrew or Arabic

This commit is contained in:
Kovid Goyal 2015-12-31 10:23:12 +05:30
parent 0b83786cc6
commit c33017583e
4 changed files with 10 additions and 4 deletions

View File

@ -53,7 +53,7 @@ def search_href(search_term, value):
def item_data(field_name, value, book_id):
return hexlify(cPickle.dumps((field_name, value, book_id), -1))
def mi_to_html(mi, field_list=None, default_author_link=None, use_roman_numbers=True, rating_font='Liberation Serif'):
def mi_to_html(mi, field_list=None, default_author_link=None, use_roman_numbers=True, rating_font='Liberation Serif', rtl=False):
if field_list is None:
field_list = get_field_list(mi)
ans = []
@ -263,4 +263,5 @@ def mi_to_html(mi, field_list=None, default_author_link=None, use_roman_numbers=
ans = [u'<tr id="%s" class="%s">%s</tr>'%(fieldl.replace('#', '_'),
classname(fieldl), html) for fieldl, html in ans]
# print '\n'.join(ans)
return u'<table class="fields">%s</table>'%(u'\n'.join(ans)), comment_fields
direction = 'rtl' if rtl else 'ltr'
return u'<table class="fields" dir="%s">%s</table>'%(direction, u'\n'.join(ans)), comment_fields

View File

@ -23,6 +23,7 @@ from calibre.ebooks.metadata.book.base import (field_metadata, Metadata)
from calibre.ebooks.metadata.book.render import mi_to_html
from calibre.gui2 import (config, open_url, pixmap_to_data, gprefs, rating_font)
from calibre.utils.config import tweaks
from calibre.utils.localization import is_rtl
def render_html(mi, css, vertical, widget, all_fields=False, render_data_func=None): # {{{
table, comment_fields = (render_data_func or render_data)(mi, all_fields=all_fields,
@ -100,7 +101,7 @@ def get_field_list(fm, use_defaults=False):
def render_data(mi, use_roman_numbers=True, all_fields=False):
field_list = get_field_list(getattr(mi, 'field_metadata', field_metadata))
field_list = [(x, all_fields or display) for x, display in field_list]
return mi_to_html(mi, field_list=field_list, use_roman_numbers=use_roman_numbers,
return mi_to_html(mi, field_list=field_list, use_roman_numbers=use_roman_numbers, rtl=is_rtl(),
rating_font=rating_font(), default_author_link=gprefs.get('default_author_link'))
# }}}

View File

@ -21,6 +21,7 @@ from calibre.gui2.viewer.documentview import DocumentView
from calibre.gui2.viewer.bookmarkmanager import BookmarkManager
from calibre.gui2.viewer.toc import TOCView, TOCSearch
from calibre.gui2.viewer.footnote import FootnotesView
from calibre.utils.localization import is_rtl
class DoubleSpinBox(QDoubleSpinBox): # {{{
@ -85,7 +86,7 @@ class Metadata(QWebView): # {{{
from calibre.ebooks.metadata.book.render import mi_to_html
def render_data(mi, use_roman_numbers=True, all_fields=False):
return mi_to_html(mi, use_roman_numbers=use_roman_numbers, rating_font=rating_font())
return mi_to_html(mi, use_roman_numbers=use_roman_numbers, rating_font=rating_font(), rtl=is_rtl())
mi = opf.to_book_metadata()
html = render_html(mi, self.css, True, self, render_data_func=render_data)

View File

@ -81,6 +81,9 @@ def get_lang():
lang = 'en'
return lang
def is_rtl():
return get_lang()[:2].lower() in {'he', 'ar'}
def get_lc_messages_path(lang):
hlang = None
if zf_exists():