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): def item_data(field_name, value, book_id):
return hexlify(cPickle.dumps((field_name, value, book_id), -1)) 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: if field_list is None:
field_list = get_field_list(mi) field_list = get_field_list(mi)
ans = [] 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('#', '_'), ans = [u'<tr id="%s" class="%s">%s</tr>'%(fieldl.replace('#', '_'),
classname(fieldl), html) for fieldl, html in ans] classname(fieldl), html) for fieldl, html in ans]
# print '\n'.join(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.ebooks.metadata.book.render import mi_to_html
from calibre.gui2 import (config, open_url, pixmap_to_data, gprefs, rating_font) from calibre.gui2 import (config, open_url, pixmap_to_data, gprefs, rating_font)
from calibre.utils.config import tweaks 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): # {{{ 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, 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): def render_data(mi, use_roman_numbers=True, all_fields=False):
field_list = get_field_list(getattr(mi, 'field_metadata', field_metadata)) field_list = get_field_list(getattr(mi, 'field_metadata', field_metadata))
field_list = [(x, all_fields or display) for x, display in field_list] 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')) 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.bookmarkmanager import BookmarkManager
from calibre.gui2.viewer.toc import TOCView, TOCSearch from calibre.gui2.viewer.toc import TOCView, TOCSearch
from calibre.gui2.viewer.footnote import FootnotesView from calibre.gui2.viewer.footnote import FootnotesView
from calibre.utils.localization import is_rtl
class DoubleSpinBox(QDoubleSpinBox): # {{{ class DoubleSpinBox(QDoubleSpinBox): # {{{
@ -85,7 +86,7 @@ class Metadata(QWebView): # {{{
from calibre.ebooks.metadata.book.render import mi_to_html from calibre.ebooks.metadata.book.render import mi_to_html
def render_data(mi, use_roman_numbers=True, all_fields=False): 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() mi = opf.to_book_metadata()
html = render_html(mi, self.css, True, self, render_data_func=render_data) html = render_html(mi, self.css, True, self, render_data_func=render_data)

View File

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