diff --git a/src/calibre/ebooks/metadata/book/render.py b/src/calibre/ebooks/metadata/book/render.py
index e6ad2a5f9d..b6f5a0ef19 100644
--- a/src/calibre/ebooks/metadata/book/render.py
+++ b/src/calibre/ebooks/metadata/book/render.py
@@ -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'
%s
'%(fieldl.replace('#', '_'),
classname(fieldl), html) for fieldl, html in ans]
# print '\n'.join(ans)
- return u''%(u'\n'.join(ans)), comment_fields
+ direction = 'rtl' if rtl else 'ltr'
+ return u''%(direction, u'\n'.join(ans)), comment_fields
diff --git a/src/calibre/gui2/book_details.py b/src/calibre/gui2/book_details.py
index eb0794e2f9..1ff5d22cfb 100644
--- a/src/calibre/gui2/book_details.py
+++ b/src/calibre/gui2/book_details.py
@@ -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'))
# }}}
diff --git a/src/calibre/gui2/viewer/ui.py b/src/calibre/gui2/viewer/ui.py
index 98db0443dd..f069ceda36 100644
--- a/src/calibre/gui2/viewer/ui.py
+++ b/src/calibre/gui2/viewer/ui.py
@@ -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)
diff --git a/src/calibre/utils/localization.py b/src/calibre/utils/localization.py
index 9d09b13417..402d92057b 100644
--- a/src/calibre/utils/localization.py
+++ b/src/calibre/utils/localization.py
@@ -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():