Fix calls to pgettext() to use the installed translator

This commit is contained in:
Kovid Goyal 2023-01-09 19:50:12 +05:30
parent a1d21e3632
commit 474de99ec2
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
6 changed files with 25 additions and 12 deletions

View File

@ -7,7 +7,6 @@ __docformat__ = 'restructuredtext en'
from collections import OrderedDict from collections import OrderedDict
from functools import partial from functools import partial
from gettext import pgettext
from qt.core import (QObject, QKeySequence, QAbstractItemModel, QModelIndex, QItemSelectionModel, from qt.core import (QObject, QKeySequence, QAbstractItemModel, QModelIndex, QItemSelectionModel,
Qt, QStyledItemDelegate, QTextDocument, QStyle, pyqtSignal, QFrame, QAbstractItemView, QMenu, Qt, QStyledItemDelegate, QTextDocument, QStyle, pyqtSignal, QFrame, QAbstractItemView, QMenu,
@ -19,6 +18,7 @@ from calibre.constants import DEBUG
from calibre import prints, prepare_string_for_xml from calibre import prints, prepare_string_for_xml
from calibre.utils.icu import sort_key, lower from calibre.utils.icu import sort_key, lower
from calibre.gui2 import error_dialog, info_dialog from calibre.gui2 import error_dialog, info_dialog
from calibre.utils.localization import pgettext
from calibre.utils.search_query_parser import SearchQueryParser, ParseException from calibre.utils.search_query_parser import SearchQueryParser, ParseException
from calibre.gui2.search_box import SearchBox2 from calibre.gui2.search_box import SearchBox2
from polyglot.builtins import iteritems, itervalues from polyglot.builtins import iteritems, itervalues

View File

@ -5,7 +5,6 @@ __license__ = 'GPL v3'
__copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>' __copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
from functools import partial from functools import partial
from gettext import pgettext
from qt.core import ( from qt.core import (
QAbstractItemView, QAction, QComboBox, QDialog, QDialogButtonBox, QFrame, QAbstractItemView, QAction, QComboBox, QDialog, QDialogButtonBox, QFrame,
QGridLayout, QIcon, QLabel, QLineEdit, QListView, QMenu, QRadioButton, QSize, QGridLayout, QIcon, QLabel, QLineEdit, QListView, QMenu, QRadioButton, QSize,
@ -16,7 +15,7 @@ from calibre.gui2 import error_dialog, gprefs, question_dialog
from calibre.gui2.dialogs.confirm_delete import confirm from calibre.gui2.dialogs.confirm_delete import confirm
from calibre.gui2.widgets import ComboBoxWithHelp from calibre.gui2.widgets import ComboBoxWithHelp
from calibre.utils.icu import sort_key from calibre.utils.icu import sort_key
from calibre.utils.localization import localize_user_manual_link from calibre.utils.localization import localize_user_manual_link, pgettext
from calibre.utils.search_query_parser import ParseException from calibre.utils.search_query_parser import ParseException

View File

@ -4,7 +4,6 @@ __docformat__ = 'restructuredtext en'
import re, string import re, string
from operator import attrgetter from operator import attrgetter
from gettext import pgettext
from qt.core import (Qt, QAbstractItemModel, QPixmap, QModelIndex, QSize, from qt.core import (Qt, QAbstractItemModel, QPixmap, QModelIndex, QSize,
pyqtSignal, QIcon, QApplication) pyqtSignal, QIcon, QApplication)
@ -15,6 +14,7 @@ from calibre.gui2.store.search_result import SearchResult
from calibre.gui2.store.search.download_thread import DetailsThreadPool, \ from calibre.gui2.store.search.download_thread import DetailsThreadPool, \
CoverThreadPool CoverThreadPool
from calibre.utils.icu import sort_key from calibre.utils.icu import sort_key
from calibre.utils.localization import pgettext
from calibre.utils.search_query_parser import SearchQueryParser from calibre.utils.search_query_parser import SearchQueryParser

View File

@ -8,7 +8,6 @@ import sys
import textwrap import textwrap
from collections import Counter, OrderedDict, defaultdict from collections import Counter, OrderedDict, defaultdict
from functools import lru_cache, partial from functools import lru_cache, partial
from gettext import pgettext
from qt.core import ( from qt.core import (
QAbstractItemView, QApplication, QCheckBox, QDialog, QDialogButtonBox, QFont, QAbstractItemView, QApplication, QCheckBox, QDialog, QDialogButtonBox, QFont,
QFormLayout, QGridLayout, QIcon, QInputDialog, QItemSelectionModel, QLabel, QFormLayout, QGridLayout, QIcon, QInputDialog, QItemSelectionModel, QLabel,
@ -37,6 +36,7 @@ from calibre.gui2.tweak_book import (
from calibre.gui2.tweak_book.editor import syntax_from_mime from calibre.gui2.tweak_book.editor import syntax_from_mime
from calibre.gui2.tweak_book.templates import template_for from calibre.gui2.tweak_book.templates import template_for
from calibre.utils.fonts.utils import get_font_names from calibre.utils.fonts.utils import get_font_names
from calibre.utils.localization import pgettext
from calibre.utils.icu import numeric_sort_key from calibre.utils.icu import numeric_sort_key
from calibre_extensions.progress_indicator import set_no_activate_on_click from calibre_extensions.progress_indicator import set_no_activate_on_click
from polyglot.binary import as_hex_unicode from polyglot.binary import as_hex_unicode

View File

@ -6,7 +6,6 @@ __copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
import os import os
from functools import partial from functools import partial
from gettext import pgettext
from itertools import product from itertools import product
from qt.core import ( from qt.core import (
QAction, QApplication, QColor, QDockWidget, QEvent, QHBoxLayout, QIcon, QLabel, QAction, QApplication, QColor, QDockWidget, QEvent, QHBoxLayout, QIcon, QLabel,
@ -49,7 +48,7 @@ from calibre.gui2.tweak_book.toc import TOCViewer
from calibre.gui2.tweak_book.undo import CheckpointView from calibre.gui2.tweak_book.undo import CheckpointView
from calibre.utils.icu import ord_string, sort_key from calibre.utils.icu import ord_string, sort_key
from calibre.utils.localization import ( from calibre.utils.localization import (
localize_user_manual_link, localize_website_link localize_user_manual_link, localize_website_link, pgettext
) )
from calibre.utils.unicode_names import character_name_from_code from calibre.utils.unicode_names import character_name_from_code
from polyglot.builtins import iteritems, itervalues from polyglot.builtins import iteritems, itervalues

View File

@ -260,25 +260,40 @@ def translator_for_lang(lang):
return {'translator': t, 'iso639_translator': iso639, 'lcdata': lcdata} return {'translator': t, 'iso639_translator': iso639, 'lcdata': lcdata}
default_translator = NullTranslations()
def _(x: str) -> str:
return default_translator.gettext(x)
def ngettext(singular: str, plural: str, n: int) -> str:
return default_translator.ngettext(singular, plural, n)
def pgettext(context: str, msg: str) -> str:
return default_translator.pgettext(context, msg)
def set_translators(): def set_translators():
global _lang_trans, lcdata global _lang_trans, lcdata, default_translator
# To test different translations invoke as # To test different translations invoke as
# CALIBRE_OVERRIDE_LANG=de_DE.utf8 program # CALIBRE_OVERRIDE_LANG=de_DE.utf8 program
lang = get_lang() lang = get_lang()
if lang: if lang:
q = translator_for_lang(lang) q = translator_for_lang(lang)
t = q['translator'] default_translator = q['translator']
_lang_trans = q['iso639_translator'] _lang_trans = q['iso639_translator']
if q['lcdata']: if q['lcdata']:
lcdata = q['lcdata'] lcdata = q['lcdata']
else: else:
t = NullTranslations() default_translator = NullTranslations()
try: try:
set_translators.lang = t.info().get('language') set_translators.lang = default_translator.info().get('language')
except Exception: except Exception:
pass pass
t.install(names=('ngettext',)) default_translator.install(names=('ngettext',))
# Now that we have installed a translator, we have to retranslate the help # Now that we have installed a translator, we have to retranslate the help
# for the global prefs object as it was instantiated in get_lang(), before # for the global prefs object as it was instantiated in get_lang(), before
# the translator was installed. # the translator was installed.