Daniel Brötzmann pushed to branch i18n-method-switch at gajim / gajim
Commits: b69d7b2e by Philipp Hörist at 2022-12-04T19:33:59+01:00 cq: Fix typo in annotation
- - - - - 156b23cf by Philipp Hörist at 2022-12-04T19:38:45+01:00 refactor: Raise AssertionError explicitly
assert can be optimized out by python, as this is not a assert for helping the type checker it should be raised explicitly.
- - - - - 9294172c by Philipp Hörist at 2022-12-04T20:19:38+01:00 refactor: Simplify sorted list insertion
Handler lists are very small and are not changed very often
- - - - - 5c874f20 by Philipp Hörist at 2022-12-04T20:46:57+01:00 cq: Settings: Mark loop var as not used
- - - - - b48e6922 by Philipp Hörist at 2022-12-04T20:56:07+01:00 refactor: Replace lru_cache(maxsize=None) with shorthand
- - - - - 16ce9f7e by Philipp Hörist at 2022-12-04T21:39:40+01:00 refactor: Use set literals
- - - - - 5265a80c by wurstsalat at 2022-12-04T22:56:12+01:00 refactor: Translations: Use p_() method for translation context
- - - - -
25 changed files:
- gajim/common/const.py - gajim/common/ged.py - gajim/common/helpers.py - gajim/common/i18n.py - gajim/common/modules/mam.py - gajim/common/modules/message.py - gajim/common/modules/roster.py - gajim/common/preview_helpers.py - gajim/common/proxy65_manager.py - gajim/common/settings.py - gajim/common/styling.py - gajim/gtk/accounts.py - gajim/gtk/advanced_config.py - gajim/gtk/avatar.py - gajim/gtk/builder.py - gajim/gtk/conversation/rows/widgets.py - gajim/gtk/dataform.py - gajim/gtk/groupchat_affiliation.py - gajim/gtk/groupchat_info.py - gajim/gtk/menus.py - gajim/gtk/profile.py - gajim/gtk/settings.py - gajim/gtk/ssl_error_dialog.py - gajim/gtk/tooltips.py - gajim/gtk/vcard_grid.py
Changes:
===================================== gajim/common/const.py ===================================== @@ -31,7 +31,7 @@ from nbxmpp.protocol import JID
from gajim.common.i18n import _ -from gajim.common.i18n import Q_ +from gajim.common.i18n import p_
STOP_EVENT = True @@ -354,21 +354,21 @@ class CallType(Enum):
MUC_CREATION_EXAMPLES = [ - (Q_('?Group chat name:Team'), - Q_('?Group chat description:Project discussion'), - Q_('?Group chat address:team')), - (Q_('?Group chat name:Family'), - Q_('?Group chat description:Spring gathering'), - Q_('?Group chat address:family')), - (Q_('?Group chat name:Vacation'), - Q_('?Group chat description:Trip planning'), - Q_('?Group chat address:vacation')), - (Q_('?Group chat name:Repairs'), - Q_('?Group chat description:Local help group'), - Q_('?Group chat address:repairs')), - (Q_('?Group chat name:News'), - Q_('?Group chat description:Local news and reports'), - Q_('?Group chat address:news')), + (p_('Group chat name', 'Team'), + p_('Group chat description', 'Project discussion'), + p_('Group chat address', 'team')), + (p_('Group chat name', 'Family'), + p_('Group chat description', 'Spring gathering'), + p_('Group chat address', 'family')), + (p_('Group chat name', 'Vacation'), + p_('Group chat description', 'Trip planning'), + p_('Group chat address', 'vacation')), + (p_('Group chat name', 'Repairs'), + p_('Group chat description', 'Local help group'), + p_('Group chat address', 'repairs')), + (p_('Group chat name', 'News'), + p_('Group chat description', 'Local news and reports'), + p_('Group chat address', 'news')), ]
@@ -921,22 +921,22 @@ def is_active(self): ]
SHOW_STRING = { - 'dnd': _('Busy'), - 'xa': _('Not Available'), - 'chat': _('Free for Chat'), - 'online': Q_('?user status:Available'), + 'dnd': p_('User status', 'Busy'), + 'xa': p_('User status', 'Not Available'), + 'chat': p_('User status', 'Free for Chat'), + 'online': p_('User status', 'Available'), 'connecting': _('Connecting'), - 'away': _('Away'), + 'away': p_('User status', 'Away'), 'offline': _('Offline'), }
SHOW_STRING_MNEMONIC = { - 'dnd': _('_Busy'), - 'xa': _('_Not Available'), - 'chat': _('_Free for Chat'), - 'online': Q_('?user status:_Available'), + 'dnd': p_('User status', '_Busy'), + 'xa': p_('User status', '_Not Available'), + 'chat': p_('User status', '_Free for Chat'), + 'online': p_('User status', '_Available'), 'connecting': _('Connecting'), - 'away': _('A_way'), + 'away': p_('User status', 'A_way'), 'offline': _('_Offline'), }
===================================== gajim/common/ged.py ===================================== @@ -20,6 +20,7 @@ import logging import traceback import inspect +import operator
from nbxmpp import NodeProcessed
@@ -55,23 +56,17 @@ def register_event_handler(self, priority: int, handler: HandlerFuncT) -> None:
- if event_name in self.handlers: - handlers_list = self.handlers[event_name] - if (priority, handler) in handlers_list: - # Don’t register same handler/prio multiple times - return - - i = 0 - for i, handler_tuple in enumerate(handlers_list): - if priority < handler_tuple[0]: - break - else: - # no event with smaller prio found, put it at the end - i += 1 - - handlers_list.insert(i, (priority, handler)) - else: + if event_name not in self.handlers: self.handlers[event_name] = [(priority, handler)] + return + + handlers_list = self.handlers[event_name] + if (priority, handler) in handlers_list: + # Don’t register same handler/prio multiple times + return + + handlers_list.append((priority, handler)) + handlers_list.sort(key=operator.itemgetter(0))
def remove_event_handler(self, event_name: str,
===================================== gajim/common/helpers.py ===================================== @@ -88,7 +88,7 @@ from gajim.common import app from gajim.common import configpaths from gajim.common import iana -from gajim.common.i18n import Q_ +from gajim.common.i18n import p_ from gajim.common.i18n import _ from gajim.common.i18n import ngettext from gajim.common.i18n import get_rfc5646_lang @@ -183,24 +183,24 @@ def get_uf_show(show: str, use_mnemonic: bool = False) -> str:
def get_uf_sub(sub: str) -> str: if sub == 'none': - uf_sub = Q_('?Subscription we already have:None') + uf_sub = p_('Contact subscription', 'None') elif sub == 'to': - uf_sub = _('To') + uf_sub = p_('Contact subscription', 'To') elif sub == 'from': - uf_sub = _('From') + uf_sub = p_('Contact subscription', 'From') elif sub == 'both': - uf_sub = _('Both') + uf_sub = p_('Contact subscription', 'Both') else: - uf_sub = _('Unknown') + uf_sub = p_('Contact subscription', 'Unknown')
return uf_sub
def get_uf_ask(ask: Union[str, None]) -> str: if ask is None: - uf_ask = Q_('?Ask (for Subscription):None') + uf_ask = p_('Contact subscription', 'None') elif ask == 'subscribe': - uf_ask = _('Subscribe') + uf_ask = p_('Contact subscription', 'Subscribe') else: uf_ask = ask
@@ -213,19 +213,19 @@ def get_uf_role(role: Union[Role, str], plural: bool = False) -> str: role = role.value
if role == 'none': - return Q_('?Group Chat Contact Role:None') + return p_('Group chat contact role', 'None') if role == 'moderator': if plural: - return _('Moderators') - return _('Moderator') + return p_('Group chat contact role', 'Moderators') + return p_('Group chat contact role', 'Moderator') if role == 'participant': if plural: - return _('Participants') - return _('Participant') + return p_('Group chat contact role', 'Participants') + return p_('Group chat contact role', 'Participant') if role == 'visitor': if plural: - return _('Visitors') - return _('Visitor') + return p_('Group chat contact role', 'Visitors') + return p_('Group chat contact role', 'Visitor') return ''
@@ -237,19 +237,19 @@ def get_uf_affiliation(affiliation: Union[Affiliation, str], affiliation = affiliation.value
if affiliation == 'none': - return Q_('?Group Chat Contact Affiliation:None') + return p_('Group chat contact affiliation', 'None') if affiliation == 'owner': if plural: - return _('Owners') - return _('Owner') + return p_('Group chat contact affiliation', 'Owners') + return p_('Group chat contact affiliation', 'Owner') if affiliation == 'admin': if plural: - return _('Administrators') - return _('Administrator') + return p_('Group chat contact affiliation', 'Administrators') + return p_('Group chat contact affiliation', 'Administrator') if affiliation == 'member': if plural: - return _('Members') - return _('Member') + return p_('Group chat contact affiliation', 'Members') + return p_('Group chat contact affiliation', 'Member') return ''
===================================== gajim/common/i18n.py ===================================== @@ -122,28 +122,7 @@ def is_rtl_text(text: str) -> bool: return False
-def Q_(text: str) -> str: - ''' - Translate the given text, optionally qualified with a special - construction, which will help translators to disambiguate between - same terms, but in different contexts. - - When translated text is returned - this rudimentary construction - will be stripped off, if it's present. - - Here is the construction to use: - Q_("?vcard:Unknown") - - Everything between ? and : - is the qualifier to convey the context - to the translators. Everything after : - is the text itself. - ''' - text = _(text) - if text.startswith('?'): - text = text.split(':', 1)[1] - return text - - -def P_(context: str, message: str) -> str: +def p_(context: str, message: str) -> str: return _translation.pgettext(context, message)
===================================== gajim/common/modules/mam.py ===================================== @@ -342,7 +342,7 @@ def _get_query_id(self, jid: str) -> str: self._mam_query_ids[jid] = query_id return query_id
- def _get_query_params(self) -> tuple[Optional[ſtr], Optional[datetime]]: + def _get_query_params(self) -> tuple[Optional[str], Optional[datetime]]: own_jid = self._con.get_own_jid().bare archive = app.storage.archive.get_archive_infos(own_jid)
===================================== gajim/common/modules/message.py ===================================== @@ -61,8 +61,7 @@ def __init__(self, con: types.Client) -> None: ]
# XEPs for which this message module should not be executed - self._message_namespaces = set([Namespace.ROSTERX, - Namespace.IBB]) + self._message_namespaces = {Namespace.ROSTERX, Namespace.IBB}
def _check_if_unknown_contact(self, _con: types.xmppClient,
===================================== gajim/common/modules/roster.py ===================================== @@ -185,13 +185,13 @@ def _get_items_with_group(self, group: str) -> list[RosterItem]: def remove_group(self, group: str) -> None: items = self._get_items_with_group(group) for item in items: - new_groups = item.groups - set([group]) + new_groups = item.groups - {group} self.set_groups(item.jid, new_groups)
def rename_group(self, group: str, new_group: str) -> None: items = self._get_items_with_group(group) for item in items: - new_groups = item.groups - set([group]) + new_groups = item.groups - {group} new_groups.add(new_group) self.set_groups(item.jid, new_groups)
===================================== gajim/common/preview_helpers.py ===================================== @@ -42,7 +42,7 @@
from gajim.common.helpers import sanitize_filename from gajim.common.i18n import _ -from gajim.common.i18n import P_ +from gajim.common.i18n import p_
log = logging.getLogger('gajim.c.preview_helpers')
@@ -388,13 +388,13 @@ def fmt(f: float) -> str: degrees = i return '%d°%02d′%02d′′' % (degrees, minutes, seconds) if lat >= 0: - slat = P_('positive latitude', '%sN') % fmt(lat) + slat = p_('positive latitude', '%sN') % fmt(lat) else: - slat = P_('negative latitude', '%sS') % fmt(-lat) + slat = p_('negative latitude', '%sS') % fmt(-lat) if lon >= 0: - slon = P_('positive longitude', '%sE') % fmt(lon) + slon = p_('positive longitude', '%sE') % fmt(lon) else: - slon = P_('negative longitude', '%sW') % fmt(-lon) + slon = p_('negative longitude', '%sW') % fmt(-lon) return '%s %s' % (slat, slon)
===================================== gajim/common/proxy65_manager.py ===================================== @@ -341,7 +341,7 @@ def pollin(self): self.disconnect() self.state += 1 else: - assert False, 'unexpected state: %d' % self.state + raise AssertionError('unexpected state: %d' % self.state)
def do_connect(self): try: @@ -478,7 +478,7 @@ def pollin(self): self.disconnect() self.state += 1 else: - assert False, 'unexpected state: %d' % self.state + raise AssertionError('unexpected state: %d' % self.state)
def do_connect(self): try:
===================================== gajim/common/settings.py ===================================== @@ -414,12 +414,12 @@ def _migrate_app_settings(self) -> None: # Migrate deprecated settings value = app_settings.pop('send_chatstate_muc_default', None) if value is not None: - for account, settings in self._account_settings.items(): + for _account, settings in self._account_settings.items(): settings['account']['gc_send_chatstate_default'] = value
value = app_settings.pop('send_chatstate_default', None) if value is not None: - for account, settings in self._account_settings.items(): + for _account, settings in self._account_settings.items(): settings['account']['send_chatstate_default'] = value
value = app_settings.pop('print_join_left_default', None)
===================================== gajim/common/styling.py ===================================== @@ -37,7 +37,7 @@ EMPH = '_'
WHITESPACE = set(string.whitespace) -SPAN_DIRS = set([PRE, STRONG, STRIKE, EMPH]) +SPAN_DIRS = {PRE, STRONG, STRIKE, EMPH} VALID_SPAN_START = WHITESPACE | SPAN_DIRS
PRE_RX = r'(?P<pre>^```.+?(^```$(.|\Z)))'
===================================== gajim/gtk/accounts.py ===================================== @@ -31,7 +31,7 @@ from gajim.common import passwords from gajim.common.const import ClientState from gajim.common.i18n import _ -from gajim.common.i18n import Q_ +from gajim.common.i18n import p_ from gajim.common.settings import AllSettingsT from gajim.common import types
@@ -522,7 +522,7 @@ def __init__(self, account: str) -> None: self._switch_state_label = Gtk.Label() self._switch_state_label.set_xalign(0) self._switch_state_label.set_valign(Gtk.Align.CENTER) - label_width = max(len(Q_('?switch:On')), len(Q_('?switch:Off'))) + label_width = max(len(p_('Switch', 'On')), len(p_('Switch', 'Off'))) self._switch_state_label.set_width_chars(label_width) self._set_label(account_enabled)
@@ -552,7 +552,7 @@ def enable_account(self, state: bool) -> None: self._set_label(state)
def _set_label(self, active: bool) -> None: - text = Q_('?switch:On') if active else Q_('?switch:Off') + text = p_('Switch', 'On') if active else p_('Switch', 'Off') self._switch_state_label.set_text(text)
def _on_enable_switch(self,
===================================== gajim/gtk/advanced_config.py ===================================== @@ -30,7 +30,7 @@
from gajim.common import app from gajim.common.i18n import _ -from gajim.common.i18n import Q_ +from gajim.common.i18n import p_
from gajim.common.setting_values import ADVANCED_SETTINGS from gajim.common.setting_values import APP_SETTINGS @@ -53,9 +53,9 @@ class Column(IntEnum):
SETTING_TYPES = { - bool: Q_('?config type:Boolean'), - int: Q_('?config type:Integer'), - str: Q_('?config type:Text'), + bool: p_('Configuration type', 'Boolean'), + int: p_('Configuration type', 'Integer'), + str: p_('Configuration type', 'Text'), }
@@ -81,7 +81,7 @@ def __init__(self) -> None:
renderer_text = Gtk.CellRendererText() renderer_text.set_property('ellipsize', Pango.EllipsizeMode.END) - col = Gtk.TreeViewColumn(Q_('?config:Preference Name'), + col = Gtk.TreeViewColumn(p_('Configuration', 'Preference Name'), renderer_text, text=0) treeview.insert_column(col, -1) col.set_cell_data_func(renderer_text, @@ -94,7 +94,7 @@ def __init__(self) -> None: self.renderer_text.connect('edited', self._on_config_edited) self.renderer_text.set_property('ellipsize', Pango.EllipsizeMode.END) col = Gtk.TreeViewColumn( - Q_('?config:Value'), self.renderer_text, text=1) + p_('Configuration', 'Value'), self.renderer_text, text=1) treeview.insert_column(col, -1) col.set_cell_data_func(self.renderer_text, self._value_column_data_callback) @@ -103,7 +103,8 @@ def __init__(self) -> None: col.set_resizable(True)
renderer_text = Gtk.CellRendererText() - col = Gtk.TreeViewColumn(Q_('?config:Type'), renderer_text, text=2) + col = Gtk.TreeViewColumn( + p_('Configuration', 'Type'), renderer_text, text=2) treeview.insert_column(col, -1) col.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
@@ -159,7 +160,8 @@ def _on_treeview_selection_changed(self, setting = model[iter_][Column.NAME] desc = ADVANCED_SETTINGS['app'][setting]
- self._ui.description.set_text(desc or Q_('?config description:None')) + self._ui.description.set_text( + desc or p_('Configuration description', 'None')) self._ui.reset_button.set_sensitive(not model[iter_][Column.IS_DEFAULT])
def _on_treeview_row_activated(self,
===================================== gajim/gtk/avatar.py ===================================== @@ -20,7 +20,7 @@ import logging import hashlib from math import pi -from functools import lru_cache +import functools from collections import defaultdict from pathlib import Path
@@ -109,7 +109,7 @@ def generate_avatar(letters: str, return context.get_target()
-@lru_cache(maxsize=None) +@functools.cache def generate_default_avatar(letter: str, color: tuple[float, float, float], size: int, @@ -122,7 +122,7 @@ def generate_default_avatar(letter: str, return surface
-@lru_cache(maxsize=None) +@functools.cache def make_workspace_avatar(letter: str, color: tuple[float, float, float], size: int, @@ -186,7 +186,7 @@ def add_status_to_avatar(surface: cairo.ImageSurface, return context.get_target()
-@lru_cache(maxsize=128) +@functools.lru_cache(maxsize=128) def get_show_circle(show: Union[str, types.PresenceShowT], size: int, scale: int
===================================== gajim/gtk/builder.py ===================================== @@ -57,7 +57,7 @@ def __init__(self, self._builder.add_from_string(xml_text)
@staticmethod - @functools.lru_cache(maxsize=None) + @functools.cache def _load_string_from_filename(filename: str, gettext_: Any) -> str: file_path = str(configpaths.get('GUI') / filename)
===================================== gajim/gtk/conversation/rows/widgets.py ===================================== @@ -27,7 +27,7 @@
from gajim.common import app from gajim.common.const import AvatarSize -from gajim.common.i18n import Q_ +from gajim.common.i18n import p_ from gajim.common.modules.contacts import GroupchatContact from gajim.common.types import ChatContactT
@@ -155,7 +155,7 @@ def set_receipt_icon_visible(self, visible: bool) -> None: self._marker_image.set_visible(visible) self._marker_image.set_from_icon_name( 'feather-check-symbolic', Gtk.IconSize.MENU) - self._marker_image.set_tooltip_text(Q_('?Message state:Received')) + self._marker_image.set_tooltip_text(p_('Message state', 'Received'))
def set_correction_icon_visible(self, visible: bool) -> None: self._correction_image.set_visible(visible)
===================================== gajim/gtk/dataform.py ===================================== @@ -187,7 +187,7 @@ def _analyse_fields(form_node: Union[SimpleDataForm, MultipleDataForm], # Don’t overwrite option return
- label_lengths = set([0]) + label_lengths = {0} for field in form_node.iter_fields(): if field.type_ == 'hidden': continue
===================================== gajim/gtk/groupchat_affiliation.py ===================================== @@ -213,7 +213,7 @@ def _set_remove_button_state(self, self._ui.remove_button.set_sensitive(True) return
- if set(['owner', 'admin']).intersection(selected_affiliations): + if {'owner', 'admin'}.intersection(selected_affiliations): self._ui.remove_button.set_sensitive(False) self._ui.remove_button.set_tooltip_text( _('You are not allowed to modify the affiliation '
===================================== gajim/gtk/groupchat_info.py ===================================== @@ -27,7 +27,7 @@
from gajim.common import app from gajim.common.i18n import _ -from gajim.common.i18n import Q_ +from gajim.common.i18n import p_ from gajim.common.helpers import open_uri from gajim.common.helpers import get_groupchat_name from gajim.common.const import RFC5646_LANGUAGE_TAGS @@ -40,63 +40,63 @@ MUC_FEATURES = { 'muc_open': ( 'feather-globe-symbolic', - Q_('?Group chat feature:Open'), + p_('Group chat feature', 'Open'), _('Anyone can join this group chat')), 'muc_membersonly': ( 'feather-user-check-symbolic', - Q_('?Group chat feature:Members Only'), + p_('Group chat feature', 'Members Only'), _('This group chat is restricted ' 'to members only')), 'muc_nonanonymous': ( 'feather-shield-off-symbolic', - Q_('?Group chat feature:Not Anonymous'), + p_('Group chat feature', 'Not Anonymous'), _('All other group chat participants ' 'can see your XMPP address')), 'muc_semianonymous': ( 'feather-shield-symbolic', - Q_('?Group chat feature:Semi-Anonymous'), + p_('Group chat feature', 'Semi-Anonymous'), _('Only moderators can see your XMPP address')), 'muc_moderated': ( 'feather-mic-off-symbolic', - Q_('?Group chat feature:Moderated'), + p_('Group chat feature', 'Moderated'), _('Participants entering this group chat need ' 'to request permission to send messages')), 'muc_unmoderated': ( 'feather-mic-symbolic', - Q_('?Group chat feature:Not Moderated'), + p_('Group chat feature', 'Not Moderated'), _('Participants entering this group chat are ' 'allowed to send messages')), 'muc_public': ( 'feather-eye-symbolic', - Q_('?Group chat feature:Public'), + p_('Group chat feature', 'Public'), _('Group chat can be found via search')), 'muc_hidden': ( 'feather-eye-off-symbolic', - Q_('?Group chat feature:Hidden'), + p_('Group chat feature', 'Hidden'), _('This group chat can not be found via search')), 'muc_passwordprotected': ( 'feather-lock-symbolic', - Q_('?Group chat feature:Password Required'), + p_('Group chat feature', 'Password Required'), _('This group chat ' 'does require a password upon entry')), 'muc_unsecured': ( 'feather-unlock-symbolic', - Q_('?Group chat feature:No Password Required'), + p_('Group chat feature', 'No Password Required'), _('This group chat does not require ' 'a password upon entry')), 'muc_persistent': ( 'feather-hard-drive-symbolic', - Q_('?Group chat feature:Persistent'), + p_('Group chat feature', 'Persistent'), _('This group chat persists ' 'even if there are no participants')), 'muc_temporary': ( 'feather-clock-symbolic', - Q_('?Group chat feature:Temporary'), + p_('Group chat feature', 'Temporary'), _('This group chat will be destroyed ' 'once the last participant left')), 'mam': ( 'feather-server-symbolic', - Q_('?Group chat feature:Archiving'), + p_('Group chat feature', 'Archiving'), _('Messages are archived on the server')), }
===================================== gajim/gtk/menus.py ===================================== @@ -39,7 +39,7 @@ from gajim.common.helpers import is_role_change_allowed from gajim.common.helpers import jid_is_blocked from gajim.common.i18n import _ -from gajim.common.i18n import Q_ +from gajim.common.i18n import p_ from gajim.common.i18n import get_short_lang_code from gajim.common.const import URIType from gajim.common.const import XmppUriQuery @@ -617,10 +617,12 @@ def get_chat_row_menu(contact: types.ChatContactT, timestamp_formatted = timestamp.strftime(time_format) copy_text = f'{timestamp_formatted} - {name}: {text}' menu_items.append( - (Q_('?Message row action:Copy'), 'win.copy-message', f'"{copy_text}"')) + (p_('Message row action', 'Copy'), + 'win.copy-message', + f'"{copy_text}"'))
menu_items.append( - (Q_('?Message row action:Select Messages…'), + (p_('Message row action', 'Select Messages…'), 'win.activate-message-selection', GLib.Variant('u', log_line_id or 0)))
@@ -634,7 +636,7 @@ def get_chat_row_menu(contact: types.ChatContactT, show_quote = False if show_quote: menu_items.append(( - Q_('?Message row action:Quote…'), + p_('Message row action', 'Quote…'), 'win.quote', f'"{text}"'))
@@ -644,7 +646,7 @@ def get_chat_row_menu(contact: types.ChatContactT, contact, message_id) if show_correction: menu_items.append(( - Q_('?Message row action:Correct…'), 'win.correct-message', None)) + p_('Message row action', 'Correct…'), 'win.correct-message', None))
show_retract = False if isinstance(contact, GroupchatContact) and contact.is_joined: @@ -665,7 +667,9 @@ def get_chat_row_menu(contact: types.ChatContactT, jid=contact.jid, stanza_id=stanza_id) menu_items.append(( - Q_('?Message row action:Retract…'), 'win.retract-message', param)) + p_('Message row action', 'Retract…'), + 'win.retract-message', + param))
menu = GajimMenu.from_list(menu_items) return menu
===================================== gajim/gtk/profile.py ===================================== @@ -36,7 +36,7 @@ from gajim.common import app from gajim.common.const import AvatarSize from gajim.common.i18n import _ -from gajim.common.i18n import Q_ +from gajim.common.i18n import p_
from gajim.gui.avatar import clip_circle from gajim.gui.avatar_selector import AvatarSelector @@ -49,19 +49,19 @@ log = logging.getLogger('gajim.gui.profile')
MENU_DICT = { - 'fn': Q_('?profile:Full Name'), + 'fn': p_('Profile', 'Full Name'), 'bday': _('Birthday'), - 'gender': Q_('?profile:Gender'), - 'adr': Q_('?profile:Address'), + 'gender': p_('Profile', 'Gender'), + 'adr': p_('Profile', 'Address'), 'email': _('Email'), - 'impp': Q_('?profile:IM Address'), + 'impp': p_('Profile', 'IM Address'), 'tel': _('Phone No.'), - 'org': Q_('?profile:Organisation'), - 'title': Q_('?profile:Title'), - 'role': Q_('?profile:Role'), + 'org': p_('Profile', 'Organisation'), + 'title': p_('Profile', 'Title'), + 'role': p_('Profile', 'Role'), 'url': _('URL'), - 'key': Q_('?profile:Public Encryption Key'), - 'note': Q_('?profile:Note'), + 'key': p_('Profile', 'Public Encryption Key'), + 'note': p_('Profile', 'Note'), }
===================================== gajim/gtk/settings.py ===================================== @@ -34,7 +34,7 @@ from gajim.common import app from gajim.common import passwords from gajim.common.i18n import _ -from gajim.common.i18n import Q_ +from gajim.common.i18n import p_ from gajim.common.setting_values import AllSettingsT
from .util import get_image_button @@ -450,7 +450,7 @@ def on_switch(self, switch: Gtk.Switch, *args: Any) -> None: self._set_label(value)
def _set_label(self, active: bool) -> None: - text = Q_('?switch:On') if active else Q_('?switch:Off') + text = p_('Switch', 'On') if active else p_('Switch', 'Off') self._switch_state_label.set_text(text)
@@ -871,7 +871,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: def get_setting_value(self) -> str: custom = app.settings.get_account_setting(self.account, 'use_custom_host') - return Q_('?switch:On') if custom else Q_('?switch:Off') + return p_('Switch', 'On') if custom else p_('Switch', 'Off')
class ChangePasswordSetting(DialogSetting): @@ -897,7 +897,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
def get_setting_value(self) -> str: value = app.settings.get('autoaway') - return Q_('?switch:On') if value else Q_('?switch:Off') + return p_('Switch', 'On') if value else p_('Switch', 'Off')
class CutstomAutoExtendedAwaySetting(DialogSetting): @@ -906,7 +906,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
def get_setting_value(self) -> str: value = app.settings.get('autoxa') - return Q_('?switch:On') if value else Q_('?switch:Off') + return p_('Switch', 'On') if value else p_('Switch', 'Off')
class CustomStunServerSetting(DialogSetting): @@ -915,7 +915,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
def get_setting_value(self) -> str: value = app.settings.get('use_stun_server') - return Q_('?switch:On') if value else Q_('?switch:Off') + return p_('Switch', 'On') if value else p_('Switch', 'Off')
class NotificationsSetting(DialogSetting): @@ -924,4 +924,4 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
def get_setting_value(self) -> str: value = app.settings.get('show_notifications') - return Q_('?switch:On') if value else Q_('?switch:Off') + return p_('Switch', 'On') if value else p_('Switch', 'Off')
===================================== gajim/gtk/ssl_error_dialog.py ===================================== @@ -91,7 +91,7 @@ def _on_connect_clicked(self, _button: Gtk.Button) -> None:
ignored_tls_errors = None if self._error == Gio.TlsCertificateFlags.EXPIRED: - ignored_tls_errors = set([Gio.TlsCertificateFlags.EXPIRED]) + ignored_tls_errors = {Gio.TlsCertificateFlags.EXPIRED}
self.destroy() self._client.connect(ignored_tls_errors=ignored_tls_errors)
===================================== gajim/gtk/tooltips.py ===================================== @@ -42,7 +42,7 @@ from gajim.common import types from gajim.common import helpers from gajim.common.const import AvatarSize -from gajim.common.i18n import Q_ +from gajim.common.i18n import p_ from gajim.common.i18n import _ from gajim.common.file_props import FileProp
@@ -316,26 +316,26 @@ def _create_tooltip(self, file_prop: FileProp, _sid: str) -> Gtk.Grid: assert file_prop.tt_account is not None client = app.get_client(file_prop.tt_account) if file_prop.type_ == 'r': - type_ = Q_('?Noun:Download') + type_ = p_('Noun', 'Download') actor = _('Sender: ') sender = JID.from_string(file_prop.sender) name = client.get_module('Contacts').get_contact(sender.bare).name else: - type_ = Q_('?Noun:Upload') + type_ = p_('Noun', 'Upload') actor = _('Recipient: ') receiver = JID.from_string(file_prop.receiver) name = client.get_module('Contacts').get_contact( receiver.bare).name - properties.append((Q_('?transfer type:Type: '), type_)) + properties.append((p_('File transfer type', 'Type: '), type_)) properties.append((actor, GLib.markup_escape_text(name)))
transferred_len = file_prop.received_len if not transferred_len: transferred_len = 0 - properties.append((Q_('?transfer status:Transferred: '), + properties.append((p_('File transfer state', 'Transferred: '), GLib.format_size_full(transferred_len, self.units))) status = self._get_current_status(file_prop) - properties.append((Q_('?transfer status:Status: '), status)) + properties.append((p_('File transfer state', 'Status: '), status)) file_desc = file_prop.desc or '' properties.append((_('Description: '), GLib.markup_escape_text(file_desc))) @@ -361,17 +361,17 @@ def _create_tooltip(self, file_prop: FileProp, _sid: str) -> Gtk.Grid: @staticmethod def _get_current_status(file_prop: FileProp) -> str: if file_prop.stopped: - return Q_('?transfer status:Aborted') + return p_('File transfer state', 'Aborted') if file_prop.completed: - return Q_('?transfer status:Completed') + return p_('File transfer state', 'Completed') if file_prop.paused: - return Q_('?transfer status:Paused') + return p_('File transfer state', 'Paused') if file_prop.stalled: # stalled is not paused. it is like 'frozen' it stopped alone - return Q_('?transfer status:Stalled') + return p_('File transfer state', 'Stalled')
if file_prop.connected: if file_prop.started: - return Q_('?transfer status:Transferring') - return Q_('?transfer status:Not started') - return Q_('?transfer status:Not started') + return p_('File transfer state', 'Transferring') + return p_('File transfer state', 'Not started') + return p_('File transfer state', 'Not started')
===================================== gajim/gtk/vcard_grid.py ===================================== @@ -25,7 +25,7 @@ from nbxmpp.modules.vcard4 import VCard
from gajim.common.i18n import _ -from gajim.common.i18n import Q_ +from gajim.common.i18n import p_ from gajim.common.const import URIType from gajim.common.helpers import open_uri from gajim.common.helpers import parse_uri @@ -40,16 +40,16 @@ 'n': _('Name'), 'bday': _('Birthday'), 'gender': _('Gender'), - 'adr': Q_('?profile:Address'), + 'adr': p_('Profile', 'Address'), 'tel': _('Phone No.'), 'email': _('Email'), - 'impp': _('IM Address'), - 'title': Q_('?profile:Title'), - 'role': Q_('?profile:Role'), - 'org': _('Organisation'), - 'note': Q_('?profile:Note'), + 'impp': p_('Profile', 'IM Address'), + 'title': p_('Profile', 'Title'), + 'role': p_('Profile', 'Role'), + 'org': p_('Profile', 'Organisation'), + 'note': p_('Profile', ':Note'), 'url': _('URL'), - 'key': Q_('?profile:Public Encryption Key'), + 'key': p_('Profile', 'Public Encryption Key'), }
@@ -118,8 +118,8 @@ SEX_VALUES = { 'M': _('Male'), 'F': _('Female'), - 'O': Q_('?Gender:Other'), - 'N': Q_('?Gender:None'), + 'O': p_('Gender', 'Other'), + 'N': p_('Gender', 'None'), 'U': _('Unknown') }
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/8db1df894f2b9dc119e0e8e13620dd8b...