jenkins-bot submitted this change.

View Change


Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
[i18n] Enable preleading Bot: prefix with twtranslate messages

- add new function get_bot_prefix() to get a Bot: prefix which depends
on config setting:
- modify twtranslate to prepend the bot prefix
- add 'bot_prefix_summary' to config.py
- add default pywikibot-bot-prefix token for fallback

Bug: T161459
Change-Id: I86da3e4baebb96054d604f13bcb8a4f48274ecce
---
M pywikibot/i18n.py
M pywikibot/config.py
M pywikibot/scripts/i18n/pywikibot/en.json
3 files changed, 81 insertions(+), 13 deletions(-)

diff --git a/pywikibot/config.py b/pywikibot/config.py
index 02ff93e..03628a6 100644
--- a/pywikibot/config.py
+++ b/pywikibot/config.py
@@ -241,6 +241,14 @@
# relevant summary for bot edits
default_edit_summary = 'Pywikibot ' + pwb_version

+# Edit summary prefix
+# if a str, always use this as summary prefix e.g. 'Bot:' for all sites
+# if True, always use a summary prefix from i18n
+# if False, never use a summary prefix
+# if None, the i18n summary prefix is used for botflag accounts only
+# NOTE: this feature is not yet implemented for all scripts
+bot_prefix_summary: Union[bool, str, None] = None
+
# What permissions to use to set private files to it
# such as password file.
#
diff --git a/pywikibot/i18n.py b/pywikibot/i18n.py
index a18fa8a..32383f1 100644
--- a/pywikibot/i18n.py
+++ b/pywikibot/i18n.py
@@ -15,7 +15,7 @@
See :py:obj:`twtranslate` for more information on the messages.
"""
#
-# (C) Pywikibot team, 2004-2022
+# (C) Pywikibot team, 2004-2023
#
# Distributed under the terms of the MIT license.
#
@@ -653,14 +653,51 @@
return trans


-def twtranslate(source: STR_OR_SITE_TYPE,
- twtitle: str,
- parameters: Union[Sequence[str], Mapping[str, int],
- None] = None,
- *,
- fallback: bool = True,
- fallback_prompt: Optional[str] = None,
- only_plural: bool = False) -> Optional[str]:
+def get_bot_prefix(source: STR_OR_SITE_TYPE, use_prefix: bool) -> str:
+ """Get the bot prefix string like 'Bot: ' including space delimiter.
+
+ .. note: If *source* is a str and ``config.bot_prefix`` is set to
+ None, it cannot be determined whether the current user is a bot
+ account. In this cas the prefix will be returned.
+ .. versionadded:: 8.1
+
+ :param source: When it's a site it's using the lang attribute and otherwise
+ it is using the value directly.
+ :param use_prefix: If True, return a bot prefix which depends on the
+ ``config.bot_prefix`` setting.
+ """
+ config_prefix = config.bot_prefix_summary
+ if not use_prefix or config_prefix is False:
+ return ''
+
+ if isinstance(config_prefix, str):
+ return config_prefix + ' '
+
+ try:
+ prefix = twtranslate(source, 'pywikibot-bot-prefix') + ' '
+ except pywikibot.exceptions.TranslationError:
+ # the 'pywikibot' package is available but the message key may
+ # be missing
+ prefix = 'Bot: '
+
+ if config_prefix is True \
+ or not hasattr(source, 'lang') \
+ or source.isBot(source.username()):
+ return prefix
+
+ return ''
+
+
+def twtranslate(
+ source: STR_OR_SITE_TYPE,
+ twtitle: str,
+ parameters: Union[Sequence[str], Mapping[str, int], None] = None,
+ *,
+ fallback: bool = True,
+ fallback_prompt: Optional[str] = None,
+ only_plural: bool = False,
+ bot_prefix: bool = False
+) -> Optional[str]:
r"""
Translate a message using JSON files in messages_package_name.

@@ -712,8 +749,11 @@
... ) % {'descr': 'seulement'})
'Robot: Changer seulement quelques pages.'

+ .. versionchanged:: 8.1
+ the *bot_prefix* parameter was added.
+
:param source: When it's a site it's using the lang attribute and otherwise
- it is using the value directly.
+ it is using the value directly. The site object is recommended.
:param twtitle: The TranslateWiki string title, in <package>-<key> format
:param parameters: For passing parameters. It should be a mapping but for
backwards compatibility can also be a list, tuple or a single value.
@@ -725,9 +765,13 @@
plural instances. If this is False it will apply the parameters also
to the resulting string. If this is True the placeholders must be
manually applied afterwards.
+ :param bot_prefix: If True, prepend the message with a bot prefix
+ which depends on the ``config.bot_prefix`` setting
:raise IndexError: If the language supports and requires more plurals than
defined for the given translation template.
"""
+ prefix = get_bot_prefix(source, use_prefix=bot_prefix)
+
if not messages_available():
if fallback_prompt:
if parameters and not only_plural:
@@ -741,7 +785,6 @@
.format(_messages_package_name, twtitle, __url__))

# if source is a site then use its lang attribute, otherwise it's a str
-
lang = getattr(source, 'lang', source)

# There are two possible failure modes: the translation dict might not have
@@ -774,8 +817,8 @@
.format(type(parameters).__name__))

if not only_plural and parameters:
- return trans % parameters
- return trans
+ trans = trans % parameters
+ return prefix + trans


def twhas_key(source: STR_OR_SITE_TYPE, twtitle: str) -> bool:
diff --git a/pywikibot/scripts/i18n/pywikibot/en.json b/pywikibot/scripts/i18n/pywikibot/en.json
index d731bfe..ece08e2 100644
--- a/pywikibot/scripts/i18n/pywikibot/en.json
+++ b/pywikibot/scripts/i18n/pywikibot/en.json
@@ -9,6 +9,7 @@
"Xqt"
]
},
+ "pywikibot-bot-prefix": "Bot:",
"pywikibot-cosmetic-changes": "; cosmetic changes",
"pywikibot-enter-category-name": "Please enter the category name:",
"pywikibot-enter-file-links-processing": "Links to which file page should be processed?",

To view, visit change 904878. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I86da3e4baebb96054d604f13bcb8a4f48274ecce
Gerrit-Change-Number: 904878
Gerrit-PatchSet: 4
Gerrit-Owner: Xqt <info@gno.de>
Gerrit-Reviewer: Dvorapa <dvorapa@seznam.cz>
Gerrit-Reviewer: Framawiki <framawiki@tools.wmflabs.org>
Gerrit-Reviewer: MarcoAurelio <maurelio@toolforge.org>
Gerrit-Reviewer: Xqt <info@gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged