diff --git a/src/calibre/srv/code.py b/src/calibre/srv/code.py index d8027f56ee..d4c2b024e3 100644 --- a/src/calibre/srv/code.py +++ b/src/calibre/srv/code.py @@ -27,7 +27,7 @@ from calibre.srv.routes import endpoint, json from calibre.srv.utils import get_library_data, get_use_roman from calibre.utils.config import prefs, tweaks from calibre.utils.icu import sort_key, numeric_sort_key -from calibre.utils.localization import get_lang +from calibre.utils.localization import get_lang, lang_map_for_ui from calibre.utils.search_query_parser import ParseException POSTABLE = frozenset({'GET', 'POST', 'HEAD'}) @@ -387,11 +387,22 @@ def tag_browser(ctx, rd): return rd.etagged_dynamic_response(etag, generate) +def all_lang_names(): + ans = getattr(all_lang_names, 'ans', None) + if ans is None: + ans = all_lang_names.ans = tuple(sorted(lang_map_for_ui().itervalues(), key=numeric_sort_key)) + return ans + + @endpoint('/interface-data/field-names/{field}', postprocess=json) def field_names(ctx, rd, field): ''' Get a list of all names for the specified field Optional: ?library_id= ''' - db, library_id = get_library_data(ctx, rd)[:2] - return tuple(sorted(db.all_field_names(field), key=numeric_sort_key)) + if field == 'languages': + ans = all_lang_names() + else: + db, library_id = get_library_data(ctx, rd)[:2] + ans = tuple(sorted(db.all_field_names(field), key=numeric_sort_key)) + return ans diff --git a/src/pyj/book_list/edit_metadata.pyj b/src/pyj/book_list/edit_metadata.pyj index d6067083e5..b0656cf912 100644 --- a/src/pyj/book_list/edit_metadata.pyj +++ b/src/pyj/book_list/edit_metadata.pyj @@ -256,6 +256,8 @@ def multiple_line_edit(list_to_ui, ui_to_list, container_id, book_id, field, fm, name = fm.name or field le = E.input(type='text', name=name.replace('#', '_c_'), style='width: 100%', oninput=line_edit_updated.bind(None, container_id, field)) val = (resolved_metadata(mi, field) or v'[]') + if field is 'languages': + val = [mi.lang_names[l] or l for l in val] if list_to_ui: val = val.join(list_to_ui) le.value = val