Browse Source

i18n: add "context" param to _(), and use it from qml

fixes https://github.com/spesmilo/electrum/issues/8323

from issue:
> Currently, translatable strings from QML are assigned a `context`
> by `lupdate`, which is then also used by the conversion to `gettext`.
> This `context` must be used when translating such a string. This results in
> strings that are unique to QML to not be translated, due to a missing
> `context` parameter which we do not take into account in electrum.
master
SomberNight 3 years ago
parent
commit
b0b4f39b40
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 2
      electrum/gui/qml/__init__.py
  2. 17
      electrum/i18n.py

2
electrum/gui/qml/__init__.py

@ -42,7 +42,7 @@ class ElectrumTranslator(QTranslator):
super().__init__(parent)
def translate(self, context, source_text, disambiguation, n):
return _(source_text)
return _(source_text, context=context)
class ElectrumGui(BaseElectrumGui, Logger):

17
electrum/i18n.py

@ -53,11 +53,22 @@ else:
# note: f-strings cannot be translated! see https://stackoverflow.com/q/49797658
# So this does not work: _(f"My name: {name}")
# instead use .format: _("My name: {}").format(name)
def _(x: str) -> str:
if x == "":
def _(msg: str, *, context=None) -> str:
if msg == "":
return "" # empty string must not be translated. see #7158
global language
return language.gettext(x)
if context:
contexts = [context]
if context[-1] != "|": # try with both "|" suffix and without
contexts.append(context + "|")
else:
contexts.append(context[:-1])
for ctx in contexts:
out = language.pgettext(ctx, msg)
if out != msg: # found non-trivial translation
return out
# else try without context
return language.gettext(msg)
def set_language(x: Optional[str]) -> None:

Loading…
Cancel
Save