From a5d0c709c65ede96481939034b3e102ef1930e07 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 19 Apr 2021 01:21:38 +0200 Subject: [PATCH 001/173] Updated license notices, some whitespace changes --- src/configloader.py | 15 +++++++++++++++ src/discord/message.py | 15 +++++++++++++++ src/discord/queue.py | 15 +++++++++++++++ src/discord/redaction.py | 15 +++++++++++++++ src/discussion_formatters.py | 15 +++++++++++++++ src/discussions.py | 9 ++++----- src/exceptions.py | 15 +++++++++++++++ src/fileio/database.py | 15 +++++++++++++++ src/i18n.py | 15 +++++++++++++++ src/misc.py | 9 ++++----- src/rc.py | 17 +++++++++++++++++ src/rc_formatters.py | 17 +++++++++++++++++ src/rcgcdw.py | 17 ++++++++--------- src/session.py | 9 ++++----- 14 files changed, 174 insertions(+), 24 deletions(-) diff --git a/src/configloader.py b/src/configloader.py index 5bd7467..3b09549 100644 --- a/src/configloader.py +++ b/src/configloader.py @@ -1,3 +1,18 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). + +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + import json import logging import sys diff --git a/src/discord/message.py b/src/discord/message.py index dac9cae..8ac1f72 100644 --- a/src/discord/message.py +++ b/src/discord/message.py @@ -1,3 +1,18 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). + +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + import json import math import random diff --git a/src/discord/queue.py b/src/discord/queue.py index 07f28af..9777287 100644 --- a/src/discord/queue.py +++ b/src/discord/queue.py @@ -1,3 +1,18 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). + +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + import re import sys import time diff --git a/src/discord/redaction.py b/src/discord/redaction.py index ffe2f69..6fa86ba 100644 --- a/src/discord/redaction.py +++ b/src/discord/redaction.py @@ -1,3 +1,18 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). + +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + import logging import json from src.configloader import settings diff --git a/src/discussion_formatters.py b/src/discussion_formatters.py index 6b8b624..ac015a0 100644 --- a/src/discussion_formatters.py +++ b/src/discussion_formatters.py @@ -1,3 +1,18 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). + +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + import datetime, logging import json import gettext diff --git a/src/discussions.py b/src/discussions.py index 5793502..25e3036 100644 --- a/src/discussions.py +++ b/src/discussions.py @@ -1,20 +1,19 @@ # -*- coding: utf-8 -*- -# Recent changes Goat compatible Discord webhook is a project for using a webhook as recent changes page from MediaWiki. -# Copyright (C) 2020 Frisk +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). -# This program is free software: you can redistribute it and/or modify +# RcGcDw is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# This program is distributed in the hope that it will be useful, +# RcGcDw is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with RcGcDw. If not, see . import logging, schedule, requests from typing import Dict, Any diff --git a/src/exceptions.py b/src/exceptions.py index 620f134..8b25c64 100644 --- a/src/exceptions.py +++ b/src/exceptions.py @@ -1,3 +1,18 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). + +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + class MWError(Exception): pass diff --git a/src/fileio/database.py b/src/fileio/database.py index b924902..ea78fba 100644 --- a/src/fileio/database.py +++ b/src/fileio/database.py @@ -1,3 +1,18 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). + +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + import sqlite3 import logging import json diff --git a/src/i18n.py b/src/i18n.py index 1f43c4c..116a754 100644 --- a/src/i18n.py +++ b/src/i18n.py @@ -1,3 +1,18 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). + +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + import gettext, sys, logging from src.configloader import settings logger = logging.getLogger("rcgcdw.i18n") diff --git a/src/misc.py b/src/misc.py index f241806..f0d90bb 100644 --- a/src/misc.py +++ b/src/misc.py @@ -1,20 +1,19 @@ # -*- coding: utf-8 -*- -# Recent changes Goat compatible Discord webhook is a project for using a webhook as recent changes page from MediaWiki. -# Copyright (C) 2018 Frisk +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). -# This program is free software: you can redistribute it and/or modify +# RcGcDw is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# This program is distributed in the hope that it will be useful, +# RcGcDw is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with RcGcDw. If not, see . import base64 import json, logging, sys, re from html.parser import HTMLParser diff --git a/src/rc.py b/src/rc.py index 2accac9..7779269 100644 --- a/src/rc.py +++ b/src/rc.py @@ -1,3 +1,20 @@ +# -*- coding: utf-8 -*- + +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). + +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + import re import sys import time diff --git a/src/rc_formatters.py b/src/rc_formatters.py index 662e61b..610e24b 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -1,3 +1,20 @@ +# -*- coding: utf-8 -*- + +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). + +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + import ipaddress import math import re diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 2bd33e5..9f988e8 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -1,21 +1,20 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -# Recent changes Goat compatible Discord webhook is a project for using a webhook as recent changes page from MediaWiki. -# Copyright (C) 2018 Frisk +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). -# This program is free software: you can redistribute it and/or modify +# RcGcDw is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# This program is distributed in the hope that it will be useful, +# RcGcDw is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with RcGcDw. If not, see . # WARNING! SHITTY CODE AHEAD. ENTER ONLY IF YOU ARE SURE YOU CAN TAKE IT # You have been warned @@ -82,7 +81,7 @@ def day_overview_request(): recent_changes.downtime_controller(True) complete = 2 except KeyError: - logger.warning("Wiki returned %s" % (request)) + logger.warning("Wiki returned %s" % request) complete = 2 except MWError: complete = 2 @@ -131,6 +130,7 @@ def daily_overview_sync(edits, files, admin, changed_bytes, new_articles, unique datafile.save_datafile() return edits, files, admin, changed_bytes, new_articles, unique_contributors, day_score + def day_overview(): result = day_overview_request() if result[1] == 1: @@ -207,7 +207,6 @@ def day_overview(): logger.debug("function requesting changes for day overview returned with error code") - # Log in and download wiki information try: if settings["wiki_bot_login"] and settings["wiki_bot_password"]: @@ -239,7 +238,7 @@ if settings["rc_enabled"]: else: logger.info("Script started! RC is disabled however, this means no recent changes will be sent :c") -if 1 == 2: # additional translation strings in unreachable code +if 1 == 2: # additional translation strings in unreachable code print(_("director"), _("bot"), _("editor"), _("directors"), _("sysop"), _("bureaucrat"), _("reviewer"), _("autoreview"), _("autopatrol"), _("wiki_guardian"), ngettext("second", "seconds", 1), ngettext("minute", "minutes", 1), ngettext("hour", "hours", 1), ngettext("day", "days", 1), ngettext("week", "weeks", 1), ngettext("month", "months",1), ngettext("year", "years", 1), ngettext("millennium", "millennia", 1), ngettext("decade", "decades", 1), ngettext("century", "centuries", 1)) # noinspection PyUnreachableCode @@ -254,6 +253,6 @@ if TESTING: src.discussions.fetch_discussions() sys.exit(0) -while 1: +while 1: time.sleep(1.0) schedule.run_pending() diff --git a/src/session.py b/src/session.py index d5cd81d..3db940a 100644 --- a/src/session.py +++ b/src/session.py @@ -1,20 +1,19 @@ # -*- coding: utf-8 -*- -# Recent changes Goat compatible Discord webhook is a project for using a webhook as recent changes page from MediaWiki. -# Copyright (C) 2020 Frisk +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). -# This program is free software: you can redistribute it and/or modify +# RcGcDw is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# This program is distributed in the hope that it will be useful, +# RcGcDw is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with RcGcDw. If not, see . import requests from src.configloader import settings From 8f7f638d78ad85883073991e52a1c36a18a851f1 Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 20 Apr 2021 16:52:21 +0200 Subject: [PATCH 002/173] Initial draft idea of API --- docs/API spec.md | 73 +++++++++++++++++++++++++++++++++++++ extensions/__init__.py | 15 ++++++++ extensions/base/__init__.py | 15 ++++++++ extensions/base/base.py | 36 ++++++++++++++++++ src/api/__init__.py | 1 + src/api/client.py | 25 +++++++++++++ src/api/formatter.py | 69 +++++++++++++++++++++++++++++++++++ src/api/hook.py | 15 ++++++++ src/exceptions.py | 8 ++++ src/rcgcdw.py | 2 + 10 files changed, 259 insertions(+) create mode 100644 docs/API spec.md create mode 100644 extensions/__init__.py create mode 100644 extensions/base/__init__.py create mode 100644 extensions/base/base.py create mode 100644 src/api/__init__.py create mode 100644 src/api/client.py create mode 100644 src/api/formatter.py create mode 100644 src/api/hook.py diff --git a/docs/API spec.md b/docs/API spec.md new file mode 100644 index 0000000..460cf45 --- /dev/null +++ b/docs/API spec.md @@ -0,0 +1,73 @@ +## About +This is a specification for RcGcDw API extending formatters and allowing to add additional pre and post processing hooks for message contents. + +### Pre-processing hook +A class allowing to change the message content and/or execute additional actions each time given event gets read. This type of hook executes before a formatter. + +### Formatters +Formatters allow to specify how does a Discord message look like depending on message mode (embed, compact) and type of the event that had happened on the wiki (new, edit etc). + +### Post-processing hook +A class allowing to change the message content and/or execute additional actions after message has been processed by the formatter. This type of hook executes after a formatter. + +## File structure +Directory with extensions should be possible to be changed using settings.json +/ + /src + /extensions + /extensions/base + /extensions/abusefilter + /extensions/abusefilter/abusefilter.py + /extensions/managewiki + /extensions/managewiki/managewiki.py + /extensions/prehooks/ + /extensions/prehooks/friskyhooks.py + /extensions/posthooks/ + +## API +api object exposes various data which allows to extend the usefulness of what can be then sent to Discord. + + + +## Example formatter +```python + +import logging +from src.discord.message import DiscordMessage +from src.api import formatter +from src.i18n import rc_formatters + +_ = rc_formatters.gettext + +logger = logging.getLogger("extensions.abusefilter") + +class abusefilter(Formatter): + def __init__(self, api): + super().__init__(api) + + @formatter.embed(event="abuselog/modify", mode="embed") + def embed_modify(self, change: dict) -> DiscordMessage: + return DiscordMessage + + @formatter.compact(event="abuselog/modify") + def compact_modify(self, change: dict) -> DiscordMessage: + return DiscordMessage + +``` + +## Example hook +```python + +logger = logging.getLogger("extensions.abusefilter") + +class test1(Hook): + def __init__(self, api): + self.api = api + + def embed_modify(self, base_msg: DiscordMessage, change: dict) -> DiscordMessage: + return DiscordMessage + + def compact_modify(self, base_msg: DiscordMessage, change: dict) -> DiscordMessage: + return DiscordMessage + +``` \ No newline at end of file diff --git a/extensions/__init__.py b/extensions/__init__.py new file mode 100644 index 0000000..e4d9ae0 --- /dev/null +++ b/extensions/__init__.py @@ -0,0 +1,15 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + diff --git a/extensions/base/__init__.py b/extensions/base/__init__.py new file mode 100644 index 0000000..e4d9ae0 --- /dev/null +++ b/extensions/base/__init__.py @@ -0,0 +1,15 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + diff --git a/extensions/base/base.py b/extensions/base/base.py new file mode 100644 index 0000000..5480b41 --- /dev/null +++ b/extensions/base/base.py @@ -0,0 +1,36 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +import logging +from src.discord.message import DiscordMessage +from src.api import formatter +from src.i18n import rc_formatters + +_ = rc_formatters.gettext + +logger = logging.getLogger("extensions.base") + + +class abusefilter(): + def __init__(self, api): + super().__init__(api) + + @formatter.embed(event="edit", mode="embed") + def embed_edit(self, change: dict) -> DiscordMessage: + return DiscordMessage() + + @formatter.compact(event="edit", mode="embed") + def compact_edit(self, change: dict): + return DiscordMessage() \ No newline at end of file diff --git a/src/api/__init__.py b/src/api/__init__.py new file mode 100644 index 0000000..f5fdfd8 --- /dev/null +++ b/src/api/__init__.py @@ -0,0 +1 @@ +from .formatter import * \ No newline at end of file diff --git a/src/api/client.py b/src/api/client.py new file mode 100644 index 0000000..6738e1c --- /dev/null +++ b/src/api/client.py @@ -0,0 +1,25 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +from src.rcgcdw import formatter_hooks + +class Client: + def __init__(self): + self._formatters = formatter_hooks + self. + + + +client = Client() \ No newline at end of file diff --git a/src/api/formatter.py b/src/api/formatter.py new file mode 100644 index 0000000..84a8033 --- /dev/null +++ b/src/api/formatter.py @@ -0,0 +1,69 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). + +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +from src.rcgcdw import formatter_hooks +from src.configloader import settings +from src.exceptions import FormatterBreaksAPISpec +from src.discord.message import DiscordMessage +from typing import Optional, Callable + + +def _register_formatter(func: Callable[[dict], DiscordMessage], kwargs: dict[str, str], formatter_type: str, + action_type: Optional[str]=None): + """ + Registers a formatter inside of src.rcgcdw.formatter_hooks + """ + try: + _, action = func.__name__.split("_", 1) + etype = func.__module__ + action_type = f"{etype}/{action}" + except ValueError: + raise + action_type = kwargs.get("event", action_type) + if action_type is None: + raise FormatterBreaksAPISpec("event type") + if settings["appearance"]["mode"] == formatter_type: + formatter_hooks[action_type] = func + + +def embed(**kwargs): + """ + Decorator to register a formatter are return a function + + :param kwargs: + :return: + """ + + def decorator_cont(func: Callable[[dict], DiscordMessage]): + _register_formatter(func, kwargs, "embed") + return func + + return decorator_cont + + +def compact(func: Callable[[dict], DiscordMessage], **kwargs): + """ + Decorator to register a formatter are return a function + + :param func: + :param kwargs: + :return: + """ + + def decorator_cont(func: Callable[[dict], DiscordMessage]): + _register_formatter(func, kwargs, "compact") + return func + + return decorator_cont \ No newline at end of file diff --git a/src/api/hook.py b/src/api/hook.py new file mode 100644 index 0000000..e4d9ae0 --- /dev/null +++ b/src/api/hook.py @@ -0,0 +1,15 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + diff --git a/src/exceptions.py b/src/exceptions.py index 8b25c64..2d84775 100644 --- a/src/exceptions.py +++ b/src/exceptions.py @@ -13,8 +13,16 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . + class MWError(Exception): pass + class ArticleCommentError(Exception): pass + + +class FormatterBreaksAPISpec(Exception): + def __init__(self, field): + self.message = f"Formatter doesn't specify {field}!" + super().__init__(self.message) \ No newline at end of file diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 9f988e8..45b4b7c 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -57,6 +57,8 @@ if settings["limitrefetch"] != -1 and os.path.exists("lastchange.txt") is True: datafile.save_datafile() os.remove("lastchange.txt") +formatter_hooks = {} + def day_overview_request(): logger.info("Fetching daily overview... This may take up to 30 seconds!") From 4706ca84b45ebd0fe6b1b7f404c9025e113d5d70 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 24 Apr 2021 11:19:38 +0200 Subject: [PATCH 003/173] Further work towards an API --- docs/API spec.md | 26 +++++----- extensions/__init__.py | 1 + extensions/base/__init__.py | 1 + extensions/base/base.py | 36 -------------- extensions/base/mediawiki.py | 95 ++++++++++++++++++++++++++++++++++++ src/api/__init__.py | 2 +- src/api/client.py | 23 +++++++-- src/fileio/database.py | 3 ++ src/misc.py | 7 +++ src/rc.py | 15 +----- src/rc_formatters.py | 53 +------------------- src/rcgcdw.py | 5 ++ start.py | 2 +- 13 files changed, 150 insertions(+), 119 deletions(-) delete mode 100644 extensions/base/base.py create mode 100644 extensions/base/mediawiki.py diff --git a/docs/API spec.md b/docs/API spec.md index 460cf45..0c7367b 100644 --- a/docs/API spec.md +++ b/docs/API spec.md @@ -12,17 +12,17 @@ A class allowing to change the message content and/or execute additional actions ## File structure Directory with extensions should be possible to be changed using settings.json -/ - /src - /extensions - /extensions/base - /extensions/abusefilter - /extensions/abusefilter/abusefilter.py - /extensions/managewiki - /extensions/managewiki/managewiki.py - /extensions/prehooks/ - /extensions/prehooks/friskyhooks.py - /extensions/posthooks/ +/ + /src + /extensions + /extensions/base + /extensions/abusefilter + /extensions/abusefilter/abusefilter.py + /extensions/managewiki + /extensions/managewiki/managewiki.py + /extensions/prehooks/ + /extensions/prehooks/friskyhooks.py + /extensions/posthooks/ ## API api object exposes various data which allows to extend the usefulness of what can be then sent to Discord. @@ -46,11 +46,11 @@ class abusefilter(Formatter): super().__init__(api) @formatter.embed(event="abuselog/modify", mode="embed") - def embed_modify(self, change: dict) -> DiscordMessage: + def embed_modify(self, change: dict) -> DiscordMessage: return DiscordMessage @formatter.compact(event="abuselog/modify") - def compact_modify(self, change: dict) -> DiscordMessage: + def compact_modify(self, change: dict) -> DiscordMessage: return DiscordMessage ``` diff --git a/extensions/__init__.py b/extensions/__init__.py index e4d9ae0..0c08726 100644 --- a/extensions/__init__.py +++ b/extensions/__init__.py @@ -13,3 +13,4 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . +import base diff --git a/extensions/base/__init__.py b/extensions/base/__init__.py index e4d9ae0..ee271dd 100644 --- a/extensions/base/__init__.py +++ b/extensions/base/__init__.py @@ -13,3 +13,4 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . +import mediawiki diff --git a/extensions/base/base.py b/extensions/base/base.py deleted file mode 100644 index 5480b41..0000000 --- a/extensions/base/base.py +++ /dev/null @@ -1,36 +0,0 @@ -# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). -# -# RcGcDw is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# RcGcDw is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with RcGcDw. If not, see . - -import logging -from src.discord.message import DiscordMessage -from src.api import formatter -from src.i18n import rc_formatters - -_ = rc_formatters.gettext - -logger = logging.getLogger("extensions.base") - - -class abusefilter(): - def __init__(self, api): - super().__init__(api) - - @formatter.embed(event="edit", mode="embed") - def embed_edit(self, change: dict) -> DiscordMessage: - return DiscordMessage() - - @formatter.compact(event="edit", mode="embed") - def compact_edit(self, change: dict): - return DiscordMessage() \ No newline at end of file diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py new file mode 100644 index 0000000..eba45f2 --- /dev/null +++ b/extensions/base/mediawiki.py @@ -0,0 +1,95 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +import logging +import math +from src.discord.message import DiscordMessage +from src.api import formatter +from src.i18n import rc_formatters +from src.api.client import Client, client +from src.configloader import settings + + +_ = rc_formatters.gettext + +logger = logging.getLogger("extensions.base") + + +class base(): + def __init__(self, api): + super().__init__(api) + + @formatter.embed(event="edit", mode="embed") + def embed_edit(self, ctx: Client, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + action = ctx.event + editsize = change["newlen"] - change["oldlen"] + if editsize > 0: + if editsize > 6032: + embed["color"] = 65280 + else: + embed["color"] = 35840 + (math.floor(editsize / 52)) * 256 + elif editsize < 0: + if editsize < -6032: + embed["color"] = 16711680 + else: + embed["color"] = 9175040 + (math.floor((editsize * -1) / 52)) * 65536 + elif editsize == 0: + embed["color"] = 8750469 + if change["title"].startswith("MediaWiki:Tag-"): # Refresh tag list when tag display name is edited + ctx.client.refresh_internal_data() + link = "{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( + wiki=ctx.client.WIKI_SCRIPT_PATH, pageid=change["pageid"], diff=change["revid"], oldrev=change["old_revid"], + article=change["title"].replace(" ", "_").replace("%", "%25").replace("\\", "%5C").replace("&", "%26")) + embed["title"] = "{redirect}{article} ({new}{minor}{bot}{space}{editsize})".format( + redirect="⤷ " if "redirect" in change else "", article=change["title"], editsize="+" + str( + editsize) if editsize > 0 else editsize, new=_("(N!) ") if action == "new" else "", + minor=_("m") if action == "edit" and "minor" in change else "", bot=_('b') if "bot" in change else "", + space=" " if "bot" in change or (action == "edit" and "minor" in change) or action == "new" else "") + if settings["appearance"]["embed"]["show_edit_changes"]: + if action == "new": + changed_content = safe_read(recent_changes.safe_request( + "{wiki}?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format( + wiki=ctx.client.WIKI_API_PATH, diff=change["revid"] + )), "compare", "*") + else: + changed_content = safe_read(recent_changes.safe_request( + "{wiki}?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( + wiki=ctx.client.WIKI_API_PATH, diff=change["revid"], oldrev=change["old_revid"] + )), "compare", "*") + if changed_content: + EditDiff = ctx.client.content_parser() + EditDiff.feed(changed_content) + if EditDiff.small_prev_del: + if EditDiff.small_prev_del.replace("~~", "").isspace(): + EditDiff.small_prev_del = _('__Only whitespace__') + else: + EditDiff.small_prev_del = EditDiff.small_prev_del.replace("~~~~", "") + if EditDiff.small_prev_ins: + if EditDiff.small_prev_ins.replace("**", "").isspace(): + EditDiff.small_prev_ins = _('__Only whitespace__') + else: + EditDiff.small_prev_ins = EditDiff.small_prev_ins.replace("****", "") + logger.debug("Changed content: {}".format(EditDiff.small_prev_ins)) + if EditDiff.small_prev_del and not action == "new": + embed.add_field(_("Removed"), "{data}".format(data=EditDiff.small_prev_del), inline=True) + if EditDiff.small_prev_ins: + embed.add_field(_("Added"), "{data}".format(data=EditDiff.small_prev_ins), inline=True) + else: + logger.warning("Unable to download data on the edit content!") + + @formatter.compact(event="edit", mode="embed") + def compact_edit(self, change: dict): + return DiscordMessage() diff --git a/src/api/__init__.py b/src/api/__init__.py index f5fdfd8..360afcf 100644 --- a/src/api/__init__.py +++ b/src/api/__init__.py @@ -1 +1 @@ -from .formatter import * \ No newline at end of file +from .formatter import * diff --git a/src/api/client.py b/src/api/client.py index 6738e1c..7028154 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -13,12 +13,29 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . -from src.rcgcdw import formatter_hooks +import src.rcgcdw +import src.rc +import src.misc + class Client: + """ + A client for interacting with RcGcDw when creating formatters or hooks. + """ def __init__(self): - self._formatters = formatter_hooks - self. + self._formatters = src.rcgcdw.formatter_hooks + self.__recent_changes = src.rc.recent_changes + self.WIKI_API_PATH = src.misc.WIKI_API_PATH + self.WIKI_ARTICLE_PATH = src.misc.WIKI_ARTICLE_PATH + self.WIKI_SCRIPT_PATH = src.misc.WIKI_SCRIPT_PATH + self.WIKI_JUST_DOMAIN = src.misc.WIKI_JUST_DOMAIN + self.content_parser = src.misc.ContentParser + + def refresh_internal_data(self): + """Refreshes internal storage data for wiki tags and MediaWiki messages.""" + self.__recent_changes.init_info() + + diff --git a/src/fileio/database.py b/src/fileio/database.py index ea78fba..b4fd946 100644 --- a/src/fileio/database.py +++ b/src/fileio/database.py @@ -22,6 +22,7 @@ logger = logging.getLogger("rcgcdw.fileio.database") def create_schema(): + """Creates a SQLite database schema""" logger.info("Creating database schema...") db_cursor.executescript( """BEGIN TRANSACTION; @@ -43,6 +44,7 @@ def create_schema(): def create_connection() -> (sqlite3.Connection, sqlite3.Cursor): + """Creates a connection to the database""" _db_connection = sqlite3.connect(settings['auto_suppression'].get("db_location", ':memory:')) _db_connection.row_factory = sqlite3.Row _db_cursor = _db_connection.cursor() @@ -67,6 +69,7 @@ def add_entry(pageid: int, revid: int, logid: int, message, message_id: str): logger.debug("Adding an entry to the database (pageid: {}, revid: {}, logid: {}, message: {})".format(pageid, revid, logid, message)) db_connection.commit() + def clean_entries(): """Cleans entries that are 50+""" cleanup = db_cursor.execute( diff --git a/src/misc.py b/src/misc.py index f0d90bb..1c6581c 100644 --- a/src/misc.py +++ b/src/misc.py @@ -115,6 +115,13 @@ def escape_formatting(data): class ContentParser(HTMLParser): + """ContentPerser is an implementation of HTMLParser that parses output of action=compare&prop=diff API request + for two MediaWiki revisions. It extracts the following: + small_prev_ins - storing up to 1000 characters of added text + small_prev_del - storing up to 1000 chracters of removed text + ins_length - storing length of inserted text + del_length - storing length of deleted text + """ more = _("\n__And more__") current_tag = "" last_ins = None diff --git a/src/rc.py b/src/rc.py index 7779269..0910b65 100644 --- a/src/rc.py +++ b/src/rc.py @@ -27,7 +27,7 @@ from src.misc import WIKI_SCRIPT_PATH, WIKI_API_PATH, datafile, send_simple, saf from src.discord.queue import messagequeue from src.exceptions import MWError from src.session import session -from src.rc_formatters import compact_formatter, embed_formatter, compact_abuselog_formatter, embed_abuselog_formatter +# from src.rc_formatters import compact_formatter, embed_formatter, compact_abuselog_formatter, embed_abuselog_formatter from src.i18n import rc from collections import OrderedDict @@ -52,17 +52,6 @@ supported_logs = {"protect/protect", "protect/modify", "protect/unprotect", "upl "managewiki/settings", "managewiki/delete", "managewiki/lock", "managewiki/unlock", "managewiki/namespaces", "managewiki/namespaces-delete", "managewiki/rights", "managewiki/undelete"} -# Set the proper formatter -if settings["appearance"]["mode"] == "embed": - appearance_mode = embed_formatter - abuselog_appearance_mode = embed_abuselog_formatter -elif settings["appearance"]["mode"] == "compact": - appearance_mode = compact_formatter - abuselog_appearance_mode = compact_abuselog_formatter -else: - logger.critical("Unknown formatter!") - sys.exit(1) - LinkParser = LinkParser() @@ -298,7 +287,7 @@ class Recent_Changes_Class(object): self.downtime_controller(True) return None elif request.status_code == 302: - logger.critical("Redirect detected! Either the wiki given in the script settings (wiki field) is incorrect/the wiki got removed or Gamepedia is giving us the false value. Please provide the real URL to the wiki, current URL redirects to {}".format(request.next.url)) + logger.critical("Redirect detected! Either the wiki given in the script settings (wiki field) is incorrect/the wiki got removed or is giving us the false value. Please provide the real URL to the wiki, current URL redirects to {}".format(request.next.url)) sys.exit(0) return request diff --git a/src/rc_formatters.py b/src/rc_formatters.py index 610e24b..a46d099 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -712,58 +712,7 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): change["user"], author_url = format_user(change, recent_changes, action) embed.set_author(change["user"], author_url) if action in ("edit", "new"): # edit or new page - editsize = change["newlen"] - change["oldlen"] - if editsize > 0: - if editsize > 6032: - embed["color"] = 65280 - else: - embed["color"] = 35840 + (math.floor(editsize / 52)) * 256 - elif editsize < 0: - if editsize < -6032: - embed["color"] = 16711680 - else: - embed["color"] = 9175040 + (math.floor((editsize * -1) / 52)) * 65536 - elif editsize == 0: - embed["color"] = 8750469 - if change["title"].startswith("MediaWiki:Tag-"): # Refresh tag list when tag display name is edited - recent_changes.init_info() - link = "{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( - wiki=WIKI_SCRIPT_PATH, pageid=change["pageid"], diff=change["revid"], oldrev=change["old_revid"], - article=change["title"].replace(" ", "_").replace("%", "%25").replace("\\", "%5C").replace("&", "%26")) - embed["title"] = "{redirect}{article} ({new}{minor}{bot}{space}{editsize})".format(redirect="⤷ " if "redirect" in change else "", article=change["title"], editsize="+" + str( - editsize) if editsize > 0 else editsize, new=_("(N!) ") if action == "new" else "", - minor=_("m") if action == "edit" and "minor" in change else "", bot=_('b') if "bot" in change else "", space=" " if "bot" in change or (action == "edit" and "minor" in change) or action == "new" else "") - if settings["appearance"]["embed"]["show_edit_changes"]: - if action == "new": - changed_content = safe_read(recent_changes.safe_request( - "{wiki}?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format( - wiki=WIKI_API_PATH, diff=change["revid"] - )), "compare", "*") - else: - changed_content = safe_read(recent_changes.safe_request( - "{wiki}?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( - wiki=WIKI_API_PATH, diff=change["revid"],oldrev=change["old_revid"] - )), "compare", "*") - if changed_content: - EditDiff = ContentParser() - EditDiff.feed(changed_content) - if EditDiff.small_prev_del: - if EditDiff.small_prev_del.replace("~~", "").isspace(): - EditDiff.small_prev_del = _('__Only whitespace__') - else: - EditDiff.small_prev_del = EditDiff.small_prev_del.replace("~~~~", "") - if EditDiff.small_prev_ins: - if EditDiff.small_prev_ins.replace("**", "").isspace(): - EditDiff.small_prev_ins = _('__Only whitespace__') - else: - EditDiff.small_prev_ins = EditDiff.small_prev_ins.replace("****", "") - logger.debug("Changed content: {}".format(EditDiff.small_prev_ins)) - if EditDiff.small_prev_del and not action == "new": - embed.add_field(_("Removed"), "{data}".format(data=EditDiff.small_prev_del), inline=True) - if EditDiff.small_prev_ins: - embed.add_field(_("Added"), "{data}".format(data=EditDiff.small_prev_ins), inline=True) - else: - logger.warning("Unable to download data on the edit content!") + elif action in ("upload/overwrite", "upload/upload", "upload/revert"): # sending files license = None urls = safe_read(recent_changes.safe_request( diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 45b4b7c..a2effc0 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -46,6 +46,11 @@ logging.config.dictConfig(settings["logging"]) logger = logging.getLogger("rcgcdw") logger.debug("Current settings: {settings}".format(settings=settings)) from src.migrations import * # migrations after logging +try: + import exceptions +except ImportError: + logger.critical("No extensions module found. What's going on?") + sys.exit(1) storage = datafile # Remove previous data holding file if exists and limitfetch allows diff --git a/start.py b/start.py index aee6d48..f783e5f 100644 --- a/start.py +++ b/start.py @@ -1,4 +1,4 @@ import src.rcgcdw, sys if __name__ != "__main__": # return if called as a module - sys.exit(1) \ No newline at end of file + sys.exit(1) From 3a23b5c0039141baf820f1d1acdc10233e2fe5af Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 24 Apr 2021 14:32:23 +0200 Subject: [PATCH 004/173] Reworked default request function to new fancy one --- extensions/base/mediawiki.py | 4 +- src/api/client.py | 33 +++++++-- src/exceptions.py | 30 +++++++- src/misc.py | 15 ++++ src/rc.py | 131 +++++++++++++++++++++++++---------- src/rc_formatters.py | 6 +- src/rcgcdw.py | 24 +++---- 7 files changed, 184 insertions(+), 59 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index eba45f2..657ea47 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -60,12 +60,12 @@ class base(): space=" " if "bot" in change or (action == "edit" and "minor" in change) or action == "new" else "") if settings["appearance"]["embed"]["show_edit_changes"]: if action == "new": - changed_content = safe_read(recent_changes.safe_request( + changed_content = safe_read(recent_changes._safe_request( "{wiki}?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format( wiki=ctx.client.WIKI_API_PATH, diff=change["revid"] )), "compare", "*") else: - changed_content = safe_read(recent_changes.safe_request( + changed_content = safe_read(recent_changes._safe_request( "{wiki}?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( wiki=ctx.client.WIKI_API_PATH, diff=change["revid"], oldrev=change["old_revid"] )), "compare", "*") diff --git a/src/api/client.py b/src/api/client.py index 7028154..8e9d0f1 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -16,7 +16,8 @@ import src.rcgcdw import src.rc import src.misc - +from typing import Union +from collections import OrderedDict class Client: """ @@ -24,19 +25,41 @@ class Client: """ def __init__(self): self._formatters = src.rcgcdw.formatter_hooks - self.__recent_changes = src.rc.recent_changes + self.__recent_changes = src.rc.wiki self.WIKI_API_PATH = src.misc.WIKI_API_PATH self.WIKI_ARTICLE_PATH = src.misc.WIKI_ARTICLE_PATH self.WIKI_SCRIPT_PATH = src.misc.WIKI_SCRIPT_PATH self.WIKI_JUST_DOMAIN = src.misc.WIKI_JUST_DOMAIN self.content_parser = src.misc.ContentParser + #self.make_api_request: src.rc.wiki.__recent_changes.api_request = self.__recent_changes.api_request def refresh_internal_data(self): """Refreshes internal storage data for wiki tags and MediaWiki messages.""" self.__recent_changes.init_info() + def make_api_request(self, params: Union[str, OrderedDict], *json_path: list[str], timeout: int=10, allow_redirects: bool=False): + """Method to GET request data from the wiki's API with error handling including recognition of MediaWiki errors. + + Parameters: + + params (str, OrderedDict): a string or collections.OrderedDict object containing query parameters + json_path (str): *args taking strings as values. After request is parsed as json it will extract data from given json path + timeout (int, float) (default=10): int or float limiting time required for receiving a full response from a server before returning TimeoutError + allow_redirects (bool) (default=False): switches whether the request should follow redirects or not + + Returns: + + request_content (dict): a dict resulting from json extraction of HTTP GET request with given json_path + OR + One of the following exceptions: + ServerError: When connection with the wiki failed due to server error + ClientError: When connection with the wiki failed due to client error + KeyError: When json_path contained keys that weren't found in response JSON response + BadRequest: When params argument is of wrong type + MediaWikiError: When MediaWiki returns an error + """ + return self.__recent_changes.api_request(params, *json_path, timeout, allow_redirects) - - -client = Client() \ No newline at end of file +client = Client() +client.make_api_request() \ No newline at end of file diff --git a/src/exceptions.py b/src/exceptions.py index 2d84775..6f4ac72 100644 --- a/src/exceptions.py +++ b/src/exceptions.py @@ -25,4 +25,32 @@ class ArticleCommentError(Exception): class FormatterBreaksAPISpec(Exception): def __init__(self, field): self.message = f"Formatter doesn't specify {field}!" - super().__init__(self.message) \ No newline at end of file + super().__init__(self.message) + + +class ServerError(Exception): + """Exception for when a request fails because of Server error""" + pass + + +class ClientError(Exception): + """Exception for when a request failes because of Client error""" + + def __init__(self, request): + self.message = f"Client have made wrong request! {request.status_code}: {request.reason}. {request.text}" + super().__init__(self.message) + + +class BadRequest(Exception): + """When type of parameter given to request making method is invalid""" + def __init__(self, object_type): + self.message = f"params must be either a strong or OrderedDict object, not {type(object_type)}!" + super().__init__(self.message) + + +class MediaWikiError(Exception): + """When MediaWiki responds with an error""" + def __init__(self, errors): + self.message = f"MediaWiki returned the following errors: {errors}!" + super().__init__(self.message) + diff --git a/src/misc.py b/src/misc.py index 1c6581c..6acbb19 100644 --- a/src/misc.py +++ b/src/misc.py @@ -22,6 +22,7 @@ import requests from src.configloader import settings from src.discord.message import DiscordMessage, DiscordMessageMetadata from src.discord.queue import messagequeue, send_to_discord +from src.exceptions import MediaWikiError from src.i18n import misc AUTO_SUPPRESSION_ENABLED = settings.get("auto_suppression", {"enabled": False}).get("enabled") @@ -208,6 +209,20 @@ def safe_read(request, *keys): return request +def parse_mw_request_info(request_data: dict, url: str): + """A function parsing request JSON message from MediaWiki logging all warnings and raising on MediaWiki errors""" + # any([True for k in request_data.keys() if k in ("error", "errors")]) + errors: list = request_data.get("errors", {}) # Is it ugly? I don't know tbh + if errors: + raise MediaWikiError(str(errors)) + warnings: list = request_data.get("warnings", {}) + if warnings: + for warning in warnings: + misc_logger.warning("MediaWiki returned the following warning: {code} - {text} on {url}.".format( + code=warning["code"], text=warning.get("text", warning.get("*", "")), url=url + )) + return request_data + def add_to_dict(dictionary, key): if key in dictionary: dictionary[key] += 1 diff --git a/src/rc.py b/src/rc.py index 0910b65..676ac86 100644 --- a/src/rc.py +++ b/src/rc.py @@ -23,10 +23,12 @@ import requests from bs4 import BeautifulSoup from src.configloader import settings -from src.misc import WIKI_SCRIPT_PATH, WIKI_API_PATH, datafile, send_simple, safe_read, LinkParser, AUTO_SUPPRESSION_ENABLED +from src.misc import WIKI_SCRIPT_PATH, WIKI_API_PATH, datafile, send_simple, safe_read, LinkParser, \ + AUTO_SUPPRESSION_ENABLED, parse_mw_request_info from src.discord.queue import messagequeue -from src.exceptions import MWError +from src.exceptions import MWError, BadRequest, ClientError, ServerError, MediaWikiError from src.session import session +from typing import Union # from src.rc_formatters import compact_formatter, embed_formatter, compact_abuselog_formatter, embed_abuselog_formatter from src.i18n import rc from collections import OrderedDict @@ -37,25 +39,9 @@ storage = datafile logger = logging.getLogger("rcgcdw.rc") -supported_logs = {"protect/protect", "protect/modify", "protect/unprotect", "upload/overwrite", "upload/upload", - "delete/delete", "delete/delete_redir", "delete/restore", "delete/revision", "delete/event", - "import/upload", "import/interwiki", "merge/merge", "move/move", "move/move_redir", - "protect/move_prot", "block/block", "block/unblock", "block/reblock", "rights/rights", - "rights/autopromote", "abusefilter/modify", "abusefilter/create", "interwiki/iw_add", - "interwiki/iw_edit", "interwiki/iw_delete", "curseprofile/comment-created", - "curseprofile/comment-edited", "curseprofile/comment-deleted", "curseprofile/comment-purged", - "curseprofile/profile-edited", "curseprofile/comment-replied", "contentmodel/change", "sprite/sprite", - "sprite/sheet", "sprite/slice", "managetags/create", "managetags/delete", "managetags/activate", - "managetags/deactivate", "cargo/createtable", "cargo/deletetable", - "cargo/recreatetable", "cargo/replacetable", "upload/revert", "newusers/create", - "newusers/autocreate", "newusers/create2", "newusers/byemail", "newusers/newusers", - "managewiki/settings", "managewiki/delete", "managewiki/lock", "managewiki/unlock", - "managewiki/namespaces", "managewiki/namespaces-delete", "managewiki/rights", "managewiki/undelete"} - - LinkParser = LinkParser() -class Recent_Changes_Class(object): +class Wiki(object): """Store verious data and functions related to wiki and fetching of Recent Changes""" def __init__(self): self.map_ips = {} @@ -129,7 +115,7 @@ class Recent_Changes_Class(object): """Make a typical MW request for rc/abuselog If succeeds return the .json() of request and if not raises ConnectionError""" - request = self.safe_request(WIKI_API_PATH, params=self.construct_params(amount)) + request = self._safe_request(WIKI_API_PATH, params=self.construct_params(amount)) if request is not None: try: request = request.json() @@ -178,30 +164,30 @@ class Recent_Changes_Class(object): "There were too many new events, but the limit was high enough we don't care anymore about fetching them all.") if change["type"] == "categorize": if "commenthidden" not in change: - if len(recent_changes.mw_messages.keys()) > 0: + if len(wiki.mw_messages.keys()) > 0: cat_title = change["title"].split(':', 1)[1] # I so much hate this, blame Markus for making me do this if change["revid"] not in categorize_events: categorize_events[change["revid"]] = {"new": set(), "removed": set()} comment_to_match = re.sub(r'<.*?a>', '', change["parsedcomment"]) - if recent_changes.mw_messages["recentchanges-page-added-to-category"] in comment_to_match or \ - recent_changes.mw_messages[ + if wiki.mw_messages["recentchanges-page-added-to-category"] in comment_to_match or \ + wiki.mw_messages[ "recentchanges-page-added-to-category-bundled"] in comment_to_match: categorize_events[change["revid"]]["new"].add(cat_title) logger.debug("Matched {} to added category for {}".format(cat_title, change["revid"])) - elif recent_changes.mw_messages[ + elif wiki.mw_messages[ "recentchanges-page-removed-from-category"] in comment_to_match or \ - recent_changes.mw_messages[ + wiki.mw_messages[ "recentchanges-page-removed-from-category-bundled"] in comment_to_match: categorize_events[change["revid"]]["removed"].add(cat_title) logger.debug("Matched {} to removed category for {}".format(cat_title, change["revid"])) else: logger.debug( "Unknown match for category change with messages {}, {}, {}, {} and comment_to_match {}".format( - recent_changes.mw_messages["recentchanges-page-added-to-category"], - recent_changes.mw_messages["recentchanges-page-removed-from-category"], - recent_changes.mw_messages["recentchanges-page-removed-from-category-bundled"], - recent_changes.mw_messages["recentchanges-page-added-to-category-bundled"], + wiki.mw_messages["recentchanges-page-added-to-category"], + wiki.mw_messages["recentchanges-page-removed-from-category"], + wiki.mw_messages["recentchanges-page-removed-from-category-bundled"], + wiki.mw_messages["recentchanges-page-added-to-category-bundled"], comment_to_match)) else: logger.warning( @@ -264,7 +250,9 @@ class Recent_Changes_Class(object): abuselog_last_id = self.prepare_abuse_log(abuselog) return rc_last_id, abuselog_last_id - def safe_request(self, url, params=None): + def _safe_request(self, url, params=None): + """This method is depreciated, please use api_request""" + logger.warning("safe_request is depreciated, please use api_request or own requests request") try: if params: request = self.session.get(url, params=params, timeout=10, allow_redirects=False) @@ -291,6 +279,76 @@ class Recent_Changes_Class(object): sys.exit(0) return request + def api_request(self, params: Union[str, OrderedDict], *json_path: list[str], timeout: int=10, allow_redirects: bool=False): + """Method to GET request data from the wiki's API with error handling including recognition of MediaWiki errors. + + Parameters: + + params (str, OrderedDict): a string or collections.OrderedDict object containing query parameters + json_path (str): *args taking strings as values. After request is parsed as json it will extract data from given json path + timeout (int, float) (default=10): int or float limiting time required for receiving a full response from a server before returning TimeoutError + allow_redirects (bool) (default=False): switches whether the request should follow redirects or not + + Returns: + + request_content (dict): a dict resulting from json extraction of HTTP GET request with given json_path + OR + One of the following exceptions: + ServerError: When connection with the wiki failed due to server error + ClientError: When connection with the wiki failed due to client error + KeyError: When json_path contained keys that weren't found in response JSON response + BadRequest: When params argument is of wrong type + MediaWikiError: When MediaWiki returns an error + """ + # Making request + try: + if isinstance(params, str): + request = self.session.get(WIKI_API_PATH + params, timeout=timeout, allow_redirects=allow_redirects) + elif isinstance(params, OrderedDict): + request = self.session.get(WIKI_API_PATH, params=params, timeout=timeout, allow_redirects=allow_redirects) + else: + raise BadRequest(params) + except requests.exceptions.Timeout: + logger.warning("Reached timeout error for request on link {url}".format(url=WIKI_API_PATH+str(params))) + self.downtime_controller(True) + raise ServerError + except requests.exceptions.ConnectionError: + logger.warning("Reached connection error for request on link {url}".format(url=WIKI_API_PATH+str(params))) + self.downtime_controller(True) + raise ServerError + except requests.exceptions.ChunkedEncodingError: + logger.warning("Detected faulty response from the web server for request on link {url}".format(url=WIKI_API_PATH+str(params))) + self.downtime_controller(True) + raise ServerError + # Catching HTTP errors + if 499 < request.status_code < 600: + self.downtime_controller(True) + raise ServerError + elif request.status_code == 302: + logger.critical( + "Redirect detected! Either the wiki given in the script settings (wiki field) is incorrect/the wiki got removed or is giving us the false value. Please provide the real URL to the wiki, current URL redirects to {}".format( + request.next.url)) + sys.exit(0) + elif 399 < request.status_code < 500: + logger.error("Request returned ClientError status code on {url}".format(url=request.url)) + raise ClientError(request) + else: + # JSON Extraction + try: + request_json = parse_mw_request_info(request.json(), request.url) + for item in request_json: + request_json = request_json[item] + except ValueError: + logger.warning("ValueError when extracting JSON data on {url}".format(url=request.url)) + self.downtime_controller(True) + raise ServerError + except MediaWikiError: + logger.exception("MediaWiki error on request: {}".format(request.url)) + raise + except KeyError: + raise + return request_json + def check_connection(self, looped=False): online = 0 for website in ["https://google.com", "https://instagram.com", "https://steamcommunity.com"]: @@ -308,7 +366,7 @@ class Recent_Changes_Class(object): if not looped: while 1: # recursed loop, check for connection (every 10 seconds) as long as three services are down, don't do anything else if self.check_connection(looped=True): - recent_changes.fetch(amount=settings["limitrefetch"]) + wiki.fetch(amount=settings["limitrefetch"]) break time.sleep(10) return False @@ -347,7 +405,7 @@ class Recent_Changes_Class(object): clean_entries() def init_info(self): - startup_info = safe_read(self.safe_request( + startup_info = safe_read(self._safe_request( "{wiki}?action=query&format=json&uselang=content&list=tags&meta=allmessages%7Csiteinfo&utf8=1&tglimit=max&tgprop=displayname&ammessages=recentchanges-page-added-to-category%7Crecentchanges-page-removed-from-category%7Crecentchanges-page-added-to-category-bundled%7Crecentchanges-page-removed-from-category-bundled&amenableparser=1&amincludelocal=1&siprop=namespaces".format( wiki=WIKI_API_PATH)), "query") if startup_info: @@ -375,7 +433,7 @@ class Recent_Changes_Class(object): def pull_comment(self, comment_id): try: - comment = self.handle_mw_errors(self.safe_request( + comment = self.handle_mw_errors(self._safe_request( "{wiki}?action=comment&do=getRaw&comment_id={comment}&format=json".format(wiki=WIKI_API_PATH, comment=comment_id)).json())[ "text"] @@ -393,13 +451,14 @@ class Recent_Changes_Class(object): return "" -recent_changes = Recent_Changes_Class() +wiki = Wiki() + def essential_info(change, changed_categories): """Prepares essential information for both embed and compact message format.""" logger.debug(change) if ("actionhidden" in change or "suppressed" in change) and "suppressed" not in settings["ignored"]: # if event is hidden using suppression - appearance_mode("suppressed", change, "", changed_categories, recent_changes) + appearance_mode("suppressed", change, "", changed_categories, wiki) return if "commenthidden" not in change: LinkParser.feed(change["parsedcomment"]) @@ -431,7 +490,7 @@ def essential_info(change, changed_categories): return if identification_string in settings["ignored"]: return - appearance_mode(identification_string, change, parsed_comment, changed_categories, recent_changes) + appearance_mode(identification_string, change, parsed_comment, changed_categories, wiki) def abuselog_processing(entry, recent_changes): abuselog_appearance_mode(entry, recent_changes) \ No newline at end of file diff --git a/src/rc_formatters.py b/src/rc_formatters.py index a46d099..d0354e7 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -53,7 +53,7 @@ def format_user(change, recent_changes, action): user=change["user"].replace(" ", "_"))) # Replace here needed in case of #75 logger.debug("current user: {} with cache of IPs: {}".format(change["user"], recent_changes.map_ips.keys())) if change["user"] not in list(recent_changes.map_ips.keys()): - contibs = safe_read(recent_changes.safe_request( + contibs = safe_read(recent_changes._safe_request( "{wiki}?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format( wiki=WIKI_API_PATH, user=change["user"], timestamp=change["timestamp"])), "query", "usercontribs") if contibs is None: @@ -715,7 +715,7 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): elif action in ("upload/overwrite", "upload/upload", "upload/revert"): # sending files license = None - urls = safe_read(recent_changes.safe_request( + urls = safe_read(recent_changes._safe_request( "{wiki}?action=query&format=json&prop=imageinfo&list=&meta=&titles={filename}&iiprop=timestamp%7Curl%7Carchivename&iilimit=5".format( wiki=WIKI_API_PATH, filename=change["title"])), "query", "pages") link = create_article_path(change["title"]) @@ -755,7 +755,7 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): else: embed["title"] = _("Uploaded {name}").format(name=change["title"]) if settings["license_detection"]: - article_content = safe_read(recent_changes.safe_request( + article_content = safe_read(recent_changes._safe_request( "{wiki}?action=query&format=json&prop=revisions&titles={article}&rvprop=content".format( wiki=WIKI_API_PATH, article=quote_plus(change["title"], safe=''))), "query", "pages") if article_content is None: diff --git a/src/rcgcdw.py b/src/rcgcdw.py index a2effc0..8792d3d 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -28,7 +28,7 @@ from src.misc import add_to_dict, datafile, \ WIKI_API_PATH, create_article_path from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata -from src.rc import recent_changes +from src.rc import wiki from src.exceptions import MWError from src.i18n import rcgcdw @@ -74,18 +74,18 @@ def day_overview_request(): passes = 0 continuearg = "" while not complete and passes < 10: - request = recent_changes.safe_request( + request = wiki._safe_request( "{wiki}?action=query&format=json&list=recentchanges&rcend={timestamp}Z&rcprop=title%7Ctimestamp%7Csizes%7Cloginfo%7Cuser&rcshow=!bot&rclimit=500&rctype=edit%7Cnew%7Clog{continuearg}".format( wiki=WIKI_API_PATH, timestamp=timestamp, continuearg=continuearg)) if request: try: request = request.json() - request = recent_changes.handle_mw_errors(request) + request = wiki.handle_mw_errors(request) rc = request['query']['recentchanges'] continuearg = request["continue"]["rccontinue"] if "continue" in request else None except ValueError: logger.warning("ValueError in fetching changes") - recent_changes.downtime_controller(True) + wiki.downtime_controller(True) complete = 2 except KeyError: logger.warning("Wiki returned %s" % request) @@ -168,10 +168,10 @@ def day_overview(): if item["type"] == "edit": edits += 1 changed_bytes += item["newlen"] - item["oldlen"] - if (recent_changes.namespaces is not None and "content" in recent_changes.namespaces.get(str(item["ns"]), {})) or item["ns"] == 0: + if (wiki.namespaces is not None and "content" in wiki.namespaces.get(str(item["ns"]), {})) or item["ns"] == 0: articles = add_to_dict(articles, item["title"]) elif item["type"] == "new": - if "content" in (recent_changes.namespaces is not None and recent_changes.namespaces.get(str(item["ns"]), {})) or item["ns"] == 0: + if "content" in (wiki.namespaces is not None and wiki.namespaces.get(str(item["ns"]), {})) or item["ns"] == 0: new_articles += 1 changed_bytes += item["newlen"] elif item["type"] == "log": @@ -217,17 +217,17 @@ def day_overview(): # Log in and download wiki information try: if settings["wiki_bot_login"] and settings["wiki_bot_password"]: - recent_changes.log_in() + wiki.log_in() time.sleep(2.0) - recent_changes.init_info() + wiki.init_info() except requests.exceptions.ConnectionError: logger.critical("A connection can't be established with the wiki. Exiting...") sys.exit(1) time.sleep(3.0) # this timeout is to prevent timeouts. It seems Fandom does not like our ~2-3 request in under a second if settings["rc_enabled"]: logger.info("Script started! Fetching newest changes...") - recent_changes.fetch(amount=settings["limitrefetch"] if settings["limitrefetch"] != -1 else settings["limit"]) - schedule.every(settings["cooldown"]).seconds.do(recent_changes.fetch) + wiki.fetch(amount=settings["limitrefetch"] if settings["limitrefetch"] != -1 else settings["limit"]) + schedule.every(settings["cooldown"]).seconds.do(wiki.fetch) if settings["overview"]: try: overview_time = time.strptime(settings["overview_time"], '%H:%M') @@ -241,7 +241,7 @@ if settings["rc_enabled"]: except ValueError: logger.error("Invalid time format! Currentely: {}. Note: It needs to be in HH:MM format.".format( settings["overview_time"])) - schedule.every().day.at("00:00").do(recent_changes.clear_cache) + schedule.every().day.at("00:00").do(wiki.clear_cache) else: logger.info("Script started! RC is disabled however, this means no recent changes will be sent :c") @@ -254,7 +254,7 @@ if 1 == 2: # additional translation strings in unreachable code if TESTING: logger.debug("DEBUGGING ") storage["rcid"] = 1 - recent_changes.fetch(amount=5) + wiki.fetch(amount=5) day_overview() import src.discussions src.discussions.fetch_discussions() From d725b97c2a8a08e7fc49f9bd649f5ffcd2fceb8d Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 24 Apr 2021 14:55:37 +0200 Subject: [PATCH 005/173] Few fixes --- extensions/__init__.py | 2 +- extensions/base/__init__.py | 2 +- extensions/base/mediawiki.py | 25 ++++++++++++++----------- src/api/client.py | 3 +-- src/api/formatter.py | 4 ++-- src/rcgcdw.py | 3 ++- 6 files changed, 21 insertions(+), 18 deletions(-) diff --git a/extensions/__init__.py b/extensions/__init__.py index 0c08726..fd83a9a 100644 --- a/extensions/__init__.py +++ b/extensions/__init__.py @@ -13,4 +13,4 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . -import base +import extensions.base \ No newline at end of file diff --git a/extensions/base/__init__.py b/extensions/base/__init__.py index ee271dd..d2fffcb 100644 --- a/extensions/base/__init__.py +++ b/extensions/base/__init__.py @@ -13,4 +13,4 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . -import mediawiki +import extensions.base.mediawiki diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 657ea47..fcfa9af 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -20,7 +20,7 @@ from src.api import formatter from src.i18n import rc_formatters from src.api.client import Client, client from src.configloader import settings - +from src.exceptions import * _ = rc_formatters.gettext @@ -59,16 +59,19 @@ class base(): minor=_("m") if action == "edit" and "minor" in change else "", bot=_('b') if "bot" in change else "", space=" " if "bot" in change or (action == "edit" and "minor" in change) or action == "new" else "") if settings["appearance"]["embed"]["show_edit_changes"]: - if action == "new": - changed_content = safe_read(recent_changes._safe_request( - "{wiki}?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format( - wiki=ctx.client.WIKI_API_PATH, diff=change["revid"] - )), "compare", "*") - else: - changed_content = safe_read(recent_changes._safe_request( - "{wiki}?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( - wiki=ctx.client.WIKI_API_PATH, diff=change["revid"], oldrev=change["old_revid"] - )), "compare", "*") + try: + if action == "new": + changed_content = ctx.client.make_api_request( + "{wiki}?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format( + wiki=ctx.client.WIKI_API_PATH, diff=change["revid"] + ), "compare", "*") + else: + changed_content = ctx.client.make_api_request( + "{wiki}?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( + wiki=ctx.client.WIKI_API_PATH, diff=change["revid"], oldrev=change["old_revid"] + ), "compare", "*") + except (ServerError): + changed_content = None if changed_content: EditDiff = ctx.client.content_parser() EditDiff.feed(changed_content) diff --git a/src/api/client.py b/src/api/client.py index 8e9d0f1..9f1ea6d 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -61,5 +61,4 @@ class Client: return self.__recent_changes.api_request(params, *json_path, timeout, allow_redirects) -client = Client() -client.make_api_request() \ No newline at end of file +client = Client() \ No newline at end of file diff --git a/src/api/formatter.py b/src/api/formatter.py index 84a8033..72df39c 100644 --- a/src/api/formatter.py +++ b/src/api/formatter.py @@ -13,7 +13,7 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . -from src.rcgcdw import formatter_hooks +import src.rcgcdw from src.configloader import settings from src.exceptions import FormatterBreaksAPISpec from src.discord.message import DiscordMessage @@ -35,7 +35,7 @@ def _register_formatter(func: Callable[[dict], DiscordMessage], kwargs: dict[str if action_type is None: raise FormatterBreaksAPISpec("event type") if settings["appearance"]["mode"] == formatter_type: - formatter_hooks[action_type] = func + src.rcgcdw.formatter_hooks[action_type] = func def embed(**kwargs): diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 8792d3d..2a67041 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -47,9 +47,10 @@ logger = logging.getLogger("rcgcdw") logger.debug("Current settings: {settings}".format(settings=settings)) from src.migrations import * # migrations after logging try: - import exceptions + import extensions except ImportError: logger.critical("No extensions module found. What's going on?") + raise sys.exit(1) storage = datafile From a9d6fa1830cc0ad2d59e464e6ca7613fad28d67d Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 25 Apr 2021 02:32:50 +0200 Subject: [PATCH 006/173] Some more work towards making the client work, added context class --- extensions/base/mediawiki.py | 6 ++++-- src/api/client.py | 4 +++- src/api/context.py | 23 +++++++++++++++++++++++ src/api/formatter.py | 6 ++++++ src/rc.py | 11 +++++++---- src/rcgcdw.py | 20 +++++++++++--------- 6 files changed, 54 insertions(+), 16 deletions(-) create mode 100644 src/api/context.py diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index fcfa9af..db0362a 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -18,7 +18,8 @@ import math from src.discord.message import DiscordMessage from src.api import formatter from src.i18n import rc_formatters -from src.api.client import Client, client +from src.api.client import Client +from src.api.context import Context from src.configloader import settings from src.exceptions import * @@ -32,7 +33,7 @@ class base(): super().__init__(api) @formatter.embed(event="edit", mode="embed") - def embed_edit(self, ctx: Client, change: dict) -> DiscordMessage: + def embed_edit(self, ctx: Context, change: dict) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) action = ctx.event editsize = change["newlen"] - change["oldlen"] @@ -92,6 +93,7 @@ class base(): embed.add_field(_("Added"), "{data}".format(data=EditDiff.small_prev_ins), inline=True) else: logger.warning("Unable to download data on the edit content!") + return embed @formatter.compact(event="edit", mode="embed") def compact_edit(self, change: dict): diff --git a/src/api/client.py b/src/api/client.py index 9f1ea6d..aa81346 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -60,5 +60,7 @@ class Client: """ return self.__recent_changes.api_request(params, *json_path, timeout, allow_redirects) + def get_formatters(self): + return self._formatters -client = Client() \ No newline at end of file +client = Client() diff --git a/src/api/context.py b/src/api/context.py new file mode 100644 index 0000000..f6e575d --- /dev/null +++ b/src/api/context.py @@ -0,0 +1,23 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + + +class Context: + """Context object containing client and some metadata regarding specific formatter call""" + def __init__(self, message_type: str, webhook_url: str, client): + self.client = client + self.webhook_url = webhook_url + self.message_type = message_type + self.event = None \ No newline at end of file diff --git a/src/api/formatter.py b/src/api/formatter.py index 72df39c..318a4f8 100644 --- a/src/api/formatter.py +++ b/src/api/formatter.py @@ -14,11 +14,13 @@ # along with RcGcDw. If not, see . import src.rcgcdw +import logging from src.configloader import settings from src.exceptions import FormatterBreaksAPISpec from src.discord.message import DiscordMessage from typing import Optional, Callable +logger = logging.getLogger("src.api.formatter") def _register_formatter(func: Callable[[dict], DiscordMessage], kwargs: dict[str, str], formatter_type: str, action_type: Optional[str]=None): @@ -35,6 +37,10 @@ def _register_formatter(func: Callable[[dict], DiscordMessage], kwargs: dict[str if action_type is None: raise FormatterBreaksAPISpec("event type") if settings["appearance"]["mode"] == formatter_type: + if action_type in src.rcgcdw.formatter_hooks: + logger.warning(f"Action {action_type} is already defined inside of " + f"{src.rcgcdw.formatter_hooks[action_type].__module__}! " + f"Overwriting it with one from {func.__module__}") src.rcgcdw.formatter_hooks[action_type] = func diff --git a/src/rc.py b/src/rc.py index 676ac86..f0c5a2f 100644 --- a/src/rc.py +++ b/src/rc.py @@ -20,6 +20,7 @@ import sys import time import logging import requests +import src.api.client from bs4 import BeautifulSoup from src.configloader import settings @@ -28,6 +29,7 @@ from src.misc import WIKI_SCRIPT_PATH, WIKI_API_PATH, datafile, send_simple, saf from src.discord.queue import messagequeue from src.exceptions import MWError, BadRequest, ClientError, ServerError, MediaWikiError from src.session import session +from src.api.context import Context from typing import Union # from src.rc_formatters import compact_formatter, embed_formatter, compact_abuselog_formatter, embed_abuselog_formatter from src.i18n import rc @@ -202,7 +204,7 @@ class Wiki(object): logger.debug("Change ({}) is lower or equal to recent_id {}".format(change["rcid"], recent_id)) continue logger.debug(recent_id) - essential_info(change, categorize_events.get(change.get("revid"), None)) + rc_processor(change, categorize_events.get(change.get("revid"), None)) return highest_id def prepare_abuse_log(self, abuse_log: list): @@ -454,12 +456,13 @@ class Wiki(object): wiki = Wiki() -def essential_info(change, changed_categories): +def rc_processor(change, changed_categories): """Prepares essential information for both embed and compact message format.""" + formatters = src.api.client.client.get_formatters() # TODO Make it better? Importing might be a hell logger.debug(change) + context = Context(settings["appearance"]["mode"], settings["webhookURL"], src.api.client.client) if ("actionhidden" in change or "suppressed" in change) and "suppressed" not in settings["ignored"]: # if event is hidden using suppression - appearance_mode("suppressed", change, "", changed_categories, wiki) - return + context.event = "suppressed" if "commenthidden" not in change: LinkParser.feed(change["parsedcomment"]) parsed_comment = LinkParser.new_string diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 2a67041..0da7fdc 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -39,19 +39,22 @@ if settings["fandom_discussions"]["enabled"]: import src.discussions TESTING = True if "--test" in sys.argv else False # debug mode, pipeline testing - +formatter_hooks = {} # Prepare logging logging.config.dictConfig(settings["logging"]) logger = logging.getLogger("rcgcdw") logger.debug("Current settings: {settings}".format(settings=settings)) from src.migrations import * # migrations after logging -try: - import extensions -except ImportError: - logger.critical("No extensions module found. What's going on?") - raise - sys.exit(1) + + +def load_extensions(): + """Loads all of the extensions, can be a local import because all we need is them to register""" + try: + import extensions + except ImportError: + logger.critical("No extensions module found. What's going on?") + sys.exit(1) storage = datafile # Remove previous data holding file if exists and limitfetch allows @@ -63,8 +66,6 @@ if settings["limitrefetch"] != -1 and os.path.exists("lastchange.txt") is True: datafile.save_datafile() os.remove("lastchange.txt") -formatter_hooks = {} - def day_overview_request(): logger.info("Fetching daily overview... This may take up to 30 seconds!") @@ -251,6 +252,7 @@ if 1 == 2: # additional translation strings in unreachable code _("autoreview"), _("autopatrol"), _("wiki_guardian"), ngettext("second", "seconds", 1), ngettext("minute", "minutes", 1), ngettext("hour", "hours", 1), ngettext("day", "days", 1), ngettext("week", "weeks", 1), ngettext("month", "months",1), ngettext("year", "years", 1), ngettext("millennium", "millennia", 1), ngettext("decade", "decades", 1), ngettext("century", "centuries", 1)) # noinspection PyUnreachableCode +load_extensions() if TESTING: logger.debug("DEBUGGING ") From 2aa8387b7288c11880af0e6956ef3b04052d3203 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 25 Apr 2021 13:20:58 +0200 Subject: [PATCH 007/173] Chenges in structure, updated API docs --- docs/API spec.md | 26 +++++++---- src/api/client.py | 4 +- src/api/context.py | 5 ++- src/discord/message.py | 3 ++ src/discord/queue.py | 20 ++++----- src/discussion_formatters.py | 2 +- src/misc.py | 21 ++------- src/rc_formatters.py | 3 +- src/rcgcdw.py | 59 +++++++++++++++++++++++-- src/{rc.py => wiki.py} | 83 ++++++++---------------------------- 10 files changed, 117 insertions(+), 109 deletions(-) rename src/{rc.py => wiki.py} (86%) diff --git a/docs/API spec.md b/docs/API spec.md index 0c7367b..977f406 100644 --- a/docs/API spec.md +++ b/docs/API spec.md @@ -6,6 +6,7 @@ A class allowing to change the message content and/or execute additional actions ### Formatters Formatters allow to specify how does a Discord message look like depending on message mode (embed, compact) and type of the event that had happened on the wiki (new, edit etc). +If formatter for given event is not registered, the script will look for formatter for event "generic" and if this is also not found it will throw a wartning. ### Post-processing hook A class allowing to change the message content and/or execute additional actions after message has been processed by the formatter. This type of hook executes after a formatter. @@ -35,23 +36,30 @@ api object exposes various data which allows to extend the usefulness of what ca import logging from src.discord.message import DiscordMessage from src.api import formatter +from src.api.context import Context +from src.api.util import create_article_path, link_formatter from src.i18n import rc_formatters _ = rc_formatters.gettext logger = logging.getLogger("extensions.abusefilter") -class abusefilter(Formatter): - def __init__(self, api): - super().__init__(api) +class abusefilter(): + def __init__(self, api): + super().__init__(api) - @formatter.embed(event="abuselog/modify", mode="embed") - def embed_modify(self, change: dict) -> DiscordMessage: - return DiscordMessage + @formatter.embed(event="abuselog/modify", mode="embed") + def embed_modify(self, ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, webhook_url=ctx.webhook_url) + embed.set_link(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"]))) + embed["title"] = _("Edited abuse filter number {number}").format(number=change["logparams"]['newId']) + return embed - @formatter.compact(event="abuselog/modify") - def compact_modify(self, change: dict) -> DiscordMessage: - return DiscordMessage + @formatter.compact(event="abuselog/modify") + def embed_modify(self, ctx: Context, change: dict) -> DiscordMessage: + link = link_formatter(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"]))) + content = _("[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})").format(author=author, author_url=author_url, number=change["logparams"]['newId'], filter_url=link) + return DiscordMessage ``` diff --git a/src/api/client.py b/src/api/client.py index aa81346..f311029 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -14,7 +14,6 @@ # along with RcGcDw. If not, see . import src.rcgcdw -import src.rc import src.misc from typing import Union from collections import OrderedDict @@ -25,7 +24,7 @@ class Client: """ def __init__(self): self._formatters = src.rcgcdw.formatter_hooks - self.__recent_changes = src.rc.wiki + self.__recent_changes = src.rcgcdw.wiki self.WIKI_API_PATH = src.misc.WIKI_API_PATH self.WIKI_ARTICLE_PATH = src.misc.WIKI_ARTICLE_PATH self.WIKI_SCRIPT_PATH = src.misc.WIKI_SCRIPT_PATH @@ -63,4 +62,5 @@ class Client: def get_formatters(self): return self._formatters + client = Client() diff --git a/src/api/context.py b/src/api/context.py index f6e575d..365d0f7 100644 --- a/src/api/context.py +++ b/src/api/context.py @@ -20,4 +20,7 @@ class Context: self.client = client self.webhook_url = webhook_url self.message_type = message_type - self.event = None \ No newline at end of file + self.event = None + + def set_categories(self, cats): + self.categories = cats \ No newline at end of file diff --git a/src/discord/message.py b/src/discord/message.py index 8ac1f72..fab107c 100644 --- a/src/discord/message.py +++ b/src/discord/message.py @@ -89,6 +89,9 @@ class DiscordMessage: def set_name(self, name): self.webhook_object["username"] = name + def set_link(self, link): + self.embed["link"] = link + class DiscordMessageRaw(DiscordMessage): def __init__(self, content: dict, webhook_url: str): diff --git a/src/discord/queue.py b/src/discord/queue.py index 9777287..d8659d0 100644 --- a/src/discord/queue.py +++ b/src/discord/queue.py @@ -174,14 +174,14 @@ def send_to_discord(data: Optional[DiscordMessage], meta: DiscordMessageMetadata logger.info("Message \"{}\" has been rejected due to matching filter ({}).".format( to_check, regex)) return # discard the message without anything - if messagequeue: - messagequeue.add_message((data, meta)) - else: - code = send_to_discord_webhook(data, metadata=meta) - if code == 3: + if messagequeue: messagequeue.add_message((data, meta)) - elif code == 2: - time.sleep(5.0) - messagequeue.add_message((data, meta)) - elif code < 2: - pass \ No newline at end of file + else: + code = send_to_discord_webhook(data, metadata=meta) + if code == 3: + messagequeue.add_message((data, meta)) + elif code == 2: + time.sleep(5.0) + messagequeue.add_message((data, meta)) + elif code < 2: + pass \ No newline at end of file diff --git a/src/discussion_formatters.py b/src/discussion_formatters.py index ac015a0..af292d2 100644 --- a/src/discussion_formatters.py +++ b/src/discussion_formatters.py @@ -19,7 +19,7 @@ import gettext from urllib.parse import quote_plus from src.configloader import settings -from src.misc import link_formatter, create_article_path, escape_formatting +from src.api.util import link_formatter, escape_formatting, create_article_path from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata from src.i18n import discussion_formatters diff --git a/src/misc.py b/src/misc.py index 6acbb19..67a7eb3 100644 --- a/src/misc.py +++ b/src/misc.py @@ -15,10 +15,12 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . import base64 -import json, logging, sys, re +import json, logging, sys from html.parser import HTMLParser -from urllib.parse import urlparse, urlunparse, quote +from urllib.parse import urlparse, urlunparse import requests + +from src.api.util import escape_formatting from src.configloader import settings from src.discord.message import DiscordMessage, DiscordMessageMetadata from src.discord.queue import messagequeue, send_to_discord @@ -105,16 +107,6 @@ def weighted_average(value, weight, new_value): return round(((value * weight) + new_value) / (weight + 1), 2) -def link_formatter(link): - """Formats a link to not embed it""" - return "<" + quote(link.replace(" ", "_"), "/:?=&") + ">" - - -def escape_formatting(data): - """Escape Discord formatting""" - return re.sub(r"([`_*~<>{}@/|\\])", "\\\\\\1", data, 0) - - class ContentParser(HTMLParser): """ContentPerser is an implementation of HTMLParser that parses output of action=compare&prop=diff API request for two MediaWiki revisions. It extracts the following: @@ -276,11 +268,6 @@ def prepare_paths(path, dry=False): prepare_paths(settings["wiki_url"]) -def create_article_path(article: str) -> str: - """Takes the string and creates an URL with it as the article name""" - return WIKI_ARTICLE_PATH.replace("$1", article) - - def send_simple(msgtype, message, name, avatar): discord_msg = DiscordMessage("compact", msgtype, settings["webhookURL"], content=message) discord_msg.set_avatar(avatar) diff --git a/src/rc_formatters.py b/src/rc_formatters.py index d0354e7..a1a1474 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -27,8 +27,9 @@ from urllib.parse import quote_plus, quote from bs4 import BeautifulSoup from src.configloader import settings -from src.misc import link_formatter, create_article_path, WIKI_SCRIPT_PATH, safe_read, \ +from src.misc import WIKI_SCRIPT_PATH, safe_read, \ WIKI_API_PATH, ContentParser, profile_field_name, LinkParser, AUTO_SUPPRESSION_ENABLED +from src.api.util import link_formatter, create_article_path from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 0da7fdc..95e0acb 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -19,18 +19,23 @@ # WARNING! SHITTY CODE AHEAD. ENTER ONLY IF YOU ARE SURE YOU CAN TAKE IT # You have been warned -import time, logging.config, requests, datetime, gettext, math, os.path, schedule, sys +import time, logging.config, requests, datetime, gettext, math, os.path, schedule, sys, re import src.misc from collections import defaultdict, Counter + +import src.api.client +from typing import Optional +from src.api.context import Context from src.configloader import settings from src.misc import add_to_dict, datafile, \ - WIKI_API_PATH, create_article_path + WIKI_API_PATH, LinkParser +from src.api.util import create_article_path, default_message from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata -from src.rc import wiki from src.exceptions import MWError from src.i18n import rcgcdw +from src.wiki import Wiki _ = rcgcdw.gettext ngettext = rcgcdw.ngettext @@ -67,6 +72,12 @@ if settings["limitrefetch"] != -1 and os.path.exists("lastchange.txt") is True: os.remove("lastchange.txt") +def no_formatter(ctx: Context, change: dict) -> None: + logger.warning(f"There is no formatter specified for {ctx.event}! Ignoring event.") + return + +formatter_hooks["no_formatter"] = no_formatter + def day_overview_request(): logger.info("Fetching daily overview... This may take up to 30 seconds!") timestamp = (datetime.datetime.utcnow() - datetime.timedelta(hours=24)).isoformat(timespec='milliseconds') @@ -216,7 +227,48 @@ def day_overview(): logger.debug("function requesting changes for day overview returned with error code") +def rc_processor(change, changed_categories): + """Prepares essential information for both embed and compact message format.""" + LinkParser = LinkParser() + metadata = DiscordMessageMetadata("POST", rev_id=change.get("revid", None), log_id=change.get("logid", None), + page_id=change.get("pageid", None)) + logger.debug(change) + context = Context(settings["appearance"]["mode"], settings["webhookURL"], src.api.client.client) + if ("actionhidden" in change or "suppressed" in change) and "suppressed" not in settings["ignored"]: # if event is hidden using suppression + context.event = "suppressed" + discord_message: Optional[DiscordMessage] = default_message("suppressed", formatter_hooks)(context, change) + else: + if "commenthidden" not in change: + LinkParser.feed(change.get("parsedcomment", "")) + parsed_comment = LinkParser.new_string + parsed_comment = re.sub(r"(`|_|\*|~|{|}|\|\|)", "\\\\\\1", parsed_comment) + else: + parsed_comment = _("~~hidden~~") + if "userhidden" in change: + change["user"] = _("hidden") + if change.get("ns", -1) in settings.get("ignored_namespaces", ()): + return + if change["type"] in ["edit", "new"]: + logger.debug("List of categories in essential_info: {}".format(changed_categories)) + identification_string = change["type"] + context.set_categories(changed_categories) + elif change["type"] == "categorize": + return + elif change["type"] == "log": + identification_string = "{logtype}/{logaction}".format(logtype=change["logtype"], logaction=change["logaction"]) + else: + identification_string = change.get("type", "unknown") # If event doesn't have a type + if identification_string in settings["ignored"]: + return + discord_message: Optional[DiscordMessage] = default_message(identification_string, formatter_hooks)(context, change) + send_to_discord(discord_message, metadata) + +def abuselog_processing(entry, recent_changes): + abuselog_appearance_mode(entry, recent_changes) + + # Log in and download wiki information +wiki = Wiki(rc_processor, abuselog_processing) try: if settings["wiki_bot_login"] and settings["wiki_bot_password"]: wiki.log_in() @@ -254,6 +306,7 @@ if 1 == 2: # additional translation strings in unreachable code load_extensions() + if TESTING: logger.debug("DEBUGGING ") storage["rcid"] = 1 diff --git a/src/rc.py b/src/wiki.py similarity index 86% rename from src/rc.py rename to src/wiki.py index f0c5a2f..1d9f386 100644 --- a/src/rc.py +++ b/src/wiki.py @@ -20,17 +20,15 @@ import sys import time import logging import requests -import src.api.client from bs4 import BeautifulSoup from src.configloader import settings -from src.misc import WIKI_SCRIPT_PATH, WIKI_API_PATH, datafile, send_simple, safe_read, LinkParser, \ +from src.misc import WIKI_SCRIPT_PATH, WIKI_API_PATH, datafile, send_simple, safe_read, \ AUTO_SUPPRESSION_ENABLED, parse_mw_request_info from src.discord.queue import messagequeue from src.exceptions import MWError, BadRequest, ClientError, ServerError, MediaWikiError from src.session import session -from src.api.context import Context -from typing import Union +from typing import Union, Callable # from src.rc_formatters import compact_formatter, embed_formatter, compact_abuselog_formatter, embed_abuselog_formatter from src.i18n import rc from collections import OrderedDict @@ -41,11 +39,11 @@ storage = datafile logger = logging.getLogger("rcgcdw.rc") -LinkParser = LinkParser() - class Wiki(object): """Store verious data and functions related to wiki and fetching of Recent Changes""" - def __init__(self): + def __init__(self, rc_processor: Callable, abuse_processor: Callable): + self.rc_processor = rc_processor + self.abuse_processor = abuse_processor self.map_ips = {} self.downtimecredibility = 0 self.last_downtime = 0 @@ -58,6 +56,7 @@ class Wiki(object): self.logged_in = False self.initial_run_complete = False + @staticmethod def handle_mw_errors(request): if "errors" in request: @@ -166,30 +165,30 @@ class Wiki(object): "There were too many new events, but the limit was high enough we don't care anymore about fetching them all.") if change["type"] == "categorize": if "commenthidden" not in change: - if len(wiki.mw_messages.keys()) > 0: + if len(self.mw_messages.keys()) > 0: cat_title = change["title"].split(':', 1)[1] # I so much hate this, blame Markus for making me do this if change["revid"] not in categorize_events: categorize_events[change["revid"]] = {"new": set(), "removed": set()} comment_to_match = re.sub(r'<.*?a>', '', change["parsedcomment"]) - if wiki.mw_messages["recentchanges-page-added-to-category"] in comment_to_match or \ - wiki.mw_messages[ + if self.mw_messages["recentchanges-page-added-to-category"] in comment_to_match or \ + self.mw_messages[ "recentchanges-page-added-to-category-bundled"] in comment_to_match: categorize_events[change["revid"]]["new"].add(cat_title) logger.debug("Matched {} to added category for {}".format(cat_title, change["revid"])) - elif wiki.mw_messages[ + elif self.mw_messages[ "recentchanges-page-removed-from-category"] in comment_to_match or \ - wiki.mw_messages[ + self.mw_messages[ "recentchanges-page-removed-from-category-bundled"] in comment_to_match: categorize_events[change["revid"]]["removed"].add(cat_title) logger.debug("Matched {} to removed category for {}".format(cat_title, change["revid"])) else: logger.debug( "Unknown match for category change with messages {}, {}, {}, {} and comment_to_match {}".format( - wiki.mw_messages["recentchanges-page-added-to-category"], - wiki.mw_messages["recentchanges-page-removed-from-category"], - wiki.mw_messages["recentchanges-page-removed-from-category-bundled"], - wiki.mw_messages["recentchanges-page-added-to-category-bundled"], + self.mw_messages["recentchanges-page-added-to-category"], + self.mw_messages["recentchanges-page-removed-from-category"], + self.mw_messages["recentchanges-page-removed-from-category-bundled"], + self.mw_messages["recentchanges-page-added-to-category-bundled"], comment_to_match)) else: logger.warning( @@ -204,7 +203,7 @@ class Wiki(object): logger.debug("Change ({}) is lower or equal to recent_id {}".format(change["rcid"], recent_id)) continue logger.debug(recent_id) - rc_processor(change, categorize_events.get(change.get("revid"), None)) + self.rc_processor(change, categorize_events.get(change.get("revid"), None)) return highest_id def prepare_abuse_log(self, abuse_log: list): @@ -218,7 +217,7 @@ class Wiki(object): continue if entry["id"] <= recent_id: continue - abuselog_processing(entry, self) + self.abuse_processor(entry, self) return entry["id"] def fetch_changes(self, amount): @@ -368,7 +367,7 @@ class Wiki(object): if not looped: while 1: # recursed loop, check for connection (every 10 seconds) as long as three services are down, don't do anything else if self.check_connection(looped=True): - wiki.fetch(amount=settings["limitrefetch"]) + self.fetch(amount=settings["limitrefetch"]) break time.sleep(10) return False @@ -451,49 +450,3 @@ class Wiki(object): comment = comment[0:1000] + "…" return comment return "" - - -wiki = Wiki() - - -def rc_processor(change, changed_categories): - """Prepares essential information for both embed and compact message format.""" - formatters = src.api.client.client.get_formatters() # TODO Make it better? Importing might be a hell - logger.debug(change) - context = Context(settings["appearance"]["mode"], settings["webhookURL"], src.api.client.client) - if ("actionhidden" in change or "suppressed" in change) and "suppressed" not in settings["ignored"]: # if event is hidden using suppression - context.event = "suppressed" - if "commenthidden" not in change: - LinkParser.feed(change["parsedcomment"]) - parsed_comment = LinkParser.new_string - LinkParser.new_string = "" - parsed_comment = re.sub(r"(`|_|\*|~|{|}|\|\|)", "\\\\\\1", parsed_comment, 0) - else: - parsed_comment = _("~~hidden~~") - if not parsed_comment: - parsed_comment = None - if "userhidden" in change: - change["user"] = _("hidden") - if change.get("ns", -1) in settings.get("ignored_namespaces", ()): - return - if change["type"] in ["edit", "new"]: - logger.debug("List of categories in essential_info: {}".format(changed_categories)) - identification_string = change["type"] - elif change["type"] == "log": - identification_string = "{logtype}/{logaction}".format(logtype=change["logtype"], logaction=change["logaction"]) - if identification_string not in supported_logs: - logger.warning( - "This event is not implemented in the script. Please make an issue on the tracker attaching the following info: wiki url, time, and this information: {}".format( - change)) - return - elif change["type"] == "categorize": - return - else: - logger.warning("This event is not implemented in the script. Please make an issue on the tracker attaching the following info: wiki url, time, and this information: {}".format(change)) - return - if identification_string in settings["ignored"]: - return - appearance_mode(identification_string, change, parsed_comment, changed_categories, wiki) - -def abuselog_processing(entry, recent_changes): - abuselog_appearance_mode(entry, recent_changes) \ No newline at end of file From 2b2eeaafba94d0a20aee3b0ab557a9a0ba45ad7a Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 25 Apr 2021 13:37:59 +0200 Subject: [PATCH 008/173] Added util file and trying to fight the circular import errors --- extensions/base/mediawiki.py | 1 - src/api/client.py | 14 ++++++------- src/api/util.py | 40 ++++++++++++++++++++++++++++++++++++ src/rcgcdw.py | 9 +++++--- 4 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 src/api/util.py diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index db0362a..50d6ecc 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -18,7 +18,6 @@ import math from src.discord.message import DiscordMessage from src.api import formatter from src.i18n import rc_formatters -from src.api.client import Client from src.api.context import Context from src.configloader import settings from src.exceptions import * diff --git a/src/api/client.py b/src/api/client.py index f311029..f72f124 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -13,18 +13,19 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . -import src.rcgcdw + import src.misc from typing import Union from collections import OrderedDict + class Client: """ A client for interacting with RcGcDw when creating formatters or hooks. """ - def __init__(self): - self._formatters = src.rcgcdw.formatter_hooks - self.__recent_changes = src.rcgcdw.wiki + def __init__(self, hooks, wiki): + self._formatters = hooks + self.__recent_changes = wiki self.WIKI_API_PATH = src.misc.WIKI_API_PATH self.WIKI_ARTICLE_PATH = src.misc.WIKI_ARTICLE_PATH self.WIKI_SCRIPT_PATH = src.misc.WIKI_SCRIPT_PATH @@ -60,7 +61,4 @@ class Client: return self.__recent_changes.api_request(params, *json_path, timeout, allow_redirects) def get_formatters(self): - return self._formatters - - -client = Client() + return self._formatters \ No newline at end of file diff --git a/src/api/util.py b/src/api/util.py new file mode 100644 index 0000000..01aab94 --- /dev/null +++ b/src/api/util.py @@ -0,0 +1,40 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . +import re +from urllib.parse import quote +from typing import Optional, Callable +from src.discord.message import DiscordMessage +from src.configloader import settings +import src.misc + + +def default_message(event: str, formatter_hooks: dict) -> Callable: + """Returns a method of a formatter responsible for the event or None if such does not exist.""" + return formatter_hooks.get(event, formatter_hooks.get("generic", formatter_hooks["no_formatter"])) + + +def link_formatter(link: str) -> str: + """Formats a link to not embed it""" + return "<" + quote(link.replace(" ", "_"), "/:?=&") + ">" + + +def escape_formatting(data: str) -> str: + """Escape Discord formatting""" + return re.sub(r"([`_*~<>{}@/|\\])", "\\\\\\1", data, 0) + + +def create_article_path(article: str) -> str: + """Takes the string and creates an URL with it as the article name""" + return src.misc.WIKI_ARTICLE_PATH.replace("$1", article) \ No newline at end of file diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 95e0acb..f3da4d7 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -24,12 +24,12 @@ import time, logging.config, requests, datetime, gettext, math, os.path, schedul import src.misc from collections import defaultdict, Counter -import src.api.client from typing import Optional +import src.api.client from src.api.context import Context from src.configloader import settings from src.misc import add_to_dict, datafile, \ - WIKI_API_PATH, LinkParser + WIKI_API_PATH from src.api.util import create_article_path, default_message from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata @@ -60,6 +60,7 @@ def load_extensions(): except ImportError: logger.critical("No extensions module found. What's going on?") sys.exit(1) + storage = datafile # Remove previous data holding file if exists and limitfetch allows @@ -229,11 +230,12 @@ def day_overview(): def rc_processor(change, changed_categories): """Prepares essential information for both embed and compact message format.""" + from src.misc import LinkParser LinkParser = LinkParser() metadata = DiscordMessageMetadata("POST", rev_id=change.get("revid", None), log_id=change.get("logid", None), page_id=change.get("pageid", None)) logger.debug(change) - context = Context(settings["appearance"]["mode"], settings["webhookURL"], src.api.client.client) + context = Context(settings["appearance"]["mode"], settings["webhookURL"], client) if ("actionhidden" in change or "suppressed" in change) and "suppressed" not in settings["ignored"]: # if event is hidden using suppression context.event = "suppressed" discord_message: Optional[DiscordMessage] = default_message("suppressed", formatter_hooks)(context, change) @@ -269,6 +271,7 @@ def abuselog_processing(entry, recent_changes): # Log in and download wiki information wiki = Wiki(rc_processor, abuselog_processing) +client = src.api.client.Client(formatter_hooks, wiki) try: if settings["wiki_bot_login"] and settings["wiki_bot_password"]: wiki.log_in() From 18aae9eabeb781eb5a4b9b48c5e0a7e2b40c00bb Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 25 Apr 2021 15:03:04 +0200 Subject: [PATCH 009/173] Fixes --- extensions/base/mediawiki.py | 4 ++-- src/api/formatter.py | 13 ++++++------- src/api/hooks.py | 17 +++++++++++++++++ src/rcgcdw.py | 5 ++--- 4 files changed, 27 insertions(+), 12 deletions(-) create mode 100644 src/api/hooks.py diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 50d6ecc..9dfdd7e 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -94,6 +94,6 @@ class base(): logger.warning("Unable to download data on the edit content!") return embed - @formatter.compact(event="edit", mode="embed") - def compact_edit(self, change: dict): + @formatter.compact(event="edit", mode="compact") + def compact_edit(self, ctx: Context, change: dict): return DiscordMessage() diff --git a/src/api/formatter.py b/src/api/formatter.py index 318a4f8..36c3dd3 100644 --- a/src/api/formatter.py +++ b/src/api/formatter.py @@ -12,8 +12,7 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . - -import src.rcgcdw +import src.api.hooks import logging from src.configloader import settings from src.exceptions import FormatterBreaksAPISpec @@ -37,11 +36,11 @@ def _register_formatter(func: Callable[[dict], DiscordMessage], kwargs: dict[str if action_type is None: raise FormatterBreaksAPISpec("event type") if settings["appearance"]["mode"] == formatter_type: - if action_type in src.rcgcdw.formatter_hooks: + if action_type in src.api.hooks.formatter_hooks: logger.warning(f"Action {action_type} is already defined inside of " - f"{src.rcgcdw.formatter_hooks[action_type].__module__}! " + f"{src.api.hooks.formatter_hooks[action_type].__module__}! " f"Overwriting it with one from {func.__module__}") - src.rcgcdw.formatter_hooks[action_type] = func + src.api.hooks.formatter_hooks[action_type] = func def embed(**kwargs): @@ -59,7 +58,7 @@ def embed(**kwargs): return decorator_cont -def compact(func: Callable[[dict], DiscordMessage], **kwargs): +def compact(**kwargs): """ Decorator to register a formatter are return a function @@ -72,4 +71,4 @@ def compact(func: Callable[[dict], DiscordMessage], **kwargs): _register_formatter(func, kwargs, "compact") return func - return decorator_cont \ No newline at end of file + return decorator_cont diff --git a/src/api/hooks.py b/src/api/hooks.py new file mode 100644 index 0000000..5c7157e --- /dev/null +++ b/src/api/hooks.py @@ -0,0 +1,17 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +# Made just to avoid circular imports +formatter_hooks = {} diff --git a/src/rcgcdw.py b/src/rcgcdw.py index f3da4d7..08f77a4 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -19,7 +19,7 @@ # WARNING! SHITTY CODE AHEAD. ENTER ONLY IF YOU ARE SURE YOU CAN TAKE IT # You have been warned -import time, logging.config, requests, datetime, gettext, math, os.path, schedule, sys, re +import time, logging.config, requests, datetime, math, os.path, schedule, sys, re import src.misc from collections import defaultdict, Counter @@ -27,6 +27,7 @@ from collections import defaultdict, Counter from typing import Optional import src.api.client from src.api.context import Context +from src.api.hooks import formatter_hooks from src.configloader import settings from src.misc import add_to_dict, datafile, \ WIKI_API_PATH @@ -44,13 +45,11 @@ if settings["fandom_discussions"]["enabled"]: import src.discussions TESTING = True if "--test" in sys.argv else False # debug mode, pipeline testing -formatter_hooks = {} # Prepare logging logging.config.dictConfig(settings["logging"]) logger = logging.getLogger("rcgcdw") logger.debug("Current settings: {settings}".format(settings=settings)) -from src.migrations import * # migrations after logging def load_extensions(): From 0db3be3e762244b25d81874618de5fc6adf675d3 Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 27 Apr 2021 09:35:15 +0200 Subject: [PATCH 010/173] Changed to function format instead of method --- docs/API spec.md | 27 ++++---- extensions/base/mediawiki.py | 130 +++++++++++++++++------------------ src/api/context.py | 5 +- src/api/util.py | 45 +++++++++++- src/rcgcdw.py | 4 +- 5 files changed, 125 insertions(+), 86 deletions(-) diff --git a/docs/API spec.md b/docs/API spec.md index 977f406..5d9d332 100644 --- a/docs/API spec.md +++ b/docs/API spec.md @@ -44,22 +44,19 @@ _ = rc_formatters.gettext logger = logging.getLogger("extensions.abusefilter") -class abusefilter(): - def __init__(self, api): - super().__init__(api) + +@formatter.embed(event="abuselog/modify", mode="embed") +def embed_modify(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, webhook_url=ctx.webhook_url) + embed.set_link(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"]))) + embed["title"] = _("Edited abuse filter number {number}").format(number=change["logparams"]['newId']) + return embed - @formatter.embed(event="abuselog/modify", mode="embed") - def embed_modify(self, ctx: Context, change: dict) -> DiscordMessage: - embed = DiscordMessage(ctx.message_type, ctx.event, webhook_url=ctx.webhook_url) - embed.set_link(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"]))) - embed["title"] = _("Edited abuse filter number {number}").format(number=change["logparams"]['newId']) - return embed - - @formatter.compact(event="abuselog/modify") - def embed_modify(self, ctx: Context, change: dict) -> DiscordMessage: - link = link_formatter(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"]))) - content = _("[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})").format(author=author, author_url=author_url, number=change["logparams"]['newId'], filter_url=link) - return DiscordMessage +@formatter.compact(event="abuselog/modify") +def embed_modify(ctx: Context, change: dict) -> DiscordMessage: + link = link_formatter(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"]))) + content = _("[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})").format(author=author, author_url=author_url, number=change["logparams"]['newId'], filter_url=link) + return DiscordMessage ``` diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 9dfdd7e..6423a89 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -27,73 +27,69 @@ _ = rc_formatters.gettext logger = logging.getLogger("extensions.base") -class base(): - def __init__(self, api): - super().__init__(api) - - @formatter.embed(event="edit", mode="embed") - def embed_edit(self, ctx: Context, change: dict) -> DiscordMessage: - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - action = ctx.event - editsize = change["newlen"] - change["oldlen"] - if editsize > 0: - if editsize > 6032: - embed["color"] = 65280 +@formatter.embed(event="edit", mode="embed") +def embed_edit(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + action = ctx.event + editsize = change["newlen"] - change["oldlen"] + if editsize > 0: + if editsize > 6032: + embed["color"] = 65280 + else: + embed["color"] = 35840 + (math.floor(editsize / 52)) * 256 + elif editsize < 0: + if editsize < -6032: + embed["color"] = 16711680 + else: + embed["color"] = 9175040 + (math.floor((editsize * -1) / 52)) * 65536 + elif editsize == 0: + embed["color"] = 8750469 + if change["title"].startswith("MediaWiki:Tag-"): # Refresh tag list when tag display name is edited + ctx.client.refresh_internal_data() + embed.set_link("{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( + wiki=ctx.client.WIKI_SCRIPT_PATH, pageid=change["pageid"], diff=change["revid"], oldrev=change["old_revid"], + article=change["title"].replace(" ", "_").replace("%", "%25").replace("\\", "%5C").replace("&", "%26"))) + embed["title"] = "{redirect}{article} ({new}{minor}{bot}{space}{editsize})".format( + redirect="⤷ " if "redirect" in change else "", article=change["title"], editsize="+" + str( + editsize) if editsize > 0 else editsize, new=_("(N!) ") if action == "new" else "", + minor=_("m") if action == "edit" and "minor" in change else "", bot=_('b') if "bot" in change else "", + space=" " if "bot" in change or (action == "edit" and "minor" in change) or action == "new" else "") + if settings["appearance"]["embed"]["show_edit_changes"]: + try: + if action == "new": + changed_content = ctx.client.make_api_request( + "{wiki}?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format( + wiki=ctx.client.WIKI_API_PATH, diff=change["revid"] + ), "compare", "*") else: - embed["color"] = 35840 + (math.floor(editsize / 52)) * 256 - elif editsize < 0: - if editsize < -6032: - embed["color"] = 16711680 - else: - embed["color"] = 9175040 + (math.floor((editsize * -1) / 52)) * 65536 - elif editsize == 0: - embed["color"] = 8750469 - if change["title"].startswith("MediaWiki:Tag-"): # Refresh tag list when tag display name is edited - ctx.client.refresh_internal_data() - link = "{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( - wiki=ctx.client.WIKI_SCRIPT_PATH, pageid=change["pageid"], diff=change["revid"], oldrev=change["old_revid"], - article=change["title"].replace(" ", "_").replace("%", "%25").replace("\\", "%5C").replace("&", "%26")) - embed["title"] = "{redirect}{article} ({new}{minor}{bot}{space}{editsize})".format( - redirect="⤷ " if "redirect" in change else "", article=change["title"], editsize="+" + str( - editsize) if editsize > 0 else editsize, new=_("(N!) ") if action == "new" else "", - minor=_("m") if action == "edit" and "minor" in change else "", bot=_('b') if "bot" in change else "", - space=" " if "bot" in change or (action == "edit" and "minor" in change) or action == "new" else "") - if settings["appearance"]["embed"]["show_edit_changes"]: - try: - if action == "new": - changed_content = ctx.client.make_api_request( - "{wiki}?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format( - wiki=ctx.client.WIKI_API_PATH, diff=change["revid"] - ), "compare", "*") + changed_content = ctx.client.make_api_request( + "{wiki}?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( + wiki=ctx.client.WIKI_API_PATH, diff=change["revid"], oldrev=change["old_revid"] + ), "compare", "*") + except ServerError: + changed_content = None + if changed_content: + EditDiff = ctx.client.content_parser() + EditDiff.feed(changed_content) + if EditDiff.small_prev_del: + if EditDiff.small_prev_del.replace("~~", "").isspace(): + EditDiff.small_prev_del = _('__Only whitespace__') else: - changed_content = ctx.client.make_api_request( - "{wiki}?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( - wiki=ctx.client.WIKI_API_PATH, diff=change["revid"], oldrev=change["old_revid"] - ), "compare", "*") - except (ServerError): - changed_content = None - if changed_content: - EditDiff = ctx.client.content_parser() - EditDiff.feed(changed_content) - if EditDiff.small_prev_del: - if EditDiff.small_prev_del.replace("~~", "").isspace(): - EditDiff.small_prev_del = _('__Only whitespace__') - else: - EditDiff.small_prev_del = EditDiff.small_prev_del.replace("~~~~", "") - if EditDiff.small_prev_ins: - if EditDiff.small_prev_ins.replace("**", "").isspace(): - EditDiff.small_prev_ins = _('__Only whitespace__') - else: - EditDiff.small_prev_ins = EditDiff.small_prev_ins.replace("****", "") - logger.debug("Changed content: {}".format(EditDiff.small_prev_ins)) - if EditDiff.small_prev_del and not action == "new": - embed.add_field(_("Removed"), "{data}".format(data=EditDiff.small_prev_del), inline=True) - if EditDiff.small_prev_ins: - embed.add_field(_("Added"), "{data}".format(data=EditDiff.small_prev_ins), inline=True) - else: - logger.warning("Unable to download data on the edit content!") - return embed + EditDiff.small_prev_del = EditDiff.small_prev_del.replace("~~~~", "") + if EditDiff.small_prev_ins: + if EditDiff.small_prev_ins.replace("**", "").isspace(): + EditDiff.small_prev_ins = _('__Only whitespace__') + else: + EditDiff.small_prev_ins = EditDiff.small_prev_ins.replace("****", "") + logger.debug("Changed content: {}".format(EditDiff.small_prev_ins)) + if EditDiff.small_prev_del and not action == "new": + embed.add_field(_("Removed"), "{data}".format(data=EditDiff.small_prev_del), inline=True) + if EditDiff.small_prev_ins: + embed.add_field(_("Added"), "{data}".format(data=EditDiff.small_prev_ins), inline=True) + else: + logger.warning("Unable to download data on the edit content!") + return embed - @formatter.compact(event="edit", mode="compact") - def compact_edit(self, ctx: Context, change: dict): - return DiscordMessage() +@formatter.compact(event="edit", mode="compact") +def compact_edit(ctx: Context, change: dict): + return DiscordMessage() diff --git a/src/api/context.py b/src/api/context.py index 365d0f7..f61c76e 100644 --- a/src/api/context.py +++ b/src/api/context.py @@ -23,4 +23,7 @@ class Context: self.event = None def set_categories(self, cats): - self.categories = cats \ No newline at end of file + self.categories = cats + + def set_parsedcomment(self, parsedcomment: str): + self.parsedcomment = parsedcomment \ No newline at end of file diff --git a/src/api/util.py b/src/api/util.py index 01aab94..ada568e 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -18,7 +18,9 @@ from typing import Optional, Callable from src.discord.message import DiscordMessage from src.configloader import settings import src.misc +import logging +logger = logging.getLogger("src.api.util") def default_message(event: str, formatter_hooks: dict) -> Callable: """Returns a method of a formatter responsible for the event or None if such does not exist.""" @@ -37,4 +39,45 @@ def escape_formatting(data: str) -> str: def create_article_path(article: str) -> str: """Takes the string and creates an URL with it as the article name""" - return src.misc.WIKI_ARTICLE_PATH.replace("$1", article) \ No newline at end of file + return src.misc.WIKI_ARTICLE_PATH.replace("$1", article) + + +def embed_helper(ctx, message: DiscordMessage, change: dict): + """Helps in preparing common edit/log fields for events. Sets up: + + author, author_url, icon""" + + def format_user(change, recent_changes, action): + if "anon" in change: + author_url = create_article_path("Special:Contributions/{user}".format( + user=change["user"].replace(" ", "_"))) # Replace here needed in case of #75 + logger.debug("current user: {} with cache of IPs: {}".format(change["user"], recent_changes.map_ips.keys())) + if change["user"] not in list(recent_changes.map_ips.keys()): + contibs = ctx.client.make_api_request( + "{wiki}?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format( + wiki=ctx.client.WIKI_API_PATH, user=change["user"], timestamp=change["timestamp"]), "query", + "usercontribs") + if contibs is None: + logger.warning( + "WARNING: Something went wrong when checking amount of contributions for given IP address") + if settings.get("hide_ips", False): + change["user"] = _("Unregistered user") + change["user"] = change["user"] + "(?)" + else: + recent_changes.map_ips[change["user"]] = len(contibs) + logger.debug( + "Current params user {} and state of map_ips {}".format(change["user"], recent_changes.map_ips)) + if settings.get("hide_ips", False): + change["user"] = _("Unregistered user") + change["user"] = "{author} ({contribs})".format(author=change["user"], contribs=len(contibs)) + else: + logger.debug( + "Current params user {} and state of map_ips {}".format(change["user"], recent_changes.map_ips)) + if action in ("edit", "new"): + recent_changes.map_ips[change["user"]] += 1 + change["user"] = "{author} ({amount})".format( + author=change["user"] if settings.get("hide_ips", False) is False else _("Unregistered user"), + amount=recent_changes.map_ips[change["user"]]) + else: + author_url = create_article_path("User:{}".format(change["user"].replace(" ", "_"))) + message.set_author(change["user"], author_url) diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 08f77a4..9b699cb 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -245,6 +245,7 @@ def rc_processor(change, changed_categories): parsed_comment = re.sub(r"(`|_|\*|~|{|}|\|\|)", "\\\\\\1", parsed_comment) else: parsed_comment = _("~~hidden~~") + context.set_parsedcomment(parsed_comment) if "userhidden" in change: change["user"] = _("hidden") if change.get("ns", -1) in settings.get("ignored_namespaces", ()): @@ -268,6 +269,7 @@ def abuselog_processing(entry, recent_changes): abuselog_appearance_mode(entry, recent_changes) +load_extensions() # Log in and download wiki information wiki = Wiki(rc_processor, abuselog_processing) client = src.api.client.Client(formatter_hooks, wiki) @@ -306,8 +308,6 @@ if 1 == 2: # additional translation strings in unreachable code _("autoreview"), _("autopatrol"), _("wiki_guardian"), ngettext("second", "seconds", 1), ngettext("minute", "minutes", 1), ngettext("hour", "hours", 1), ngettext("day", "days", 1), ngettext("week", "weeks", 1), ngettext("month", "months",1), ngettext("year", "years", 1), ngettext("millennium", "millennia", 1), ngettext("decade", "decades", 1), ngettext("century", "centuries", 1)) # noinspection PyUnreachableCode -load_extensions() - if TESTING: logger.debug("DEBUGGING ") From 7eb06e5335244d7dacca726bdfcb58e8e59127cd Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 27 Apr 2021 13:49:22 +0200 Subject: [PATCH 011/173] Updated dependency requirements, dropping support for Python 3.6 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 43e3088..104c1ba 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ * Very customizable ### Dependencies ### -* **Python 3.6+** +* **Python 3.7+** * requests 2.18.4+ * beautifulsoup 4.6.0+ * schedule 0.5.0+ From 1b3ffb0228984cfdbcf87b758488847ddb7e32a1 Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 27 Apr 2021 15:10:29 +0200 Subject: [PATCH 012/173] Further work and some improvements --- extensions/base/mediawiki.py | 66 +++++++++++++++++++++++-------- src/api/client.py | 17 ++++++-- src/api/context.py | 7 +++- src/api/formatter.py | 7 ++-- src/api/util.py | 76 +++++++++++++++++++----------------- src/rcgcdw.py | 1 + src/wiki.py | 18 +++------ 7 files changed, 119 insertions(+), 73 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 6423a89..2b39ab6 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -19,6 +19,7 @@ from src.discord.message import DiscordMessage from src.api import formatter from src.i18n import rc_formatters from src.api.context import Context +from src.api.util import embed_helper from src.configloader import settings from src.exceptions import * @@ -27,28 +28,25 @@ _ = rc_formatters.gettext logger = logging.getLogger("extensions.base") +# Page edit - event edit + @formatter.embed(event="edit", mode="embed") def embed_edit(ctx: Context, change: dict) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) action = ctx.event editsize = change["newlen"] - change["oldlen"] if editsize > 0: - if editsize > 6032: - embed["color"] = 65280 - else: - embed["color"] = 35840 + (math.floor(editsize / 52)) * 256 + embed["color"] = min(65280, 35840 + (math.floor(editsize / 52)) * 256) # Choose shade of green elif editsize < 0: - if editsize < -6032: - embed["color"] = 16711680 - else: - embed["color"] = 9175040 + (math.floor((editsize * -1) / 52)) * 65536 + embed["color"] = min(16711680, 9175040 + (math.floor(abs(editsize) / 52)) * 65536) # Choose shade of red elif editsize == 0: embed["color"] = 8750469 if change["title"].startswith("MediaWiki:Tag-"): # Refresh tag list when tag display name is edited ctx.client.refresh_internal_data() - embed.set_link("{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( + embed["link"] = "{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( wiki=ctx.client.WIKI_SCRIPT_PATH, pageid=change["pageid"], diff=change["revid"], oldrev=change["old_revid"], - article=change["title"].replace(" ", "_").replace("%", "%25").replace("\\", "%5C").replace("&", "%26"))) + article=change["title"].replace(" ", "_").replace("%", "%25").replace("\\", "%5C").replace("&", "%26")) embed["title"] = "{redirect}{article} ({new}{minor}{bot}{space}{editsize})".format( redirect="⤷ " if "redirect" in change else "", article=change["title"], editsize="+" + str( editsize) if editsize > 0 else editsize, new=_("(N!) ") if action == "new" else "", @@ -58,14 +56,12 @@ def embed_edit(ctx: Context, change: dict) -> DiscordMessage: try: if action == "new": changed_content = ctx.client.make_api_request( - "{wiki}?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format( - wiki=ctx.client.WIKI_API_PATH, diff=change["revid"] + "?action=compare&format=json&torev={diff}&topst=1&prop=diff".format(diff=change["revid"] ), "compare", "*") else: changed_content = ctx.client.make_api_request( - "{wiki}?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( - wiki=ctx.client.WIKI_API_PATH, diff=change["revid"], oldrev=change["old_revid"] - ), "compare", "*") + "?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( + diff=change["revid"], oldrev=change["old_revid"]), "compare", "*") except ServerError: changed_content = None if changed_content: @@ -90,6 +86,44 @@ def embed_edit(ctx: Context, change: dict) -> DiscordMessage: logger.warning("Unable to download data on the edit content!") return embed + @formatter.compact(event="edit", mode="compact") def compact_edit(ctx: Context, change: dict): - return DiscordMessage() + action = ctx.event + edit_link = link_formatter("{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( + wiki=ctx.client.WIKI_SCRIPT_PATH, pageid=change["pageid"], diff=change["revid"], oldrev=change["old_revid"], + article=change["title"])) + logger.debug(edit_link) + edit_size = change["newlen"] - change["oldlen"] + sign = "" + if edit_size > 0: + sign = "+" + bold = "" + if abs(edit_size) > 500: + bold = "**" + if change["title"].startswith("MediaWiki:Tag-"): + pass + if action == "edit": + content = _( + "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}({sign}{edit_size}){bold}").format( + author=author, author_url=author_url, article=change["title"], edit_link=edit_link, comment=parsed_comment, + edit_size=edit_size, sign=sign, bold=bold) + else: + content = _( + "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}({sign}{edit_size}){bold}").format( + author=author, author_url=author_url, article=change["title"], edit_link=edit_link, comment=parsed_comment, + edit_size=edit_size, sign=sign, bold=bold) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# Page creation - event new + +@formatter.embed(event="new", mode="embed") +def embed_new(ctx, change): + return embed_edit(ctx, change) + + +@formatter.compact(event="new", mode="compact") +def compact_new(ctx, change): + return compact_edit(ctx, change) + diff --git a/src/api/client.py b/src/api/client.py index f72f124..ddacaf4 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -14,9 +14,14 @@ # along with RcGcDw. If not, see . +from __future__ import annotations import src.misc from typing import Union from collections import OrderedDict +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from src.wiki import Wiki class Client: @@ -25,7 +30,7 @@ class Client: """ def __init__(self, hooks, wiki): self._formatters = hooks - self.__recent_changes = wiki + self.__recent_changes: Wiki = wiki self.WIKI_API_PATH = src.misc.WIKI_API_PATH self.WIKI_ARTICLE_PATH = src.misc.WIKI_ARTICLE_PATH self.WIKI_SCRIPT_PATH = src.misc.WIKI_SCRIPT_PATH @@ -37,7 +42,7 @@ class Client: """Refreshes internal storage data for wiki tags and MediaWiki messages.""" self.__recent_changes.init_info() - def make_api_request(self, params: Union[str, OrderedDict], *json_path: list[str], timeout: int=10, allow_redirects: bool=False): + def make_api_request(self, params: Union[str, OrderedDict], *json_path: str, timeout: int = 10, allow_redirects: bool = False): """Method to GET request data from the wiki's API with error handling including recognition of MediaWiki errors. Parameters: @@ -58,7 +63,11 @@ class Client: BadRequest: When params argument is of wrong type MediaWikiError: When MediaWiki returns an error """ - return self.__recent_changes.api_request(params, *json_path, timeout, allow_redirects) + return self.__recent_changes.api_request(params, *json_path, timeout=timeout, allow_redirects=allow_redirects) def get_formatters(self): - return self._formatters \ No newline at end of file + return self._formatters + + def get_ipmapper(self) -> dict: + """Returns a dict mapping IPs with amount of their edits""" + return self.__recent_changes.map_ips \ No newline at end of file diff --git a/src/api/context.py b/src/api/context.py index f61c76e..13aa7fe 100644 --- a/src/api/context.py +++ b/src/api/context.py @@ -12,11 +12,16 @@ # # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . +from __future__ import annotations +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from src.api.client import Client class Context: """Context object containing client and some metadata regarding specific formatter call""" - def __init__(self, message_type: str, webhook_url: str, client): + def __init__(self, message_type: str, webhook_url: str, client: Client): self.client = client self.webhook_url = webhook_url self.message_type = message_type diff --git a/src/api/formatter.py b/src/api/formatter.py index 36c3dd3..76ea727 100644 --- a/src/api/formatter.py +++ b/src/api/formatter.py @@ -47,7 +47,8 @@ def embed(**kwargs): """ Decorator to register a formatter are return a function - :param kwargs: + :key event: Event string + :key mode: Discord Message mode :return: """ @@ -62,8 +63,8 @@ def compact(**kwargs): """ Decorator to register a formatter are return a function - :param func: - :param kwargs: + :key event: Event string + :key mode: Discord Message mode :return: """ diff --git a/src/api/util.py b/src/api/util.py index ada568e..5529017 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -12,14 +12,18 @@ # # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . +from __future__ import annotations import re from urllib.parse import quote -from typing import Optional, Callable +from typing import Optional, Callable, TYPE_CHECKING from src.discord.message import DiscordMessage from src.configloader import settings import src.misc import logging +if TYPE_CHECKING: + from src.api.context import Context + logger = logging.getLogger("src.api.util") def default_message(event: str, formatter_hooks: dict) -> Callable: @@ -42,42 +46,42 @@ def create_article_path(article: str) -> str: return src.misc.WIKI_ARTICLE_PATH.replace("$1", article) -def embed_helper(ctx, message: DiscordMessage, change: dict): - """Helps in preparing common edit/log fields for events. Sets up: +def embed_helper(ctx: Context, message: DiscordMessage, change: dict) -> None: + """Helps in preparing common edit/log fields for events. Passed arguments automatically become saturated with needed data. - author, author_url, icon""" - - def format_user(change, recent_changes, action): - if "anon" in change: - author_url = create_article_path("Special:Contributions/{user}".format( - user=change["user"].replace(" ", "_"))) # Replace here needed in case of #75 - logger.debug("current user: {} with cache of IPs: {}".format(change["user"], recent_changes.map_ips.keys())) - if change["user"] not in list(recent_changes.map_ips.keys()): - contibs = ctx.client.make_api_request( - "{wiki}?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format( - wiki=ctx.client.WIKI_API_PATH, user=change["user"], timestamp=change["timestamp"]), "query", - "usercontribs") - if contibs is None: - logger.warning( - "WARNING: Something went wrong when checking amount of contributions for given IP address") - if settings.get("hide_ips", False): - change["user"] = _("Unregistered user") - change["user"] = change["user"] + "(?)" - else: - recent_changes.map_ips[change["user"]] = len(contibs) - logger.debug( - "Current params user {} and state of map_ips {}".format(change["user"], recent_changes.map_ips)) - if settings.get("hide_ips", False): - change["user"] = _("Unregistered user") - change["user"] = "{author} ({contribs})".format(author=change["user"], contribs=len(contibs)) + Currently handles: setting usernames""" + # TODO Repurpose it so change['user'] stays the same + if "anon" in change: + author_url = create_article_path("Special:Contributions/{user}".format( + user=change["user"].replace(" ", "_"))) # Replace here needed in case of #75 + ip_mapper = ctx.client.get_ipmapper() + logger.debug("current user: {} with cache of IPs: {}".format(change["user"], ip_mapper.keys())) + if change["user"] not in list(ip_mapper.keys()): + contibs = ctx.client.make_api_request( + "{wiki}?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format( + wiki=ctx.client.WIKI_API_PATH, user=change["user"], timestamp=change["timestamp"]), "query", + "usercontribs") + if contibs is None: + logger.warning( + "WARNING: Something went wrong when checking amount of contributions for given IP address") + if settings.get("hide_ips", False): + change["user"] = _("Unregistered user") + change["user"] = change["user"] + "(?)" else: + ip_mapper[change["user"]] = len(contibs) logger.debug( - "Current params user {} and state of map_ips {}".format(change["user"], recent_changes.map_ips)) - if action in ("edit", "new"): - recent_changes.map_ips[change["user"]] += 1 - change["user"] = "{author} ({amount})".format( - author=change["user"] if settings.get("hide_ips", False) is False else _("Unregistered user"), - amount=recent_changes.map_ips[change["user"]]) + "Current params user {} and state of map_ips {}".format(change["user"], ip_mapper)) + if settings.get("hide_ips", False): + change["user"] = _("Unregistered user") + change["user"] = "{author} ({contribs})".format(author=change["user"], contribs=len(contibs)) else: - author_url = create_article_path("User:{}".format(change["user"].replace(" ", "_"))) - message.set_author(change["user"], author_url) + logger.debug( + "Current params user {} and state of map_ips {}".format(change["user"], ip_mapper)) + if ctx.event in ("edit", "new"): + ip_mapper[change["user"]] += 1 + change["user"] = "{author} ({amount})".format( + author=change["user"] if settings.get("hide_ips", False) is False else _("Unregistered user"), + amount=ip_mapper[change["user"]]) + else: + author_url = create_article_path("User:{}".format(change["user"].replace(" ", "_"))) + message.set_author(change["user"], author_url) diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 9b699cb..6fe2da6 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -262,6 +262,7 @@ def rc_processor(change, changed_categories): identification_string = change.get("type", "unknown") # If event doesn't have a type if identification_string in settings["ignored"]: return + context.event = identification_string discord_message: Optional[DiscordMessage] = default_message(identification_string, formatter_hooks)(context, change) send_to_discord(discord_message, metadata) diff --git a/src/wiki.py b/src/wiki.py index 1d9f386..cae969c 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -280,7 +280,7 @@ class Wiki(object): sys.exit(0) return request - def api_request(self, params: Union[str, OrderedDict], *json_path: list[str], timeout: int=10, allow_redirects: bool=False): + def api_request(self, params: Union[str, OrderedDict], *json_path: str, timeout: int = 10, allow_redirects: bool = False): """Method to GET request data from the wiki's API with error handling including recognition of MediaWiki errors. Parameters: @@ -303,22 +303,14 @@ class Wiki(object): """ # Making request try: - if isinstance(params, str): + if isinstance(params, str): # Todo Make it so there are some default arguments like warning/error format appended request = self.session.get(WIKI_API_PATH + params, timeout=timeout, allow_redirects=allow_redirects) elif isinstance(params, OrderedDict): request = self.session.get(WIKI_API_PATH, params=params, timeout=timeout, allow_redirects=allow_redirects) else: raise BadRequest(params) - except requests.exceptions.Timeout: - logger.warning("Reached timeout error for request on link {url}".format(url=WIKI_API_PATH+str(params))) - self.downtime_controller(True) - raise ServerError - except requests.exceptions.ConnectionError: - logger.warning("Reached connection error for request on link {url}".format(url=WIKI_API_PATH+str(params))) - self.downtime_controller(True) - raise ServerError - except requests.exceptions.ChunkedEncodingError: - logger.warning("Detected faulty response from the web server for request on link {url}".format(url=WIKI_API_PATH+str(params))) + except (requests.exceptions.Timeout, requests.exceptions.ConnectionError, requests.exceptions.ChunkedEncodingError) as exc: + logger.warning("Reached {error} error for request on link {url}".format(error=repr(exc), url=WIKI_API_PATH+str(params))) self.downtime_controller(True) raise ServerError # Catching HTTP errors @@ -337,7 +329,7 @@ class Wiki(object): # JSON Extraction try: request_json = parse_mw_request_info(request.json(), request.url) - for item in request_json: + for item in json_path: request_json = request_json[item] except ValueError: logger.warning("ValueError when extracting JSON data on {url}".format(url=request.url)) From 65400f3fb5b5220aa444808d278a84626394f963 Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 27 Apr 2021 23:51:59 +0200 Subject: [PATCH 013/173] Fixes to #200 and #198 --- src/misc.py | 6 +++--- src/rc.py | 24 +++++++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/misc.py b/src/misc.py index f241806..ee9ab47 100644 --- a/src/misc.py +++ b/src/misc.py @@ -54,7 +54,7 @@ class DataFile: def generate_datafile(): """Generate a data.json file from a template.""" try: - with open("data.json", 'w') as data: + with open("data.json", 'w', encoding="utf-8") as data: data.write(json.dumps(data_template, indent=4)) except PermissionError: misc_logger.critical("Could not create a data file (no permissions). No way to store last edit.") @@ -65,7 +65,7 @@ class DataFile: :rtype: dict """ try: - with open("data.json") as data: + with open("data.json", encoding="utf-8") as data: return json.loads(data.read()) except FileNotFoundError: self.generate_datafile() @@ -77,7 +77,7 @@ class DataFile: if self.changed is False: # don't cause unnecessary write operations return try: - with open("data.json", "w") as data_file: + with open("data.json", "w", encoding="utf-8") as data_file: data_file.write(json.dumps(self.data, indent=4)) self.changed = False except PermissionError: diff --git a/src/rc.py b/src/rc.py index 2accac9..2b6b5a4 100644 --- a/src/rc.py +++ b/src/rc.py @@ -63,6 +63,7 @@ class Recent_Changes_Class(object): self.session = session self.logged_in = False self.initial_run_complete = False + self.memory_id = None # Used only when limitrefetch is set to -1 to avoid reading from storage @staticmethod def handle_mw_errors(request): @@ -114,9 +115,12 @@ class Recent_Changes_Class(object): messagequeue.resend_msgs() last_check = self.fetch_changes(amount=amount) if last_check is not None: - storage["rcid"] = last_check[0] if last_check[0] else storage["rcid"] - storage["abuse_log_id"] = last_check[1] if last_check[1] else storage["abuse_log_id"] - storage.save_datafile() + if settings["limitrefetch"] != -1: + storage["rcid"] = last_check[0] if last_check[0] else storage["rcid"] + storage["abuse_log_id"] = last_check[1] if last_check[1] else storage["abuse_log_id"] + storage.save_datafile() + else: + self.memory_id = last_check self.initial_run_complete = True def fetch_recentchanges_request(self, amount): @@ -155,8 +159,11 @@ class Recent_Changes_Class(object): categorize_events = {} new_events = 0 changes.reverse() - highest_id = recent_id = storage["rcid"] - dry_run = True if recent_id is None else False + if settings["limitrefetch"] == -1 and self.memory_id is not None: + highest_id = recent_id = self.memory_id[0] + else: + highest_id = recent_id = storage["rcid"] + dry_run = True if recent_id is None or (self.memory_id is None and settings["limitrefetch"] == -1) else False for change in changes: if not dry_run and not (change["rcid"] <= recent_id): new_events += 1 @@ -217,8 +224,11 @@ class Recent_Changes_Class(object): if not abuse_log: return None abuse_log.reverse() - recent_id = storage["abuse_log_id"] - dryrun = True if recent_id is None else False + if self.memory_id is not None and settings["limitrefetch"] == -1: + recent_id = self.memory_id[1] + else: + recent_id = storage["abuse_log_id"] + dryrun = True if recent_id is None or (self.initial_run_complete is False and settings["limitrefetch"] == -1) else False for entry in abuse_log: if dryrun: continue From e972c4a5280f30f29c44cc80a031afd3cd91bb30 Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 28 Apr 2021 00:18:17 +0200 Subject: [PATCH 014/173] Bump version --- src/configloader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configloader.py b/src/configloader.py index 9ca412a..7e908dc 100644 --- a/src/configloader.py +++ b/src/configloader.py @@ -13,7 +13,7 @@ def load_settings(): if settings["limitrefetch"] < settings["limit"] and settings["limitrefetch"] != -1: settings["limitrefetch"] = settings["limit"] if "user-agent" in settings["header"]: - settings["header"]["user-agent"] = settings["header"]["user-agent"].format(version="1.13.1.2") # set the version in the useragent + settings["header"]["user-agent"] = settings["header"]["user-agent"].format(version="1.13.1.3") # set the version in the useragent except FileNotFoundError: logging.critical("No config file could be found. Please make sure settings.json is in the directory.") sys.exit(1) From d0795c76e777d89ea08cbab50a9dab5e6a535a34 Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 28 Apr 2021 13:37:32 +0200 Subject: [PATCH 015/173] More work on all things! --- extensions/base/mediawiki.py | 56 ++++++++++++++---------------- src/api/client.py | 2 ++ src/api/util.py | 67 ++++++++++++++++++++++++++++++++++-- src/discord/message.py | 2 ++ src/discussion_formatters.py | 4 +-- src/wiki.py | 3 +- 6 files changed, 98 insertions(+), 36 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 2b39ab6..6148f81 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -19,7 +19,7 @@ from src.discord.message import DiscordMessage from src.api import formatter from src.i18n import rc_formatters from src.api.context import Context -from src.api.util import embed_helper +from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author from src.configloader import settings from src.exceptions import * @@ -44,20 +44,29 @@ def embed_edit(ctx: Context, change: dict) -> DiscordMessage: embed["color"] = 8750469 if change["title"].startswith("MediaWiki:Tag-"): # Refresh tag list when tag display name is edited ctx.client.refresh_internal_data() - embed["link"] = "{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( - wiki=ctx.client.WIKI_SCRIPT_PATH, pageid=change["pageid"], diff=change["revid"], oldrev=change["old_revid"], - article=change["title"].replace(" ", "_").replace("%", "%25").replace("\\", "%5C").replace("&", "%26")) + # Sparse is better than dense. + # Readability counts. + embed["url"] = "{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( + wiki=ctx.client.WIKI_SCRIPT_PATH, + pageid=change["pageid"], + diff=change["revid"], + oldrev=change["old_revid"], + article=sanitize_to_url(change["title"]) + ) embed["title"] = "{redirect}{article} ({new}{minor}{bot}{space}{editsize})".format( - redirect="⤷ " if "redirect" in change else "", article=change["title"], editsize="+" + str( - editsize) if editsize > 0 else editsize, new=_("(N!) ") if action == "new" else "", - minor=_("m") if action == "edit" and "minor" in change else "", bot=_('b') if "bot" in change else "", + redirect="⤷ " if "redirect" in change else "", + article=change["title"], + editsize="+" + str(editsize) if editsize > 0 else editsize, + new=_("(N!) ") if action == "new" else "", + minor=_("m") if action == "edit" and "minor" in change else "", + bot=_('b') if "bot" in change else "", space=" " if "bot" in change or (action == "edit" and "minor" in change) or action == "new" else "") if settings["appearance"]["embed"]["show_edit_changes"]: try: if action == "new": changed_content = ctx.client.make_api_request( - "?action=compare&format=json&torev={diff}&topst=1&prop=diff".format(diff=change["revid"] - ), "compare", "*") + "?action=compare&format=json&fromslots=main&torev={diff}&fromtext-main=&topst=1&prop=diff".format( + diff=change["revid"]), "compare", "*") else: changed_content = ctx.client.make_api_request( "?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( @@ -65,34 +74,21 @@ def embed_edit(ctx: Context, change: dict) -> DiscordMessage: except ServerError: changed_content = None if changed_content: - EditDiff = ctx.client.content_parser() - EditDiff.feed(changed_content) - if EditDiff.small_prev_del: - if EditDiff.small_prev_del.replace("~~", "").isspace(): - EditDiff.small_prev_del = _('__Only whitespace__') - else: - EditDiff.small_prev_del = EditDiff.small_prev_del.replace("~~~~", "") - if EditDiff.small_prev_ins: - if EditDiff.small_prev_ins.replace("**", "").isspace(): - EditDiff.small_prev_ins = _('__Only whitespace__') - else: - EditDiff.small_prev_ins = EditDiff.small_prev_ins.replace("****", "") - logger.debug("Changed content: {}".format(EditDiff.small_prev_ins)) - if EditDiff.small_prev_del and not action == "new": - embed.add_field(_("Removed"), "{data}".format(data=EditDiff.small_prev_del), inline=True) - if EditDiff.small_prev_ins: - embed.add_field(_("Added"), "{data}".format(data=EditDiff.small_prev_ins), inline=True) + parse_mediawiki_changes(ctx, changed_content, embed) else: logger.warning("Unable to download data on the edit content!") + embed["description"] = ctx.parsedcomment return embed @formatter.compact(event="edit", mode="compact") def compact_edit(ctx: Context, change: dict): + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + author, author_url = compact_author(ctx, change) action = ctx.event - edit_link = link_formatter("{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( + edit_link = clean_link("{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( wiki=ctx.client.WIKI_SCRIPT_PATH, pageid=change["pageid"], diff=change["revid"], oldrev=change["old_revid"], - article=change["title"])) + article=sanitize_to_url(change["title"]))) logger.debug(edit_link) edit_size = change["newlen"] - change["oldlen"] sign = "" @@ -101,8 +97,6 @@ def compact_edit(ctx: Context, change: dict): bold = "" if abs(edit_size) > 500: bold = "**" - if change["title"].startswith("MediaWiki:Tag-"): - pass if action == "edit": content = _( "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}({sign}{edit_size}){bold}").format( @@ -116,7 +110,7 @@ def compact_edit(ctx: Context, change: dict): return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) -# Page creation - event new +# Page creation - event new aliases to embed_edit since they share a lot of their code @formatter.embed(event="new", mode="embed") def embed_new(ctx, change): diff --git a/src/api/client.py b/src/api/client.py index ddacaf4..30ab395 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -36,6 +36,7 @@ class Client: self.WIKI_SCRIPT_PATH = src.misc.WIKI_SCRIPT_PATH self.WIKI_JUST_DOMAIN = src.misc.WIKI_JUST_DOMAIN self.content_parser = src.misc.ContentParser + self.tags = self.__recent_changes.tags #self.make_api_request: src.rc.wiki.__recent_changes.api_request = self.__recent_changes.api_request def refresh_internal_data(self): @@ -68,6 +69,7 @@ class Client: def get_formatters(self): return self._formatters + def get_ipmapper(self) -> dict: """Returns a dict mapping IPs with amount of their edits""" return self.__recent_changes.map_ips \ No newline at end of file diff --git a/src/api/util.py b/src/api/util.py index 5529017..9d95ee0 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -20,6 +20,9 @@ from src.discord.message import DiscordMessage from src.configloader import settings import src.misc import logging +from src.i18n import rc_formatters + +_ = rc_formatters.gettext if TYPE_CHECKING: from src.api.context import Context @@ -31,9 +34,39 @@ def default_message(event: str, formatter_hooks: dict) -> Callable: return formatter_hooks.get(event, formatter_hooks.get("generic", formatter_hooks["no_formatter"])) -def link_formatter(link: str) -> str: +def clean_link(link: str) -> str: + """Adds <> around the link to prevent its embedding""" + return "<" + link.replace(" ", "_") + ">" + + +def sanitize_to_markdown(text: str): + """Sanitizes given text to """ + + +def sanitize_to_url(text: str) -> str: # TODO ) replaces needed? """Formats a link to not embed it""" - return "<" + quote(link.replace(" ", "_"), "/:?=&") + ">" + return quote(text, " \\/:").replace(' ', "_") + + +def parse_mediawiki_changes(ctx: Context, content: str, embed: DiscordMessage) -> None: + """Parses MediaWiki changes and adds them to embed as fields "Added" and "Removed" """ + edit_diff = ctx.client.content_parser() + edit_diff.feed(content) + if edit_diff.small_prev_del: + if edit_diff.small_prev_del.replace("~~", "").isspace(): + edit_diff.small_prev_del = _('__Only whitespace__') + else: + edit_diff.small_prev_del = edit_diff.small_prev_del.replace("~~~~", "") + if edit_diff.small_prev_ins: + if edit_diff.small_prev_ins.replace("**", "").isspace(): + edit_diff.small_prev_ins = _('__Only whitespace__') + else: + edit_diff.small_prev_ins = edit_diff.small_prev_ins.replace("****", "") + logger.debug("Changed content: {}".format(edit_diff.small_prev_ins)) + if edit_diff.small_prev_del and not ctx.event == "new": + embed.add_field(_("Removed"), "{data}".format(data=edit_diff.small_prev_del), inline=True) + if edit_diff.small_prev_ins: + embed.add_field(_("Added"), "{data}".format(data=edit_diff.small_prev_ins), inline=True) def escape_formatting(data: str) -> str: @@ -46,6 +79,19 @@ def create_article_path(article: str) -> str: return src.misc.WIKI_ARTICLE_PATH.replace("$1", article) +def compact_author(ctx: Context, change: dict) -> (Optional[str], Optional[str]): + """Returns link to the author and the author itself respecting the settings""" + author, author_url = None, None + if ctx.event != "suppressed": + author_url = clean_link(create_article_path("User:{user}".format(user=change["user"]))) # TODO Sanitize user in here and in embed_helper + if "anon" in change: + change["user"] = _("Unregistered user") + author = change["user"] + else: + author = change["user"] + return author, author_url + + def embed_helper(ctx: Context, message: DiscordMessage, change: dict) -> None: """Helps in preparing common edit/log fields for events. Passed arguments automatically become saturated with needed data. @@ -84,4 +130,21 @@ def embed_helper(ctx: Context, message: DiscordMessage, change: dict) -> None: amount=ip_mapper[change["user"]]) else: author_url = create_article_path("User:{}".format(change["user"].replace(" ", "_"))) + if settings["appearance"]["embed"]["show_footer"]: + message["timestamp"] = change["timestamp"] + if "tags" in change and change["tags"]: + tag_displayname = [] + for tag in change["tags"]: + if tag in ctx.client.tags: + if ctx.client.tags[tag] is None: + continue # Ignore hidden tags + else: + tag_displayname.append(ctx.client.tags[tag]) + else: + tag_displayname.append(tag) + message.add_field(_("Tags"), ", ".join(tag_displayname)) + if ctx.categories is not None and not (len(ctx.categories["new"]) == 0 and len(ctx.categorie["removed"]) == 0): + new_cat = (_("**Added**: ") + ", ".join(list(ctx.categories["new"])[0:16]) + ("\n" if len(ctx.categories["new"])<=15 else _(" and {} more\n").format(len(ctx.categories["new"])-15))) if ctx.categories["new"] else "" + del_cat = (_("**Removed**: ") + ", ".join(list(ctx.categories["removed"])[0:16]) + ("" if len(ctx.categories["removed"])<=15 else _(" and {} more").format(len(ctx.categories["removed"])-15))) if ctx.categories["removed"] else "" + message.add_field(_("Changed categories"), new_cat + del_cat) message.set_author(change["user"], author_url) diff --git a/src/discord/message.py b/src/discord/message.py index fab107c..ceab2a5 100644 --- a/src/discord/message.py +++ b/src/discord/message.py @@ -72,6 +72,8 @@ class DiscordMessage: self.embed["color"] = math.floor(self.embed["color"]) if not self.embed["author"]["icon_url"] and settings["event_appearance"].get(self.event_type, {"icon": None})["icon"]: self.embed["author"]["icon_url"] = settings["event_appearance"][self.event_type]["icon"] + if len(self.embed["title"]) > 254: + self.embed["title"] = self.embed["title"][0:253] + "…" def set_author(self, name, url, icon_url=""): self.embed["author"]["name"] = name diff --git a/src/discussion_formatters.py b/src/discussion_formatters.py index af292d2..61c86de 100644 --- a/src/discussion_formatters.py +++ b/src/discussion_formatters.py @@ -19,7 +19,7 @@ import gettext from urllib.parse import quote_plus from src.configloader import settings -from src.api.util import link_formatter, escape_formatting, create_article_path +from src.api.util import escape_formatting, create_article_path, clean_link from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata from src.i18n import discussion_formatters @@ -44,7 +44,7 @@ def compact_formatter(post_type, post, article_paths): else: if post["createdBy"]["name"]: author = post["createdBy"]["name"] - author_url = link_formatter(create_article_path("User:{user}".format(user=author))) + author_url = clean_link(create_article_path("User:{user}".format(user=author))) else: author_url = "<{url}f/u/{creatorId}>".format(url=settings["fandom_discussions"]["wiki_url"], creatorId=post["creatorId"]) event_type = "discussion" diff --git a/src/wiki.py b/src/wiki.py index cae969c..cf9ce03 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -304,8 +304,9 @@ class Wiki(object): # Making request try: if isinstance(params, str): # Todo Make it so there are some default arguments like warning/error format appended - request = self.session.get(WIKI_API_PATH + params, timeout=timeout, allow_redirects=allow_redirects) + request = self.session.get(WIKI_API_PATH + params+"&errorformat=raw", timeout=timeout, allow_redirects=allow_redirects) elif isinstance(params, OrderedDict): + params["errorformat"] = "raw" request = self.session.get(WIKI_API_PATH, params=params, timeout=timeout, allow_redirects=allow_redirects) else: raise BadRequest(params) From 0a1e53e56ce0d45edf2fd8126dcbbe83eb24c376 Mon Sep 17 00:00:00 2001 From: MakandIv Date: Thu, 29 Apr 2021 05:46:26 +0000 Subject: [PATCH 016/173] Translated using Weblate (Ukrainian) Currently translated at 48.4% (123 of 254 strings) Translation: RcGcDw/rc_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/rc_formatters/uk/ --- locale/uk/LC_MESSAGES/rc_formatters.mo | Bin 18501 -> 18132 bytes locale/uk/LC_MESSAGES/rc_formatters.po | 26 ++++++++++++------------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/locale/uk/LC_MESSAGES/rc_formatters.mo b/locale/uk/LC_MESSAGES/rc_formatters.mo index d050d5bbe4874a711e476535ddfa3a9984180007..2647143b39785a87335736745f949e4eb24b754a 100644 GIT binary patch delta 3624 zcmZwIdr(x@9l-Ik5QuM)moGGzC5R$yfC>^oWs#MKJQ~m%G>NXT;tK5QvWky1Yp_$z zG))ZGAd^gM)7GYAjFWJ&5*5rp>5MZ;d)KL{)7tcr8k=UOX_7jbPBYVffA?+(W_rdS zpL6csJ@?$-`JMHx=<<2k$^ z|B0+vrSWGGW~1D<7EAF_l!*s12gfiAZ(%x4B|Wkr4J8xxn9cLmV|3(;-$D7pE9k^u z<6`_2@54FdT{2XN^5A+*!w!@M9K;qhQ07VGwPoSCDDyRA5r%L%p2o;3I#D{3n%OK% zZYajNxD(|;hf&Jm1(XN=ICgy$^BG@5rcf%?evuTE`^)eFtintTp=96$$`*~Ml7IQ& zLoUb!)0th0a4{xgIo^X+C~sbavY>4!4>%aR-j5pN7m;kM%eWuk#!cuU|84jK+=riI z6$a*#|0tc;dEG`l!c)G9QCx#gp0*yhqfB%T8!&MJ1%<6xi&wD@lNTyAijQC~rtvmi z_!Nfl4j#ar6p&p1ON35AD8AR<;7QUCC=nmMi%BlDe6vq5Kp5U{}>x*Qh|3EZ^8TI{69n~?&888Y{r}D z!aUAMliY~1;xl+0-$!}VF!`&%5nPR*Aakk$j>J0LjBXOx9F3+?Z3MOok=N(SD=&6reV7ikwt z#?NDfMXTIz*gu_{Q1;1Ej9+`tpuY2hU&w z4p&lA)&ZRJBDJ>G zq_U!^v9V0rLa^l%tuoe=T9DRE^b%5J(zX%-t7rfC9E|n9M7CO*6zeo1L(abxj>}iir1cS!C26fhoz=6qO1c^mFP&J+jw!{NPOOykFO4H@ z6_ylFn_QqBuu+tT^}|$!?L;!Mfgsb?F#_u+xl1~uB$g1;I@VjH3+eff~m`-q#tltE%{-0QgrNlmh!(sie znTtL`T9J)aoZF-f>bcNOJZ6kdTO4P6HX|c$b+Bi5w=eAL(0YRV{DDp_9P$QwyS-t5 zFre-BcKUj?9id>4<~-yLh5hZ_zHd9VaFAix8|w6h^~~AV;`zSrPR-Kml6)!EK6|!9 zJN(?Mb?oigZM>Q^#gXa@_(EQJ&ZJLtW6oNAYVwIJZ>Wn;CO>0GFf@57s!`8elwrJ) ze94h>*KM-4@J`?4d$ryJyQojb_d(#*s<9G29Ez#2MP6g$cE+JcHEkYu zOMYW>ezjYxZ7yr9TfVuu$uq6N+Z)c`5X)&WRHm)l*wCOgxf?xNg{RS7*HG!Mu5R(P zw(5h<`%}J5zRxAA+#U?OI*hlS>5ljnt|H@B*3h~7<~%I%(3XRTJ*_izd6obgIpLlFMf63Me`C_m()A~boyJYq8xH45)36pI zt31MLS+Qn)IrfcipFU8qMQzq)Fcezl^8Y|hd@TwS2= STCl)4yXr=~@hf*<;{O0YFR{A- delta 3618 zcmajgd2AF_9Ki9nr3K_DWhpH^Xs0JV=+c(9(90I&DilPh0!5CcEm)Tp+}%k_#-+bQ8&c1o?_kOcI z{;=(XO*Y?Yd+6he<|E>X$WWzT#a`Vx&<^#WkMCN3f_*tZWu0Hd-kkr65!k(_Qv9hH z4q=#v8JLazum<^4cX8+=kM+`#0oLIFY(qD`f>SYprw>Lqmf*7(jbEZX;3rJOUvMxc zFjxUjz${#anfMCY@iUbBFJQVXJ3L&eAzUa#4I8it*JBJ`!TuP|bW<@E`BPOK2I35q z`&w~0ZpL){(7JvZ2XWq$^vF0vF$JqIO48m$M`pMVWoA231~`s#<5f(?MDm`1BQX)3 zC>dLgGJ!296WD{Y(u+6+;N@oM3PsGDG z8SN~$0_!ZFL%HuPPQb)i^8qfb=KOtZ!H77e#^HLb!lSqsV^~!I9zzdyqi|ff!bitV z=R7XMS~gfdIF8L&$wt@UE*y=anmN(&C=YrHEAeZ*4UOt%LC6tWr zK*^kM7abO*4x)x9QC_28@t}>$rSiz8I!^_OzoQgmKPrhgNEIP3h#G}_MNLJLp;}P3 za1%-BLL7^FoA3dY702>Qum)9&Ww;7uEB52fcnULlzKUhEF*pjx<3{WJbDY8X zz#-;dx1y}{5EkK8%*A{TVjYKD@G&F_>I>Y7D$mT!E|iJE=u+OfUON=i4P)Y1`@iJrv>Oei#KW(bbudWwzWDJK6i6Gy4}!{Nr@7jc4ok$lP4Y(u&40?x<5EVm7HlwwO~Lk)Zx>v0zO zor~|`SRRy8X=c_nf;!;(>nPtV@{LsLQ95to4y@uS_u&L?YIv<0*IIqGK^xZ*+tf}QFd;J>93Qr>w4{lEq&LyPv zB<>{cAY{urHp!fakgdD5;|KI*yJlP0q{we0ddT~qPG^qw0rjO;5_b_SJouXp!9A3M z@)5Fn*_y6|G+CuI$wnO!Nem#O2x$q#VnXUjS{fl4Vdu>EUn*Xzwquh_NOPD3QzqS; zh-rirQ3gSM1)HRDnbns!qs8h+BRd}T}_Uh&|6yeYVp za1l};U5G3~S`D#?=p!ezY?EN&_NE_iox3gB+3U?mAqM|+)U7>1pld+ee;+Msl-(4 zViUF!6~qi8jNo@g#Szjb5mLa{TBgy`BOxTJ&fB=e>20XjoSN6UKucc1ab>cxxmQAn z-QDodPxOo7$D*A#{*Jz{PkyhCgXrJ%nQzRF=w{Pb^c`_iW3#ux-P-7C)KB%zBw7rQ z{e(?l9(f_m)x4;+S>MvXI;F$NGnvS&44KZH7WcxHnb)SKC&k1X=lUNCiP1W{MSpt0 zw$zR@?d0aV{~pS4#(W%NZ){q;$Sq0wYY~Bx6vGi87pBil%F4^n&Ckur%gf0duH_CZ zDHxWWOY2eX^mub>+|FjtLZ^3;yF{DlbUB;rtCnbG`r)KhduziyK4@^vcQ<-m4$op| zopCiO%GM>{k!M7vJk&+o_@zyTdq{^_4C4F}||I9cGa*`MK=?SUu!d;ACd`}_x#|4F@ibf*4k zQE|?{r!v!A)r~gWxLjlpjqBtFsRq5NG(!JAD@ji)HS+e{aJ8L{u(~{6*UEb9-\n" -"Language-Team: Ukrainian \n" +"Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.4.2\n" #: src/rc_formatters.py:28 msgid "None" @@ -1352,39 +1352,39 @@ msgid "Modified \"{usergroup_name}\" usergroup" msgstr "" #: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Вилучив тег \"{tag}\"" +msgstr "Відновив вікі \"{wiki}\"" #: src/rc_formatters.py:1163 #, python-brace-format msgid "Unlocked a \"{wiki}\" wiki" -msgstr "" +msgstr "Розблокував вікі \"{wiki}\"" #: src/rc_formatters.py:1166 #, python-brace-format msgid "Generated {file} dump" -msgstr "" +msgstr "Згенерував дамп {file}" #: src/rc_formatters.py:1169 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted {file} dump" -msgstr "Вилучив сторінку {article}" +msgstr "Видалив дамп {file}" #: src/rc_formatters.py:1177 #, python-brace-format msgid "Marked \"{article}\" for translation" -msgstr "" +msgstr "Позначив \"{article}\" для перекладу" #: src/rc_formatters.py:1180 #, python-brace-format msgid "Removed \"{article}\" from the translation system" -msgstr "" +msgstr "Видалив \"{article}\" з системи перекладу" #: src/rc_formatters.py:1183 #, python-brace-format msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" +msgstr "Завершив переміщення сторінок перекладу з \"{article}\" на \"{target}\"" #: src/rc_formatters.py:1186 #, python-brace-format From 42afbc2090e3dcdd1639038ae3644ef1b452c7dc Mon Sep 17 00:00:00 2001 From: magiczocker Date: Thu, 22 Apr 2021 17:49:59 +0000 Subject: [PATCH 017/173] Translated using Weblate (Ukrainian) Currently translated at 48.4% (123 of 254 strings) Translation: RcGcDw/rc_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/rc_formatters/uk/ --- locale/uk/LC_MESSAGES/rc_formatters.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/uk/LC_MESSAGES/rc_formatters.po b/locale/uk/LC_MESSAGES/rc_formatters.po index c1530f2..b8ec080 100644 --- a/locale/uk/LC_MESSAGES/rc_formatters.po +++ b/locale/uk/LC_MESSAGES/rc_formatters.po @@ -9,7 +9,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-14 16:24+0200\n" "PO-Revision-Date: 2021-04-29 05:47+0000\n" -"Last-Translator: MakandIv \n" +"Last-Translator: magiczocker \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -1406,7 +1406,7 @@ msgstr "" #: src/rc_formatters.py:1195 #, fuzzy, python-brace-format msgid "Completed deletion of translation page \"{article}\"" -msgstr "Змінив видимість {amount} версії сторінки {article} " +msgstr "Змінив видимість {amount} версії сторінки {article}" #: src/rc_formatters.py:1198 #, python-brace-format From 01f2fb682a7ae7ea3f32b30141795557383151f1 Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Thu, 29 Apr 2021 06:12:27 +0000 Subject: [PATCH 018/173] Encode ALL files to utf8 --- scripts/configbuilder.py | 8 ++++---- src/migrations/11311.py | 2 +- src/migrations/utils.py | 2 +- src/rcgcdw.py | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/configbuilder.py b/scripts/configbuilder.py index 9c02d73..8677506 100644 --- a/scripts/configbuilder.py +++ b/scripts/configbuilder.py @@ -196,7 +196,7 @@ def yes_no(answer): print("Welcome in RcGcDw config builder! This script is still work in progress so beware! You can accept the default value if provided in the question by using Enter key without providing any other input.\nWARNING! Your current settings.json will be overwritten if you continue!") try: # load settings - with open("../settings.json.example") as sfile: + with open("../settings.json.example", encoding="utf-8") as sfile: settings = json.load(sfile) except FileNotFoundError: if yes_no(default_or_custom(input("Template config (settings.json.example) could not be found. Download the most recent stable one from master branch? (https://gitlab.com/piotrex43/RcGcDw/raw/master/settings.json.example)? (Y/n)"), "y")): @@ -468,7 +468,7 @@ class AdvancedSettings: try: BasicSettings() shutil.copy("settings.json", "settings.json.bak") - with open("settings.json", "w") as settings_file: + with open("settings.json", "w", encoding="utf-8") as settings_file: settings_file.write(json.dumps(settings, indent=4)) if "--advanced" in sys.argv: print("Basic part of the config has been completed. Starting the advanced part...") @@ -478,5 +478,5 @@ except KeyboardInterrupt: if not yes_no(default_or_custom(input("\nSave the config before exiting? (y/N)"),"n")): sys.exit(0) else: - with open("settings.json", "w") as settings_file: - settings_file.write(json.dumps(settings, indent=4)) \ No newline at end of file + with open("settings.json", "w", encoding="utf-8") as settings_file: + settings_file.write(json.dumps(settings, indent=4)) diff --git a/src/migrations/11311.py b/src/migrations/11311.py index ec966b2..9ead1da 100644 --- a/src/migrations/11311.py +++ b/src/migrations/11311.py @@ -35,7 +35,7 @@ def run(): logger.exception("Failed to migrate appearance embed.") sys.exit(1) shutil.copy("settings.json", "settings.json.{}.bak".format(int(time.time()))) - with open("settings.json", "w") as new_write: + with open("settings.json", "w", encoding="utf-8") as new_write: new_write.write(json.dumps(new_settings, indent=4)) load_settings() logger.info("Migration 1.13.1.1 has been successful.") diff --git a/src/migrations/utils.py b/src/migrations/utils.py index fc448f1..5e66bc8 100644 --- a/src/migrations/utils.py +++ b/src/migrations/utils.py @@ -9,7 +9,7 @@ def return_example_file(force=False) -> dict: try: if force: raise FileNotFoundError - with open('settings.json.example', 'r') as example_file: + with open('settings.json.example', 'r', encoding="utf-8") as example_file: return json.loads(example_file.read()) except FileNotFoundError: try: diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 2bd33e5..a9b0d41 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -52,7 +52,7 @@ storage = datafile # Remove previous data holding file if exists and limitfetch allows if settings["limitrefetch"] != -1 and os.path.exists("lastchange.txt") is True: - with open("lastchange.txt", 'r') as sfile: + with open("lastchange.txt", 'r', encoding="utf-8") as sfile: logger.info("Converting old lastchange.txt file into new data storage data.json...") storage["rcid"] = int(sfile.read().strip()) datafile.save_datafile() From 9688f8160e054de91809149e2158a2366555e039 Mon Sep 17 00:00:00 2001 From: Arnaud0865 Date: Fri, 30 Apr 2021 14:42:31 +0000 Subject: [PATCH 019/173] Translated using Weblate (French) Currently translated at 52.0% (13 of 25 strings) Translation: RcGcDw/discussion_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/discussion_formatters/fr/ --- .../fr/LC_MESSAGES/discussion_formatters.mo | Bin 745 -> 1520 bytes .../fr/LC_MESSAGES/discussion_formatters.po | 27 ++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/locale/fr/LC_MESSAGES/discussion_formatters.mo b/locale/fr/LC_MESSAGES/discussion_formatters.mo index 221b7c9577f34eedc2a3e3fe1f180160a9d77561..d374d9a59334788b9e05b807ad0307422ca494e7 100644 GIT binary patch literal 1520 zcmaKr&x;&I6vtbQzgi6#MGq=GgOFXdr%l*HnEip1%xp5SlUZhG6Lkoap6<6jWqPWc zs_Gr%Fjpbq!Gq#W1Q7`yJPLXcvVVeSy?O8t$VEK(t?piTm(8Z(@#%W?`ukqJuJ`Ae zQ(rlFPQzY@eGYpG_AksnS08hn7r{38HaGyE1wR8{2EPD3@O$u0@OSVO_yBwr{0EG{ zGmn=#Q}7L}?}AT*KUDk){2H-8gI2c-5g&{|o9|2THSim-2L1xR1^x|MozqX2y03r| z>m|^}e^>c`18v+NpbP#5B3*HApzv9~0DA@oSqG&Qxe@9-2eZ#pB?_%4@cw+Yb}lOp z3`cZ!W`s$2e)hPBQc1I1vznjN)M2fInCV84Bu+Oo!fwu;9%qSwj7bkEJ?(mbYa(mBhO&4c(d*oZmXhPoq0Dm<72Rr)qw4p?VwU zDw!|7ORCH%%znnf(UdnAR%VrFzP4CH62-C5h850gTjC6dgX@B)Bqrzz^b3~q!=aOx z#X7S&8C(3ON!SMeJwg3AC@mIEfso4- zjsvCHtZw($y^9BNwwxVSUQ32)BxGEtiz8v&%_LVr;;kdQu9M7)rCz7-cYg0)P~7E+shWhN&ig;^`|19#xR{C(rU_s_D2C(E zG&Bf$St_HP_P(VfpE|u_NAt0rhl_5BSOy7yN+E}WBDBCJE(XFTKNpCIol8L?G;3$? z?(W__$rC#n0$q|aKQtka+@&l~j~EnPmEj@zei4JCRUDfYBTyBZj5;L-nycACYl^8! Qg*stss?zP$jH;9U2T;Dq^Z)<= delta 322 zcmeys{gSo*o)F7a1|VPqVi_Rz0b*_-t^r~YSOLU>K)e!&wSagx5Q_luGa%Ll;@?2b z4#b*_3=Hx>YzV|4`9LNH27Mr%2Bf8d^fVx?2c$OvX^{GdKpLo232ZSdPyhy4fDC3B z2S_tbc4Ty&Jb}?!rZg`*FTXsGA)qKfD>b=9*E2;oEVZaOGe6HtVe%~|EpsCSBLiIn zb6o=y1p`AX0}E{+-+;>}vA9Gxq$n}3I47|rzsO1fD3X_6nwXxd8\n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.4.2\n" #: src/discussion_formatters.py:21 src/discussion_formatters.py:56 #: src/discussion_formatters.py:67 src/discussion_formatters.py:95 @@ -26,7 +27,7 @@ msgstr "inconnu" #: src/discussion_formatters.py:27 src/discussion_formatters.py:102 msgid "Unregistered user" -msgstr "" +msgstr "Utilisateur non enregistré" #: src/discussion_formatters.py:39 #, fuzzy, python-brace-format @@ -110,6 +111,8 @@ msgid "" "Unknown event `{event}` by [{author}]({author_url}), report it on the " "[support server](<{support}>)." msgstr "" +"Événement inconnu `{event}` par [{author}]({author_url}), signalez-le dans " +"le [serveur d'aide](<{support}>)." #: src/discussion_formatters.py:123 #, python-brace-format @@ -123,12 +126,12 @@ msgstr "Création de {title}" #: src/discussion_formatters.py:134 msgid "Option {}" -msgstr "" +msgstr "Option {}" #: src/discussion_formatters.py:135 #, python-brace-format msgid "__[View image]({image_url})__" -msgstr "" +msgstr "__[Voir image]({image_url})__" #: src/discussion_formatters.py:139 #, fuzzy, python-brace-format @@ -137,11 +140,11 @@ msgstr "Création de {title}" #: src/discussion_formatters.py:155 src/discussion_formatters.py:157 msgid "Tags" -msgstr "" +msgstr "Balises" #: src/discussion_formatters.py:155 msgid "{} tags" -msgstr "" +msgstr "{} balises" #: src/discussion_formatters.py:160 #, python-brace-format @@ -171,8 +174,8 @@ msgstr "A répondu à « {title} »" #: src/discussion_formatters.py:188 #, python-brace-format msgid "Unknown event `{event}`" -msgstr "" +msgstr "Événement inconnu `{event}`" #: src/discussion_formatters.py:194 src/discussion_formatters.py:196 msgid "Report this on the support server" -msgstr "" +msgstr "Signalez ceci dans le serveur d'aide" From 3a9da8c3e3efd3b472358540d01a6776a35fa417 Mon Sep 17 00:00:00 2001 From: magiczocker Date: Wed, 28 Apr 2021 18:55:40 +0000 Subject: [PATCH 020/173] Translated using Weblate (French) Currently translated at 52.0% (13 of 25 strings) Translation: RcGcDw/discussion_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/discussion_formatters/fr/ --- locale/fr/LC_MESSAGES/discussion_formatters.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/locale/fr/LC_MESSAGES/discussion_formatters.po b/locale/fr/LC_MESSAGES/discussion_formatters.po index caf1478..345f9fc 100644 --- a/locale/fr/LC_MESSAGES/discussion_formatters.po +++ b/locale/fr/LC_MESSAGES/discussion_formatters.po @@ -9,7 +9,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-12-23 00:28+0100\n" "PO-Revision-Date: 2021-04-30 14:43+0000\n" -"Last-Translator: Arnaud0865 \n" +"Last-Translator: magiczocker \n" "Language-Team: French \n" "Language: fr\n" @@ -36,7 +36,7 @@ msgid "" "{forumName}" msgstr "" "Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" -"{creatorId}>) dans {forumName}" +"{creatorId}>) dans {forumName}" #: src/discussion_formatters.py:42 #, fuzzy, python-brace-format @@ -45,7 +45,7 @@ msgid "" "{forumName}" msgstr "" "Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" -"{creatorId}>) dans {forumName}" +"{creatorId}>) dans {forumName}" #: src/discussion_formatters.py:45 #, fuzzy, python-brace-format @@ -54,7 +54,7 @@ msgid "" "{forumName}" msgstr "" "Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" -"{creatorId}>) dans {forumName}" +"{creatorId}>) dans {forumName}" #: src/discussion_formatters.py:54 #, fuzzy, python-brace-format @@ -73,7 +73,7 @@ msgid "" "Message_Wall:{user_wall}>)" msgstr "" "Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" -"{creatorId}>) dans {forumName}" +"{creatorId}>) dans {forumName}" #: src/discussion_formatters.py:64 #, fuzzy, python-brace-format @@ -84,7 +84,7 @@ msgid "" "(<{url}wiki/Message_Wall:{user_wall}>)" msgstr "" "Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" -"{creatorId}>) dans {forumName}" +"{creatorId}>) dans {forumName}" #: src/discussion_formatters.py:72 #, fuzzy, python-brace-format From 6858be4e61c414fd6fd94b398de2c82b66ccb947 Mon Sep 17 00:00:00 2001 From: Frisk Date: Fri, 30 Apr 2021 22:11:22 +0200 Subject: [PATCH 021/173] Added a few more formatters, added support for aliases argument for formatter decorators --- docs/API spec.md | 7 +++ extensions/base/mediawiki.py | 117 +++++++++++++++++++++++++++++++---- src/api/formatter.py | 13 ++-- src/rc_formatters.py | 78 +---------------------- src/rcgcdw.py | 11 +++- src/wiki.py | 2 +- 6 files changed, 132 insertions(+), 96 deletions(-) diff --git a/docs/API spec.md b/docs/API spec.md index 5d9d332..1f7c02d 100644 --- a/docs/API spec.md +++ b/docs/API spec.md @@ -28,6 +28,13 @@ Directory with extensions should be possible to be changed using settings.json ## API api object exposes various data which allows to extend the usefulness of what can be then sent to Discord. +### Language support + + + +### Formatter event types +Formatters can be added based on their "event type". Event type is determined by `type` property for events in Recent Changes MediaWiki API. However in case of log events this becomes not enough and log events are chosen by "logtype/logaction" combination (for example `upload/overwrite`). +There are also additional made up cases like a single event type of "abuselog" for all abuselog related events and "discussion/discussiontype" for Fandom's Discussion technology integration. ## Example formatter diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 6148f81..405685d 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -15,11 +15,13 @@ import logging import math +import re +import time from src.discord.message import DiscordMessage from src.api import formatter from src.i18n import rc_formatters from src.api.context import Context -from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author +from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author, create_article_path from src.configloader import settings from src.exceptions import * @@ -28,9 +30,9 @@ _ = rc_formatters.gettext logger = logging.getLogger("extensions.base") -# Page edit - event edit +# Page edit - event edit, New - page creation -@formatter.embed(event="edit", mode="embed") +@formatter.embed(event="edit", mode="embed", aliases=["new"]) def embed_edit(ctx: Context, change: dict) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) @@ -81,7 +83,7 @@ def embed_edit(ctx: Context, change: dict) -> DiscordMessage: return embed -@formatter.compact(event="edit", mode="compact") +@formatter.compact(event="edit", mode="compact", aliases=["new"]) def compact_edit(ctx: Context, change: dict): parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" author, author_url = compact_author(ctx, change) @@ -110,14 +112,105 @@ def compact_edit(ctx: Context, change: dict): return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) -# Page creation - event new aliases to embed_edit since they share a lot of their code - -@formatter.embed(event="new", mode="embed") -def embed_new(ctx, change): - return embed_edit(ctx, change) +# Upload - upload/reupload, upload/upload +@formatter.embed(event="upload/upload", mode="embed", aliases=["upload/overwrite", "upload/revert"]) +def embed_upload_upload(ctx, change): + license = None + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + action = ctx.event + embed_helper(ctx, embed, change) + urls = ctx.client.make_api_request("{wiki}?action=query&format=json&prop=imageinfo&list=&meta=&titles={filename}&iiprop=timestamp%7Curl%7Carchivename&iilimit=5".format( + wiki=ctx.WIKI_API_PATH, filename=sanitize_to_url(change["title"])), "query", "pages") + link = create_article_path(sanitize_to_url(change["title"])) + image_direct_url = None + # Make a request for file revisions so we can get direct URL to the image for embed + if urls is not None: + logger.debug(urls) + if "-1" not in urls: # image still exists and not removed + try: + img_info = next(iter(urls.values()))["imageinfo"] + for num, revision in enumerate(img_info): + if revision["timestamp"] == change["logparams"]["img_timestamp"]: # find the correct revision corresponding for this log entry + image_direct_url = "{rev}?{cache}".format(rev=revision["url"], cache=int(time.time() * 5)) # cachebusting + break + except KeyError: + logger.exception( + "Wiki did not respond with extended information about file. The preview will not be shown.") + else: + logger.warning("Request for additional image information have failed. The preview will not be shown.") + if action in ("upload/overwrite", "upload/revert"): + if image_direct_url: + try: + revision = img_info[num + 1] + except IndexError: + logger.exception( + "Could not analize the information about the image (does it have only one version when expected more in overwrite?) which resulted in no Options field: {}".format( + img_info)) + else: + undolink = "{wiki}index.php?title={filename}&action=revert&oldimage={archiveid}".format( + wiki=ctx.client.WIKI_SCRIPT_PATH, filename=sanitize_to_url(change["title"]), archiveid=revision["archivename"]) + embed.add_field(_("Options"), _("([preview]({link}) | [undo]({undolink}))").format( + link=image_direct_url, undolink=undolink)) + if settings["appearance"]["embed"]["embed_images"]: + embed["image"]["url"] = image_direct_url + if action == "upload/overwrite": + embed["title"] = _("Uploaded a new version of {name}").format(name=change["title"]) + elif action == "upload/revert": + embed["title"] = _("Reverted a version of {name}").format(name=change["title"]) + else: + embed["title"] = _("Uploaded {name}").format(name=change["title"]) + if settings["license_detection"]: + article_content = ctx.client.make_api_request( + "{wiki}?action=query&format=json&prop=revisions&titles={article}&rvprop=content".format( + wiki=ctx.client.WIKI_API_PATH, article=sanitize_to_url(change["title"])), "query", "pages") + if article_content is None: + logger.warning("Something went wrong when getting license for the image") + return 0 + if "-1" not in article_content: + content = list(article_content.values())[0]['revisions'][0]['*'] + try: + matches = re.search(re.compile(settings["license_regex"], re.IGNORECASE), content) + if matches is not None: + license = matches.group("license") + else: + if re.search(re.compile(settings["license_regex_detect"], re.IGNORECASE), content) is None: + license = _("**No license!**") + else: + license = "?" + except IndexError: + logger.error( + "Given regex for the license detection is incorrect. It does not have a capturing group called \"license\" specified. Please fix license_regex value in the config!") + license = "?" + except re.error: + logger.error( + "Given regex for the license detection is incorrect. Please fix license_regex or license_regex_detect values in the config!") + license = "?" + if license is not None: + ctx.parsedcomment += _("\nLicense: {}").format(license) + if image_direct_url: + embed.add_field(_("Options"), _("([preview]({link}))").format(link=image_direct_url)) + if settings["appearance"]["embed"]["embed_images"]: + embed["image"]["url"] = image_direct_url + return embed -@formatter.compact(event="new", mode="compact") -def compact_new(ctx, change): - return compact_edit(ctx, change) +@formatter.compact(event="upload/upload", mode="compact") +def compact_upload_upload(ctx, change): + author, author_url = compact_author(ctx, change) + file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) uploaded [{file}]({file_link}){comment}").format(author=author, + author_url=author_url, + file=change["title"], + file_link=file_link, + comment="" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*") + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) +# delete - Page deletion +@formatter.embed(event="delete/delete", mode="embed") +def embed_delete(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + link = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Deleted page {article}").format(article=change["title"]) + if AUTO_SUPPRESSION_ENABLED: + delete_messages(dict(pageid=change.get("pageid"))) \ No newline at end of file diff --git a/src/api/formatter.py b/src/api/formatter.py index 76ea727..b808c79 100644 --- a/src/api/formatter.py +++ b/src/api/formatter.py @@ -36,11 +36,12 @@ def _register_formatter(func: Callable[[dict], DiscordMessage], kwargs: dict[str if action_type is None: raise FormatterBreaksAPISpec("event type") if settings["appearance"]["mode"] == formatter_type: - if action_type in src.api.hooks.formatter_hooks: - logger.warning(f"Action {action_type} is already defined inside of " - f"{src.api.hooks.formatter_hooks[action_type].__module__}! " - f"Overwriting it with one from {func.__module__}") - src.api.hooks.formatter_hooks[action_type] = func + for act in [action_type] + kwargs.get("aliases", []): # Make action_type string a list and merge with aliases + if act in src.api.hooks.formatter_hooks: + logger.warning(f"Action {act} is already defined inside of " + f"{src.api.hooks.formatter_hooks[act].__module__}! " + f"Overwriting it with one from {func.__module__}") + src.api.hooks.formatter_hooks[act] = func def embed(**kwargs): @@ -49,6 +50,7 @@ def embed(**kwargs): :key event: Event string :key mode: Discord Message mode + :key aliases: Allows to register multiple events under same function :return: """ @@ -65,6 +67,7 @@ def compact(**kwargs): :key event: Event string :key mode: Discord Message mode + :key aliases: Allows to register multiple events under same function :return: """ diff --git a/src/rc_formatters.py b/src/rc_formatters.py index a1a1474..4b3b254 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -715,83 +715,9 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): if action in ("edit", "new"): # edit or new page elif action in ("upload/overwrite", "upload/upload", "upload/revert"): # sending files - license = None - urls = safe_read(recent_changes._safe_request( - "{wiki}?action=query&format=json&prop=imageinfo&list=&meta=&titles={filename}&iiprop=timestamp%7Curl%7Carchivename&iilimit=5".format( - wiki=WIKI_API_PATH, filename=change["title"])), "query", "pages") - link = create_article_path(change["title"]) - additional_info_retrieved = False - if urls is not None: - logger.debug(urls) - if "-1" not in urls: # image still exists and not removed - try: - img_info = next(iter(urls.values()))["imageinfo"] - for num, revision in enumerate(img_info): - if revision["timestamp"] == change["logparams"]["img_timestamp"]: # find the correct revision corresponding for this log entry - image_direct_url = "{rev}?{cache}".format(rev=revision["url"], cache=int(time.time()*5)) # cachebusting - additional_info_retrieved = True - break - except KeyError: - logger.warning("Wiki did not respond with extended information about file. The preview will not be shown.") - else: - logger.warning("Request for additional image information have failed. The preview will not be shown.") - if action in ("upload/overwrite", "upload/revert"): - if additional_info_retrieved: - article_encoded = change["title"].replace(" ", "_").replace("%", "%25").replace("\\", "%5C").replace("&", "%26").replace(')', '\\)') - try: - revision = img_info[num+1] - except IndexError: - logger.exception("Could not analize the information about the image (does it have only one version when expected more in overwrite?) which resulted in no Options field: {}".format(img_info)) - else: - undolink = "{wiki}index.php?title={filename}&action=revert&oldimage={archiveid}".format( - wiki=WIKI_SCRIPT_PATH, filename=article_encoded, archiveid=revision["archivename"]) - embed.add_field(_("Options"), _("([preview]({link}) | [undo]({undolink}))").format( - link=image_direct_url, undolink=undolink)) - if settings["appearance"]["embed"]["embed_images"]: - embed["image"]["url"] = image_direct_url - if action == "upload/overwrite": - embed["title"] = _("Uploaded a new version of {name}").format(name=change["title"]) - elif action == "upload/revert": - embed["title"] = _("Reverted a version of {name}").format(name=change["title"]) - else: - embed["title"] = _("Uploaded {name}").format(name=change["title"]) - if settings["license_detection"]: - article_content = safe_read(recent_changes._safe_request( - "{wiki}?action=query&format=json&prop=revisions&titles={article}&rvprop=content".format( - wiki=WIKI_API_PATH, article=quote_plus(change["title"], safe=''))), "query", "pages") - if article_content is None: - logger.warning("Something went wrong when getting license for the image") - return 0 - if "-1" not in article_content: - content = list(article_content.values())[0]['revisions'][0]['*'] - try: - matches = re.search(re.compile(settings["license_regex"], re.IGNORECASE), content) - if matches is not None: - license = matches.group("license") - else: - if re.search(re.compile(settings["license_regex_detect"], re.IGNORECASE), content) is None: - license = _("**No license!**") - else: - license = "?" - except IndexError: - logger.error( - "Given regex for the license detection is incorrect. It does not have a capturing group called \"license\" specified. Please fix license_regex value in the config!") - license = "?" - except re.error: - logger.error( - "Given regex for the license detection is incorrect. Please fix license_regex or license_regex_detect values in the config!") - license = "?" - if license is not None: - parsed_comment += _("\nLicense: {}").format(license) - if additional_info_retrieved: - embed.add_field(_("Options"), _("([preview]({link}))").format(link=image_direct_url)) - if settings["appearance"]["embed"]["embed_images"]: - embed["image"]["url"] = image_direct_url + elif action == "delete/delete": - link = create_article_path(change["title"]) - embed["title"] = _("Deleted page {article}").format(article=change["title"]) - if AUTO_SUPPRESSION_ENABLED: - delete_messages(dict(pageid=change.get("pageid"))) + elif action == "delete/delete_redir": link = create_article_path(change["title"]) embed["title"] = _("Deleted redirect {article} by overwriting").format(article=change["title"]) diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 6fe2da6..a436278 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -266,8 +266,15 @@ def rc_processor(change, changed_categories): discord_message: Optional[DiscordMessage] = default_message(identification_string, formatter_hooks)(context, change) send_to_discord(discord_message, metadata) -def abuselog_processing(entry, recent_changes): - abuselog_appearance_mode(entry, recent_changes) + +def abuselog_processing(entry): + action = "abuselog" + if action in settings["ignored"]: + return + context = Context(settings["appearance"]["mode"], settings["webhookURL"], client) + context.event = action + discord_message: Optional[DiscordMessage] = default_message(action, formatter_hooks)(context, entry) + send_to_discord(discord_message, DiscordMessageMetadata("POST")) load_extensions() diff --git a/src/wiki.py b/src/wiki.py index cf9ce03..2fd8792 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -217,7 +217,7 @@ class Wiki(object): continue if entry["id"] <= recent_id: continue - self.abuse_processor(entry, self) + self.abuse_processor(entry) return entry["id"] def fetch_changes(self, amount): From edd46767bb61329330d1c6ea3fdec98d3ec2a817 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 1 May 2021 14:25:03 +0200 Subject: [PATCH 022/173] testing the testing --- src/api/util.py | 12 ++++-------- src/misc.py | 8 ++++---- test/test_util.py | 26 ++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 12 deletions(-) create mode 100644 test/test_util.py diff --git a/src/api/util.py b/src/api/util.py index 9d95ee0..0aae16a 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -29,6 +29,7 @@ if TYPE_CHECKING: logger = logging.getLogger("src.api.util") + def default_message(event: str, formatter_hooks: dict) -> Callable: """Returns a method of a formatter responsible for the event or None if such does not exist.""" return formatter_hooks.get(event, formatter_hooks.get("generic", formatter_hooks["no_formatter"])) @@ -40,12 +41,12 @@ def clean_link(link: str) -> str: def sanitize_to_markdown(text: str): - """Sanitizes given text to """ + """Sanitizes given text to escape markdown formatting. It is used in values that will be visible on Discord in messages""" def sanitize_to_url(text: str) -> str: # TODO ) replaces needed? - """Formats a link to not embed it""" - return quote(text, " \\/:").replace(' ', "_") + """Formats a string in a way where it can be safely added to a URL without breaking MediaWiki URL schema""" + return quote(text, " /:").replace(' ', "_").replace(")", "%29") def parse_mediawiki_changes(ctx: Context, content: str, embed: DiscordMessage) -> None: @@ -69,11 +70,6 @@ def parse_mediawiki_changes(ctx: Context, content: str, embed: DiscordMessage) - embed.add_field(_("Added"), "{data}".format(data=edit_diff.small_prev_ins), inline=True) -def escape_formatting(data: str) -> str: - """Escape Discord formatting""" - return re.sub(r"([`_*~<>{}@/|\\])", "\\\\\\1", data, 0) - - def create_article_path(article: str) -> str: """Takes the string and creates an URL with it as the article name""" return src.misc.WIKI_ARTICLE_PATH.replace("$1", article) diff --git a/src/misc.py b/src/misc.py index 67a7eb3..a2c847d 100644 --- a/src/misc.py +++ b/src/misc.py @@ -15,20 +15,17 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . import base64 -import json, logging, sys +import json, logging, sys, re from html.parser import HTMLParser from urllib.parse import urlparse, urlunparse import requests -from src.api.util import escape_formatting from src.configloader import settings from src.discord.message import DiscordMessage, DiscordMessageMetadata from src.discord.queue import messagequeue, send_to_discord from src.exceptions import MediaWikiError from src.i18n import misc -AUTO_SUPPRESSION_ENABLED = settings.get("auto_suppression", {"enabled": False}).get("enabled") - _ = misc.gettext # Create a custom logger @@ -138,6 +135,9 @@ class ContentParser(HTMLParser): self.empty = True def handle_data(self, data): + def escape_formatting(data: str) -> str: + """Escape Discord formatting""" + return re.sub(r"([`_*~<>{}@/|\\])", "\\\\\\1", data, 0) data = escape_formatting(data) if self.current_tag == "ins" and self.ins_length <= 1000: self.ins_length += len("**" + data + "**") diff --git a/test/test_util.py b/test/test_util.py new file mode 100644 index 0000000..9122ce2 --- /dev/null +++ b/test/test_util.py @@ -0,0 +1,26 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +from unittest import TestCase, main +from src.api.util import sanitize_to_url + + +class Test(TestCase): + def test_sanitize_to_url(self): + self.assertEqual(sanitize_to_url("Breaking rcgcdw . \ / : ? = ) & - ~ this is a test)"), "Breaking_rcgcdw_._%5C_/_:_%3F_%3D_%29_%26_-_~_this_is_a_test%29") + + +if __name__ == '__main__': + main() From c1bc05f7efca38573203f34b814bcbdde98b3cd1 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 1 May 2021 14:54:23 +0200 Subject: [PATCH 023/173] progress on converting old formatters to new format --- extensions/base/mediawiki.py | 222 +++++++++++++++++++++++++++++++++-- src/rc_formatters.py | 75 +++--------- src/rcgcdw.py | 6 + src/wiki.py | 5 +- test/__init__.py | 0 5 files changed, 235 insertions(+), 73 deletions(-) create mode 100644 test/__init__.py diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 405685d..8fd166f 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -21,7 +21,8 @@ from src.discord.message import DiscordMessage from src.api import formatter from src.i18n import rc_formatters from src.api.context import Context -from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author, create_article_path +from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author, \ + create_article_path, sanitize_to_markdown from src.configloader import settings from src.exceptions import * @@ -29,7 +30,6 @@ _ = rc_formatters.gettext logger = logging.getLogger("extensions.base") - # Page edit - event edit, New - page creation @formatter.embed(event="edit", mode="embed", aliases=["new"]) @@ -84,7 +84,7 @@ def embed_edit(ctx: Context, change: dict) -> DiscordMessage: @formatter.compact(event="edit", mode="compact", aliases=["new"]) -def compact_edit(ctx: Context, change: dict): +def compact_edit(ctx: Context, change: dict) -> DiscordMessage: parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" author, author_url = compact_author(ctx, change) action = ctx.event @@ -114,7 +114,7 @@ def compact_edit(ctx: Context, change: dict): # Upload - upload/reupload, upload/upload @formatter.embed(event="upload/upload", mode="embed", aliases=["upload/overwrite", "upload/revert"]) -def embed_upload_upload(ctx, change): +def embed_upload_upload(ctx, change) -> DiscordMessage: license = None embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) action = ctx.event @@ -195,7 +195,7 @@ def embed_upload_upload(ctx, change): @formatter.compact(event="upload/upload", mode="compact") -def compact_upload_upload(ctx, change): +def compact_upload_upload(ctx, change) -> DiscordMessage: author, author_url = compact_author(ctx, change) file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) content = _("[{author}]({author_url}) uploaded [{file}]({file_link}){comment}").format(author=author, @@ -205,12 +205,214 @@ def compact_upload_upload(ctx, change): comment="" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*") return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) -# delete - Page deletion + +# delete/delete - Page deletion @formatter.embed(event="delete/delete", mode="embed") -def embed_delete(ctx, change): +def embed_delete_delete(ctx, change) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) - link = create_article_path(sanitize_to_url(change["title"])) + embed['url'] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Deleted page {article}").format(article=change["title"]) - if AUTO_SUPPRESSION_ENABLED: - delete_messages(dict(pageid=change.get("pageid"))) \ No newline at end of file + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="delete/delete", mode="compact") +def compact_delete_delete(ctx, change) -> DiscordMessage: + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + author, author_url = compact_author(ctx, change) + page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) deleted [{page}]({page_link}){comment}").format(author=author, + author_url=author_url, + page=change["title"], + page_link=page_link, + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# delete/delete_redir - Redirect deletion +@formatter.embed(event="delete/delete_redir", mode="embed") +def embed_delete_delete_redir(ctx, change) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed['url'] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Deleted redirect {article} by overwriting").format(article=sanitize_to_markdown(change["title"])) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="delete/delete_redir", mode="compact") +def compact_delete_delete_redir(ctx, change) -> DiscordMessage: + page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) deleted redirect by overwriting [{page}]({page_link}){comment}").format( + author=author, author_url=author_url, page=change["title"], page_link=page_link, + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# move/move - Moving pages + + +@formatter.embed(event="move/move", mode="embed") +def embed_move_move(ctx, change) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title'])) + embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment, + supress=_("No redirect has been made") if "suppressredirect" in change[ + "logparams"] else _( + "A redirect has been made")) + embed["title"] = _("Moved {redirect}{article} to {target}").format(redirect="⤷ " if "redirect" in change else "", + article=sanitize_to_markdown(change["title"]), + target=sanitize_to_markdown(change["logparams"]['target_title'])) + return embed + + +@formatter.compact(event="move/move", mode="compact") +def compact_move_move(ctx, change) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["logparams"]['target_title']))) + redirect_status = _("without making a redirect") if "suppressredirect" in change["logparams"] else _( + "with a redirect") + content = _( + "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]({target_url}) {made_a_redirect}{comment}").format( + author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", article=change["title"], + target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=ctx.parsedcomment, + made_a_redirect=redirect_status) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# move/move_redir - Move over redirect + + +@formatter.embed(event="move/move_redir", mode="embed") +def embed_move_move_redir(ctx, change) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title'])) + embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment, + supress=_("No redirect has been made") if "suppressredirect" in change[ + "logparams"] else _( + "A redirect has been made")) + embed["title"] = _("Moved {redirect}{article} to {title} over redirect").format( + redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["title"]), + title=sanitize_to_markdown(change["logparams"]["target_title"])) + return embed + + +@formatter.compact(event="move/move_redir", mode="compact") +def compact_move_move_redir(ctx, change) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["logparams"]['target_title']))) + redirect_status = _("without making a redirect") if "suppressredirect" in change["logparams"] else _( + "with a redirect") + content = _( + "[{author}]({author_url}) moved {redirect}*{article}* over redirect to [{target}]({target_url}) {made_a_redirect}{comment}").format( + author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["title"]), + target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=ctx.parsedcomment, + made_a_redirect=redirect_status) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# protect/move_prot - Moving protection + + +@formatter.embed(event="protect/move_prot", mode="embed") +def embed_protect_move_prot(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["logparams"]["oldtitle_title"])) + embed["title"] = _("Moved protection settings from {redirect}{article} to {title}").format( + redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]), + title=sanitize_to_markdown(change["title"])) + return embed + +@formatter.compact(event="protect/move_prot", mode="compact") +def compact_protect_move_prot(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["logparams"]["oldtitle_title"]))) + content = _( + "[{author}]({author_url}) moved protection settings from {redirect}*{article}* to [{target}]({target_url}){comment}").format( + author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", + article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]), + target=sanitize_to_markdown(change["title"]), target_url=link, comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# protect/protect - Creating protection + + +@formatter.embed(event="protect/protect", mode="embed") +def embed_protect_protect(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Protected {target}").format(target=sanitize_to_markdown(change["title"])) + embed["description"] = "{settings}{cascade} | {reason}".format(settings=sanitize_to_markdown(change["logparams"].get("description", "")), + cascade=_(" [cascading]") if "cascade" in change["logparams"] else "", + reason=ctx.parsedcomment) + return embed + + +@formatter.compact(event="protect/protect", mode="compact") +def compact_protect_protect(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _( + "[{author}]({author_url}) protected [{article}]({article_url}) with the following settings: {settings}{comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + settings=change["logparams"].get("description", "") + ( + _(" [cascading]") if "cascade" in change["logparams"] else ""), + comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# protect/modify - Changing protection settings + + +@formatter.embed(event="protect/modify", mode="embed") +def embed_protect_modify(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Changed protection level for {article}").format(article=sanitize_to_markdown(change["title"])) + embed["description"] = "{settings}{cascade} | {reason}".format(settings=sanitize_to_markdown(change["logparams"].get("description", "")), + cascade=_(" [cascading]") if "cascade" in change[ + "logparams"] else "", + reason=ctx.parsedcomment) + return embed + + +@formatter.compact(event="protect/modify", mode="compact") +def compact_protect_modify(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _( + "[{author}]({author_url}) modified protection settings of [{article}]({article_url}) to: {settings}{comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + settings=sanitize_to_markdown(change["logparams"].get("description", "")) + ( + _(" [cascading]") if "cascade" in change["logparams"] else ""), + comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# protect/unprotect - Unprotecting a page + + +@formatter.embed(event="protect/unprotect", mode="embed") +def embed_protect_unprotect(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Removed protection from {article}").format(article=change["title"]) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="protect/unprotect", mode="compact") +def compact_protect_unprotect(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) removed protection from [{article}]({article_url}){comment}").format( + author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + diff --git a/src/rc_formatters.py b/src/rc_formatters.py index 4b3b254..dd6a48d 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -28,7 +28,7 @@ from bs4 import BeautifulSoup from src.configloader import settings from src.misc import WIKI_SCRIPT_PATH, safe_read, \ - WIKI_API_PATH, ContentParser, profile_field_name, LinkParser, AUTO_SUPPRESSION_ENABLED + WIKI_API_PATH, ContentParser, profile_field_name, LinkParser from src.api.util import link_formatter, create_article_path from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata @@ -155,27 +155,13 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes if AUTO_SUPPRESSION_ENABLED: delete_messages(dict(pageid=change.get("pageid"))) elif action == "delete/delete_redir": - page_link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) deleted redirect by overwriting [{page}]({page_link}){comment}").format(author=author, author_url=author_url, page=change["title"], page_link=page_link, - comment=parsed_comment) - if AUTO_SUPPRESSION_ENABLED: - delete_messages(dict(pageid=change.get("pageid"))) + elif action == "move/move": - link = link_formatter(create_article_path(change["logparams"]['target_title'])) - redirect_status = _("without making a redirect") if "suppressredirect" in change["logparams"] else _("with a redirect") - content = _("[{author}]({author_url}) moved {redirect}*{article}* to [{target}]({target_url}) {made_a_redirect}{comment}").format(author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", article=change["title"], - target=change["logparams"]['target_title'], target_url=link, comment=parsed_comment, made_a_redirect=redirect_status) + elif action == "move/move_redir": - link = link_formatter(create_article_path(change["logparams"]["target_title"])) - redirect_status = _("without making a redirect") if "suppressredirect" in change["logparams"] else _( - "with a redirect") - content = _("[{author}]({author_url}) moved {redirect}*{article}* over redirect to [{target}]({target_url}) {made_a_redirect}{comment}").format(author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", article=change["title"], - target=change["logparams"]['target_title'], target_url=link, comment=parsed_comment, made_a_redirect=redirect_status) + elif action == "protect/move_prot": - link = link_formatter(create_article_path(change["logparams"]["oldtitle_title"])) - content = _( - "[{author}]({author_url}) moved protection settings from {redirect}*{article}* to [{target}]({target_url}){comment}").format(author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", article=change["logparams"]["oldtitle_title"], - target=change["title"], target_url=link, comment=parsed_comment) + elif action == "block/block": user = change["title"].split(':', 1)[1] restriction_description = "" @@ -323,22 +309,11 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes old_groups=", ".join(old_groups), new_groups=', '.join(new_groups), comment=parsed_comment) elif action == "protect/protect": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) protected [{article}]({article_url}) with the following settings: {settings}{comment}").format(author=author, author_url=author_url, - article=change["title"], article_url=link, - settings=change["logparams"].get("description", "")+(_(" [cascading]") if "cascade" in change["logparams"] else ""), - comment=parsed_comment) + elif action == "protect/modify": - link = link_formatter(create_article_path(change["title"])) - content = _( - "[{author}]({author_url}) modified protection settings of [{article}]({article_url}) to: {settings}{comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - settings=change["logparams"].get("description", "") + (_(" [cascading]") if "cascade" in change["logparams"] else ""), - comment=parsed_comment) + elif action == "protect/unprotect": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) removed protection from [{article}]({article_url}){comment}").format(author=author, author_url=author_url, article=change["title"], article_url=link, comment=parsed_comment) + elif action == "delete/revision": amount = len(change["logparams"]["ids"]) link = link_formatter(create_article_path(change["title"])) @@ -719,24 +694,13 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): elif action == "delete/delete": elif action == "delete/delete_redir": - link = create_article_path(change["title"]) - embed["title"] = _("Deleted redirect {article} by overwriting").format(article=change["title"]) - if AUTO_SUPPRESSION_ENABLED: - delete_messages(dict(pageid=change.get("pageid"))) + elif action == "move/move": - link = create_article_path(change["logparams"]['target_title']) - parsed_comment = "{supress}. {desc}".format(desc=parsed_comment, - supress=_("No redirect has been made") if "suppressredirect" in change["logparams"] else _( - "A redirect has been made")) - embed["title"] = _("Moved {redirect}{article} to {target}").format(redirect="⤷ " if "redirect" in change else "", article=change["title"], target=change["logparams"]['target_title']) + elif action == "move/move_redir": - link = create_article_path(change["logparams"]["target_title"]) - embed["title"] = _("Moved {redirect}{article} to {title} over redirect").format(redirect="⤷ " if "redirect" in change else "", article=change["title"], - title=change["logparams"]["target_title"]) + elif action == "protect/move_prot": - link = create_article_path(change["logparams"]["oldtitle_title"]) - embed["title"] = _("Moved protection settings from {redirect}{article} to {title}").format(redirect="⤷ " if "redirect" in change else "", article=change["logparams"]["oldtitle_title"], - title=change["title"]) + elif action == "block/block": user = change["title"].split(':', 1)[1] try: @@ -874,20 +838,11 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): parsed_comment = _("Groups changed from {old_groups} to {new_groups}{reason}").format( old_groups=", ".join(old_groups), new_groups=', '.join(new_groups), reason=reason) elif action == "protect/protect": - link = create_article_path(change["title"]) - embed["title"] = _("Protected {target}").format(target=change["title"]) - parsed_comment = "{settings}{cascade} | {reason}".format(settings=change["logparams"].get("description", ""), - cascade=_(" [cascading]") if "cascade" in change["logparams"] else "", - reason=parsed_comment) + elif action == "protect/modify": - link = create_article_path(change["title"]) - embed["title"] = _("Changed protection level for {article}").format(article=change["title"]) - parsed_comment = "{settings}{cascade} | {reason}".format(settings=change["logparams"].get("description", ""), - cascade=_(" [cascading]") if "cascade" in change["logparams"] else "", - reason=parsed_comment) + elif action == "protect/unprotect": - link = create_article_path(change["title"]) - embed["title"] = _("Removed protection from {article}").format(article=change["title"]) + elif action == "delete/revision": amount = len(change["logparams"]["ids"]) link = create_article_path(change["title"]) diff --git a/src/rcgcdw.py b/src/rcgcdw.py index a436278..3253e39 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -45,6 +45,10 @@ if settings["fandom_discussions"]["enabled"]: import src.discussions TESTING = True if "--test" in sys.argv else False # debug mode, pipeline testing +AUTO_SUPPRESSION_ENABLED = settings.get("auto_suppression", {"enabled": False}).get("enabled") + +if AUTO_SUPPRESSION_ENABLED: + from src.discord.redaction import delete_messages, redact_messages # Prepare logging logging.config.dictConfig(settings["logging"]) @@ -264,6 +268,8 @@ def rc_processor(change, changed_categories): return context.event = identification_string discord_message: Optional[DiscordMessage] = default_message(identification_string, formatter_hooks)(context, change) + if identification_string in ("delete/delete", "delete/delete_redir") and AUTO_SUPPRESSION_ENABLED: + delete_messages(dict(pageid=change.get("pageid"))) send_to_discord(discord_message, metadata) diff --git a/src/wiki.py b/src/wiki.py index 2fd8792..504418e 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -23,8 +23,7 @@ import requests from bs4 import BeautifulSoup from src.configloader import settings -from src.misc import WIKI_SCRIPT_PATH, WIKI_API_PATH, datafile, send_simple, safe_read, \ - AUTO_SUPPRESSION_ENABLED, parse_mw_request_info +from src.misc import WIKI_SCRIPT_PATH, WIKI_API_PATH, datafile, send_simple, safe_read, parse_mw_request_info from src.discord.queue import messagequeue from src.exceptions import MWError, BadRequest, ClientError, ServerError, MediaWikiError from src.session import session @@ -394,7 +393,7 @@ class Wiki(object): def clear_cache(self): self.map_ips = {} - if AUTO_SUPPRESSION_ENABLED: + if settings.get("auto_suppression", {"enabled": False}).get("enabled"): from src.fileio.database import clean_entries clean_entries() diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 0000000..e69de29 From 7904d5b0e6f895b18d977cfe635b8be0bae66d10 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 1 May 2021 15:56:40 +0200 Subject: [PATCH 024/173] added alternatives section --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 104c1ba..551f275 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,14 @@ Thank you! [![Translation status](https://weblate.frisk.space/widgets/rcgcdw/-/multi-auto.svg)](https://weblate.frisk.space/engage/rcgcdw/?utm_source=widget) -### Other extensions/compatible programs ### +### Extensions/compatible programs ### * [Wiki Utilities](https://github.com/Sidemen19/Wiki-Utilities) – an integration that allows wiki administrators to revert edits, block editors, and delete pages on the wiki by reacting to messages created by RcGcDw/RcGcDb. Author: [Sidemen19](https://github.com/Sidemen19) +### Alternatives ### +There are various alternatives to RcGcDw you may want to consider if for some reason RcGcDw doesn't satisfy your needs: +* [Wiki-Bot](https://wiki.wikibot.de/wiki/Wiki-Bot_Wiki) - while it's not exactly an alternative since Wiki-Bot is running a modified version of RcGcDw in the backend, you can use its rcscript feature to add a webhook for your wiki and have it work similarly to how RcGcDw does without hosting anything on your own, +* [Extension:Discord](https://www.mediawiki.org/wiki/Extension:Discord) - MediaWiki extension to do the same thing, +* [Extension:DiscordNotifications](https://www.mediawiki.org/wiki/Extension:DiscordNotifications) - another MediaWiki extension with the same goal. + ### Wiki ### For more information, check the [wiki](https://gitlab.com/piotrex43/RcGcDw/wikis/Home)! \ No newline at end of file From 20022a137d68fc0eddf43ccea582d5c3b7710f3f Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 1 May 2021 16:47:33 +0200 Subject: [PATCH 025/173] added unit testing integration --- .gitlab-ci.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a25256c..7dc96b9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,6 +3,18 @@ image: python:3.6-alpine include: - template: Code-Quality.gitlab-ci.yml +pytest: + stage: test + script: + - pytest --junitxml=report.xml + artifacts: + when: always + reports: + junit: report.xml + only: + - testing + - merge_requests + test: type: test script: From 29a241d228ce3700f34baef85348d72f56095c1f Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Sat, 1 May 2021 21:27:30 +0000 Subject: [PATCH 026/173] sanitize_to_markdown --- src/api/util.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/api/util.py b/src/api/util.py index 0aae16a..3a0651e 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -42,6 +42,7 @@ def clean_link(link: str) -> str: def sanitize_to_markdown(text: str): """Sanitizes given text to escape markdown formatting. It is used in values that will be visible on Discord in messages""" + return re.sub(r"([`_*~:<>{}@|\\])", "\\\\\\1", text, 0).replace('//', "/\\/").replace('](', "]\\(") def sanitize_to_url(text: str) -> str: # TODO ) replaces needed? From d3115153df2e9b77067b6a3db0c8048a46b85157 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 2 May 2021 16:26:48 +0200 Subject: [PATCH 027/173] added few new formatters (WIP) --- extensions/base/mediawiki.py | 134 ++++++++++++++++++++++++++++++++++- src/api/client.py | 2 +- src/api/util.py | 2 +- src/rc_formatters.py | 107 ++-------------------------- 4 files changed, 139 insertions(+), 106 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 8fd166f..b669324 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -12,11 +12,12 @@ # # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . - +import ipaddress import logging import math import re import time +import datetime from src.discord.message import DiscordMessage from src.api import formatter from src.i18n import rc_formatters @@ -27,6 +28,7 @@ from src.configloader import settings from src.exceptions import * _ = rc_formatters.gettext +ngettext = rc_formatters.ngettext logger = logging.getLogger("extensions.base") @@ -416,3 +418,133 @@ def compact_protect_unprotect(ctx, change): author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, comment=ctx.parsedcomment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) +# block/block +def block_expiry(change: dict) -> str: + if change["logparams"]["duration"] in ["infinite", "indefinite", "infinity", "never"]: + return _("for infinity and beyond") + else: + if "expiry" in change["logparams"]: + expiry_date_time_obj = datetime.datetime.strptime(change["logparams"]["expiry"], '%Y-%m-%dT%H:%M:%SZ') + timestamp_date_time_obj = datetime.datetime.strptime(change["timestamp"], '%Y-%m-%dT%H:%M:%SZ') + timedelta_for_expiry = expiry_date_time_obj - timestamp_date_time_obj + years, days, hours, minutes = timedelta_for_expiry.seconds // 31557600, \ + timedelta_for_expiry.seconds % 31557600 // 86400, \ + timedelta_for_expiry.seconds % 86400 // 3600, timedelta_for_expiry.seconds % 3600 // 60 + if not any([years, days, hours, minutes]): + return _("less than a minute") + time_names = (ngettext("year", "years", years), ngettext("day", "days", days), ngettext("hour", "hours", hours), ngettext("minute", "minutes", minutes)) + final_time = [] + for num, timev in enumerate([years, days, hours, minutes]): + if timev: + final_time.append(_("{time_unit} {time_number}").format(time_unit=time_names[num], time_number=timev)) + return ", ".join(final_time) + else: + return change["logparams"]["duration"] # Temporary? Should be rare? We will see in testing + + +@formatter.embed(event="block/block", mode="embed") +def embed_block_block(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + user = change["title"].split(':', 1)[1] + try: + ipaddress.ip_address(user) + embed["url"] = create_article_path("Special:Contributions/{user}".format(user=user)) + except ValueError: + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + if "sitewide" not in change["logparams"]: + restriction_description = "" + if "restrictions" in change["logparams"]: + if "pages" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"]["pages"]: + restriction_description = _("Blocked from editing the following pages: ") + for page in change["logparams"]["restrictions"]["pages"]: + restricted_pages = ["*"+i["page_title"]+"*" for i in change["logparams"]["restrictions"]["pages"]] + restriction_description = restriction_description + ", ".join(restricted_pages) + if "namespaces" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"]["namespaces"]: + namespaces = [] + if restriction_description: + restriction_description = restriction_description + _(" and namespaces: ") + else: + restriction_description = _("Blocked from editing pages on following namespaces: ") + for namespace in change["logparams"]["restrictions"]["namespaces"]: + if str(namespace) in ctx.client.namespaces: # if we have cached namespace name for given namespace number, add its name to the list + namespaces.append("*{ns}*".format(ns=ctx.client.namespaces[str(namespace)]["*"])) + else: + namespaces.append("*{ns}*".format(ns=namespace)) + restriction_description = restriction_description + ", ".join(namespaces) + restriction_description = restriction_description + "." + if len(restriction_description) > 1020: + logger.debug(restriction_description) + restriction_description = restriction_description[:1020]+"…" + embed.add_field(_("Partial block details"), restriction_description, inline=True) + block_flags = change["logparams"].get("flags") + if block_flags: + embed.add_field(_("Block flags"), ", ".join(block_flags)) # TODO Translate flags into MW messages, this requires making additional request in init_request since we want to get all messages with prefix (amprefix) block-log-flags- and that parameter is exclusive with ammessages + embed["title"] = _("Blocked {blocked_user} {time}").format(blocked_user=user, time=block_expiry(change)) + +@formatter.compact(event="block/block", mode="compact") +def compact_block_block(ctx, change): + user = change["title"].split(':', 1)[1] + restriction_description = "" + author, author_url = compact_author(ctx, change) + try: + ipaddress.ip_address(user) + link = clean_link(create_article_path("Special:Contributions/{user}".format(user=user))) + except ValueError: + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + else: + if "sitewide" not in change["logparams"]: + if "restrictions" in change["logparams"]: + if "pages" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"]["pages"]: + restriction_description = _(" on pages: ") + for page in change["logparams"]["restrictions"]["pages"]: + restricted_pages = ["*{page}*".format(page=i["page_title"]) for i in + change["logparams"]["restrictions"]["pages"]] + restriction_description = restriction_description + ", ".join(restricted_pages) + if "namespaces" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"][ + "namespaces"]: + namespaces = [] + if restriction_description: + restriction_description = restriction_description + _(" and namespaces: ") + else: + restriction_description = _(" on namespaces: ") + for namespace in change["logparams"]["restrictions"]["namespaces"]: + if str(namespace) in ctx.client.namespaces: # if we have cached namespace name for given namespace number, add its name to the list + namespaces.append("*{ns}*".format(ns=ctx.client.namespaces[str(namespace)]["*"])) + else: + namespaces.append("*{ns}*".format(ns=namespace)) + restriction_description = restriction_description + ", ".join(namespaces) + restriction_description = restriction_description + "." + if len(restriction_description) > 1020: + logger.debug(restriction_description) + restriction_description = restriction_description[:1020] + "…" + content = _( + "[{author}]({author_url}) blocked [{user}]({user_url}) {time}{restriction_desc}{comment}").format(author=author, + author_url=author_url, + user=user, + time=block_expiry(change), + user_url=link, + restriction_desc=restriction_description, + comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# block/reblock - Changing settings of a block +@formatter.embed(event="block/reblock", mode="embed") +def embed_block_reblock(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + user = change["title"].split(':', 1)[1] + embed["title"] = _("Changed block settings for {blocked_user}").format(blocked_user=sanitize_to_markdown(user)) + return embed + + +@formatter.compact(event="block/reblock") +def compact_block_reblock(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + user = change["title"].split(':', 1)[1] + content = _("[{author}]({author_url}) changed block settings for [{blocked_user}]({user_url}){comment}").format( + author=author, author_url=author_url, blocked_user=user, user_url=link, comment=ctx.parsedcomment) + diff --git a/src/api/client.py b/src/api/client.py index 30ab395..8e047ed 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -37,6 +37,7 @@ class Client: self.WIKI_JUST_DOMAIN = src.misc.WIKI_JUST_DOMAIN self.content_parser = src.misc.ContentParser self.tags = self.__recent_changes.tags + self.namespaces = self.__recent_changes.namespaces #self.make_api_request: src.rc.wiki.__recent_changes.api_request = self.__recent_changes.api_request def refresh_internal_data(self): @@ -69,7 +70,6 @@ class Client: def get_formatters(self): return self._formatters - def get_ipmapper(self) -> dict: """Returns a dict mapping IPs with amount of their edits""" return self.__recent_changes.map_ips \ No newline at end of file diff --git a/src/api/util.py b/src/api/util.py index 3a0651e..8eac730 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -40,7 +40,7 @@ def clean_link(link: str) -> str: return "<" + link.replace(" ", "_") + ">" -def sanitize_to_markdown(text: str): +def sanitize_to_markdown(text: str) -> str: """Sanitizes given text to escape markdown formatting. It is used in values that will be visible on Discord in messages""" return re.sub(r"([`_*~:<>{}@|\\])", "\\\\\\1", text, 0).replace('//', "/\\/").replace('](', "]\\(") diff --git a/src/rc_formatters.py b/src/rc_formatters.py index dd6a48d..665e971 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -163,59 +163,9 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes elif action == "protect/move_prot": elif action == "block/block": - user = change["title"].split(':', 1)[1] - restriction_description = "" - try: - ipaddress.ip_address(user) - link = link_formatter(create_article_path("Special:Contributions/{user}".format(user=user))) - except ValueError: - link = link_formatter(create_article_path(change["title"])) - if change["logparams"]["duration"] in ["infinite", "indefinite", "infinity", "never"]: - block_time = _("for infinity and beyond") - else: - english_length = re.sub(r"(\d+)", "", change["logparams"][ - "duration"]) # note that translation won't work for millenia and century yet - english_length_num = re.sub(r"(\D+)", "", change["logparams"]["duration"]) - try: - if "@" in english_length: - raise ValueError - english_length = english_length.rstrip("s").strip() - block_time = _("for {num} {translated_length}").format(num=english_length_num, - translated_length=ngettext(english_length, - english_length + "s", - int(english_length_num))) - except (AttributeError, ValueError): - date_time_obj = datetime.datetime.strptime(change["logparams"]["expiry"], '%Y-%m-%dT%H:%M:%SZ') - block_time = _("until {}").format(date_time_obj.strftime("%Y-%m-%d %H:%M:%S UTC")) - if "sitewide" not in change["logparams"]: - if "restrictions" in change["logparams"]: - if "pages" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"]["pages"]: - restriction_description = _(" on pages: ") - for page in change["logparams"]["restrictions"]["pages"]: - restricted_pages = ["*{page}*".format(page=i["page_title"]) for i in change["logparams"]["restrictions"]["pages"]] - restriction_description = restriction_description + ", ".join(restricted_pages) - if "namespaces" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"]["namespaces"]: - namespaces = [] - if restriction_description: - restriction_description = restriction_description + _(" and namespaces: ") - else: - restriction_description = _(" on namespaces: ") - for namespace in change["logparams"]["restrictions"]["namespaces"]: - if str(namespace) in recent_changes.namespaces: # if we have cached namespace name for given namespace number, add its name to the list - namespaces.append("*{ns}*".format(ns=recent_changes.namespaces[str(namespace)]["*"])) - else: - namespaces.append("*{ns}*".format(ns=namespace)) - restriction_description = restriction_description + ", ".join(namespaces) - restriction_description = restriction_description + "." - if len(restriction_description) > 1020: - logger.debug(restriction_description) - restriction_description = restriction_description[:1020] + "…" - content = _( - "[{author}]({author_url}) blocked [{user}]({user_url}) {time}{restriction_desc}{comment}").format(author=author, author_url=author_url, user=user, time=block_time, user_url=link, restriction_desc=restriction_description, comment=parsed_comment) + elif action == "block/reblock": - link = link_formatter(create_article_path(change["title"])) - user = change["title"].split(':', 1)[1] - content = _("[{author}]({author_url}) changed block settings for [{blocked_user}]({user_url}){comment}").format(author=author, author_url=author_url, blocked_user=user, user_url=link, comment=parsed_comment) + elif action == "block/unblock": link = link_formatter(create_article_path(change["title"])) user = change["title"].split(':', 1)[1] @@ -702,58 +652,9 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): elif action == "protect/move_prot": elif action == "block/block": - user = change["title"].split(':', 1)[1] - try: - ipaddress.ip_address(user) - link = create_article_path("Special:Contributions/{user}".format(user=user)) - except ValueError: - link = create_article_path(change["title"]) - if change["logparams"]["duration"] in ["infinite", "indefinite", "infinity", "never"]: - block_time = _("for infinity and beyond") - else: - english_length = re.sub(r"(\d+)", "", change["logparams"]["duration"]) # note that translation won't work for millenia and century yet - english_length_num = re.sub(r"(\D+)", "", change["logparams"]["duration"]) - try: - if "@" in english_length: - raise ValueError - english_length = english_length.rstrip("s").strip() - block_time = _("for {num} {translated_length}").format(num=english_length_num, translated_length=ngettext(english_length, english_length + "s", int(english_length_num))) - except (AttributeError, ValueError): - if "expiry" in change["logparams"]: - date_time_obj = datetime.datetime.strptime(change["logparams"]["expiry"], '%Y-%m-%dT%H:%M:%SZ') - block_time = _("until {}").format(date_time_obj.strftime("%Y-%m-%d %H:%M:%S UTC")) - else: - block_time = _("unknown expiry time") # THIS IS HERE JUST TEMPORARY AS A HOT FIX TO #157, will be changed with release of 1.13 - if "sitewide" not in change["logparams"]: - restriction_description = "" - if "restrictions" in change["logparams"]: - if "pages" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"]["pages"]: - restriction_description = _("Blocked from editing the following pages: ") - for page in change["logparams"]["restrictions"]["pages"]: - restricted_pages = ["*"+i["page_title"]+"*" for i in change["logparams"]["restrictions"]["pages"]] - restriction_description = restriction_description + ", ".join(restricted_pages) - if "namespaces" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"]["namespaces"]: - namespaces = [] - if restriction_description: - restriction_description = restriction_description + _(" and namespaces: ") - else: - restriction_description = _("Blocked from editing pages on following namespaces: ") - for namespace in change["logparams"]["restrictions"]["namespaces"]: - if str(namespace) in recent_changes.namespaces: # if we have cached namespace name for given namespace number, add its name to the list - namespaces.append("*{ns}*".format(ns=recent_changes.namespaces[str(namespace)]["*"])) - else: - namespaces.append("*{ns}*".format(ns=namespace)) - restriction_description = restriction_description + ", ".join(namespaces) - restriction_description = restriction_description + "." - if len(restriction_description) > 1020: - logger.debug(restriction_description) - restriction_description = restriction_description[:1020]+"…" - embed.add_field(_("Partial block details"), restriction_description, inline=True) - embed["title"] = _("Blocked {blocked_user} {time}").format(blocked_user=user, time=block_time) + elif action == "block/reblock": - link = create_article_path(change["title"]) - user = change["title"].split(':', 1)[1] - embed["title"] = _("Changed block settings for {blocked_user}").format(blocked_user=user) + elif action == "block/unblock": link = create_article_path(change["title"]) user = change["title"].split(':', 1)[1] From 5f8b537259bdce6cd2811e25e47497d70f78b27f Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 2 May 2021 23:44:32 +0200 Subject: [PATCH 028/173] Fix #202 --- src/misc.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/misc.py b/src/misc.py index a2c847d..aec98d6 100644 --- a/src/misc.py +++ b/src/misc.py @@ -104,6 +104,17 @@ def weighted_average(value, weight, new_value): return round(((value * weight) + new_value) / (weight + 1), 2) +def class_searcher(attribs: list, sclass: str) -> bool: + """Function to search certain string (sclass) in attribute list of given tag provided by HTMLParser on handle_starttag + + :returns True if element is of given sclass False if it isn't + """ + for attr in attribs: + if attr[0] == "class": + if sclass in attr[1]: + return True + return False + class ContentParser(HTMLParser): """ContentPerser is an implementation of HTMLParser that parses output of action=compare&prop=diff API request for two MediaWiki revisions. It extracts the following: @@ -125,13 +136,13 @@ class ContentParser(HTMLParser): def handle_starttag(self, tagname, attribs): if tagname == "ins" or tagname == "del": self.current_tag = tagname - if tagname == "td" and "diff-addedline" in attribs[0] and self.ins_length <= 1000: + if tagname == "td" and class_searcher(attribs, "diff-addedline") and self.ins_length <= 1000: self.current_tag = "tda" self.last_ins = "" - if tagname == "td" and "diff-deletedline" in attribs[0] and self.del_length <= 1000: + if tagname == "td" and class_searcher(attribs, "diff-deletedline") and self.del_length <= 1000: self.current_tag = "tdd" self.last_del = "" - if tagname == "td" and "diff-empty" in attribs[0]: + if tagname == "td" and class_searcher(attribs, "diff-empty"): self.empty = True def handle_data(self, data): From 1b417ce359987c89e38f0b372a247dc9a0c753c2 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 3 May 2021 00:02:03 +0200 Subject: [PATCH 029/173] Optimized new function --- src/misc.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/misc.py b/src/misc.py index aec98d6..38596f1 100644 --- a/src/misc.py +++ b/src/misc.py @@ -104,16 +104,16 @@ def weighted_average(value, weight, new_value): return round(((value * weight) + new_value) / (weight + 1), 2) -def class_searcher(attribs: list, sclass: str) -> bool: - """Function to search certain string (sclass) in attribute list of given tag provided by HTMLParser on handle_starttag +def class_searcher(attribs: list) -> str: + """Function to return classes of given element in HTMLParser on handle_starttag - :returns True if element is of given sclass False if it isn't + :returns a string with all of the classes of element """ for attr in attribs: if attr[0] == "class": - if sclass in attr[1]: - return True - return False + return attr[1] + return "" + class ContentParser(HTMLParser): """ContentPerser is an implementation of HTMLParser that parses output of action=compare&prop=diff API request @@ -136,14 +136,16 @@ class ContentParser(HTMLParser): def handle_starttag(self, tagname, attribs): if tagname == "ins" or tagname == "del": self.current_tag = tagname - if tagname == "td" and class_searcher(attribs, "diff-addedline") and self.ins_length <= 1000: - self.current_tag = "tda" - self.last_ins = "" - if tagname == "td" and class_searcher(attribs, "diff-deletedline") and self.del_length <= 1000: - self.current_tag = "tdd" - self.last_del = "" - if tagname == "td" and class_searcher(attribs, "diff-empty"): - self.empty = True + if tagname == "td": + classes = class_searcher(attribs).split(' ') + if "diff-addedline" in classes and self.ins_length <= 1000: + self.current_tag = "tda" + self.last_ins = "" + if "diff-deletedline" in classes and self.del_length <= 1000: + self.current_tag = "tdd" + self.last_del = "" + if "diff-empty" in classes: + self.empty = True def handle_data(self, data): def escape_formatting(data: str) -> str: From 77bdac1349269fcc14bd518d7c7b5f4a253865c9 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 3 May 2021 01:46:40 +0200 Subject: [PATCH 030/173] added possibility to use hooks --- src/api/hook.py | 21 +++++++++++++++++++++ src/api/hooks.py | 2 ++ src/rcgcdw.py | 10 +++++++--- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/api/hook.py b/src/api/hook.py index e4d9ae0..4f5d12b 100644 --- a/src/api/hook.py +++ b/src/api/hook.py @@ -13,3 +13,24 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . +import src.api.hooks + + +def pre_hook(func): + """ + Decorator to register a pre hook and return a function + + :return: func + """ + src.api.hooks.pre_hooks.append(func) + return func + + +def post_hook(func): + """ + Decorator to register a post hook and return a function + + :return: func + """ + src.api.hooks.post_hooks.append(func) + return func diff --git a/src/api/hooks.py b/src/api/hooks.py index 5c7157e..87699ca 100644 --- a/src/api/hooks.py +++ b/src/api/hooks.py @@ -15,3 +15,5 @@ # Made just to avoid circular imports formatter_hooks = {} +pre_hooks = [] +post_hooks = [] \ No newline at end of file diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 3253e39..22cd2f5 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -27,11 +27,11 @@ from collections import defaultdict, Counter from typing import Optional import src.api.client from src.api.context import Context -from src.api.hooks import formatter_hooks +from src.api.hooks import formatter_hooks, pre_hooks, post_hooks from src.configloader import settings from src.misc import add_to_dict, datafile, \ WIKI_API_PATH -from src.api.util import create_article_path, default_message +from src.api.util import create_article_path, default_message, sanitize_to_markdown from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata from src.exceptions import MWError @@ -239,6 +239,8 @@ def rc_processor(change, changed_categories): page_id=change.get("pageid", None)) logger.debug(change) context = Context(settings["appearance"]["mode"], settings["webhookURL"], client) + for hook in pre_hooks: + hook(change) if ("actionhidden" in change or "suppressed" in change) and "suppressed" not in settings["ignored"]: # if event is hidden using suppression context.event = "suppressed" discord_message: Optional[DiscordMessage] = default_message("suppressed", formatter_hooks)(context, change) @@ -246,7 +248,7 @@ def rc_processor(change, changed_categories): if "commenthidden" not in change: LinkParser.feed(change.get("parsedcomment", "")) parsed_comment = LinkParser.new_string - parsed_comment = re.sub(r"(`|_|\*|~|{|}|\|\|)", "\\\\\\1", parsed_comment) + parsed_comment = sanitize_to_markdown(parsed_comment) else: parsed_comment = _("~~hidden~~") context.set_parsedcomment(parsed_comment) @@ -270,6 +272,8 @@ def rc_processor(change, changed_categories): discord_message: Optional[DiscordMessage] = default_message(identification_string, formatter_hooks)(context, change) if identification_string in ("delete/delete", "delete/delete_redir") and AUTO_SUPPRESSION_ENABLED: delete_messages(dict(pageid=change.get("pageid"))) + for hook in post_hooks: + hook(discord_message, metadata) send_to_discord(discord_message, metadata) From f09862c2777936e2afbdf797a24c3c942e0d95b6 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 3 May 2021 02:16:19 +0200 Subject: [PATCH 031/173] Migrated a few formatters --- extensions/base/mediawiki.py | 93 +++++++++++++++++++++++++++++++++++- src/rc_formatters.py | 40 ++++------------ src/rcgcdw.py | 7 +++ 3 files changed, 107 insertions(+), 33 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index b669324..6b12388 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -253,6 +253,51 @@ def compact_delete_delete_redir(ctx, change) -> DiscordMessage: comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) +# delete/restore - Restoring a page + +@formatter.embed(event="delete/restore", mode="embed") +def embed_delete_restore(ctx, change) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed['url'] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Restored {article}").format(article=sanitize_to_markdown(change["title"])) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="delete/restore", mode="compact") +def compact_delete_restore(ctx, change) -> DiscordMessage: + page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) restored [{article}]({article_url}){comment}").format(author=author, + author_url=author_url, + article=sanitize_to_markdown(change["title"]), + article_url=page_link, + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# delete/event - Deleting an event with revdelete feature + +@formatter.embed(event="delete/event", mode="embed") +def embed_delete_event(ctx, change) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed['url'] = create_article_path("Special:RecentChanges") + embed["title"] = _("Changed visibility of log events") + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="delete/event", mode="compact") +def compact_delete_event(ctx, change) -> DiscordMessage: + page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) changed visibility of log events{comment}").format(author=author, + author_url=author_url, comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # move/move - Moving pages @@ -326,6 +371,7 @@ def embed_protect_move_prot(ctx, change): embed["title"] = _("Moved protection settings from {redirect}{article} to {title}").format( redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]), title=sanitize_to_markdown(change["title"])) + embed["description"] = ctx.parsedcomment return embed @formatter.compact(event="protect/move_prot", mode="compact") @@ -418,7 +464,7 @@ def compact_protect_unprotect(ctx, change): author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, comment=ctx.parsedcomment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) -# block/block +# block/block - Blocking an user def block_expiry(change: dict) -> str: if change["logparams"]["duration"] in ["infinite", "indefinite", "infinity", "never"]: return _("for infinity and beyond") @@ -481,6 +527,8 @@ def embed_block_block(ctx, change): if block_flags: embed.add_field(_("Block flags"), ", ".join(block_flags)) # TODO Translate flags into MW messages, this requires making additional request in init_request since we want to get all messages with prefix (amprefix) block-log-flags- and that parameter is exclusive with ammessages embed["title"] = _("Blocked {blocked_user} {time}").format(blocked_user=user, time=block_expiry(change)) + embed["description"] = ctx.parsedcomment + return embed @formatter.compact(event="block/block", mode="compact") def compact_block_block(ctx, change): @@ -537,6 +585,7 @@ def embed_block_reblock(ctx, change): embed["url"] = create_article_path(sanitize_to_url(change["title"])) user = change["title"].split(':', 1)[1] embed["title"] = _("Changed block settings for {blocked_user}").format(blocked_user=sanitize_to_markdown(user)) + embed["description"] = ctx.parsedcomment return embed @@ -547,4 +596,46 @@ def compact_block_reblock(ctx, change): user = change["title"].split(':', 1)[1] content = _("[{author}]({author_url}) changed block settings for [{blocked_user}]({user_url}){comment}").format( author=author, author_url=author_url, blocked_user=user, user_url=link, comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# block/unblock - Unblocking an user + +@formatter.embed(event="block/unblock", mode="embed") +def embed_block_unblock(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + user = change["title"].split(':', 1)[1] + embed["title"] = _("Unblocked {blocked_user}").format(blocked_user=user) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="block/unblock") +def compact_block_unblock(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + user = change["title"].split(':', 1)[1] + content = _("[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}").format(author=author, + author_url=author_url, + blocked_user=user, + user_url=link, + comment=ctx.parsedcomment) + + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# suppressed - Custom event for whenever there is limited information available about the event due to revdel + +@formatter.embed(event="suppressed", mode="embed") +def embed_suppressed(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed["url"] = create_article_path("") + embed["title"] = _("Action has been hidden by administration") + embed["author"]["name"] = _("Unknown") + return embed + +@formatter.compact(event="suppressed", mode="compact") +def compact_suppressed(ctx, change): + content = _("An action has been hidden by administration.") + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) \ No newline at end of file diff --git a/src/rc_formatters.py b/src/rc_formatters.py index 665e971..b27f20c 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -167,9 +167,7 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes elif action == "block/reblock": elif action == "block/unblock": - link = link_formatter(create_article_path(change["title"])) - user = change["title"].split(':', 1)[1] - content = _("[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}").format(author=author, author_url=author_url, blocked_user=user, user_url=link, comment=parsed_comment) + elif action == "curseprofile/comment-created": link = link_formatter(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) target_user = change["title"].split(':', 1)[1] @@ -284,18 +282,9 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revisions{comment}", change["logparams"]["count"]).format( author=author, author_url=author_url, article=change["title"], article_url=link, count=change["logparams"]["count"], comment=parsed_comment) elif action == "delete/restore": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) restored [{article}]({article_url}){comment}").format(author=author, author_url=author_url, article=change["title"], article_url=link, comment=parsed_comment) + elif action == "delete/event": - content = _("[{author}]({author_url}) changed visibility of log events{comment}").format(author=author, author_url=author_url, comment=parsed_comment) - if AUTO_SUPPRESSION_ENABLED: - try: - logparams = change["logparams"] - except KeyError: - pass - else: - for revid in logparams.get("ids", []): - delete_messages(dict(revid=revid)) + elif action == "import/interwiki": link = link_formatter(create_article_path(change["title"])) source_link = link_formatter(create_article_path(change["logparams"]["interwiki_title"])) @@ -605,7 +594,7 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes author=author, author_url=author_url, old_name=change["logparams"]["olduser"], new_name=change["logparams"]["newuser"], link=link, comment=parsed_comment ) elif action == "suppressed": - content = _("An action has been hidden by administration.") + else: logger.warning("No entry for {event} with params: {params}".format(event=action, params=change)) if not settings.get("support", None): @@ -656,9 +645,7 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): elif action == "block/reblock": elif action == "block/unblock": - link = create_article_path(change["title"]) - user = change["title"].split(':', 1)[1] - embed["title"] = _("Unblocked {blocked_user}").format(blocked_user=user) + elif action == "curseprofile/comment-created": if settings["appearance"]["embed"]["show_edit_changes"]: parsed_comment = recent_changes.pull_comment(change["logparams"]["4:comment_id"]) @@ -763,18 +750,9 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): "Imported {article} with {count} revisions", change["logparams"]["count"]).format( article=change["title"], count=change["logparams"]["count"]) elif action == "delete/restore": - link = create_article_path(change["title"]) - embed["title"] = _("Restored {article}").format(article=change["title"]) + elif action == "delete/event": - link = create_article_path("Special:RecentChanges") - embed["title"] = _("Changed visibility of log events") - if AUTO_SUPPRESSION_ENABLED: - try: - logparams = change["logparams"] - except KeyError: - pass - else: - redact_messages(logparams.get("ids", []), 1, logparams.get("new", {})) + elif action == "import/interwiki": link = create_article_path(change["title"]) embed["title"] = ngettext("Imported {article} with {count} revision from \"{source}\"", @@ -999,9 +977,7 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): embed["title"] = _("Renamed user \"{old_name}\" to \"{new_name}\"").format(old_name=change["logparams"]["olduser"], new_name=change["logparams"]["newuser"]) link = create_article_path("User:"+change["logparams"]["newuser"]) elif action == "suppressed": - link = create_article_path("") - embed["title"] = _("Action has been hidden by administration") - embed["author"]["name"] = _("Unknown") + else: logger.warning("No entry for {event} with params: {params}".format(event=action, params=change)) link = create_article_path("Special:RecentChanges") diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 22cd2f5..2100ed2 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -272,6 +272,13 @@ def rc_processor(change, changed_categories): discord_message: Optional[DiscordMessage] = default_message(identification_string, formatter_hooks)(context, change) if identification_string in ("delete/delete", "delete/delete_redir") and AUTO_SUPPRESSION_ENABLED: delete_messages(dict(pageid=change.get("pageid"))) + elif identification_string == "delete/event" and AUTO_SUPPRESSION_ENABLED: + logparams = change.get('logparams', {"ids": []}) + if settings["appearance"]["mode"] == "embed": + redact_messages(logparams.get("ids", []), 1, logparams.get("new", {})) + else: + for revid in logparams.get("ids", []): + delete_messages(dict(revid=revid)) for hook in post_hooks: hook(discord_message, metadata) send_to_discord(discord_message, metadata) From ecaa2496ddb797b5c179c4098a189dfdd182cfd7 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 3 May 2021 13:37:42 +0200 Subject: [PATCH 032/173] Added more debug information --- src/discussions.py | 1 + src/misc.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/discussions.py b/src/discussions.py index 25e3036..5e0d449 100644 --- a/src/discussions.py +++ b/src/discussions.py @@ -77,6 +77,7 @@ def fetch_discussions(): for post in request_json: if int(post["id"]) > storage["discussion_id"]: try: + discussion_logger.debug(f"Sending discussion post with ID {post['id']}") parse_discussion_post(post, comment_pages) except ArticleCommentError: return None diff --git a/src/misc.py b/src/misc.py index 38596f1..2466340 100644 --- a/src/misc.py +++ b/src/misc.py @@ -47,6 +47,7 @@ class DataFile: """Data class which instance of is shared by multiple modules to remain consistent and do not cause too many IO operations.""" def __init__(self): self.data = self.load_datafile() + misc_logger.debug("Current contents of data.json {}".format(self.data)) self.changed = False @staticmethod @@ -79,6 +80,7 @@ class DataFile: with open("data.json", "w") as data_file: data_file.write(json.dumps(self.data, indent=4)) self.changed = False + misc_logger.debug("Saving the database succeeded.") except PermissionError: misc_logger.critical("Could not modify a data file (no permissions). No way to store last edit.") sys.exit(1) From 75dafb2337f70f296bc43678fced6226872aa2a0 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 3 May 2021 13:38:18 +0200 Subject: [PATCH 033/173] Added more debug information 2 --- src/wiki.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/wiki.py b/src/wiki.py index 504418e..185e9b6 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -197,9 +197,10 @@ class Wiki(object): if highest_id is None or change["rcid"] > highest_id: highest_id = change["rcid"] if not dry_run: + logger.debug(f"Currently considering whether IDs in newest batch are lower than {recent_id}.") for change in changes: if change["rcid"] <= recent_id: - logger.debug("Change ({}) is lower or equal to recent_id {}".format(change["rcid"], recent_id)) + #logger.debug("Change ({}) is lower or equal to recent_id {}".format(change["rcid"], recent_id)) continue logger.debug(recent_id) self.rc_processor(change, categorize_events.get(change.get("revid"), None)) From 094925573a2d3af91ef67c176815a4cc98d4c603 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 3 May 2021 14:52:04 +0200 Subject: [PATCH 034/173] Add #193 --- src/rcgcdw.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 2100ed2..9e5348f 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -251,6 +251,8 @@ def rc_processor(change, changed_categories): parsed_comment = sanitize_to_markdown(parsed_comment) else: parsed_comment = _("~~hidden~~") + if not parsed_comment and context.message_type == "embed" and settings["appearance"].get("embed", {}).get("show_no_description_provided", True): + parsed_comment = _("No description provided") context.set_parsedcomment(parsed_comment) if "userhidden" in change: change["user"] = _("hidden") From 46e9318e02d25f51eb517a0c3d0c51d5e37b509c Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 3 May 2021 16:08:33 +0200 Subject: [PATCH 035/173] Migrated more formatters --- extensions/base/mediawiki.py | 130 ++++++++++++++++++++++++++++++++++- src/rc_formatters.py | 90 ++---------------------- src/rcgcdw.py | 9 ++- 3 files changed, 144 insertions(+), 85 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 6b12388..5aa3de3 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -298,6 +298,34 @@ def compact_delete_event(ctx, change) -> DiscordMessage: author_url=author_url, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) +# delete/revision - Deleting revision information + +@formatter.embed(event="delete/revision", mode="embed") +def embed_delete_revision(ctx, change) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + amount = len(change["logparams"]["ids"]) + embed['url'] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = ngettext("Changed visibility of revision on page {article} ", + "Changed visibility of {amount} revisions on page {article} ", amount).format( + article=change["title"], amount=amount) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="delete/revision", mode="compact") +def compact_delete_revision(ctx, change) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + amount = len(change["logparams"]["ids"]) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = ngettext( + "[{author}]({author_url}) changed visibility of revision on page [{article}]({article_url}){comment}", + "[{author}]({author_url}) changed visibility of {amount} revisions on page [{article}]({article_url}){comment}", + amount).format(author=author, author_url=author_url, + article=change["title"], article_url=link, amount=amount, comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # move/move - Moving pages @@ -638,4 +666,104 @@ def embed_suppressed(ctx, change): @formatter.compact(event="suppressed", mode="compact") def compact_suppressed(ctx, change): content = _("An action has been hidden by administration.") - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) \ No newline at end of file + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# import/upload - Importing pages by uploading exported XML files + +@formatter.embed(event="import/upload", mode="embed") +def embed_import_upload(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = ngettext("Imported {article} with {count} revision", + "Imported {article} with {count} revisions", change["logparams"]["count"]).format( + article=sanitize_to_markdown(change["title"]), count=change["logparams"]["count"]) + return embed + + +@formatter.compact(event="import/upload", mode="compact") +def compact_import_upload(ctx, change): + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = ngettext("[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision{comment}", + "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revisions{comment}", + change["logparams"]["count"]).format( + author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, + count=change["logparams"]["count"], comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# import/interwiki - Importing interwiki entries + +@formatter.embed(event="import/interwiki", mode="embed") +def embed_import_interwiki(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = ngettext("Imported {article} with {count} revision from \"{source}\"", + "Imported {article} with {count} revisions from \"{source}\"", + change["logparams"]["count"]).format( + article=sanitize_to_markdown(change["title"]), count=change["logparams"]["count"], source=sanitize_to_markdown(change["logparams"]["interwiki_title"])) + return embed + +@formatter.compact(event="import/interwiki", mode="compact") +def compact_import_interwiki(ctx, change): + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + author, author_url = compact_author(ctx, change) + source_link = clean_link(create_article_path(change["logparams"]["interwiki_title"])) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = ngettext( + "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision from [{source}]({source_url}){comment}", + "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revisions from [{source}]({source_url}){comment}", + change["logparams"]["count"]).format( + author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, + count=change["logparams"]["count"], source=sanitize_to_markdown(change["logparams"]["interwiki_title"]), source_url=source_link, + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# rights/rights - Assigning rights groups +def get_changed_groups(change: dict, separator: str): + """Creates strings comparing the changes between the user groups for the user""" + old_groups = {_(x) for x in change["logparams"]["oldgroups"]} # translate all groups and pull them into a set + new_groups = {_(x) for x in change["logparams"]["newgroups"]} + added = separator.join(["+ " + x for x in new_groups-old_groups]) # add + before every string and join them with separator + removed = separator.join(["- " + x for x in old_groups-new_groups]) + return added, removed + +@formatter.embed(event="rights/rights", mode="embed") +def embed_rights_rights(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url("User:{}".format(change["title"].split(":")[1]))) + if ctx.event == "rights/rights": + embed["title"] = _("Changed group membership for {target}").format(target=change["title"].split(":")[1]) + else: + author_url = "" + embed.set_author(_("System"), author_url) + embed["title"] = _("{target} got autopromoted to a new usergroup").format( + target=change["title"].split(":")[1]) + # if len(change["logparams"]["oldgroups"]) < len(change["logparams"]["newgroups"]): + # embed["thumbnail"]["url"] = "https://i.imgur.com/WnGhF5g.gif" + added, removed = get_changed_groups(change, "\n") + reason = ": {desc}".format(desc=ctx.parsedcomment) if change.get("parsedcomment", None) else "" + embed["description"] = _("{reason}\n{added}{linebreak}{removed}").format(added=added, removed=removed, reason=reason, + linebreak="\n" if added else "") + return embed + +@formatter.compact(event="rights/rights") +def compact_rights_rights(ctx, change): + link = clean_link(create_article_path(sanitize_to_url("User:{user}".format(user=change["title"].split(":")[1])))) + added, removed = get_changed_groups(change, ", ") + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + if ctx.event == "rights/rights": + content = _( + "[{author}]({author_url}) changed group membership for [{target}]({target_url}) {added} {removed}{comment}").format( + author=author, author_url=author_url, target=change["title"].split(":")[1], target_url=link, + added=added, removed=removed, comment=parsed_comment) + else: + content = _("{author} autopromoted [{target}]({target_url}) {added} {removed}{comment}").format( + author=_("System"), author_url=author_url, target=change["title"].split(":")[1], target_url=link, + added=added, removed=removed, comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/src/rc_formatters.py b/src/rc_formatters.py index b27f20c..c077f94 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -237,25 +237,7 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes field=profile_field_name(change["logparams"]['4:section'], False), desc=BeautifulSoup(change["parsedcomment"], "lxml").get_text()) elif action in ("rights/rights", "rights/autopromote"): - link = link_formatter(create_article_path("User:{user}".format(user=change["title"].split(":")[1]))) - old_groups = [] - new_groups = [] - for name in change["logparams"]["oldgroups"]: - old_groups.append(_(name)) - for name in change["logparams"]["newgroups"]: - new_groups.append(_(name)) - if len(old_groups) == 0: - old_groups = [_("none")] - if len(new_groups) == 0: - new_groups = [_("none")] - if action == "rights/rights": - content = _("[{author}]({author_url}) changed group membership for [{target}]({target_url}) from {old_groups} to {new_groups}{comment}").format(author=author, author_url=author_url, target=change["title"].split(":")[1], target_url=link, old_groups=", ".join(old_groups), new_groups=', '.join(new_groups), comment=parsed_comment) - else: - content = _("{author} autopromoted [{target}]({target_url}) from {old_groups} to {new_groups}{comment}").format( - author=_("System"), author_url=author_url, target=change["title"].split(":")[1], target_url=link, - old_groups=", ".join(old_groups), new_groups=', '.join(new_groups), - comment=parsed_comment) elif action == "protect/protect": elif action == "protect/modify": @@ -263,34 +245,15 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes elif action == "protect/unprotect": elif action == "delete/revision": - amount = len(change["logparams"]["ids"]) - link = link_formatter(create_article_path(change["title"])) - content = ngettext("[{author}]({author_url}) changed visibility of revision on page [{article}]({article_url}){comment}", - "[{author}]({author_url}) changed visibility of {amount} revisions on page [{article}]({article_url}){comment}", amount).format(author=author, author_url=author_url, - article=change["title"], article_url=link, amount=amount, comment=parsed_comment) - if AUTO_SUPPRESSION_ENABLED: - try: - logparams = change["logparams"] - pageid = change["pageid"] - except KeyError: - pass - else: - delete_messages(dict(pageid=pageid)) + elif action == "import/upload": - link = link_formatter(create_article_path(change["title"])) - content = ngettext("[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision{comment}", - "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revisions{comment}", change["logparams"]["count"]).format( - author=author, author_url=author_url, article=change["title"], article_url=link, count=change["logparams"]["count"], comment=parsed_comment) + elif action == "delete/restore": elif action == "delete/event": elif action == "import/interwiki": - link = link_formatter(create_article_path(change["title"])) - source_link = link_formatter(create_article_path(change["logparams"]["interwiki_title"])) - content = ngettext("[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision from [{source}]({source_url}){comment}", - "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revisions from [{source}]({source_url}){comment}", change["logparams"]["count"]).format( - author=author, author_url=author_url, article=change["title"], article_url=link, count=change["logparams"]["count"], source=change["logparams"]["interwiki_title"], source_url=source_link, comment=parsed_comment) + elif action == "abusefilter/modify": link = link_formatter(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"]))) content = _("[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})").format(author=author, author_url=author_url, number=change["logparams"]['newId'], filter_url=link) @@ -702,29 +665,7 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): else: embed["title"] = _("Deleted a comment on their own profile") elif action in ("rights/rights", "rights/autopromote"): - link = create_article_path("User:{}".format(change["title"].split(":")[1])) - if action == "rights/rights": - embed["title"] = _("Changed group membership for {target}").format(target=change["title"].split(":")[1]) - else: - author_url = "" - embed.set_author(_("System"), author_url) - embed["title"] = _("{target} got autopromoted to a new usergroup").format( - target=change["title"].split(":")[1]) - if len(change["logparams"]["oldgroups"]) < len(change["logparams"]["newgroups"]): - embed["thumbnail"]["url"] = "https://i.imgur.com/WnGhF5g.gif" - old_groups = [] - new_groups = [] - for name in change["logparams"]["oldgroups"]: - old_groups.append(_(name)) - for name in change["logparams"]["newgroups"]: - new_groups.append(_(name)) - if len(old_groups) == 0: - old_groups = [_("none")] - if len(new_groups) == 0: - new_groups = [_("none")] - reason = ": {desc}".format(desc=parsed_comment) if parsed_comment != _("No description provided") else "" - parsed_comment = _("Groups changed from {old_groups} to {new_groups}{reason}").format( - old_groups=", ".join(old_groups), new_groups=', '.join(new_groups), reason=reason) + elif action == "protect/protect": elif action == "protect/modify": @@ -732,32 +673,15 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): elif action == "protect/unprotect": elif action == "delete/revision": - amount = len(change["logparams"]["ids"]) - link = create_article_path(change["title"]) - embed["title"] = ngettext("Changed visibility of revision on page {article} ", - "Changed visibility of {amount} revisions on page {article} ", amount).format( - article=change["title"], amount=amount) - if AUTO_SUPPRESSION_ENABLED: - try: - logparams = change["logparams"] - except KeyError: - pass - else: - redact_messages(logparams.get("ids", []), 0, logparams.get("new", {})) + elif action == "import/upload": - link = create_article_path(change["title"]) - embed["title"] = ngettext("Imported {article} with {count} revision", - "Imported {article} with {count} revisions", change["logparams"]["count"]).format( - article=change["title"], count=change["logparams"]["count"]) + elif action == "delete/restore": elif action == "delete/event": elif action == "import/interwiki": - link = create_article_path(change["title"]) - embed["title"] = ngettext("Imported {article} with {count} revision from \"{source}\"", - "Imported {article} with {count} revisions from \"{source}\"", change["logparams"]["count"]).format( - article=change["title"], count=change["logparams"]["count"], source=change["logparams"]["interwiki_title"]) + elif action == "abusefilter/modify": link = create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"])) embed["title"] = _("Edited abuse filter number {number}").format(number=change["logparams"]['newId']) diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 9e5348f..b2cf02a 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -272,12 +272,19 @@ def rc_processor(change, changed_categories): return context.event = identification_string discord_message: Optional[DiscordMessage] = default_message(identification_string, formatter_hooks)(context, change) - if identification_string in ("delete/delete", "delete/delete_redir") and AUTO_SUPPRESSION_ENABLED: + if identification_string in ("delete/delete", "delete/delete_redir") and AUTO_SUPPRESSION_ENABLED: # TODO Move it into a hook? delete_messages(dict(pageid=change.get("pageid"))) elif identification_string == "delete/event" and AUTO_SUPPRESSION_ENABLED: logparams = change.get('logparams', {"ids": []}) if settings["appearance"]["mode"] == "embed": redact_messages(logparams.get("ids", []), 1, logparams.get("new", {})) + else: + for logid in logparams.get("ids", []): + delete_messages(dict(logid=logid)) + elif identification_string == "delete/revision" and AUTO_SUPPRESSION_ENABLED: + logparams = change.get('logparams', {"ids": []}) + if settings["appearance"]["mode"] == "embed": + redact_messages(logparams.get("ids", []), 0, logparams.get("new", {})) else: for revid in logparams.get("ids", []): delete_messages(dict(revid=revid)) From 89edc1b443550b39e26c44da5d872051c0424267 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 3 May 2021 18:21:37 +0200 Subject: [PATCH 036/173] Don't run migration potentially getting new settings from gitlab when not needed --- src/migrations/11311.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/migrations/11311.py b/src/migrations/11311.py index ec966b2..05c1584 100644 --- a/src/migrations/11311.py +++ b/src/migrations/11311.py @@ -8,13 +8,12 @@ import sys from src.migrations.utils import return_example_file logger = logging.getLogger("rcgcdw.migrations.1.13.1.1") -base_file = return_example_file() new_settings = settings.copy() def run(): - global base_file if "event_appearance" not in settings: logger.info("Running migration 1.13.1.1") + base_file = return_example_file() if "event_appearance" not in base_file: # if local base file is outdated, download from repo base_file = return_example_file(force=True) try: From 24464847631112e76027c86273e798303b344a62 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 3 May 2021 18:57:39 +0200 Subject: [PATCH 037/173] Add timestamp to default configuration --- settings.json.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.json.example b/settings.json.example index ab27c7c..ad4ef79 100644 --- a/settings.json.example +++ b/settings.json.example @@ -43,7 +43,7 @@ "disable_existing_loggers": false, "formatters": { "standard": { - "format": "%(name)s - %(levelname)s: %(message)s" + "format": "%(name)s - %(asctime)s - %(levelname)s: %(message)s" } }, "handlers": { From 78680b83ca5d34181c73e98dee862d90d3b170cb Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 4 May 2021 23:39:21 +0200 Subject: [PATCH 038/173] Migrated a few more formatters --- extensions/base/mediawiki.py | 207 +++++++++++++++++++++++++++++++++++ src/rc_formatters.py | 58 ++-------- 2 files changed, 217 insertions(+), 48 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 5aa3de3..24be87e 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -34,6 +34,7 @@ logger = logging.getLogger("extensions.base") # Page edit - event edit, New - page creation + @formatter.embed(event="edit", mode="embed", aliases=["new"]) def embed_edit(ctx: Context, change: dict) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) @@ -255,6 +256,7 @@ def compact_delete_delete_redir(ctx, change) -> DiscordMessage: # delete/restore - Restoring a page + @formatter.embed(event="delete/restore", mode="embed") def embed_delete_restore(ctx, change) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) @@ -279,6 +281,7 @@ def compact_delete_restore(ctx, change) -> DiscordMessage: # delete/event - Deleting an event with revdelete feature + @formatter.embed(event="delete/event", mode="embed") def embed_delete_event(ctx, change) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) @@ -402,6 +405,7 @@ def embed_protect_move_prot(ctx, change): embed["description"] = ctx.parsedcomment return embed + @formatter.compact(event="protect/move_prot", mode="compact") def compact_protect_move_prot(ctx, change): author, author_url = compact_author(ctx, change) @@ -558,6 +562,7 @@ def embed_block_block(ctx, change): embed["description"] = ctx.parsedcomment return embed + @formatter.compact(event="block/block", mode="compact") def compact_block_block(ctx, change): user = change["title"].split(':', 1)[1] @@ -655,6 +660,7 @@ def compact_block_unblock(ctx, change): # suppressed - Custom event for whenever there is limited information available about the event due to revdel + @formatter.embed(event="suppressed", mode="embed") def embed_suppressed(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) @@ -663,6 +669,7 @@ def embed_suppressed(ctx, change): embed["author"]["name"] = _("Unknown") return embed + @formatter.compact(event="suppressed", mode="compact") def compact_suppressed(ctx, change): content = _("An action has been hidden by administration.") @@ -696,6 +703,7 @@ def compact_import_upload(ctx, change): # import/interwiki - Importing interwiki entries + @formatter.embed(event="import/interwiki", mode="embed") def embed_import_interwiki(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) @@ -707,6 +715,7 @@ def embed_import_interwiki(ctx, change): article=sanitize_to_markdown(change["title"]), count=change["logparams"]["count"], source=sanitize_to_markdown(change["logparams"]["interwiki_title"])) return embed + @formatter.compact(event="import/interwiki", mode="compact") def compact_import_interwiki(ctx, change): link = clean_link(create_article_path(sanitize_to_url(change["title"]))) @@ -731,6 +740,7 @@ def get_changed_groups(change: dict, separator: str): removed = separator.join(["- " + x for x in old_groups-new_groups]) return added, removed + @formatter.embed(event="rights/rights", mode="embed") def embed_rights_rights(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) @@ -751,6 +761,7 @@ def embed_rights_rights(ctx, change): linebreak="\n" if added else "") return embed + @formatter.compact(event="rights/rights") def compact_rights_rights(ctx, change): link = clean_link(create_article_path(sanitize_to_url("User:{user}".format(user=change["title"].split(":")[1])))) @@ -767,3 +778,199 @@ def compact_rights_rights(ctx, change): author=_("System"), author_url=author_url, target=change["title"].split(":")[1], target_url=link, added=added, removed=removed, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# merge/merge - Merging histories of two pages + +@formatter.embed(event="merge/merge", mode="embed") +def embed_merge_merge(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Merged revision histories of {article} into {dest}").format(article=sanitize_to_markdown(change["title"]), + dest=sanitize_to_markdown(change["logparams"][ + "dest_title"])) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="merge/merge") +def compact_merge_merge(ctx, change): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + link_dest = clean_link(create_article_path(sanitize_to_url(change["logparams"]["dest_title"]))) + content = _( + "[{author}]({author_url}) merged revision histories of [{article}]({article_url}) into [{dest}]({dest_url}){comment}").format( + author=author, author_url=author_url, article=change["title"], article_url=link, dest_url=link_dest, + dest=change["logparams"]["dest_title"], comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# newusers/autocreate - Auto creation of user account + + +@formatter.embed(event="newusers/autocreate", mode="embed") +def embed_newusers_autocreate(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Created account automatically") + return embed + + +@formatter.compact(event="newusers/autocreate") +def compact_newusers_autocreate(ctx, change): + author, author_url = compact_author(ctx, change) + content = _("Account [{author}]({author_url}) was created automatically").format(author=author, author_url=author_url) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# newusers/create - Auto creation of user account + + +@formatter.embed(event="newusers/create", mode="embed") +def embed_newusers_create(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Created account") + return embed + + +@formatter.compact(event="newusers/create") +def compact_newusers_create(ctx, change): + author, author_url = compact_author(ctx, change) + content = _("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# newusers/autocreate - Auto creation of user account + +@formatter.embed(event="newusers/create2", mode="embed") +def embed_newusers_create2(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Created account {article}").format(article=change["title"]) + return embed + +@formatter.compact(event="newusers/create2") +def compact_newusers_create2(ctx, change): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("Account [{article}]({article_url}) was created by [{author}]({author_url}){comment}").format(article=change["title"], article_url=link, author=author, author_url=author_url, comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# newusers/byemail - Creation of account by email + + +@formatter.embed(event="newusers/byemail", mode="embed") +def embed_newusers_byemail(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Created account {article} and password was sent by email").format(article=sanitize_to_markdown(change["title"])) + return embed + + +@formatter.compact(event="newusers/byemail") +def compact_newusers_byemail(ctx, change): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("Account [{article}]({article_url}) was created by [{author}]({author_url}) and password was sent by email{comment}").format(article=change["title"], article_url=link, author=author, author_url=author_url, comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# newusers/newusers - New users + + +@formatter.embed(event="newusers/newusers", mode="embed") +def embed_newusers_newusers(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path("User:{}".format(change["user"].replace(" ", "_"))) + embed["title"] = _("Created account") + return embed + + +@formatter.compact(event="newusers/newusers") +def compact_newusers_newusers(ctx, change): + author, author_url = compact_author(ctx, change) + content = _("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# interwiki/iw_add - Added entry to interwiki table + + +@formatter.embed(event="interwiki/iw_add", mode="embed") +def embed_interwiki_iw_add(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path("Special:Interwiki") + embed["title"] = _("Added an entry to the interwiki table") + embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, + prefix=change["logparams"]['0'], + website=change["logparams"]['1']) + return embed + + +@formatter.compact(event="interwiki/iw_add") +def compact_interwiki_iw_add(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path("Special:Interwiki")) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) added an entry to the [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( + author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], + website=change["logparams"]['1'], table_url=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# interwiki/iw_edit - Editing interwiki entry + + +@formatter.embed(event="interwiki/iw_edit", mode="embed") +def embed_interwiki_iw_edit(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path("Special:Interwiki") + embed["title"] = _("Edited an entry in interwiki table") + embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, + prefix=change["logparams"]['0'], + website=change["logparams"]['1']) + return embed + + +@formatter.compact(event="interwiki/iw_edit") +def compact_interwiki_iw_edit(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path("Special:Interwiki")) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _( + "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( + author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], + website=change["logparams"]['1'], table_url=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# interwiki/iw_delete - Deleting interwiki entry + + +@formatter.embed(event="interwiki/iw_delete", mode="embed") +def embed_interwiki_iw_delete(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path("Special:Interwiki") + embed["title"] = _("Deleted an entry in interwiki table") + embed["description"] = _("Prefix: {prefix} | {desc}").format(desc=ctx.parsedcomment, prefix=change["logparams"]['0']) + return embed + + +@formatter.compact(event="interwiki/iw_delete") +def compact_interwiki_iw_delete(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path("Special:Interwiki")) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) deleted an entry in [interwiki table]({table_url}){desc}").format(author=author, + author_url=author_url, + table_url=link, + desc=parsed_comment) + + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + diff --git a/src/rc_formatters.py b/src/rc_formatters.py index c077f94..b2a3b09 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -262,37 +262,17 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes create_article_path("Special:AbuseFilter/{number}".format(number=change["logparams"]['newId']))) content = _("[{author}]({author_url}) created abuse filter [number {number}]({filter_url})").format(author=author, author_url=author_url, number=change["logparams"]['newId'], filter_url=link) elif action == "merge/merge": - link = link_formatter(create_article_path(change["title"])) - link_dest = link_formatter(create_article_path(change["logparams"]["dest_title"])) - content = _("[{author}]({author_url}) merged revision histories of [{article}]({article_url}) into [{dest}]({dest_url}){comment}").format(author=author, author_url=author_url, article=change["title"], article_url=link, dest_url=link_dest, - dest=change["logparams"]["dest_title"], comment=parsed_comment) + elif action == "newusers/autocreate": - content = _("Account [{author}]({author_url}) was created automatically").format(author=author, author_url=author_url) elif action == "newusers/create": - content = _("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url) elif action == "newusers/create2": - link = link_formatter(create_article_path(change["title"])) - content = _("Account [{article}]({article_url}) was created by [{author}]({author_url}){comment}").format(article=change["title"], article_url=link, author=author, author_url=author_url, comment=parsed_comment) elif action == "newusers/byemail": - link = link_formatter(create_article_path(change["title"])) - content = _("Account [{article}]({article_url}) was created by [{author}]({author_url}) and password was sent by email{comment}").format(article=change["title"], article_url=link, author=author, author_url=author_url, comment=parsed_comment) elif action == "newusers/newusers": - content = _("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url) elif action == "interwiki/iw_add": - link = link_formatter(create_article_path("Special:Interwiki")) - content = _("[{author}]({author_url}) added an entry to the [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format(author=author, author_url=author_url, desc=parsed_comment, - prefix=change["logparams"]['0'], - website=change["logparams"]['1'], - table_url=link) elif action == "interwiki/iw_edit": - link = link_formatter(create_article_path("Special:Interwiki")) - content = _("[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format(author=author, author_url=author_url, desc=parsed_comment, - prefix=change["logparams"]['0'], - website=change["logparams"]['1'], - table_url=link) + elif action == "interwiki/iw_delete": link = link_formatter(create_article_path("Special:Interwiki")) - content = _("[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})").format(author=author, author_url=author_url, table_url=link) elif action == "contentmodel/change": link = link_formatter(create_article_path(change["title"])) content = _("[{author}]({author_url}) changed the content model of the page [{article}]({article_url}) from {old} to {new}{comment}").format(author=author, author_url=author_url, article=change["title"], article_url=link, old=change["logparams"]["oldmodel"], @@ -689,40 +669,22 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): link = create_article_path("Special:AbuseFilter/{number}".format(number=change["logparams"]['newId'])) embed["title"] = _("Created abuse filter number {number}").format(number=change["logparams"]['newId']) elif action == "merge/merge": - link = create_article_path(change["title"]) - embed["title"] = _("Merged revision histories of {article} into {dest}").format(article=change["title"], - dest=change["logparams"]["dest_title"]) elif action == "newusers/autocreate": - link = create_article_path(change["title"]) - embed["title"] = _("Created account automatically") + elif action == "newusers/create": - link = create_article_path(change["title"]) - embed["title"] = _("Created account") + elif action == "newusers/create2": - link = create_article_path(change["title"]) - embed["title"] = _("Created account {article}").format(article=change["title"]) + elif action == "newusers/byemail": - link = create_article_path(change["title"]) - embed["title"] = _("Created account {article} and password was sent by email").format(article=change["title"]) + elif action == "newusers/newusers": - link = author_url - embed["title"] = _("Created account") + elif action == "interwiki/iw_add": - link = create_article_path("Special:Interwiki") - embed["title"] = _("Added an entry to the interwiki table") - parsed_comment = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=parsed_comment, - prefix=change["logparams"]['0'], - website=change["logparams"]['1']) + elif action == "interwiki/iw_edit": - link = create_article_path("Special:Interwiki") - embed["title"] = _("Edited an entry in interwiki table") - parsed_comment = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=parsed_comment, - prefix=change["logparams"]['0'], - website=change["logparams"]['1']) + elif action == "interwiki/iw_delete": - link = create_article_path("Special:Interwiki") - embed["title"] = _("Deleted an entry in interwiki table") - parsed_comment = _("Prefix: {prefix} | {desc}").format(desc=parsed_comment, prefix=change["logparams"]['0']) + elif action == "contentmodel/change": link = create_article_path(change["title"]) embed["title"] = _("Changed the content model of the page {article}").format(article=change["title"]) From cd867cccf9267489a555a8d3506784074f9c3b6a Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 5 May 2021 23:33:38 +0200 Subject: [PATCH 039/173] Finished all MediaWiki log messages (I hope) --- extensions/base/mediawiki.py | 167 +++++++++++++++++++++++++++++++++++ src/rc_formatters.py | 50 +++-------- 2 files changed, 178 insertions(+), 39 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 24be87e..e65cbce 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -974,3 +974,170 @@ def compact_interwiki_iw_delete(ctx, change): return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) +# contentmodel/change - Changing the content model of a page + + +@formatter.embed(event="contentmodel/change", mode="embed") +def embed_contentmodel_change(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Changed the content model of the page {article}").format(article=sanitize_to_markdown(change["title"])) + embed["description"] = _("Model changed from {old} to {new}: {reason}").format(old=change["logparams"]["oldmodel"], + new=change["logparams"]["newmodel"], + reason=ctx.parsedcomment) + return embed + + +@formatter.compact(event="contentmodel/change") +def compact_contentmodel_change(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _( + "[{author}]({author_url}) changed the content model of the page [{article}]({article_url}) from {old} to {new}{comment}").format( + author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, + old=change["logparams"]["oldmodel"], + new=change["logparams"]["newmodel"], comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# contentmodel/new - Creating a page with non-default content model + + +@formatter.embed(event="contentmodel/new", mode="embed") +def embed_contentmodel_new(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Created the page {article} using a non-default content model").format(article=sanitize_to_markdown(change["title"])) + embed["description"] = _("Created with model {new}: {reason}").format(new=change["logparams"]["newmodel"], reason=ctx.parsedcomment) + return embed + + +@formatter.compact(event="contentmodel/new") +def compact_contentmodel_new(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _( + "[{author}]({author_url}) created the page [{article}]({article_url}) using a non-default content model {new}{comment}").format( + author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, + new=change["logparams"]["newmodel"], comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# managetags/create - Creating log tags + + +@formatter.embed(event="managetags/create", mode="embed") +def embed_managetags_create(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + ctx.client.refresh_internal_data() + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Created the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) + return embed + + +@formatter.compact(event="managetags/create") +def compact_managetags_create(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + ctx.client.refresh_internal_data() + content = _("[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, + author_url=author_url, + tag= + sanitize_to_markdown(change["logparams"][ + "tag"]), + tag_url=link, + comment=ctx.parsedcomment) + + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# managetags/delete - Deleting a tag + + +@formatter.embed(event="managetags/delete", mode="embed") +def embed_managetags_delete(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + ctx.client.refresh_internal_data() + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Deleted the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) + if change["logparams"]["count"] > 0: + embed.add_field(_('Removed from'), ngettext("{} revision or log entry", "{} revisions and/or log entries", + change["logparams"]["count"]).format(change["logparams"]["count"])) + return embed + + +@formatter.compact(event="managetags/delete") +def compact_managetags_delete(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + ctx.client.refresh_internal_data() + if change["logparams"]["count"] == 0: + content = _("[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, + author_url=author_url, + tag=sanitize_to_markdown(change[ + "logparams"][ + "tag"]), + tag_url=link, + comment=ctx.parsedcomment) + else: + content = ngettext( + "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed it from {count} revision or log entry{comment}", + "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed it from {count} revisions and/or log entries{comment}", + change["logparams"]["count"]).format(author=author, author_url=author_url, tag=sanitize_to_markdown(change["logparams"]["tag"]), + tag_url=link, count=change["logparams"]["count"], + comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# managetags/activate - Activating a tag + + +@formatter.embed(event="managetags/activate", mode="embed") +def embed_managetags_activate(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Activated the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) + return embed + + +@formatter.compact(event="managetags/activate") +def compact_managetags_activate(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, + author_url=author_url, + tag=sanitize_to_markdown(change[ + "logparams"][ + "tag"]), + tag_url=link, + comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# managetags/deactivate - Deactivating a tag + + +@formatter.embed(event="managetags/deactivate", mode="embed") +def embed_managetags_deactivate(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Deactivated the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) + return embed + + +@formatter.compact(event="managetags/deactivate") +def compact_managetags_deactivate(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, + author_url=author_url, + tag=sanitize_to_markdown(change[ + "logparams"][ + "tag"]), + tag_url=link, + comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + diff --git a/src/rc_formatters.py b/src/rc_formatters.py index b2a3b09..e9bcaa1 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -274,12 +274,9 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes elif action == "interwiki/iw_delete": link = link_formatter(create_article_path("Special:Interwiki")) elif action == "contentmodel/change": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) changed the content model of the page [{article}]({article_url}) from {old} to {new}{comment}").format(author=author, author_url=author_url, article=change["title"], article_url=link, old=change["logparams"]["oldmodel"], - new=change["logparams"]["newmodel"], comment=parsed_comment) + elif action == "contentmodel/new": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) created the page [{article}]({article_url}) using a non-default content model {new}{comment}").format(author=author, author_url=author_url, article=change["title"], article_url=link, new=change["logparams"]["newmodel"], comment=parsed_comment) + elif action == "sprite/sprite": link = link_formatter(create_article_path(change["title"])) content = _("[{author}]({author_url}) edited the sprite for [{article}]({article_url})").format(author=author, author_url=author_url, article=change["title"], article_url=link) @@ -307,24 +304,13 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes LinkParser.new_string = "" content = _("[{author}]({author_url}) replaced the Cargo table \"{table}\"").format(author=author, author_url=author_url, table=table) elif action == "managetags/create": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, author_url=author_url, tag=change["logparams"]["tag"], tag_url=link, comment=parsed_comment) - recent_changes.init_info() + elif action == "managetags/delete": - link = link_formatter(create_article_path(change["title"])) - if change["logparams"]["count"] == 0: - content = _("[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, author_url=author_url, tag=change["logparams"]["tag"], tag_url=link, comment=parsed_comment) - else: - content = ngettext("[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed it from {count} revision or log entry{comment}", - "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed it from {count} revisions and/or log entries{comment}", - change["logparams"]["count"]).format(author=author, author_url=author_url, tag=change["logparams"]["tag"], tag_url=link, count=change["logparams"]["count"], comment=parsed_comment) - recent_changes.init_info() + elif action == "managetags/activate": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, author_url=author_url, tag=change["logparams"]["tag"], tag_url=link, comment=parsed_comment) + elif action == "managetags/deactivate": link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, author_url=author_url, tag=change["logparams"]["tag"], tag_url=link, comment=parsed_comment) elif action == "managewiki/settings": # Miraheze's ManageWiki extension https://github.com/miraheze/ManageWiki content = _("[{author}]({author_url}) changed wiki settings{reason}".format(author=author, author_url=author_url, reason=parsed_comment)) elif action == "managewiki/delete": @@ -686,15 +672,9 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): elif action == "interwiki/iw_delete": elif action == "contentmodel/change": - link = create_article_path(change["title"]) - embed["title"] = _("Changed the content model of the page {article}").format(article=change["title"]) - parsed_comment = _("Model changed from {old} to {new}: {reason}").format(old=change["logparams"]["oldmodel"], - new=change["logparams"]["newmodel"], - reason=parsed_comment) + elif action == "contentmodel/new": - link = create_article_path(change["title"]) - embed["title"] = _("Created the page {article} using a non-default content model").format(article=change["title"]) - parsed_comment = _("Created with model {new}: {reason}").format(new=change["logparams"]["newmodel"], reason=parsed_comment) + elif action == "sprite/sprite": link = create_article_path(change["title"]) embed["title"] = _("Edited the sprite for {article}").format(article=change["title"]) @@ -730,21 +710,13 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): embed["title"] = _("Replaced the Cargo table \"{table}\"").format(table=table.group(1)) parsed_comment = None elif action == "managetags/create": - link = create_article_path(change["title"]) - embed["title"] = _("Created the tag \"{tag}\"").format(tag=change["logparams"]["tag"]) - recent_changes.init_info() + elif action == "managetags/delete": - link = create_article_path(change["title"]) - embed["title"] = _("Deleted the tag \"{tag}\"").format(tag=change["logparams"]["tag"]) - if change["logparams"]["count"] > 0: - embed.add_field(_('Removed from'), ngettext("{} revision or log entry", "{} revisions and/or log entries", change["logparams"]["count"]).format(change["logparams"]["count"])) - recent_changes.init_info() + elif action == "managetags/activate": - link = create_article_path(change["title"]) - embed["title"] = _("Activated the tag \"{tag}\"").format(tag=change["logparams"]["tag"]) + elif action == "managetags/deactivate": - link = create_article_path(change["title"]) - embed["title"] = _("Deactivated the tag \"{tag}\"").format(tag=change["logparams"]["tag"]) + elif action == "managewiki/settings": # Miraheze's ManageWiki extension https://github.com/miraheze/ManageWiki link = create_article_path(change["title"]) embed["title"] = _("Changed wiki settings") From f778841f3e514f3a537ef66283f020d72b4ae3d8 Mon Sep 17 00:00:00 2001 From: Frisk Date: Thu, 6 May 2021 07:38:38 +0200 Subject: [PATCH 040/173] Added abusefilter file --- extensions/base/abusefilter.py | 56 ++++++++++++++++++++++++++++++++++ src/rc_formatters.py | 25 ++------------- 2 files changed, 58 insertions(+), 23 deletions(-) create mode 100644 extensions/base/abusefilter.py diff --git a/extensions/base/abusefilter.py b/extensions/base/abusefilter.py new file mode 100644 index 0000000..f02b2f3 --- /dev/null +++ b/extensions/base/abusefilter.py @@ -0,0 +1,56 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +import ipaddress +import logging +from src.discord.message import DiscordMessage +from src.api import formatter +from src.i18n import rc_formatters +from src.api.context import Context +from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author, \ + create_article_path, sanitize_to_markdown +from src.configloader import settings + +_ = rc_formatters.gettext +ngettext = rc_formatters.ngettext + +abusefilter_results = {"": _("None"), "warn": _("Warning issued"), "block": _("**Blocked user**"), "tag": _("Tagged the edit"), "disallow": _("Disallowed the action"), "rangeblock": _("**IP range blocked**"), "throttle": _("Throttled actions"), "blockautopromote": _("Removed autoconfirmed group"), "degroup": _("**Removed from privileged groups**")} +abusefilter_actions = {"edit": _("Edit"), "upload": _("Upload"), "move": _("Move"), "stashupload": _("Stash upload"), "delete": _("Deletion"), "createaccount": _("Account creation"), "autocreateaccount": _("Auto account creation")} + +logger = logging.getLogger("extensions.base") + + +def abuse_filter_format_user(change): + author = change["user"] + if settings.get("hide_ips", False): + try: + ipaddress.ip_address(change["user"]) + except ValueError: + pass + else: + author = _("Unregistered user") + return author + + +@formatter.embed(event="abuselog") +def embed_abuselog(ctx, change): + action = "abuselog/{}".format(change["result"]) + embed = DiscordMessage("embed", action, settings["webhookURL"]) + author = abuse_filter_format_user(change) + embed["title"] = _("{user} triggered \"{abuse_filter}\"").format(user=author, abuse_filter=sanitize_to_markdown(change["filter"])) + embed.add_field(_("Performed"), abusefilter_actions.get(change["action"], _("Unknown"))) + embed.add_field(_("Action taken"), abusefilter_results.get(change["result"], _("Unknown"))) + embed.add_field(_("Title"), sanitize_to_markdown(change.get("title", _("Unknown")))) + return embed diff --git a/src/rc_formatters.py b/src/rc_formatters.py index e9bcaa1..8c82e01 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -43,8 +43,7 @@ ngettext = rc_formatters.ngettext logger = logging.getLogger("rcgcdw.rc_formatters") #from src.rcgcdw import recent_changes, ngettext, logger, profile_field_name, LinkParser, pull_comment -abusefilter_results = {"": _("None"), "warn": _("Warning issued"), "block": _("**Blocked user**"), "tag": _("Tagged the edit"), "disallow": _("Disallowed the action"), "rangeblock": _("**IP range blocked**"), "throttle": _("Throttled actions"), "blockautopromote": _("Removed autoconfirmed group"), "degroup": _("**Removed from privileged groups**")} -abusefilter_actions = {"edit": _("Edit"), "upload": _("Upload"), "move": _("Move"), "stashupload": _("Stash upload"), "delete": _("Deletion"), "createaccount": _("Account creation"), "autocreateaccount": _("Auto account creation")} + LinkParser = LinkParser() @@ -82,16 +81,7 @@ def format_user(change, recent_changes, action): return change["user"], author_url -def abuse_filter_format_user(change): - author = change["user"] - if settings.get("hide_ips", False): - try: - ipaddress.ip_address(change["user"]) - except ValueError: - pass - else: - author = _("Unregistered user") - return author + def compact_abuselog_formatter(change, recent_changes): @@ -535,17 +525,6 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes action = "unknown" send_to_discord(DiscordMessage("compact", action, settings["webhookURL"], content=content), meta=request_metadata) -def embed_abuselog_formatter(change, recent_changes): - action = "abuselog/{}".format(change["result"]) - embed = DiscordMessage("embed", action, settings["webhookURL"]) - author = abuse_filter_format_user(change) - embed["title"] = _("{user} triggered \"{abuse_filter}\"").format(user=author, abuse_filter=change["filter"]) - embed.add_field(_("Performed"), abusefilter_actions.get(change["action"], _("Unknown"))) - embed.add_field(_("Action taken"), abusefilter_results.get(change["result"], _("Unknown"))) - embed.add_field(_("Title"), change.get("title", _("Unknown"))) - embed.finish_embed() - send_to_discord(embed, meta=DiscordMessageMetadata("POST")) - def embed_formatter(action, change, parsed_comment, categories, recent_changes): embed = DiscordMessage("embed", action, settings["webhookURL"]) From 0f6cf9da4d4505c503aae2da9b3e5af4ce669b57 Mon Sep 17 00:00:00 2001 From: Frisk Date: Thu, 6 May 2021 11:25:16 +0200 Subject: [PATCH 041/173] Added abusefilter filters --- extensions/base/abusefilter.py | 73 +++++++++++++++++++++++++++++++++- extensions/base/mediawiki.py | 26 ++++++++++-- src/rc_formatters.py | 64 ++++------------------------- 3 files changed, 101 insertions(+), 62 deletions(-) diff --git a/extensions/base/abusefilter.py b/extensions/base/abusefilter.py index f02b2f3..7c82e3a 100644 --- a/extensions/base/abusefilter.py +++ b/extensions/base/abusefilter.py @@ -31,6 +31,8 @@ abusefilter_actions = {"edit": _("Edit"), "upload": _("Upload"), "move": _("Move logger = logging.getLogger("extensions.base") +# AbuseFilter - https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:AbuseFilter +# Processing Abuselog LOG events, separate from RC logs def abuse_filter_format_user(change): author = change["user"] @@ -45,12 +47,79 @@ def abuse_filter_format_user(change): @formatter.embed(event="abuselog") -def embed_abuselog(ctx, change): +def embed_abuselog(ctx: Context, change: dict): action = "abuselog/{}".format(change["result"]) - embed = DiscordMessage("embed", action, settings["webhookURL"]) + embed = DiscordMessage(ctx.message_type, action, ctx.webhook_url) author = abuse_filter_format_user(change) embed["title"] = _("{user} triggered \"{abuse_filter}\"").format(user=author, abuse_filter=sanitize_to_markdown(change["filter"])) embed.add_field(_("Performed"), abusefilter_actions.get(change["action"], _("Unknown"))) embed.add_field(_("Action taken"), abusefilter_results.get(change["result"], _("Unknown"))) embed.add_field(_("Title"), sanitize_to_markdown(change.get("title", _("Unknown")))) return embed + + +@formatter.compact(event="abuselog") +def compact_abuselog(ctx: Context, change: dict): + action = "abuselog/{}".format(change["result"]) + author_url = clean_link(create_article_path("User:{user}".format(user=change["user"]))) + author = abuse_filter_format_user(change) + message = _("[{author}]({author_url}) triggered *{abuse_filter}*, performing the action \"{action}\" on *[{target}]({target_url})* - action taken: {result}.").format( + author=author, author_url=author_url, abuse_filter=change["filter"], + action=abusefilter_actions.get(change["action"], _("Unknown")), target=change.get("title", _("Unknown")), + target_url=clean_link(create_article_path(sanitize_to_url(change.get("title", _("Unknown"))))), + result=abusefilter_results.get(change["result"], _("Unknown"))) + return DiscordMessage(ctx.message_type, action, ctx.webhook_url, content=message) + +# abusefilter/modify - AbuseFilter filter modification + + +@formatter.embed(event="abuselog/modify") +def embed_abuselog_modify(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path( + "Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], + historyid=change["logparams"]["historyId"])) + embed["title"] = _("Edited abuse filter number {number}").format(number=change["logparams"]['newId']) + return embed + + +@formatter.compact(event="abuselog/modify") +def compact_abuselog_modify(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path( + "Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], + historyid=change["logparams"][ + "historyId"]))) + + content = _("[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})").format(author=author, + author_url=author_url, + number=change[ + "logparams"][ + 'newId'], + filter_url=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# abusefilter/create - AbuseFilter filter creation + + +@formatter.embed(event="abuselog/create") +def embed_abuselog_create(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path("Special:AbuseFilter/{number}".format(number=change["logparams"]['newId'])) + embed["title"] = _("Created abuse filter number {number}").format(number=change["logparams"]['newId']) + return embed + +@formatter.compact(event="abuselog/create") +def compact_abuselog_create(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + link = clean_link( + create_article_path("Special:AbuseFilter/{number}".format(number=change["logparams"]['newId']))) + content = _("[{author}]({author_url}) created abuse filter [number {number}]({filter_url})").format(author=author, + author_url=author_url, + number=change[ + "logparams"][ + 'newId'], + filter_url=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index e65cbce..47d22bd 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -197,15 +197,35 @@ def embed_upload_upload(ctx, change) -> DiscordMessage: return embed +@formatter.compact(event="upload/revert", mode="compact") +def compact_upload_revert(ctx, change) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}").format( + author=author, author_url=author_url, file=sanitize_to_markdown(change["title"]), file_link=file_link, comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +@formatter.compact(event="upload/overwrite", mode="compact") +def compact_upload_overwrite(ctx, change) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) uploaded a new version of [{file}]({file_link}){comment}").format(author=author, author_url=author_url, file=sanitize_to_markdown(change["title"]), file_link=file_link, comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + @formatter.compact(event="upload/upload", mode="compact") def compact_upload_upload(ctx, change) -> DiscordMessage: author, author_url = compact_author(ctx, change) file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" content = _("[{author}]({author_url}) uploaded [{file}]({file_link}){comment}").format(author=author, author_url=author_url, - file=change["title"], + file=sanitize_to_markdown(change["title"]), file_link=file_link, - comment="" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*") + comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -227,7 +247,7 @@ def compact_delete_delete(ctx, change) -> DiscordMessage: page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) content = _("[{author}]({author_url}) deleted [{page}]({page_link}){comment}").format(author=author, author_url=author_url, - page=change["title"], + page=sanitize_to_markdown(change["title"]), page_link=page_link, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/src/rc_formatters.py b/src/rc_formatters.py index 8c82e01..1fa3d9f 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -81,21 +81,6 @@ def format_user(change, recent_changes, action): return change["user"], author_url - - - -def compact_abuselog_formatter(change, recent_changes): - action = "abuselog/{}".format(change["result"]) - author_url = link_formatter(create_article_path("User:{user}".format(user=change["user"]))) - author = abuse_filter_format_user(change) - message = _("[{author}]({author_url}) triggered *{abuse_filter}*, performing the action \"{action}\" on *[{target}]({target_url})* - action taken: {result}.").format( - author=author, author_url=author_url, abuse_filter=change["filter"], - action=abusefilter_actions.get(change["action"], _("Unknown")), target=change.get("title", _("Unknown")), - target_url=link_formatter(create_article_path(change.get("title", _("Unknown")))), - result=abusefilter_results.get(change["result"], _("Unknown"))) - send_to_discord(DiscordMessage("compact", action, settings["webhookURL"], content=message), meta=DiscordMessageMetadata("POST")) - - def compact_formatter(action, change, parsed_comment, categories, recent_changes): request_metadata = DiscordMessageMetadata("POST", rev_id=change.get("revid", None), log_id=change.get("logid", None), page_id=change.get("pageid", None)) if action != "suppressed": @@ -107,43 +92,14 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes author = change["user"] parsed_comment = "" if parsed_comment is None else " *("+parsed_comment+")*" if action in ["edit", "new"]: - edit_link = link_formatter("{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( - wiki=WIKI_SCRIPT_PATH, pageid=change["pageid"], diff=change["revid"], oldrev=change["old_revid"], - article=change["title"])) - logger.debug(edit_link) - edit_size = change["newlen"] - change["oldlen"] - sign = "" - if edit_size > 0: - sign = "+" - bold = "" - if abs(edit_size) > 500: - bold = "**" - if change["title"].startswith("MediaWiki:Tag-"): - pass - if action == "edit": - content = _("[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}({sign}{edit_size}){bold}").format(author=author, author_url=author_url, article=change["title"], edit_link=edit_link, comment=parsed_comment, edit_size=edit_size, sign=sign, bold=bold) - else: - content = _("[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}({sign}{edit_size}){bold}").format(author=author, author_url=author_url, article=change["title"], edit_link=edit_link, comment=parsed_comment, edit_size=edit_size, sign=sign, bold=bold) elif action =="upload/upload": - file_link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) uploaded [{file}]({file_link}){comment}").format(author=author, - author_url=author_url, - file=change["title"], - file_link=file_link, - comment=parsed_comment) + elif action == "upload/revert": - file_link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}").format( - author=author, author_url=author_url, file=change["title"], file_link=file_link, comment=parsed_comment) + elif action == "upload/overwrite": - file_link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) uploaded a new version of [{file}]({file_link}){comment}").format(author=author, author_url=author_url, file=change["title"], file_link=file_link, comment=parsed_comment) + elif action == "delete/delete": - page_link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) deleted [{page}]({page_link}){comment}").format(author=author, author_url=author_url, page=change["title"], page_link=page_link, - comment=parsed_comment) - if AUTO_SUPPRESSION_ENABLED: - delete_messages(dict(pageid=change.get("pageid"))) + elif action == "delete/delete_redir": elif action == "move/move": @@ -245,12 +201,8 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes elif action == "import/interwiki": elif action == "abusefilter/modify": - link = link_formatter(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"]))) - content = _("[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})").format(author=author, author_url=author_url, number=change["logparams"]['newId'], filter_url=link) elif action == "abusefilter/create": - link = link_formatter( - create_article_path("Special:AbuseFilter/{number}".format(number=change["logparams"]['newId']))) - content = _("[{author}]({author_url}) created abuse filter [number {number}]({filter_url})").format(author=author, author_url=author_url, number=change["logparams"]['newId'], filter_url=link) + elif action == "merge/merge": elif action == "newusers/autocreate": @@ -628,11 +580,9 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): elif action == "import/interwiki": elif action == "abusefilter/modify": - link = create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"])) - embed["title"] = _("Edited abuse filter number {number}").format(number=change["logparams"]['newId']) + elif action == "abusefilter/create": - link = create_article_path("Special:AbuseFilter/{number}".format(number=change["logparams"]['newId'])) - embed["title"] = _("Created abuse filter number {number}").format(number=change["logparams"]['newId']) + elif action == "merge/merge": elif action == "newusers/autocreate": From d42eed4e20af88c5fff9edbc6a0e1faebb5abd47 Mon Sep 17 00:00:00 2001 From: Frisk Date: Thu, 6 May 2021 13:48:11 +0200 Subject: [PATCH 042/173] Added Cargo formatters, included LinkParser in the client --- extensions/base/__init__.py | 1 + extensions/base/cargo.py | 115 ++++++++++++++++++++++++++++++++++++ src/api/client.py | 15 +++-- src/rc_formatters.py | 42 +++---------- src/rcgcdw.py | 3 +- 5 files changed, 135 insertions(+), 41 deletions(-) create mode 100644 extensions/base/cargo.py diff --git a/extensions/base/__init__.py b/extensions/base/__init__.py index d2fffcb..2feb663 100644 --- a/extensions/base/__init__.py +++ b/extensions/base/__init__.py @@ -14,3 +14,4 @@ # along with RcGcDw. If not, see . import extensions.base.mediawiki +import extensions.base.abusefilter diff --git a/extensions/base/cargo.py b/extensions/base/cargo.py new file mode 100644 index 0000000..824dc3e --- /dev/null +++ b/extensions/base/cargo.py @@ -0,0 +1,115 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +import logging +import re +from src.discord.message import DiscordMessage +from src.api import formatter +from src.i18n import rc_formatters +from src.api.context import Context +from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown + +_ = rc_formatters.gettext +ngettext = rc_formatters.ngettext + + +# Cargo - https://www.mediawiki.org/wiki/Extension:Cargo +# cargo/createtable - Creation of Cargo table + +@formatter.embed(event="cargo/createtable") +def embed_cargo_createtable(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"])) + embed["url"] = table.group(2) + embed["title"] = _("Created the Cargo table \"{table}\"").format(table=table.group(1)) + return embed + + +@formatter.compact(event="cargo/createtable") +def compact_cargo_createtable(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"])) + content = _("[{author}]({author_url}) created the Cargo table \"{table}\"").format(author=author, + author_url=author_url, + table=table) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# cargo/recreatetable + + +@formatter.embed(event="cargo/recreatetable") +def embed_cargo_recreatetable(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"])) + embed["url"] = table.group(2) + embed["title"] = _("Recreated the Cargo table \"{table}\"").format(table=table.group(1)) + return embed + + +@formatter.compact(event="cargo/recreatetable") +def compact_cargo_recreatetable(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"])) + content = _("[{author}]({author_url}) recreated the Cargo table \"{table}\"").format(author=author, + author_url=author_url, + table=table) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# cargo/replacetable + + +@formatter.embed(event="cargo/replacetable") +def embed_cargo_replacetable(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"])) + embed["url"] = table.group(2) + embed["title"] = _("Replaced the Cargo table \"{table}\"").format(table=table.group(1)) + return embed + + +@formatter.compact(event="cargo/recreatetable") +def compact_cargo_replacetable(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"])) + content = _("[{author}]({author_url}) replaced the Cargo table \"{table}\"").format(author=author, + author_url=author_url, + table=table) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# cargo/deletetable + + +@formatter.embed(event="cargo/deletetable") +def embed_cargo_deletetable(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path("Special:CargoTables") + embed["title"] = _("Deleted the Cargo table \"{table}\"").format(table=sanitize_to_markdown(change["logparams"]["0"])) + return embed + + +@formatter.compact(event="cargo/recreatetable") +def compact_cargo_deletetable(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + content = _("[{author}]({author_url}) deleted the Cargo table \"{table}\"").format(author=author, + author_url=author_url, + table=sanitize_to_markdown(change["logparams"]["0"])) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/src/api/client.py b/src/api/client.py index 8e047ed..d290349 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -23,7 +23,6 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: from src.wiki import Wiki - class Client: """ A client for interacting with RcGcDw when creating formatters or hooks. @@ -31,19 +30,25 @@ class Client: def __init__(self, hooks, wiki): self._formatters = hooks self.__recent_changes: Wiki = wiki - self.WIKI_API_PATH = src.misc.WIKI_API_PATH - self.WIKI_ARTICLE_PATH = src.misc.WIKI_ARTICLE_PATH - self.WIKI_SCRIPT_PATH = src.misc.WIKI_SCRIPT_PATH - self.WIKI_JUST_DOMAIN = src.misc.WIKI_JUST_DOMAIN + self.WIKI_API_PATH: str = src.misc.WIKI_API_PATH + self.WIKI_ARTICLE_PATH: str = src.misc.WIKI_ARTICLE_PATH + self.WIKI_SCRIPT_PATH: str = src.misc.WIKI_SCRIPT_PATH + self.WIKI_JUST_DOMAIN: str = src.misc.WIKI_JUST_DOMAIN self.content_parser = src.misc.ContentParser self.tags = self.__recent_changes.tags self.namespaces = self.__recent_changes.namespaces + self.LinkParser: type(src.misc.LinkParser) = src.misc.LinkParser #self.make_api_request: src.rc.wiki.__recent_changes.api_request = self.__recent_changes.api_request def refresh_internal_data(self): """Refreshes internal storage data for wiki tags and MediaWiki messages.""" self.__recent_changes.init_info() + def parse_links(self, summary: str): + link_parser = self.LinkParser() + link_parser.feed(summary) + return link_parser.new_string + def make_api_request(self, params: Union[str, OrderedDict], *json_path: str, timeout: int = 10, allow_redirects: bool = False): """Method to GET request data from the wiki's API with error handling including recognition of MediaWiki errors. diff --git a/src/rc_formatters.py b/src/rc_formatters.py index 1fa3d9f..c46cc04 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -229,22 +229,13 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes link = link_formatter(create_article_path(change["title"])) content = _("[{author}]({author_url}) edited the slice for [{article}]({article_url})").format(author=author, author_url=author_url, article=change["title"], article_url=link) elif action == "cargo/createtable": - LinkParser.feed(change["logparams"]["0"]) - table = LinkParser.new_string - LinkParser.new_string = "" - content = _("[{author}]({author_url}) created the Cargo table \"{table}\"").format(author=author, author_url=author_url, table=table) + elif action == "cargo/deletetable": - content = _("[{author}]({author_url}) deleted the Cargo table \"{table}\"").format(author=author, author_url=author_url, table=change["logparams"]["0"]) + elif action == "cargo/recreatetable": - LinkParser.feed(change["logparams"]["0"]) - table = LinkParser.new_string - LinkParser.new_string = "" - content = _("[{author}]({author_url}) recreated the Cargo table \"{table}\"").format(author=author, author_url=author_url, table=table) + elif action == "cargo/replacetable": - LinkParser.feed(change["logparams"]["0"]) - table = LinkParser.new_string - LinkParser.new_string = "" - content = _("[{author}]({author_url}) replaced the Cargo table \"{table}\"").format(author=author, author_url=author_url, table=table) + elif action == "managetags/create": elif action == "managetags/delete": @@ -614,30 +605,13 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): link = create_article_path(change["title"]) embed["title"] = _("Edited the slice for {article}").format(article=change["title"]) elif action == "cargo/createtable": - LinkParser.feed(change["logparams"]["0"]) - table = re.search(r"\[(.*?)\]\(<(.*?)>\)", LinkParser.new_string) - LinkParser.new_string = "" - link = table.group(2) - embed["title"] = _("Created the Cargo table \"{table}\"").format(table=table.group(1)) - parsed_comment = None + elif action == "cargo/deletetable": - link = create_article_path("Special:CargoTables") - embed["title"] = _("Deleted the Cargo table \"{table}\"").format(table=change["logparams"]["0"]) - parsed_comment = None + elif action == "cargo/recreatetable": - LinkParser.feed(change["logparams"]["0"]) - table = re.search(r"\[(.*?)\]\(<(.*?)>\)", LinkParser.new_string) - LinkParser.new_string = "" - link = table.group(2) - embed["title"] = _("Recreated the Cargo table \"{table}\"").format(table=table.group(1)) - parsed_comment = None + elif action == "cargo/replacetable": - LinkParser.feed(change["logparams"]["0"]) - table = re.search(r"\[(.*?)\]\(<(.*?)>\)", LinkParser.new_string) - LinkParser.new_string = "" - link = table.group(2) - embed["title"] = _("Replaced the Cargo table \"{table}\"").format(table=table.group(1)) - parsed_comment = None + elif action == "managetags/create": elif action == "managetags/delete": diff --git a/src/rcgcdw.py b/src/rcgcdw.py index b2cf02a..7108d56 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -29,8 +29,7 @@ import src.api.client from src.api.context import Context from src.api.hooks import formatter_hooks, pre_hooks, post_hooks from src.configloader import settings -from src.misc import add_to_dict, datafile, \ - WIKI_API_PATH +from src.misc import add_to_dict, datafile, WIKI_API_PATH, LinkParser from src.api.util import create_article_path, default_message, sanitize_to_markdown from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata From f9cc6fdef3a1126be9a461906841f80bef031322 Mon Sep 17 00:00:00 2001 From: Arnaud0865 Date: Fri, 30 Apr 2021 15:04:35 +0000 Subject: [PATCH 043/173] Translated using Weblate (French) Currently translated at 87.5% (14 of 16 strings) Translation: RcGcDw/misc Translate-URL: https://translate.wikibot.de/projects/rcgcdw/misc/fr/ --- locale/fr/LC_MESSAGES/misc.mo | Bin 1008 -> 1056 bytes locale/fr/LC_MESSAGES/misc.po | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/locale/fr/LC_MESSAGES/misc.mo b/locale/fr/LC_MESSAGES/misc.mo index 808593df5f4d2940e7ef548286caac39392d73c0..837cb37e051867fec2cc5d5d1cf87e3a627e041e 100644 GIT binary patch delta 637 zcmX|-&r2Io5XWDPHEH~b7d;gEdb5?yB8Z1nf(zN&Kw?U?)d~_en`g4xyp^{bwzrhh zb9>kd(v#4ucrIRrUi|}3-IzIzx@VU!_GVH(8D zp7=wMM9Ieb=!sHDOAP5d0*T+*00QVUNcHRiPSU2o%QCf^B^$i$D^aU4tL}F~9&aVy z&vxXl^dre$DSt<}p;2rYZ-fdwU*`A=C8XQpGgWulEksY_%fz$pTidD{<%&_T_{&PJ zT%6sktk{{76NJW^a%Aw%34Mju*QF9)vC1}Iw98hpv}6?uReN`~!N@RZ|@*~7MD+sSzu zX|WVaKiZNy2wgrKmZD8QHH{nJ+mW6UOG<8I##_9&kWs!0rB(%zuDHBh@s!qTPg~^* zcdYT`sxSpKC>N+gN%NF7ihSLOw2V|)>Y~dnYvlK<&LsMW27Ervox#cf!bK&+d@+Yo TVY@ucd-=kyRStCZFj4yf2r^-& diff --git a/locale/fr/LC_MESSAGES/misc.po b/locale/fr/LC_MESSAGES/misc.po index 907b861..044c257 100644 --- a/locale/fr/LC_MESSAGES/misc.po +++ b/locale/fr/LC_MESSAGES/misc.po @@ -7,17 +7,18 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-11-28 23:45+0100\n" -"PO-Revision-Date: 2020-03-17 21:40+0100\n" -"Last-Translator: Frisk <>\n" -"Language-Team: \n" +"PO-Revision-Date: 2021-05-06 14:10+0000\n" +"Last-Translator: Arnaud0865 \n" +"Language-Team: French " +"\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.6\n" "Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 2.3\n" "X-Poedit-Basepath: ../../..\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-SearchPath-0: rcgcdw.pot\n" #: src/misc.py:45 @@ -85,6 +86,5 @@ msgid "Unknown" msgstr "Inconnu" #: src/misc.py:278 -#, fuzzy msgid "unknown" msgstr "Inconnu" From ea97380feb4c6c06971a4b8ff288284d09a29aa5 Mon Sep 17 00:00:00 2001 From: magiczocker Date: Thu, 22 Apr 2021 17:25:03 +0000 Subject: [PATCH 044/173] Translated using Weblate (German) Currently translated at 100.0% (254 of 254 strings) Translation: RcGcDw/rc_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/rc_formatters/de/ --- locale/de/LC_MESSAGES/rc_formatters.mo | Bin 34674 -> 35489 bytes locale/de/LC_MESSAGES/rc_formatters.po | 66 ++++++++++++++----------- 2 files changed, 36 insertions(+), 30 deletions(-) diff --git a/locale/de/LC_MESSAGES/rc_formatters.mo b/locale/de/LC_MESSAGES/rc_formatters.mo index 9f257045471236868a6c35bd0ed73994219280b4..ef4a826f1b1a4adb478d18abf717736454620dde 100644 GIT binary patch delta 6414 zcma*q3s@Cp9>?+bAc!cUAc~5}$Q@BY%v3}KZ=|4@fH%B=a6|&nNkD|a4tYT{HEpts zCA+4j+ghe$<}I_#)b6&erIn?r+wN*ND{p0e|7XU1czU+yX&!&)^S*Ot=6&aV-x-eI zukzTi*28r=z;mr)`;~MffvuFvw<+b@UiKx06yns3FI>R8I zq&L!r%ESR^#~#>(DR>a2L%$${pdvU)Ml=Pvl$wDqIiQY$9PkuMeJ@7i8I(Kl>8=!` zt$L%}`EZnm94P0lMw#0!$nsJ9QAY4E%Jn`$PxJ^iN6H&zfA3JnUmD0|hxDulIaWP^ z{8M}RVD!}~lsmnQa%XKd^FpI>H1)f26z)T5*o)rDhy>$!%tcu>y!xo$+bDUtAhjK@CI2aqO{RdFaJBPC9f@nondj!fz#iQKF zNc6-47X>-cj&fiHdSgAxoh-KYuR}R;6ZXaf*dH%q07lR|>0p08WN4=$eNc;0uD1nc zQNDmO_g|p2>-w33+@TL=F*>Rr4#$ZobNwXN;2S6-GlYd9`)8s&6)RBAdkLi@Cz180 zE~17$JcH6uPi%?(Q5JD3ddl-ZmV&%ca?lIyD05zha>t9&8=Fvu@EI(|11QIZ(;GQI z1*L(ps9_#TL)GYqjYxxPE#86autuK$FDcAr$5d`-BEE~0F^XZS#Rja#>sWzvdnxr0 zol5*&*zX)uHC$^ome z5HFydcn7UX0}orCLFrih0CNa8;V9~ta4Pm6$ikE3u@1k-3Fx5J`|&U?!|Xvy@s;{` z5CixFg#aGv-RRA;Bo{o0@?5v(He~4XP#&{An1ffa5;GZwN%#tuVdpe+@h-*+>c_Aa zQ_{`vccFuN81uy?)S97;zYOL3?2s2r`(ZqjI0og8p2u8lGu*uM0+bG%z_+pI2!vFS?0^9b ziw&bN2xBk=)2#i|(UW=s%JFt=g|*lY7h)HD2q&X!D+P^0OD4P*Mq>}mMW$6%<0@L* zhHa>)ayxRN(HMwR&=;N97VA+OUT)Q!P#){8$a+;fP|iD#t>po_P9cCDUSrKSUT2g$ zibsFU!YG`Mez*jsgAe0Pp^>G&qfTJU8B=3^E{;1+C$?_e-~hBBwuP!?SWhC>>hjI3X^$f_Sf zIsZEh$4)$(F6n79g?OBa-Ej@dP`-dkcp5{|f1){6eUMjy8jdkok8;7MF%XZT51vMU z{0bBCI?5V~A-6!Q*y@Alcg#{9*uI`2xQ%=Qj|rz6Q|%A z`GW6Gwf2v!d zx%wC2X6k!T=DcvGx%!u*oOb|2@d|dspd#~k#ce1ZD8TNx3gt$gLptnIJ1Iy9j$jA; z5M@NZ!btoYWswFJn~N$1Wz~PLT^k(PaKJP^89B~ zV3gDbT!FS()?Y)UZFK<`;OG*5^W#yh#KE&!ShyY6;dFY#qpz;vDa^dfoPww_^N&su zmb3o@T!cfY6w|&sL_roy%pCKFL^bj#t34OGVpk9L}WBMLB&`UaeW zSCHkQ#@}teN48@I^~*@#)u6fN{*CDBZsT1{K^_lJZcFZX5^~dOKTg7MZkvUy>M;vX zAFBlCd{t*)0rib29r0XZ z{+`IiDb%+k_o{qdjr@<5LL*88eU_RhEX85eKf*K&US|H3nu_hI8)(DVQJ(uZP#&+7 z*8Z#LMg2O;n^1m#wS*wluscSeYX}ADNioWEdm7X521a4Za`Vktgwo&^@>e2T4-@z2 zY(6`aPl?=NN5b-PKQV8jOsi}%{LMC(`z{Atdp00br2a(`iB7&H$H>1)K9OGcAzMjr zBJ=tPku8_Vld+3@No12JrYi|0_Yv8mP55N~WqxG4-NgO7&nl|#D98fiF!#IR)_$g4 z9VHBsdY3Ph^cE4>{7Eu#9pU2_a+35TvRyNAzb=2EoIoBT zhpqj>8gd6YAr)(zjI~yIJ+>q7lQv`|*-S1G+0K)<%z-ukmV2B zyU30Y$m7-**KsHLne?>w$%|(xnP=5M$AMP4+A>8ZR^Dh=$Sc;)chQIRvg!|7PQwGF ziTuslCu|~zNG8c3vMnK_NTXEPmXRCeHqw$@C4VRGg;gpAwy~t1JViXo>!kU%h)Oys zBS~Z(=|CDtTk-@kh-`tRg}Y>ad;#}Z^|iQ{{6t(U`S2w}$qw>1IZMtE*%pwGNE*o@ zr${Rz+sot}xlERmr-^KX$VT!txs$v{LP$CJgz)-T|0QgUKigg8RZ>SDCBunqFOXT} zxKyldJNl8Ega zh!>Hq&_sP`*&jc%%E1^zp0(=V;5PCX@)C(6x3=*VW{`I@YfqkK7t7UnTFOR9$5%aC zRL!;Ot=d23n9AkatDVx4JdQ(ubz1&`9FV+gV()`l0(gk6fVDyR6Z0?J!NbI72 zmmIF&jBRN=5Nq?+k0!3rS0;9L@6-}o>Ersm)%-vsJ1N9wZ0YN?>En{TZ+(-b6*`Kw z3i}*qHI0>4Y0?X=uE;shQMG{m)uolCPKV~K(8`@9n%z-VQR{9XJE_&JOAP!|m#CDZ z5}IA7)L!}fD@onx)Gyh`7@wN!ZCn^}&gSJF2mRfQLB_F+5RU$wC+aojARdeec_MM!wW05vkgt=B%N(|Qk%#$F<16t zd&O*fMTxz#%3fYxWvrPw)#kq8Rb{OW|Kg?I`nj?-`eS7=w|46D$}j3`=JYZa&xx}c z*B#55C}(S1sh%<$(Nf@`vJtC6GoiuWr5Cj!X+)0T`Dxwm^T_l3iY6mSARqCy3QQHgE z-L|Od7HwBcDWz3W?NXZBZYf=@u2S97-TgiDj$Qxk`^hukbI#1X=e*~f_nkby#_!7G ze(w5^fHj8WCW)3#V+K2nITNT>W8%V%X@>DWGccHX7hioK-a)+-gK#1?#ktr37hzjm zj-mJlHpWB9=iKHv1%0s|!|*by?|=wn5-<$aK}U?lo;U;V!y#CQ?J&88F?m>wI^POZ z#~V=>a1i-3CwS4oE@3kLn=2IZX^72QdI&K+V(^U;D?g%)d^2l?IJ0vb8Z3O&8?Pl=8xC zn+H%Mwoq5}8tO#fVLuFtGo~+&M0LCwH4|@RFU)b(n{GF1w|{_|;bW)^xq$kMc92|*UtT};dzmB>a;+Y10ZvbkEs!#)2g6uD|4&!hq>H<$< zLp+Dtyq7RQ_y0`_dZ0MCSsP#|>Vz%Pi7wRC<>5Fi_PxIo^}S=L6Mv0ycoEe>6Gqz{ zqmYhFDr%`RP!~28YjppgqfkOa370hjx8YoD%>2y8M{oxIimP!N4+*~JU5C42KI>73 z?_(~m$*>3d5ssyv&AivB9mk+Eiw%yGaiC805`{dxinA~?+n7PP8N1`psI|^@+4U+M zKz%C?#2cs+_T}NB3s{7A;aAunV|j|{0w<&T+2^bOhVBX)hIOz%xD$0^e=b7~LJjCy z?1Q0G`#Ra$vXLn&Db;3+;YTd_k zQB$@bwN`C;8G_@n7T>~B%;55-;8N74y@oR|kLj9=uc6*=lh4LP3pFEtJ?t6mfplRO z^kDwWDeR%43|q6HLvbGJ%Ii=A=v`pUN4Op})f4IU9^8als;k%&d-9?sTaH?qBRCja z_F}`~6kLHPQ8PN;-P``cHq58tGU^Liyc>!O(Sc843w#=5aJ#SlCSzs1PsRqkPC5}RTP40*orCm9_qgR7B#S+aREj$pTlq+rsI#u zJ~OdJ_Vc0yBdAxSI$VOuxEh<`E=<4!I2tctv~J`+ETleIiCWv`$RofUL{0S-%)uZQ zS|cySOf1DVxD4Ck4ot<<$fTGCtfM|R80X*uY=ys~&J$70&pZ8_b`-Q}s&FK3#UyMp z#5NNHsSib+U>s^q=Og>etV4Bt7TKSs2|HNzB22_NsDW<44BU^g_!GJ{l_AWl3-eK5 zsKwT}7DI3+a;uxes4Mm3CJ)0jY>fFBjQubR%djb~@YSEe4%82$&abDD29Q+3{A*1L zXprMkQ@#}S!7Zrg!VzqT5%=2ne*yAmHu4gI*O6^vnzO~31Tzxn;x^QPQh8`-0HxRs zSE2ejTFU%usxHys?ST2$j1-{0P=ndH1$9NIP*Z*mwMWu;Xs{2>aMUK-B9s~v7ZOCP_K#UfVE}%QET74nVb?eKyok)6$*tv=57*&x^k=#>wJUKwUdCr|`7HY% zjpW%pWT=4LA_x!8V?G)6u70v4n5*DEbP>a#{J?3MRCHAju ze^fv21H9;Xk7(p4iS`5+=zY?S#ODZm)BC?%bJXT)M*c)@l2+u_@ePIkWCQtvxX2&K zYSN8($T{*hxm)-Dtz(?8py|@FmShoaG#$r?u0+Q_$Th+p=RLSM^D=pX;GIAfeNIoGt7LhN> zAi}2i{#=9koXjBFQ+~w#XI{P~I^H4v-je+Yt)~1cnM^wQ+QnTYf%G7ohz{MZY2+Yb zvwM%ryuLvO*wz2O4y5!Md0*?FNa15Li|EL(@&4TMJn`P=YWkFLn|tq)EtpB7$X=pj zFquzAlb=Z*X-Bq`ePje#PxQRFljyi|+x|1J)9{S9*?#$(ue=mD-`1{TFJFBP=KIQG z2f4#n{|;x9S4bc73+YQ9CHIoYh@Lm*d9s4+C$|oslx7~`(e6EReEtP5`O1YphvN^v zas_T9e<#;{ZFRVkd{2tWujF0Qkho9tGL-0ensg^e$r183NhLZ$NI7|&G$4^=E@?r6 zNj=eVm9!>LkQ&mFl#!i8$Fnxxe@I`{`oBcO?|qFi_?E9MlE_&SLAsJXWC$rBB_xhC zCKt%<$CBGCl&6y$x3zVl+>f|*A9c9xjj@yulSX9sZS8F-$NTEXaSZv8v?S-rR?n>P zy?%}gPv^)({#Is8_>Smy4y!PxjibVc2~MeV1Xjc)Jb3@4DU%*bh!fVyHd{T|;o0uPoYv)DPHS-cj-H&} z=N+EXzR`Zxw*K8xhNc(HsH~VdX?j(9Va3eKyf{~uD=R(QmG0^sm)#-Hm7SKw;knqq z*x~QW$o6y{INNF67?$YSKD4jHiXHxwwYen83NCrpbG)Qq1FL9MsueiO<+*=Up}*%) zd5NDjvn;$Z7gss1az@<57sJLnJYC0)bXeciL|H4RHT4{*T\n" +"PO-Revision-Date: 2021-05-06 14:10+0000\n" +"Last-Translator: magiczocker \n" "Language-Team: German \n" "Language: de\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6\n" "X-Loco-Source-Locale: de_DE\n" "Generated-By: pygettext.py 1.5\n" "X-Loco-Parser: loco_parse_po\n" @@ -601,20 +601,23 @@ msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) ersetzte die Cargo-Tabelle „{table}“" #: src/rc_formatters.py:436 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -"[{author}]({author_url}) erstellte eine [Markierung]({tag_url}) „{tag}“" +"[{author}]({author_url}) erstellte eine [Markierung]({tag_url}) " +"„{tag}“{comment}" #: src/rc_formatters.py:441 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) löschte eine [Markierung]({tag_url}) „{tag}“" +msgstr "" +"[{author}]({author_url}) löschte eine [Markierung]({tag_url}) " +"„{tag}“{comment}" #: src/rc_formatters.py:443 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revision or log entry{comment}" @@ -622,25 +625,27 @@ msgid_plural "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revisions and/or log entries{comment}" msgstr[0] "" -"[{author}]({author_url}) importierte [{article}]({article_url}) mit einer " -"Version{comment}" +"[{author}]({author_url}) löschte die [Markierung]({tag_url}) „{tag}“ und " +"entfernte diese von {count} Version oder Logeintrag{comment}" msgstr[1] "" -"[{author}]({author_url}) importierte [{article}]({article_url}) mit {count} " -"Versionen{comment}" +"[{author}]({author_url}) löschte die [Markierung]({tag_url}) „{tag}“ und " +"entfernte diese von {count} Versionen und/oder Logeinträgen{comment}" #: src/rc_formatters.py:449 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -"[{author}]({author_url}) aktivierte eine [Markierung]({tag_url}) „{tag}“" +"[{author}]({author_url}) aktivierte eine [Markierung]({tag_url}) " +"„{tag}“{comment}" #: src/rc_formatters.py:452 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -"[{author}]({author_url}) deaktivierte eine [Markierung]({tag_url}) „{tag}“" +"[{author}]({author_url}) deaktivierte eine [Markierung]({tag_url}) " +"„{tag}“{comment}" #: src/rc_formatters.py:454 #, python-brace-format @@ -658,7 +663,7 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) sperrte das Wiki *{wiki_name}*{comment}" #: src/rc_formatters.py:462 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" @@ -683,9 +688,11 @@ msgstr "" "*{comment}" #: src/rc_formatters.py:477 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) löschte das Wiki *{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) hat das Wiki *{wiki_name}* wiederhergestellt " +"{comment}" #: src/rc_formatters.py:481 #, python-brace-format @@ -1303,33 +1310,32 @@ msgid "Replaced the Cargo table \"{table}\"" msgstr "Ersetzte die Cargo-Tabelle „{table}“" #: src/rc_formatters.py:1121 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "Erstellte die Markierung „{tag}“" #: src/rc_formatters.py:1125 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "Löschte die Markierung „{tag}“" #: src/rc_formatters.py:1127 -#, fuzzy msgid "Removed from" -msgstr "Entfernt" +msgstr "Entfernt von" #: src/rc_formatters.py:1127 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{} Version oder Logeintrag" +msgstr[1] "{} Versionen und/oder Logeinträge" #: src/rc_formatters.py:1131 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Activated the tag \"{tag}\"" msgstr "Aktivierte die Markierung „{tag}“" #: src/rc_formatters.py:1134 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deactivated the tag \"{tag}\"" msgstr "Deaktivierte die Markierung „{tag}“" @@ -1348,7 +1354,7 @@ msgid "Locked a \"{wiki}\" wiki" msgstr "Sperrte das Wiki „{wiki}“" #: src/rc_formatters.py:1147 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Modified \"{namespace_name}\" namespace" msgstr "Bearbeitete den Namensraum „{namespace_name}“" @@ -1367,9 +1373,9 @@ msgid "Modified \"{usergroup_name}\" usergroup" msgstr "Bearbeitete die Benutzergruppe „{usergroup_name}“" #: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Löschte das Wiki „{wiki}“" +msgstr "Das „{wiki}“ Wiki wiederhergestellt" #: src/rc_formatters.py:1163 #, python-brace-format From 19bcb019247c8c0b970f4507cbe629d28d7e3f62 Mon Sep 17 00:00:00 2001 From: Arnaud0865 Date: Fri, 30 Apr 2021 15:04:03 +0000 Subject: [PATCH 045/173] Translated using Weblate (French) Currently translated at 100.0% (5 of 5 strings) Translation: RcGcDw/rc Translate-URL: https://translate.wikibot.de/projects/rcgcdw/rc/fr/ --- locale/fr/LC_MESSAGES/rc.mo | Bin 719 -> 809 bytes locale/fr/LC_MESSAGES/rc.po | 14 +++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/locale/fr/LC_MESSAGES/rc.mo b/locale/fr/LC_MESSAGES/rc.mo index 33627f1844c79331ce543401b7567bf1e7e91e32..8781f982c8faefacea8cf89b87046b53d604daa7 100644 GIT binary patch delta 447 zcmYk%OG?8~6b9hi^dYneY7r-*(SeWJBq-vbmSQlm29j3#@Ht9vu1(Y?{Yv vSz5H&61%yZKIO{9CUm^Q32DJHgx%(M!V5-8VI7;pLHNkzGrm6_;J3d4cp7U4 delta 352 zcmYMszfQw25C(83v<%(&Gcs6RC@Bt33PN(LA{7BbVyK`40}Ljyk_vFr#0WAmzzb9n zPXG%W8;`-t#49i`vhcMaaq>@}e0RF%*|+NL$9(01penEg9jL+yOe%#r7{Mys!7{wS zy+z17asf_lLVV;1=^&qw7*Fpa$PA!G$abQ&3d}IkG&gem>Wx1eW!+jVcPwYi=RRk= z#k@`Gdt#k8xyO0!K<0)GGO6t z>lK2gMWl>TH^xm1>bV=WWA?W&In+;7I5gCETj>9OSWo6El_nO{b=Rh^JhSUgL(?wx gR@(oIM@nWv+{Y^8f@VP!gx7AGnDWuyFTd>O53QM1Gynhq diff --git a/locale/fr/LC_MESSAGES/rc.po b/locale/fr/LC_MESSAGES/rc.po index 8317435..eb733b4 100644 --- a/locale/fr/LC_MESSAGES/rc.po +++ b/locale/fr/LC_MESSAGES/rc.po @@ -7,17 +7,17 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-12-23 00:28+0100\n" -"PO-Revision-Date: 2020-03-17 21:40+0100\n" -"Last-Translator: Frisk <>\n" -"Language-Team: \n" +"PO-Revision-Date: 2021-05-06 14:10+0000\n" +"Last-Translator: Arnaud0865 \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.6\n" "Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 2.3\n" "X-Poedit-Basepath: ../../..\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-SearchPath-0: rcgcdw.pot\n" #: src/rc.py:322 @@ -36,8 +36,8 @@ msgstr "La connexion avec {wiki} semble stable maintenant." #: src/rc.py:404 msgid "~~hidden~~" -msgstr "" +msgstr "~~caché~~" #: src/rc.py:408 msgid "hidden" -msgstr "" +msgstr "caché" From 5b3f58d22c11bbff2afacdfee4bd156f5d56bc20 Mon Sep 17 00:00:00 2001 From: Arnaud0865 Date: Fri, 30 Apr 2021 14:44:55 +0000 Subject: [PATCH 046/173] Translated using Weblate (French) Currently translated at 68.0% (17 of 25 strings) Translation: RcGcDw/discussion_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/discussion_formatters/fr/ --- .../fr/LC_MESSAGES/discussion_formatters.mo | Bin 1520 -> 2426 bytes .../fr/LC_MESSAGES/discussion_formatters.po | 30 +++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/locale/fr/LC_MESSAGES/discussion_formatters.mo b/locale/fr/LC_MESSAGES/discussion_formatters.mo index d374d9a59334788b9e05b807ad0307422ca494e7..10deac41971bbd007848d327539c6ca8ec48b623 100644 GIT binary patch literal 2426 zcmcJQ&2Jk;7{-TEz6_;MAt6zaUMi#{l=V`Cs>=BgPVE$nIEfsm0j$Vf?@sKY>)B;y zHX$)qPaNRHr4q+-L8{;YXKu+qz+XU5T#+~+aY5pl^`?nQ+$4vtH2JM(cb@m1ciw&S z`-QW28LkT$uVeg#@dn1!6ZnJcXYgh47w~Ox7km!<6MO~y2Xw%5XBc}EoCME;Yv8M3 z3k<+*(CRz@m%zWkJK*e-jIDw@8DGO<8()FXfZt~P4!nz4_dpx>>eGz5;76d%rw3jH zzXJ2%_uyOLZ=lur8??Irf)c!lN&EgcU<3RC{1QC#EMpwJ1Nz_}pj}r%5UbM$b6^A_ zouSL_?*$BmVCOMj!oao|B+@m&!|Qq6*}Uy_Zh%zZ-adta@}zaNzhA_#=aXL7755Ae z=u*!J6Y~Bgc4&qoNxejK)gRMT@YyJPrk9Omsl$sL9b{cso*t zOh;(@lId{LNu16h_6Aq1?zJ^rk+)^EDT!}zY3NojW&hTwd1`G@qvs{26RG~%cy`xJ zRM?+*htwdZFnbXj!y(tkr+V2;e`X?&Ad0tzHe6w^wj^wnHu+g$8(Cqkl#ROX#%|Aa z@HD6d5G8>Eu16~AE_hwuKVHzI2GS0alk1D=i6+uWY8_F*C%7UXGuk$ao;$Vz`4nlM)wwIPI2jXXuRg%@JpK$ zxj`d3RoxbWGn=%vQ;!OiTUvB#d_&kZP6^*kfj%i0Yfg31DHZ9%#X_}m`P0RPa&F$! z#;Ge$>d-Thg8s__EH9Z~MWf8wl+u+Gf>67j->@=G5-Ga`)v6w61d1O0~Sd=PUVl zbJrtj@C`Zjtr(jz{0rm8p(o@d`5jMbZl+i2bI!H>_iQ@rTsdXwM}d&-0$pnflUoWC z<%P~1qU!?5IQ^-o-HYlG94u$|zL#1_z$yD) zh9`G^+?%JJU*QXiLQY-4E=axUfEg7DdT}I!gm&-I&{9@QpJ;yQ$-S21E+pugO7P4;B3|lh31;=e!a1KU-GUsCV?7BnH(^vM?R(4Q)vBBKBcoX90cD> zqA{GsA*(V1S)s(pQ^HSqW?d-FaA}V0(%0i-a0sYgu<$TWe*__aArK0rvm^ delta 351 zcmXZXFN*>}9LDkA==x{X6I?}uUJy)zin8y(vL;`E)oidBw;dc91W#-hImBexAY2h& zgISxwX1O8;zq8}O!)Ipr@yzbSxu^Y$V=aW0B^5FydGaKBc}gUQJ*?vZZT!Ll&ai>M zSj7`s_>U!g;1HdN>6zds=Wk4i__8q@+2NAmJ?i2VGVCckz`}0 zxQHXpF6#O9`~HA>?u;qCqLQxpbI#$V_Jbq|y~4MIk25Q2qF3AymPOfTg01pYFt&~= P>NY!p8y~BA&u+f}|3V=L diff --git a/locale/fr/LC_MESSAGES/discussion_formatters.po b/locale/fr/LC_MESSAGES/discussion_formatters.po index 345f9fc..423cf22 100644 --- a/locale/fr/LC_MESSAGES/discussion_formatters.po +++ b/locale/fr/LC_MESSAGES/discussion_formatters.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-12-23 00:28+0100\n" -"PO-Revision-Date: 2021-04-30 14:43+0000\n" -"Last-Translator: magiczocker \n" +"PO-Revision-Date: 2021-05-06 14:10+0000\n" +"Last-Translator: Arnaud0865 \n" "Language-Team: French \n" "Language: fr\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.4.2\n" +"X-Generator: Weblate 4.6\n" #: src/discussion_formatters.py:21 src/discussion_formatters.py:56 #: src/discussion_formatters.py:67 src/discussion_formatters.py:95 @@ -30,40 +30,40 @@ msgid "Unregistered user" msgstr "Utilisateur non enregistré" #: src/discussion_formatters.py:39 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -"Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" -"{creatorId}>) dans {forumName}" +"Création de [{title}](<{url}f/p/{threadId}>) par [{author}]({author_url}) " +"dans {forumName}" #: src/discussion_formatters.py:42 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -"Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" -"{creatorId}>) dans {forumName}" +"Création d'un sondage [{title}](<{url}f/p/{threadId}>) par " +"[{author}]({author_url}) dans {forumName}" #: src/discussion_formatters.py:45 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -"Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" -"{creatorId}>) dans {forumName}" +"Création d'un quizz [{title}](<{url}f/p/{threadId}>) par " +"[{author}]({author_url}) dans {forumName}" #: src/discussion_formatters.py:54 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " "to [{title}](<{url}f/p/{threadId}>) in {forumName}" msgstr "" -"[Réponse](<{url}f/p/{threadId}/r/{postId}>) de [{author}](<{url}f/u/" -"{creatorId}>) à [{title}](<{url}f/p/{threadId}>) dans {forumName}" +"[{author}]({author_url}) a [répondu](<{url}f/p/{threadId}/r/{postId}>) à " +"[{title}](<{url}f/p/{threadId}>) dans {forumName}" #: src/discussion_formatters.py:61 #, fuzzy, python-brace-format From 1f883c15b4c3e31d1186cd88c832a0f2f9dbb256 Mon Sep 17 00:00:00 2001 From: magiczocker Date: Thu, 22 Apr 2021 17:50:05 +0000 Subject: [PATCH 047/173] Translated using Weblate (French) Currently translated at 32.6% (83 of 254 strings) Translation: RcGcDw/rc_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/rc_formatters/fr/ --- locale/fr/LC_MESSAGES/rc_formatters.mo | Bin 8433 -> 8180 bytes locale/fr/LC_MESSAGES/rc_formatters.po | 15 ++++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/locale/fr/LC_MESSAGES/rc_formatters.mo b/locale/fr/LC_MESSAGES/rc_formatters.mo index 0934919593ba66e0dd447aed694157abb4412101..f04c1d01704b04d6d36690253466ef54596955aa 100644 GIT binary patch delta 2187 zcmX}seQXp(7{~ExdG7&zIa}W8_C;w6?X}38ZE1VbYbo>v+7e!DB*%53g|=6=Yk(-Z zL{t*QM6)4k1hK&=V1mZe#26!~{-b{ogFzDwpov6dVj>U{#h1kIZ|~~lW7_2Fev)a-LF}8xfnv=tW;Pb3t-@UTb?JTw&Y`~xb8r9ycmy@X zvsi}DV-P<`U;hHLjY*hmG&I01oR4==4+dr$^C0HpDqM>dIE3Z+GUnj~>b`6E5dMWB zESkmSaVrj^gDdezEW%)x?oSxAn#M9t^kE4;g9UgV%keVmfnQNC3a~uAs0MZa4lKr} za4DX}Li`l9pqsb=|G;&aOE|l66PECPbB0DKPM~J^GcLykgk?QOP%l1)x_$xY;dRu& z_mH5OxpR%l#{$&(6S@Fzk~@r_%#i!@O#us{z0w0kPWK9HuMKT<;ZcI zj&I^rddrsp^$uw zFJUfsZ@_a{hQDAn=CI+~`!H&vE?W2ouEhz|R^7*kv6L{#9jNC{qQ<$5O48e?g(R|x zQxT02YVWtAX69l)UP7%XxG*(96Ncy?L``HIH{%u5$`&j#rU^Hra^@s*$(%*y#>c1} z`V9Fc%nuy(g1=FrD&wkV-iTV!7%J4SqrQT-Q7^uNTG4%6g%wLud%hc&(LaKEZXA_6 z7f}m+7d4TqSgr5>I~pv~WD%DpEJbaBjgR7mbpJQpO23-8X`)Xfxo2KY`x+{j&LBgY zbEwcyq_5NTSFUsVELFM_9D1mlX^=WurqIZxwo+@;C$-O7DXHR5uot_ietw`P)j(CI zD^dj1@SpX6(KbvL<(3jR(ZpdrwUMgQPOYMbsalPS{w!1!M)J!q`u&8d?K{|`d@q7tC4^INH8YN4%U)PI9YgsQz$;mh*#Ak*)q z4kWeNl@i7?M>n4=I%&OPXo7(?0bTVRQB4@ zVQx&lqkh13N5^VIp~?B$Rfh%-4DN}$RsD8o)QRu6WA0eUnIGF1>pv87V!QXoo#CkK z+Rj*LuM=wUZsZMkuLO$toWve}6J5g7&*>3M41h%!RYEAN|;G&G=;{5JR nZ@i$$`?sLjJ2CGuuYSo&uWrelq&>eX)4Q>-CV72f{`CI3$g7{>9_vXo8%+fpc%?Y2-`3Ny@1%QkIkDaazo)~cW+cTX35h14F~Nnzh<-s(6F%_47!=e5i2k3MD>kN{^qt>5cRA;t z_q?~)+O954Uo0Q`x}mKnCK4A4jY;GFVf@hc6d5xT-}F3;W%RRN|5F@A|7$G8AFu?k zqK3GI^*CgNF=KEh>Uulgp{Z7KpaC}GczhHq@oCfm`>+-dViSIb4R{l$V_mT^<+v7g zUli}cmv9!oj~4!j+py4Q%veldwU+uE2YTQrR^d6U!z-v8%Xr=@8t>kB1hf0eE>cnZd1H-rm_IsyeG@8!ub~$74zdg86V!sf@Xr5)X+I}!a-fMD*buFt6*X}b_23JrmA;Bv z(FdpuoW}GCoIm(F$e(3odw$KkyY0bC= z@5LjiBD#(RSj?=l1U1npw6Gj!Vk17o4G$wpHJ5o0CpotT8ERRK*jaY}%<*nx+={uNwH-*4q#G>rvmPQ0N5+=D8%y~sP6w@_Q~5$d`o)%j(FnqHc6$u&Kv zri|#*Q)?%bS=G~WLQM->pF1+RrF0rylea8!mV{z9>?uc!P zWtWfaAC~#Dtf4I&3YHPPzWBq#aLfwcWmC#9ES!rM6ft z3%C;R>9>0vf0tu#i&&Xm<-O~cI&mkd_w;w{j97`CJ&x--kGp}yPAe3c?OX5nZqPt$ z`kZLYwZef$&gVP+4m;%}Y_~UJ1p>2jf0^s$H4XJ~Yk?J--u&;4osOOC?p?#J{$RvP zcK38gcLWlBZg$R?2?Z1LIf?bft!RHP38#-+xm;SOPi0qEbQMlrlst3Hb_c)1u&Es=2BHS Kd#P&d@V^0-&rh-d diff --git a/locale/fr/LC_MESSAGES/rc_formatters.po b/locale/fr/LC_MESSAGES/rc_formatters.po index 47a33f7..28d1ca1 100644 --- a/locale/fr/LC_MESSAGES/rc_formatters.po +++ b/locale/fr/LC_MESSAGES/rc_formatters.po @@ -7,17 +7,18 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-14 16:24+0200\n" -"PO-Revision-Date: 2020-03-17 21:40+0100\n" -"Last-Translator: Frisk <>\n" -"Language-Team: \n" +"PO-Revision-Date: 2021-05-06 14:10+0000\n" +"Last-Translator: magiczocker \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.6\n" "Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 2.3\n" "X-Poedit-Basepath: ../../..\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-SearchPath-0: rcgcdw.pot\n" #: src/rc_formatters.py:28 @@ -1287,9 +1288,9 @@ msgid "" msgstr "" #: src/rc_formatters.py:1195 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Completed deletion of translation page \"{article}\"" -msgstr "Modification de la visibilité d'une révision de la page {article} " +msgstr "Modification de la visibilité d'une révision de la page {article}" #: src/rc_formatters.py:1198 #, python-brace-format From 236e8961a6ea2c2b0e26e05816737e27ebe3f660 Mon Sep 17 00:00:00 2001 From: Frisk The Evil Goat Overlord Date: Wed, 14 Apr 2021 14:35:39 +0000 Subject: [PATCH 048/173] Translated using Weblate (Polish) Currently translated at 79.1% (201 of 254 strings) Translation: RcGcDw/rc_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/rc_formatters/pl/ --- locale/pl/LC_MESSAGES/rc_formatters.mo | Bin 27394 -> 27764 bytes locale/pl/LC_MESSAGES/rc_formatters.po | 45 ++++++++++++++----------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/locale/pl/LC_MESSAGES/rc_formatters.mo b/locale/pl/LC_MESSAGES/rc_formatters.mo index 2c0acb33502c5015c7a4e753b3c3e96b720689b0..89c649bc0291e9a779abd17b3893f3838ab4e155 100644 GIT binary patch delta 5126 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\n" "Language-Team: Polish \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.4.2\n" +"X-Generator: Weblate 4.6\n" "Generated-By: pygettext.py 1.5\n" #: src/rc_formatters.py:28 @@ -607,19 +607,20 @@ msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) zastąpił(a) tabelę Cargo „{table}”" #: src/rc_formatters.py:436 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) utworzył(a) [znacznik]({tag_url}) „{tag}”" +msgstr "" +"[{author}]({author_url}) utworzył(a) [znacznik]({tag_url}) „{tag}”{comment}" #: src/rc_formatters.py:441 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) usunął [znacznik]({tag_url}) „{tag}”" +msgstr "[{author}]({author_url}) usunął [znacznik]({tag_url}) „{tag}”{comment}" #: src/rc_formatters.py:443 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revision or log entry{comment}" @@ -627,26 +628,29 @@ msgid_plural "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revisions and/or log entries{comment}" msgstr[0] "" -"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z jedną " -"wersją{comment}" +"[{author}]({author_url}) usunął/usunęła [znacznik]({tag_url}) „{tag}” " +"usuwając go również z jednego logu zmian{comment}" msgstr[1] "" -"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z " -"{count} wersjami{comment}" +"[{author}]({author_url}) usunął/usunęła [znacznik]({tag_url}) „{tag}” " +"usuwając go również z {count} logów zmian{comment}" msgstr[2] "" -"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z " -"{count} wersjami{comment}" +"[{author}]({author_url}) usunął/usunęła [znacznik]({tag_url}) „{tag}” " +"usuwając go również z {count} logów zmian{comment}" #: src/rc_formatters.py:449 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) aktywował(a) [znacznik]({tag_url}) „{tag}”" +msgstr "" +"[{author}]({author_url}) aktywował(a) [znacznik]({tag_url}) „{tag}”{comment}" #: src/rc_formatters.py:452 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) dezaktywował(a) [znacznik]({tag_url}) „{tag}”" +msgstr "" +"[{author}]({author_url}) dezaktywował(a) [znacznik]({tag_url}) " +"„{tag}”{comment}" #: src/rc_formatters.py:454 #, python-brace-format @@ -664,7 +668,7 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) zablokował(a) wiki *{wiki_name}*{comment}" #: src/rc_formatters.py:462 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" @@ -689,9 +693,10 @@ msgstr "" "*{comment}" #: src/rc_formatters.py:477 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) usunął/usunęła wiki *{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) przywrócił/przywróciła wiki *{wiki_name}*{comment}" #: src/rc_formatters.py:481 #, python-brace-format From c61d703696ee8831b0a456446ae58815038d9305 Mon Sep 17 00:00:00 2001 From: magiczocker Date: Thu, 22 Apr 2021 17:50:11 +0000 Subject: [PATCH 049/173] Translated using Weblate (Polish) Currently translated at 79.1% (201 of 254 strings) Translation: RcGcDw/rc_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/rc_formatters/pl/ --- locale/pl/LC_MESSAGES/rc_formatters.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/locale/pl/LC_MESSAGES/rc_formatters.po b/locale/pl/LC_MESSAGES/rc_formatters.po index d629cd1..e45f9ba 100644 --- a/locale/pl/LC_MESSAGES/rc_formatters.po +++ b/locale/pl/LC_MESSAGES/rc_formatters.po @@ -8,7 +8,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-14 16:24+0200\n" "PO-Revision-Date: 2021-05-06 14:10+0000\n" -"Last-Translator: Frisk The Evil Goat Overlord \n" +"Last-Translator: magiczocker \n" "Language-Team: Polish \n" "Language: pl\n" @@ -95,8 +95,8 @@ msgid "" "[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " "\"{action}\" on *[{target}]({target_url})* - action taken: {result}." msgstr "" -"[{author}]({author_url}) wywołał(a) *{abuse_filter}*, wykonując akcję " -"\"{action}\" w *[{target}]({target_url})* - podjęte działanie: {result}" +"[{author}]({author_url}) wywołał(a) *{abuse_filter}*, wykonując akcję \"" +"{action}\" w *[{target}]({target_url})* - podjęte działanie: {result}." #: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 #: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 @@ -1429,9 +1429,9 @@ msgid "" msgstr "" #: src/rc_formatters.py:1195 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Completed deletion of translation page \"{article}\"" -msgstr "Zmieniono widoczność wersji na stronie {article} " +msgstr "Zmieniono widoczność wersji na stronie {article}" #: src/rc_formatters.py:1198 #, python-brace-format From 2129dc3cd3559e6b05f0b55dc5162c6060bb3995 Mon Sep 17 00:00:00 2001 From: Eduaddad Date: Thu, 22 Apr 2021 15:13:10 +0000 Subject: [PATCH 050/173] Translated using Weblate (Portuguese (Brazil) (pt-br)) Currently translated at 100.0% (254 of 254 strings) Translation: RcGcDw/rc_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/rc_formatters/pt-br/ --- locale/pt-br/LC_MESSAGES/rc_formatters.mo | Bin 33865 -> 34654 bytes locale/pt-br/LC_MESSAGES/rc_formatters.po | 71 +++++++++++----------- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/locale/pt-br/LC_MESSAGES/rc_formatters.mo b/locale/pt-br/LC_MESSAGES/rc_formatters.mo index 5572ea07643a30e5a6529d98f742e0ad46559cec..6bf5f07947cf87073bcca07ed6f18d9e83f893b4 100644 GIT binary patch delta 6396 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 delta 5911 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 diff --git a/locale/pt-br/LC_MESSAGES/rc_formatters.po b/locale/pt-br/LC_MESSAGES/rc_formatters.po index 026dfdb..6624915 100644 --- a/locale/pt-br/LC_MESSAGES/rc_formatters.po +++ b/locale/pt-br/LC_MESSAGES/rc_formatters.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-14 16:24+0200\n" -"PO-Revision-Date: 2020-12-29 15:21+0000\n" +"PO-Revision-Date: 2021-05-06 14:10+0000\n" "Last-Translator: Eduaddad \n" "Language-Team: Portuguese (Brazil) \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6\n" #: src/rc_formatters.py:28 msgid "None" @@ -595,19 +595,21 @@ msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) substituiu a tabela Cargo \"{table}\"" #: src/rc_formatters.py:436 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) criou a [etiqueta]({tag_url}) \"{tag}\"" +msgstr "" +"[{author}]({author_url}) criou a [etiqueta]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:441 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) excluiu a [etiqueta]({tag_url}) \"{tag}\"" +msgstr "" +"[{author}]({author_url}) excluiu a [etiqueta]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:443 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revision or log entry{comment}" @@ -615,23 +617,25 @@ msgid_plural "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revisions and/or log entries{comment}" msgstr[0] "" -"[{author}]({author_url}) importou [{article}]({article_url}) com {count} " -"revisão{comment}" +"[{author}]({author_url}) excluiu a [etiqueta]({tag_url}) \"{tag}\" e removeu " +"{count} revisão ou entrada de registro{comment}" msgstr[1] "" -"[{author}]({author_url}) importou [{article}]({article_url}) com {count} " -"revisões{comment}" +"[{author}]({author_url}) excluiu a [etiqueta]({tag_url}) \"{tag}\" e removeu " +"{count} revisões e/ou entradas de registro{comment}" #: src/rc_formatters.py:449 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) ativou a [etiqueta]({tag_url}) \"{tag}\"" +msgstr "" +"[{author}]({author_url}) ativou a [etiqueta]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:452 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) desativou a [etiqueta]({tag_url}) \"{tag}\"" +msgstr "" +"[{author}]({author_url}) desativou a [etiqueta]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:454 #, python-brace-format @@ -649,13 +653,13 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) travou uma wiki *{wiki_name}*{comment}" #: src/rc_formatters.py:462 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" msgstr "" -"[{author}]({author_url}) modificou o espaço nominal *{namespace_name}* " -"em*{wiki_name}*{comment}" +"[{author}]({author_url}) modificou o espaço nominal *{namespace_name}* em " +"*{wiki_name}*{comment}" #: src/rc_formatters.py:467 #, python-brace-format @@ -673,7 +677,7 @@ msgstr "" "[{author}]({author_url}) modificou o grupo de usuário *{group_name}*{comment}" #: src/rc_formatters.py:477 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) excluiu uma wiki *{wiki_name}*{comment}" @@ -1290,35 +1294,34 @@ msgid "Replaced the Cargo table \"{table}\"" msgstr "Substituiu a tabela Cargo \"{table}\"" #: src/rc_formatters.py:1121 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created the tag \"{tag}\"" -msgstr "Criou uma etiqueta \"{tag}\"" +msgstr "Criou a etiqueta \"{tag}\"" #: src/rc_formatters.py:1125 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted the tag \"{tag}\"" -msgstr "Excluiu uma etiqueta \"{tag}\"" +msgstr "Excluiu a etiqueta \"{tag}\"" #: src/rc_formatters.py:1127 -#, fuzzy msgid "Removed from" -msgstr "Removido" +msgstr "Removido de" #: src/rc_formatters.py:1127 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "revisão ou entrada no registro" +msgstr[1] "revisões e/ou entradas no registro" #: src/rc_formatters.py:1131 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Activated the tag \"{tag}\"" -msgstr "Ativou uma etiqueta \"{tag}\"" +msgstr "Ativou a etiqueta \"{tag}\"" #: src/rc_formatters.py:1134 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deactivated the tag \"{tag}\"" -msgstr "Desativou uma etiqueta \"{tag}\"" +msgstr "Desativou a etiqueta \"{tag}\"" #: src/rc_formatters.py:1137 msgid "Changed wiki settings" @@ -1335,7 +1338,7 @@ msgid "Locked a \"{wiki}\" wiki" msgstr "Travou a wiki \"{wiki}\"" #: src/rc_formatters.py:1147 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Modified \"{namespace_name}\" namespace" msgstr "Modificou o espaço nominal \"{namespace_name}\"" @@ -1354,9 +1357,9 @@ msgid "Modified \"{usergroup_name}\" usergroup" msgstr "Modificou o grupo de usuário \"{usergroup_name}\"" #: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Excluiu a wiki \"{wiki}\"" +msgstr "Recuperou a exclusão de um wiki \"{wiki}\"" #: src/rc_formatters.py:1163 #, python-brace-format From a2d5ccc8b4987e5dcd653a6b729325bbc14bea27 Mon Sep 17 00:00:00 2001 From: MakandIv Date: Fri, 30 Apr 2021 05:33:08 +0000 Subject: [PATCH 051/173] Translated using Weblate (Russian) Currently translated at 99.6% (253 of 254 strings) Translation: RcGcDw/rc_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/rc_formatters/ru/ --- locale/ru/LC_MESSAGES/rc_formatters.mo | Bin 42334 -> 43393 bytes locale/ru/LC_MESSAGES/rc_formatters.po | 68 +++++++++++++------------ 2 files changed, 35 insertions(+), 33 deletions(-) diff --git a/locale/ru/LC_MESSAGES/rc_formatters.mo b/locale/ru/LC_MESSAGES/rc_formatters.mo index 8665e00f4d7a45d2fb599f6249da5efbe7d498ae..aeafb3597921fed4b0cee00bd26ecb473cae9de1 100644 GIT binary patch delta 6536 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 G$Nmd}m7W~{ delta 5851 zcmYk=30Rd?9>?)>FDOuw#wMtjRY8&+L&YUj5EU^c6-81|VMG#Hl)&xchN4;On@ety zN}826^O~lXW@cKMiCLKjH8pCMGnIp_%rkxe_gtRG_wjc>=bZa)XL(=l6&NU|*#=V2INge2{v7XFU@=spnuPoQd~iHMYYQ*b~>F zHy%O{JcsOOSC=Trfz9ZHKcZaQ)laEV^g+2mAN0pGEXOJM7&c-Q_UNosGG?KiZ!OA& zccOIQEb>oX=0k4mHum89>JEhz8vHrCoM;kq52_Y><92)q8_|ZX7>Qj1l=8w{~BlHEz z4c$UH-i`U|iy;_-IXD0pqTJX~lo9=dlj2%L;^;RckEIF4D^g0g1Pxm&s3F_e*P4zcT@cH!#M zvm}%o$>c+(pcH%IZj=jtj50EJQF>(KYy&YA<@-F8<7!bB-BFa){vOH*UqtE1cPPhO z?c9d!=!UYR5Ap=6K$M<@JKG1K95@W4F%SFT)98ioq1?b1C`0~#56wl*M}+UFG?2r64a93lD2M^hP;h0J>oU%Frd_49s$Ve+1>Yizp}l27~by z$_4J@ZXdud$c0oS%2dUmbnFQ%ljr|Bg=`wK>DDAXh}G!9_*CLDEXO}^1J33p!C{Vh z7y>oSMhfLWT zl&Sd;$6~-R791AiTD*cXqJ{Q!eZWCXq2WiA1LFAB8<(O5H(_Vof;N23*?s|Csb56d z|5J3wTPRP#9SlG#!#oMQVK7!=6xuga2%+#UwzDdA1AVFAX648Utt270hCVD1StEV<;M{60PQ+&9K~a6i>$xsLmXErIo)#WM9u0YOMrG^s zWaBuluNF|?iBK1@1n=i;(u4U(liH4QU<)z`Du{{fjU~7Occb()l1HN!$0L1EUt%7{ zPS)@KbtoNr8w1hGinq%hhER~9nSpZQH=OmWC?}42T%RZhrG6Z{;Z5v>u2Xc6e398u z{jdYpq1?zOoQ}6prYv(R?+Scv)-a5_rQOq8|o9X^S1>@6qWhpX{7EX8Hh z^l!Wtl>Kd7<##N=NQ+WaXXy7s9rMX7s0+xoRrf+YqRR^ze>$NK(ol__+}==Ji81)0 zv;GH4j|a`vFQCcDgQ5=OTvSE+X_<#Ms&&{M_oBQn&Z9gX?z8mM)e(cJ_pnp&qL7Bt z^NA=!x)wulC(5FF8<*j)D64%zv0hyJa1iw$FdiRzLO-6lIFNcV4#1aCrs4+54fUI? zp91?l3cMqf3o9>*AsdC!)T`&{9_~ffk@^{BWJWRWJ#igAj7KpXf5cwsSH_PN9D)yE z9ZE;G;C*-u!|)8!al5)jLGG{>eXw7-Uah0?JoUvGg&7rk^;Th5>c=n^Kf})0o_UDG zKy=69_$ZFW1NZ`-z%lc5&pTEs^^83KJ1EriMKmkzS-gNU)YGf1U--i8IL;WXA#WJpalBmOcu)b7fjeZQ9 zF@<`<61{3GQ1*KtWs#0ps!w$!iq@TK+ouio?x`W5^-$`qs;`hauDIn+qzM@H%jzKkgw zc^TntlpgKl?w-TGoAvL3OE`&o+7|u$;(26!tM5_HKj}HfPkP$KQ73TNR()W*ZA$Iu zj;l~sbJ!03YMq5O)PKeqSiVy)vd?iM^@!*7?}!>aM7;@{a6`TRn^5|Kp5i7PPJ6t4 zmwvU*M;i^-(2BofEVeq^qju}|k=TLuObo*ubi>8YdM);#z8_^|FJc1b?_s*|SsaBA zHt63K_A^vudz<8tE97w^^OQy=lX~(5VHr4{X_*4KiPuRh=}OwRe^JOFvRbf&N*7zKA8W}lw}B+Ld80B{4#wN-y`8zo_!8Ej+GLb@c^fret`d7cTGGj*L^gT4 zr;uCZV%ySwwt@Y@d;G5=gA%Epn5{_9k(0l=QF2Qp&H8S){MC9qf)jF`<+O z6IPI8o6To0a+WM}wD4B|W!;Z**4xOW@F_V>!pKKt9+53Z~rxs>NS>!08P(n(%& zdnv?{F60!EZ7iuFQ^_wRnM9G-$U9^b*+!lv4-wh!XdIt^=kvLH>fbucb=YuEyIkM# z7Lc}$Bt;6&?H}mrEPs!c6 ze>)2Pq?&Xl50YjgTMG#y>q!~uLvqOxBHIp)3`0}2(tN_KXr|=7`<%~mV9H1Z4dD?tbw&=ec)uIxabXk0WF>QMn^Q%ZVx3-GW z6t~eh8h`eluTLh}EJk^}zwB$AOmH`^CYD*uHA($EjH`)RMoo%`X-oODy=%qXIps!t z?_|?2{f5OHIHH@?*pM+Od|dR<@`C)iMRQ7`Q}gE*BnKzNCB#L?CqyU41;-~QCnWWX zV>3U>*kN%=h>16gGk0__w&jMI9yuGV=3BX|EylR1p=SCNPm5VO^@fL0UleR)7Nr`S zO8v~win82|eHGrOS9y)aJYG>~HNL6uYNl0gwHhT8x*MCTy^Sq XFx+=}8%YiQ%%WX~t>&DDnJ#|;VNp+b diff --git a/locale/ru/LC_MESSAGES/rc_formatters.po b/locale/ru/LC_MESSAGES/rc_formatters.po index 063670f..be17ae2 100644 --- a/locale/ru/LC_MESSAGES/rc_formatters.po +++ b/locale/ru/LC_MESSAGES/rc_formatters.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-14 16:24+0200\n" -"PO-Revision-Date: 2020-12-30 13:26+0000\n" -"Last-Translator: Philo04 \n" +"PO-Revision-Date: 2021-05-06 14:10+0000\n" +"Last-Translator: MakandIv \n" "Language-Team: Russian \n" "Language: ru\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6\n" #: src/rc_formatters.py:28 msgid "None" @@ -356,8 +356,8 @@ msgid "" "[{author}]({author_url}) changed group membership for [{target}]" "({target_url}) from {old_groups} to {new_groups}{comment}" msgstr "" -"[{author}]({author_url}) изменил модель содержимого страницы [{target}]" -"({target_url}) с {old_groups} на {new_groups}{comment}" +"[{author}]({author_url}) изменил членство в группе для " +"[{target}]({target_url}) с {old_groups} на {new_groups}{comment}" #: src/rc_formatters.py:303 #, python-brace-format @@ -611,19 +611,19 @@ msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) заменил таблицу Cargo \"{table}\"" #: src/rc_formatters.py:436 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) создал [метку]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) создал [метку]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:441 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:443 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revision or log entry{comment}" @@ -631,26 +631,28 @@ msgid_plural "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revisions and/or log entries{comment}" msgstr[0] "" -"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " -"{count} правкой{comment}" +"[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\" и убрал её с " +"{count} правки или записи журнала{comment}" msgstr[1] "" -"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " -"{count} правками{comment}" +"[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\" и убрал её с " +"{count} правок и/или записей журнала{comment}" msgstr[2] "" -"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " -"{count} правками{comment}" +"[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\" и убрал её с " +"{count} правок и/или записей журнала{comment}" #: src/rc_formatters.py:449 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) активировал [метку]({tag_url}) \"{tag}\"" +msgstr "" +"[{author}]({author_url}) активировал [метку]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:452 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) деактивировал [метку]({tag_url}) \"{tag}\"" +msgstr "" +"[{author}]({author_url}) деактивировал [метку]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:454 #, python-brace-format @@ -668,7 +670,7 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) заблокировал вики *{wiki_name}*{comment}" #: src/rc_formatters.py:462 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" @@ -692,9 +694,9 @@ msgstr "" "[{author}]({author_url}) изменил группу пользователей *{group_name}*{comment}" #: src/rc_formatters.py:477 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) удалил вики *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) восстановил вики *{wiki_name}*{comment}" #: src/rc_formatters.py:481 #, python-brace-format @@ -1323,12 +1325,12 @@ msgid "Replaced the Cargo table \"{table}\"" msgstr "Заменил Cargo таблицу \"{table}\"" #: src/rc_formatters.py:1121 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "Создал метку «{tag}»" #: src/rc_formatters.py:1125 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "Удалил метку «{tag}»" @@ -1340,17 +1342,17 @@ msgstr "Удалено" #: src/rc_formatters.py:1127 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "{} правка или запись в журнале" +msgstr[1] "{} правки и/или записи в журнале" +msgstr[2] "{} правок и/или записей в журнале" #: src/rc_formatters.py:1131 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Activated the tag \"{tag}\"" msgstr "Активировал метку «{tag}»" #: src/rc_formatters.py:1134 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deactivated the tag \"{tag}\"" msgstr "Деактивировал метку «{tag}»" @@ -1369,7 +1371,7 @@ msgid "Locked a \"{wiki}\" wiki" msgstr "Заблокировал вики \"{wiki}\"" #: src/rc_formatters.py:1147 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Modified \"{namespace_name}\" namespace" msgstr "Изменил пространство имён \"{namespace_name}\"" @@ -1388,9 +1390,9 @@ msgid "Modified \"{usergroup_name}\" usergroup" msgstr "Изменил группу \"{usergroup_name}\"" #: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Удалил вики \"{wiki}\"" +msgstr "Восстановил вики \"{wiki}\"" #: src/rc_formatters.py:1163 #, python-brace-format From e3ed9409df05f481843232eb35082cb86d3f367c Mon Sep 17 00:00:00 2001 From: MakandIv Date: Fri, 30 Apr 2021 05:35:45 +0000 Subject: [PATCH 052/173] Translated using Weblate (Ukrainian) Currently translated at 77.9% (198 of 254 strings) Translation: RcGcDw/rc_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/rc_formatters/uk/ --- locale/uk/LC_MESSAGES/rc_formatters.mo | Bin 18132 -> 32378 bytes locale/uk/LC_MESSAGES/rc_formatters.po | 346 +++++++++++++------------ 2 files changed, 177 insertions(+), 169 deletions(-) diff --git a/locale/uk/LC_MESSAGES/rc_formatters.mo b/locale/uk/LC_MESSAGES/rc_formatters.mo index 2647143b39785a87335736745f949e4eb24b754a..17db0f28fa7ae508e55d1b7895f18594ec989da2 100644 GIT binary patch literal 32378 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 qcHsBu;i3L>2N6j@d%63#$BmWH(p7|93 delta 3166 zcmX}t3s6*57{Kv!7eNgbik;aW%x4r}4sYK4{(77&8icg5HH=8B1_{2uCx19wYHIhT|ZH;wLx- zzrtu7#h3cMmyZZz0w#-&PB0h8VFh;JO<02;U>0VwihQg?owyG(uphJV6wbsSFcZB@ zIu$E13b&yC{%)LvM{zp$H}BK&av^k#F>N>r6L23E<58T5mys2lSU$#M2I}uhaW*!f zPJ93-<4H`%ix`I^Nslhbi<*fF%;5fJH68uK-Kc+X7}M}=Ou;Ldiet&UW@rZLjVmw~ z*P$+88&;!@I!_pntqadYoo@;Humi8fLl`KeGe}2M6T!0d2e}xJt*AHJiCPYipx*F_ z;Pn%D9piVADU6A6A0!&}_xU&-OK<{qpk`nn>K2`fA^-ZtcU;g3!kJx*Fa^V~0Eb}- z>XR=(T~HJ14YmcZ_oA2aK_uJeW$eZ`u@3#@zaAgOt@t~ZV0%3IAEfgfkGmLmahIhy zh}UBpcdNv;s1qHQ=pi*W(%FAx#*Sr(2qi zUYvzw-PGZ1Y{#>D{-37P#f8mOpr-yCY{5K^1V`CChWU5|i|`Wm;*`n8tii*WhogDR z=)(M{McsmP@DLW`XTk9VDsYJLjhL$Ee;K8?feV{)30}Zyn8g{X(jTI(_*r}ize0V| zF7h`Q2XG$#g3M{MITB^K67~2#jum)1cs-oS>ls&LIrle5=;#v;;VjJN%w%Ir(0(LI z<}8-tPk0o4{HO@OKwU`M4EOIFQ5SdsH3J{uN{sZmMY<6+<1b)hp)R;I*DdNjs5NsA^?|<4CI4gS zjOMXNU^429CDJ%Z7Lb44t5XHW+>D{*u@5()7TG^&V=s@t4rj5^O?VI&FyU3)$#{N|`}^1N zLB{1&+_QKd@4#Ip#_UB8>9_$O#>IFkKxYM=-1+VodvOutuW>ET@VoE+edu94fO^hf z436K&QH;-HI$lJQVMg*)y0t~957vgP*O@yFwH~wu%3YmFbwwkCW1X~`V9Wn+MZuod zg0>|@C!s~At&wPVdhW|-Td@Bhy4BjWSg#?H_55q$Xlo-n2t7jDDhaaZyuEhl1zHTT zfzT(?b{nBt(pEz(bb9VqY1d1HXeZb*f@*Qb5qWz4wQ;1K!qVcY*9){B7ei?{FQyW_ ziHIU<2{P>*BXC~H8?{4gaB)6$%O(@-vQx0S_u94)(}-@pzwVc|R^k>ykBCCwPSJ#-aF2@U4_|1IKfGB-U;CRKaqs9iLC^O!}(t`6PpQbJ{PAro3sonxUh*> zEhi%n+Z|&&EjuaNQ@y8?~Jx4ZV@02aR+odw6*&fO{V@YmaovfeTC#`cTBqx7Bh81+%FBDv` zLS|0$Nnc^9XKc53DO-5T_Eq>ol$!H?-&0*ITl>AyS4`?cpYi<>jU^@={}=oNfx2 zu9iZ1Wz8{(Y)zEQ6{!-}P%gLjgxO6kU6wSqmD#VhhgfoD^IrL}V{6}*5%#&xVvk(C zZMj6WhDz#oW@t;4V`(v#SB~}MMtG-ezj^(p=EhCy+c(}m)hopl(&e>nbuzI1TkA!6 Luq#!*-tpGI_jtK# diff --git a/locale/uk/LC_MESSAGES/rc_formatters.po b/locale/uk/LC_MESSAGES/rc_formatters.po index b8ec080..4aa8eb9 100644 --- a/locale/uk/LC_MESSAGES/rc_formatters.po +++ b/locale/uk/LC_MESSAGES/rc_formatters.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-14 16:24+0200\n" -"PO-Revision-Date: 2021-04-29 05:47+0000\n" -"Last-Translator: magiczocker \n" +"PO-Revision-Date: 2021-05-06 14:10+0000\n" +"Last-Translator: MakandIv \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.4.2\n" +"X-Generator: Weblate 4.6\n" #: src/rc_formatters.py:28 msgid "None" @@ -111,22 +111,22 @@ msgid "Unknown" msgstr "Невідомо" #: src/rc_formatters.py:116 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" msgstr "" -"[{author}]({author_url}) відредагував [{article}]({edit_link}){comment} " -"({sign}{edit_size})" +"[{author}]({author_url}) відредагував " +"[{article}]({edit_link}){comment}{bold}({sign}{edit_size}){bold}" #: src/rc_formatters.py:118 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" msgstr "" -"[{author}]({author_url}) створив [{article}]({edit_link}){comment} ({sign}" -"{edit_size})" +"[{author}]({author_url}) створив " +"[{article}]({edit_link}){comment}{bold}({sign}{edit_size}){bold}" #: src/rc_formatters.py:121 #, python-brace-format @@ -137,8 +137,7 @@ msgstr "[{author}]({author_url}) завантажив [{file}]({file_link}){comm #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" -msgstr "" -"[{author}] ({author_url}) повернув версію [{file}] ({file_link}) {comment}" +msgstr "[{author}]({author_url}) повернув версію [{file}]({file_link}){comment}" #: src/rc_formatters.py:132 #, python-brace-format @@ -210,7 +209,7 @@ msgstr "на {num}{translated_length}" #: src/rc_formatters.py:185 src/rc_formatters.py:867 msgid "until {}" -msgstr "" +msgstr "до {}" #: src/rc_formatters.py:189 msgid " on pages: " @@ -218,7 +217,7 @@ msgstr " на сторінках: " #: src/rc_formatters.py:196 src/rc_formatters.py:881 msgid " and namespaces: " -msgstr " і в простору імен: " +msgstr " і в просторах імен: " #: src/rc_formatters.py:198 msgid " on namespaces: " @@ -250,94 +249,92 @@ msgstr "" "[{author}]({author_url}) розблокував [{blocked_user}]({user_url}){comment}" #: src/rc_formatters.py:223 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" msgstr "" -"[{author}]({author_url}) залишив [коментар]({comment}) на профілі {target}" +"[{author}]({author_url}) залишив [коментар]({comment}) у профілі {target}" #: src/rc_formatters.py:225 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on their own profile" msgstr "" -"[{author}]({author_url}) залишив [коментар]({comment}) на профілі {target}" +"[{author}]({author_url}) залишив [коментар]({comment}) у власному профілі" #: src/rc_formatters.py:231 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " "profile" msgstr "" -"[{author}]({author_url}) відповів на [коментар]({comment}) на профілі " -"{target}" +"[{author}]({author_url}) відповів на [коментар]({comment}) у профілі {target}" #: src/rc_formatters.py:237 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on their own " "profile" msgstr "" -"[{author}]({author_url}) відповів на [коментар]({comment}) на профілі " -"{target}" +"[{author}]({author_url}) відповів на [коментар]({comment}) у власному профілі" #: src/rc_formatters.py:245 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" msgstr "" -"[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " +"[{author}]({author_url}) відредагував [коментар]({comment}) у профілі " "{target}" #: src/rc_formatters.py:251 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on their own profile" msgstr "" -"[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " -"{target}" +"[{author}]({author_url}) відредагував [коментар]({comment}) у власному " +"профілі" #: src/rc_formatters.py:257 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "[{author}] ({author_url}) вилучив коментар в профілі {target}" +msgstr "[{author}]({author_url}) очистив коментар у профілі {target}" #: src/rc_formatters.py:259 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "[{author}] ({author_url}) вилучив коментар в профілі {target}" +msgstr "[{author}]({author_url}) очистив коментар у власному профілі" #: src/rc_formatters.py:267 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" msgstr "" -"[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " -"{target}" +"[{author}]({author_url}) видалив [коментар]({comment}) у профілі {target}" #: src/rc_formatters.py:269 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" msgstr "" -"[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " -"{target}" +"[{author}]({author_url}) видалив [коментар]({comment}) у власному профілі" #: src/rc_formatters.py:274 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " "profile. *({desc})*" msgstr "" -"[{author}]({author_url}) відредагував {field} на профілі {target}. *({desc})*" +"[{author}]({author_url}) відредагував {field} у профілі " +"[{target}]({target_url}). *({desc})*" #: src/rc_formatters.py:281 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " "profile. *({desc})*" msgstr "" -"[{author}]({author_url}) відредагував {field} на профілі {target}. *({desc})*" +"[{author}]({author_url}) відредагував {field} у [власному]({target_url}) " +"профілі. *({desc})*" #: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 #: src/rc_formatters.py:979 @@ -345,13 +342,13 @@ msgid "none" msgstr "нічого" #: src/rc_formatters.py:301 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) changed group membership for [{target}]" "({target_url}) from {old_groups} to {new_groups}{comment}" msgstr "" -"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" -"({article_url}) з {old} на {new}{comment}" +"[{author}]({author_url}) змінив членство групи для [{target}]({target_url}) " +"з {old_groups} на {new_groups}{comment}" #: src/rc_formatters.py:303 #, fuzzy, python-brace-format @@ -406,7 +403,7 @@ msgid_plural "" "[{author}]({author_url}) changed visibility of {amount} revisions on page " "[{article}]({article_url}){comment}" msgstr[0] "" -"[{author}]({author_url}) змінив видимість {amount} версії сторінки " +"[{author}]({author_url}) змінив видимість версії сторінки " "[{article}]({article_url}){comment}" msgstr[1] "" "[{author}]({author_url}) змінив видимість {amount} версій сторінки " @@ -444,7 +441,7 @@ msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "[{author}]({author_url}) змінив видимість подій журналу{comment}" #: src/rc_formatters.py:359 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " "revision from [{source}]({source_url}){comment}" @@ -453,13 +450,13 @@ msgid_plural "" "revisions from [{source}]({source_url}){comment}" msgstr[0] "" "[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " -"версією{comment}" +"версією від [{source}]({source_url}){comment}" msgstr[1] "" "[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " -"версіями{comment}" +"версіями від [{source}]({source_url}){comment}" msgstr[2] "" "[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " -"версіями{comment}" +"версіями від [{source}]({source_url}){comment}" #: src/rc_formatters.py:364 #, python-brace-format @@ -549,13 +546,13 @@ msgstr "" "({article_url}) з {old} на {new}{comment}" #: src/rc_formatters.py:407 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " "non-default content model {new}{comment}" msgstr "" -"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" -"({article_url}) з {old} на {new}{comment}" +"[{author}]({author_url}) створив сторінку [{article}]({article_url}) з " +"використанням нестандартної моделі вмісту {new}{comment}" #: src/rc_formatters.py:410 #, python-brace-format @@ -581,39 +578,39 @@ msgstr "" "[{author}]({author_url}) відредагував фрагмент для [{article}]({article_url})" #: src/rc_formatters.py:421 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) створив таблицю Cargo \"{table}\"" #: src/rc_formatters.py:423 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) вилучив [тег]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) видалив таблицю Cargo \"{table}\"" #: src/rc_formatters.py:428 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) відтворив таблицю Cargo \"{table}\"" #: src/rc_formatters.py:433 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) замінив таблицю Cargo \"{table}\"" #: src/rc_formatters.py:436 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:441 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) вилучив [тег]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) вилучив [тег]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:443 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revision or log entry{comment}" @@ -621,192 +618,204 @@ msgid_plural "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revisions and/or log entries{comment}" msgstr[0] "" -"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " -"версією{comment}" +"[{author}]({author_url}) видалив [тег]({tag_url}) \"{tag}\" і прибрав її з " +"{count} редагування або запису журналу{comment}" msgstr[1] "" -"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " -"версіями{comment}" +"[{author}]({author_url}) видалив [тег]({tag_url}) \"{tag}\" і прибрав її з " +"{count} редагувань та/або записів журналу{comment}" msgstr[2] "" -"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " -"версіями{comment}" +"[{author}]({author_url}) видалив [тег]({tag_url}) \"{tag}\" і прибрав її з " +"{count} редагувань та/або записів журналу{comment}" #: src/rc_formatters.py:449 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) активував [тег]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) активував [тег]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:452 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) деактивував [тег]({tag_url}) \"{tag}\"" +msgstr "" +"[{author}]({author_url}) деактивував [тег]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:454 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) changed wiki settings{reason}" -msgstr "[{author}]({author_url}) змінив видимість подій журналу{comment}" +msgstr "[{author}]({author_url}) змінив налаштування вікі{reason}" #: src/rc_formatters.py:456 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" +msgstr "[{author}]({author_url}) видалив вікі *{wiki_name}*{comment}" #: src/rc_formatters.py:459 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" +msgstr "[{author}]({author_url}) заблокував вікі *{wiki_name}*{comment}" #: src/rc_formatters.py:462 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" msgstr "" -"[{author}]({author_url}) завантажив нову версію [{file}]({file_link})" -"{comment}" +"[{author}]({author_url}) змінив простір імен *{namespace_name}* на " +"*{wiki_name}*{comment}" #: src/rc_formatters.py:467 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a namespace *{namespace_name}* on " "*{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) вилучив [{page}]({page_link}){comment}" +msgstr "" +"[{author}]({author_url}) вилучив простір імен *{namespace_name}* на " +"*{wiki_name}*{comment}" #: src/rc_formatters.py:473 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" +msgstr "" +"[{author}]({author_url}) змінив групу користувачів *{group_name}*{comment}" #: src/rc_formatters.py:477 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" +msgstr "[{author}]({author_url}) відновив вікі *{wiki_name}*{comment}" #: src/rc_formatters.py:481 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" +msgstr "[{author}]({author_url}) розблокував вікі *{wiki_name}*{comment}" #: src/rc_formatters.py:486 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) generated *{file}* dump{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" +msgstr "[{author}]({author_url}) згенерував дамп *{file}*{comment}" #: src/rc_formatters.py:491 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" +msgstr "[{author}]({author_url}) видалив дамп *{file}*{comment}" #: src/rc_formatters.py:502 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) marked [{article}]({article_url}) for " "translation{comment}" -msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) позначив сторінку [{article}]({article_url}) як " +"доступну для перекладу{comment}" #: src/rc_formatters.py:509 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) removed [{article}]({article_url}) from the " "translation system{comment}" msgstr "" -"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " -"версією{comment}" +"[{author}]({author_url}) видалив [{article}]({article_url}) з системи " +"перекладу{comment}" #: src/rc_formatters.py:516 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) completed moving translation pages from *{article}* " "to [{target}]({target_url}){comment}" msgstr "" -"[{author}]({author_url}) переніс налаштування захисту з {redirect}*{article}" -"* на [{target}]({target_url}){comment}" +"[{author}]({author_url}) перейменував доступну для перекладу сторінку " +"*{article}* в [{target}]({target_url}){comment}" #: src/rc_formatters.py:524 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) encountered a problem while moving [{article}]" "({article_url}) to [{target}]({target_url}){comment}" msgstr "" -"[{author}]({author_url}) об'єднав історії версій [{article}]({article_url}) " -"з [{dest}]({dest_url}){comment}" +"[{author}]({author_url}) зіткнувся з проблемою при спробі перейменування " +"[{article}]({article_url}) в [{target}]({target_url}){comment}" #: src/rc_formatters.py:532 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) completed deletion of translatable page [{article}]" "({article_url}){comment}" msgstr "" -"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" +"[{author}]({author_url}) видалив доступну для перекладу сторінку " +"[{article}]({article_url}){comment}" #: src/rc_formatters.py:540 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) failed to delete [{article}]({article_url}) which " "belongs to translatable page [{target}]({target_url}){comment}" msgstr "" -"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " -"версією{comment}" +"[{author}]({author_url}) не зміг видалити [{article}]({article_url}), яка " +"відноситься до доступної для перекладу сторінці " +"[{target}]({target_url}){comment}" #: src/rc_formatters.py:548 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) completed deletion of translation page [{article}]" "({article_url}){comment}" msgstr "" -"[{author}]({author_url}) змінив видимість {amount} версії сторінки " +"[{author}]({author_url}) видалив сторінку перекладу " "[{article}]({article_url}){comment}" #: src/rc_formatters.py:556 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) failed to delete [{article}]({article_url}) which " "belongs to translation page [{target}]({target_url}){comment}" msgstr "" -"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " -"версією{comment}" +"[{author}]({author_url}) не зміг видалити [{article}]({article_url}), яка " +"відноситься до сторінці перекладу [{target}]({target_url}){comment}" #: src/rc_formatters.py:564 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) encouraged translation of [{article}]({article_url})" "{comment}" msgstr "" -"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" +"[{author}]({author_url}) підвищив пріоритет перекладу сторінки " +"[{article}]({article_url}){comment}" #: src/rc_formatters.py:571 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) discouraged translation of [{article}]" "({article_url}){comment}" -msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) знизив пріоритет перекладу сторінки " +"[{article}]({article_url}){comment}" #: src/rc_formatters.py:581 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) limited languages for [{article}]({article_url}) to " "`{languages}`{comment}" msgstr "" -"[{author}]({author_url}) змінив налаштування захисту [{article}]" -"({article_url}) на: {settings}{comment}" +"[{author}]({author_url}) обмежив для сторінки [{article}]({article_url}) " +"список мов: `{languages}`{comment}" #: src/rc_formatters.py:587 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) set the priority languages for [{article}]" "({article_url}) to `{languages}`{comment}" msgstr "" -"[{author}]({author_url}) змінив налаштування захисту [{article}]" -"({article_url}) на: {settings}{comment}" +"[{author}]({author_url}) задав для сторінки [{article}]({article_url}) " +"наступний список пріоритетних мов: `{languages}`{comment}" #: src/rc_formatters.py:593 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) removed priority languages from [{article}]" "({article_url}){comment}" msgstr "" -"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" +"[{author}]({author_url}) видалив пріоритетні мови зі сторінки " +"[{article}]({article_url}){comment}" #: src/rc_formatters.py:600 #, fuzzy, python-brace-format @@ -853,7 +862,7 @@ msgstr "" #: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 #: src/rc_formatters.py:1241 msgid "(default)" -msgstr "" +msgstr "(за замовчуванням)" #: src/rc_formatters.py:647 #, fuzzy, python-brace-format @@ -901,15 +910,15 @@ msgstr "" #: src/rc_formatters.py:682 msgid "Performed" -msgstr "" +msgstr "Виконав" #: src/rc_formatters.py:683 msgid "Action taken" -msgstr "" +msgstr "Вжиті заходи" #: src/rc_formatters.py:684 msgid "Title" -msgstr "" +msgstr "Заголовок" #: src/rc_formatters.py:693 src/rc_formatters.py:980 msgid "No description provided" @@ -1016,7 +1025,7 @@ msgstr "Переніс налаштування захисту з {redirect}{art #: src/rc_formatters.py:869 msgid "unknown expiry time" -msgstr "" +msgstr "невідомий період" #: src/rc_formatters.py:874 msgid "Blocked from editing the following pages: " @@ -1145,7 +1154,7 @@ msgstr "Зняв захист з {article}" #, python-brace-format msgid "Changed visibility of revision on page {article} " msgid_plural "Changed visibility of {amount} revisions on page {article} " -msgstr[0] "Змінив видимість {amount} версії сторінки {article} " +msgstr[0] "Змінив видимість версії сторінки {article} " msgstr[1] "Змінив видимість {amount} версій сторінки {article} " msgstr[2] "Змінив видимість {amount} версій сторінки {article} " @@ -1167,12 +1176,12 @@ msgid "Changed visibility of log events" msgstr "Змінив видимість подій журналу" #: src/rc_formatters.py:1031 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Imported {article} with {count} revision from \"{source}\"" msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "Імпортував {article} з {count} версією" -msgstr[1] "Імпортував {article} з {count} версіями" -msgstr[2] "Імпортував {article} з {count} версіями" +msgstr[0] "Імпортував {article} з {count} версією від \"{source}\"" +msgstr[1] "Імпортував {article} з {count} версіями від \"{source}\"" +msgstr[2] "Імпортував {article} з {count} версіями від \"{source}\"" #: src/rc_formatters.py:1036 #, python-brace-format @@ -1247,9 +1256,9 @@ msgid "Created the page {article} using a non-default content model" msgstr "" #: src/rc_formatters.py:1084 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created with model {new}: {reason}" -msgstr "Модель змінена з {old} на {new}: {reason}" +msgstr "Створив з використанням моделі вмісту {new}: {reason}" #: src/rc_formatters.py:1087 #, python-brace-format @@ -1267,24 +1276,24 @@ msgid "Edited the slice for {article}" msgstr "Відредагував фрагмент для {article}" #: src/rc_formatters.py:1099 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created the Cargo table \"{table}\"" -msgstr "Створив тег \"{tag}\"" +msgstr "Створив таблицю Cargo \"{table}\"" #: src/rc_formatters.py:1103 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted the Cargo table \"{table}\"" -msgstr "Вилучив тег \"{tag}\"" +msgstr "Видалив таблицю Cargo \"{table}\"" #: src/rc_formatters.py:1110 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Recreated the Cargo table \"{table}\"" -msgstr "Створив тег \"{tag}\"" +msgstr "Відтворив таблицю Cargo \"{table}\"" #: src/rc_formatters.py:1117 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Replaced the Cargo table \"{table}\"" -msgstr "Вилучив тег \"{tag}\"" +msgstr "Замінив таблицю Cargo \"{table}\"" #: src/rc_formatters.py:1121 #, fuzzy, python-brace-format @@ -1304,9 +1313,9 @@ msgstr "Видалено" #: src/rc_formatters.py:1127 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "{} редагування або запис в журналі" +msgstr[1] "{} редагування та/або записи в журналі" +msgstr[2] "{} редагувань та/або записів в журналі" #: src/rc_formatters.py:1131 #, fuzzy, python-brace-format @@ -1320,36 +1329,36 @@ msgstr "Деактивував тег \"{tag}\"" #: src/rc_formatters.py:1137 msgid "Changed wiki settings" -msgstr "" +msgstr "Змінив налаштування вікі" #: src/rc_formatters.py:1141 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted a \"{wiki}\" wiki" -msgstr "Вилучив тег \"{tag}\"" +msgstr "Видалив вікі \"{wiki}\"" #: src/rc_formatters.py:1144 #, python-brace-format msgid "Locked a \"{wiki}\" wiki" -msgstr "" +msgstr "Заблокував вікі \"{wiki}\"" #: src/rc_formatters.py:1147 #, python-brace-format msgid "Modified \"{namespace_name}\" namespace" -msgstr "" +msgstr "Змінив простір імен \"{namespace_name}\"" #: src/rc_formatters.py:1149 src/rc_formatters.py:1154 msgid "Wiki" -msgstr "" +msgstr "Вікі" #: src/rc_formatters.py:1151 #, python-brace-format msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "" +msgstr "Видалив простір імен \"{namespace_name}\"" #: src/rc_formatters.py:1157 #, python-brace-format msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "" +msgstr "Змінив групу \"{usergroup_name}\"" #: src/rc_formatters.py:1160 #, python-brace-format @@ -1404,9 +1413,9 @@ msgid "" msgstr "" #: src/rc_formatters.py:1195 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Completed deletion of translation page \"{article}\"" -msgstr "Змінив видимість {amount} версії сторінки {article}" +msgstr "Завершив видалення сторінок перекладу \"{article}\"" #: src/rc_formatters.py:1198 #, python-brace-format @@ -1462,11 +1471,11 @@ msgstr "" #: src/rc_formatters.py:1232 msgid "Old state" -msgstr "" +msgstr "Старий стан" #: src/rc_formatters.py:1233 msgid "New state" -msgstr "" +msgstr "Новий стан" #: src/rc_formatters.py:1242 #, fuzzy, python-brace-format @@ -1475,11 +1484,11 @@ msgstr "Зняв захист з {article}" #: src/rc_formatters.py:1243 msgid "Old language" -msgstr "" +msgstr "Стара мова" #: src/rc_formatters.py:1244 msgid "New language" -msgstr "" +msgstr "Нова мова" #: src/rc_formatters.py:1248 #, python-brace-format @@ -1495,9 +1504,8 @@ msgid "Renamed user \"{old_name}\" to \"{new_name}\"" msgstr "" #: src/rc_formatters.py:1254 -#, fuzzy msgid "Action has been hidden by administration" -msgstr "Дія була прихована адміністрацією." +msgstr "Дія була прихована адміністрацією" #: src/rc_formatters.py:1259 #, python-brace-format From 0181e38213d140abbc9ddf62d398cb958e40cfe5 Mon Sep 17 00:00:00 2001 From: lakejason0 Date: Mon, 26 Apr 2021 15:43:19 +0000 Subject: [PATCH 053/173] Translated using Weblate (Chinese (Simplified) (zh-hans)) Currently translated at 100.0% (254 of 254 strings) Translation: RcGcDw/rc_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/rc_formatters/zh-hans/ --- locale/zh-hans/LC_MESSAGES/rc_formatters.mo | Bin 32406 -> 33006 bytes locale/zh-hans/LC_MESSAGES/rc_formatters.po | 54 ++++++++++---------- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/locale/zh-hans/LC_MESSAGES/rc_formatters.mo b/locale/zh-hans/LC_MESSAGES/rc_formatters.mo index b7aa74b2713b7898a623165d57547bab1977a34f..4bcc2ae5dd920e7a525652ac80b3834b702124ab 100644 GIT binary patch delta 6267 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 bu~a2{x0D>({`L0tR~HpsS-bT=r#AlvPe;1Q delta 5900 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 diff --git a/locale/zh-hans/LC_MESSAGES/rc_formatters.po b/locale/zh-hans/LC_MESSAGES/rc_formatters.po index 1e5577f..29e0c88 100644 --- a/locale/zh-hans/LC_MESSAGES/rc_formatters.po +++ b/locale/zh-hans/LC_MESSAGES/rc_formatters.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-14 16:24+0200\n" -"PO-Revision-Date: 2020-12-29 15:21+0000\n" +"PO-Revision-Date: 2021-05-06 14:10+0000\n" "Last-Translator: lakejason0 \n" "Language-Team: Chinese (Simplified) \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6\n" #: src/rc_formatters.py:28 msgid "None" @@ -565,19 +565,19 @@ msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) 替换了 Cargo 表 \"{table}\"" #: src/rc_formatters.py:436 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) 创建了一个[标签]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) 创建了[标签]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:441 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) 删除了一个[标签]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) 删除了[标签]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:443 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revision or log entry{comment}" @@ -585,20 +585,20 @@ msgid_plural "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revisions and/or log entries{comment}" msgstr[0] "" -"[{author}]({author_url}) 导入了 [{article}]({article_url}) 的 {count} 个修订" -"版本{comment}" +"[{author}]({author_url}) 删除了 [标签]({tag_url}) \"{tag}\" 并将其从 {count} " +"个修订版本/日志项中移除{comment}" #: src/rc_formatters.py:449 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) 激活了一个[标签]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) 激活了[标签]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:452 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) 取消激活了一个[标签]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) 取消激活了[标签]({tag_url}) \"{tag}\"{comment}" #: src/rc_formatters.py:454 #, python-brace-format @@ -616,13 +616,12 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) 锁定了wiki *{wiki_name}* {comment}" #: src/rc_formatters.py:462 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" msgstr "" -"[{author}]({author_url}) 修改了命名空间 *{namespace_name}* 于 *{wiki_name}* " -"{comment}" +"[{author}]({author_url}) 修改了命名空间 *{namespace_name}* 于 *{wiki_name}*{comment}" #: src/rc_formatters.py:467 #, python-brace-format @@ -639,9 +638,9 @@ msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" msgstr "[{author}]({author_url}) 修改了用户组 *{group_name}*{comment}" #: src/rc_formatters.py:477 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) 删除了wiki *{wiki_name}* {comment}" +msgstr "[{author}]({author_url}) 删除了wiki *{wiki_name}*{comment}" #: src/rc_formatters.py:481 #, python-brace-format @@ -1246,32 +1245,31 @@ msgid "Replaced the Cargo table \"{table}\"" msgstr "替换了 Cargo 表 \"{table}\"" #: src/rc_formatters.py:1121 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "创建了标签 \"{tag}\"" #: src/rc_formatters.py:1125 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "删除了标签 \"{tag}\"" #: src/rc_formatters.py:1127 -#, fuzzy msgid "Removed from" -msgstr "移除了" +msgstr "移除范围" #: src/rc_formatters.py:1127 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" -msgstr[0] "" +msgstr[0] "{} 个修订版本/日志项" #: src/rc_formatters.py:1131 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Activated the tag \"{tag}\"" msgstr "激活了标签 \"{tag}\"" #: src/rc_formatters.py:1134 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deactivated the tag \"{tag}\"" msgstr "取消激活了标签 \"{tag}\"" @@ -1290,7 +1288,7 @@ msgid "Locked a \"{wiki}\" wiki" msgstr "锁定了wiki \"{wiki}\"" #: src/rc_formatters.py:1147 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Modified \"{namespace_name}\" namespace" msgstr "修改了命名空间 \"{namespace_name}\"" @@ -1309,9 +1307,9 @@ msgid "Modified \"{usergroup_name}\" usergroup" msgstr "修改了用户组 \"{usergroup_name}\"" #: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" -msgstr "删除了wiki \"{wiki}\"" +msgstr "取消删除了wiki \"{wiki}\"" #: src/rc_formatters.py:1163 #, python-brace-format From 3a49cb9bca80e9f613fe683cc425059047c76243 Mon Sep 17 00:00:00 2001 From: Creeper Date: Tue, 27 Apr 2021 14:01:44 +0000 Subject: [PATCH 054/173] Translated using Weblate (Hindi) Currently translated at 100.0% (254 of 254 strings) Translation: RcGcDw/rc_formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/rc_formatters/hi/ --- locale/hi/LC_MESSAGES/rc_formatters.mo | Bin 45387 -> 46402 bytes locale/hi/LC_MESSAGES/rc_formatters.po | 69 +++++++++++++------------ 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/locale/hi/LC_MESSAGES/rc_formatters.mo b/locale/hi/LC_MESSAGES/rc_formatters.mo index 1d792b3556302c34d9cfdabcd0f737a4fa33dca5..e3e218684e959fc9bb38b3aebe4395098c44b2f9 100644 GIT binary patch delta 6579 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 B$g=\n" "Language-Team: Hindi \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6\n" #: src/rc_formatters.py:28 msgid "None" @@ -593,19 +593,22 @@ msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) ने कार्गो टेबल \"{table}\" को बदल दिया" #: src/rc_formatters.py:436 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" बनाया" +msgstr "" +"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" बनाया{comment}" #: src/rc_formatters.py:441 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिलीट किया" +msgstr "" +"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिलीट " +"किया{comment}" #: src/rc_formatters.py:443 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revision or log entry{comment}" @@ -613,24 +616,27 @@ msgid_plural "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revisions and/or log entries{comment}" msgstr[0] "" -"[{author}]({author_url}) ने [{article}]({article_url}) को {count} रिवीशन के " -"साथ ({article_url}) इम्पोर्ट किया{comment}" +"[{author}]({author_url}) ने [टैग]({tag_url}) \"{tag}\" को डिलीट किया और इसे " +"{count} रिवीशन या लॉग एंट्री से हटाया{comment}" msgstr[1] "" -"[{author}]({author_url}) ने [{article}]({article_url}) को {count} रिवीशनों के " -"साथ ({article_url}) इम्पोर्ट किया{comment}" +"[{author}]({author_url}) ने [टैग]({tag_url}) \"{tag}\" को डिलीट किया और इसे " +"{count} रिवीशनों या लॉग एंट्रियों से हटाया{comment}" #: src/rc_formatters.py:449 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को ऐक्टिवेट किया" +msgstr "" +"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को सक्रीय " +"किया{comment}" #: src/rc_formatters.py:452 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिऐक्टिवेट किया" +"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को अक्रीय " +"किया{comment}" #: src/rc_formatters.py:454 #, python-brace-format @@ -648,12 +654,12 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* के लॉक किया{comment}" #: src/rc_formatters.py:462 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" msgstr "" -"[{author}]({author_url}) ने *{wiki_name}* पर एक नेमस्पेस *{namespace_name}* को " +"[{author}]({author_url}) ने *{wiki_name}* पर नेमस्पेस *{namespace_name}* को " "मॉडिफाइ किया{comment}" #: src/rc_formatters.py:467 @@ -672,9 +678,9 @@ msgstr "" "[{author}]({author_url}) ने यूज़र ग्रुप *{group_name}* को मॉडिफाइ किया{comment}" #: src/rc_formatters.py:477 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* को डिलीट किया{comment}" +msgstr "[{author}]({author_url}) ने विकि *{wiki_name}* को अनडिलीट किया{comment}" #: src/rc_formatters.py:481 #, python-brace-format @@ -1290,35 +1296,34 @@ msgid "Replaced the Cargo table \"{table}\"" msgstr "कोर्गो टेबल \"{table}\" को बदला गया" #: src/rc_formatters.py:1121 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "टैग \"{tag}\" बनाया गया" #: src/rc_formatters.py:1125 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "टैग \"{tag}\" को डिलीट किया गया" #: src/rc_formatters.py:1127 -#, fuzzy msgid "Removed from" -msgstr "हटाया गया" +msgstr "इससे हटाया गया" #: src/rc_formatters.py:1127 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{} रिवीशन और/या लॉग एंट्री" +msgstr[1] "{} रिवीशन और/या लॉग एंट्रियाँ" #: src/rc_formatters.py:1131 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Activated the tag \"{tag}\"" -msgstr "टैग \"{tag}\" को ऐक्टिवेट किया गया" +msgstr "टैग \"{tag}\" को सक्रीय किया गया" #: src/rc_formatters.py:1134 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deactivated the tag \"{tag}\"" -msgstr "टैग \"{tag}\" को डिऐक्टिवेट किया गया" +msgstr "टैग \"{tag}\" को अक्रीय किया गया" #: src/rc_formatters.py:1137 msgid "Changed wiki settings" @@ -1335,7 +1340,7 @@ msgid "Locked a \"{wiki}\" wiki" msgstr "\"{wiki}\" विकी को लॉक किया गया" #: src/rc_formatters.py:1147 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Modified \"{namespace_name}\" namespace" msgstr "\"{namespace_name}\" नेमस्पेस को मॉडिफाइ किया गया" @@ -1354,9 +1359,9 @@ msgid "Modified \"{usergroup_name}\" usergroup" msgstr "\"{usergroup_name}\" यूज़रग्रुप को मॉडिफाइ किया गया" #: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" -msgstr "\"{wiki}\" विकी को डिलीट किया गया" +msgstr "\"{wiki}\" विकि को अनडिलीट किया गया" #: src/rc_formatters.py:1163 #, python-brace-format From 8316ff1657d598477a788910e871b5c0cfcdea7d Mon Sep 17 00:00:00 2001 From: Frisk Date: Fri, 7 May 2021 15:33:17 +0200 Subject: [PATCH 055/173] Added ManageWiki extension formatters --- extensions/base/managewiki.py | 207 ++++++++++++++++++++++++++++++++++ src/rc_formatters.py | 62 +++------- 2 files changed, 223 insertions(+), 46 deletions(-) create mode 100644 extensions/base/managewiki.py diff --git a/extensions/base/managewiki.py b/extensions/base/managewiki.py new file mode 100644 index 0000000..f4f8524 --- /dev/null +++ b/extensions/base/managewiki.py @@ -0,0 +1,207 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +import logging +import re +from src.discord.message import DiscordMessage +from src.api import formatter +from src.i18n import rc_formatters +from src.api.context import Context +from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url + +_ = rc_formatters.gettext +ngettext = rc_formatters.ngettext + + +# ManageWiki - https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:ManageWiki +# managewiki/settings - Changing wiki settings + +@formatter.embed(event="managewiki/settings") +def embed_managewiki_settings(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Changed wiki settings") + if change["logparams"].get("changes", ""): + embed.add_field("Setting", sanitize_to_markdown(change["logparams"].get("changes"))) + return embed + + +@formatter.compact(event="managewiki/settings") +def compact_managewiki_settings(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) changed wiki settings{reason}".format(author=author, author_url=author_url, reason=parsed_comment)) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# managewiki/delete - Deleting a wiki + + +@formatter.embed(event="managewiki/delete") +def embed_managewiki_delete(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Deleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) + return embed + + +@formatter.compact(event="managewiki/delete") +def compact_managewiki_delete(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}").format(author=author, + author_url=author_url, + wiki_name=change[ + "logparams"].get("wiki", + _("Unknown")), + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# managewiki/lock - Locking a wiki + + +@formatter.embed(event="managewiki/lock") +def embed_managewiki_lock(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Locked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) + return embed + + +@formatter.compact(event="managewiki/lock") +def compact_managewiki_lock(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}").format( + author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", _("Unknown")), + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# managewiki/namespaces - Modirying a wiki namespace + + +@formatter.embed(event="managewiki/namespaces") +def embed_managewiki_namespaces(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Modified \"{namespace_name}\" namespace").format( + namespace_name=change["logparams"].get("namespace", _("Unknown"))) + embed.add_field(_('Wiki'), change["logparams"].get("wiki", _("Unknown"))) + return embed + + +@formatter.compact(event="managewiki/namespaces") +def compact_managewiki_namespaces(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) modified namespace *{namespace_name}* on *{wiki_name}*{comment}").format( + author=author, author_url=author_url, namespace_name=change["logparams"].get("namespace", _("Unknown")), + wiki_name=change["logparams"].get("wiki", _("Unknown")), comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# managewiki/namespaces-delete - Deleteing a namespace + + +@formatter.embed(event="managewiki/namespaces-delete") +def embed_managewiki_namespaces_delete(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Deleted a \"{namespace_name}\" namespace").format( + namespace_name=change["logparams"].get("namespace", _("Unknown"))) + embed.add_field(_('Wiki'), change["logparams"].get("wiki", _("Unknown"))) + return embed + + +@formatter.compact(event="managewiki/namespaces-delete") +def compact_managewiki_namespaces_delete(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _( + "[{author}]({author_url}) deleted a namespace *{namespace_name}* on *{wiki_name}*{comment}").format( + author=author, author_url=author_url, + namespace_name=change["logparams"].get("namespace", _("Unknown")), + wiki_name=change["logparams"].get("wiki", _("Unknown")), comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# managewiki/rights - Modifying user groups + + +@formatter.embed(event="managewiki/rights") +def embed_managewiki_rights(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + group_name = change["title"].split("/permissions/", 1)[1] + embed["title"] = _("Modified \"{usergroup_name}\" usergroup").format(usergroup_name=group_name) + return embed + + +@formatter.compact(event="managewiki/rights") +def compact_managewiki_rights(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + group_name = change["title"].split("/permissions/", 1)[1] + content = _("[{author}]({author_url}) modified user group *{group_name}*{comment}").format( + author=author, author_url=author_url, group_name=group_name, comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# managewiki/undelete - Restoring a wiki + + +@formatter.embed(event="managewiki/undelete") +def embed_managewiki_undelete(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Undeleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) + return embed + + +@formatter.compact(event="managewiki/undelete") +def compact_managewiki_undelete(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}").format( + author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", _("Unknown")), + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# managewiki/unlock - Unlocking a wiki + + +@formatter.embed(event="managewiki/unlock") +def embed_managewiki_unlock(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Unlocked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) + return embed + + +@formatter.compact(event="managewiki/undelete") +def compact_managewiki_unlock(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}").format( + author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", _("Unknown")), + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/src/rc_formatters.py b/src/rc_formatters.py index c46cc04..9c5559d 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -245,37 +245,21 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes elif action == "managetags/deactivate": link = link_formatter(create_article_path(change["title"])) elif action == "managewiki/settings": # Miraheze's ManageWiki extension https://github.com/miraheze/ManageWiki - content = _("[{author}]({author_url}) changed wiki settings{reason}".format(author=author, author_url=author_url, reason=parsed_comment)) + elif action == "managewiki/delete": - content = _("[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}").format(author=author, author_url=author_url, - wiki_name=change["logparams"].get("wiki", _("Unknown")), comment=parsed_comment) + elif action == "managewiki/lock": - content = _("[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}").format( - author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", _("Unknown")), comment=parsed_comment) + elif action == "managewiki/namespaces": - content = _("[{author}]({author_url}) modified namespace *{namespace_name}* on *{wiki_name}*{comment}").format( - author=author, author_url=author_url, namespace_name=change["logparams"].get("namespace", _("Unknown")), - wiki_name=change["logparams"].get("wiki", _("Unknown")), comment=parsed_comment) + elif action == "managewiki/namespaces-delete": - content = _( - "[{author}]({author_url}) deleted a namespace *{namespace_name}* on *{wiki_name}*{comment}").format( - author=author, author_url=author_url, - namespace_name=change["logparams"].get("namespace", _("Unknown")), - wiki_name=change["logparams"].get("wiki", _("Unknown")), comment=parsed_comment) + elif action == "managewiki/rights": - group_name = change["title"].split("/permissions/", 1)[1] - content = _("[{author}]({author_url}) modified user group *{group_name}*{comment}").format( - author=author, author_url=author_url, group_name=group_name, comment=parsed_comment - ) + elif action == "managewiki/undelete": - content = _("[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}").format( - author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", _("Unknown")), comment=parsed_comment - ) + elif action == "managewiki/unlock": - content = _("[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}").format( - author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", _("Unknown")), - comment=parsed_comment - ) + elif action == "datadump/generate": content = _("[{author}]({author_url}) generated *{file}* dump{comment}").format( author=author, author_url=author_url, file=change["logparams"]["filename"], @@ -621,35 +605,21 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): elif action == "managetags/deactivate": elif action == "managewiki/settings": # Miraheze's ManageWiki extension https://github.com/miraheze/ManageWiki - link = create_article_path(change["title"]) - embed["title"] = _("Changed wiki settings") - if change["logparams"].get("changes", ""): - embed.add_field("Setting", change["logparams"].get("changes")) + elif action == "managewiki/delete": - embed["title"] = _("Deleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) - link = create_article_path(change["title"]) + elif action == "managewiki/lock": - embed["title"] = _("Locked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) - link = create_article_path(change["title"]) + elif action == "managewiki/namespaces": - embed["title"] = _("Modified \"{namespace_name}\" namespace").format(namespace_name=change["logparams"].get("namespace", _("Unknown"))) - link = create_article_path(change["title"]) - embed.add_field(_('Wiki'), change["logparams"].get("wiki", _("Unknown"))) + elif action == "managewiki/namespaces-delete": - embed["title"] = _("Deleted a \"{namespace_name}\" namespace").format( - namespace_name=change["logparams"].get("namespace", _("Unknown"))) - link = create_article_path(change["title"]) - embed.add_field(_('Wiki'), change["logparams"].get("wiki", _("Unknown"))) + elif action == "managewiki/rights": - group_name = change["title"].split("/permissions/", 1)[1] - embed["title"] = _("Modified \"{usergroup_name}\" usergroup").format(usergroup_name=group_name) - link = create_article_path(change["title"]) + elif action == "managewiki/undelete": - embed["title"] = _("Undeleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) - link = create_article_path(change["title"]) + elif action == "managewiki/unlock": - embed["title"] = _("Unlocked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) - link = create_article_path(change["title"]) + elif action == "datadump/generate": embed["title"] = _("Generated {file} dump").format(file=change["logparams"]["filename"]) link = create_article_path(change["title"]) From 25f28c5f6ce184a21977ef7f30a62c0f5503936d Mon Sep 17 00:00:00 2001 From: Frisk Date: Fri, 7 May 2021 20:30:13 +0200 Subject: [PATCH 056/173] Make discussions work with formatters --- src/discussions.py | 29 ++++++++++++++++++++++++----- src/rcgcdw.py | 6 +++--- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/discussions.py b/src/discussions.py index 5e0d449..6d03ceb 100644 --- a/src/discussions.py +++ b/src/discussions.py @@ -20,11 +20,15 @@ from typing import Dict, Any from src.configloader import settings -from src.discussion_formatters import embed_formatter, compact_formatter +#from src.discussion_formatters import embed_formatter, compact_formatter from src.misc import datafile, prepare_paths -from src.discord.queue import messagequeue +from src.discord.queue import messagequeue, send_to_discord +from src.discord.message import DiscordMessageMetadata from src.session import session from src.exceptions import ArticleCommentError +from src.api.util import default_message +from src.api.context import Context +from src.api.hooks import formatter_hooks, pre_hooks, post_hooks # Create a custom logger @@ -38,8 +42,14 @@ if "discussion_id" not in datafile.data: storage = datafile +global client + +# setup a few things first so we don't have to do expensive nested get operations every time fetch_url = "{wiki}wikia.php?controller=DiscussionPost&method=getPosts&sortDirection=descending&sortKey=creation_date&limit={limit}&includeCounters=false".format(wiki=settings["fandom_discussions"]["wiki_url"], limit=settings["fandom_discussions"]["limit"]) domain = prepare_paths(settings["fandom_discussions"]["wiki_url"], dry=True) # Shutdown if the path for discussions is wrong +display_mode = settings.get("fandom_discussions", {}).get("appearance", {}).get("mode", "embed") +webhook_url =settings.get("fandom_discussions", {}).get("webhookURL", settings.get("webhookURL")) + def fetch_discussions(): messagequeue.resend_msgs() @@ -85,9 +95,12 @@ def fetch_discussions(): storage["discussion_id"] = int(post["id"]) datafile.save_datafile() + def parse_discussion_post(post, comment_pages): """Initial post recognition & handling""" + global client post_type = post["_embedded"]["thread"][0]["containerType"] + context = Context(display_mode, webhook_url, client) # Filter posts by forum if post_type == "FORUM" and settings["fandom_discussions"].get("show_forums", []): if not post["forumName"] in settings["fandom_discussions"]["show_forums"]: @@ -100,9 +113,15 @@ def parse_discussion_post(post, comment_pages): except KeyError: discussion_logger.error("Could not parse paths for article comment, here is the content of comment_pages: {}, ignoring...".format(comment_pages)) raise ArticleCommentError - formatter(post_type, post, comment_page) + event_type = f"discussions/{post_type.lower()}" + message = default_message(event_type, formatter_hooks)(context, post) + send_to_discord(message, meta=DiscordMessageMetadata("POST")) +def inject_client(client_obj): + global client + client = client_obj + def safe_request(url): """Function to assure safety of request, and do not crash the script on exceptions,""" try: @@ -121,6 +140,6 @@ def safe_request(url): return None return request -formatter = embed_formatter if settings["fandom_discussions"]["appearance"]["mode"] == "embed" else compact_formatter -schedule.every(settings["fandom_discussions"]["cooldown"]).seconds.do(fetch_discussions) \ No newline at end of file +schedule.every(settings["fandom_discussions"]["cooldown"]).seconds.do(fetch_discussions) + diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 7108d56..59d74a0 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -40,9 +40,6 @@ from src.wiki import Wiki _ = rcgcdw.gettext ngettext = rcgcdw.ngettext -if settings["fandom_discussions"]["enabled"]: - import src.discussions - TESTING = True if "--test" in sys.argv else False # debug mode, pipeline testing AUTO_SUPPRESSION_ENABLED = settings.get("auto_suppression", {"enabled": False}).get("enabled") @@ -306,6 +303,9 @@ load_extensions() # Log in and download wiki information wiki = Wiki(rc_processor, abuselog_processing) client = src.api.client.Client(formatter_hooks, wiki) +if settings["fandom_discussions"]["enabled"]: + import src.discussions + src.discussions.inject_client(client) # Not the prettiest but gets the job done try: if settings["wiki_bot_login"] and settings["wiki_bot_password"]: wiki.log_in() From 61d7e34575889071eadf48a6727ec3b2c22f5488 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 8 May 2021 00:47:45 +0200 Subject: [PATCH 057/173] Added datadump extension log support, moved translation strings --- extensions/base/__init__.py | 3 ++ extensions/base/datadump.py | 73 +++++++++++++++++++++++++++++++++++ extensions/base/managewiki.py | 9 ++++- extensions/base/mediawiki.py | 4 ++ src/discussions.py | 10 +++-- src/rc_formatters.py | 14 +------ src/rcgcdw.py | 3 -- 7 files changed, 96 insertions(+), 20 deletions(-) create mode 100644 extensions/base/datadump.py diff --git a/extensions/base/__init__.py b/extensions/base/__init__.py index 2feb663..6ad4903 100644 --- a/extensions/base/__init__.py +++ b/extensions/base/__init__.py @@ -15,3 +15,6 @@ import extensions.base.mediawiki import extensions.base.abusefilter +import extensions.base.managewiki +import extensions.base.cargo +import extensions.base.datadump \ No newline at end of file diff --git a/extensions/base/datadump.py b/extensions/base/datadump.py new file mode 100644 index 0000000..366a75e --- /dev/null +++ b/extensions/base/datadump.py @@ -0,0 +1,73 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + + +import logging +from src.discord.message import DiscordMessage +from src.api import formatter +from src.i18n import rc_formatters +from src.api.context import Context +from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url + +_ = rc_formatters.gettext +ngettext = rc_formatters.ngettext + + +# DataDumps - https://www.mediawiki.org/wiki/Extension:DataDump +# datadump/generate - Generating a dump of wiki + + +@formatter.embed(event="datadump/generate") +def embed_datadump_generate(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["title"] = _("Generated {file} dump").format(file=change["logparams"]["filename"]) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="mdatadump/generate") +def compact_datadump_generate(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) generated *{file}* dump{comment}").format( + author=author, author_url=author_url, file=change["logparams"]["filename"], + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# datadump/delete - Deleting a dump of a wiki + + +@formatter.embed(event="datadump/delete") +def embed_datadump_delete(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["title"] = _("Deleted {file} dump").format(file=change["logparams"]["filename"]) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="mdatadump/delete") +def compact_datadump_delete(ctx: Context, change: dict) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) deleted *{file}* dump{comment}").format( + author=author, author_url=author_url, file=change["logparams"]["filename"], + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/extensions/base/managewiki.py b/extensions/base/managewiki.py index f4f8524..85d8672 100644 --- a/extensions/base/managewiki.py +++ b/extensions/base/managewiki.py @@ -14,7 +14,6 @@ # along with RcGcDw. If not, see . import logging -import re from src.discord.message import DiscordMessage from src.api import formatter from src.i18n import rc_formatters @@ -34,6 +33,7 @@ def embed_managewiki_settings(ctx: Context, change: dict): embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Changed wiki settings") + embed["description"] = ctx.parsedcomment if change["logparams"].get("changes", ""): embed.add_field("Setting", sanitize_to_markdown(change["logparams"].get("changes"))) return embed @@ -53,6 +53,7 @@ def compact_managewiki_settings(ctx: Context, change: dict): def embed_managewiki_delete(ctx: Context, change: dict): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) + embed["description"] = ctx.parsedcomment embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Deleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) return embed @@ -77,6 +78,7 @@ def compact_managewiki_delete(ctx: Context, change: dict): def embed_managewiki_lock(ctx: Context, change: dict): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) + embed["description"] = ctx.parsedcomment embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Locked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) return embed @@ -101,6 +103,7 @@ def embed_managewiki_namespaces(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Modified \"{namespace_name}\" namespace").format( namespace_name=change["logparams"].get("namespace", _("Unknown"))) + embed["description"] = ctx.parsedcomment embed.add_field(_('Wiki'), change["logparams"].get("wiki", _("Unknown"))) return embed @@ -124,6 +127,7 @@ def embed_managewiki_namespaces_delete(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Deleted a \"{namespace_name}\" namespace").format( namespace_name=change["logparams"].get("namespace", _("Unknown"))) + embed["description"] = ctx.parsedcomment embed.add_field(_('Wiki'), change["logparams"].get("wiki", _("Unknown"))) return embed @@ -148,6 +152,7 @@ def embed_managewiki_rights(ctx: Context, change: dict): embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) group_name = change["title"].split("/permissions/", 1)[1] + embed["description"] = ctx.parsedcomment embed["title"] = _("Modified \"{usergroup_name}\" usergroup").format(usergroup_name=group_name) return embed @@ -170,6 +175,7 @@ def embed_managewiki_undelete(ctx: Context, change: dict): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["description"] = ctx.parsedcomment embed["title"] = _("Undeleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) return embed @@ -192,6 +198,7 @@ def embed_managewiki_unlock(ctx: Context, change: dict): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["description"] = ctx.parsedcomment embed["title"] = _("Unlocked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) return embed diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 47d22bd..e83d940 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -32,6 +32,10 @@ ngettext = rc_formatters.ngettext logger = logging.getLogger("extensions.base") +if 1 == 2: # additional translation strings in unreachable code + print(_("director"), _("bot"), _("editor"), _("directors"), _("sysop"), _("bureaucrat"), _("reviewer"), + _("autoreview"), _("autopatrol"), _("wiki_guardian")) + # Page edit - event edit, New - page creation diff --git a/src/discussions.py b/src/discussions.py index 6d03ceb..2e9f935 100644 --- a/src/discussions.py +++ b/src/discussions.py @@ -51,6 +51,12 @@ display_mode = settings.get("fandom_discussions", {}).get("appearance", {}).get( webhook_url =settings.get("fandom_discussions", {}).get("webhookURL", settings.get("webhookURL")) +def inject_client(client_obj): + """Function to avoid circular import issues""" + global client + client = client_obj + + def fetch_discussions(): messagequeue.resend_msgs() request = safe_request(fetch_url) @@ -118,10 +124,6 @@ def parse_discussion_post(post, comment_pages): send_to_discord(message, meta=DiscordMessageMetadata("POST")) -def inject_client(client_obj): - global client - client = client_obj - def safe_request(url): """Function to assure safety of request, and do not crash the script on exceptions,""" try: diff --git a/src/rc_formatters.py b/src/rc_formatters.py index 9c5559d..c39d855 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -261,15 +261,8 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes elif action == "managewiki/unlock": elif action == "datadump/generate": - content = _("[{author}]({author_url}) generated *{file}* dump{comment}").format( - author=author, author_url=author_url, file=change["logparams"]["filename"], - comment=parsed_comment - ) elif action == "datadump/delete": - content = _("[{author}]({author_url}) deleted *{file}* dump{comment}").format( - author=author, author_url=author_url, file=change["logparams"]["filename"], - comment=parsed_comment - ) + elif action == "pagetranslation/mark": link = create_article_path(change["title"]) if "?" in link: @@ -621,11 +614,8 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): elif action == "managewiki/unlock": elif action == "datadump/generate": - embed["title"] = _("Generated {file} dump").format(file=change["logparams"]["filename"]) - link = create_article_path(change["title"]) elif action == "datadump/delete": - embed["title"] = _("Deleted {file} dump").format(file=change["logparams"]["filename"]) - link = create_article_path(change["title"]) + elif action == "pagetranslation/mark": link = create_article_path(change["title"]) if "?" in link: diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 59d74a0..c3ee456 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -336,9 +336,6 @@ if settings["rc_enabled"]: else: logger.info("Script started! RC is disabled however, this means no recent changes will be sent :c") -if 1 == 2: # additional translation strings in unreachable code - print(_("director"), _("bot"), _("editor"), _("directors"), _("sysop"), _("bureaucrat"), _("reviewer"), - _("autoreview"), _("autopatrol"), _("wiki_guardian"), ngettext("second", "seconds", 1), ngettext("minute", "minutes", 1), ngettext("hour", "hours", 1), ngettext("day", "days", 1), ngettext("week", "weeks", 1), ngettext("month", "months",1), ngettext("year", "years", 1), ngettext("millennium", "millennia", 1), ngettext("decade", "decades", 1), ngettext("century", "centuries", 1)) # noinspection PyUnreachableCode From ddeaadb300dbae90dbf23de4e26a566d96eb4535 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 8 May 2021 01:21:38 +0200 Subject: [PATCH 058/173] Migrated spritesheet extension related logs --- extensions/base/sprite.py | 91 +++++++++++++++++++++++++++++++++++++++ src/rc_formatters.py | 18 +++----- 2 files changed, 97 insertions(+), 12 deletions(-) create mode 100644 extensions/base/sprite.py diff --git a/extensions/base/sprite.py b/extensions/base/sprite.py new file mode 100644 index 0000000..f1c7a80 --- /dev/null +++ b/extensions/base/sprite.py @@ -0,0 +1,91 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +import logging +from src.discord.message import DiscordMessage +from src.api import formatter +from src.i18n import rc_formatters +from src.api.context import Context +from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, \ + clean_link + +_ = rc_formatters.gettext +ngettext = rc_formatters.ngettext + + +# SpriteSheet - https://www.mediawiki.org/wiki/Extension:SpriteSheet +# sprite/sprite - Editing a sprite + + +@formatter.embed(event="sprite/sprite") +def embed_sprite_sprite(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Edited the sprite for {article}").format(article=sanitize_to_markdown(change["title"])) + return embed + + +@formatter.compact(event="sprite/sprite") +def compact_sprite_sprite(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) edited the sprite for [{article}]({article_url})").format(author=author, + author_url=author_url, + article=sanitize_to_markdown(change[ + "title"]), + article_url=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# sprite/sheet - Creating a sprite sheet + + +@formatter.embed(event="sprite/sheet") +def embed_sprite_sheet(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Created the sprite sheet for {article}").format(article=sanitize_to_markdown(change["title"])) + return embed + + +@formatter.compact(event="sprite/sheet") +def compact_sprite_sheet(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) created the sprite sheet for [{article}]({article_url})").format(author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# sprite/slice - Editing a slice + + +@formatter.embed(event="sprite/slice") +def embed_sprite_slice(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Edited the slice for {article}").format(article=sanitize_to_markdown(change["title"])) + return embed + +@formatter.compact(event="sprite/slice") +def compact_sprite_slice(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) edited the slice for [{article}]({article_url})").format(author=author, + author_url=author_url, + article=sanitize_to_markdown(change[ + "title"]), + article_url=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/src/rc_formatters.py b/src/rc_formatters.py index c39d855..7d2e0a5 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -220,14 +220,11 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes elif action == "contentmodel/new": elif action == "sprite/sprite": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) edited the sprite for [{article}]({article_url})").format(author=author, author_url=author_url, article=change["title"], article_url=link) + elif action == "sprite/sheet": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) created the sprite sheet for [{article}]({article_url})").format(author=author, author_url=author_url, article=change["title"], article_url=link) + elif action == "sprite/slice": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) edited the slice for [{article}]({article_url})").format(author=author, author_url=author_url, article=change["title"], article_url=link) + elif action == "cargo/createtable": elif action == "cargo/deletetable": @@ -573,14 +570,11 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): elif action == "contentmodel/new": elif action == "sprite/sprite": - link = create_article_path(change["title"]) - embed["title"] = _("Edited the sprite for {article}").format(article=change["title"]) + elif action == "sprite/sheet": - link = create_article_path(change["title"]) - embed["title"] = _("Created the sprite sheet for {article}").format(article=change["title"]) + elif action == "sprite/slice": - link = create_article_path(change["title"]) - embed["title"] = _("Edited the slice for {article}").format(article=change["title"]) + elif action == "cargo/createtable": elif action == "cargo/deletetable": From bad35f7e7ff83b1aee22ed52bb071e193a05c265 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 8 May 2021 01:36:21 +0200 Subject: [PATCH 059/173] Migrated renameuser --- extensions/base/mediawiki.py | 40 ++++++++++++++++++++++++++++++++++++ src/rc_formatters.py | 19 ++--------------- 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index e83d940..734b1a0 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -1165,3 +1165,43 @@ def compact_managetags_deactivate(ctx, change): comment=ctx.parsedcomment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) +# renameuser/renameuser - Renaming a user + + +@formatter.embed(event="renameuser/renameuser") +def embed_renameuser_renameuser(ctx, change): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + edits = change["logparams"]["edits"] + if edits > 0: + embed["title"] = ngettext("Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"", + "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"", edits).format( + old_name=sanitize_to_markdown(change["logparams"]["olduser"]), edits=edits, new_name=sanitize_to_markdown(change["logparams"]["newuser"])) + else: + embed["title"] = _("Renamed user \"{old_name}\" to \"{new_name}\"").format( + old_name=sanitize_to_markdown(change["logparams"]["olduser"]), new_name=sanitize_to_markdown(change["logparams"]["newuser"])) + embed["url"] = create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"])) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="renameuser/renameuser") +def compact_renameuser_renameuser(ctx, change): + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"]))) + edits = change["logparams"]["edits"] + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + if edits > 0: + content = ngettext( + "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to [{new_name}]({link}){comment}", + "[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to [{new_name}]({link}){comment}", + edits).format( + author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), edits=edits, + new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment + ) + else: + content = _("[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link}){comment}").format( + author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), + new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/src/rc_formatters.py b/src/rc_formatters.py index 7d2e0a5..54615b7 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -418,17 +418,7 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes old_lang=old_lang, new_lang=new_lang, comment=parsed_comment ) elif action == "renameuser/renameuser": - link = link_formatter(create_article_path("User:"+change["logparams"]["newuser"])) - edits = change["logparams"]["edits"] - if edits > 0: - content = ngettext("[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to [{new_name}]({link}){comment}", - "[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to [{new_name}]({link}){comment}", edits).format( - author=author, author_url=author_url, old_name=change["logparams"]["olduser"], edits=edits, new_name=change["logparams"]["newuser"], link=link, comment=parsed_comment - ) - else: - content = _("[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link}){comment}").format( - author=author, author_url=author_url, old_name=change["logparams"]["olduser"], new_name=change["logparams"]["newuser"], link=link, comment=parsed_comment - ) + elif action == "suppressed": else: @@ -685,12 +675,7 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): embed.add_field(_("Old language"), old_lang, inline=True) embed.add_field(_("New language"), new_lang, inline=True) elif action == "renameuser/renameuser": - edits = change["logparams"]["edits"] - if edits > 0: - embed["title"] = ngettext("Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"", "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"", edits).format(old_name=change["logparams"]["olduser"], edits=edits, new_name=change["logparams"]["newuser"]) - else: - embed["title"] = _("Renamed user \"{old_name}\" to \"{new_name}\"").format(old_name=change["logparams"]["olduser"], new_name=change["logparams"]["newuser"]) - link = create_article_path("User:"+change["logparams"]["newuser"]) + elif action == "suppressed": else: From f701922b425f18205f2c66cbfb84aeac917808da Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 8 May 2021 02:10:44 +0200 Subject: [PATCH 060/173] Partial migration of Translate extension logs --- extensions/base/translate.py | 222 +++++++++++++++++++++++++++++++++++ src/rc_formatters.py | 95 +++------------ 2 files changed, 238 insertions(+), 79 deletions(-) create mode 100644 extensions/base/translate.py diff --git a/extensions/base/translate.py b/extensions/base/translate.py new file mode 100644 index 0000000..30070b9 --- /dev/null +++ b/extensions/base/translate.py @@ -0,0 +1,222 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +import logging +from src.discord.message import DiscordMessage +from src.api import formatter +from src.i18n import rc_formatters +from src.api.context import Context +from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, \ + clean_link + +_ = rc_formatters.gettext +ngettext = rc_formatters.ngettext + +# I cried when I realized I have to migrate Translate extension logs, but this way I atone for my countless sins +# Translate - https://www.mediawiki.org/wiki/Extension:Translate +# pagetranslation/mark - Marking a page for translation + + +@formatter.embed(event="pagetranslation/mark") +def embed_pagetranslation_mark(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + link = create_article_path(sanitize_to_url(change["title"])) + if "?" in link: + embed["url"] = link + "&oldid={}".format(change["logparams"]["revision"]) + else: + embed["url"] = link + "?oldid={}".format(change["logparams"]["revision"]) + embed["title"] = _("Marked \"{article}\" for translation").format(article=sanitize_to_markdown(change["title"])) + return embed + + +@formatter.compact(event="pagetranslation/mark") +def compact_pagetranslation_mark(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + link = create_article_path(sanitize_to_url(change["title"])) + if "?" in link: + link = link + "&oldid={}".format(change["logparams"]["revision"]) + else: + link = link + "?oldid={}".format(change["logparams"]["revision"]) + link = clean_link(link) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) marked [{article}]({article_url}) for translation{comment}").format( + author=author, author_url=author_url, + article=change["title"], article_url=link, + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# pagetranslation/unmark - Removing a page from translation system + + +@formatter.embed(event="pagetranslation/unmark") +def embed_pagetranslation_unmark(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Removed \"{article}\" from the translation system").format(article=sanitize_to_markdown(change["title"])) + return embed + + +@formatter.compact(event="pagetranslation/unmark") +def compact_pagetranslation_unmark(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _( + "[{author}]({author_url}) removed [{article}]({article_url}) from the translation system{comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# pagetranslation/moveok - Completed moving translation page + + +@formatter.embed(event="pagetranslation/moveok") +def embed_pagetranslation_moveok(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["logparams"]["target"])) + embed["title"] = _("Completed moving translation pages from \"{article}\" to \"{target}\"").format( + article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) + return embed + + +@formatter.compact(event="pagetranslation/moveok") +def compact_pagetranslation_moveok(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"]))) + content = _( + "[{author}]({author_url}) completed moving translation pages from *{article}* to [{target}]({target_url}){comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"]), + target_url=link, comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# pagetranslation/movenok - Failed while moving translation page + + +@formatter.embed(event="pagetranslation/movenok") +def embed_pagetranslation_movenok(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Encountered a problem while moving \"{article}\" to \"{target}\"").format( + article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) + return embed + + +@formatter.compact(event="pagetranslation/movenok") +def compact_pagetranslation_movenok(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + target_url = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"]))) + content = _( + "[{author}]({author_url}) encountered a problem while moving [{article}]({article_url}) to [{target}]({target_url}){comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url, + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# pagetranslation/deletefnok - Failure in deletion of translatable page + + +@formatter.embed(event="pagetranslation/deletefnok") +def embed_pagetranslation_deletefnok(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Failed to delete \"{article}\" which belongs to translatable page \"{target}\"").format( + article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) + return embed + + +@formatter.compact(event="pagetranslation/deletefnok") +def compact_pagetranslation_deletefnok(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + target_url = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"]))) + content = _( + "[{author}]({author_url}) failed to delete [{article}]({article_url}) which belongs to translatable page [{target}]({target_url}){comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url, + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# pagetranslation/deletelok - Completion in deleting a page? + + +@formatter.embed(event="pagetranslation/deletelok") +def embed_pagetranslation_deletelok(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Completed deletion of translation page \"{article}\"").format( + article=sanitize_to_markdown(change["title"])) + return embed + + +@formatter.compact(event="pagetranslation/deletelok") +def compact_pagetranslation_deletelok(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _( + "[{author}]({author_url}) completed deletion of translation page [{article}]({article_url}){comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# pagetranslation/deletelnok - Failure in deletion of article belonging to a translation page + + +@formatter.embed(event="pagetranslation/deletelnok") +def embed_pagetranslation_deletelnok(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Failed to delete \"{article}\" which belongs to translation page \"{target}\"").format( + article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) + return embed + + +@formatter.compact(event="pagetranslation/deletelnok") +def compact_pagetranslation_deletelnok(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + target_url = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"]))) + content = _( + "[{author}]({author_url}) failed to delete [{article}]({article_url}) which belongs to translation page [{target}]({target_url}){comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url, + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + diff --git a/src/rc_formatters.py b/src/rc_formatters.py index 54615b7..1423dfa 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -261,72 +261,21 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes elif action == "datadump/delete": elif action == "pagetranslation/mark": - link = create_article_path(change["title"]) - if "?" in link: - link = link + "&oldid={}".format(change["logparams"]["revision"]) - else: - link = link + "?oldid={}".format(change["logparams"]["revision"]) - link = link_formatter(link) - content = _("[{author}]({author_url}) marked [{article}]({article_url}) for translation{comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - comment=parsed_comment - ) + elif action == "pagetranslation/unmark": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) removed [{article}]({article_url}) from the translation system{comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - comment=parsed_comment - ) + elif action == "pagetranslation/moveok": - link = link_formatter(create_article_path(change["logparams"]["target"])) - content = _("[{author}]({author_url}) completed moving translation pages from *{article}* to [{target}]({target_url}){comment}").format( - author=author, author_url=author_url, - article=change["title"], target=change["logparams"]["target"], target_url=link, - comment=parsed_comment - ) + elif action == "pagetranslation/movenok": - link = link_formatter(create_article_path(change["title"])) - target_url = link_formatter(create_article_path(change["logparams"]["target"])) - content = _("[{author}]({author_url}) encountered a problem while moving [{article}]({article_url}) to [{target}]({target_url}){comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - target=change["logparams"]["target"], target_url=target_url, - comment=parsed_comment - ) + elif action == "pagetranslation/deletefok": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) completed deletion of translatable page [{article}]({article_url}){comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - comment=parsed_comment - ) + elif action == "pagetranslation/deletefnok": - link = link_formatter(create_article_path(change["title"])) - target_url = link_formatter(create_article_path(change["logparams"]["target"])) - content = _("[{author}]({author_url}) failed to delete [{article}]({article_url}) which belongs to translatable page [{target}]({target_url}){comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - target=change["logparams"]["target"], target_url=target_url, - comment=parsed_comment - ) + elif action == "pagetranslation/deletelok": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) completed deletion of translation page [{article}]({article_url}){comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - comment=parsed_comment - ) + elif action == "pagetranslation/deletelnok": - link = link_formatter(create_article_path(change["title"])) - target_url = link_formatter(create_article_path(change["logparams"]["target"])) - content = _("[{author}]({author_url}) failed to delete [{article}]({article_url}) which belongs to translation page [{target}]({target_url}){comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - target=change["logparams"]["target"], target_url=target_url, - comment=parsed_comment - ) + elif action == "pagetranslation/encourage": link = link_formatter(create_article_path(change["title"])) content = _("[{author}]({author_url}) encouraged translation of [{article}]({article_url}){comment}").format( @@ -601,33 +550,21 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): elif action == "datadump/delete": elif action == "pagetranslation/mark": - link = create_article_path(change["title"]) - if "?" in link: - link = link + "&oldid={}".format(change["logparams"]["revision"]) - else: - link = link + "?oldid={}".format(change["logparams"]["revision"]) - embed["title"] = _("Marked \"{article}\" for translation").format(article=change["title"]) + elif action == "pagetranslation/unmark": - link = create_article_path(change["title"]) - embed["title"] = _("Removed \"{article}\" from the translation system").format(article=change["title"]) + elif action == "pagetranslation/moveok": - link = create_article_path(change["logparams"]["target"]) - embed["title"] = _("Completed moving translation pages from \"{article}\" to \"{target}\"").format(article=change["title"], target=change["logparams"]["target"]) + elif action == "pagetranslation/movenok": - link = create_article_path(change["title"]) - embed["title"] = _("Encountered a problem while moving \"{article}\" to \"{target}\"").format(article=change["title"], target=change["logparams"]["target"]) + elif action == "pagetranslation/deletefok": - link = create_article_path(change["title"]) - embed["title"] = _("Completed deletion of translatable page \"{article}\"").format(article=change["title"]) + elif action == "pagetranslation/deletefnok": - link = create_article_path(change["title"]) - embed["title"] = _("Failed to delete \"{article}\" which belongs to translatable page \"{target}\"").format(article=change["title"], target=change["logparams"]["target"]) + elif action == "pagetranslation/deletelok": - link = create_article_path(change["title"]) - embed["title"] = _("Completed deletion of translation page \"{article}\"").format(article=change["title"]) + elif action == "pagetranslation/deletelnok": - link = create_article_path(change["title"]) - embed["title"] = _("Failed to delete \"{article}\" which belongs to translation page \"{target}\"").format(article=change["title"], target=change["logparams"]["target"]) + elif action == "pagetranslation/encourage": link = create_article_path(change["title"]) embed["title"] = _("Encouraged translation of \"{article}\"").format(article=change["title"]) From 501607b60b568bdbfcbebb6194c3cebbe5a315b2 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 8 May 2021 11:11:47 +0200 Subject: [PATCH 061/173] Finished migrating translate extension log types --- extensions/base/translate.py | 275 +++++++++++++++++++++++++++++++++++ src/rc_formatters.py | 135 ++--------------- 2 files changed, 291 insertions(+), 119 deletions(-) diff --git a/extensions/base/translate.py b/extensions/base/translate.py index 30070b9..fc5919a 100644 --- a/extensions/base/translate.py +++ b/extensions/base/translate.py @@ -39,6 +39,7 @@ def embed_pagetranslation_mark(ctx: Context, change: dict): else: embed["url"] = link + "?oldid={}".format(change["logparams"]["revision"]) embed["title"] = _("Marked \"{article}\" for translation").format(article=sanitize_to_markdown(change["title"])) + embed["description"] = ctx.parsedcomment return embed @@ -68,6 +69,7 @@ def embed_pagetranslation_unmark(ctx: Context, change: dict): embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Removed \"{article}\" from the translation system").format(article=sanitize_to_markdown(change["title"])) + embed["description"] = ctx.parsedcomment return embed @@ -94,6 +96,7 @@ def embed_pagetranslation_moveok(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["logparams"]["target"])) embed["title"] = _("Completed moving translation pages from \"{article}\" to \"{target}\"").format( article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) + embed["description"] = ctx.parsedcomment return embed @@ -120,6 +123,7 @@ def embed_pagetranslation_movenok(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Encountered a problem while moving \"{article}\" to \"{target}\"").format( article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) + embed["description"] = ctx.parsedcomment return embed @@ -148,6 +152,7 @@ def embed_pagetranslation_deletefnok(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Failed to delete \"{article}\" which belongs to translatable page \"{target}\"").format( article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) + embed["description"] = ctx.parsedcomment return embed @@ -176,6 +181,7 @@ def embed_pagetranslation_deletelok(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Completed deletion of translation page \"{article}\"").format( article=sanitize_to_markdown(change["title"])) + embed["description"] = ctx.parsedcomment return embed @@ -202,6 +208,7 @@ def embed_pagetranslation_deletelnok(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Failed to delete \"{article}\" which belongs to translation page \"{target}\"").format( article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) + embed["description"] = ctx.parsedcomment return embed @@ -220,3 +227,271 @@ def compact_pagetranslation_deletelnok(ctx: Context, change: dict): ) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) +# pagetranslation/encourage - Encouraging to translate an article + + +@formatter.embed(event="pagetranslation/encourage") +def embed_pagetranslation_encourage(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Encouraged translation of \"{article}\"").format(article=sanitize_to_markdown(change["title"])) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="pagetranslation/encourage") +def compact_pagetranslation_encourage(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) encouraged translation of [{article}]({article_url}){comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# pagetranslation/discourage - Discouraging to translate an article + + +@formatter.embed(event="pagetranslation/discourage") +def embed_pagetranslation_discourage(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Discouraged translation of \"{article}\"").format(article=sanitize_to_markdown(change["title"])) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="pagetranslation/discourage") +def compact_pagetranslation_discourage(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) discouraged translation of [{article}]({article_url}){comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# pagetranslation/prioritylanguages - Changing the priority of translations? + + +@formatter.embed(event="pagetranslation/prioritylanguages") +def embed_pagetranslation_prioritylanguages(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + if "languages" in change["logparams"]: + languages = "`, `".join(change["logparams"]["languages"].split(",")) + if change["logparams"]["force"] == "on": + embed["title"] = _("Limited languages for \"{article}\" to `{languages}`").format(article=sanitize_to_markdown(change["title"]), + languages=languages) + else: + embed["title"] = _("Priority languages for \"{article}\" set to `{languages}`").format( + article=sanitize_to_markdown(change["title"]), languages=languages) + else: + embed["title"] = _("Removed priority languages from \"{article}\"").format(article=sanitize_to_markdown(change["title"])) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="pagetranslation/prioritylanguages") +def compact_pagetranslation_prioritylanguages(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + if "languages" in change["logparams"]: + languages = "`, `".join(change["logparams"]["languages"].split(",")) + if change["logparams"]["force"] == "on": + content = _( + "[{author}]({author_url}) limited languages for [{article}]({article_url}) to `{languages}`{comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + languages=languages, comment=parsed_comment + ) + else: + content = _( + "[{author}]({author_url}) set the priority languages for [{article}]({article_url}) to `{languages}`{comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + languages=languages, comment=parsed_comment + ) + else: + content = _( + "[{author}]({author_url}) removed priority languages from [{article}]({article_url}){comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# pagetranslation/associate - Adding an article to translation group + + +@formatter.embed(event="pagetranslation/associate") +def embed_pagetranslation_associate(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Added translatable page \"{article}\" to aggregate group \"{group}\"").format( + article=sanitize_to_markdown(change["title"]), group=change["logparams"]["aggregategroup"]) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="pagetranslation/associate") +def compact_pagetranslation_associate(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _( + "[{author}]({author_url}) added translatable page [{article}]({article_url}) to aggregate group \"{group}\"{comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + group=change["logparams"]["aggregategroup"], comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# pagetranslation/dissociate - Removing an article from translation group + + +@formatter.embed(event="pagetranslation/dissociate") +def embed_pagetranslation_dissociate(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Removed translatable page \"{article}\" from aggregate group \"{group}\"").format( + article=sanitize_to_markdown(change["title"]), group=change["logparams"]["aggregategroup"]) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="pagetranslation/dissociate") +def compact_pagetranslation_dissociate(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _( + "[{author}]({author_url}) removed translatable page [{article}]({article_url}) from aggregate group \"{group}\"{comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + group=change["logparams"]["aggregategroup"], comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# translationreview/message - Reviewing translation + + +@formatter.embed(event="translationreview/message") +def embed_translationreview_message(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + link = create_article_path(sanitize_to_url(change["title"])) + if "?" in link: + embed["url"] = link + "&oldid={}".format(change["logparams"]["revision"]) + else: + embed["url"] = link + "?oldid={}".format(change["logparams"]["revision"]) + embed["title"] = _("Reviewed translation \"{article}\"").format(article=sanitize_to_markdown(change["title"])) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="translationreview/message") +def compact_translationreview_message(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = create_article_path(sanitize_to_url(change["title"])) + if "?" in link: + link = link + "&oldid={}".format(change["logparams"]["revision"]) + else: + link = link + "?oldid={}".format(change["logparams"]["revision"]) + link = clean_link(link) + content = _("[{author}]({author_url}) reviewed translation [{article}]({article_url}){comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# translationreview/group - Changing of state for group translation? + + +@formatter.embed(event="translationreview/group") +def embed_translationreview_group(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Changed the state of `{language}` translations of \"{article}\"").format( + language=change["logparams"]["language"], article=sanitize_to_markdown(change["title"])) + if "old-state" in change["logparams"]: + embed.add_field(_("Old state"), change["logparams"]["old-state"], inline=True) + embed.add_field(_("New state"), change["logparams"]["new-state"], inline=True) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="translationreview/group") +def compact_translationreview_group(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + if "old-state" in change["logparams"]: + content = _( + "[{author}]({author_url}) changed the state of `{language}` translations of [{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}").format( + author=author, author_url=author_url, language=change["logparams"]["language"], + article=sanitize_to_markdown(change["logparams"]["group-label"]), article_url=link, + old_state=change["logparams"]["old-state"], new_state=change["logparams"]["new-state"], + comment=parsed_comment + ) + else: + content = _( + "[{author}]({author_url}) changed the state of `{language}` translations of [{article}]({article_url}) to `{new_state}`{comment}").format( + author=author, author_url=author_url, language=change["logparams"]["language"], + article=sanitize_to_markdown(change["logparams"]["group-label"]), article_url=link, + new_state=change["logparams"]["new-state"], comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + +# pagelang/pagelang - Changing the language of a page + + +def get_languages(change): + old_lang = "`{}`".format(change["logparams"]["oldlanguage"]) + if change["logparams"]["oldlanguage"][-5:] == "[def]": + old_lang = "`{}` {}".format(change["logparams"]["oldlanguage"][:-5], _("(default)")) + new_lang = "`{}`".format(change["logparams"]["newlanguage"]) + if change["logparams"]["newlanguage"][-5:] == "[def]": + new_lang = "`{}` {}".format(change["logparams"]["oldlanguage"][:-5], _("(default)")) + return old_lang, new_lang + +@formatter.embed(event="pagelang/pagelang") +def embed_pagelang_pagelang(ctx: Context, change: dict): + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + old_lang, new_lang = get_languages(change) + embed["title"] = _("Changed the language of \"{article}\"").format(article=sanitize_to_markdown(change["title"])) + embed.add_field(_("Old language"), old_lang, inline=True) + embed.add_field(_("New language"), new_lang, inline=True) + embed["description"] = ctx.parsedcomment + return embed + + +@formatter.compact(event="pagelang/pagelang") +def compact_pagelang_pagelang(ctx: Context, change: dict): + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + old_lang, new_lang = get_languages(change) + content = _( + "[{author}]({author_url}) changed the language of [{article}]({article_url}) from {old_lang} to {new_lang}{comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + old_lang=old_lang, new_lang=new_lang, comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/src/rc_formatters.py b/src/rc_formatters.py index 1423dfa..5265138 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -277,95 +277,21 @@ def compact_formatter(action, change, parsed_comment, categories, recent_changes elif action == "pagetranslation/deletelnok": elif action == "pagetranslation/encourage": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) encouraged translation of [{article}]({article_url}){comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - comment=parsed_comment - ) + elif action == "pagetranslation/discourage": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) discouraged translation of [{article}]({article_url}){comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - comment=parsed_comment - ) + elif action == "pagetranslation/prioritylanguages": - link = link_formatter(create_article_path(change["title"])) - if "languages" in change["logparams"]: - languages = "`, `".join(change["logparams"]["languages"].split(",")) - if change["logparams"]["force"] == "on": - content = _("[{author}]({author_url}) limited languages for [{article}]({article_url}) to `{languages}`{comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - languages=languages, comment=parsed_comment - ) - else: - content = _("[{author}]({author_url}) set the priority languages for [{article}]({article_url}) to `{languages}`{comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - languages=languages, comment=parsed_comment - ) - else: - content = _("[{author}]({author_url}) removed priority languages from [{article}]({article_url}){comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - comment=parsed_comment - ) + elif action == "pagetranslation/associate": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) added translatable page [{article}]({article_url}) to aggregate group \"{group}\"{comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - group=change["logparams"]["aggregategroup"], comment=parsed_comment - ) + elif action == "pagetranslation/dissociate": - link = link_formatter(create_article_path(change["title"])) - content = _("[{author}]({author_url}) removed translatable page [{article}]({article_url}) from aggregate group \"{group}\"{comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - group=change["logparams"]["aggregategroup"], comment=parsed_comment - ) + elif action == "translationreview/message": - link = create_article_path(change["title"]) - if "?" in link: - link = link + "&oldid={}".format(change["logparams"]["revision"]) - else: - link = link + "?oldid={}".format(change["logparams"]["revision"]) - link = link_formatter(link) - content = _("[{author}]({author_url}) reviewed translation [{article}]({article_url}){comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - comment=parsed_comment - ) + elif action == "translationreview/group": - link = link_formatter(create_article_path(change["title"])) - if "old-state" in change["logparams"]: - content = _("[{author}]({author_url}) changed the state of `{language}` translations of [{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}").format( - author=author, author_url=author_url, language=change["logparams"]["language"], - article=change["logparams"]["group-label"], article_url=link, - old_state=change["logparams"]["old-state"], new_state=change["logparams"]["new-state"], - comment=parsed_comment - ) - else: - content = _("[{author}]({author_url}) changed the state of `{language}` translations of [{article}]({article_url}) to `{new_state}`{comment}").format( - author=author, author_url=author_url, language=change["logparams"]["language"], - article=change["logparams"]["group-label"], article_url=link, - new_state=change["logparams"]["new-state"], comment=parsed_comment - ) + elif action == "pagelang/pagelang": - link = link_formatter(create_article_path(change["title"])) - old_lang = "`{}`".format(change["logparams"]["oldlanguage"]) - if change["logparams"]["oldlanguage"][-5:] == "[def]": - old_lang = "`{}` {}".format(change["logparams"]["oldlanguage"][:-5], _("(default)")) - new_lang = "`{}`".format(change["logparams"]["newlanguage"]) - if change["logparams"]["newlanguage"][-5:] == "[def]": - new_lang = "`{}` {}".format(change["logparams"]["oldlanguage"][:-5], _("(default)")) - content = _("[{author}]({author_url}) changed the language of [{article}]({article_url}) from {old_lang} to {new_lang}{comment}").format( - author=author, author_url=author_url, - article=change["title"], article_url=link, - old_lang=old_lang, new_lang=new_lang, comment=parsed_comment - ) + elif action == "renameuser/renameuser": elif action == "suppressed": @@ -566,51 +492,22 @@ def embed_formatter(action, change, parsed_comment, categories, recent_changes): elif action == "pagetranslation/deletelnok": elif action == "pagetranslation/encourage": - link = create_article_path(change["title"]) - embed["title"] = _("Encouraged translation of \"{article}\"").format(article=change["title"]) + elif action == "pagetranslation/discourage": - link = create_article_path(change["title"]) - embed["title"] = _("Discouraged translation of \"{article}\"").format(article=change["title"]) + elif action == "pagetranslation/prioritylanguages": - link = create_article_path(change["title"]) - if "languages" in change["logparams"]: - languages = "`, `".join(change["logparams"]["languages"].split(",")) - if change["logparams"]["force"] == "on": - embed["title"] = _("Limited languages for \"{article}\" to `{languages}`").format(article=change["title"], languages=languages) - else: - embed["title"] = _("Priority languages for \"{article}\" set to `{languages}`").format(article=change["title"], languages=languages) - else: - embed["title"] = _("Removed priority languages from \"{article}\"").format(article=change["title"]) + elif action == "pagetranslation/associate": - link = create_article_path(change["title"]) - embed["title"] = _("Added translatable page \"{article}\" to aggregate group \"{group}\"").format(article=change["title"], group=change["logparams"]["aggregategroup"]) + elif action == "pagetranslation/dissociate": - link = create_article_path(change["title"]) - embed["title"] = _("Removed translatable page \"{article}\" from aggregate group \"{group}\"").format(article=change["title"], group=change["logparams"]["aggregategroup"]) + elif action == "translationreview/message": - link = create_article_path(change["title"]) - if "?" in link: - link = link + "&oldid={}".format(change["logparams"]["revision"]) - else: - link = link + "?oldid={}".format(change["logparams"]["revision"]) - embed["title"] = _("Reviewed translation \"{article}\"").format(article=change["title"]) + elif action == "translationreview/group": - link = create_article_path(change["title"]) - embed["title"] = _("Changed the state of `{language}` translations of \"{article}\"").format(language=change["logparams"]["language"], article=change["title"]) - if "old-state" in change["logparams"]: - embed.add_field(_("Old state"), change["logparams"]["old-state"], inline=True) - embed.add_field(_("New state"), change["logparams"]["new-state"], inline=True) + elif action == "pagelang/pagelang": link = create_article_path(change["title"]) - old_lang = "`{}`".format(change["logparams"]["oldlanguage"]) - if change["logparams"]["oldlanguage"][-5:] == "[def]": - old_lang = "`{}` {}".format(change["logparams"]["oldlanguage"][:-5], _("(default)")) - new_lang = "`{}`".format(change["logparams"]["newlanguage"]) - if change["logparams"]["newlanguage"][-5:] == "[def]": - new_lang = "`{}` {}".format(change["logparams"]["oldlanguage"][:-5], _("(default)")) - embed["title"] = _("Changed the language of \"{article}\"").format(article=change["title"]) - embed.add_field(_("Old language"), old_lang, inline=True) - embed.add_field(_("New language"), new_lang, inline=True) + elif action == "renameuser/renameuser": elif action == "suppressed": From 79f2f36e2374e116688f6364d01cd22aec798253 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 8 May 2021 11:20:47 +0200 Subject: [PATCH 062/173] Added CurseProfile proxy function in the client --- src/api/client.py | 11 ++++++++++- src/wiki.py | 12 +++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/api/client.py b/src/api/client.py index d290349..f9b7645 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -18,7 +18,7 @@ from __future__ import annotations import src.misc from typing import Union from collections import OrderedDict -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: from src.wiki import Wiki @@ -49,6 +49,15 @@ class Client: link_parser.feed(summary) return link_parser.new_string + def pull_curseprofile_comment(self, comment_id) -> Optional[str]: + """Pulls a CurseProfile comment for current wiki set in the settings and with comment_id passed as an argument. + + Returns: + String if comment was possible to be fetched + None if not + """ + return self.__recent_changes.pull_comment(comment_id) + def make_api_request(self, params: Union[str, OrderedDict], *json_path: str, timeout: int = 10, allow_redirects: bool = False): """Method to GET request data from the wiki's API with error handling including recognition of MediaWiki errors. diff --git a/src/wiki.py b/src/wiki.py index 185e9b6..322778a 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -427,15 +427,13 @@ class Wiki(object): def pull_comment(self, comment_id): try: - comment = self.handle_mw_errors(self._safe_request( - "{wiki}?action=comment&do=getRaw&comment_id={comment}&format=json".format(wiki=WIKI_API_PATH, - comment=comment_id)).json())[ - "text"] + comment = self.api_request("?action=comment&do=getRaw&comment_id={comment}&format=json".format(wiki=WIKI_API_PATH, + comment=comment_id), "text") logger.debug("Got the following comment from the API: {}".format(comment)) - except MWError: + except (ServerError, MediaWikiError): pass - except (TypeError, AttributeError): - logger.exception("Could not resolve the comment text.") + except (BadRequest, ClientError): + logger.exception("Some kind of issue while creating a request (most likely client error).") except KeyError: logger.exception("CurseProfile extension API did not respond with a valid comment content.") else: From 86439a6570c7714989d1516711adc79e13f75de6 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 8 May 2021 12:32:26 +0200 Subject: [PATCH 063/173] Moved setting description to embed_helper with optional setting to disable any of the automatic settings --- extensions/base/datadump.py | 2 - extensions/base/managewiki.py | 8 --- extensions/base/mediawiki.py | 33 +++------- extensions/base/translate.py | 15 ----- src/api/util.py | 111 +++++++++++++++++++--------------- 5 files changed, 72 insertions(+), 97 deletions(-) diff --git a/extensions/base/datadump.py b/extensions/base/datadump.py index 366a75e..239e529 100644 --- a/extensions/base/datadump.py +++ b/extensions/base/datadump.py @@ -35,7 +35,6 @@ def embed_datadump_generate(ctx: Context, change: dict) -> DiscordMessage: embed_helper(ctx, embed, change) embed["title"] = _("Generated {file} dump").format(file=change["logparams"]["filename"]) embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["description"] = ctx.parsedcomment return embed @@ -58,7 +57,6 @@ def embed_datadump_delete(ctx: Context, change: dict) -> DiscordMessage: embed_helper(ctx, embed, change) embed["title"] = _("Deleted {file} dump").format(file=change["logparams"]["filename"]) embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["description"] = ctx.parsedcomment return embed diff --git a/extensions/base/managewiki.py b/extensions/base/managewiki.py index 85d8672..ce29324 100644 --- a/extensions/base/managewiki.py +++ b/extensions/base/managewiki.py @@ -33,7 +33,6 @@ def embed_managewiki_settings(ctx: Context, change: dict): embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Changed wiki settings") - embed["description"] = ctx.parsedcomment if change["logparams"].get("changes", ""): embed.add_field("Setting", sanitize_to_markdown(change["logparams"].get("changes"))) return embed @@ -53,7 +52,6 @@ def compact_managewiki_settings(ctx: Context, change: dict): def embed_managewiki_delete(ctx: Context, change: dict): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) - embed["description"] = ctx.parsedcomment embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Deleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) return embed @@ -78,7 +76,6 @@ def compact_managewiki_delete(ctx: Context, change: dict): def embed_managewiki_lock(ctx: Context, change: dict): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) - embed["description"] = ctx.parsedcomment embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Locked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) return embed @@ -103,7 +100,6 @@ def embed_managewiki_namespaces(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Modified \"{namespace_name}\" namespace").format( namespace_name=change["logparams"].get("namespace", _("Unknown"))) - embed["description"] = ctx.parsedcomment embed.add_field(_('Wiki'), change["logparams"].get("wiki", _("Unknown"))) return embed @@ -127,7 +123,6 @@ def embed_managewiki_namespaces_delete(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Deleted a \"{namespace_name}\" namespace").format( namespace_name=change["logparams"].get("namespace", _("Unknown"))) - embed["description"] = ctx.parsedcomment embed.add_field(_('Wiki'), change["logparams"].get("wiki", _("Unknown"))) return embed @@ -152,7 +147,6 @@ def embed_managewiki_rights(ctx: Context, change: dict): embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) group_name = change["title"].split("/permissions/", 1)[1] - embed["description"] = ctx.parsedcomment embed["title"] = _("Modified \"{usergroup_name}\" usergroup").format(usergroup_name=group_name) return embed @@ -175,7 +169,6 @@ def embed_managewiki_undelete(ctx: Context, change: dict): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["description"] = ctx.parsedcomment embed["title"] = _("Undeleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) return embed @@ -198,7 +191,6 @@ def embed_managewiki_unlock(ctx: Context, change: dict): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["description"] = ctx.parsedcomment embed["title"] = _("Unlocked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown"))) return embed diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 734b1a0..b0e8a42 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -86,7 +86,6 @@ def embed_edit(ctx: Context, change: dict) -> DiscordMessage: parse_mediawiki_changes(ctx, changed_content, embed) else: logger.warning("Unable to download data on the edit content!") - embed["description"] = ctx.parsedcomment return embed @@ -240,7 +239,6 @@ def embed_delete_delete(ctx, change) -> DiscordMessage: embed_helper(ctx, embed, change) embed['url'] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Deleted page {article}").format(article=change["title"]) - embed["description"] = ctx.parsedcomment return embed @@ -264,7 +262,6 @@ def embed_delete_delete_redir(ctx, change) -> DiscordMessage: embed_helper(ctx, embed, change) embed['url'] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Deleted redirect {article} by overwriting").format(article=sanitize_to_markdown(change["title"])) - embed["description"] = ctx.parsedcomment return embed @@ -287,7 +284,6 @@ def embed_delete_restore(ctx, change) -> DiscordMessage: embed_helper(ctx, embed, change) embed['url'] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Restored {article}").format(article=sanitize_to_markdown(change["title"])) - embed["description"] = ctx.parsedcomment return embed @@ -312,7 +308,6 @@ def embed_delete_event(ctx, change) -> DiscordMessage: embed_helper(ctx, embed, change) embed['url'] = create_article_path("Special:RecentChanges") embed["title"] = _("Changed visibility of log events") - embed["description"] = ctx.parsedcomment return embed @@ -336,7 +331,6 @@ def embed_delete_revision(ctx, change) -> DiscordMessage: embed["title"] = ngettext("Changed visibility of revision on page {article} ", "Changed visibility of {amount} revisions on page {article} ", amount).format( article=change["title"], amount=amount) - embed["description"] = ctx.parsedcomment return embed @@ -359,7 +353,7 @@ def compact_delete_revision(ctx, change) -> DiscordMessage: @formatter.embed(event="move/move", mode="embed") def embed_move_move(ctx, change) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) + embed_helper(ctx, embed, change, set_desc=False) embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title'])) embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment, supress=_("No redirect has been made") if "suppressredirect" in change[ @@ -390,7 +384,7 @@ def compact_move_move(ctx, change) -> DiscordMessage: @formatter.embed(event="move/move_redir", mode="embed") def embed_move_move_redir(ctx, change) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) + embed_helper(ctx, embed, change, set_desc=False) embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title'])) embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment, supress=_("No redirect has been made") if "suppressredirect" in change[ @@ -426,7 +420,6 @@ def embed_protect_move_prot(ctx, change): embed["title"] = _("Moved protection settings from {redirect}{article} to {title}").format( redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]), title=sanitize_to_markdown(change["title"])) - embed["description"] = ctx.parsedcomment return embed @@ -448,7 +441,7 @@ def compact_protect_move_prot(ctx, change): @formatter.embed(event="protect/protect", mode="embed") def embed_protect_protect(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) + embed_helper(ctx, embed, change, set_desc=False) embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Protected {target}").format(target=sanitize_to_markdown(change["title"])) embed["description"] = "{settings}{cascade} | {reason}".format(settings=sanitize_to_markdown(change["logparams"].get("description", "")), @@ -476,7 +469,7 @@ def compact_protect_protect(ctx, change): @formatter.embed(event="protect/modify", mode="embed") def embed_protect_modify(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) + embed_helper(ctx, embed, change, set_desc=False) embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Changed protection level for {article}").format(article=sanitize_to_markdown(change["title"])) embed["description"] = "{settings}{cascade} | {reason}".format(settings=sanitize_to_markdown(change["logparams"].get("description", "")), @@ -508,7 +501,6 @@ def embed_protect_unprotect(ctx, change): embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Removed protection from {article}").format(article=change["title"]) - embed["description"] = ctx.parsedcomment return embed @@ -583,7 +575,6 @@ def embed_block_block(ctx, change): if block_flags: embed.add_field(_("Block flags"), ", ".join(block_flags)) # TODO Translate flags into MW messages, this requires making additional request in init_request since we want to get all messages with prefix (amprefix) block-log-flags- and that parameter is exclusive with ammessages embed["title"] = _("Blocked {blocked_user} {time}").format(blocked_user=user, time=block_expiry(change)) - embed["description"] = ctx.parsedcomment return embed @@ -642,7 +633,6 @@ def embed_block_reblock(ctx, change): embed["url"] = create_article_path(sanitize_to_url(change["title"])) user = change["title"].split(':', 1)[1] embed["title"] = _("Changed block settings for {blocked_user}").format(blocked_user=sanitize_to_markdown(user)) - embed["description"] = ctx.parsedcomment return embed @@ -665,7 +655,6 @@ def embed_block_unblock(ctx, change): embed["url"] = create_article_path(sanitize_to_url(change["title"])) user = change["title"].split(':', 1)[1] embed["title"] = _("Unblocked {blocked_user}").format(blocked_user=user) - embed["description"] = ctx.parsedcomment return embed @@ -768,7 +757,7 @@ def get_changed_groups(change: dict, separator: str): @formatter.embed(event="rights/rights", mode="embed") def embed_rights_rights(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) + embed_helper(ctx, embed, change, set_desc=False) embed["url"] = create_article_path(sanitize_to_url("User:{}".format(change["title"].split(":")[1]))) if ctx.event == "rights/rights": embed["title"] = _("Changed group membership for {target}").format(target=change["title"].split(":")[1]) @@ -813,7 +802,6 @@ def embed_merge_merge(ctx, change): embed["title"] = _("Merged revision histories of {article} into {dest}").format(article=sanitize_to_markdown(change["title"]), dest=sanitize_to_markdown(change["logparams"][ "dest_title"])) - embed["description"] = ctx.parsedcomment return embed @@ -927,7 +915,7 @@ def compact_newusers_newusers(ctx, change): @formatter.embed(event="interwiki/iw_add", mode="embed") def embed_interwiki_iw_add(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) + embed_helper(ctx, embed, change, set_desc=False) embed["url"] = create_article_path("Special:Interwiki") embed["title"] = _("Added an entry to the interwiki table") embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, @@ -952,7 +940,7 @@ def compact_interwiki_iw_add(ctx, change): @formatter.embed(event="interwiki/iw_edit", mode="embed") def embed_interwiki_iw_edit(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) + embed_helper(ctx, embed, change, set_desc=False) embed["url"] = create_article_path("Special:Interwiki") embed["title"] = _("Edited an entry in interwiki table") embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, @@ -979,7 +967,7 @@ def compact_interwiki_iw_edit(ctx, change): @formatter.embed(event="interwiki/iw_delete", mode="embed") def embed_interwiki_iw_delete(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) + embed_helper(ctx, embed, change, set_desc=False) embed["url"] = create_article_path("Special:Interwiki") embed["title"] = _("Deleted an entry in interwiki table") embed["description"] = _("Prefix: {prefix} | {desc}").format(desc=ctx.parsedcomment, prefix=change["logparams"]['0']) @@ -1004,7 +992,7 @@ def compact_interwiki_iw_delete(ctx, change): @formatter.embed(event="contentmodel/change", mode="embed") def embed_contentmodel_change(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) + embed_helper(ctx, embed, change, set_desc=False) embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Changed the content model of the page {article}").format(article=sanitize_to_markdown(change["title"])) embed["description"] = _("Model changed from {old} to {new}: {reason}").format(old=change["logparams"]["oldmodel"], @@ -1031,7 +1019,7 @@ def compact_contentmodel_change(ctx, change): @formatter.embed(event="contentmodel/new", mode="embed") def embed_contentmodel_new(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) + embed_helper(ctx, embed, change, set_desc=False) embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Created the page {article} using a non-default content model").format(article=sanitize_to_markdown(change["title"])) embed["description"] = _("Created with model {new}: {reason}").format(new=change["logparams"]["newmodel"], reason=ctx.parsedcomment) @@ -1181,7 +1169,6 @@ def embed_renameuser_renameuser(ctx, change): embed["title"] = _("Renamed user \"{old_name}\" to \"{new_name}\"").format( old_name=sanitize_to_markdown(change["logparams"]["olduser"]), new_name=sanitize_to_markdown(change["logparams"]["newuser"])) embed["url"] = create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"])) - embed["description"] = ctx.parsedcomment return embed diff --git a/extensions/base/translate.py b/extensions/base/translate.py index fc5919a..13e96fd 100644 --- a/extensions/base/translate.py +++ b/extensions/base/translate.py @@ -39,7 +39,6 @@ def embed_pagetranslation_mark(ctx: Context, change: dict): else: embed["url"] = link + "?oldid={}".format(change["logparams"]["revision"]) embed["title"] = _("Marked \"{article}\" for translation").format(article=sanitize_to_markdown(change["title"])) - embed["description"] = ctx.parsedcomment return embed @@ -69,7 +68,6 @@ def embed_pagetranslation_unmark(ctx: Context, change: dict): embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Removed \"{article}\" from the translation system").format(article=sanitize_to_markdown(change["title"])) - embed["description"] = ctx.parsedcomment return embed @@ -96,7 +94,6 @@ def embed_pagetranslation_moveok(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["logparams"]["target"])) embed["title"] = _("Completed moving translation pages from \"{article}\" to \"{target}\"").format( article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) - embed["description"] = ctx.parsedcomment return embed @@ -123,7 +120,6 @@ def embed_pagetranslation_movenok(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Encountered a problem while moving \"{article}\" to \"{target}\"").format( article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) - embed["description"] = ctx.parsedcomment return embed @@ -152,7 +148,6 @@ def embed_pagetranslation_deletefnok(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Failed to delete \"{article}\" which belongs to translatable page \"{target}\"").format( article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) - embed["description"] = ctx.parsedcomment return embed @@ -181,7 +176,6 @@ def embed_pagetranslation_deletelok(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Completed deletion of translation page \"{article}\"").format( article=sanitize_to_markdown(change["title"])) - embed["description"] = ctx.parsedcomment return embed @@ -208,7 +202,6 @@ def embed_pagetranslation_deletelnok(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Failed to delete \"{article}\" which belongs to translation page \"{target}\"").format( article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"])) - embed["description"] = ctx.parsedcomment return embed @@ -236,7 +229,6 @@ def embed_pagetranslation_encourage(ctx: Context, change: dict): embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Encouraged translation of \"{article}\"").format(article=sanitize_to_markdown(change["title"])) - embed["description"] = ctx.parsedcomment return embed @@ -261,7 +253,6 @@ def embed_pagetranslation_discourage(ctx: Context, change: dict): embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Discouraged translation of \"{article}\"").format(article=sanitize_to_markdown(change["title"])) - embed["description"] = ctx.parsedcomment return embed @@ -295,7 +286,6 @@ def embed_pagetranslation_prioritylanguages(ctx: Context, change: dict): article=sanitize_to_markdown(change["title"]), languages=languages) else: embed["title"] = _("Removed priority languages from \"{article}\"").format(article=sanitize_to_markdown(change["title"])) - embed["description"] = ctx.parsedcomment return embed @@ -340,7 +330,6 @@ def embed_pagetranslation_associate(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Added translatable page \"{article}\" to aggregate group \"{group}\"").format( article=sanitize_to_markdown(change["title"]), group=change["logparams"]["aggregategroup"]) - embed["description"] = ctx.parsedcomment return embed @@ -367,7 +356,6 @@ def embed_pagetranslation_dissociate(ctx: Context, change: dict): embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Removed translatable page \"{article}\" from aggregate group \"{group}\"").format( article=sanitize_to_markdown(change["title"]), group=change["logparams"]["aggregategroup"]) - embed["description"] = ctx.parsedcomment return embed @@ -397,7 +385,6 @@ def embed_translationreview_message(ctx: Context, change: dict): else: embed["url"] = link + "?oldid={}".format(change["logparams"]["revision"]) embed["title"] = _("Reviewed translation \"{article}\"").format(article=sanitize_to_markdown(change["title"])) - embed["description"] = ctx.parsedcomment return embed @@ -431,7 +418,6 @@ def embed_translationreview_group(ctx: Context, change: dict): if "old-state" in change["logparams"]: embed.add_field(_("Old state"), change["logparams"]["old-state"], inline=True) embed.add_field(_("New state"), change["logparams"]["new-state"], inline=True) - embed["description"] = ctx.parsedcomment return embed @@ -478,7 +464,6 @@ def embed_pagelang_pagelang(ctx: Context, change: dict): embed["title"] = _("Changed the language of \"{article}\"").format(article=sanitize_to_markdown(change["title"])) embed.add_field(_("Old language"), old_lang, inline=True) embed.add_field(_("New language"), new_lang, inline=True) - embed["description"] = ctx.parsedcomment return embed diff --git a/src/api/util.py b/src/api/util.py index 8eac730..7cd20a4 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -89,59 +89,72 @@ def compact_author(ctx: Context, change: dict) -> (Optional[str], Optional[str]) return author, author_url -def embed_helper(ctx: Context, message: DiscordMessage, change: dict) -> None: +def embed_helper(ctx: Context, message: DiscordMessage, change: dict, set_user=True, set_edit_meta=True, set_desc=True) -> None: """Helps in preparing common edit/log fields for events. Passed arguments automatically become saturated with needed data. + All automatic setups can be disabled by setting relevant variable to False - Currently handles: setting usernames""" - # TODO Repurpose it so change['user'] stays the same - if "anon" in change: - author_url = create_article_path("Special:Contributions/{user}".format( - user=change["user"].replace(" ", "_"))) # Replace here needed in case of #75 - ip_mapper = ctx.client.get_ipmapper() - logger.debug("current user: {} with cache of IPs: {}".format(change["user"], ip_mapper.keys())) - if change["user"] not in list(ip_mapper.keys()): - contibs = ctx.client.make_api_request( - "{wiki}?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format( - wiki=ctx.client.WIKI_API_PATH, user=change["user"], timestamp=change["timestamp"]), "query", - "usercontribs") - if contibs is None: - logger.warning( - "WARNING: Something went wrong when checking amount of contributions for given IP address") - if settings.get("hide_ips", False): - change["user"] = _("Unregistered user") - change["user"] = change["user"] + "(?)" + Currently handles: + setting usernames (handles according to settings, specific options set in the settings: hide_ips) + adding category fields (if there are any specified categories in the edit) + adding tags (if the log is tagged anyhow) + setting default description (to ctx.parsedcomment)""" + if set_user: + # TODO Repurpose it so change['user'] stays the same + if "anon" in change: + author_url = create_article_path("Special:Contributions/{user}".format( + user=change["user"].replace(" ", "_"))) # Replace here needed in case of #75 + ip_mapper = ctx.client.get_ipmapper() + logger.debug("current user: {} with cache of IPs: {}".format(change["user"], ip_mapper.keys())) + if change["user"] not in list(ip_mapper.keys()): + contibs = ctx.client.make_api_request( + "{wiki}?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format( + wiki=ctx.client.WIKI_API_PATH, user=change["user"], timestamp=change["timestamp"]), "query", + "usercontribs") + if contibs is None: + logger.warning( + "WARNING: Something went wrong when checking amount of contributions for given IP address") + if settings.get("hide_ips", False): + change["user"] = _("Unregistered user") + change["user"] = change["user"] + "(?)" + else: + ip_mapper[change["user"]] = len(contibs) + logger.debug( + "Current params user {} and state of map_ips {}".format(change["user"], ip_mapper)) + if settings.get("hide_ips", False): + change["user"] = _("Unregistered user") + change["user"] = "{author} ({contribs})".format(author=change["user"], contribs=len(contibs)) else: - ip_mapper[change["user"]] = len(contibs) logger.debug( "Current params user {} and state of map_ips {}".format(change["user"], ip_mapper)) - if settings.get("hide_ips", False): - change["user"] = _("Unregistered user") - change["user"] = "{author} ({contribs})".format(author=change["user"], contribs=len(contibs)) + if ctx.event in ("edit", "new"): + ip_mapper[change["user"]] += 1 + change["user"] = "{author} ({amount})".format( + author=change["user"] if settings.get("hide_ips", False) is False else _("Unregistered user"), + amount=ip_mapper[change["user"]]) else: - logger.debug( - "Current params user {} and state of map_ips {}".format(change["user"], ip_mapper)) - if ctx.event in ("edit", "new"): - ip_mapper[change["user"]] += 1 - change["user"] = "{author} ({amount})".format( - author=change["user"] if settings.get("hide_ips", False) is False else _("Unregistered user"), - amount=ip_mapper[change["user"]]) - else: - author_url = create_article_path("User:{}".format(change["user"].replace(" ", "_"))) - if settings["appearance"]["embed"]["show_footer"]: - message["timestamp"] = change["timestamp"] - if "tags" in change and change["tags"]: - tag_displayname = [] - for tag in change["tags"]: - if tag in ctx.client.tags: - if ctx.client.tags[tag] is None: - continue # Ignore hidden tags + author_url = create_article_path("User:{}".format(change["user"].replace(" ", "_"))) + message.set_author(change["user"], author_url) + if set_edit_meta: + if settings["appearance"]["embed"]["show_footer"]: + message["timestamp"] = change["timestamp"] + if "tags" in change and change["tags"]: + tag_displayname = [] + for tag in change["tags"]: + if tag in ctx.client.tags: + if ctx.client.tags[tag] is None: + continue # Ignore hidden tags + else: + tag_displayname.append(ctx.client.tags[tag]) else: - tag_displayname.append(ctx.client.tags[tag]) - else: - tag_displayname.append(tag) - message.add_field(_("Tags"), ", ".join(tag_displayname)) - if ctx.categories is not None and not (len(ctx.categories["new"]) == 0 and len(ctx.categorie["removed"]) == 0): - new_cat = (_("**Added**: ") + ", ".join(list(ctx.categories["new"])[0:16]) + ("\n" if len(ctx.categories["new"])<=15 else _(" and {} more\n").format(len(ctx.categories["new"])-15))) if ctx.categories["new"] else "" - del_cat = (_("**Removed**: ") + ", ".join(list(ctx.categories["removed"])[0:16]) + ("" if len(ctx.categories["removed"])<=15 else _(" and {} more").format(len(ctx.categories["removed"])-15))) if ctx.categories["removed"] else "" - message.add_field(_("Changed categories"), new_cat + del_cat) - message.set_author(change["user"], author_url) + tag_displayname.append(tag) + message.add_field(_("Tags"), ", ".join(tag_displayname)) + if ctx.categories is not None and not (len(ctx.categories["new"]) == 0 and len(ctx.categories["removed"]) == 0): + new_cat = (_("**Added**: ") + ", ".join(list(ctx.categories["new"])[0:16]) + ( + "\n" if len(ctx.categories["new"]) <= 15 else _(" and {} more\n").format( + len(ctx.categories["new"]) - 15))) if ctx.categories["new"] else "" + del_cat = (_("**Removed**: ") + ", ".join(list(ctx.categories["removed"])[0:16]) + ( + "" if len(ctx.categories["removed"]) <= 15 else _(" and {} more").format( + len(ctx.categories["removed"]) - 15))) if ctx.categories["removed"] else "" + message.add_field(_("Changed categories"), new_cat + del_cat) + if set_desc: + message["description"] = ctx.parsedcomment From 0083fbf4f6d8e9141ec9f3303d3f614d2ef5c9a0 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 8 May 2021 13:21:05 +0200 Subject: [PATCH 064/173] Remade embed upload events to reduce amount of requests --- extensions/base/mediawiki.py | 104 +++++++++++++++++++++-------------- src/wiki.py | 1 + 2 files changed, 64 insertions(+), 41 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index b0e8a42..2c9d6f0 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -18,6 +18,7 @@ import math import re import time import datetime +from collections import OrderedDict from src.discord.message import DiscordMessage from src.api import formatter from src.i18n import rc_formatters @@ -125,33 +126,59 @@ def embed_upload_upload(ctx, change) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) action = ctx.event embed_helper(ctx, embed, change) - urls = ctx.client.make_api_request("{wiki}?action=query&format=json&prop=imageinfo&list=&meta=&titles={filename}&iiprop=timestamp%7Curl%7Carchivename&iilimit=5".format( - wiki=ctx.WIKI_API_PATH, filename=sanitize_to_url(change["title"])), "query", "pages") + # Requesting more information on the image + request_for_image_data = None + try: + params = OrderedDict() + params["action"] = "query" + params["format"] = "json" + if settings["license_detection"] and action == "upload/upload": + params["prop"] = "imageinfo|revisions" + params["rvprop"] = "content" + params["rvslots"] = "main" + else: + params["prop"] = "imageinfo" + params["title"] = sanitize_to_url(change["title"]) + params["iiprop"] = "timestamp%7Curl%7Carchivename" + params["iilimit"] = "5" + request_for_image_data = ctx.client.make_api_request(params, "query", "pages") + except (ServerError, MediaWikiError): + logger.exception("Couldn't retrieve more information about the image {} because of server/MediaWiki error".format(change["title"])) + except (ClientError, BadRequest): + raise + except KeyError: + logger.exception( + "Couldn't retrieve more information about the image {} because of unknown error".format( + change["title"])) + else: + if "-1" not in request_for_image_data: # Image still exists and not removed + image_data = next(iter(request_for_image_data.values())) + else: + logger.warning("Request for additional image information have failed. The preview will not be shown.") + request_for_image_data = None link = create_article_path(sanitize_to_url(change["title"])) image_direct_url = None # Make a request for file revisions so we can get direct URL to the image for embed - if urls is not None: - logger.debug(urls) - if "-1" not in urls: # image still exists and not removed - try: - img_info = next(iter(urls.values()))["imageinfo"] - for num, revision in enumerate(img_info): - if revision["timestamp"] == change["logparams"]["img_timestamp"]: # find the correct revision corresponding for this log entry - image_direct_url = "{rev}?{cache}".format(rev=revision["url"], cache=int(time.time() * 5)) # cachebusting - break - except KeyError: - logger.exception( - "Wiki did not respond with extended information about file. The preview will not be shown.") + if request_for_image_data is not None: + try: + urls = image_data["imageinfo"] + for num, revision in enumerate(urls): + if revision["timestamp"] == change["logparams"]["img_timestamp"]: # find the correct revision corresponding for this log entry + image_direct_url = "{rev}?{cache}".format(rev=revision["url"], cache=int(time.time() * 5)) # cachebusting + break + except KeyError: + logger.exception( + "Wiki did not respond with extended information about file. The preview will not be shown.") else: logger.warning("Request for additional image information have failed. The preview will not be shown.") if action in ("upload/overwrite", "upload/revert"): if image_direct_url: try: - revision = img_info[num + 1] + revision = image_data["imageinfo"][num + 1] except IndexError: logger.exception( "Could not analize the information about the image (does it have only one version when expected more in overwrite?) which resulted in no Options field: {}".format( - img_info)) + image_data["imageinfo"])) else: undolink = "{wiki}index.php?title={filename}&action=revert&oldimage={archiveid}".format( wiki=ctx.client.WIKI_SCRIPT_PATH, filename=sanitize_to_url(change["title"]), archiveid=revision["archivename"]) @@ -166,33 +193,28 @@ def embed_upload_upload(ctx, change) -> DiscordMessage: else: embed["title"] = _("Uploaded {name}").format(name=change["title"]) if settings["license_detection"]: - article_content = ctx.client.make_api_request( - "{wiki}?action=query&format=json&prop=revisions&titles={article}&rvprop=content".format( - wiki=ctx.client.WIKI_API_PATH, article=sanitize_to_url(change["title"])), "query", "pages") - if article_content is None: - logger.warning("Something went wrong when getting license for the image") - return 0 - if "-1" not in article_content: - content = list(article_content.values())[0]['revisions'][0]['*'] - try: - matches = re.search(re.compile(settings["license_regex"], re.IGNORECASE), content) - if matches is not None: - license = matches.group("license") + try: + content = image_data['revisions'][0]["slots"]["main"]['*'] + matches = re.search(re.compile(settings["license_regex"], re.IGNORECASE), content) + if matches is not None: + license = matches.group("license") + else: + if re.search(re.compile(settings["license_regex_detect"], re.IGNORECASE), content) is None: + license = _("**No license!**") else: - if re.search(re.compile(settings["license_regex_detect"], re.IGNORECASE), content) is None: - license = _("**No license!**") - else: - license = "?" - except IndexError: - logger.error( - "Given regex for the license detection is incorrect. It does not have a capturing group called \"license\" specified. Please fix license_regex value in the config!") - license = "?" - except re.error: - logger.error( - "Given regex for the license detection is incorrect. Please fix license_regex or license_regex_detect values in the config!") - license = "?" + license = "?" + except IndexError: + logger.error( + "Given regex for the license detection is incorrect. It does not have a capturing group called \"license\" specified. Please fix license_regex value in the config!") + license = "?" + except re.error: + logger.error( + "Given regex for the license detection is incorrect. Please fix license_regex or license_regex_detect values in the config!") + license = "?" + except KeyError: + logger.exception("Unknown error when retriefing the image data for a license, full content: {}".format(image_data)) if license is not None: - ctx.parsedcomment += _("\nLicense: {}").format(license) + embed["description"] += _("\nLicense: {}").format(license) if image_direct_url: embed.add_field(_("Options"), _("([preview]({link}))").format(link=image_direct_url)) if settings["appearance"]["embed"]["embed_images"]: diff --git a/src/wiki.py b/src/wiki.py index 322778a..1b0f547 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -340,6 +340,7 @@ class Wiki(object): logger.exception("MediaWiki error on request: {}".format(request.url)) raise except KeyError: + logger.exception("KeyError while iterating over json_path, full response: {}".format(request.json())) raise return request_json From 8deb702fc8e8164a3b3afea41e2291e52c8b1991 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 8 May 2021 13:32:31 +0200 Subject: [PATCH 065/173] Small fixes and whitespace changes --- extensions/base/mediawiki.py | 1708 ++++++++++++++++++---------------- 1 file changed, 894 insertions(+), 814 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 2c9d6f0..8065edc 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -24,7 +24,7 @@ from src.api import formatter from src.i18n import rc_formatters from src.api.context import Context from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author, \ - create_article_path, sanitize_to_markdown + create_article_path, sanitize_to_markdown from src.configloader import settings from src.exceptions import * @@ -34,427 +34,452 @@ ngettext = rc_formatters.ngettext logger = logging.getLogger("extensions.base") if 1 == 2: # additional translation strings in unreachable code - print(_("director"), _("bot"), _("editor"), _("directors"), _("sysop"), _("bureaucrat"), _("reviewer"), - _("autoreview"), _("autopatrol"), _("wiki_guardian")) + print(_("director"), _("bot"), _("editor"), _("directors"), _("sysop"), _("bureaucrat"), _("reviewer"), + _("autoreview"), _("autopatrol"), _("wiki_guardian")) + # Page edit - event edit, New - page creation @formatter.embed(event="edit", mode="embed", aliases=["new"]) def embed_edit(ctx: Context, change: dict) -> DiscordMessage: - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - action = ctx.event - editsize = change["newlen"] - change["oldlen"] - if editsize > 0: - embed["color"] = min(65280, 35840 + (math.floor(editsize / 52)) * 256) # Choose shade of green - elif editsize < 0: - embed["color"] = min(16711680, 9175040 + (math.floor(abs(editsize) / 52)) * 65536) # Choose shade of red - elif editsize == 0: - embed["color"] = 8750469 - if change["title"].startswith("MediaWiki:Tag-"): # Refresh tag list when tag display name is edited - ctx.client.refresh_internal_data() - # Sparse is better than dense. - # Readability counts. - embed["url"] = "{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( - wiki=ctx.client.WIKI_SCRIPT_PATH, - pageid=change["pageid"], - diff=change["revid"], - oldrev=change["old_revid"], - article=sanitize_to_url(change["title"]) - ) - embed["title"] = "{redirect}{article} ({new}{minor}{bot}{space}{editsize})".format( - redirect="⤷ " if "redirect" in change else "", - article=change["title"], - editsize="+" + str(editsize) if editsize > 0 else editsize, - new=_("(N!) ") if action == "new" else "", - minor=_("m") if action == "edit" and "minor" in change else "", - bot=_('b') if "bot" in change else "", - space=" " if "bot" in change or (action == "edit" and "minor" in change) or action == "new" else "") - if settings["appearance"]["embed"]["show_edit_changes"]: - try: - if action == "new": - changed_content = ctx.client.make_api_request( - "?action=compare&format=json&fromslots=main&torev={diff}&fromtext-main=&topst=1&prop=diff".format( - diff=change["revid"]), "compare", "*") - else: - changed_content = ctx.client.make_api_request( - "?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( - diff=change["revid"], oldrev=change["old_revid"]), "compare", "*") - except ServerError: - changed_content = None - if changed_content: - parse_mediawiki_changes(ctx, changed_content, embed) - else: - logger.warning("Unable to download data on the edit content!") - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + action = ctx.event + editsize = change["newlen"] - change["oldlen"] + if editsize > 0: + embed["color"] = min(65280, 35840 + (math.floor(editsize / 52)) * 256) # Choose shade of green + elif editsize < 0: + embed["color"] = min(16711680, 9175040 + (math.floor(abs(editsize) / 52)) * 65536) # Choose shade of red + elif editsize == 0: + embed["color"] = 8750469 + if change["title"].startswith("MediaWiki:Tag-"): # Refresh tag list when tag display name is edited + ctx.client.refresh_internal_data() + # Sparse is better than dense. + # Readability counts. + embed["url"] = "{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( + wiki=ctx.client.WIKI_SCRIPT_PATH, + pageid=change["pageid"], + diff=change["revid"], + oldrev=change["old_revid"], + article=sanitize_to_url(change["title"]) + ) + embed["title"] = "{redirect}{article} ({new}{minor}{bot}{space}{editsize})".format( + redirect="⤷ " if "redirect" in change else "", + article=change["title"], + editsize="+" + str(editsize) if editsize > 0 else editsize, + new=_("(N!) ") if action == "new" else "", + minor=_("m") if action == "edit" and "minor" in change else "", + bot=_('b') if "bot" in change else "", + space=" " if "bot" in change or (action == "edit" and "minor" in change) or action == "new" else "") + if settings["appearance"]["embed"]["show_edit_changes"]: + try: + if action == "new": + changed_content = ctx.client.make_api_request( + "?action=compare&format=json&fromslots=main&torev={diff}&fromtext-main=&topst=1&prop=diff".format( + diff=change["revid"]), "compare", "*") + else: + changed_content = ctx.client.make_api_request( + "?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( + diff=change["revid"], oldrev=change["old_revid"]), "compare", "*") + except ServerError: + changed_content = None + if changed_content: + parse_mediawiki_changes(ctx, changed_content, embed) + else: + logger.warning("Unable to download data on the edit content!") + return embed @formatter.compact(event="edit", mode="compact", aliases=["new"]) def compact_edit(ctx: Context, change: dict) -> DiscordMessage: - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - author, author_url = compact_author(ctx, change) - action = ctx.event - edit_link = clean_link("{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( - wiki=ctx.client.WIKI_SCRIPT_PATH, pageid=change["pageid"], diff=change["revid"], oldrev=change["old_revid"], - article=sanitize_to_url(change["title"]))) - logger.debug(edit_link) - edit_size = change["newlen"] - change["oldlen"] - sign = "" - if edit_size > 0: - sign = "+" - bold = "" - if abs(edit_size) > 500: - bold = "**" - if action == "edit": - content = _( - "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}({sign}{edit_size}){bold}").format( - author=author, author_url=author_url, article=change["title"], edit_link=edit_link, comment=parsed_comment, - edit_size=edit_size, sign=sign, bold=bold) - else: - content = _( - "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}({sign}{edit_size}){bold}").format( - author=author, author_url=author_url, article=change["title"], edit_link=edit_link, comment=parsed_comment, - edit_size=edit_size, sign=sign, bold=bold) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + author, author_url = compact_author(ctx, change) + action = ctx.event + edit_link = clean_link("{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( + wiki=ctx.client.WIKI_SCRIPT_PATH, pageid=change["pageid"], diff=change["revid"], oldrev=change["old_revid"], + article=sanitize_to_url(change["title"]))) + logger.debug(edit_link) + edit_size = change["newlen"] - change["oldlen"] + sign = "" + if edit_size > 0: + sign = "+" + bold = "" + if abs(edit_size) > 500: + bold = "**" + if action == "edit": + content = _( + "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}({sign}{edit_size}){bold}").format( + author=author, author_url=author_url, article=change["title"], edit_link=edit_link, comment=parsed_comment, + edit_size=edit_size, sign=sign, bold=bold) + else: + content = _( + "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}({sign}{edit_size}){bold}").format( + author=author, author_url=author_url, article=change["title"], edit_link=edit_link, comment=parsed_comment, + edit_size=edit_size, sign=sign, bold=bold) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) # Upload - upload/reupload, upload/upload @formatter.embed(event="upload/upload", mode="embed", aliases=["upload/overwrite", "upload/revert"]) def embed_upload_upload(ctx, change) -> DiscordMessage: - license = None - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - action = ctx.event - embed_helper(ctx, embed, change) - # Requesting more information on the image - request_for_image_data = None - try: - params = OrderedDict() - params["action"] = "query" - params["format"] = "json" - if settings["license_detection"] and action == "upload/upload": - params["prop"] = "imageinfo|revisions" - params["rvprop"] = "content" - params["rvslots"] = "main" - else: - params["prop"] = "imageinfo" - params["title"] = sanitize_to_url(change["title"]) - params["iiprop"] = "timestamp%7Curl%7Carchivename" - params["iilimit"] = "5" - request_for_image_data = ctx.client.make_api_request(params, "query", "pages") - except (ServerError, MediaWikiError): - logger.exception("Couldn't retrieve more information about the image {} because of server/MediaWiki error".format(change["title"])) - except (ClientError, BadRequest): - raise - except KeyError: - logger.exception( - "Couldn't retrieve more information about the image {} because of unknown error".format( - change["title"])) - else: - if "-1" not in request_for_image_data: # Image still exists and not removed - image_data = next(iter(request_for_image_data.values())) - else: - logger.warning("Request for additional image information have failed. The preview will not be shown.") - request_for_image_data = None - link = create_article_path(sanitize_to_url(change["title"])) - image_direct_url = None - # Make a request for file revisions so we can get direct URL to the image for embed - if request_for_image_data is not None: - try: - urls = image_data["imageinfo"] - for num, revision in enumerate(urls): - if revision["timestamp"] == change["logparams"]["img_timestamp"]: # find the correct revision corresponding for this log entry - image_direct_url = "{rev}?{cache}".format(rev=revision["url"], cache=int(time.time() * 5)) # cachebusting - break - except KeyError: - logger.exception( - "Wiki did not respond with extended information about file. The preview will not be shown.") - else: - logger.warning("Request for additional image information have failed. The preview will not be shown.") - if action in ("upload/overwrite", "upload/revert"): - if image_direct_url: - try: - revision = image_data["imageinfo"][num + 1] - except IndexError: - logger.exception( - "Could not analize the information about the image (does it have only one version when expected more in overwrite?) which resulted in no Options field: {}".format( - image_data["imageinfo"])) - else: - undolink = "{wiki}index.php?title={filename}&action=revert&oldimage={archiveid}".format( - wiki=ctx.client.WIKI_SCRIPT_PATH, filename=sanitize_to_url(change["title"]), archiveid=revision["archivename"]) - embed.add_field(_("Options"), _("([preview]({link}) | [undo]({undolink}))").format( - link=image_direct_url, undolink=undolink)) - if settings["appearance"]["embed"]["embed_images"]: - embed["image"]["url"] = image_direct_url - if action == "upload/overwrite": - embed["title"] = _("Uploaded a new version of {name}").format(name=change["title"]) - elif action == "upload/revert": - embed["title"] = _("Reverted a version of {name}").format(name=change["title"]) - else: - embed["title"] = _("Uploaded {name}").format(name=change["title"]) - if settings["license_detection"]: - try: - content = image_data['revisions'][0]["slots"]["main"]['*'] - matches = re.search(re.compile(settings["license_regex"], re.IGNORECASE), content) - if matches is not None: - license = matches.group("license") - else: - if re.search(re.compile(settings["license_regex_detect"], re.IGNORECASE), content) is None: - license = _("**No license!**") - else: - license = "?" - except IndexError: - logger.error( - "Given regex for the license detection is incorrect. It does not have a capturing group called \"license\" specified. Please fix license_regex value in the config!") - license = "?" - except re.error: - logger.error( - "Given regex for the license detection is incorrect. Please fix license_regex or license_regex_detect values in the config!") - license = "?" - except KeyError: - logger.exception("Unknown error when retriefing the image data for a license, full content: {}".format(image_data)) - if license is not None: - embed["description"] += _("\nLicense: {}").format(license) - if image_direct_url: - embed.add_field(_("Options"), _("([preview]({link}))").format(link=image_direct_url)) - if settings["appearance"]["embed"]["embed_images"]: - embed["image"]["url"] = image_direct_url - return embed + license = None + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + action = ctx.event + embed_helper(ctx, embed, change) + # Requesting more information on the image + request_for_image_data = None + try: + params = OrderedDict() + params["action"] = "query" + params["format"] = "json" + if settings["license_detection"] and action == "upload/upload": + params["prop"] = "imageinfo|revisions" + params["rvprop"] = "content" + params["rvslots"] = "main" + else: + params["prop"] = "imageinfo" + params["title"] = sanitize_to_url(change["title"]) + params["iiprop"] = "timestamp%7Curl%7Carchivename" + params["iilimit"] = "5" + request_for_image_data = ctx.client.make_api_request(params, "query", "pages") + except (ServerError, MediaWikiError): + logger.exception( + "Couldn't retrieve more information about the image {} because of server/MediaWiki error".format( + change["title"])) + except (ClientError, BadRequest): + raise + except KeyError: + logger.exception( + "Couldn't retrieve more information about the image {} because of unknown error".format( + change["title"])) + else: + if "-1" not in request_for_image_data: # Image still exists and not removed + image_data = next(iter(request_for_image_data.values())) + else: + logger.warning("Request for additional image information have failed. The preview will not be shown.") + request_for_image_data = None + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + image_direct_url = None + # Make a request for file revisions so we can get direct URL to the image for embed + if request_for_image_data is not None: + try: + urls = image_data["imageinfo"] + for num, revision in enumerate(urls): + if revision["timestamp"] == change["logparams"][ + "img_timestamp"]: # find the correct revision corresponding for this log entry + image_direct_url = "{rev}?{cache}".format(rev=revision["url"], + cache=int(time.time() * 5)) # cachebusting + break + except KeyError: + logger.exception( + "Wiki did not respond with extended information about file. The preview will not be shown.") + else: + logger.warning("Request for additional image information have failed. The preview will not be shown.") + if action in ("upload/overwrite", "upload/revert"): + if image_direct_url: + try: + revision = image_data["imageinfo"][num + 1] + except IndexError: + logger.exception( + "Could not analize the information about the image (does it have only one version when expected more in overwrite?) which resulted in no Options field: {}".format( + image_data["imageinfo"])) + else: + undolink = "{wiki}index.php?title={filename}&action=revert&oldimage={archiveid}".format( + wiki=ctx.client.WIKI_SCRIPT_PATH, filename=sanitize_to_url(change["title"]), + archiveid=revision["archivename"]) + embed.add_field(_("Options"), _("([preview]({link}) | [undo]({undolink}))").format( + link=image_direct_url, undolink=undolink)) + if settings["appearance"]["embed"]["embed_images"]: + embed["image"]["url"] = image_direct_url + if action == "upload/overwrite": + embed["title"] = _("Uploaded a new version of {name}").format(name=change["title"]) + elif action == "upload/revert": + embed["title"] = _("Reverted a version of {name}").format(name=change["title"]) + else: + embed["title"] = _("Uploaded {name}").format(name=change["title"]) + if settings["license_detection"]: + try: + content = image_data['revisions'][0]["slots"]["main"]['*'] + matches = re.search(re.compile(settings["license_regex"], re.IGNORECASE), content) + if matches is not None: + license = matches.group("license") + else: + if re.search(re.compile(settings["license_regex_detect"], re.IGNORECASE), content) is None: + license = _("**No license!**") + else: + license = "?" + except IndexError: + logger.error( + "Given regex for the license detection is incorrect. It does not have a capturing group called \"license\" specified. Please fix license_regex value in the config!") + license = "?" + except re.error: + logger.error( + "Given regex for the license detection is incorrect. Please fix license_regex or license_regex_detect values in the config!") + license = "?" + except KeyError: + logger.exception( + "Unknown error when retriefing the image data for a license, full content: {}".format(image_data)) + if license is not None: + embed["description"] += _("\nLicense: {}").format(license) + if image_direct_url: + embed.add_field(_("Options"), _("([preview]({link}))").format(link=image_direct_url)) + if settings["appearance"]["embed"]["embed_images"]: + embed["image"]["url"] = image_direct_url + return embed @formatter.compact(event="upload/revert", mode="compact") def compact_upload_revert(ctx, change) -> DiscordMessage: - author, author_url = compact_author(ctx, change) - file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _("[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}").format( - author=author, author_url=author_url, file=sanitize_to_markdown(change["title"]), file_link=file_link, comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}").format( + author=author, author_url=author_url, file=sanitize_to_markdown(change["title"]), file_link=file_link, + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @formatter.compact(event="upload/overwrite", mode="compact") def compact_upload_overwrite(ctx, change) -> DiscordMessage: - author, author_url = compact_author(ctx, change) - file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _("[{author}]({author_url}) uploaded a new version of [{file}]({file_link}){comment}").format(author=author, author_url=author_url, file=sanitize_to_markdown(change["title"]), file_link=file_link, comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) uploaded a new version of [{file}]({file_link}){comment}").format( + author=author, author_url=author_url, file=sanitize_to_markdown(change["title"]), file_link=file_link, + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @formatter.compact(event="upload/upload", mode="compact") def compact_upload_upload(ctx, change) -> DiscordMessage: - author, author_url = compact_author(ctx, change) - file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _("[{author}]({author_url}) uploaded [{file}]({file_link}){comment}").format(author=author, - author_url=author_url, - file=sanitize_to_markdown(change["title"]), - file_link=file_link, - comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) uploaded [{file}]({file_link}){comment}").format(author=author, + author_url=author_url, + file=sanitize_to_markdown( + change["title"]), + file_link=file_link, + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) # delete/delete - Page deletion @formatter.embed(event="delete/delete", mode="embed") def embed_delete_delete(ctx, change) -> DiscordMessage: - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed['url'] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Deleted page {article}").format(article=change["title"]) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed['url'] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Deleted page {article}").format(article=change["title"]) + return embed @formatter.compact(event="delete/delete", mode="compact") def compact_delete_delete(ctx, change) -> DiscordMessage: - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - author, author_url = compact_author(ctx, change) - page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - content = _("[{author}]({author_url}) deleted [{page}]({page_link}){comment}").format(author=author, - author_url=author_url, - page=sanitize_to_markdown(change["title"]), - page_link=page_link, - comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + author, author_url = compact_author(ctx, change) + page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) deleted [{page}]({page_link}){comment}").format(author=author, + author_url=author_url, + page=sanitize_to_markdown( + change["title"]), + page_link=page_link, + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) # delete/delete_redir - Redirect deletion @formatter.embed(event="delete/delete_redir", mode="embed") def embed_delete_delete_redir(ctx, change) -> DiscordMessage: - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed['url'] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Deleted redirect {article} by overwriting").format(article=sanitize_to_markdown(change["title"])) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed['url'] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Deleted redirect {article} by overwriting").format( + article=sanitize_to_markdown(change["title"])) + return embed @formatter.compact(event="delete/delete_redir", mode="compact") def compact_delete_delete_redir(ctx, change) -> DiscordMessage: - page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _("[{author}]({author_url}) deleted redirect by overwriting [{page}]({page_link}){comment}").format( - author=author, author_url=author_url, page=change["title"], page_link=page_link, - comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) deleted redirect by overwriting [{page}]({page_link}){comment}").format( + author=author, author_url=author_url, page=change["title"], page_link=page_link, + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # delete/restore - Restoring a page @formatter.embed(event="delete/restore", mode="embed") def embed_delete_restore(ctx, change) -> DiscordMessage: - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed['url'] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Restored {article}").format(article=sanitize_to_markdown(change["title"])) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed['url'] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Restored {article}").format(article=sanitize_to_markdown(change["title"])) + return embed @formatter.compact(event="delete/restore", mode="compact") def compact_delete_restore(ctx, change) -> DiscordMessage: - page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _("[{author}]({author_url}) restored [{article}]({article_url}){comment}").format(author=author, - author_url=author_url, - article=sanitize_to_markdown(change["title"]), - article_url=page_link, - comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) restored [{article}]({article_url}){comment}").format(author=author, + author_url=author_url, + article=sanitize_to_markdown( + change["title"]), + article_url=page_link, + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # delete/event - Deleting an event with revdelete feature @formatter.embed(event="delete/event", mode="embed") def embed_delete_event(ctx, change) -> DiscordMessage: - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed['url'] = create_article_path("Special:RecentChanges") - embed["title"] = _("Changed visibility of log events") - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed['url'] = create_article_path("Special:RecentChanges") + embed["title"] = _("Changed visibility of log events") + return embed @formatter.compact(event="delete/event", mode="compact") def compact_delete_event(ctx, change) -> DiscordMessage: - page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _("[{author}]({author_url}) changed visibility of log events{comment}").format(author=author, - author_url=author_url, comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) changed visibility of log events{comment}").format(author=author, + author_url=author_url, + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # delete/revision - Deleting revision information @formatter.embed(event="delete/revision", mode="embed") def embed_delete_revision(ctx, change) -> DiscordMessage: - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - amount = len(change["logparams"]["ids"]) - embed['url'] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = ngettext("Changed visibility of revision on page {article} ", - "Changed visibility of {amount} revisions on page {article} ", amount).format( - article=change["title"], amount=amount) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + amount = len(change["logparams"]["ids"]) + embed['url'] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = ngettext("Changed visibility of revision on page {article} ", + "Changed visibility of {amount} revisions on page {article} ", amount).format( + article=change["title"], amount=amount) + return embed @formatter.compact(event="delete/revision", mode="compact") def compact_delete_revision(ctx, change) -> DiscordMessage: - author, author_url = compact_author(ctx, change) - amount = len(change["logparams"]["ids"]) - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = ngettext( - "[{author}]({author_url}) changed visibility of revision on page [{article}]({article_url}){comment}", - "[{author}]({author_url}) changed visibility of {amount} revisions on page [{article}]({article_url}){comment}", - amount).format(author=author, author_url=author_url, - article=change["title"], article_url=link, amount=amount, comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + amount = len(change["logparams"]["ids"]) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = ngettext( + "[{author}]({author_url}) changed visibility of revision on page [{article}]({article_url}){comment}", + "[{author}]({author_url}) changed visibility of {amount} revisions on page [{article}]({article_url}){comment}", + amount).format(author=author, author_url=author_url, + article=change["title"], article_url=link, amount=amount, comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # move/move - Moving pages @formatter.embed(event="move/move", mode="embed") def embed_move_move(ctx, change) -> DiscordMessage: - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) - embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title'])) - embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment, - supress=_("No redirect has been made") if "suppressredirect" in change[ - "logparams"] else _( - "A redirect has been made")) - embed["title"] = _("Moved {redirect}{article} to {target}").format(redirect="⤷ " if "redirect" in change else "", - article=sanitize_to_markdown(change["title"]), - target=sanitize_to_markdown(change["logparams"]['target_title'])) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change, set_desc=False) + embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title'])) + embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment, + supress=_("No redirect has been made") if "suppressredirect" in + change[ + "logparams"] else _( + "A redirect has been made")) + embed["title"] = _("Moved {redirect}{article} to {target}").format(redirect="⤷ " if "redirect" in change else "", + article=sanitize_to_markdown(change["title"]), + target=sanitize_to_markdown( + change["logparams"]['target_title'])) + return embed @formatter.compact(event="move/move", mode="compact") def compact_move_move(ctx, change) -> DiscordMessage: - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["logparams"]['target_title']))) - redirect_status = _("without making a redirect") if "suppressredirect" in change["logparams"] else _( - "with a redirect") - content = _( - "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]({target_url}) {made_a_redirect}{comment}").format( - author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", article=change["title"], - target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=ctx.parsedcomment, - made_a_redirect=redirect_status) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["logparams"]['target_title']))) + redirect_status = _("without making a redirect") if "suppressredirect" in change["logparams"] else _( + "with a redirect") + content = _( + "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]({target_url}) {made_a_redirect}{comment}").format( + author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", article=change["title"], + target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=ctx.parsedcomment, + made_a_redirect=redirect_status) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # move/move_redir - Move over redirect @formatter.embed(event="move/move_redir", mode="embed") def embed_move_move_redir(ctx, change) -> DiscordMessage: - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) - embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title'])) - embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment, - supress=_("No redirect has been made") if "suppressredirect" in change[ - "logparams"] else _( - "A redirect has been made")) - embed["title"] = _("Moved {redirect}{article} to {title} over redirect").format( - redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["title"]), - title=sanitize_to_markdown(change["logparams"]["target_title"])) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change, set_desc=False) + embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title'])) + embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment, + supress=_("No redirect has been made") if "suppressredirect" in + change[ + "logparams"] else _( + "A redirect has been made")) + embed["title"] = _("Moved {redirect}{article} to {title} over redirect").format( + redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["title"]), + title=sanitize_to_markdown(change["logparams"]["target_title"])) + return embed @formatter.compact(event="move/move_redir", mode="compact") def compact_move_move_redir(ctx, change) -> DiscordMessage: - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["logparams"]['target_title']))) - redirect_status = _("without making a redirect") if "suppressredirect" in change["logparams"] else _( - "with a redirect") - content = _( - "[{author}]({author_url}) moved {redirect}*{article}* over redirect to [{target}]({target_url}) {made_a_redirect}{comment}").format( - author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["title"]), - target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=ctx.parsedcomment, - made_a_redirect=redirect_status) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["logparams"]['target_title']))) + redirect_status = _("without making a redirect") if "suppressredirect" in change["logparams"] else _( + "with a redirect") + content = _( + "[{author}]({author_url}) moved {redirect}*{article}* over redirect to [{target}]({target_url}) {made_a_redirect}{comment}").format( + author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", + article=sanitize_to_markdown(change["title"]), + target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=ctx.parsedcomment, + made_a_redirect=redirect_status) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # protect/move_prot - Moving protection @formatter.embed(event="protect/move_prot", mode="embed") def embed_protect_move_prot(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path(sanitize_to_url(change["logparams"]["oldtitle_title"])) - embed["title"] = _("Moved protection settings from {redirect}{article} to {title}").format( - redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]), - title=sanitize_to_markdown(change["title"])) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["logparams"]["oldtitle_title"])) + embed["title"] = _("Moved protection settings from {redirect}{article} to {title}").format( + redirect="⤷ " if "redirect" in change else "", + article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]), + title=sanitize_to_markdown(change["title"])) + return embed @formatter.compact(event="protect/move_prot", mode="compact") def compact_protect_move_prot(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["logparams"]["oldtitle_title"]))) - content = _( - "[{author}]({author_url}) moved protection settings from {redirect}*{article}* to [{target}]({target_url}){comment}").format( - author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", - article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]), - target=sanitize_to_markdown(change["title"]), target_url=link, comment=ctx.parsedcomment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["logparams"]["oldtitle_title"]))) + content = _( + "[{author}]({author_url}) moved protection settings from {redirect}*{article}* to [{target}]({target_url}){comment}").format( + author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", + article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]), + target=sanitize_to_markdown(change["title"]), target_url=link, comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) # protect/protect - Creating protection @@ -462,525 +487,559 @@ def compact_protect_move_prot(ctx, change): @formatter.embed(event="protect/protect", mode="embed") def embed_protect_protect(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Protected {target}").format(target=sanitize_to_markdown(change["title"])) - embed["description"] = "{settings}{cascade} | {reason}".format(settings=sanitize_to_markdown(change["logparams"].get("description", "")), - cascade=_(" [cascading]") if "cascade" in change["logparams"] else "", - reason=ctx.parsedcomment) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change, set_desc=False) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Protected {target}").format(target=sanitize_to_markdown(change["title"])) + embed["description"] = "{settings}{cascade} | {reason}".format( + settings=sanitize_to_markdown(change["logparams"].get("description", "")), + cascade=_(" [cascading]") if "cascade" in change["logparams"] else "", + reason=ctx.parsedcomment) + return embed @formatter.compact(event="protect/protect", mode="compact") def compact_protect_protect(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - content = _( - "[{author}]({author_url}) protected [{article}]({article_url}) with the following settings: {settings}{comment}").format( - author=author, author_url=author_url, - article=sanitize_to_markdown(change["title"]), article_url=link, - settings=change["logparams"].get("description", "") + ( - _(" [cascading]") if "cascade" in change["logparams"] else ""), - comment=ctx.parsedcomment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _( + "[{author}]({author_url}) protected [{article}]({article_url}) with the following settings: {settings}{comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + settings=change["logparams"].get("description", "") + ( + _(" [cascading]") if "cascade" in change["logparams"] else ""), + comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # protect/modify - Changing protection settings @formatter.embed(event="protect/modify", mode="embed") def embed_protect_modify(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Changed protection level for {article}").format(article=sanitize_to_markdown(change["title"])) - embed["description"] = "{settings}{cascade} | {reason}".format(settings=sanitize_to_markdown(change["logparams"].get("description", "")), - cascade=_(" [cascading]") if "cascade" in change[ - "logparams"] else "", - reason=ctx.parsedcomment) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change, set_desc=False) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Changed protection level for {article}").format(article=sanitize_to_markdown(change["title"])) + embed["description"] = "{settings}{cascade} | {reason}".format( + settings=sanitize_to_markdown(change["logparams"].get("description", "")), + cascade=_(" [cascading]") if "cascade" in change[ + "logparams"] else "", + reason=ctx.parsedcomment) + return embed @formatter.compact(event="protect/modify", mode="compact") def compact_protect_modify(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - content = _( - "[{author}]({author_url}) modified protection settings of [{article}]({article_url}) to: {settings}{comment}").format( - author=author, author_url=author_url, - article=sanitize_to_markdown(change["title"]), article_url=link, - settings=sanitize_to_markdown(change["logparams"].get("description", "")) + ( - _(" [cascading]") if "cascade" in change["logparams"] else ""), - comment=ctx.parsedcomment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _( + "[{author}]({author_url}) modified protection settings of [{article}]({article_url}) to: {settings}{comment}").format( + author=author, author_url=author_url, + article=sanitize_to_markdown(change["title"]), article_url=link, + settings=sanitize_to_markdown(change["logparams"].get("description", "")) + ( + _(" [cascading]") if "cascade" in change["logparams"] else ""), + comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # protect/unprotect - Unprotecting a page @formatter.embed(event="protect/unprotect", mode="embed") def embed_protect_unprotect(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Removed protection from {article}").format(article=change["title"]) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Removed protection from {article}").format(article=change["title"]) + return embed @formatter.compact(event="protect/unprotect", mode="compact") def compact_protect_unprotect(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - content = _("[{author}]({author_url}) removed protection from [{article}]({article_url}){comment}").format( - author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, comment=ctx.parsedcomment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) removed protection from [{article}]({article_url}){comment}").format( + author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, + comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # block/block - Blocking an user def block_expiry(change: dict) -> str: - if change["logparams"]["duration"] in ["infinite", "indefinite", "infinity", "never"]: - return _("for infinity and beyond") - else: - if "expiry" in change["logparams"]: - expiry_date_time_obj = datetime.datetime.strptime(change["logparams"]["expiry"], '%Y-%m-%dT%H:%M:%SZ') - timestamp_date_time_obj = datetime.datetime.strptime(change["timestamp"], '%Y-%m-%dT%H:%M:%SZ') - timedelta_for_expiry = expiry_date_time_obj - timestamp_date_time_obj - years, days, hours, minutes = timedelta_for_expiry.seconds // 31557600, \ - timedelta_for_expiry.seconds % 31557600 // 86400, \ - timedelta_for_expiry.seconds % 86400 // 3600, timedelta_for_expiry.seconds % 3600 // 60 - if not any([years, days, hours, minutes]): - return _("less than a minute") - time_names = (ngettext("year", "years", years), ngettext("day", "days", days), ngettext("hour", "hours", hours), ngettext("minute", "minutes", minutes)) - final_time = [] - for num, timev in enumerate([years, days, hours, minutes]): - if timev: - final_time.append(_("{time_unit} {time_number}").format(time_unit=time_names[num], time_number=timev)) - return ", ".join(final_time) - else: - return change["logparams"]["duration"] # Temporary? Should be rare? We will see in testing + if change["logparams"]["duration"] in ["infinite", "indefinite", "infinity", "never"]: + return _("for infinity and beyond") + else: + if "expiry" in change["logparams"]: + expiry_date_time_obj = datetime.datetime.strptime(change["logparams"]["expiry"], '%Y-%m-%dT%H:%M:%SZ') + timestamp_date_time_obj = datetime.datetime.strptime(change["timestamp"], '%Y-%m-%dT%H:%M:%SZ') + timedelta_for_expiry = expiry_date_time_obj - timestamp_date_time_obj + years, days, hours, minutes = timedelta_for_expiry.seconds // 31557600, \ + timedelta_for_expiry.seconds % 31557600 // 86400, \ + timedelta_for_expiry.seconds % 86400 // 3600, timedelta_for_expiry.seconds % 3600 // 60 + if not any([years, days, hours, minutes]): + return _("less than a minute") + time_names = ( + ngettext("year", "years", years), ngettext("day", "days", days), ngettext("hour", "hours", hours), + ngettext("minute", "minutes", minutes)) + final_time = [] + for num, timev in enumerate([years, days, hours, minutes]): + if timev: + final_time.append( + _("{time_unit} {time_number}").format(time_unit=time_names[num], time_number=timev)) + return ", ".join(final_time) + else: + return change["logparams"]["duration"] # Temporary? Should be rare? We will see in testing @formatter.embed(event="block/block", mode="embed") def embed_block_block(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - user = change["title"].split(':', 1)[1] - try: - ipaddress.ip_address(user) - embed["url"] = create_article_path("Special:Contributions/{user}".format(user=user)) - except ValueError: - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - if "sitewide" not in change["logparams"]: - restriction_description = "" - if "restrictions" in change["logparams"]: - if "pages" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"]["pages"]: - restriction_description = _("Blocked from editing the following pages: ") - for page in change["logparams"]["restrictions"]["pages"]: - restricted_pages = ["*"+i["page_title"]+"*" for i in change["logparams"]["restrictions"]["pages"]] - restriction_description = restriction_description + ", ".join(restricted_pages) - if "namespaces" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"]["namespaces"]: - namespaces = [] - if restriction_description: - restriction_description = restriction_description + _(" and namespaces: ") - else: - restriction_description = _("Blocked from editing pages on following namespaces: ") - for namespace in change["logparams"]["restrictions"]["namespaces"]: - if str(namespace) in ctx.client.namespaces: # if we have cached namespace name for given namespace number, add its name to the list - namespaces.append("*{ns}*".format(ns=ctx.client.namespaces[str(namespace)]["*"])) - else: - namespaces.append("*{ns}*".format(ns=namespace)) - restriction_description = restriction_description + ", ".join(namespaces) - restriction_description = restriction_description + "." - if len(restriction_description) > 1020: - logger.debug(restriction_description) - restriction_description = restriction_description[:1020]+"…" - embed.add_field(_("Partial block details"), restriction_description, inline=True) - block_flags = change["logparams"].get("flags") - if block_flags: - embed.add_field(_("Block flags"), ", ".join(block_flags)) # TODO Translate flags into MW messages, this requires making additional request in init_request since we want to get all messages with prefix (amprefix) block-log-flags- and that parameter is exclusive with ammessages - embed["title"] = _("Blocked {blocked_user} {time}").format(blocked_user=user, time=block_expiry(change)) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + user = change["title"].split(':', 1)[1] + try: + ipaddress.ip_address(user) + embed["url"] = create_article_path("Special:Contributions/{user}".format(user=user)) + except ValueError: + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + if "sitewide" not in change["logparams"]: + restriction_description = "" + if "restrictions" in change["logparams"]: + if "pages" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"]["pages"]: + restriction_description = _("Blocked from editing the following pages: ") + restricted_pages = ["*" + i["page_title"] + "*" for i in change["logparams"]["restrictions"]["pages"]] + restriction_description = restriction_description + ", ".join(restricted_pages) + if "namespaces" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"][ + "namespaces"]: + namespaces = [] + if restriction_description: + restriction_description = restriction_description + _(" and namespaces: ") + else: + restriction_description = _("Blocked from editing pages on following namespaces: ") + for namespace in change["logparams"]["restrictions"]["namespaces"]: + if str(namespace) in ctx.client.namespaces: # if we have cached namespace name for given namespace number, add its name to the list + namespaces.append("*{ns}*".format(ns=ctx.client.namespaces[str(namespace)]["*"])) + else: + namespaces.append("*{ns}*".format(ns=namespace)) + restriction_description = restriction_description + ", ".join(namespaces) + restriction_description = restriction_description + "." + if len(restriction_description) > 1020: + logger.debug(restriction_description) + restriction_description = restriction_description[:1020] + "…" + embed.add_field(_("Partial block details"), restriction_description, inline=True) + block_flags = change["logparams"].get("flags") + if block_flags: + embed.add_field(_("Block flags"), ", ".join( + block_flags)) # TODO Translate flags into MW messages, this requires making additional request in init_request since we want to get all messages with prefix (amprefix) block-log-flags- and that parameter is exclusive with ammessages + embed["title"] = _("Blocked {blocked_user} {time}").format(blocked_user=user, time=block_expiry(change)) + return embed @formatter.compact(event="block/block", mode="compact") def compact_block_block(ctx, change): - user = change["title"].split(':', 1)[1] - restriction_description = "" - author, author_url = compact_author(ctx, change) - try: - ipaddress.ip_address(user) - link = clean_link(create_article_path("Special:Contributions/{user}".format(user=user))) - except ValueError: - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - else: - if "sitewide" not in change["logparams"]: - if "restrictions" in change["logparams"]: - if "pages" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"]["pages"]: - restriction_description = _(" on pages: ") - for page in change["logparams"]["restrictions"]["pages"]: - restricted_pages = ["*{page}*".format(page=i["page_title"]) for i in - change["logparams"]["restrictions"]["pages"]] - restriction_description = restriction_description + ", ".join(restricted_pages) - if "namespaces" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"][ - "namespaces"]: - namespaces = [] - if restriction_description: - restriction_description = restriction_description + _(" and namespaces: ") - else: - restriction_description = _(" on namespaces: ") - for namespace in change["logparams"]["restrictions"]["namespaces"]: - if str(namespace) in ctx.client.namespaces: # if we have cached namespace name for given namespace number, add its name to the list - namespaces.append("*{ns}*".format(ns=ctx.client.namespaces[str(namespace)]["*"])) - else: - namespaces.append("*{ns}*".format(ns=namespace)) - restriction_description = restriction_description + ", ".join(namespaces) - restriction_description = restriction_description + "." - if len(restriction_description) > 1020: - logger.debug(restriction_description) - restriction_description = restriction_description[:1020] + "…" - content = _( - "[{author}]({author_url}) blocked [{user}]({user_url}) {time}{restriction_desc}{comment}").format(author=author, - author_url=author_url, - user=user, - time=block_expiry(change), - user_url=link, - restriction_desc=restriction_description, - comment=ctx.parsedcomment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + user = change["title"].split(':', 1)[1] + restriction_description = "" + author, author_url = compact_author(ctx, change) + try: + ipaddress.ip_address(user) + link = clean_link(create_article_path("Special:Contributions/{user}".format(user=user))) + except ValueError: + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + else: + if "sitewide" not in change["logparams"]: + if "restrictions" in change["logparams"]: + if "pages" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"]["pages"]: + restriction_description = _(" on pages: ") + restricted_pages = ["*{page}*".format(page=i["page_title"]) for i in + change["logparams"]["restrictions"]["pages"]] + restriction_description = restriction_description + ", ".join(restricted_pages) + if "namespaces" in change["logparams"]["restrictions"] and change["logparams"]["restrictions"][ + "namespaces"]: + namespaces = [] + if restriction_description: + restriction_description = restriction_description + _(" and namespaces: ") + else: + restriction_description = _(" on namespaces: ") + for namespace in change["logparams"]["restrictions"]["namespaces"]: + if str(namespace) in ctx.client.namespaces: # if we have cached namespace name for given namespace number, add its name to the list + namespaces.append("*{ns}*".format(ns=ctx.client.namespaces[str(namespace)]["*"])) + else: + namespaces.append("*{ns}*".format(ns=namespace)) + restriction_description = restriction_description + ", ".join(namespaces) + restriction_description = restriction_description + "." + if len(restriction_description) > 1020: + logger.debug(restriction_description) + restriction_description = restriction_description[:1020] + "…" + content = _( + "[{author}]({author_url}) blocked [{user}]({user_url}) {time}{restriction_desc}{comment}").format(author=author, + author_url=author_url, + user=user, + time=block_expiry( + change), + user_url=link, + restriction_desc=restriction_description, + comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) # block/reblock - Changing settings of a block @formatter.embed(event="block/reblock", mode="embed") def embed_block_reblock(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - user = change["title"].split(':', 1)[1] - embed["title"] = _("Changed block settings for {blocked_user}").format(blocked_user=sanitize_to_markdown(user)) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + user = change["title"].split(':', 1)[1] + embed["title"] = _("Changed block settings for {blocked_user}").format(blocked_user=sanitize_to_markdown(user)) + return embed @formatter.compact(event="block/reblock") def compact_block_reblock(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - user = change["title"].split(':', 1)[1] - content = _("[{author}]({author_url}) changed block settings for [{blocked_user}]({user_url}){comment}").format( - author=author, author_url=author_url, blocked_user=user, user_url=link, comment=ctx.parsedcomment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + user = change["title"].split(':', 1)[1] + content = _("[{author}]({author_url}) changed block settings for [{blocked_user}]({user_url}){comment}").format( + author=author, author_url=author_url, blocked_user=user, user_url=link, comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) # block/unblock - Unblocking an user @formatter.embed(event="block/unblock", mode="embed") def embed_block_unblock(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - user = change["title"].split(':', 1)[1] - embed["title"] = _("Unblocked {blocked_user}").format(blocked_user=user) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + user = change["title"].split(':', 1)[1] + embed["title"] = _("Unblocked {blocked_user}").format(blocked_user=user) + return embed @formatter.compact(event="block/unblock") def compact_block_unblock(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - user = change["title"].split(':', 1)[1] - content = _("[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}").format(author=author, - author_url=author_url, - blocked_user=user, - user_url=link, - comment=ctx.parsedcomment) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + user = change["title"].split(':', 1)[1] + content = _("[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}").format(author=author, + author_url=author_url, + blocked_user=user, + user_url=link, + comment=ctx.parsedcomment) + + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) # suppressed - Custom event for whenever there is limited information available about the event due to revdel @formatter.embed(event="suppressed", mode="embed") def embed_suppressed(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed["url"] = create_article_path("") - embed["title"] = _("Action has been hidden by administration") - embed["author"]["name"] = _("Unknown") - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed["url"] = create_article_path("") + embed["title"] = _("Action has been hidden by administration") + embed["author"]["name"] = _("Unknown") + return embed @formatter.compact(event="suppressed", mode="compact") def compact_suppressed(ctx, change): - content = _("An action has been hidden by administration.") - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + content = _("An action has been hidden by administration.") + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) # import/upload - Importing pages by uploading exported XML files @formatter.embed(event="import/upload", mode="embed") def embed_import_upload(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = ngettext("Imported {article} with {count} revision", - "Imported {article} with {count} revisions", change["logparams"]["count"]).format( - article=sanitize_to_markdown(change["title"]), count=change["logparams"]["count"]) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = ngettext("Imported {article} with {count} revision", + "Imported {article} with {count} revisions", change["logparams"]["count"]).format( + article=sanitize_to_markdown(change["title"]), count=change["logparams"]["count"]) + return embed @formatter.compact(event="import/upload", mode="compact") def compact_import_upload(ctx, change): - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = ngettext("[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision{comment}", - "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revisions{comment}", - change["logparams"]["count"]).format( - author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, - count=change["logparams"]["count"], comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = ngettext("[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision{comment}", + "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revisions{comment}", + change["logparams"]["count"]).format( + author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, + count=change["logparams"]["count"], comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # import/interwiki - Importing interwiki entries @formatter.embed(event="import/interwiki", mode="embed") def embed_import_interwiki(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = ngettext("Imported {article} with {count} revision from \"{source}\"", - "Imported {article} with {count} revisions from \"{source}\"", - change["logparams"]["count"]).format( - article=sanitize_to_markdown(change["title"]), count=change["logparams"]["count"], source=sanitize_to_markdown(change["logparams"]["interwiki_title"])) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = ngettext("Imported {article} with {count} revision from \"{source}\"", + "Imported {article} with {count} revisions from \"{source}\"", + change["logparams"]["count"]).format( + article=sanitize_to_markdown(change["title"]), count=change["logparams"]["count"], + source=sanitize_to_markdown(change["logparams"]["interwiki_title"])) + return embed @formatter.compact(event="import/interwiki", mode="compact") def compact_import_interwiki(ctx, change): - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - author, author_url = compact_author(ctx, change) - source_link = clean_link(create_article_path(change["logparams"]["interwiki_title"])) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = ngettext( - "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision from [{source}]({source_url}){comment}", - "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revisions from [{source}]({source_url}){comment}", - change["logparams"]["count"]).format( - author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, - count=change["logparams"]["count"], source=sanitize_to_markdown(change["logparams"]["interwiki_title"]), source_url=source_link, - comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + author, author_url = compact_author(ctx, change) + source_link = clean_link(create_article_path(change["logparams"]["interwiki_title"])) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = ngettext( + "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision from [{source}]({source_url}){comment}", + "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revisions from [{source}]({source_url}){comment}", + change["logparams"]["count"]).format( + author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, + count=change["logparams"]["count"], source=sanitize_to_markdown(change["logparams"]["interwiki_title"]), + source_url=source_link, + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # rights/rights - Assigning rights groups def get_changed_groups(change: dict, separator: str): - """Creates strings comparing the changes between the user groups for the user""" - old_groups = {_(x) for x in change["logparams"]["oldgroups"]} # translate all groups and pull them into a set - new_groups = {_(x) for x in change["logparams"]["newgroups"]} - added = separator.join(["+ " + x for x in new_groups-old_groups]) # add + before every string and join them with separator - removed = separator.join(["- " + x for x in old_groups-new_groups]) - return added, removed + """Creates strings comparing the changes between the user groups for the user""" + old_groups = {_(x) for x in change["logparams"]["oldgroups"]} # translate all groups and pull them into a set + new_groups = {_(x) for x in change["logparams"]["newgroups"]} + added = separator.join( + ["+ " + x for x in new_groups - old_groups]) # add + before every string and join them with separator + removed = separator.join(["- " + x for x in old_groups - new_groups]) + return added, removed @formatter.embed(event="rights/rights", mode="embed") def embed_rights_rights(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) - embed["url"] = create_article_path(sanitize_to_url("User:{}".format(change["title"].split(":")[1]))) - if ctx.event == "rights/rights": - embed["title"] = _("Changed group membership for {target}").format(target=change["title"].split(":")[1]) - else: - author_url = "" - embed.set_author(_("System"), author_url) - embed["title"] = _("{target} got autopromoted to a new usergroup").format( - target=change["title"].split(":")[1]) - # if len(change["logparams"]["oldgroups"]) < len(change["logparams"]["newgroups"]): - # embed["thumbnail"]["url"] = "https://i.imgur.com/WnGhF5g.gif" - added, removed = get_changed_groups(change, "\n") - reason = ": {desc}".format(desc=ctx.parsedcomment) if change.get("parsedcomment", None) else "" - embed["description"] = _("{reason}\n{added}{linebreak}{removed}").format(added=added, removed=removed, reason=reason, - linebreak="\n" if added else "") - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change, set_desc=False) + embed["url"] = create_article_path(sanitize_to_url("User:{}".format(change["title"].split(":")[1]))) + if ctx.event == "rights/rights": + embed["title"] = _("Changed group membership for {target}").format(target=change["title"].split(":")[1]) + else: + author_url = "" + embed.set_author(_("System"), author_url) + embed["title"] = _("{target} got autopromoted to a new usergroup").format( + target=change["title"].split(":")[1]) + # if len(change["logparams"]["oldgroups"]) < len(change["logparams"]["newgroups"]): + # embed["thumbnail"]["url"] = "https://i.imgur.com/WnGhF5g.gif" + added, removed = get_changed_groups(change, "\n") + reason = ": {desc}".format(desc=ctx.parsedcomment) if change.get("parsedcomment", None) else "" + embed["description"] = _("{reason}\n{added}{linebreak}{removed}").format(added=added, removed=removed, + reason=reason, + linebreak="\n" if added else "") + return embed @formatter.compact(event="rights/rights") def compact_rights_rights(ctx, change): - link = clean_link(create_article_path(sanitize_to_url("User:{user}".format(user=change["title"].split(":")[1])))) - added, removed = get_changed_groups(change, ", ") - author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - if ctx.event == "rights/rights": - content = _( - "[{author}]({author_url}) changed group membership for [{target}]({target_url}) {added} {removed}{comment}").format( - author=author, author_url=author_url, target=change["title"].split(":")[1], target_url=link, - added=added, removed=removed, comment=parsed_comment) - else: - content = _("{author} autopromoted [{target}]({target_url}) {added} {removed}{comment}").format( - author=_("System"), author_url=author_url, target=change["title"].split(":")[1], target_url=link, - added=added, removed=removed, comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + link = clean_link(create_article_path(sanitize_to_url("User:{user}".format(user=change["title"].split(":")[1])))) + added, removed = get_changed_groups(change, ", ") + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + if ctx.event == "rights/rights": + content = _( + "[{author}]({author_url}) changed group membership for [{target}]({target_url}) {added} {removed}{comment}").format( + author=author, author_url=author_url, target=change["title"].split(":")[1], target_url=link, + added=added, removed=removed, comment=parsed_comment) + else: + content = _("{author} autopromoted [{target}]({target_url}) {added} {removed}{comment}").format( + author=_("System"), author_url=author_url, target=change["title"].split(":")[1], target_url=link, + added=added, removed=removed, comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # merge/merge - Merging histories of two pages @formatter.embed(event="merge/merge", mode="embed") def embed_merge_merge(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Merged revision histories of {article} into {dest}").format(article=sanitize_to_markdown(change["title"]), - dest=sanitize_to_markdown(change["logparams"][ - "dest_title"])) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Merged revision histories of {article} into {dest}").format( + article=sanitize_to_markdown(change["title"]), + dest=sanitize_to_markdown(change["logparams"][ + "dest_title"])) + return embed @formatter.compact(event="merge/merge") def compact_merge_merge(ctx, change): - author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - link_dest = clean_link(create_article_path(sanitize_to_url(change["logparams"]["dest_title"]))) - content = _( - "[{author}]({author_url}) merged revision histories of [{article}]({article_url}) into [{dest}]({dest_url}){comment}").format( - author=author, author_url=author_url, article=change["title"], article_url=link, dest_url=link_dest, - dest=change["logparams"]["dest_title"], comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + link_dest = clean_link(create_article_path(sanitize_to_url(change["logparams"]["dest_title"]))) + content = _( + "[{author}]({author_url}) merged revision histories of [{article}]({article_url}) into [{dest}]({dest_url}){comment}").format( + author=author, author_url=author_url, article=change["title"], article_url=link, dest_url=link_dest, + dest=change["logparams"]["dest_title"], comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # newusers/autocreate - Auto creation of user account @formatter.embed(event="newusers/autocreate", mode="embed") def embed_newusers_autocreate(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Created account automatically") - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Created account automatically") + return embed @formatter.compact(event="newusers/autocreate") def compact_newusers_autocreate(ctx, change): - author, author_url = compact_author(ctx, change) - content = _("Account [{author}]({author_url}) was created automatically").format(author=author, author_url=author_url) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + content = _("Account [{author}]({author_url}) was created automatically").format(author=author, + author_url=author_url) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # newusers/create - Auto creation of user account @formatter.embed(event="newusers/create", mode="embed") def embed_newusers_create(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Created account") - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Created account") + return embed @formatter.compact(event="newusers/create") def compact_newusers_create(ctx, change): - author, author_url = compact_author(ctx, change) - content = _("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + content = _("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # newusers/autocreate - Auto creation of user account + @formatter.embed(event="newusers/create2", mode="embed") def embed_newusers_create2(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Created account {article}").format(article=change["title"]) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Created account {article}").format(article=change["title"]) + return embed + @formatter.compact(event="newusers/create2") def compact_newusers_create2(ctx, change): - author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - content = _("Account [{article}]({article_url}) was created by [{author}]({author_url}){comment}").format(article=change["title"], article_url=link, author=author, author_url=author_url, comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("Account [{article}]({article_url}) was created by [{author}]({author_url}){comment}").format( + article=change["title"], article_url=link, author=author, author_url=author_url, comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # newusers/byemail - Creation of account by email @formatter.embed(event="newusers/byemail", mode="embed") def embed_newusers_byemail(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Created account {article} and password was sent by email").format(article=sanitize_to_markdown(change["title"])) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Created account {article} and password was sent by email").format( + article=sanitize_to_markdown(change["title"])) + return embed @formatter.compact(event="newusers/byemail") def compact_newusers_byemail(ctx, change): - author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - content = _("Account [{article}]({article_url}) was created by [{author}]({author_url}) and password was sent by email{comment}").format(article=change["title"], article_url=link, author=author, author_url=author_url, comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _( + "Account [{article}]({article_url}) was created by [{author}]({author_url}) and password was sent by email{comment}").format( + article=change["title"], article_url=link, author=author, author_url=author_url, comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # newusers/newusers - New users @formatter.embed(event="newusers/newusers", mode="embed") def embed_newusers_newusers(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path("User:{}".format(change["user"].replace(" ", "_"))) - embed["title"] = _("Created account") - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path("User:{}".format(change["user"].replace(" ", "_"))) + embed["title"] = _("Created account") + return embed @formatter.compact(event="newusers/newusers") def compact_newusers_newusers(ctx, change): - author, author_url = compact_author(ctx, change) - content = _("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + content = _("Account [{author}]({author_url}) was created").format(author=author, author_url=author_url) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # interwiki/iw_add - Added entry to interwiki table @formatter.embed(event="interwiki/iw_add", mode="embed") def embed_interwiki_iw_add(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) - embed["url"] = create_article_path("Special:Interwiki") - embed["title"] = _("Added an entry to the interwiki table") - embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, - prefix=change["logparams"]['0'], - website=change["logparams"]['1']) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change, set_desc=False) + embed["url"] = create_article_path("Special:Interwiki") + embed["title"] = _("Added an entry to the interwiki table") + embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, + prefix=change["logparams"]['0'], + website=change["logparams"]['1']) + return embed @formatter.compact(event="interwiki/iw_add") def compact_interwiki_iw_add(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path("Special:Interwiki")) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _("[{author}]({author_url}) added an entry to the [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( - author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], - website=change["logparams"]['1'], table_url=link) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path("Special:Interwiki")) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _( + "[{author}]({author_url}) added an entry to the [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( + author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], + website=change["logparams"]['1'], table_url=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # interwiki/iw_edit - Editing interwiki entry @formatter.embed(event="interwiki/iw_edit", mode="embed") def embed_interwiki_iw_edit(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) - embed["url"] = create_article_path("Special:Interwiki") - embed["title"] = _("Edited an entry in interwiki table") - embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, - prefix=change["logparams"]['0'], - website=change["logparams"]['1']) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change, set_desc=False) + embed["url"] = create_article_path("Special:Interwiki") + embed["title"] = _("Edited an entry in interwiki table") + embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, + prefix=change["logparams"]['0'], + website=change["logparams"]['1']) + return embed @formatter.compact(event="interwiki/iw_edit") def compact_interwiki_iw_edit(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path("Special:Interwiki")) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _( - "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( - author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], - website=change["logparams"]['1'], table_url=link) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path("Special:Interwiki")) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _( + "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( + author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], + website=change["logparams"]['1'], table_url=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) # interwiki/iw_delete - Deleting interwiki entry @@ -988,229 +1047,250 @@ def compact_interwiki_iw_edit(ctx, change): @formatter.embed(event="interwiki/iw_delete", mode="embed") def embed_interwiki_iw_delete(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) - embed["url"] = create_article_path("Special:Interwiki") - embed["title"] = _("Deleted an entry in interwiki table") - embed["description"] = _("Prefix: {prefix} | {desc}").format(desc=ctx.parsedcomment, prefix=change["logparams"]['0']) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change, set_desc=False) + embed["url"] = create_article_path("Special:Interwiki") + embed["title"] = _("Deleted an entry in interwiki table") + embed["description"] = _("Prefix: {prefix} | {desc}").format(desc=ctx.parsedcomment, + prefix=change["logparams"]['0']) + return embed @formatter.compact(event="interwiki/iw_delete") def compact_interwiki_iw_delete(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path("Special:Interwiki")) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _("[{author}]({author_url}) deleted an entry in [interwiki table]({table_url}){desc}").format(author=author, - author_url=author_url, - table_url=link, - desc=parsed_comment) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path("Special:Interwiki")) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) deleted an entry in [interwiki table]({table_url}){desc}").format( + author=author, + author_url=author_url, + table_url=link, + desc=parsed_comment) + + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) # contentmodel/change - Changing the content model of a page @formatter.embed(event="contentmodel/change", mode="embed") def embed_contentmodel_change(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Changed the content model of the page {article}").format(article=sanitize_to_markdown(change["title"])) - embed["description"] = _("Model changed from {old} to {new}: {reason}").format(old=change["logparams"]["oldmodel"], - new=change["logparams"]["newmodel"], - reason=ctx.parsedcomment) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change, set_desc=False) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Changed the content model of the page {article}").format( + article=sanitize_to_markdown(change["title"])) + embed["description"] = _("Model changed from {old} to {new}: {reason}").format(old=change["logparams"]["oldmodel"], + new=change["logparams"]["newmodel"], + reason=ctx.parsedcomment) + return embed @formatter.compact(event="contentmodel/change") def compact_contentmodel_change(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _( - "[{author}]({author_url}) changed the content model of the page [{article}]({article_url}) from {old} to {new}{comment}").format( - author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, - old=change["logparams"]["oldmodel"], - new=change["logparams"]["newmodel"], comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _( + "[{author}]({author_url}) changed the content model of the page [{article}]({article_url}) from {old} to {new}{comment}").format( + author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, + old=change["logparams"]["oldmodel"], + new=change["logparams"]["newmodel"], comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # contentmodel/new - Creating a page with non-default content model @formatter.embed(event="contentmodel/new", mode="embed") def embed_contentmodel_new(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Created the page {article} using a non-default content model").format(article=sanitize_to_markdown(change["title"])) - embed["description"] = _("Created with model {new}: {reason}").format(new=change["logparams"]["newmodel"], reason=ctx.parsedcomment) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change, set_desc=False) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Created the page {article} using a non-default content model").format( + article=sanitize_to_markdown(change["title"])) + embed["description"] = _("Created with model {new}: {reason}").format(new=change["logparams"]["newmodel"], + reason=ctx.parsedcomment) + return embed @formatter.compact(event="contentmodel/new") def compact_contentmodel_new(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _( - "[{author}]({author_url}) created the page [{article}]({article_url}) using a non-default content model {new}{comment}").format( - author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, - new=change["logparams"]["newmodel"], comment=parsed_comment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _( + "[{author}]({author_url}) created the page [{article}]({article_url}) using a non-default content model {new}{comment}").format( + author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, + new=change["logparams"]["newmodel"], comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # managetags/create - Creating log tags @formatter.embed(event="managetags/create", mode="embed") def embed_managetags_create(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - ctx.client.refresh_internal_data() - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Created the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + ctx.client.refresh_internal_data() + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Created the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) + return embed @formatter.compact(event="managetags/create") def compact_managetags_create(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - ctx.client.refresh_internal_data() - content = _("[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, - author_url=author_url, - tag= - sanitize_to_markdown(change["logparams"][ - "tag"]), - tag_url=link, - comment=ctx.parsedcomment) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + ctx.client.refresh_internal_data() + content = _("[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, + author_url=author_url, + tag= + sanitize_to_markdown( + change[ + "logparams"][ + "tag"]), + tag_url=link, + comment=ctx.parsedcomment) + + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) # managetags/delete - Deleting a tag @formatter.embed(event="managetags/delete", mode="embed") def embed_managetags_delete(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - ctx.client.refresh_internal_data() - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Deleted the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) - if change["logparams"]["count"] > 0: - embed.add_field(_('Removed from'), ngettext("{} revision or log entry", "{} revisions and/or log entries", - change["logparams"]["count"]).format(change["logparams"]["count"])) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + ctx.client.refresh_internal_data() + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Deleted the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) + if change["logparams"]["count"] > 0: + embed.add_field(_('Removed from'), ngettext("{} revision or log entry", "{} revisions and/or log entries", + change["logparams"]["count"]).format(change["logparams"]["count"])) + return embed @formatter.compact(event="managetags/delete") def compact_managetags_delete(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - ctx.client.refresh_internal_data() - if change["logparams"]["count"] == 0: - content = _("[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, - author_url=author_url, - tag=sanitize_to_markdown(change[ - "logparams"][ - "tag"]), - tag_url=link, - comment=ctx.parsedcomment) - else: - content = ngettext( - "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed it from {count} revision or log entry{comment}", - "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed it from {count} revisions and/or log entries{comment}", - change["logparams"]["count"]).format(author=author, author_url=author_url, tag=sanitize_to_markdown(change["logparams"]["tag"]), - tag_url=link, count=change["logparams"]["count"], - comment=ctx.parsedcomment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + ctx.client.refresh_internal_data() + if change["logparams"]["count"] == 0: + content = _("[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, + author_url=author_url, + tag=sanitize_to_markdown( + change[ + "logparams"][ + "tag"]), + tag_url=link, + comment=ctx.parsedcomment) + else: + content = ngettext( + "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed it from {count} revision or log entry{comment}", + "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed it from {count} revisions and/or log entries{comment}", + change["logparams"]["count"]).format(author=author, author_url=author_url, + tag=sanitize_to_markdown(change["logparams"]["tag"]), + tag_url=link, count=change["logparams"]["count"], + comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # managetags/activate - Activating a tag @formatter.embed(event="managetags/activate", mode="embed") def embed_managetags_activate(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Activated the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Activated the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) + return embed @formatter.compact(event="managetags/activate") def compact_managetags_activate(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - content = _("[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, - author_url=author_url, - tag=sanitize_to_markdown(change[ - "logparams"][ - "tag"]), - tag_url=link, - comment=ctx.parsedcomment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, + author_url=author_url, + tag=sanitize_to_markdown( + change[ + "logparams"][ + "tag"]), + tag_url=link, + comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # managetags/deactivate - Deactivating a tag @formatter.embed(event="managetags/deactivate", mode="embed") def embed_managetags_deactivate(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Deactivated the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Deactivated the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) + return embed @formatter.compact(event="managetags/deactivate") def compact_managetags_deactivate(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - content = _("[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, - author_url=author_url, - tag=sanitize_to_markdown(change[ - "logparams"][ - "tag"]), - tag_url=link, - comment=ctx.parsedcomment) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, + author_url=author_url, + tag=sanitize_to_markdown( + change[ + "logparams"][ + "tag"]), + tag_url=link, + comment=ctx.parsedcomment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # renameuser/renameuser - Renaming a user @formatter.embed(event="renameuser/renameuser") def embed_renameuser_renameuser(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - edits = change["logparams"]["edits"] - if edits > 0: - embed["title"] = ngettext("Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"", - "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"", edits).format( - old_name=sanitize_to_markdown(change["logparams"]["olduser"]), edits=edits, new_name=sanitize_to_markdown(change["logparams"]["newuser"])) - else: - embed["title"] = _("Renamed user \"{old_name}\" to \"{new_name}\"").format( - old_name=sanitize_to_markdown(change["logparams"]["olduser"]), new_name=sanitize_to_markdown(change["logparams"]["newuser"])) - embed["url"] = create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"])) - return embed + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + edits = change["logparams"]["edits"] + if edits > 0: + embed["title"] = ngettext("Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"", + "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"", edits).format( + old_name=sanitize_to_markdown(change["logparams"]["olduser"]), edits=edits, + new_name=sanitize_to_markdown(change["logparams"]["newuser"])) + else: + embed["title"] = _("Renamed user \"{old_name}\" to \"{new_name}\"").format( + old_name=sanitize_to_markdown(change["logparams"]["olduser"]), + new_name=sanitize_to_markdown(change["logparams"]["newuser"])) + embed["url"] = create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"])) + return embed @formatter.compact(event="renameuser/renameuser") def compact_renameuser_renameuser(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"]))) - edits = change["logparams"]["edits"] - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - if edits > 0: - content = ngettext( - "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to [{new_name}]({link}){comment}", - "[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to [{new_name}]({link}){comment}", - edits).format( - author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), edits=edits, - new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment - ) - else: - content = _("[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link}){comment}").format( - author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), - new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment - ) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"]))) + edits = change["logparams"]["edits"] + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + if edits > 0: + content = ngettext( + "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to [{new_name}]({link}){comment}", + "[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to [{new_name}]({link}){comment}", + edits).format( + author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), + edits=edits, + new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment + ) + else: + content = _("[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link}){comment}").format( + author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), + new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) From ceefcfb0a164a00a6cb9d7d4d76913ee366fcee4 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 9 May 2021 21:16:24 +0200 Subject: [PATCH 066/173] Added discussions formatter --- extensions/base/__init__.py | 5 +- extensions/base/discussions.py | 368 +++++++++++++++++++++++++++++++++ src/api/context.py | 6 +- src/discussion_formatters.py | 250 +--------------------- src/discussions.py | 5 +- 5 files changed, 391 insertions(+), 243 deletions(-) create mode 100644 extensions/base/discussions.py diff --git a/extensions/base/__init__.py b/extensions/base/__init__.py index 6ad4903..9624133 100644 --- a/extensions/base/__init__.py +++ b/extensions/base/__init__.py @@ -17,4 +17,7 @@ import extensions.base.mediawiki import extensions.base.abusefilter import extensions.base.managewiki import extensions.base.cargo -import extensions.base.datadump \ No newline at end of file +import extensions.base.datadump +import extensions.base.sprite +import extensions.base.translate +import extensions.base.discussions \ No newline at end of file diff --git a/extensions/base/discussions.py b/extensions/base/discussions.py new file mode 100644 index 0000000..44a97fe --- /dev/null +++ b/extensions/base/discussions.py @@ -0,0 +1,368 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +# Discussions - Custom Fandom technology which apparently doesn't have any documentation or homepage, not even open-source, go figure + +import json +import datetime, logging +import gettext +from urllib.parse import quote_plus + +from src.configloader import settings +from src.api.util import create_article_path, clean_link, sanitize_to_markdown +from src.api.context import Context +from src.discord.queue import send_to_discord +from src.discord.message import DiscordMessage, DiscordMessageMetadata +from src.api import formatter +from src.i18n import discussion_formatters + +_ = discussion_formatters.gettext + + +logger = logging.getLogger("rcgcdw.discussion_formatter") + + +class DiscussionsFromHellParser: + """This class converts fairly convoluted Fandom jsonModal of a discussion post into Markdown formatted usable thing. + Takes string, returns string. Kudos to MarkusRost for allowing me to implement this formatter based on his code in Wiki-Bot.""" + + def __init__(self, post): + self.post = post + self.jsonModal = json.loads(post.get("jsonModel", "{}")) + self.markdown_text = "" + self.item_num = 1 + self.image_last = None + + def parse(self) -> str: + """Main parsing logic""" + self.parse_content(self.jsonModal["content"]) + if len(self.markdown_text) > 2000: + self.markdown_text = self.markdown_text[0:2000] + "…" + return self.markdown_text + + def parse_content(self, content, ctype=None): + self.image_last = None + for item in content: + if ctype == "bulletList": + self.markdown_text += "\t• " + if ctype == "orderedList": + self.markdown_text += "\t{num}. ".format(num=self.item_num) + self.item_num += 1 + if item["type"] == "text": + if "marks" in item: + prefix, suffix = self.convert_marks(item["marks"]) + self.markdown_text = "{old}{pre}{text}{suf}".format(old=self.markdown_text, pre=prefix, + text=sanitize_to_markdown(item["text"]), + suf=suffix) + else: + if ctype == "code_block": + self.markdown_text += item["text"] # ignore formatting on preformatted text which cannot have additional formatting anyways + else: + self.markdown_text += sanitize_to_markdown(item["text"]) + elif item["type"] == "paragraph": + if "content" in item: + self.parse_content(item["content"], item["type"]) + self.markdown_text += "\n" + elif item["type"] == "openGraph": + if not item["attrs"]["wasAddedWithInlineLink"]: + self.markdown_text = "{old}{link}\n".format(old=self.markdown_text, link=item["attrs"]["url"]) + elif item["type"] == "image": + try: + logger.debug(item["attrs"]["id"]) + if item["attrs"]["id"] is not None: + self.markdown_text = "{old}{img_url}\n".format(old=self.markdown_text, img_url= + self.post["_embedded"]["contentImages"][int(item["attrs"]["id"])]["url"]) + self.image_last = self.post["_embedded"]["contentImages"][int(item["attrs"]["id"])]["url"] + except (IndexError, ValueError): + logger.warning("Image {} not found.".format(item["attrs"]["id"])) + logger.debug(self.markdown_text) + elif item["type"] == "code_block": + self.markdown_text += "```\n" + if "content" in item: + self.parse_content(item["content"], item["type"]) + self.markdown_text += "\n```\n" + elif item["type"] == "bulletList": + if "content" in item: + self.parse_content(item["content"], item["type"]) + elif item["type"] == "orderedList": + self.item_num = 1 + if "content" in item: + self.parse_content(item["content"], item["type"]) + elif item["type"] == "listItem": + self.parse_content(item["content"], item["type"]) + + @staticmethod + def convert_marks(marks): + prefix = "" + suffix = "" + for mark in marks: + if mark["type"] == "mention": + prefix += "[" + suffix = "]({wiki}f/u/{userid}){suffix}".format(wiki=settings["fandom_discussions"]["wiki_url"], + userid=mark["attrs"]["userId"], suffix=suffix) + elif mark["type"] == "strong": + prefix += "**" + suffix = "**{suffix}".format(suffix=suffix) + elif mark["type"] == "link": + prefix += "[" + suffix = "]({link}){suffix}".format(link=mark["attrs"]["href"], suffix=suffix) + elif mark["type"] == "em": + prefix += "_" + suffix = "_" + suffix + return prefix, suffix + + +def common_discussions(post: dict, embed: DiscordMessage): + """A method to setup embeds with common info shared between all types of discussion posts""" + if settings["fandom_discussions"]["appearance"]["embed"]["show_content"]: + if post.get("jsonModel") is not None: + npost = DiscussionsFromHellParser(post) + embed["description"] = npost.parse() + if npost.image_last: + embed["image"]["url"] = npost.image_last + embed["description"] = embed["description"].replace(npost.image_last, "") + else: # Fallback when model is not available + embed["description"] = post.get("rawContent", "") + embed["footer"]["text"] = post["forumName"] + embed["timestamp"] = datetime.datetime.fromtimestamp(post["creationDate"]["epochSecond"], + tz=datetime.timezone.utc).isoformat() + +# discussion/forum - Discussions on the "forum" available via "Discuss" button + +@formatter.embed(event="discussion/forum") +def embed_discussion_forum(ctx: Context, post: dict): + embed = DiscordMessage("embed", "discussion", settings["fandom_discussions"]["webhookURL"]) + common_discussions(post, embed) + author = _("unknown") # Fail safe + if post["createdBy"]["name"]: + author = post["createdBy"]["name"] + embed.set_author(author, "{url}f/u/{creatorId}".format(url=settings["fandom_discussions"]["wiki_url"], + creatorId=post["creatorId"]), + icon_url=post["createdBy"]["avatarUrl"]) + if not post["isReply"]: + embed["url"] = "{url}f/p/{threadId}".format(url=settings["fandom_discussions"]["wiki_url"], + threadId=post["threadId"]) + embed["title"] = _("Created \"{title}\"").format(title=post["title"]) + thread_funnel = post.get("funnel") + if thread_funnel == "POLL": + embed.event_type = "discussion/forum/poll" + embed["title"] = _("Created a poll \"{title}\"").format(title=post["title"]) + if settings["fandom_discussions"]["appearance"]["embed"]["show_content"]: + poll = post["poll"] + image_type = False + if poll["answers"][0]["image"] is not None: + image_type = True + for num, option in enumerate(poll["answers"]): + embed.add_field(option["text"] if image_type is True else _("Option {}").format(num + 1), + option["text"] if image_type is False else _( + "__[View image]({image_url})__").format(image_url=option["image"]["url"]), + inline=True) + elif thread_funnel == "QUIZ": + embed.event_type = "discussion/forum/quiz" + embed["title"] = _("Created a quiz \"{title}\"").format(title=post["title"]) + if settings["fandom_discussions"]["appearance"]["embed"]["show_content"]: + quiz = post["_embedded"]["quizzes"][0] + embed["description"] = quiz["title"] + if quiz["image"] is not None: + embed["image"]["url"] = quiz["image"] + elif thread_funnel == "TEXT": + embed.event_type = "discussion/forum/post" + else: + logger.warning( + "The type of {} is an unknown discussion post type. Please post an issue on the project page to have it added https://gitlab.com/piotrex43/RcGcDw/-/issues.".format( + thread_funnel)) + embed.event_type = "unknown" + if post["_embedded"]["thread"][0]["tags"]: + tag_displayname = [] + for tag in post["_embedded"]["thread"][0]["tags"]: + tag_displayname.append("[{title}]({url})".format(title=tag["articleTitle"], url=create_article_path( + quote_plus(tag["articleTitle"].replace(" ", "_"), "/:?=&")))) + if len(", ".join(tag_displayname)) > 1000: + embed.add_field(_("Tags"), _("{} tags").format(len(post["_embedded"]["thread"][0]["tags"]))) + else: + embed.add_field(_("Tags"), ", ".join(tag_displayname)) + else: + embed.event_type = "discussion/forum/reply" + embed["title"] = _("Replied to \"{title}\"").format(title=post["_embedded"]["thread"][0]["title"]) + embed["url"] = "{url}f/p/{threadId}/r/{postId}".format(url=settings["fandom_discussions"]["wiki_url"], + threadId=post["threadId"], postId=post["id"]) + return embed + + +@formatter.compact(event="discussion/forum") +def compact_discussion_forum(ctx: Context, post: dict): + message = None + author = _("unknown") # Fail safe + if post["createdBy"]["name"]: + author = post["createdBy"]["name"] + author_url = "<{url}f/u/{creatorId}>".format(url=settings["fandom_discussions"]["wiki_url"], + creatorId=post["creatorId"]) + if not post["isReply"]: + thread_funnel = post.get("funnel") + msg_text = _("[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in {forumName}") + if thread_funnel == "POLL": + event_type = "discussion/forum/poll" + msg_text = _("[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in {forumName}") + elif thread_funnel == "QUIZ": + event_type = "discussion/forum/quiz" + msg_text = _("[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in {forumName}") + elif thread_funnel == "TEXT": + event_type = "discussion/forum/post" + else: + logger.warning( + "The type of {} is an unknown discussion post type. Please post an issue on the project page to have it added https://gitlab.com/piotrex43/RcGcDw/-/issues.".format( + thread_funnel)) + event_type = "unknown" + message = msg_text.format(author=author, author_url=author_url, title=post["title"], + url=settings["fandom_discussions"]["wiki_url"], threadId=post["threadId"], + forumName=post["forumName"]) + else: + event_type = "discussion/forum/reply" + message = _( + "[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}").format( + author=author, author_url=author_url, url=settings["fandom_discussions"]["wiki_url"], + threadId=post["threadId"], postId=post["id"], title=post["_embedded"]["thread"][0]["title"], + forumName=post["forumName"]) + return DiscordMessage("compact", event_type, ctx.webhook_url, content=message) + +# discussion/wall - Wall posts/replies + + +def compact_author_discussions(post: dict): + """A common function for a few discussion related foramtters, it's formatting author's name and URL to their profile""" + author = _("unknown") # Fail safe + if post["creatorIp"]: + author = post["creatorIp"][1:] if settings.get("hide_ips", False) is False else _("Unregistered user") + author_url = "<{url}wiki/Special:Contributions{creatorIp}>".format(url=settings["fandom_discussions"]["wiki_url"], + creatorIp=post["creatorIp"]) + else: + if post["createdBy"]["name"]: + author = post["createdBy"]["name"] + author_url = clean_link(create_article_path("User:{user}".format(user=author))) + else: + author_url = "<{url}f/u/{creatorId}>".format(url=settings["fandom_discussions"]["wiki_url"], + creatorId=post["creatorId"]) + return author, author_url + + +def embed_author_discussions(post: dict, embed: DiscordMessage): + author = _("unknown") # Fail safe + if post["creatorIp"]: + author = post["creatorIp"][1:] + embed.set_author(author if settings.get("hide_ips", False) is False else _("Unregistered user"), + "{url}wiki/Special:Contributions{creatorIp}".format( + url=settings["fandom_discussions"]["wiki_url"], creatorIp=post["creatorIp"])) + else: + if post["createdBy"]["name"]: + author = post["createdBy"]["name"] + embed.set_author(author, "{url}wiki/User:{creator}".format(url=settings["fandom_discussions"]["wiki_url"], + creator=author.replace(" ", "_")), + icon_url=post["createdBy"]["avatarUrl"]) + else: + embed.set_author(author, "{url}f/u/{creatorId}".format(url=settings["fandom_discussions"]["wiki_url"], + creatorId=post["creatorId"]), + icon_url=post["createdBy"]["avatarUrl"]) + + +@formatter.embed(event="discussion/wall") +def embed_discussion_wall(ctx: Context, post: dict): + embed = DiscordMessage("embed", "discussion", settings["fandom_discussions"]["webhookURL"]) + common_discussions(post, embed) + embed_author_discussions(post, embed) + user_wall = _("unknown") # Fail safe + if post["forumName"].endswith(' Message Wall'): + user_wall = post["forumName"][:-13] + if not post["isReply"]: + embed.event_type = "discussion/wall/post" + embed["url"] = "{url}wiki/Message_Wall:{user_wall}?threadId={threadId}".format( + url=settings["fandom_discussions"]["wiki_url"], user_wall=quote_plus(user_wall.replace(" ", "_")), + threadId=post["threadId"]) + embed["title"] = _("Created \"{title}\" on {user}'s Message Wall").format(title=post["title"], user=user_wall) + else: + embed.event_type = "discussion/wall/reply" + embed["url"] = "{url}wiki/Message_Wall:{user_wall}?threadId={threadId}#{replyId}".format( + url=settings["fandom_discussions"]["wiki_url"], user_wall=quote_plus(user_wall.replace(" ", "_")), + threadId=post["threadId"], replyId=post["id"]) + embed["title"] = _("Replied to \"{title}\" on {user}'s Message Wall").format( + title=post["_embedded"]["thread"][0]["title"], user=user_wall) + return embed + + +@formatter.compact(event="discussion/wall") +def compact_discussion_wall(ctx: Context, post: dict): + author, author_url = compact_author_discussions(post) + user_wall = _("unknown") # Fail safe + if post["forumName"].endswith(' Message Wall'): + user_wall = post["forumName"][:-13] + if not post["isReply"]: + event_type = "discussion/wall/post" + message = _( + "[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/Message_Wall:{user_wall}>)").format( + author=author, author_url=author_url, title=post["title"], url=settings["fandom_discussions"]["wiki_url"], + user=user_wall, user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"]) + else: + event_type = "discussion/wall/reply" + message = _( + "[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/Message_Wall:{user_wall}>)").format( + author=author, author_url=author_url, url=settings["fandom_discussions"]["wiki_url"], + title=post["_embedded"]["thread"][0]["title"], user=user_wall, + user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"], replyId=post["id"]) + return DiscordMessage("compact", event_type, ctx.webhook_url, content=message) + +# discussion/article_comment - Article comments + + +@formatter.embed(event="discussion/article_comment") +def embed_discussion_article_comment(ctx: Context, post: dict): + embed = DiscordMessage("embed", "discussion", settings["fandom_discussions"]["webhookURL"]) + common_discussions(post, embed) + embed_author_discussions(post, embed) + article_paths = ctx.comment_page + if article_paths is None: + article_page = {"title": _("unknown"), "fullUrl": settings["fandom_discussions"]["wiki_url"]} # No page known + if not post["isReply"]: + embed.event_type = "discussion/comment/post" + embed["url"] = "{url}?commentId={commentId}".format(url=article_paths["fullUrl"], commentId=post["threadId"]) + embed["title"] = _("Commented on {article}").format(article=article_paths["title"]) + else: + embed.event_type = "discussion/comment/reply" + embed["url"] = "{url}?commentId={commentId}&replyId={replyId}".format(url=article_paths["fullUrl"], + commentId=post["threadId"], + replyId=post["id"]) + embed["title"] = _("Replied to a comment on {article}").format(article=article_paths["title"]) + embed["footer"]["text"] = article_paths["title"] + return embed + + +@formatter.compact(event="discussion/article_comment") +def compact_discussion_article_comment(ctx: Context, post: dict): + author, author_url = compact_author_discussions(post) + article_paths = ctx.comment_page + if article_paths is None: + article_paths = {"title": _("unknown"), "fullUrl": settings["fandom_discussions"]["wiki_url"]} # No page known + article_paths["fullUrl"] = article_paths["fullUrl"].replace(")", "\)").replace("()", "\(") + if not post["isReply"]: + event_type = "discussion/comment/post" + message = _( + "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) on [{article}](<{url}>)").format( + author=author, author_url=author_url, url=article_paths["fullUrl"], article=article_paths["title"], + commentId=post["threadId"]) + else: + event_type = "discussion/comment/reply" + message = _( + "[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on [{article}](<{url}>)").format( + author=author, author_url=author_url, url=article_paths["fullUrl"], article=article_paths["title"], + commentId=post["threadId"], replyId=post["id"]) + return DiscordMessage("compact", event_type, ctx.webhook_url, content=message) \ No newline at end of file diff --git a/src/api/context.py b/src/api/context.py index 13aa7fe..f921223 100644 --- a/src/api/context.py +++ b/src/api/context.py @@ -26,9 +26,13 @@ class Context: self.webhook_url = webhook_url self.message_type = message_type self.event = None + self.comment_page = None def set_categories(self, cats): self.categories = cats def set_parsedcomment(self, parsedcomment: str): - self.parsedcomment = parsedcomment \ No newline at end of file + self.parsedcomment = parsedcomment + + def set_comment_page(self, page): + self.comment_page = page \ No newline at end of file diff --git a/src/discussion_formatters.py b/src/discussion_formatters.py index 61c86de..1465263 100644 --- a/src/discussion_formatters.py +++ b/src/discussion_formatters.py @@ -13,86 +13,23 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . -import datetime, logging -import json -import gettext -from urllib.parse import quote_plus -from src.configloader import settings -from src.api.util import escape_formatting, create_article_path, clean_link -from src.discord.queue import send_to_discord -from src.discord.message import DiscordMessage, DiscordMessageMetadata -from src.i18n import discussion_formatters - -_ = discussion_formatters.gettext - - -discussion_logger = logging.getLogger("rcgcdw.discussion_formatter") def compact_formatter(post_type, post, article_paths): """Compact formatter for Fandom discussions.""" message = None - author = _("unknown") # Fail safe + if post_type == "FORUM": - if post["createdBy"]["name"]: - author = post["createdBy"]["name"] - author_url = "<{url}f/u/{creatorId}>".format(url=settings["fandom_discussions"]["wiki_url"], creatorId=post["creatorId"]) - elif post["creatorIp"]: - author = post["creatorIp"][1:] if settings.get("hide_ips", False) is False else _("Unregistered user") - author_url = "<{url}wiki/Special:Contributions{creatorIp}>".format(url=settings["fandom_discussions"]["wiki_url"], creatorIp=post["creatorIp"]) - else: - if post["createdBy"]["name"]: - author = post["createdBy"]["name"] - author_url = clean_link(create_article_path("User:{user}".format(user=author))) - else: - author_url = "<{url}f/u/{creatorId}>".format(url=settings["fandom_discussions"]["wiki_url"], creatorId=post["creatorId"]) + + event_type = "discussion" if post_type == "FORUM": - if not post["isReply"]: - thread_funnel = post.get("funnel") - msg_text = _("[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in {forumName}") - if thread_funnel == "POLL": - event_type = "discussion/forum/poll" - msg_text = _("[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in {forumName}") - elif thread_funnel == "QUIZ": - event_type = "discussion/forum/quiz" - msg_text = _("[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in {forumName}") - elif thread_funnel == "TEXT": - event_type = "discussion/forum/post" - else: - discussion_logger.warning("The type of {} is an unknown discussion post type. Please post an issue on the project page to have it added https://gitlab.com/piotrex43/RcGcDw/-/issues.".format(thread_funnel)) - event_type = "unknown" - message = msg_text.format(author=author, author_url=author_url, title=post["title"], url=settings["fandom_discussions"]["wiki_url"], threadId=post["threadId"], forumName=post["forumName"]) - else: - event_type = "discussion/forum/reply" - message = _("[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}").format(author=author, author_url=author_url, url=settings["fandom_discussions"]["wiki_url"], threadId=post["threadId"], postId=post["id"], title=post["_embedded"]["thread"][0]["title"], forumName=post["forumName"]) + elif post_type == "WALL": - user_wall = _("unknown") # Fail safe - if post["forumName"].endswith(' Message Wall'): - user_wall = post["forumName"][:-13] - if not post["isReply"]: - event_type = "discussion/wall/post" - message = _("[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/Message_Wall:{user_wall}>)").format(author=author, author_url=author_url, title=post["title"], url=settings["fandom_discussions"]["wiki_url"], user=user_wall, user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"]) - else: - event_type = "discussion/wall/reply" - message = _("[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/Message_Wall:{user_wall}>)").format(author=author, author_url=author_url, url=settings["fandom_discussions"]["wiki_url"], title=post["_embedded"]["thread"][0]["title"], user=user_wall, user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"], replyId=post["id"]) + elif post_type == "ARTICLE_COMMENT": - if article_paths is None: - article_paths = {"title": _("unknown"), "fullUrl": settings["fandom_discussions"]["wiki_url"]} # No page known - article_paths["fullUrl"] = article_paths["fullUrl"].replace(")", "\)").replace("()", "\(") - if not post["isReply"]: - event_type = "discussion/comment/post" - message = _( - "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) on [{article}](<{url}>)").format( - author=author, author_url=author_url, url=article_paths["fullUrl"], article=article_paths["title"], - commentId=post["threadId"]) - else: - event_type = "discussion/comment/reply" - message = _( - "[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on [{article}](<{url}>)").format( - author=author, author_url=author_url, url=article_paths["fullUrl"], article=article_paths["title"], - commentId=post["threadId"], replyId=post["id"]) + else: discussion_logger.warning("No entry for {event} with params: {params}".format(event=post_type, params=post)) if not settings["support"]: @@ -106,98 +43,15 @@ def compact_formatter(post_type, post, article_paths): def embed_formatter(post_type, post, article_paths): """Embed formatter for Fandom discussions.""" - embed = DiscordMessage("embed", "discussion", settings["fandom_discussions"]["webhookURL"]) - author = _("unknown") # Fail safe if post_type == "FORUM": - if post["createdBy"]["name"]: - author = post["createdBy"]["name"] - embed.set_author(author, "{url}f/u/{creatorId}".format(url=settings["fandom_discussions"]["wiki_url"], creatorId=post["creatorId"]), icon_url=post["createdBy"]["avatarUrl"]) - elif post["creatorIp"]: - author = post["creatorIp"][1:] - embed.set_author(author if settings.get("hide_ips", False) is False else _("Unregistered user"), "{url}wiki/Special:Contributions{creatorIp}".format(url=settings["fandom_discussions"]["wiki_url"], creatorIp=post["creatorIp"])) - else: - if post["createdBy"]["name"]: - author = post["createdBy"]["name"] - embed.set_author(author, "{url}wiki/User:{creator}".format(url=settings["fandom_discussions"]["wiki_url"], creator=author.replace(" ", "_")), icon_url=post["createdBy"]["avatarUrl"]) - else: - embed.set_author(author, "{url}f/u/{creatorId}".format(url=settings["fandom_discussions"]["wiki_url"], creatorId=post["creatorId"]), icon_url=post["createdBy"]["avatarUrl"]) - if settings["fandom_discussions"]["appearance"]["embed"]["show_content"]: - if post.get("jsonModel") is not None: - npost = DiscussionsFromHellParser(post) - embed["description"] = npost.parse() - if npost.image_last: - embed["image"]["url"] = npost.image_last - embed["description"] = embed["description"].replace(npost.image_last, "") - else: # Fallback when model is not available - embed["description"] = post.get("rawContent", "") - embed["footer"]["text"] = post["forumName"] - embed["timestamp"] = datetime.datetime.fromtimestamp(post["creationDate"]["epochSecond"], tz=datetime.timezone.utc).isoformat() + pass + el if post_type == "FORUM": - if not post["isReply"]: - embed["url"] = "{url}f/p/{threadId}".format(url=settings["fandom_discussions"]["wiki_url"], threadId=post["threadId"]) - embed["title"] = _("Created \"{title}\"").format(title=post["title"]) - thread_funnel = post.get("funnel") - if thread_funnel == "POLL": - embed.event_type = "discussion/forum/poll" - embed["title"] = _("Created a poll \"{title}\"").format(title=post["title"]) - if settings["fandom_discussions"]["appearance"]["embed"]["show_content"]: - poll = post["poll"] - image_type = False - if poll["answers"][0]["image"] is not None: - image_type = True - for num, option in enumerate(poll["answers"]): - embed.add_field(option["text"] if image_type is True else _("Option {}").format(num+1), - option["text"] if image_type is False else _("__[View image]({image_url})__").format(image_url=option["image"]["url"]), - inline=True) - elif thread_funnel == "QUIZ": - embed.event_type = "discussion/forum/quiz" - embed["title"] = _("Created a quiz \"{title}\"").format(title=post["title"]) - if settings["fandom_discussions"]["appearance"]["embed"]["show_content"]: - quiz = post["_embedded"]["quizzes"][0] - embed["description"] = quiz["title"] - if quiz["image"] is not None: - embed["image"]["url"] = quiz["image"] - elif thread_funnel == "TEXT": - embed.event_type = "discussion/forum/post" - else: - discussion_logger.warning("The type of {} is an unknown discussion post type. Please post an issue on the project page to have it added https://gitlab.com/piotrex43/RcGcDw/-/issues.".format(thread_funnel)) - embed.event_type = "unknown" - if post["_embedded"]["thread"][0]["tags"]: - tag_displayname = [] - for tag in post["_embedded"]["thread"][0]["tags"]: - tag_displayname.append("[{title}]({url})".format(title=tag["articleTitle"], url=create_article_path(quote_plus(tag["articleTitle"].replace(" ", "_"), "/:?=&")))) - if len(", ".join(tag_displayname)) > 1000: - embed.add_field(_("Tags"), _("{} tags").format(len(post["_embedded"]["thread"][0]["tags"]))) - else: - embed.add_field(_("Tags"), ", ".join(tag_displayname)) - else: - embed.event_type = "discussion/forum/reply" - embed["title"] = _("Replied to \"{title}\"").format(title=post["_embedded"]["thread"][0]["title"]) - embed["url"] = "{url}f/p/{threadId}/r/{postId}".format(url=settings["fandom_discussions"]["wiki_url"], threadId=post["threadId"], postId=post["id"]) + elif post_type == "WALL": - user_wall = _("unknown") # Fail safe - if post["forumName"].endswith(' Message Wall'): - user_wall = post["forumName"][:-13] - if not post["isReply"]: - embed.event_type = "discussion/wall/post" - embed["url"] = "{url}wiki/Message_Wall:{user_wall}?threadId={threadId}".format(url=settings["fandom_discussions"]["wiki_url"], user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"]) - embed["title"] = _("Created \"{title}\" on {user}'s Message Wall").format(title=post["title"], user=user_wall) - else: - embed.event_type = "discussion/wall/reply" - embed["url"] = "{url}wiki/Message_Wall:{user_wall}?threadId={threadId}#{replyId}".format(url=settings["fandom_discussions"]["wiki_url"], user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"], replyId=post["id"]) - embed["title"] = _("Replied to \"{title}\" on {user}'s Message Wall").format(title=post["_embedded"]["thread"][0]["title"], user=user_wall) + elif post_type == "ARTICLE_COMMENT": - if article_paths is None: - article_page = {"title": _("unknown"), "fullUrl": settings["fandom_discussions"]["wiki_url"]} # No page known - if not post["isReply"]: - embed.event_type = "discussion/comment/post" - embed["url"] = "{url}?commentId={commentId}".format(url=article_paths["fullUrl"], commentId=post["threadId"]) - embed["title"] = _("Commented on {article}").format(article=article_paths["title"]) - else: - embed.event_type = "discussion/comment/reply" - embed["url"] = "{url}?commentId={commentId}&replyId={replyId}".format(url=article_paths["fullUrl"], commentId=post["threadId"], replyId=post["id"]) - embed["title"] = _("Replied to a comment on {article}").format(article=article_paths["title"]) - embed["footer"]["text"] = article_paths["title"] + else: discussion_logger.warning("No entry for {event} with params: {params}".format(event=post_type, params=post)) embed["title"] = _("Unknown event `{event}`").format(event=post_type) @@ -213,85 +67,3 @@ def embed_formatter(post_type, post, article_paths): send_to_discord(embed, meta=DiscordMessageMetadata("POST")) -class DiscussionsFromHellParser: - """This class converts fairly convoluted Fandom jsonModal of a discussion post into Markdown formatted usable thing. Takes string, returns string. - Kudos to MarkusRost for allowing me to implement this formatter based on his code in Wiki-Bot.""" - def __init__(self, post): - self.post = post - self.jsonModal = json.loads(post.get("jsonModel", "{}")) - self.markdown_text = "" - self.item_num = 1 - self.image_last = None - - def parse(self) -> str: - """Main parsing logic""" - self.parse_content(self.jsonModal["content"]) - if len(self.markdown_text) > 2000: - self.markdown_text = self.markdown_text[0:2000] + "…" - return self.markdown_text - - def parse_content(self, content, ctype=None): - self.image_last = None - for item in content: - if ctype == "bulletList": - self.markdown_text += "\t• " - if ctype == "orderedList": - self.markdown_text += "\t{num}. ".format(num=self.item_num) - self.item_num += 1 - if item["type"] == "text": - if "marks" in item: - prefix, suffix = self.convert_marks(item["marks"]) - self.markdown_text = "{old}{pre}{text}{suf}".format(old=self.markdown_text, pre=prefix, text=escape_formatting(item["text"]), suf=suffix) - else: - if ctype == "code_block": - self.markdown_text += item["text"] # ignore formatting on preformatted text which cannot have additional formatting anyways - else: - self.markdown_text += escape_formatting(item["text"]) - elif item["type"] == "paragraph": - if "content" in item: - self.parse_content(item["content"], item["type"]) - self.markdown_text += "\n" - elif item["type"] == "openGraph": - if not item["attrs"]["wasAddedWithInlineLink"]: - self.markdown_text = "{old}{link}\n".format(old=self.markdown_text, link=item["attrs"]["url"]) - elif item["type"] == "image": - try: - discussion_logger.debug(item["attrs"]["id"]) - if item["attrs"]["id"] is not None: - self.markdown_text = "{old}{img_url}\n".format(old=self.markdown_text, img_url=self.post["_embedded"]["contentImages"][int(item["attrs"]["id"])]["url"]) - self.image_last = self.post["_embedded"]["contentImages"][int(item["attrs"]["id"])]["url"] - except (IndexError, ValueError): - discussion_logger.warning("Image {} not found.".format(item["attrs"]["id"])) - discussion_logger.debug(self.markdown_text) - elif item["type"] == "code_block": - self.markdown_text += "```\n" - if "content" in item: - self.parse_content(item["content"], item["type"]) - self.markdown_text += "\n```\n" - elif item["type"] == "bulletList": - if "content" in item: - self.parse_content(item["content"], item["type"]) - elif item["type"] == "orderedList": - self.item_num = 1 - if "content" in item: - self.parse_content(item["content"], item["type"]) - elif item["type"] == "listItem": - self.parse_content(item["content"], item["type"]) - - def convert_marks(self, marks): - prefix = "" - suffix = "" - for mark in marks: - if mark["type"] == "mention": - prefix += "[" - suffix = "]({wiki}f/u/{userid}){suffix}".format(wiki=settings["fandom_discussions"]["wiki_url"], userid=mark["attrs"]["userId"], suffix=suffix) - elif mark["type"] == "strong": - prefix += "**" - suffix = "**{suffix}".format(suffix=suffix) - elif mark["type"] == "link": - prefix += "[" - suffix = "]({link}){suffix}".format(link=mark["attrs"]["href"], suffix=suffix) - elif mark["type"] == "em": - prefix += "_" - suffix = "_" + suffix - return prefix, suffix \ No newline at end of file diff --git a/src/discussions.py b/src/discussions.py index 2e9f935..d52be67 100644 --- a/src/discussions.py +++ b/src/discussions.py @@ -48,7 +48,7 @@ global client fetch_url = "{wiki}wikia.php?controller=DiscussionPost&method=getPosts&sortDirection=descending&sortKey=creation_date&limit={limit}&includeCounters=false".format(wiki=settings["fandom_discussions"]["wiki_url"], limit=settings["fandom_discussions"]["limit"]) domain = prepare_paths(settings["fandom_discussions"]["wiki_url"], dry=True) # Shutdown if the path for discussions is wrong display_mode = settings.get("fandom_discussions", {}).get("appearance", {}).get("mode", "embed") -webhook_url =settings.get("fandom_discussions", {}).get("webhookURL", settings.get("webhookURL")) +webhook_url = settings.get("fandom_discussions", {}).get("webhookURL", settings.get("webhookURL")) def inject_client(client_obj): @@ -119,7 +119,8 @@ def parse_discussion_post(post, comment_pages): except KeyError: discussion_logger.error("Could not parse paths for article comment, here is the content of comment_pages: {}, ignoring...".format(comment_pages)) raise ArticleCommentError - event_type = f"discussions/{post_type.lower()}" + event_type = f"discussion/{post_type.lower()}" + context.set_comment_page(comment_page) message = default_message(event_type, formatter_hooks)(context, post) send_to_discord(message, meta=DiscordMessageMetadata("POST")) From 45030b67311cb3312f8f9826cdbcab7a436f46a1 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 9 May 2021 23:01:23 +0200 Subject: [PATCH 067/173] Just a few tweaks --- src/api/util.py | 2 +- src/fileio/database.py | 4 ++++ src/misc.py | 2 +- src/wiki.py | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/api/util.py b/src/api/util.py index 7cd20a4..b5e55d5 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -42,7 +42,7 @@ def clean_link(link: str) -> str: def sanitize_to_markdown(text: str) -> str: """Sanitizes given text to escape markdown formatting. It is used in values that will be visible on Discord in messages""" - return re.sub(r"([`_*~:<>{}@|\\])", "\\\\\\1", text, 0).replace('//', "/\\/").replace('](', "]\\(") + return re.sub(r"([`_*~:<>{}@|\\])", "\\\\\\1", text).replace('//', "/\\/").replace('](', "]\\(") def sanitize_to_url(text: str) -> str: # TODO ) replaces needed? diff --git a/src/fileio/database.py b/src/fileio/database.py index b4fd946..888d22a 100644 --- a/src/fileio/database.py +++ b/src/fileio/database.py @@ -62,6 +62,10 @@ def check_tables(): def add_entry(pageid: int, revid: int, logid: int, message, message_id: str): """Add an edit or log entry to the DB + :param message: + :param logid: + :param revid: + :param pageid: :param message_id: """ db_cursor.execute("INSERT INTO messages (message_id, content) VALUES (?, ?)", (message_id, message)) diff --git a/src/misc.py b/src/misc.py index 2466340..fe26bc7 100644 --- a/src/misc.py +++ b/src/misc.py @@ -152,7 +152,7 @@ class ContentParser(HTMLParser): def handle_data(self, data): def escape_formatting(data: str) -> str: """Escape Discord formatting""" - return re.sub(r"([`_*~<>{}@/|\\])", "\\\\\\1", data, 0) + return re.sub(r"([`_*~<>{}@/|\\])", "\\\\\\1", data) data = escape_formatting(data) if self.current_tag == "ins" and self.ins_length <= 1000: self.ins_length += len("**" + data + "**") diff --git a/src/wiki.py b/src/wiki.py index 1b0f547..4cbb8e6 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -411,7 +411,7 @@ class Wiki(object): except KeyError: self.tags[tag["name"]] = None # Tags with no display name are hidden and should not appear on RC as well for message in startup_info["allmessages"]: - if not "missing" in message: # ignore missing strings + if "missing" not in message: # ignore missing strings self.mw_messages[message["name"]] = message["*"] else: logging.warning("Could not fetch the MW message translation for: {}".format(message["name"])) From bd5916e0420ea5c194aabff984e705b699151436 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 10 May 2021 00:10:36 +0200 Subject: [PATCH 068/173] Adding more test cases, fixed some duplicated formatter names --- extensions/base/cargo.py | 10 +++++----- extensions/base/managewiki.py | 2 +- test/test_util.py | 15 ++++++++++++--- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/extensions/base/cargo.py b/extensions/base/cargo.py index 824dc3e..4707e2b 100644 --- a/extensions/base/cargo.py +++ b/extensions/base/cargo.py @@ -48,7 +48,7 @@ def compact_cargo_createtable(ctx: Context, change: dict): return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) -# cargo/recreatetable +# cargo/recreatetable - Recreating a Cargo table @formatter.embed(event="cargo/recreatetable") @@ -71,7 +71,7 @@ def compact_cargo_recreatetable(ctx: Context, change: dict): return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) -# cargo/replacetable +# cargo/replacetable - Replacing a Cargo table @formatter.embed(event="cargo/replacetable") @@ -84,7 +84,7 @@ def embed_cargo_replacetable(ctx: Context, change: dict): return embed -@formatter.compact(event="cargo/recreatetable") +@formatter.compact(event="cargo/replacetable") def compact_cargo_replacetable(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"])) @@ -94,7 +94,7 @@ def compact_cargo_replacetable(ctx: Context, change: dict): return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) -# cargo/deletetable +# cargo/deletetable - Deleting a table in Cargo @formatter.embed(event="cargo/deletetable") @@ -106,7 +106,7 @@ def embed_cargo_deletetable(ctx: Context, change: dict): return embed -@formatter.compact(event="cargo/recreatetable") +@formatter.compact(event="cargo/deletetable") def compact_cargo_deletetable(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) content = _("[{author}]({author_url}) deleted the Cargo table \"{table}\"").format(author=author, diff --git a/extensions/base/managewiki.py b/extensions/base/managewiki.py index ce29324..e09dbb0 100644 --- a/extensions/base/managewiki.py +++ b/extensions/base/managewiki.py @@ -195,7 +195,7 @@ def embed_managewiki_unlock(ctx: Context, change: dict): return embed -@formatter.compact(event="managewiki/undelete") +@formatter.compact(event="managewiki/unlock") def compact_managewiki_unlock(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" diff --git a/test/test_util.py b/test/test_util.py index 9122ce2..d83e579 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -14,12 +14,21 @@ # along with RcGcDw. If not, see . from unittest import TestCase, main -from src.api.util import sanitize_to_url +from src.api.util import sanitize_to_url, sanitize_to_markdown, clean_link class Test(TestCase): - def test_sanitize_to_url(self): - self.assertEqual(sanitize_to_url("Breaking rcgcdw . \ / : ? = ) & - ~ this is a test)"), "Breaking_rcgcdw_._%5C_/_:_%3F_%3D_%29_%26_-_~_this_is_a_test%29") + def test_sanitize_to_url(self): + self.assertEqual(sanitize_to_url("Breaking rcgcdw . \ / : ? = ) & - ~ this is a test)"), + "Breaking_rcgcdw_._%5C_/_:_%3F_%3D_%29_%26_-_~_this_is_a_test%29") + + def test_sanitize_to_markdown(self): + self.assertEqual(sanitize_to_markdown( + " This @MarkusRost [] is a **Markdown** te\"'''st __wow__ (I'm a link)[https://google.com/____]^^ ` nice {} comment\\\\foa*&&V^%A(!#)@!@I$Jfkasnfgamc,ajf ah wtf#####;h,a "), + " This \\@MarkusRost [] is a \\*\\*Markdown\\*\\* te\"\'\'\'st \\_\\_wow\\_\\_ (I\'m a link)[https\\:/\\/google.com/\\_\\_\\_\\_]^^ \\` nice \\{\\} comment\\\\\\\\foa\\*&&V^%A(!#)\\@!\\@I$Jfkasnfgamc,ajf ah wtf#####;h,a ") + + def test_clean_link(self): + self.assertEqual(clean_link("https://example.com"), "") if __name__ == '__main__': From d4f06da1c89a8a025934fe7cfe2c9a045073469e Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 10 May 2021 01:17:40 +0200 Subject: [PATCH 069/173] Updated Python image to Python 3.7 since RcGcDw dropped support for 3.6 --- .gitlab-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7dc96b9..1820e5a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: python:3.6-alpine +image: python:3.7-alpine include: - template: Code-Quality.gitlab-ci.yml @@ -19,11 +19,11 @@ test: type: test script: - apk add libxml2-dev libxslt-dev libxml2 gcc musl-dev linux-headers - - pip3.6 install -r requirements.txt + - pip3.7 install -r requirements.txt - sed -i -e "s/111111111111111111/$DISCORD1/g" settings.json.example - sed -i -e "s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/$DISCORD2/g" settings.json.example - mv settings.json.example settings.json - - python3.6 start.py --test + - python3.7 start.py --test only: - testing - merge_requests From 9b1ef8d482f3570986eaf5c404ce61bfab96d275 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 10 May 2021 02:12:50 +0200 Subject: [PATCH 070/173] Update translation script for formatters --- locale/templates/discussion_formatters.pot | 161 -- .../{rc_formatters.pot => formatters.pot} | 2452 ++++++++++------- scripts/generate-translations.sh | 5 +- 3 files changed, 1402 insertions(+), 1216 deletions(-) delete mode 100644 locale/templates/discussion_formatters.pot rename locale/templates/{rc_formatters.pot => formatters.pot} (57%) diff --git a/locale/templates/discussion_formatters.pot b/locale/templates/discussion_formatters.pot deleted file mode 100644 index 2efce94..0000000 --- a/locale/templates/discussion_formatters.pot +++ /dev/null @@ -1,161 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the RcGcDw package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: RcGcDw\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 -#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 -#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 -msgid "unknown" -msgstr "" - -#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 -msgid "Unregistered user" -msgstr "" - -#: src/discussion_formatters.py:39 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " -"{forumName}" -msgstr "" - -#: src/discussion_formatters.py:42 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " -"{forumName}" -msgstr "" - -#: src/discussion_formatters.py:45 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " -"{forumName}" -msgstr "" - -#: src/discussion_formatters.py:54 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " -"to [{title}](<{url}f/p/{threadId}>) in {forumName}" -msgstr "" - -#: src/discussion_formatters.py:61 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" -"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" -"Message_Wall:{user_wall}>)" -msgstr "" - -#: src/discussion_formatters.py:64 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" -"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" -"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" -"(<{url}wiki/Message_Wall:{user_wall}>)" -msgstr "" - -#: src/discussion_formatters.py:72 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " -"on [{article}](<{url}>)" -msgstr "" - -#: src/discussion_formatters.py:78 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" -"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " -"[{article}](<{url}>)" -msgstr "" - -#: src/discussion_formatters.py:86 -#, python-brace-format -msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." -msgstr "" - -#: src/discussion_formatters.py:123 -#, python-brace-format -msgid "Created \"{title}\"" -msgstr "" - -#: src/discussion_formatters.py:127 -#, python-brace-format -msgid "Created a poll \"{title}\"" -msgstr "" - -#: src/discussion_formatters.py:134 -msgid "Option {}" -msgstr "" - -#: src/discussion_formatters.py:135 -#, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "" - -#: src/discussion_formatters.py:139 -#, python-brace-format -msgid "Created a quiz \"{title}\"" -msgstr "" - -#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 -msgid "Tags" -msgstr "" - -#: src/discussion_formatters.py:155 -msgid "{} tags" -msgstr "" - -#: src/discussion_formatters.py:160 -#, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "" - -#: src/discussion_formatters.py:169 -#, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "" - -#: src/discussion_formatters.py:173 -#, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "" - -#: src/discussion_formatters.py:180 -#, python-brace-format -msgid "Commented on {article}" -msgstr "" - -#: src/discussion_formatters.py:184 -#, python-brace-format -msgid "Replied to a comment on {article}" -msgstr "" - -#: src/discussion_formatters.py:188 -#, python-brace-format -msgid "Unknown event `{event}`" -msgstr "" - -#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 -msgid "Report this on the support server" -msgstr "" diff --git a/locale/templates/rc_formatters.pot b/locale/templates/formatters.pot similarity index 57% rename from locale/templates/rc_formatters.pot rename to locale/templates/formatters.pot index f1fe0ca..425854c 100644 --- a/locale/templates/rc_formatters.pot +++ b/locale/templates/formatters.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"POT-Creation-Date: 2021-05-10 01:44+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,336 +18,819 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: src/rc_formatters.py:28 -msgid "None" +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" msgstr "" -#: src/rc_formatters.py:28 -msgid "Warning issued" +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" msgstr "" -#: src/rc_formatters.py:28 -msgid "**Blocked user**" +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" msgstr "" -#: src/rc_formatters.py:28 -msgid "Tagged the edit" +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" msgstr "" -#: src/rc_formatters.py:28 -msgid "Disallowed the action" +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" msgstr "" -#: src/rc_formatters.py:28 -msgid "**IP range blocked**" +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" msgstr "" -#: src/rc_formatters.py:28 -msgid "Throttled actions" +#: extensions/base/cargo.py:105 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" msgstr "" -#: src/rc_formatters.py:28 -msgid "Removed autoconfirmed group" +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" msgstr "" -#: src/rc_formatters.py:28 -msgid "**Removed from privileged groups**" +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" msgstr "" -#: src/rc_formatters.py:29 -msgid "Edit" +#: extensions/base/translate.py:55 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" msgstr "" -#: src/rc_formatters.py:29 -msgid "Upload" +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" msgstr "" -#: src/rc_formatters.py:29 -msgid "Move" +#: extensions/base/translate.py:80 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" msgstr "" -#: src/rc_formatters.py:29 -msgid "Stash upload" +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" msgstr "" -#: src/rc_formatters.py:29 -msgid "Deletion" +#: extensions/base/translate.py:106 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" msgstr "" -#: src/rc_formatters.py:29 -msgid "Account creation" +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" msgstr "" -#: src/rc_formatters.py:29 -msgid "Auto account creation" +#: extensions/base/translate.py:133 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" msgstr "" -#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 -#: src/rc_formatters.py:75 src/rc_formatters.py:96 +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: extensions/base/translate.py:161 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:177 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:188 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:215 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:231 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:240 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:264 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:288 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:315 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:342 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:387 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:401 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "" + +#: extensions/base/translate.py:431 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:439 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "" + +#: extensions/base/translate.py:464 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "" + +#: extensions/base/translate.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +#: src/misc.py:301 +msgid "unknown" +msgstr "" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:193 extensions/base/discussions.py:195 +#: src/rc_formatters.py:542 src/api/util.py:150 +msgid "Tags" +msgstr "" + +#: extensions/base/discussions.py:193 +msgid "{} tags" +msgstr "" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:217 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:220 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:234 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" + +#: extensions/base/discussions.py:247 extensions/base/discussions.py:264 +#: extensions/base/abusefilter.py:45 src/rc_formatters.py:63 +#: src/rc_formatters.py:70 src/rc_formatters.py:77 src/rc_formatters.py:89 +#: src/api/util.py:85 src/api/util.py:117 src/api/util.py:124 +#: src/api/util.py:132 msgid "Unregistered user" msgstr "" -#: src/rc_formatters.py:83 +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:312 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:318 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "" + +#: extensions/base/discussions.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" + +#: extensions/base/discussions.py:365 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" + +#: extensions/base/managewiki.py:35 +msgid "Changed wiki settings" +msgstr "" + +#: extensions/base/managewiki.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "" + +#: extensions/base/managewiki.py:56 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:56 extensions/base/managewiki.py:68 +#: extensions/base/managewiki.py:80 extensions/base/managewiki.py:89 +#: extensions/base/managewiki.py:102 extensions/base/managewiki.py:103 +#: extensions/base/managewiki.py:112 extensions/base/managewiki.py:113 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:137 extensions/base/managewiki.py:138 +#: extensions/base/managewiki.py:172 extensions/base/managewiki.py:181 +#: extensions/base/managewiki.py:194 extensions/base/managewiki.py:203 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:740 src/misc.py:299 +msgid "Unknown" +msgstr "" + +#: extensions/base/managewiki.py:64 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:80 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:88 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:101 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:126 +msgid "Wiki" +msgstr "" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:124 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:135 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:150 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "" + +#: extensions/base/managewiki.py:159 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:172 +#, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:180 +#, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:194 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:202 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/datadump.py:36 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "" + +#: extensions/base/datadump.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "" + +#: extensions/base/datadump.py:58 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "" + +#: extensions/base/datadump.py:67 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "None" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Warning issued" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Blocked user**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Tagged the edit" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Disallowed the action" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**IP range blocked**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Throttled actions" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Removed autoconfirmed group" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Removed from privileged groups**" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Edit" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Move" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Stash upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Deletion" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Account creation" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Auto account creation" +msgstr "" + +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "" + +#: extensions/base/abusefilter.py:66 #, python-brace-format msgid "" "[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " "\"{action}\" on *[{target}]({target_url})* - action taken: {result}." msgstr "" -#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 -#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 -#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 -#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 -#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 -#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 -#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 -#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 -#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 -msgid "Unknown" +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" msgstr "" -#: src/rc_formatters.py:116 +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "" + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "" + +#: extensions/base/mediawiki.py:112 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" msgstr "" -#: src/rc_formatters.py:118 +#: extensions/base/mediawiki.py:117 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" msgstr "" -#: src/rc_formatters.py:121 -#, python-brace-format -msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +msgid "Options" msgstr "" -#: src/rc_formatters.py:128 +#: extensions/base/mediawiki.py:191 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "" + +#: extensions/base/mediawiki.py:196 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:198 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:200 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "" + +#: extensions/base/mediawiki.py:209 +msgid "**No license!**" +msgstr "" + +#: extensions/base/mediawiki.py:224 +msgid "" +"\n" +"License: {}" +msgstr "" + +#: extensions/base/mediawiki.py:226 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "" + +#: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" msgstr "" -#: src/rc_formatters.py:132 +#: extensions/base/mediawiki.py:248 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" "{comment}" msgstr "" -#: src/rc_formatters.py:135 +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:283 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "" -#: src/rc_formatters.py:141 +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" + +#: extensions/base/mediawiki.py:308 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" "({page_link}){comment}" msgstr "" -#: src/rc_formatters.py:147 src/rc_formatters.py:152 -msgid "without making a redirect" -msgstr "" - -#: src/rc_formatters.py:147 src/rc_formatters.py:153 -msgid "with a redirect" -msgstr "" - -#: src/rc_formatters.py:148 +#: extensions/base/mediawiki.py:322 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" +msgid "Restored {article}" msgstr "" -#: src/rc_formatters.py:154 +#: extensions/base/mediawiki.py:331 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -"[{target}]({target_url}) {made_a_redirect}{comment}" +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" -#: src/rc_formatters.py:159 +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "" + +#: extensions/base/mediawiki.py:356 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" +msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "" -#: src/rc_formatters.py:170 src/rc_formatters.py:855 -msgid "for infinity and beyond" -msgstr "" - -#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#: extensions/base/mediawiki.py:370 #, python-brace-format -msgid "for {num} {translated_length}" -msgstr "" +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "" +msgstr[1] "" -#: src/rc_formatters.py:185 src/rc_formatters.py:867 -msgid "until {}" -msgstr "" - -#: src/rc_formatters.py:189 -msgid " on pages: " -msgstr "" - -#: src/rc_formatters.py:196 src/rc_formatters.py:881 -msgid " and namespaces: " -msgstr "" - -#: src/rc_formatters.py:198 -msgid " on namespaces: " -msgstr "" - -#: src/rc_formatters.py:210 -#, python-brace-format -msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" -msgstr "" - -#: src/rc_formatters.py:214 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:218 -#, python-brace-format -msgid "" -"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:223 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:225 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:231 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -"profile" -msgstr "" - -#: src/rc_formatters.py:237 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on their own " -"profile" -msgstr "" - -#: src/rc_formatters.py:245 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:251 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:257 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:259 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:267 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:269 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:274 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -"profile. *({desc})*" -msgstr "" - -#: src/rc_formatters.py:281 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -"profile. *({desc})*" -msgstr "" - -#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 -#: src/rc_formatters.py:979 -msgid "none" -msgstr "" - -#: src/rc_formatters.py:301 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) from {old_groups} to {new_groups}{comment}" -msgstr "" - -#: src/rc_formatters.py:303 -#, python-brace-format -msgid "" -"{author} autopromoted [{target}]({target_url}) from {old_groups} to " -"{new_groups}{comment}" -msgstr "" - -#: src/rc_formatters.py:304 src/rc_formatters.py:965 -msgid "System" -msgstr "" - -#: src/rc_formatters.py:309 -#, python-brace-format -msgid "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" -msgstr "" - -#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 -#: src/rc_formatters.py:993 -msgid " [cascading]" -msgstr "" - -#: src/rc_formatters.py:316 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" -msgstr "" - -#: src/rc_formatters.py:323 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:327 +#: extensions/base/mediawiki.py:383 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -358,7 +841,215 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/rc_formatters.py:340 +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:433 +msgid "No redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:402 extensions/base/mediawiki.py:436 +msgid "A redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:403 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "" + +#: extensions/base/mediawiki.py:414 extensions/base/mediawiki.py:447 +msgid "without making a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:415 extensions/base/mediawiki.py:448 +msgid "with a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:417 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:437 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" + +#: extensions/base/mediawiki.py:450 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:466 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "" + +#: extensions/base/mediawiki.py:478 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:493 +#, python-brace-format +msgid "Protected {target}" +msgstr "" + +#: extensions/base/mediawiki.py:496 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr "" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "" + +#: extensions/base/mediawiki.py:562 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:571 +msgid "for infinity and beyond" +msgstr "" + +#: extensions/base/mediawiki.py:581 +msgid "less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:583 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:583 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:583 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:589 +#, python-brace-format +msgid "{time_unit} {time_number}" +msgstr "" + +#: extensions/base/mediawiki.py:609 +msgid "Blocked from editing the following pages: " +msgstr "" + +#: extensions/base/mediawiki.py:616 extensions/base/mediawiki.py:660 +msgid " and namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:618 +msgid "Blocked from editing pages on following namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:629 +msgid "Partial block details" +msgstr "" + +#: extensions/base/mediawiki.py:632 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:634 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "" + +#: extensions/base/mediawiki.py:652 +msgid " on pages: " +msgstr "" + +#: extensions/base/mediawiki.py:662 +msgid " on namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:674 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:692 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:701 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:714 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:723 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:739 +msgid "Action has been hidden by administration" +msgstr "" + +#: extensions/base/mediawiki.py:746 +msgid "An action has been hidden by administration." +msgstr "" + +#: extensions/base/mediawiki.py:757 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:768 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -369,17 +1060,14 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/rc_formatters.py:345 +#: extensions/base/mediawiki.py:784 #, python-brace-format -msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "" +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "" +msgstr[1] "" -#: src/rc_formatters.py:347 -#, python-brace-format -msgid "[{author}]({author_url}) changed visibility of log events{comment}" -msgstr "" - -#: src/rc_formatters.py:359 +#: extensions/base/mediawiki.py:799 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -390,135 +1078,204 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/rc_formatters.py:364 +#: extensions/base/mediawiki.py:826 #, python-brace-format -msgid "" -"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgid "Changed group membership for {target}" msgstr "" -#: src/rc_formatters.py:368 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +#: extensions/base/mediawiki.py:829 extensions/base/mediawiki.py:855 +msgid "System" msgstr "" -#: src/rc_formatters.py:372 +#: extensions/base/mediawiki.py:830 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "" + +#: extensions/base/mediawiki.py:836 +#, python-brace-format +msgid "" +"{reason}\n" +"{added}{linebreak}{removed}" +msgstr "" + +#: extensions/base/mediawiki.py:850 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) {added} {removed}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:854 +#, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) {added} {removed}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:867 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" + +#: extensions/base/mediawiki.py:881 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" "({article_url}) into [{dest}]({dest_url}){comment}" msgstr "" -#: src/rc_formatters.py:375 +#: extensions/base/mediawiki.py:895 +msgid "Created account automatically" +msgstr "" + +#: extensions/base/mediawiki.py:902 #, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "" -#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#: extensions/base/mediawiki.py:915 extensions/base/mediawiki.py:980 +msgid "Created account" +msgstr "" + +#: extensions/base/mediawiki.py:922 extensions/base/mediawiki.py:987 #, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "" -#: src/rc_formatters.py:380 +#: extensions/base/mediawiki.py:934 +#, python-brace-format +msgid "Created account {article}" +msgstr "" + +#: extensions/base/mediawiki.py:943 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" "{comment}" msgstr "" -#: src/rc_formatters.py:383 +#: extensions/base/mediawiki.py:956 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" + +#: extensions/base/mediawiki.py:967 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " "and password was sent by email{comment}" msgstr "" -#: src/rc_formatters.py:388 +#: extensions/base/mediawiki.py:999 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: extensions/base/mediawiki.py:1000 extensions/base/mediawiki.py:1027 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: extensions/base/mediawiki.py:1012 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" "({table_url}) pointing to {website} with {prefix} prefix" msgstr "" -#: src/rc_formatters.py:394 +#: extensions/base/mediawiki.py:1026 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: extensions/base/mediawiki.py:1039 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " "pointing to {website} with {prefix} prefix" msgstr "" -#: src/rc_formatters.py:400 +#: extensions/base/mediawiki.py:1053 +msgid "Deleted an entry in interwiki table" +msgstr "" + +#: extensions/base/mediawiki.py:1054 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: extensions/base/mediawiki.py:1064 #, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" msgstr "" -#: src/rc_formatters.py:403 +#: extensions/base/mediawiki.py:1081 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:1083 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1095 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "" -#: src/rc_formatters.py:407 +#: extensions/base/mediawiki.py:1110 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: extensions/base/mediawiki.py:1112 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1123 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " "non-default content model {new}{comment}" msgstr "" -#: src/rc_formatters.py:410 +#: extensions/base/mediawiki.py:1138 #, python-brace-format -msgid "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgid "Created the tag \"{tag}\"" msgstr "" -#: src/rc_formatters.py:413 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" -msgstr "" - -#: src/rc_formatters.py:416 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the slice for [{article}]({article_url})" -msgstr "" - -#: src/rc_formatters.py:421 -#, python-brace-format -msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:423 -#, python-brace-format -msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:428 -#, python-brace-format -msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:433 -#, python-brace-format -msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:436 +#: extensions/base/mediawiki.py:1147 #, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: src/rc_formatters.py:441 +#: extensions/base/mediawiki.py:1169 +#, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1171 +msgid "Removed from" +msgstr "" + +#: extensions/base/mediawiki.py:1171 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1182 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: src/rc_formatters.py:443 +#: extensions/base/mediawiki.py:1192 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -529,211 +1286,41 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/rc_formatters.py:449 +#: extensions/base/mediawiki.py:1209 +#, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1217 #, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: src/rc_formatters.py:452 +#: extensions/base/mediawiki.py:1236 +#, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1244 #, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: src/rc_formatters.py:454 +#: extensions/base/mediawiki.py:1264 #, python-brace-format -msgid "[{author}]({author_url}) changed wiki settings{reason}" -msgstr "" +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" -#: src/rc_formatters.py:456 +#: extensions/base/mediawiki.py:1269 #, python-brace-format -msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" msgstr "" -#: src/rc_formatters.py:459 -#, python-brace-format -msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:462 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:467 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:473 -#, python-brace-format -msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:477 -#, python-brace-format -msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:481 -#, python-brace-format -msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:486 -#, python-brace-format -msgid "[{author}]({author_url}) generated *{file}* dump{comment}" -msgstr "" - -#: src/rc_formatters.py:491 -#, python-brace-format -msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" -msgstr "" - -#: src/rc_formatters.py:502 -#, python-brace-format -msgid "" -"[{author}]({author_url}) marked [{article}]({article_url}) for " -"translation{comment}" -msgstr "" - -#: src/rc_formatters.py:509 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed [{article}]({article_url}) from the " -"translation system{comment}" -msgstr "" - -#: src/rc_formatters.py:516 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed moving translation pages from *{article}* " -"to [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:524 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encountered a problem while moving [{article}]" -"({article_url}) to [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:532 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translatable page [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:540 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translatable page [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:548 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translation page [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:556 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translation page [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:564 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:571 -#, python-brace-format -msgid "" -"[{author}]({author_url}) discouraged translation of [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:581 -#, python-brace-format -msgid "" -"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " -"`{languages}`{comment}" -msgstr "" - -#: src/rc_formatters.py:587 -#, python-brace-format -msgid "" -"[{author}]({author_url}) set the priority languages for [{article}]" -"({article_url}) to `{languages}`{comment}" -msgstr "" - -#: src/rc_formatters.py:593 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed priority languages from [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:600 -#, python-brace-format -msgid "" -"[{author}]({author_url}) added translatable page [{article}]({article_url}) " -"to aggregate group \"{group}\"{comment}" -msgstr "" - -#: src/rc_formatters.py:607 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed translatable page [{article}]" -"({article_url}) from aggregate group \"{group}\"{comment}" -msgstr "" - -#: src/rc_formatters.py:619 -#, python-brace-format -msgid "" -"[{author}]({author_url}) reviewed translation [{article}]({article_url})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:627 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" -msgstr "" - -#: src/rc_formatters.py:634 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) to `{new_state}`{comment}" -msgstr "" - -#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 -#: src/rc_formatters.py:1241 -msgid "(default)" -msgstr "" - -#: src/rc_formatters.py:647 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the language of [{article}]({article_url}) " -"from {old_lang} to {new_lang}{comment}" -msgstr "" - -#: src/rc_formatters.py:656 +#: extensions/base/mediawiki.py:1284 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " @@ -744,644 +1331,401 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/rc_formatters.py:661 +#: extensions/base/mediawiki.py:1292 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" "{comment}" msgstr "" -#: src/rc_formatters.py:665 -msgid "An action has been hidden by administration." +#: extensions/base/sprite.py:37 +#, python-brace-format +msgid "Edited the sprite for {article}" msgstr "" -#: src/rc_formatters.py:672 +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" + +#: extensions/base/sprite.py:60 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "" + +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" + +#: extensions/base/sprite.py:79 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "" + +#: extensions/base/sprite.py:86 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" + +#: src/rcgcdw.py:134 src/rcgcdw.py:136 src/rcgcdw.py:138 src/rcgcdw.py:140 +#: src/rcgcdw.py:142 src/rcgcdw.py:144 src/rcgcdw.py:146 +#, python-brace-format +msgid "{value} (avg. {avg})" +msgstr "" + +#: src/rcgcdw.py:167 +msgid "Daily overview" +msgstr "" + +#: src/rcgcdw.py:174 +msgid "No activity" +msgstr "" + +#: src/rcgcdw.py:198 +msgid " ({} action)" +msgid_plural " ({} actions)" +msgstr[0] "" +msgstr[1] "" + +#: src/rcgcdw.py:200 +msgid " ({} edit)" +msgid_plural " ({} edits)" +msgstr[0] "" +msgstr[1] "" + +#: src/rcgcdw.py:205 +msgid " UTC ({} action)" +msgid_plural " UTC ({} actions)" +msgstr[0] "" +msgstr[1] "" + +#: src/rcgcdw.py:207 src/rcgcdw.py:208 src/rcgcdw.py:212 +msgid "But nobody came" +msgstr "" + +#: src/rcgcdw.py:215 +msgid "Most active user" +msgid_plural "Most active users" +msgstr[0] "" +msgstr[1] "" + +#: src/rcgcdw.py:216 +msgid "Most edited article" +msgid_plural "Most edited articles" +msgstr[0] "" +msgstr[1] "" + +#: src/rcgcdw.py:217 +msgid "Edits made" +msgstr "" + +#: src/rcgcdw.py:217 +msgid "New files" +msgstr "" + +#: src/rcgcdw.py:217 +msgid "Admin actions" +msgstr "" + +#: src/rcgcdw.py:218 +msgid "Bytes changed" +msgstr "" + +#: src/rcgcdw.py:218 +msgid "New articles" +msgstr "" + +#: src/rcgcdw.py:219 +msgid "Unique contributors" +msgstr "" + +#: src/rcgcdw.py:220 +msgid "Most active hour" +msgid_plural "Most active hours" +msgstr[0] "" +msgstr[1] "" + +#: src/rcgcdw.py:221 +msgid "Day score" +msgstr "" + +#: src/rcgcdw.py:249 +msgid "~~hidden~~" +msgstr "" + +#: src/rcgcdw.py:251 src/rc_formatters.py:315 +msgid "No description provided" +msgstr "" + +#: src/rcgcdw.py:254 +msgid "hidden" +msgstr "" + +#: src/rc_formatters.py:121 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:123 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile" +msgstr "" + +#: src/rc_formatters.py:129 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile" +msgstr "" + +#: src/rc_formatters.py:135 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile" +msgstr "" + +#: src/rc_formatters.py:143 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:149 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" +msgstr "" + +#: src/rc_formatters.py:155 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:157 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on their own profile" +msgstr "" + +#: src/rc_formatters.py:165 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:167 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" +msgstr "" + +#: src/rc_formatters.py:172 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" + +#: src/rc_formatters.py:179 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" + +#: src/rc_formatters.py:305 src/discussion_formatters.py:38 #, python-brace-format msgid "" "Unknown event `{event}` by [{author}]({author_url}), report it on the " "[support server](<{support}>)." msgstr "" -#: src/rc_formatters.py:681 -#, python-brace-format -msgid "{user} triggered \"{abuse_filter}\"" -msgstr "" - -#: src/rc_formatters.py:682 -msgid "Performed" -msgstr "" - -#: src/rc_formatters.py:683 -msgid "Action taken" -msgstr "" - -#: src/rc_formatters.py:684 -msgid "Title" -msgstr "" - -#: src/rc_formatters.py:693 src/rc_formatters.py:980 -msgid "No description provided" -msgstr "" - -#: src/rc_formatters.py:717 -msgid "(N!) " -msgstr "" - -#: src/rc_formatters.py:718 -msgid "m" -msgstr "" - -#: src/rc_formatters.py:718 -msgid "b" -msgstr "" - -#: src/rc_formatters.py:735 src/rc_formatters.py:740 -msgid "__Only whitespace__" -msgstr "" - -#: src/rc_formatters.py:745 -msgid "Removed" -msgstr "" - -#: src/rc_formatters.py:747 -msgid "Added" -msgstr "" - -#: src/rc_formatters.py:781 src/rc_formatters.py:820 -msgid "Options" -msgstr "" - -#: src/rc_formatters.py:781 -#, python-brace-format -msgid "([preview]({link}) | [undo]({undolink}))" -msgstr "" - -#: src/rc_formatters.py:786 -#, python-brace-format -msgid "Uploaded a new version of {name}" -msgstr "" - -#: src/rc_formatters.py:788 -#, python-brace-format -msgid "Reverted a version of {name}" -msgstr "" - -#: src/rc_formatters.py:790 -#, python-brace-format -msgid "Uploaded {name}" -msgstr "" - -#: src/rc_formatters.py:806 -msgid "**No license!**" -msgstr "" - -#: src/rc_formatters.py:818 -msgid "" -"\n" -"License: {}" -msgstr "" - -#: src/rc_formatters.py:820 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "" - -#: src/rc_formatters.py:825 -#, python-brace-format -msgid "Deleted page {article}" -msgstr "" - -#: src/rc_formatters.py:830 -#, python-brace-format -msgid "Deleted redirect {article} by overwriting" -msgstr "" - -#: src/rc_formatters.py:836 -msgid "No redirect has been made" -msgstr "" - -#: src/rc_formatters.py:837 -msgid "A redirect has been made" -msgstr "" - -#: src/rc_formatters.py:838 -#, python-brace-format -msgid "Moved {redirect}{article} to {target}" -msgstr "" - -#: src/rc_formatters.py:841 -#, python-brace-format -msgid "Moved {redirect}{article} to {title} over redirect" -msgstr "" - -#: src/rc_formatters.py:845 -#, python-brace-format -msgid "Moved protection settings from {redirect}{article} to {title}" -msgstr "" - -#: src/rc_formatters.py:869 -msgid "unknown expiry time" -msgstr "" - -#: src/rc_formatters.py:874 -msgid "Blocked from editing the following pages: " -msgstr "" - -#: src/rc_formatters.py:883 -msgid "Blocked from editing pages on following namespaces: " -msgstr "" - -#: src/rc_formatters.py:894 -msgid "Partial block details" -msgstr "" - -#: src/rc_formatters.py:895 -#, python-brace-format -msgid "Blocked {blocked_user} {time}" -msgstr "" - -#: src/rc_formatters.py:899 -#, python-brace-format -msgid "Changed block settings for {blocked_user}" -msgstr "" - -#: src/rc_formatters.py:903 -#, python-brace-format -msgid "Unblocked {blocked_user}" -msgstr "" - -#: src/rc_formatters.py:910 +#: src/rc_formatters.py:345 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "" -#: src/rc_formatters.py:912 +#: src/rc_formatters.py:347 msgid "Left a comment on their own profile" msgstr "" -#: src/rc_formatters.py:919 +#: src/rc_formatters.py:354 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "" -#: src/rc_formatters.py:921 +#: src/rc_formatters.py:356 msgid "Replied to a comment on their own profile" msgstr "" -#: src/rc_formatters.py:928 +#: src/rc_formatters.py:363 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "" -#: src/rc_formatters.py:930 +#: src/rc_formatters.py:365 msgid "Edited a comment on their own profile" msgstr "" -#: src/rc_formatters.py:935 +#: src/rc_formatters.py:370 #, python-brace-format msgid "Edited {target}'s profile" msgstr "" -#: src/rc_formatters.py:937 +#: src/rc_formatters.py:372 msgid "Edited their own profile" msgstr "" -#: src/rc_formatters.py:939 +#: src/rc_formatters.py:374 #, python-brace-format msgid "Cleared the {field} field" msgstr "" -#: src/rc_formatters.py:941 +#: src/rc_formatters.py:376 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "" -#: src/rc_formatters.py:946 +#: src/rc_formatters.py:381 #, python-brace-format msgid "Purged a comment on {target}'s profile" msgstr "" -#: src/rc_formatters.py:948 +#: src/rc_formatters.py:383 msgid "Purged a comment on their own profile" msgstr "" -#: src/rc_formatters.py:956 +#: src/rc_formatters.py:391 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "" -#: src/rc_formatters.py:958 +#: src/rc_formatters.py:393 msgid "Deleted a comment on their own profile" msgstr "" -#: src/rc_formatters.py:962 -#, python-brace-format -msgid "Changed group membership for {target}" -msgstr "" - -#: src/rc_formatters.py:966 -#, python-brace-format -msgid "{target} got autopromoted to a new usergroup" -msgstr "" - -#: src/rc_formatters.py:981 -#, python-brace-format -msgid "Groups changed from {old_groups} to {new_groups}{reason}" -msgstr "" - -#: src/rc_formatters.py:985 -#, python-brace-format -msgid "Protected {target}" -msgstr "" - -#: src/rc_formatters.py:991 -#, python-brace-format -msgid "Changed protection level for {article}" -msgstr "" - -#: src/rc_formatters.py:997 -#, python-brace-format -msgid "Removed protection from {article}" -msgstr "" - -#: src/rc_formatters.py:1001 -#, python-brace-format -msgid "Changed visibility of revision on page {article} " -msgid_plural "Changed visibility of {amount} revisions on page {article} " -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1013 -#, python-brace-format -msgid "Imported {article} with {count} revision" -msgid_plural "Imported {article} with {count} revisions" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1018 -#, python-brace-format -msgid "Restored {article}" -msgstr "" - -#: src/rc_formatters.py:1021 -msgid "Changed visibility of log events" -msgstr "" - -#: src/rc_formatters.py:1031 -#, python-brace-format -msgid "Imported {article} with {count} revision from \"{source}\"" -msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1036 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "" - -#: src/rc_formatters.py:1039 -#, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "" - -#: src/rc_formatters.py:1042 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "" - -#: src/rc_formatters.py:1046 -msgid "Created account automatically" -msgstr "" - -#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 -msgid "Created account" -msgstr "" - -#: src/rc_formatters.py:1052 -#, python-brace-format -msgid "Created account {article}" -msgstr "" - -#: src/rc_formatters.py:1055 -#, python-brace-format -msgid "Created account {article} and password was sent by email" -msgstr "" - -#: src/rc_formatters.py:1061 -msgid "Added an entry to the interwiki table" -msgstr "" - -#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "" - -#: src/rc_formatters.py:1067 -msgid "Edited an entry in interwiki table" -msgstr "" - -#: src/rc_formatters.py:1073 -msgid "Deleted an entry in interwiki table" -msgstr "" - -#: src/rc_formatters.py:1074 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "" - -#: src/rc_formatters.py:1077 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "" - -#: src/rc_formatters.py:1078 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "" - -#: src/rc_formatters.py:1083 -#, python-brace-format -msgid "Created the page {article} using a non-default content model" -msgstr "" - -#: src/rc_formatters.py:1084 -#, python-brace-format -msgid "Created with model {new}: {reason}" -msgstr "" - -#: src/rc_formatters.py:1087 -#, python-brace-format -msgid "Edited the sprite for {article}" -msgstr "" - -#: src/rc_formatters.py:1090 -#, python-brace-format -msgid "Created the sprite sheet for {article}" -msgstr "" - -#: src/rc_formatters.py:1093 -#, python-brace-format -msgid "Edited the slice for {article}" -msgstr "" - -#: src/rc_formatters.py:1099 -#, python-brace-format -msgid "Created the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1103 -#, python-brace-format -msgid "Deleted the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1110 -#, python-brace-format -msgid "Recreated the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1117 -#, python-brace-format -msgid "Replaced the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1121 -#, python-brace-format -msgid "Created the tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1125 -#, python-brace-format -msgid "Deleted the tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1127 -msgid "Removed from" -msgstr "" - -#: src/rc_formatters.py:1127 -msgid "{} revision or log entry" -msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1131 -#, python-brace-format -msgid "Activated the tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1134 -#, python-brace-format -msgid "Deactivated the tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1137 -msgid "Changed wiki settings" -msgstr "" - -#: src/rc_formatters.py:1141 -#, python-brace-format -msgid "Deleted a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1144 -#, python-brace-format -msgid "Locked a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1147 -#, python-brace-format -msgid "Modified \"{namespace_name}\" namespace" -msgstr "" - -#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 -msgid "Wiki" -msgstr "" - -#: src/rc_formatters.py:1151 -#, python-brace-format -msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "" - -#: src/rc_formatters.py:1157 -#, python-brace-format -msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "" - -#: src/rc_formatters.py:1160 -#, python-brace-format -msgid "Undeleted a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1163 -#, python-brace-format -msgid "Unlocked a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1166 -#, python-brace-format -msgid "Generated {file} dump" -msgstr "" - -#: src/rc_formatters.py:1169 -#, python-brace-format -msgid "Deleted {file} dump" -msgstr "" - -#: src/rc_formatters.py:1177 -#, python-brace-format -msgid "Marked \"{article}\" for translation" -msgstr "" - -#: src/rc_formatters.py:1180 -#, python-brace-format -msgid "Removed \"{article}\" from the translation system" -msgstr "" - -#: src/rc_formatters.py:1183 -#, python-brace-format -msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1186 -#, python-brace-format -msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1189 -#, python-brace-format -msgid "Completed deletion of translatable page \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1192 -#, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translatable page " -"\"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1195 -#, python-brace-format -msgid "Completed deletion of translation page \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1198 -#, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1201 -#, python-brace-format -msgid "Encouraged translation of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1204 -#, python-brace-format -msgid "Discouraged translation of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1210 -#, python-brace-format -msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1212 -#, python-brace-format -msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1214 -#, python-brace-format -msgid "Removed priority languages from \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1217 -#, python-brace-format -msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1220 -#, python-brace-format -msgid "" -"Removed translatable page \"{article}\" from aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1227 -#, python-brace-format -msgid "Reviewed translation \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1230 -#, python-brace-format -msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1232 -msgid "Old state" -msgstr "" - -#: src/rc_formatters.py:1233 -msgid "New state" -msgstr "" - -#: src/rc_formatters.py:1242 -#, python-brace-format -msgid "Changed the language of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1243 -msgid "Old language" -msgstr "" - -#: src/rc_formatters.py:1244 -msgid "New language" -msgstr "" - -#: src/rc_formatters.py:1248 -#, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1250 -#, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "" - -#: src/rc_formatters.py:1254 -msgid "Action has been hidden by administration" -msgstr "" - -#: src/rc_formatters.py:1259 +#: src/rc_formatters.py:518 src/discussion_formatters.py:57 #, python-brace-format msgid "Unknown event `{event}`" msgstr "" -#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 +#: src/rc_formatters.py:524 src/rc_formatters.py:526 +#: src/discussion_formatters.py:63 src/discussion_formatters.py:65 msgid "Report this on the support server" msgstr "" -#: src/rc_formatters.py:1283 -msgid "Tags" -msgstr "" - -#: src/rc_formatters.py:1288 +#: src/rc_formatters.py:547 src/api/util.py:152 msgid "**Added**: " msgstr "" -#: src/rc_formatters.py:1288 +#: src/rc_formatters.py:547 src/api/util.py:153 msgid " and {} more\n" msgstr "" -#: src/rc_formatters.py:1289 +#: src/rc_formatters.py:548 src/api/util.py:155 msgid "**Removed**: " msgstr "" -#: src/rc_formatters.py:1289 +#: src/rc_formatters.py:548 src/api/util.py:156 msgid " and {} more" msgstr "" -#: src/rc_formatters.py:1290 +#: src/rc_formatters.py:549 src/api/util.py:158 msgid "Changed categories" msgstr "" + +#: src/wiki.py:381 +#, python-brace-format +msgid "{wiki} seems to be down or unreachable." +msgstr "" + +#: src/wiki.py:382 src/wiki.py:394 +msgid "Connection status" +msgstr "" + +#: src/wiki.py:392 +#, python-brace-format +msgid "Connection to {wiki} seems to be stable now." +msgstr "" + +#: src/misc.py:44 +msgid "Location" +msgstr "" + +#: src/misc.py:44 +msgid "About me" +msgstr "" + +#: src/misc.py:44 +msgid "Google link" +msgstr "" + +#: src/misc.py:44 +msgid "Facebook link" +msgstr "" + +#: src/misc.py:44 +msgid "Twitter link" +msgstr "" + +#: src/misc.py:44 +msgid "Reddit link" +msgstr "" + +#: src/misc.py:44 +msgid "Twitch link" +msgstr "" + +#: src/misc.py:44 +msgid "PSN link" +msgstr "" + +#: src/misc.py:44 +msgid "VK link" +msgstr "" + +#: src/misc.py:44 +msgid "XBL link" +msgstr "" + +#: src/misc.py:44 +msgid "Steam link" +msgstr "" + +#: src/misc.py:44 +msgid "Discord handle" +msgstr "" + +#: src/misc.py:44 +msgid "Battle.net handle" +msgstr "" + +#: src/misc.py:128 +msgid "" +"\n" +"__And more__" +msgstr "" + +#: src/api/util.py:59 src/api/util.py:64 +msgid "__Only whitespace__" +msgstr "" + +#: src/api/util.py:69 src/discord/redaction.py:77 src/discord/redaction.py:80 +#: src/discord/redaction.py:85 +msgid "Removed" +msgstr "" + +#: src/api/util.py:71 +msgid "Added" +msgstr "" + +#: venv/lib/python3.9/site-packages/isort/main.py:159 +msgid "show this help message and exit" +msgstr "" diff --git a/scripts/generate-translations.sh b/scripts/generate-translations.sh index c5cd0e4..bcea4ff 100644 --- a/scripts/generate-translations.sh +++ b/scripts/generate-translations.sh @@ -1,8 +1,10 @@ cd .. -declare -a StringArray=("discussion_formatters" "rc_formatters" "rcgcdw" "rc" "misc") +declare -a StringArray=("rcgcdw" "rc" "misc") for file in ${StringArray[@]}; do xgettext -L Python --package-name=RcGcDw -o "locale/templates/$file.pot" src/$file.py done +# Get all translatable files for formatters +find . -name '*.py' -print | xargs xgettext -L Python --package-name=RcGcDw -o "locale/templates/formatters.pot" for language in de fr lol pl pt-br ru uk zh-hans zh-hant hi do for file in ${StringArray[@]}; do @@ -14,4 +16,5 @@ xgettext -L Python --package-name=RcGcDw -o "locale/templates/redaction.pot" src for language in de fr lol pl pt-br ru uk zh-hans zh-hant hi do msgmerge -U locale/$language/LC_MESSAGES/redaction.po locale/templates/redaction.pot + msgmerge -U locale/$language/LC_MESSAGES/formatters.po locale/templates/formatters.pot done \ No newline at end of file From 4a02292bac1995dfde1a6e2be0d5356fd1c518bd Mon Sep 17 00:00:00 2001 From: Frisk <702385-piotrex43@users.noreply.gitlab.com> Date: Mon, 10 May 2021 00:16:37 +0000 Subject: [PATCH 071/173] Whoops, fixed serious error in the code of script --- scripts/generate-translations.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/generate-translations.sh b/scripts/generate-translations.sh index bcea4ff..da8af0f 100644 --- a/scripts/generate-translations.sh +++ b/scripts/generate-translations.sh @@ -4,7 +4,7 @@ for file in ${StringArray[@]}; do xgettext -L Python --package-name=RcGcDw -o "locale/templates/$file.pot" src/$file.py done # Get all translatable files for formatters -find . -name '*.py' -print | xargs xgettext -L Python --package-name=RcGcDw -o "locale/templates/formatters.pot" +find extensions/ -name '*.py' -print | xargs xgettext -L Python --package-name=RcGcDw -o "locale/templates/formatters.pot" for language in de fr lol pl pt-br ru uk zh-hans zh-hant hi do for file in ${StringArray[@]}; do @@ -17,4 +17,4 @@ for language in de fr lol pl pt-br ru uk zh-hans zh-hant hi do msgmerge -U locale/$language/LC_MESSAGES/redaction.po locale/templates/redaction.pot msgmerge -U locale/$language/LC_MESSAGES/formatters.po locale/templates/formatters.pot -done \ No newline at end of file +done From b640a090ea186fb2cc09bc80760593d0bb8f7be0 Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Mon, 10 May 2021 07:10:19 +0000 Subject: [PATCH 072/173] Update extensions/base/renameuser.py, extensions/base/interwiki.py, extensions/base/mediawiki.py, extensions/base/curseprofile.py files --- extensions/base/curseprofile.py | 70 ++++++++++++++++++ extensions/base/interwiki.py | 108 +++++++++++++++++++++++++++ extensions/base/mediawiki.py | 126 -------------------------------- extensions/base/renameuser.py | 70 ++++++++++++++++++ 4 files changed, 248 insertions(+), 126 deletions(-) create mode 100644 extensions/base/curseprofile.py create mode 100644 extensions/base/interwiki.py create mode 100644 extensions/base/renameuser.py diff --git a/extensions/base/curseprofile.py b/extensions/base/curseprofile.py new file mode 100644 index 0000000..8eb81ca --- /dev/null +++ b/extensions/base/curseprofile.py @@ -0,0 +1,70 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + + +import logging +from src.discord.message import DiscordMessage +from src.api import formatter +from src.i18n import rc_formatters +from src.api.context import Context +from src.api.util import embed_helper, clean_link, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url + +_ = rc_formatters.gettext +ngettext = rc_formatters.ngettext + + +# CurseProfile - https://help.fandom.com/wiki/Extension:CurseProfile +# renameuser/renameuser - Renaming a user + + +@formatter.embed(event="renameuser/renameuser") +def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + edits = change["logparams"]["edits"] + if edits > 0: + embed["title"] = ngettext("Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"", + "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"", edits).format( + old_name=sanitize_to_markdown(change["logparams"]["olduser"]), edits=edits, + new_name=sanitize_to_markdown(change["logparams"]["newuser"])) + else: + embed["title"] = _("Renamed user \"{old_name}\" to \"{new_name}\"").format( + old_name=sanitize_to_markdown(change["logparams"]["olduser"]), + new_name=sanitize_to_markdown(change["logparams"]["newuser"])) + embed["url"] = create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"])) + return embed + + +@formatter.compact(event="renameuser/renameuser") +def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"]))) + edits = change["logparams"]["edits"] + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + if edits > 0: + content = ngettext( + "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to [{new_name}]({link}){comment}", + "[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to [{new_name}]({link}){comment}", + edits).format( + author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), + edits=edits, + new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment + ) + else: + content = _("[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link}){comment}").format( + author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), + new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/extensions/base/interwiki.py b/extensions/base/interwiki.py new file mode 100644 index 0000000..99477b9 --- /dev/null +++ b/extensions/base/interwiki.py @@ -0,0 +1,108 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + + +import logging +from src.discord.message import DiscordMessage +from src.api import formatter +from src.i18n import rc_formatters +from src.api.context import Context +from src.api.util import embed_helper, clean_link, compact_author, create_article_path, sanitize_to_url + +_ = rc_formatters.gettext +ngettext = rc_formatters.ngettext + + +# Interwiki - https://www.mediawiki.org/wiki/Extension:Interwiki +# interwiki/iw_add - Added entry to interwiki table + + +@formatter.embed(event="interwiki/iw_add", mode="embed") +def embed_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change, set_desc=False) + embed["url"] = create_article_path("Special:Interwiki") + embed["title"] = _("Added an entry to the interwiki table") + embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, + prefix=change["logparams"]['0'], + website=change["logparams"]['1']) + return embed + + +@formatter.compact(event="interwiki/iw_add") +def compact_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path("Special:Interwiki")) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _( + "[{author}]({author_url}) added an entry to the [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( + author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], + website=change["logparams"]['1'], table_url=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# interwiki/iw_edit - Editing interwiki entry + + +@formatter.embed(event="interwiki/iw_edit", mode="embed") +def embed_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change, set_desc=False) + embed["url"] = create_article_path("Special:Interwiki") + embed["title"] = _("Edited an entry in interwiki table") + embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, + prefix=change["logparams"]['0'], + website=change["logparams"]['1']) + return embed + + +@formatter.compact(event="interwiki/iw_edit") +def compact_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path("Special:Interwiki")) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _( + "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( + author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], + website=change["logparams"]['1'], table_url=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# interwiki/iw_delete - Deleting interwiki entry + + +@formatter.embed(event="interwiki/iw_delete", mode="embed") +def embed_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change, set_desc=False) + embed["url"] = create_article_path("Special:Interwiki") + embed["title"] = _("Deleted an entry in interwiki table") + embed["description"] = _("Prefix: {prefix} | {desc}").format(desc=ctx.parsedcomment, + prefix=change["logparams"]['0']) + return embed + + +@formatter.compact(event="interwiki/iw_delete") +def compact_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path("Special:Interwiki")) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + content = _("[{author}]({author_url}) deleted an entry in [interwiki table]({table_url}){desc}").format( + author=author, + author_url=author_url, + table_url=link, + desc=parsed_comment) + + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 8065edc..8d72adf 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -988,88 +988,6 @@ def compact_newusers_newusers(ctx, change): return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) -# interwiki/iw_add - Added entry to interwiki table - - -@formatter.embed(event="interwiki/iw_add", mode="embed") -def embed_interwiki_iw_add(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) - embed["url"] = create_article_path("Special:Interwiki") - embed["title"] = _("Added an entry to the interwiki table") - embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, - prefix=change["logparams"]['0'], - website=change["logparams"]['1']) - return embed - - -@formatter.compact(event="interwiki/iw_add") -def compact_interwiki_iw_add(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path("Special:Interwiki")) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _( - "[{author}]({author_url}) added an entry to the [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( - author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], - website=change["logparams"]['1'], table_url=link) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) - - -# interwiki/iw_edit - Editing interwiki entry - - -@formatter.embed(event="interwiki/iw_edit", mode="embed") -def embed_interwiki_iw_edit(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) - embed["url"] = create_article_path("Special:Interwiki") - embed["title"] = _("Edited an entry in interwiki table") - embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment, - prefix=change["logparams"]['0'], - website=change["logparams"]['1']) - return embed - - -@formatter.compact(event="interwiki/iw_edit") -def compact_interwiki_iw_edit(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path("Special:Interwiki")) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _( - "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( - author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], - website=change["logparams"]['1'], table_url=link) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) - - -# interwiki/iw_delete - Deleting interwiki entry - - -@formatter.embed(event="interwiki/iw_delete", mode="embed") -def embed_interwiki_iw_delete(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) - embed["url"] = create_article_path("Special:Interwiki") - embed["title"] = _("Deleted an entry in interwiki table") - embed["description"] = _("Prefix: {prefix} | {desc}").format(desc=ctx.parsedcomment, - prefix=change["logparams"]['0']) - return embed - - -@formatter.compact(event="interwiki/iw_delete") -def compact_interwiki_iw_delete(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path("Special:Interwiki")) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - content = _("[{author}]({author_url}) deleted an entry in [interwiki table]({table_url}){desc}").format( - author=author, - author_url=author_url, - table_url=link, - desc=parsed_comment) - - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) - - # contentmodel/change - Changing the content model of a page @@ -1250,47 +1168,3 @@ def compact_managetags_deactivate(ctx, change): tag_url=link, comment=ctx.parsedcomment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) - - -# renameuser/renameuser - Renaming a user - - -@formatter.embed(event="renameuser/renameuser") -def embed_renameuser_renameuser(ctx, change): - embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) - edits = change["logparams"]["edits"] - if edits > 0: - embed["title"] = ngettext("Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"", - "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"", edits).format( - old_name=sanitize_to_markdown(change["logparams"]["olduser"]), edits=edits, - new_name=sanitize_to_markdown(change["logparams"]["newuser"])) - else: - embed["title"] = _("Renamed user \"{old_name}\" to \"{new_name}\"").format( - old_name=sanitize_to_markdown(change["logparams"]["olduser"]), - new_name=sanitize_to_markdown(change["logparams"]["newuser"])) - embed["url"] = create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"])) - return embed - - -@formatter.compact(event="renameuser/renameuser") -def compact_renameuser_renameuser(ctx, change): - author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"]))) - edits = change["logparams"]["edits"] - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - if edits > 0: - content = ngettext( - "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to [{new_name}]({link}){comment}", - "[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to [{new_name}]({link}){comment}", - edits).format( - author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), - edits=edits, - new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment - ) - else: - content = _("[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link}){comment}").format( - author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), - new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment - ) - return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/extensions/base/renameuser.py b/extensions/base/renameuser.py new file mode 100644 index 0000000..fa2aad4 --- /dev/null +++ b/extensions/base/renameuser.py @@ -0,0 +1,70 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + + +import logging +from src.discord.message import DiscordMessage +from src.api import formatter +from src.i18n import rc_formatters +from src.api.context import Context +from src.api.util import embed_helper, clean_link, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url + +_ = rc_formatters.gettext +ngettext = rc_formatters.ngettext + + +# Renameuser - https://www.mediawiki.org/wiki/Extension:Renameuser +# renameuser/renameuser - Renaming a user + + +@formatter.embed(event="renameuser/renameuser") +def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + edits = change["logparams"]["edits"] + if edits > 0: + embed["title"] = ngettext("Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"", + "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"", edits).format( + old_name=sanitize_to_markdown(change["logparams"]["olduser"]), edits=edits, + new_name=sanitize_to_markdown(change["logparams"]["newuser"])) + else: + embed["title"] = _("Renamed user \"{old_name}\" to \"{new_name}\"").format( + old_name=sanitize_to_markdown(change["logparams"]["olduser"]), + new_name=sanitize_to_markdown(change["logparams"]["newuser"])) + embed["url"] = create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"])) + return embed + + +@formatter.compact(event="renameuser/renameuser") +def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"]))) + edits = change["logparams"]["edits"] + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + if edits > 0: + content = ngettext( + "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to [{new_name}]({link}){comment}", + "[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to [{new_name}]({link}){comment}", + edits).format( + author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), + edits=edits, + new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment + ) + else: + content = _("[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link}){comment}").format( + author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), + new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment + ) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) From 6730fd89f2fb5a2315deb51576876cf4a203d866 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 10 May 2021 15:04:39 +0200 Subject: [PATCH 073/173] Add installation of pytest before generating report for unittests --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1820e5a..4ef757c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,6 +6,7 @@ include: pytest: stage: test script: + - pip3.7 install -U pytest - pytest --junitxml=report.xml artifacts: when: always From bdc7ea40bbabb91cd34b9664896beae2ac9547b4 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 10 May 2021 16:22:29 +0200 Subject: [PATCH 074/173] Updated i18n for formatters --- docs/API spec.md | 33 +++++++++++++++++++++++---------- extensions/base/abusefilter.py | 6 +++--- extensions/base/cargo.py | 6 +++--- extensions/base/datadump.py | 6 +++--- extensions/base/discussions.py | 4 ++-- extensions/base/managewiki.py | 6 +++--- extensions/base/mediawiki.py | 6 +++--- extensions/base/sprite.py | 6 +++--- extensions/base/translate.py | 6 +++--- src/api/util.py | 4 ++-- src/i18n.py | 5 ++--- src/rc_formatters.py | 6 +++--- 12 files changed, 53 insertions(+), 41 deletions(-) diff --git a/docs/API spec.md b/docs/API spec.md index 1f7c02d..fecca0f 100644 --- a/docs/API spec.md +++ b/docs/API spec.md @@ -38,6 +38,7 @@ There are also additional made up cases like a single event type of "abuselog" f ## Example formatter + ```python import logging @@ -45,25 +46,37 @@ from src.discord.message import DiscordMessage from src.api import formatter from src.api.context import Context from src.api.util import create_article_path, link_formatter -from src.i18n import rc_formatters +from src.i18n import formatters_i18n -_ = rc_formatters.gettext +_ = formatters_i18n.gettext logger = logging.getLogger("extensions.abusefilter") @formatter.embed(event="abuselog/modify", mode="embed") def embed_modify(ctx: Context, change: dict) -> DiscordMessage: - embed = DiscordMessage(ctx.message_type, ctx.event, webhook_url=ctx.webhook_url) - embed.set_link(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"]))) - embed["title"] = _("Edited abuse filter number {number}").format(number=change["logparams"]['newId']) - return embed - + embed = DiscordMessage(ctx.message_type, ctx.event, webhook_url=ctx.webhook_url) + embed.set_link(create_article_path( + "Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], + historyid=change["logparams"][ + "historyId"]))) + embed["title"] = _("Edited abuse filter number {number}").format(number=change["logparams"]['newId']) + return embed + + @formatter.compact(event="abuselog/modify") def embed_modify(ctx: Context, change: dict) -> DiscordMessage: - link = link_formatter(create_article_path("Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"]["historyId"]))) - content = _("[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})").format(author=author, author_url=author_url, number=change["logparams"]['newId'], filter_url=link) - return DiscordMessage + link = link_formatter(create_article_path( + "Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], + historyid=change["logparams"][ + "historyId"]))) + content = _("[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})").format(author=author, + author_url=author_url, + number=change[ + "logparams"][ + 'newId'], + filter_url=link) + return DiscordMessage ``` diff --git a/extensions/base/abusefilter.py b/extensions/base/abusefilter.py index 7c82e3a..d60bfa9 100644 --- a/extensions/base/abusefilter.py +++ b/extensions/base/abusefilter.py @@ -17,14 +17,14 @@ import ipaddress import logging from src.discord.message import DiscordMessage from src.api import formatter -from src.i18n import rc_formatters +from src.i18n import formatters_i18n from src.api.context import Context from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author, \ create_article_path, sanitize_to_markdown from src.configloader import settings -_ = rc_formatters.gettext -ngettext = rc_formatters.ngettext +_ = formatters_i18n.gettext +ngettext = formatters_i18n.ngettext abusefilter_results = {"": _("None"), "warn": _("Warning issued"), "block": _("**Blocked user**"), "tag": _("Tagged the edit"), "disallow": _("Disallowed the action"), "rangeblock": _("**IP range blocked**"), "throttle": _("Throttled actions"), "blockautopromote": _("Removed autoconfirmed group"), "degroup": _("**Removed from privileged groups**")} abusefilter_actions = {"edit": _("Edit"), "upload": _("Upload"), "move": _("Move"), "stashupload": _("Stash upload"), "delete": _("Deletion"), "createaccount": _("Account creation"), "autocreateaccount": _("Auto account creation")} diff --git a/extensions/base/cargo.py b/extensions/base/cargo.py index 4707e2b..af7d484 100644 --- a/extensions/base/cargo.py +++ b/extensions/base/cargo.py @@ -17,12 +17,12 @@ import logging import re from src.discord.message import DiscordMessage from src.api import formatter -from src.i18n import rc_formatters +from src.i18n import formatters_i18n from src.api.context import Context from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown -_ = rc_formatters.gettext -ngettext = rc_formatters.ngettext +_ = formatters_i18n.gettext +ngettext = formatters_i18n.ngettext # Cargo - https://www.mediawiki.org/wiki/Extension:Cargo diff --git a/extensions/base/datadump.py b/extensions/base/datadump.py index 239e529..ed5fc0b 100644 --- a/extensions/base/datadump.py +++ b/extensions/base/datadump.py @@ -17,12 +17,12 @@ import logging from src.discord.message import DiscordMessage from src.api import formatter -from src.i18n import rc_formatters +from src.i18n import formatters_i18n from src.api.context import Context from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url -_ = rc_formatters.gettext -ngettext = rc_formatters.ngettext +_ = formatters_i18n.gettext +ngettext = formatters_i18n.ngettext # DataDumps - https://www.mediawiki.org/wiki/Extension:DataDump diff --git a/extensions/base/discussions.py b/extensions/base/discussions.py index 44a97fe..9a778b8 100644 --- a/extensions/base/discussions.py +++ b/extensions/base/discussions.py @@ -26,9 +26,9 @@ from src.api.context import Context from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata from src.api import formatter -from src.i18n import discussion_formatters +from src.i18n import formatters_i18n -_ = discussion_formatters.gettext +_ = formatters_i18n.gettext logger = logging.getLogger("rcgcdw.discussion_formatter") diff --git a/extensions/base/managewiki.py b/extensions/base/managewiki.py index e09dbb0..993c7d8 100644 --- a/extensions/base/managewiki.py +++ b/extensions/base/managewiki.py @@ -16,12 +16,12 @@ import logging from src.discord.message import DiscordMessage from src.api import formatter -from src.i18n import rc_formatters +from src.i18n import formatters_i18n from src.api.context import Context from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url -_ = rc_formatters.gettext -ngettext = rc_formatters.ngettext +_ = formatters_i18n.gettext +ngettext = formatters_i18n.ngettext # ManageWiki - https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:ManageWiki diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 8065edc..e6e5d8e 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -21,15 +21,15 @@ import datetime from collections import OrderedDict from src.discord.message import DiscordMessage from src.api import formatter -from src.i18n import rc_formatters +from src.i18n import formatters_i18n from src.api.context import Context from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author, \ create_article_path, sanitize_to_markdown from src.configloader import settings from src.exceptions import * -_ = rc_formatters.gettext -ngettext = rc_formatters.ngettext +_ = formatters_i18n.gettext +ngettext = formatters_i18n.ngettext logger = logging.getLogger("extensions.base") diff --git a/extensions/base/sprite.py b/extensions/base/sprite.py index f1c7a80..cd3423d 100644 --- a/extensions/base/sprite.py +++ b/extensions/base/sprite.py @@ -16,13 +16,13 @@ import logging from src.discord.message import DiscordMessage from src.api import formatter -from src.i18n import rc_formatters +from src.i18n import formatters_i18n from src.api.context import Context from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, \ clean_link -_ = rc_formatters.gettext -ngettext = rc_formatters.ngettext +_ = formatters_i18n.gettext +ngettext = formatters_i18n.ngettext # SpriteSheet - https://www.mediawiki.org/wiki/Extension:SpriteSheet diff --git a/extensions/base/translate.py b/extensions/base/translate.py index 13e96fd..c7360ea 100644 --- a/extensions/base/translate.py +++ b/extensions/base/translate.py @@ -16,13 +16,13 @@ import logging from src.discord.message import DiscordMessage from src.api import formatter -from src.i18n import rc_formatters +from src.i18n import formatters_i18n from src.api.context import Context from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, \ clean_link -_ = rc_formatters.gettext -ngettext = rc_formatters.ngettext +_ = formatters_i18n.gettext +ngettext = formatters_i18n.ngettext # I cried when I realized I have to migrate Translate extension logs, but this way I atone for my countless sins # Translate - https://www.mediawiki.org/wiki/Extension:Translate diff --git a/src/api/util.py b/src/api/util.py index b5e55d5..ed2e4db 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -20,9 +20,9 @@ from src.discord.message import DiscordMessage from src.configloader import settings import src.misc import logging -from src.i18n import rc_formatters +from src.i18n import formatters_i18n -_ = rc_formatters.gettext +_ = formatters_i18n.gettext if TYPE_CHECKING: from src.api.context import Context diff --git a/src/i18n.py b/src/i18n.py index 116a754..c8dad74 100644 --- a/src/i18n.py +++ b/src/i18n.py @@ -22,13 +22,12 @@ logger = logging.getLogger("rcgcdw.i18n") try: if settings["lang"] != "en": rcgcdw = gettext.translation('rcgcdw', localedir='locale', languages=[settings["lang"]]) - discussion_formatters = gettext.translation('discussion_formatters', localedir='locale', languages=[settings["lang"]]) rc = gettext.translation('rc', localedir='locale', languages=[settings["lang"]]) - rc_formatters = gettext.translation('rc_formatters', localedir='locale', languages=[settings["lang"]]) + formatters_i18n = gettext.translation('formatters', localedir='locale', languages=[settings["lang"]]) misc = gettext.translation('misc', localedir='locale', languages=[settings["lang"]]) redaction = gettext.translation('redaction', localedir='locale', languages=[settings["lang"]]) else: - rcgcdw, discussion_formatters, rc, rc_formatters, misc, redaction = gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations() + rcgcdw, discussion_formatters, rc, formatters_i18n, misc, redaction = gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations() except FileNotFoundError: logger.critical("No language files have been found. Make sure locale folder is located in the directory.") sys.exit(1) diff --git a/src/rc_formatters.py b/src/rc_formatters.py index 5265138..0826a1e 100644 --- a/src/rc_formatters.py +++ b/src/rc_formatters.py @@ -36,10 +36,10 @@ from src.discord.message import DiscordMessage, DiscordMessageMetadata if AUTO_SUPPRESSION_ENABLED: from src.discord.redaction import delete_messages, redact_messages -from src.i18n import rc_formatters +from src.i18n import formatters_i18n #from src.rc import recent_changes, pull_comment -_ = rc_formatters.gettext -ngettext = rc_formatters.ngettext +_ = formatters_i18n.gettext +ngettext = formatters_i18n.ngettext logger = logging.getLogger("rcgcdw.rc_formatters") #from src.rcgcdw import recent_changes, ngettext, logger, profile_field_name, LinkParser, pull_comment From 8fa810854a8d2cfb51ae34fda61dc370e7d1de66 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 10 May 2021 18:22:45 +0200 Subject: [PATCH 075/173] Added some more content to the docs --- docs/API spec.md | 45 +++++++++++++++++++++++++++++++++++++++++---- src/api/context.py | 2 ++ 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/docs/API spec.md b/docs/API spec.md index fecca0f..ee6894b 100644 --- a/docs/API spec.md +++ b/docs/API spec.md @@ -26,7 +26,40 @@ Directory with extensions should be possible to be changed using settings.json /extensions/posthooks/ ## API -api object exposes various data which allows to extend the usefulness of what can be then sent to Discord. +api object exposes various data which allows to extend the usefulness of what can be then sent to Discord. It also contains +common functions that can be used to interact with the script and the wiki. + +### Client +**Path**: `src.api.client.Client` +_Client is a class containing most of usable methods and communication layer with the core functionality._ +Client consists of the following fields: +- WIKI_API_PATH - string - URL path leading to API (`WIKI_DOMAIN/api.php`) +- WIKI_ARTICLE_PATH - string - URL path leading to article path (`WIKI_DOMAIN/articlepath`) +- WIKI_SCRIPT_PATH - string - URL path leading to script path of the wiki (`WIKI_DOMAIN/`) +- WIKI_JUST_DOMAIN - string - URL path leading just to the wiki domain (`WIKI_DOMAIN`) +- content_parser - class - a reference to HTMLParser implementation that parses edit diffs +- tags - dict - a container storing all [tags](https://www.mediawiki.org/wiki/Manual:Tags) the wiki has configured +- namespaces - dict - a dictionary of [namespaces](https://www.mediawiki.org/wiki/Manual:Namespace) on the wiki +- LinkParser - class - a class of LinkParser which is usually used to parse parsed_comment from events including turning URLs into Markdown links +Client consists of the following methods: +- refresh_internal_data() - requests namespaces, tags and MediaWiki messages to be retrieved and updated in internal storage +- parse_links(text: str) - parses links using LinkParser object +- pull_curseprofile_comment(comment_id: Union[str, int]) - allows to retrieve CurseProfile comment from wikis originated from Gamepedia +- make_api_request(params: Union[str, OrderedDict], *json_path: str, timeout: int = 10, allow_redirects: bool = False) - allows to make a request to the wiki with parameters specified in params argument, json_path additionally allows to provide a list of strings that will be iterated over and json path of the result of this iteration returned. Timeout in float (seconds) can be added to limit the time for response, allow_redirects can be set to disallow or allow redirects +- get_formatters() - returns a dictionary of all formatters in format of `{'eventtype': func}` +- get_ipmapper() - returns ip mapper which tracks edit counts of IP editors + +### Context +**Path**: `src.api.context.Context` +_Context is a class which objects of are only used as first argument of formatter definitions._ +Context can consist of the following fields: +- client - Client object +- webhook_url - string - webhook url for given formatter +- message_type - string - can be either `embed` or `compact` +- categories - {"new": set(), "removed": set()} - each set containing strings of added or removed categories for given page +- parsedcomment - string - contains escaped and Markdown parsed summary (parsed_comment) of a log/edit action +- event - string - action called, should be the same as formatter event action +- comment_page - dict - containing `fullUrl` and `article` with strings both to full article url and its name ### Language support @@ -45,7 +78,7 @@ import logging from src.discord.message import DiscordMessage from src.api import formatter from src.api.context import Context -from src.api.util import create_article_path, link_formatter +from src.api.util import create_article_path, clean_link from src.i18n import formatters_i18n _ = formatters_i18n.gettext @@ -66,7 +99,7 @@ def embed_modify(ctx: Context, change: dict) -> DiscordMessage: @formatter.compact(event="abuselog/modify") def embed_modify(ctx: Context, change: dict) -> DiscordMessage: - link = link_formatter(create_article_path( + link = clean_link(create_article_path( "Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], historyid=change["logparams"][ "historyId"]))) @@ -95,4 +128,8 @@ class test1(Hook): def compact_modify(self, base_msg: DiscordMessage, change: dict) -> DiscordMessage: return DiscordMessage -``` \ No newline at end of file +``` + +[]: https://www.mediawiki.org/wiki/Manual:Tagstags + +[https://www.mediawiki.org/wiki/Manual:Namespace]: https://www.mediawiki.org/wiki/Manual:Namespace \ No newline at end of file diff --git a/src/api/context.py b/src/api/context.py index f921223..ffb3470 100644 --- a/src/api/context.py +++ b/src/api/context.py @@ -25,6 +25,8 @@ class Context: self.client = client self.webhook_url = webhook_url self.message_type = message_type + self.categories = None + self.parsedcomment = None self.event = None self.comment_page = None From 34177cb7d234b49bdbb780e8dd610bd8290f0b95 Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 11 May 2021 12:07:03 +0200 Subject: [PATCH 076/173] Made the extension directory be configurable --- settings.json.example | 1 + src/rcgcdw.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/settings.json.example b/settings.json.example index ad4ef79..697b650 100644 --- a/settings.json.example +++ b/settings.json.example @@ -20,6 +20,7 @@ "ignored": ["external", "newusers/create", "newusers/autocreate", "newusers/create2", "newusers/byemail", "newusers/newusers"], "show_updown_messages": true, "ignored_namespaces": [], + "extensions_dir": "extensions", "overview": false, "overview_time": "00:00", "send_empty_overview": false, diff --git a/src/rcgcdw.py b/src/rcgcdw.py index c3ee456..e94b85f 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -19,7 +19,7 @@ # WARNING! SHITTY CODE AHEAD. ENTER ONLY IF YOU ARE SURE YOU CAN TAKE IT # You have been warned -import time, logging.config, requests, datetime, math, os.path, schedule, sys, re +import time, logging.config, requests, datetime, math, os.path, schedule, sys, re, importlib import src.misc from collections import defaultdict, Counter @@ -55,7 +55,7 @@ logger.debug("Current settings: {settings}".format(settings=settings)) def load_extensions(): """Loads all of the extensions, can be a local import because all we need is them to register""" try: - import extensions + importlib.import_module(settings.get('extensions_dir', 'extensions'), 'extensions') except ImportError: logger.critical("No extensions module found. What's going on?") sys.exit(1) From f78aa15849435eae759f0d5d3dd5ecbd1f3636aa Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 11 May 2021 12:07:15 +0200 Subject: [PATCH 077/173] Updated documentation --- docs/API spec.md | 202 ++++++++++++++++++++++------------------------- 1 file changed, 94 insertions(+), 108 deletions(-) diff --git a/docs/API spec.md b/docs/API spec.md index ee6894b..e9d274b 100644 --- a/docs/API spec.md +++ b/docs/API spec.md @@ -1,135 +1,121 @@ ## About -This is a specification for RcGcDw API extending formatters and allowing to add additional pre and post processing hooks for message contents. +This is a specification for RcGcDw API extending formatters and allowing to add additional pre and post processing hooks for message contents. +This document assumes you have at least a basic understanding of Python, concept of classes, objects and decorators. ### Pre-processing hook -A class allowing to change the message content and/or execute additional actions each time given event gets read. This type of hook executes before a formatter. +A class allowing to change the raw event values obtained for a change via query.recentchanges endpoint on the wiki and/or execute additional actions each time given event gets read. This type of hook executes before a formatter. ### Formatters -Formatters allow to specify how does a Discord message look like depending on message mode (embed, compact) and type of the event that had happened on the wiki (new, edit etc). -If formatter for given event is not registered, the script will look for formatter for event "generic" and if this is also not found it will throw a wartning. +Formatters allow specifying how does a Discord message look like depending on message mode (embed, compact) and type of the event that had happened on the wiki (new, edit etc). +If formatter for given event is not registered, the script will look for formatter for event "generic" and if this is also not found it will throw a warning. ### Post-processing hook A class allowing to change the message content and/or execute additional actions after message has been processed by the formatter. This type of hook executes after a formatter. ## File structure -Directory with extensions should be possible to be changed using settings.json -/ - /src - /extensions - /extensions/base - /extensions/abusefilter - /extensions/abusefilter/abusefilter.py - /extensions/managewiki - /extensions/managewiki/managewiki.py - /extensions/prehooks/ - /extensions/prehooks/friskyhooks.py - /extensions/posthooks/ +Directory with extensions is specified by setting `extensions_dir` in settings.json. +The directory with hooks and formatters needs to be below root directory (directory in which start.py is located) and every directory inside it needs to be a Python package importing its child packages and modules. + +. +├── extensions +│   ├── base +│   │   ├── abusefilter.py +│   │   ├── my_formatters.py +│   │   ├── \_\_init\_\_.py +│   ├── hooks +│   │   ├── my_hooks.py +│   │   ├── \_\_init\_\_.py +│   ├── \_\_init\_\_.py +├── start.py ## API api object exposes various data which allows to extend the usefulness of what can be then sent to Discord. It also contains common functions that can be used to interact with the script and the wiki. +### Formatter +**Path**: `src.api.formatter` +_Formatter module implements two decorators: `embed` and `compact`. Both of them can take the following keyword arguments:_ +- `event` - string - event type for formatter, in case the event is a [log event](https://www.mediawiki.org/wiki/Manual:Log_actions) it's constructed by taking log_type and combining it with log_action with / character in between (for example `upload/overwrite`). If the event however is not a log event but action like edit, the type will consist only of `type` value. +- `aliases` - list[str] - list of strings containing all the events given event should alias for, it helps in case you want the same function be used for multiple event types. + +Both `event` and `aliases` arguments are optional in formatters. However, every formatter needs to have some kind of event specified. If it's not specified in the decorator, a fallback method will be used which constructs event type in format `{func.__module__}/{func.__name__.split("_", 1)[1]}`, in other terms taking the name of the file in which formatter is defined as first part and entire function name after first _ character as second part. Note that this fallback works only for log events. +There are also additional, made up event types that are special cases, they are listed below: +- `abuselog` – reserved for AbuseFilter filter logs +- `discussion/{post_type.lower()}` – reserved for Fandom's Discussion/Feeds integration +- `suppressed` – reserved for logs that were [suppressed](https://www.mediawiki.org/wiki/Special:MyLanguage/Help:RevisionDelete) and cannot be read by the script + +Formatter decorator registers a Python function and calls it each time a specific event is being processed from the wiki. Function is then called with Context and change arguments where context is [Context object](#Context) and change is a dict object containing the body of a change. +Every formatter **must** return a DiscordMessage object. + +#### Usage + +```python +from src.discord.message import DiscordMessage +from src.api import formatter +from src.i18n import formatters_i18n +from src.api.context import Context +from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, \ + clean_link + +# Setup translation function which is used to translate english strings to other languages +_ = formatters_i18n.gettext + +# Call a decorator and register embed_sprite_sprite function for all sprite/sprite events +@formatter.embed(event="sprite/sprite") +def embed_sprite_sprite(ctx: Context, change: dict) -> DiscordMessage: + # Create DiscordMessage object which constructs Discord embed content + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + # embed_helper function can be used to automatically populate DiscordMessage object with some common useful information such as setting author name/url, adding fields for tags/categories, or setting default description + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + embed["title"] = _("Edited the sprite for {article}").format(article=sanitize_to_markdown(change["title"])) + # return populated DiscordMessage object + return embed + + +@formatter.compact(event="sprite/sprite") +def compact_sprite_sprite(ctx: Context, change: dict) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + content = _("[{author}]({author_url}) edited the sprite for [{article}]({article_url})").format(author=author, + author_url=author_url, + article=sanitize_to_markdown(change[ + "title"]), + article_url=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) +``` + ### Client **Path**: `src.api.client.Client` _Client is a class containing most of usable methods and communication layer with the core functionality._ Client consists of the following fields: -- WIKI_API_PATH - string - URL path leading to API (`WIKI_DOMAIN/api.php`) -- WIKI_ARTICLE_PATH - string - URL path leading to article path (`WIKI_DOMAIN/articlepath`) -- WIKI_SCRIPT_PATH - string - URL path leading to script path of the wiki (`WIKI_DOMAIN/`) -- WIKI_JUST_DOMAIN - string - URL path leading just to the wiki domain (`WIKI_DOMAIN`) -- content_parser - class - a reference to HTMLParser implementation that parses edit diffs -- tags - dict - a container storing all [tags](https://www.mediawiki.org/wiki/Manual:Tags) the wiki has configured -- namespaces - dict - a dictionary of [namespaces](https://www.mediawiki.org/wiki/Manual:Namespace) on the wiki -- LinkParser - class - a class of LinkParser which is usually used to parse parsed_comment from events including turning URLs into Markdown links +- `WIKI_API_PATH` - string - URL path leading to API (`WIKI_DOMAIN/api.php`) +- `WIKI_ARTICLE_PATH` - string - URL path leading to article path (`WIKI_DOMAIN/articlepath`) +- `WIKI_SCRIPT_PATH` - string - URL path leading to script path of the wiki (`WIKI_DOMAIN/`) +- `WIKI_JUST_DOMAIN` - string - URL path leading just to the wiki domain (`WIKI_DOMAIN`) +- `content_parser` - class - a reference to HTMLParser implementation that parses edit diffs +- `tags` - dict - a container storing all [tags](https://www.mediawiki.org/wiki/Manual:Tags) the wiki has configured +- `namespaces` - dict - a dictionary of [namespaces](https://www.mediawiki.org/wiki/Manual:Namespace) on the wiki +- `LinkParser` - class - a class of LinkParser which is usually used to parse parsed_comment from events including turning URLs into Markdown links Client consists of the following methods: -- refresh_internal_data() - requests namespaces, tags and MediaWiki messages to be retrieved and updated in internal storage -- parse_links(text: str) - parses links using LinkParser object -- pull_curseprofile_comment(comment_id: Union[str, int]) - allows to retrieve CurseProfile comment from wikis originated from Gamepedia -- make_api_request(params: Union[str, OrderedDict], *json_path: str, timeout: int = 10, allow_redirects: bool = False) - allows to make a request to the wiki with parameters specified in params argument, json_path additionally allows to provide a list of strings that will be iterated over and json path of the result of this iteration returned. Timeout in float (seconds) can be added to limit the time for response, allow_redirects can be set to disallow or allow redirects -- get_formatters() - returns a dictionary of all formatters in format of `{'eventtype': func}` -- get_ipmapper() - returns ip mapper which tracks edit counts of IP editors +- `refresh_internal_data()` - requests namespaces, tags and MediaWiki messages to be retrieved and updated in internal storage +- `parse_links(text: str)` - parses links using LinkParser object +- `pull_curseprofile_comment(comment_id: Union[str, int])` - allows retrieving CurseProfile comment from wikis originated from Gamepedia +- `make_api_request(params: Union[str, OrderedDict], *json_path: str, timeout: int = 10, allow_redirects: bool = False)` - allows to make a request to the wiki with parameters specified in params argument, json_path additionally allows to provide a list of strings that will be iterated over and json path of the result of this iteration returned. Timeout in float (seconds) can be added to limit the time for response, allow_redirects can be set to disallow or allow redirects +- `get_formatters()` - returns a dictionary of all formatters in format of `{'eventtype': func}` +- `get_ipmapper()` - returns ip mapper which tracks edit counts of IP editors ### Context **Path**: `src.api.context.Context` _Context is a class which objects of are only used as first argument of formatter definitions._ Context can consist of the following fields: -- client - Client object -- webhook_url - string - webhook url for given formatter -- message_type - string - can be either `embed` or `compact` -- categories - {"new": set(), "removed": set()} - each set containing strings of added or removed categories for given page -- parsedcomment - string - contains escaped and Markdown parsed summary (parsed_comment) of a log/edit action -- event - string - action called, should be the same as formatter event action -- comment_page - dict - containing `fullUrl` and `article` with strings both to full article url and its name +- `client` - Client object +- `webhook_url` - string - webhook url for given formatter +- `message_type` - string - can be either `embed` or `compact` +- `categories` - {"new": set(), "removed": set()} - each set containing strings of added or removed categories for given page +- `parsedcomment` - string - contains escaped and Markdown parsed summary (parsed_comment) of a log/edit action +- `event` - string - action called, should be the same as formatter event action +- `comment_page` - dict - containing `fullUrl` and `article` with strings both to full article url and its name ### Language support - - - -### Formatter event types -Formatters can be added based on their "event type". Event type is determined by `type` property for events in Recent Changes MediaWiki API. However in case of log events this becomes not enough and log events are chosen by "logtype/logaction" combination (for example `upload/overwrite`). -There are also additional made up cases like a single event type of "abuselog" for all abuselog related events and "discussion/discussiontype" for Fandom's Discussion technology integration. - - -## Example formatter - -```python - -import logging -from src.discord.message import DiscordMessage -from src.api import formatter -from src.api.context import Context -from src.api.util import create_article_path, clean_link -from src.i18n import formatters_i18n - -_ = formatters_i18n.gettext - -logger = logging.getLogger("extensions.abusefilter") - - -@formatter.embed(event="abuselog/modify", mode="embed") -def embed_modify(ctx: Context, change: dict) -> DiscordMessage: - embed = DiscordMessage(ctx.message_type, ctx.event, webhook_url=ctx.webhook_url) - embed.set_link(create_article_path( - "Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], - historyid=change["logparams"][ - "historyId"]))) - embed["title"] = _("Edited abuse filter number {number}").format(number=change["logparams"]['newId']) - return embed - - -@formatter.compact(event="abuselog/modify") -def embed_modify(ctx: Context, change: dict) -> DiscordMessage: - link = clean_link(create_article_path( - "Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'], - historyid=change["logparams"][ - "historyId"]))) - content = _("[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})").format(author=author, - author_url=author_url, - number=change[ - "logparams"][ - 'newId'], - filter_url=link) - return DiscordMessage - -``` - -## Example hook -```python - -logger = logging.getLogger("extensions.abusefilter") - -class test1(Hook): - def __init__(self, api): - self.api = api - - def embed_modify(self, base_msg: DiscordMessage, change: dict) -> DiscordMessage: - return DiscordMessage - - def compact_modify(self, base_msg: DiscordMessage, change: dict) -> DiscordMessage: - return DiscordMessage - -``` - -[]: https://www.mediawiki.org/wiki/Manual:Tagstags - -[https://www.mediawiki.org/wiki/Manual:Namespace]: https://www.mediawiki.org/wiki/Manual:Namespace \ No newline at end of file +RcGcDw implements i18n with gettext and already exposes Translations instance with its `src.i18` module. formatters_i18n variable is used for instance of all formatters inside base directory. From 6fe55dc09c6897c9502bdeec2c59a7fdd9b1fcc6 Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 11 May 2021 17:02:13 +0200 Subject: [PATCH 078/173] whitespace in docs --- docs/API spec.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/API spec.md b/docs/API spec.md index e9d274b..2d902e7 100644 --- a/docs/API spec.md +++ b/docs/API spec.md @@ -16,7 +16,7 @@ A class allowing to change the message content and/or execute additional actions Directory with extensions is specified by setting `extensions_dir` in settings.json. The directory with hooks and formatters needs to be below root directory (directory in which start.py is located) and every directory inside it needs to be a Python package importing its child packages and modules. -. +. ├── extensions │   ├── base │   │   ├── abusefilter.py From 765d1c9d70a0726279ed9e07a7f7c4f6bdf48c7e Mon Sep 17 00:00:00 2001 From: Frisk Date: Fri, 14 May 2021 14:30:52 +0200 Subject: [PATCH 079/173] Add error tolerance setting --- settings.json.example | 1 + src/discussions.py | 9 ++++++--- src/misc.py | 11 +++++++++++ src/rcgcdw.py | 21 ++++++++++++++------- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/settings.json.example b/settings.json.example index 697b650..bf945d3 100644 --- a/settings.json.example +++ b/settings.json.example @@ -21,6 +21,7 @@ "show_updown_messages": true, "ignored_namespaces": [], "extensions_dir": "extensions", + "error_tolerance": 1, "overview": false, "overview_time": "00:00", "send_empty_overview": false, diff --git a/src/discussions.py b/src/discussions.py index d52be67..0a3b589 100644 --- a/src/discussions.py +++ b/src/discussions.py @@ -21,7 +21,7 @@ from typing import Dict, Any from src.configloader import settings #from src.discussion_formatters import embed_formatter, compact_formatter -from src.misc import datafile, prepare_paths +from src.misc import datafile, prepare_paths, run_hooks from src.discord.queue import messagequeue, send_to_discord from src.discord.message import DiscordMessageMetadata from src.session import session @@ -121,8 +121,11 @@ def parse_discussion_post(post, comment_pages): raise ArticleCommentError event_type = f"discussion/{post_type.lower()}" context.set_comment_page(comment_page) - message = default_message(event_type, formatter_hooks)(context, post) - send_to_discord(message, meta=DiscordMessageMetadata("POST")) + run_hooks(pre_hooks, context, post) + discord_message = default_message(event_type, formatter_hooks)(context, post) + metadata = DiscordMessageMetadata("POST") + run_hooks(post_hooks, discord_message, metadata, context) + send_to_discord(discord_message, metadata) def safe_request(url): diff --git a/src/misc.py b/src/misc.py index fe26bc7..af8ad53 100644 --- a/src/misc.py +++ b/src/misc.py @@ -291,6 +291,17 @@ def send_simple(msgtype, message, name, avatar): send_to_discord(discord_msg, meta=DiscordMessageMetadata("POST")) +def run_hooks(hooks, *arguments): + for hook in hooks: + try: + hook(*arguments) + except: + if settings.get("error_tolerance", 1) > 0: + misc_logger.exception("On running a pre hook, ignoring pre-hook") + else: + raise + + def profile_field_name(name, embed): try: return profile_fields[name] diff --git a/src/rcgcdw.py b/src/rcgcdw.py index e94b85f..de733a7 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -29,7 +29,7 @@ import src.api.client from src.api.context import Context from src.api.hooks import formatter_hooks, pre_hooks, post_hooks from src.configloader import settings -from src.misc import add_to_dict, datafile, WIKI_API_PATH, LinkParser +from src.misc import add_to_dict, datafile, WIKI_API_PATH, LinkParser, run_hooks from src.api.util import create_article_path, default_message, sanitize_to_markdown from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata @@ -235,8 +235,7 @@ def rc_processor(change, changed_categories): page_id=change.get("pageid", None)) logger.debug(change) context = Context(settings["appearance"]["mode"], settings["webhookURL"], client) - for hook in pre_hooks: - hook(change) + run_hooks(pre_hooks, context, change) if ("actionhidden" in change or "suppressed" in change) and "suppressed" not in settings["ignored"]: # if event is hidden using suppression context.event = "suppressed" discord_message: Optional[DiscordMessage] = default_message("suppressed", formatter_hooks)(context, change) @@ -267,7 +266,13 @@ def rc_processor(change, changed_categories): if identification_string in settings["ignored"]: return context.event = identification_string - discord_message: Optional[DiscordMessage] = default_message(identification_string, formatter_hooks)(context, change) + try: + discord_message: Optional[DiscordMessage] = default_message(identification_string, formatter_hooks)(context, change) + except: + if settings.get("error_tolerance", 1) > 0: + discord_message: Optional[DiscordMessage] = None # It's handled by send_to_discord, we still want other code to run + else: + raise if identification_string in ("delete/delete", "delete/delete_redir") and AUTO_SUPPRESSION_ENABLED: # TODO Move it into a hook? delete_messages(dict(pageid=change.get("pageid"))) elif identification_string == "delete/event" and AUTO_SUPPRESSION_ENABLED: @@ -284,8 +289,7 @@ def rc_processor(change, changed_categories): else: for revid in logparams.get("ids", []): delete_messages(dict(revid=revid)) - for hook in post_hooks: - hook(discord_message, metadata) + run_hooks(post_hooks, discord_message, metadata, context) send_to_discord(discord_message, metadata) @@ -294,9 +298,12 @@ def abuselog_processing(entry): if action in settings["ignored"]: return context = Context(settings["appearance"]["mode"], settings["webhookURL"], client) + run_hooks(pre_hooks, context, entry) context.event = action discord_message: Optional[DiscordMessage] = default_message(action, formatter_hooks)(context, entry) - send_to_discord(discord_message, DiscordMessageMetadata("POST")) + metadata = DiscordMessageMetadata("POST") + run_hooks(post_hooks, discord_message, metadata, context) + send_to_discord(discord_message, metadata) load_extensions() From 931e2a95eeb46fbc5114fe024105204a20483f33 Mon Sep 17 00:00:00 2001 From: Frisk Date: Fri, 14 May 2021 19:16:14 +0200 Subject: [PATCH 080/173] Tidied up daily overview functions --- src/rcgcdw.py | 130 +++++++++++++++++++------------------------------- src/wiki.py | 13 ++++- 2 files changed, 60 insertions(+), 83 deletions(-) diff --git a/src/rcgcdw.py b/src/rcgcdw.py index de733a7..9ce4afe 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -22,7 +22,7 @@ import time, logging.config, requests, datetime, math, os.path, schedule, sys, re, importlib import src.misc -from collections import defaultdict, Counter +from collections import defaultdict, Counter, OrderedDict from typing import Optional import src.api.client @@ -33,7 +33,7 @@ from src.misc import add_to_dict, datafile, WIKI_API_PATH, LinkParser, run_hooks from src.api.util import create_article_path, default_message, sanitize_to_markdown from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata -from src.exceptions import MWError +from src.exceptions import MWError, ServerError, MediaWikiError, BadRequest, ClientError from src.i18n import rcgcdw from src.wiki import Wiki @@ -78,102 +78,70 @@ def no_formatter(ctx: Context, change: dict) -> None: formatter_hooks["no_formatter"] = no_formatter -def day_overview_request(): +def day_overview_request() -> list: + """Make requests for changes in last 24h""" logger.info("Fetching daily overview... This may take up to 30 seconds!") timestamp = (datetime.datetime.utcnow() - datetime.timedelta(hours=24)).isoformat(timespec='milliseconds') - logger.debug("timestamp is {}".format(timestamp)) - complete = False result = [] passes = 0 - continuearg = "" - while not complete and passes < 10: - request = wiki._safe_request( - "{wiki}?action=query&format=json&list=recentchanges&rcend={timestamp}Z&rcprop=title%7Ctimestamp%7Csizes%7Cloginfo%7Cuser&rcshow=!bot&rclimit=500&rctype=edit%7Cnew%7Clog{continuearg}".format( - wiki=WIKI_API_PATH, timestamp=timestamp, continuearg=continuearg)) - if request: - try: - request = request.json() - request = wiki.handle_mw_errors(request) - rc = request['query']['recentchanges'] - continuearg = request["continue"]["rccontinue"] if "continue" in request else None - except ValueError: - logger.warning("ValueError in fetching changes") - wiki.downtime_controller(True) - complete = 2 - except KeyError: - logger.warning("Wiki returned %s" % request) - complete = 2 - except MWError: - complete = 2 - else: - result += rc - if continuearg: - continuearg = "&rccontinue={}".format(continuearg) - passes += 1 - logger.debug( - "continuing requesting next pages of recent changes with {} passes and continuearg being {}".format( - passes, continuearg)) - time.sleep(3.0) - else: - complete = 1 + continuearg: Optional[str] = None + while passes < 10: + params = OrderedDict(dict(action="query", format="json", list="recentchanges", rcend=timestamp, + rcprop="title|timestamp|sizes|loginfo|user", rcshow="!bot", rclimit="max", + rctype="edit|new|log", rccontinue=continuearg)) + request = wiki.retried_api_request(params) + result += request['query']['recentchanges'] + if "continue" in request: + continuearg = request["continue"].get("rccontinue", None) else: - complete = 2 - if passes == 10: - logger.debug("quit the loop because there been too many passes") - return result, complete + return result + passes += 1 + logger.debug( + "continuing requesting next pages of recent changes with {} passes and continuearg being {}".format( + passes, continuearg)) + time.sleep(3.0) + logger.debug("quit the loop because there been too many passes") + return result -def daily_overview_sync(edits, files, admin, changed_bytes, new_articles, unique_contributors, day_score): +def daily_overview_sync(data: dict) -> dict: weight = storage["daily_overview"]["days_tracked"] - logger.debug(_) if weight == 0: - storage["daily_overview"].update({"edits": edits, "new_files": files, "admin_actions": admin, "bytes_changed": changed_bytes, "new_articles": new_articles, "unique_editors": unique_contributors, "day_score": day_score}) - edits, files, admin, changed_bytes, new_articles, unique_contributors, day_score = str(edits), str(files), str(admin), str(changed_bytes), str(new_articles), str(unique_contributors), str(day_score) + storage["daily_overview"].update(data) + data_output = {k: str(v) for k, v in data.items()} else: - edits_avg = src.misc.weighted_average(storage["daily_overview"]["edits"], weight, edits) - edits = _("{value} (avg. {avg})").format(value=edits, avg=edits_avg) - files_avg = src.misc.weighted_average(storage["daily_overview"]["new_files"], weight, files) - files = _("{value} (avg. {avg})").format(value=files, avg=files_avg) - admin_avg = src.misc.weighted_average(storage["daily_overview"]["admin_actions"], weight, admin) - admin = _("{value} (avg. {avg})").format(value=admin, avg=admin_avg) - changed_bytes_avg = src.misc.weighted_average(storage["daily_overview"]["bytes_changed"], weight, changed_bytes) - changed_bytes = _("{value} (avg. {avg})").format(value=changed_bytes, avg=changed_bytes_avg) - new_articles_avg = src.misc.weighted_average(storage["daily_overview"]["new_articles"], weight, new_articles) - new_articles = _("{value} (avg. {avg})").format(value=new_articles, avg=new_articles_avg) - unique_contributors_avg = src.misc.weighted_average(storage["daily_overview"]["unique_editors"], weight, unique_contributors) - unique_contributors = _("{value} (avg. {avg})").format(value=unique_contributors, avg=unique_contributors_avg) - day_score_avg = src.misc.weighted_average(storage["daily_overview"]["day_score"], weight, day_score) - day_score = _("{value} (avg. {avg})").format(value=day_score, avg=day_score_avg) - storage["daily_overview"].update({"edits": edits_avg, "new_files": files_avg, "admin_actions": admin_avg, "bytes_changed": changed_bytes_avg, - "new_articles": new_articles_avg, "unique_editors": unique_contributors_avg, "day_score": day_score_avg}) + data_output = {} + for data_point, value in data.items(): + new_average = src.misc.weighted_average(storage["daily_overview"][data_point], weight, value) + data_output[data_point] = _("{value} (avg. {avg})").format(value=value, avg=new_average) + storage["daily_overview"][data_point] = new_average storage["daily_overview"]["days_tracked"] += 1 datafile.save_datafile() - return edits, files, admin, changed_bytes, new_articles, unique_contributors, day_score + return data_output def day_overview(): - result = day_overview_request() - if result[1] == 1: + try: + result = day_overview_request() + except (ServerError, MediaWikiError): + logger.error("Couldn't complete Daily Overview as requests for changes resulted in errors.") + else: activity = defaultdict(dict) hours = defaultdict(dict) articles = defaultdict(dict) - edits = 0 - files = 0 - admin = 0 - changed_bytes = 0 - new_articles = 0 + edits = files = admin = changed_bytes = new_articles = 0 active_articles = [] embed = DiscordMessage("embed", "daily_overview", settings["webhookURL"]) embed["title"] = _("Daily overview") embed["url"] = create_article_path("Special:Statistics") embed.set_author(settings["wikiname"], create_article_path("")) - if not result[0]: + if not result: if not settings["send_empty_overview"]: return # no changes in this day else: embed["description"] = _("No activity") else: - for item in result[0]: + for item in result: if "actionhidden" in item or "suppressed" in item or "userhidden" in item: continue # while such actions have type value (edit/new/log) many other values are hidden and therefore can crash with key error, let's not process such events activity = add_to_dict(activity, item["user"]) @@ -190,7 +158,7 @@ def day_overview(): elif item["type"] == "log": files = files + 1 if item["logtype"] == item["logaction"] == "upload" else files admin = admin + 1 if item["logtype"] in ["delete", "merge", "block", "protect", "import", "rights", - "abusefilter", "interwiki", "managetags"] else admin + "abusefilter", "interwiki", "managetags"] else admin overall = round(new_articles + edits * 0.1 + files * 0.3 + admin * 0.1 + math.fabs(changed_bytes * 0.001), 2) if activity: active_users = [] @@ -204,27 +172,25 @@ def day_overview(): active_hours.append(str(hour)) houramount = ngettext(" UTC ({} action)", " UTC ({} actions)", numberh).format(numberh) else: - active_users = [_("But nobody came")] # a reference to my favorite game of all the time, sorry ^_^ - active_hours = [_("But nobody came")] - usramount = "" - houramount = "" + active_users = active_hours = [_("But nobody came")] # a reference to my favorite game of all the time, sorry ^_^ + usramount = houramount = "" if not active_articles: active_articles = [_("But nobody came")] - edits, files, admin, changed_bytes, new_articles, unique_contributors, overall = daily_overview_sync(edits, files, admin, changed_bytes, new_articles, len(activity), overall) + messages = daily_overview_sync({"edits": edits, "new_files": files, "admin_actions": admin, "bytes_changed": + changed_bytes, "new_articles": new_articles, "unique_editors": len(activity), "day_score": overall}) fields = ( (ngettext("Most active user", "Most active users", len(active_users)), ', '.join(active_users)), (ngettext("Most edited article", "Most edited articles", len(active_articles)), ', '.join(active_articles)), - (_("Edits made"), edits), (_("New files"), files), (_("Admin actions"), admin), - (_("Bytes changed"), changed_bytes), (_("New articles"), new_articles), - (_("Unique contributors"), unique_contributors), + (_("Edits made"), messages["edits"]), (_("New files"), messages["new_files"]), + (_("Admin actions"), messages["admin_actions"]), (_("Bytes changed"), messages["bytes_changed"]), + (_("New articles"), messages["new_articles"]), (_("Unique contributors"), messages["unique_editors"]), (ngettext("Most active hour", "Most active hours", len(active_hours)), ', '.join(active_hours) + houramount), - (_("Day score"), overall)) + (_("Day score"), messages["day_score"]) + ) for name, value in fields: embed.add_field(name, value, inline=True) embed.finish_embed() send_to_discord(embed, meta=DiscordMessageMetadata("POST")) - else: - logger.debug("function requesting changes for day overview returned with error code") def rc_processor(change, changed_categories): diff --git a/src/wiki.py b/src/wiki.py index 4cbb8e6..376f893 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -280,7 +280,18 @@ class Wiki(object): sys.exit(0) return request - def api_request(self, params: Union[str, OrderedDict], *json_path: str, timeout: int = 10, allow_redirects: bool = False): + def retried_api_request(self, params: Union[str, OrderedDict], *json_path: str, timeout: int = 10, allow_redirects: bool = False): + """Wrapper around api_request function that additionally re-request the same request multiple times.""" + retries = 0 + while retries < 5: + try: + return self.api_request(params, *json_path, timeout=timeout, allow_redirects=allow_redirects) + except (ServerError, MediaWikiError): + retries += 1 + time.sleep(2.0) + raise ServerError + + def api_request(self, params: Union[str, OrderedDict], *json_path: str, timeout: int = 10, allow_redirects: bool = False) -> dict: """Method to GET request data from the wiki's API with error handling including recognition of MediaWiki errors. Parameters: From c388c2e0d0ddb6e68f4ac5ae075215cf6020a77f Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 15 May 2021 12:11:56 +0200 Subject: [PATCH 081/173] Add handling for #209 --- src/misc.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/misc.py b/src/misc.py index af8ad53..f922c5d 100644 --- a/src/misc.py +++ b/src/misc.py @@ -15,7 +15,7 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . import base64 -import json, logging, sys, re +import json, logging, sys, re, platform from html.parser import HTMLParser from urllib.parse import urlparse, urlunparse import requests @@ -84,6 +84,15 @@ class DataFile: except PermissionError: misc_logger.critical("Could not modify a data file (no permissions). No way to store last edit.") sys.exit(1) + except OSError as e: + if settings.get("error_tolerance", 1) > 1: + if platform.system() == "Windows": + if "Invalid argument: 'data.json'" in str(e): + misc_logger.error("Saving the data file failed due to Invalid argument exception, we've seen it " + "before in issue #209, if you know the reason for it happening please reopen the " + "issue with explanation, for now we are going to just ignore it.") # Reference #209 + return + raise def __setitem__(self, instance, value): self.data[instance] = value From 06e2d9f7caa8bb6a0a8924494387977122533a12 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 15 May 2021 12:58:04 +0200 Subject: [PATCH 082/173] Added Util explanation to docs --- docs/API spec.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/API spec.md b/docs/API spec.md index 2d902e7..b0de90a 100644 --- a/docs/API spec.md +++ b/docs/API spec.md @@ -109,7 +109,7 @@ Client consists of the following methods: **Path**: `src.api.context.Context` _Context is a class which objects of are only used as first argument of formatter definitions._ Context can consist of the following fields: -- `client` - Client object +- `client` - [Client](#Client) object - `webhook_url` - string - webhook url for given formatter - `message_type` - string - can be either `embed` or `compact` - `categories` - {"new": set(), "removed": set()} - each set containing strings of added or removed categories for given page @@ -117,5 +117,17 @@ Context can consist of the following fields: - `event` - string - action called, should be the same as formatter event action - `comment_page` - dict - containing `fullUrl` and `article` with strings both to full article url and its name +### Util +**Path**: `src.api.util` +_Util is a module with a few common functions that can be useful for generating Discord messages, parsing changes in formatting and more._ +Util provides the following functionalities: +- `clean_link(link: str)` – returns a string wrapped with <> brackets, so the link given as a string doesn't embed in Discord +- `sanitize_to_markdown(text: str)` – returns a string with Discord Markdown characters escaped +- `sanitize_to_url(text: str)` – returns a string that should be safe to be part of URL with special characters either escaped or encoded +- `parse_mediawiki_changes(ctx: Context, content: str, embed: DiscordMessage)` – populates embed with two new fields "Added" and "Removed" containing diff of changes within content argument retrieved using action=compare request between two revisions +- `create_article_path(article: str)` – returns a string with URL leading to an article page (basically taking into account wiki's article path) +- `compact_author(ctx: Context, content: dict)` – returns two strings - first containing the name of the author with hide_ips setting taken into account and second a URL leading to author's contribution page, this makes it easier for compact formatters to include author detail in messages +- `embed_helper(ctx: Context, message: DiscordMessage, change: dict, set_user=True, set_edit_meta=True, set_desc=True)` – a function populating the message (Discord embed message) with most essential fields accordingly. Populating includes the following fields: author, author_url, category and tags fields, description + ### Language support RcGcDw implements i18n with gettext and already exposes Translations instance with its `src.i18` module. formatters_i18n variable is used for instance of all formatters inside base directory. From 662c7368e33c227f1219171333c443ad0145f3df Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 15 May 2021 12:58:33 +0200 Subject: [PATCH 083/173] Improved formatter helper functions --- src/api/util.py | 52 ++++++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/src/api/util.py b/src/api/util.py index ed2e4db..7b1f789 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -16,6 +16,8 @@ from __future__ import annotations import re from urllib.parse import quote from typing import Optional, Callable, TYPE_CHECKING + +from src.exceptions import ServerError, MediaWikiError from src.discord.message import DiscordMessage from src.configloader import settings import src.misc @@ -80,10 +82,12 @@ def compact_author(ctx: Context, change: dict) -> (Optional[str], Optional[str]) """Returns link to the author and the author itself respecting the settings""" author, author_url = None, None if ctx.event != "suppressed": - author_url = clean_link(create_article_path("User:{user}".format(user=change["user"]))) # TODO Sanitize user in here and in embed_helper + author_url = clean_link(create_article_path("User:{user}".format(user=sanitize_to_url(change["user"])))) if "anon" in change: - change["user"] = _("Unregistered user") - author = change["user"] + if settings.get("hide_ips", False): + author = _("Unregistered user") + else: + author = change["user"] else: author = change["user"] return author, author_url @@ -99,41 +103,41 @@ def embed_helper(ctx: Context, message: DiscordMessage, change: dict, set_user=T adding tags (if the log is tagged anyhow) setting default description (to ctx.parsedcomment)""" if set_user: - # TODO Repurpose it so change['user'] stays the same + author = None if "anon" in change: - author_url = create_article_path("Special:Contributions/{user}".format( - user=change["user"].replace(" ", "_"))) # Replace here needed in case of #75 + author_url = create_article_path("Special:Contributions/{user}".format(user=sanitize_to_url(change["user"]))) ip_mapper = ctx.client.get_ipmapper() logger.debug("current user: {} with cache of IPs: {}".format(change["user"], ip_mapper.keys())) if change["user"] not in list(ip_mapper.keys()): - contibs = ctx.client.make_api_request( - "{wiki}?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format( - wiki=ctx.client.WIKI_API_PATH, user=change["user"], timestamp=change["timestamp"]), "query", - "usercontribs") - if contibs is None: - logger.warning( - "WARNING: Something went wrong when checking amount of contributions for given IP address") + try: + contibs = ctx.client.make_api_request( + "{wiki}?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format( + wiki=ctx.client.WIKI_API_PATH, user=sanitize_to_url(change["user"]), timestamp=change["timestamp"]), "query", + "usercontribs") + except (ServerError, MediaWikiError): + logger.warning("WARNING: Something went wrong when checking amount of contributions for given IP address") if settings.get("hide_ips", False): - change["user"] = _("Unregistered user") - change["user"] = change["user"] + "(?)" + author = _("Unregistered user") + else: + author = change["user"] + "(?)" else: ip_mapper[change["user"]] = len(contibs) - logger.debug( - "Current params user {} and state of map_ips {}".format(change["user"], ip_mapper)) + logger.debug("Current params user {} and state of map_ips {}".format(change["user"], ip_mapper)) if settings.get("hide_ips", False): - change["user"] = _("Unregistered user") - change["user"] = "{author} ({contribs})".format(author=change["user"], contribs=len(contibs)) + author = _("Unregistered user") + else: + author = "{author} ({contribs})".format(author=change["user"], contribs=len(contibs)) else: - logger.debug( - "Current params user {} and state of map_ips {}".format(change["user"], ip_mapper)) + logger.debug("Current params user {} and state of map_ips {}".format(change["user"], ip_mapper)) if ctx.event in ("edit", "new"): ip_mapper[change["user"]] += 1 - change["user"] = "{author} ({amount})".format( + author = "{author} ({amount})".format( author=change["user"] if settings.get("hide_ips", False) is False else _("Unregistered user"), amount=ip_mapper[change["user"]]) else: - author_url = create_article_path("User:{}".format(change["user"].replace(" ", "_"))) - message.set_author(change["user"], author_url) + author_url = create_article_path("User:{}".format(sanitize_to_url(change["user"]))) + author = change["user"] + message.set_author(author, author_url) if set_edit_meta: if settings["appearance"]["embed"]["show_footer"]: message["timestamp"] = change["timestamp"] From 6fc912d3d4508e66c73f684c86f50086750c0da7 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 15 May 2021 12:58:46 +0200 Subject: [PATCH 084/173] Added util to translation generation script --- scripts/generate-translations.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate-translations.sh b/scripts/generate-translations.sh index da8af0f..33ac46a 100644 --- a/scripts/generate-translations.sh +++ b/scripts/generate-translations.sh @@ -4,7 +4,7 @@ for file in ${StringArray[@]}; do xgettext -L Python --package-name=RcGcDw -o "locale/templates/$file.pot" src/$file.py done # Get all translatable files for formatters -find extensions/ -name '*.py' -print | xargs xgettext -L Python --package-name=RcGcDw -o "locale/templates/formatters.pot" +find extensions/ -name '*.py' -print | xargs xgettext -L Python --package-name=RcGcDw -o "locale/templates/formatters.pot" src/api/util.py for language in de fr lol pl pt-br ru uk zh-hans zh-hant hi do for file in ${StringArray[@]}; do From 04904aebda3d87ec57429f27aeb987e84d4ca477 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 15 May 2021 13:03:30 +0200 Subject: [PATCH 085/173] Updated setup.py --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 21ff978..31a5301 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup setup( name='RcGcDw', - version='1.12', + version='1.14', packages=[''], url='https://gitlab.com/piotrex43/RcGcDw/', license='GNU GPLv3', @@ -12,5 +12,5 @@ setup( keywords=['MediaWiki', 'recent changes', 'Discord', 'webhook'], package_dir={"": "src"}, install_requires=["beautifulsoup4 >= 4.6.0", "requests >= 2.18.4", "schedule >= 0.5.0", "lxml >= 4.2.1"], - python_requires="3.6" + python_requires="3.7" ) From 51d881c18b4dd78eb33284ca158de004b6f6ebac Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 15 May 2021 13:04:30 +0200 Subject: [PATCH 086/173] Removed old formatting files --- src/discussion_formatters.py | 69 ----- src/rc_formatters.py | 551 ----------------------------------- 2 files changed, 620 deletions(-) delete mode 100644 src/discussion_formatters.py delete mode 100644 src/rc_formatters.py diff --git a/src/discussion_formatters.py b/src/discussion_formatters.py deleted file mode 100644 index 1465263..0000000 --- a/src/discussion_formatters.py +++ /dev/null @@ -1,69 +0,0 @@ -# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). - -# RcGcDw is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# RcGcDw is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with RcGcDw. If not, see . - - - - -def compact_formatter(post_type, post, article_paths): - """Compact formatter for Fandom discussions.""" - message = None - - if post_type == "FORUM": - - - event_type = "discussion" - if post_type == "FORUM": - - elif post_type == "WALL": - - elif post_type == "ARTICLE_COMMENT": - - else: - discussion_logger.warning("No entry for {event} with params: {params}".format(event=post_type, params=post)) - if not settings["support"]: - return - else: - message = _("Unknown event `{event}` by [{author}]({author_url}), report it on the [support server](<{support}>).").format( - event=post_type, author=author, author_url=author_url, support=settings["support"]) - event_type = "unknown" - send_to_discord(DiscordMessage("compact", event_type, settings["fandom_discussions"]["webhookURL"], content=message), meta=DiscordMessageMetadata("POST")) - - -def embed_formatter(post_type, post, article_paths): - """Embed formatter for Fandom discussions.""" - if post_type == "FORUM": - pass - el - if post_type == "FORUM": - - elif post_type == "WALL": - - elif post_type == "ARTICLE_COMMENT": - - else: - discussion_logger.warning("No entry for {event} with params: {params}".format(event=post_type, params=post)) - embed["title"] = _("Unknown event `{event}`").format(event=post_type) - embed.event_type = "unknown" - if settings.get("support", None): - change_params = "[```json\n{params}\n```]({support})".format(params=json.dumps(post, indent=2), - support=settings["support"]) - if len(change_params) > 1000: - embed.add_field(_("Report this on the support server"), settings["support"]) - else: - embed.add_field(_("Report this on the support server"), change_params) - embed.finish_embed() - send_to_discord(embed, meta=DiscordMessageMetadata("POST")) - - diff --git a/src/rc_formatters.py b/src/rc_formatters.py deleted file mode 100644 index 0826a1e..0000000 --- a/src/rc_formatters.py +++ /dev/null @@ -1,551 +0,0 @@ -# -*- coding: utf-8 -*- - -# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). - -# RcGcDw is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# RcGcDw is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with RcGcDw. If not, see . - -import ipaddress -import math -import re -import time -import logging -import datetime -import json -from urllib.parse import quote_plus, quote - -from bs4 import BeautifulSoup - -from src.configloader import settings -from src.misc import WIKI_SCRIPT_PATH, safe_read, \ - WIKI_API_PATH, ContentParser, profile_field_name, LinkParser -from src.api.util import link_formatter, create_article_path -from src.discord.queue import send_to_discord -from src.discord.message import DiscordMessage, DiscordMessageMetadata - -if AUTO_SUPPRESSION_ENABLED: - from src.discord.redaction import delete_messages, redact_messages - -from src.i18n import formatters_i18n -#from src.rc import recent_changes, pull_comment -_ = formatters_i18n.gettext -ngettext = formatters_i18n.ngettext - -logger = logging.getLogger("rcgcdw.rc_formatters") -#from src.rcgcdw import recent_changes, ngettext, logger, profile_field_name, LinkParser, pull_comment - - -LinkParser = LinkParser() - -def format_user(change, recent_changes, action): - if "anon" in change: - author_url = create_article_path("Special:Contributions/{user}".format( - user=change["user"].replace(" ", "_"))) # Replace here needed in case of #75 - logger.debug("current user: {} with cache of IPs: {}".format(change["user"], recent_changes.map_ips.keys())) - if change["user"] not in list(recent_changes.map_ips.keys()): - contibs = safe_read(recent_changes._safe_request( - "{wiki}?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format( - wiki=WIKI_API_PATH, user=change["user"], timestamp=change["timestamp"])), "query", "usercontribs") - if contibs is None: - logger.warning( - "WARNING: Something went wrong when checking amount of contributions for given IP address") - if settings.get("hide_ips", False): - change["user"] = _("Unregistered user") - change["user"] = change["user"] + "(?)" - else: - recent_changes.map_ips[change["user"]] = len(contibs) - logger.debug( - "Current params user {} and state of map_ips {}".format(change["user"], recent_changes.map_ips)) - if settings.get("hide_ips", False): - change["user"] = _("Unregistered user") - change["user"] = "{author} ({contribs})".format(author=change["user"], contribs=len(contibs)) - else: - logger.debug( - "Current params user {} and state of map_ips {}".format(change["user"], recent_changes.map_ips)) - if action in ("edit", "new"): - recent_changes.map_ips[change["user"]] += 1 - change["user"] = "{author} ({amount})".format(author=change["user"] if settings.get("hide_ips", False) is False else _("Unregistered user"), - amount=recent_changes.map_ips[change["user"]]) - else: - author_url = create_article_path("User:{}".format(change["user"].replace(" ", "_"))) - return change["user"], author_url - - -def compact_formatter(action, change, parsed_comment, categories, recent_changes): - request_metadata = DiscordMessageMetadata("POST", rev_id=change.get("revid", None), log_id=change.get("logid", None), page_id=change.get("pageid", None)) - if action != "suppressed": - author_url = link_formatter(create_article_path("User:{user}".format(user=change["user"]))) - if "anon" in change: - change["user"] = _("Unregistered user") - author = change["user"] - else: - author = change["user"] - parsed_comment = "" if parsed_comment is None else " *("+parsed_comment+")*" - if action in ["edit", "new"]: - elif action =="upload/upload": - - elif action == "upload/revert": - - elif action == "upload/overwrite": - - elif action == "delete/delete": - - elif action == "delete/delete_redir": - - elif action == "move/move": - - elif action == "move/move_redir": - - elif action == "protect/move_prot": - - elif action == "block/block": - - elif action == "block/reblock": - - elif action == "block/unblock": - - elif action == "curseprofile/comment-created": - link = link_formatter(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) - target_user = change["title"].split(':', 1)[1] - if target_user != author: - content = _("[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile".format(author=author, author_url=author_url, comment=link, target=target_user)) - else: - content = _("[{author}]({author_url}) left a [comment]({comment}) on their own profile".format(author=author, author_url=author_url, comment=link)) - elif action == "curseprofile/comment-replied": - link = link_formatter(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) - target_user = change["title"].split(':', 1)[1] - if target_user != author: - content = _( - "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s profile".format(author=author, - author_url=author_url, - comment=link, - target=target_user)) - else: - content = _( - "[{author}]({author_url}) replied to a [comment]({comment}) on their own profile".format(author=author, - comment=link, - author_url=author_url)) - elif action == "curseprofile/comment-edited": - link = link_formatter(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) - target_user = change["title"].split(':', 1)[1] - if target_user != author: - content = _( - "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile".format(author=author, - author_url=author_url, - comment=link, - target=target_user)) - else: - content = _( - "[{author}]({author_url}) edited a [comment]({comment}) on their own profile".format(author=author, - comment=link, - author_url=author_url)) - elif action == "curseprofile/comment-purged": - target_user = change["title"].split(':', 1)[1] - if target_user != author: - content = _("[{author}]({author_url}) purged a comment on {target}'s profile".format(author=author, author_url=author_url,target=target_user)) - else: - content = _("[{author}]({author_url}) purged a comment on their own profile".format(author=author, author_url=author_url)) - elif action == "curseprofile/comment-deleted": - if "4:comment_id" in change["logparams"]: - link = link_formatter(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) - else: - link = link_formatter(create_article_path(change["title"])) - target_user = change["title"].split(':', 1)[1] - if target_user != author: - content = _("[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile".format(author=author,author_url=author_url, comment=link, target=target_user)) - else: - content = _("[{author}]({author_url}) deleted a [comment]({comment}) on their own profile".format(author=author, author_url=author_url, comment=link)) - elif action == "curseprofile/profile-edited": - target_user = change["title"].split(':', 1)[1] - link = link_formatter(create_article_path("UserProfile:{user}".format(user=target_user))) - if target_user != author: - content = _("[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s profile. *({desc})*").format(author=author, - author_url=author_url, - target=target_user, - target_url=link, - field=profile_field_name(change["logparams"]['4:section'], False), - desc=BeautifulSoup(change["parsedcomment"], "lxml").get_text()) - else: - content = _("[{author}]({author_url}) edited the {field} on [their own]({target_url}) profile. *({desc})*").format( - author=author, - author_url=author_url, - target_url=link, - field=profile_field_name(change["logparams"]['4:section'], False), - desc=BeautifulSoup(change["parsedcomment"], "lxml").get_text()) - elif action in ("rights/rights", "rights/autopromote"): - - elif action == "protect/protect": - - elif action == "protect/modify": - - elif action == "protect/unprotect": - - elif action == "delete/revision": - - elif action == "import/upload": - - elif action == "delete/restore": - - elif action == "delete/event": - - elif action == "import/interwiki": - - elif action == "abusefilter/modify": - elif action == "abusefilter/create": - - elif action == "merge/merge": - - elif action == "newusers/autocreate": - elif action == "newusers/create": - elif action == "newusers/create2": - elif action == "newusers/byemail": - elif action == "newusers/newusers": - elif action == "interwiki/iw_add": - elif action == "interwiki/iw_edit": - - elif action == "interwiki/iw_delete": - link = link_formatter(create_article_path("Special:Interwiki")) - elif action == "contentmodel/change": - - elif action == "contentmodel/new": - - elif action == "sprite/sprite": - - elif action == "sprite/sheet": - - elif action == "sprite/slice": - - elif action == "cargo/createtable": - - elif action == "cargo/deletetable": - - elif action == "cargo/recreatetable": - - elif action == "cargo/replacetable": - - elif action == "managetags/create": - - elif action == "managetags/delete": - - elif action == "managetags/activate": - - elif action == "managetags/deactivate": - link = link_formatter(create_article_path(change["title"])) - elif action == "managewiki/settings": # Miraheze's ManageWiki extension https://github.com/miraheze/ManageWiki - - elif action == "managewiki/delete": - - elif action == "managewiki/lock": - - elif action == "managewiki/namespaces": - - elif action == "managewiki/namespaces-delete": - - elif action == "managewiki/rights": - - elif action == "managewiki/undelete": - - elif action == "managewiki/unlock": - - elif action == "datadump/generate": - elif action == "datadump/delete": - - elif action == "pagetranslation/mark": - - elif action == "pagetranslation/unmark": - - elif action == "pagetranslation/moveok": - - elif action == "pagetranslation/movenok": - - elif action == "pagetranslation/deletefok": - - elif action == "pagetranslation/deletefnok": - - elif action == "pagetranslation/deletelok": - - elif action == "pagetranslation/deletelnok": - - elif action == "pagetranslation/encourage": - - elif action == "pagetranslation/discourage": - - elif action == "pagetranslation/prioritylanguages": - - elif action == "pagetranslation/associate": - - elif action == "pagetranslation/dissociate": - - elif action == "translationreview/message": - - elif action == "translationreview/group": - - elif action == "pagelang/pagelang": - - elif action == "renameuser/renameuser": - - elif action == "suppressed": - - else: - logger.warning("No entry for {event} with params: {params}".format(event=action, params=change)) - if not settings.get("support", None): - return - else: - content = _( - "Unknown event `{event}` by [{author}]({author_url}), report it on the [support server](<{support}>).").format( - event=action, author=author, author_url=author_url, support=settings["support"]) - action = "unknown" - send_to_discord(DiscordMessage("compact", action, settings["webhookURL"], content=content), meta=request_metadata) - - -def embed_formatter(action, change, parsed_comment, categories, recent_changes): - embed = DiscordMessage("embed", action, settings["webhookURL"]) - request_metadata = DiscordMessageMetadata("POST", rev_id=change.get("revid", None), log_id=change.get("logid", None), page_id=change.get("pageid", None)) - if parsed_comment is None: - parsed_comment = _("No description provided") - if action != "suppressed": - change["user"], author_url = format_user(change, recent_changes, action) - embed.set_author(change["user"], author_url) - if action in ("edit", "new"): # edit or new page - - elif action in ("upload/overwrite", "upload/upload", "upload/revert"): # sending files - - elif action == "delete/delete": - - elif action == "delete/delete_redir": - - elif action == "move/move": - - elif action == "move/move_redir": - - elif action == "protect/move_prot": - - elif action == "block/block": - - elif action == "block/reblock": - - elif action == "block/unblock": - - elif action == "curseprofile/comment-created": - if settings["appearance"]["embed"]["show_edit_changes"]: - parsed_comment = recent_changes.pull_comment(change["logparams"]["4:comment_id"]) - link = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) - target_user = change["title"].split(':', 1)[1] - if target_user != change["user"]: - embed["title"] = _("Left a comment on {target}'s profile").format(target=target_user) - else: - embed["title"] = _("Left a comment on their own profile") - elif action == "curseprofile/comment-replied": - if settings["appearance"]["embed"]["show_edit_changes"]: - parsed_comment = recent_changes.pull_comment(change["logparams"]["4:comment_id"]) - link = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) - target_user = change["title"].split(':', 1)[1] - if target_user != change["user"]: - embed["title"] = _("Replied to a comment on {target}'s profile").format(target=target_user) - else: - embed["title"] = _("Replied to a comment on their own profile") - elif action == "curseprofile/comment-edited": - if settings["appearance"]["embed"]["show_edit_changes"]: - parsed_comment = recent_changes.pull_comment(change["logparams"]["4:comment_id"]) - link = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) - target_user = change["title"].split(':', 1)[1] - if target_user != change["user"]: - embed["title"] = _("Edited a comment on {target}'s profile").format(target=target_user) - else: - embed["title"] = _("Edited a comment on their own profile") - elif action == "curseprofile/profile-edited": - target_user = change["title"].split(':', 1)[1] - link = create_article_path("UserProfile:{target}".format(target=target_user)) - if target_user != change["user"]: - embed["title"] = _("Edited {target}'s profile").format(target=target_user) - else: - embed["title"] = _("Edited their own profile") - if not change["parsedcomment"]: # If the field is empty - parsed_comment = _("Cleared the {field} field").format(field=profile_field_name(change["logparams"]['4:section'], True)) - else: - parsed_comment = _("{field} field changed to: {desc}").format(field=profile_field_name(change["logparams"]['4:section'], True), desc=BeautifulSoup(change["parsedcomment"], "lxml").get_text()) - elif action == "curseprofile/comment-purged": - link = create_article_path(change["title"]) - target_user = change["title"].split(':', 1)[1] - if target_user != change["user"]: - embed["title"] = _("Purged a comment on {target}'s profile").format(target=target_user) - else: - embed["title"] = _("Purged a comment on their own profile") - elif action == "curseprofile/comment-deleted": - if "4:comment_id" in change["logparams"]: - link = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) - else: - link = create_article_path(change["title"]) - target_user = change["title"].split(':', 1)[1] - if target_user != change["user"]: - embed["title"] = _("Deleted a comment on {target}'s profile").format(target=target_user) - else: - embed["title"] = _("Deleted a comment on their own profile") - elif action in ("rights/rights", "rights/autopromote"): - - elif action == "protect/protect": - - elif action == "protect/modify": - - elif action == "protect/unprotect": - - elif action == "delete/revision": - - elif action == "import/upload": - - elif action == "delete/restore": - - elif action == "delete/event": - - elif action == "import/interwiki": - - elif action == "abusefilter/modify": - - elif action == "abusefilter/create": - - elif action == "merge/merge": - elif action == "newusers/autocreate": - - elif action == "newusers/create": - - elif action == "newusers/create2": - - elif action == "newusers/byemail": - - elif action == "newusers/newusers": - - elif action == "interwiki/iw_add": - - elif action == "interwiki/iw_edit": - - elif action == "interwiki/iw_delete": - - elif action == "contentmodel/change": - - elif action == "contentmodel/new": - - elif action == "sprite/sprite": - - elif action == "sprite/sheet": - - elif action == "sprite/slice": - - elif action == "cargo/createtable": - - elif action == "cargo/deletetable": - - elif action == "cargo/recreatetable": - - elif action == "cargo/replacetable": - - elif action == "managetags/create": - - elif action == "managetags/delete": - - elif action == "managetags/activate": - - elif action == "managetags/deactivate": - - elif action == "managewiki/settings": # Miraheze's ManageWiki extension https://github.com/miraheze/ManageWiki - - elif action == "managewiki/delete": - - elif action == "managewiki/lock": - - elif action == "managewiki/namespaces": - - elif action == "managewiki/namespaces-delete": - - elif action == "managewiki/rights": - - elif action == "managewiki/undelete": - - elif action == "managewiki/unlock": - - elif action == "datadump/generate": - elif action == "datadump/delete": - - elif action == "pagetranslation/mark": - - elif action == "pagetranslation/unmark": - - elif action == "pagetranslation/moveok": - - elif action == "pagetranslation/movenok": - - elif action == "pagetranslation/deletefok": - - elif action == "pagetranslation/deletefnok": - - elif action == "pagetranslation/deletelok": - - elif action == "pagetranslation/deletelnok": - - elif action == "pagetranslation/encourage": - - elif action == "pagetranslation/discourage": - - elif action == "pagetranslation/prioritylanguages": - - elif action == "pagetranslation/associate": - - elif action == "pagetranslation/dissociate": - - elif action == "translationreview/message": - - elif action == "translationreview/group": - - elif action == "pagelang/pagelang": - link = create_article_path(change["title"]) - - elif action == "renameuser/renameuser": - - elif action == "suppressed": - - else: - logger.warning("No entry for {event} with params: {params}".format(event=action, params=change)) - link = create_article_path("Special:RecentChanges") - embed["title"] = _("Unknown event `{event}`").format(event=action) - embed.event_type = "unknown" - if settings.get("support", None): - change_params = "[```json\n{params}\n```]({support})".format(params=json.dumps(change, indent=2), - support=settings["support"]) - if len(change_params) > 1000: - embed.add_field(_("Report this on the support server"), settings["support"]) - else: - embed.add_field(_("Report this on the support server"), change_params) - embed["url"] = quote(link.replace(" ", "_"), "/:?=&") - if parsed_comment is not None: - embed["description"] = parsed_comment - if settings["appearance"]["embed"]["show_footer"]: - embed["timestamp"] = change["timestamp"] - if "tags" in change and change["tags"]: - tag_displayname = [] - for tag in change["tags"]: - if tag in recent_changes.tags: - if recent_changes.tags[tag] is None: - continue # Ignore hidden tags - else: - tag_displayname.append(recent_changes.tags[tag]) - else: - tag_displayname.append(tag) - embed.add_field(_("Tags"), ", ".join(tag_displayname)) - if len(embed["title"]) > 254: - embed["title"] = embed["title"][0:253]+"…" - logger.debug("Current params in edit action: {}".format(change)) - if categories is not None and not (len(categories["new"]) == 0 and len(categories["removed"]) == 0): - new_cat = (_("**Added**: ") + ", ".join(list(categories["new"])[0:16]) + ("\n" if len(categories["new"])<=15 else _(" and {} more\n").format(len(categories["new"])-15))) if categories["new"] else "" - del_cat = (_("**Removed**: ") + ", ".join(list(categories["removed"])[0:16]) + ("" if len(categories["removed"])<=15 else _(" and {} more").format(len(categories["removed"])-15))) if categories["removed"] else "" - embed.add_field(_("Changed categories"), new_cat + del_cat) - embed.finish_embed() - send_to_discord(embed, meta=request_metadata) From 6cfedcb5eebcce59cc271c74884c1e663e331655 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 16 May 2021 15:46:43 +0200 Subject: [PATCH 087/173] Added docs for DiscordMessage --- docs/API spec.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/API spec.md b/docs/API spec.md index b0de90a..b240e7c 100644 --- a/docs/API spec.md +++ b/docs/API spec.md @@ -129,5 +129,17 @@ Util provides the following functionalities: - `compact_author(ctx: Context, content: dict)` – returns two strings - first containing the name of the author with hide_ips setting taken into account and second a URL leading to author's contribution page, this makes it easier for compact formatters to include author detail in messages - `embed_helper(ctx: Context, message: DiscordMessage, change: dict, set_user=True, set_edit_meta=True, set_desc=True)` – a function populating the message (Discord embed message) with most essential fields accordingly. Populating includes the following fields: author, author_url, category and tags fields, description +### DiscordMessage +**Path**: `src.discord.message.DiscordMessage` +_DiscordMessage is a class taking care of creation of Discord messages that can be sent via send_to_discord function later on._ +DiscordMessage object when created with message_type == embed will take all assignments and reads using object[key] as ones reading/setting the actual embed object. +DiscordMessage consists of the following: +- `__init__(message_type: str, event_type: str, webhook_url: str, content=None)` – constructor which takes message type (can be either `embed` or `compact`), event_type (for example `protect/protect`), webhook_url (full URL of webhook message is intended to be sent to), content optional parameter used in compact messages as main body +- `set_author(name, url, icon_url="")` – a method that can be used to set username, URL to their profile and optionally an icon for the embed +- `add_field(name, value, inline=False)` – a method to add a field with given name and value, optional inline argument can be set if field should be inline +- `set_avatar(url)` – sets avatar for WEBHOOK MESSAGE (not to be confused with actual embed) +- `set_name(name)` – sets name for WEBHOOK MESSAGE +- `set_link(link)` – equivalent to object["link"] = link for embed messages + ### Language support RcGcDw implements i18n with gettext and already exposes Translations instance with its `src.i18` module. formatters_i18n variable is used for instance of all formatters inside base directory. From 2430d50de4f8d3f6e5bb4b6eed17cde47b4c0488 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 16 May 2021 16:22:18 +0200 Subject: [PATCH 088/173] Task number 1 from #204 --- extensions/base/datadump.py | 6 +-- extensions/base/managewiki.py | 18 ++++---- extensions/base/mediawiki.py | 85 ++++++++++++++++++++--------------- extensions/base/translate.py | 32 ++++++------- src/api/util.py | 6 +++ 5 files changed, 83 insertions(+), 64 deletions(-) diff --git a/extensions/base/datadump.py b/extensions/base/datadump.py index ed5fc0b..ebcba51 100644 --- a/extensions/base/datadump.py +++ b/extensions/base/datadump.py @@ -19,7 +19,7 @@ from src.discord.message import DiscordMessage from src.api import formatter from src.i18n import formatters_i18n from src.api.context import Context -from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url +from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, compact_summary _ = formatters_i18n.gettext ngettext = formatters_i18n.ngettext @@ -41,7 +41,7 @@ def embed_datadump_generate(ctx: Context, change: dict) -> DiscordMessage: @formatter.compact(event="mdatadump/generate") def compact_datadump_generate(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) generated *{file}* dump{comment}").format( author=author, author_url=author_url, file=change["logparams"]["filename"], comment=parsed_comment @@ -63,7 +63,7 @@ def embed_datadump_delete(ctx: Context, change: dict) -> DiscordMessage: @formatter.compact(event="mdatadump/delete") def compact_datadump_delete(ctx: Context, change: dict) -> DiscordMessage: author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) deleted *{file}* dump{comment}").format( author=author, author_url=author_url, file=change["logparams"]["filename"], comment=parsed_comment diff --git a/extensions/base/managewiki.py b/extensions/base/managewiki.py index 993c7d8..5051592 100644 --- a/extensions/base/managewiki.py +++ b/extensions/base/managewiki.py @@ -18,7 +18,7 @@ from src.discord.message import DiscordMessage from src.api import formatter from src.i18n import formatters_i18n from src.api.context import Context -from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url +from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, compact_summary _ = formatters_i18n.gettext ngettext = formatters_i18n.ngettext @@ -41,7 +41,7 @@ def embed_managewiki_settings(ctx: Context, change: dict): @formatter.compact(event="managewiki/settings") def compact_managewiki_settings(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) changed wiki settings{reason}".format(author=author, author_url=author_url, reason=parsed_comment)) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -60,7 +60,7 @@ def embed_managewiki_delete(ctx: Context, change: dict): @formatter.compact(event="managewiki/delete") def compact_managewiki_delete(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}").format(author=author, author_url=author_url, wiki_name=change[ @@ -84,7 +84,7 @@ def embed_managewiki_lock(ctx: Context, change: dict): @formatter.compact(event="managewiki/lock") def compact_managewiki_lock(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}").format( author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", _("Unknown")), comment=parsed_comment) @@ -107,7 +107,7 @@ def embed_managewiki_namespaces(ctx: Context, change: dict): @formatter.compact(event="managewiki/namespaces") def compact_managewiki_namespaces(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) modified namespace *{namespace_name}* on *{wiki_name}*{comment}").format( author=author, author_url=author_url, namespace_name=change["logparams"].get("namespace", _("Unknown")), wiki_name=change["logparams"].get("wiki", _("Unknown")), comment=parsed_comment) @@ -130,7 +130,7 @@ def embed_managewiki_namespaces_delete(ctx: Context, change: dict): @formatter.compact(event="managewiki/namespaces-delete") def compact_managewiki_namespaces_delete(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _( "[{author}]({author_url}) deleted a namespace *{namespace_name}* on *{wiki_name}*{comment}").format( author=author, author_url=author_url, @@ -154,7 +154,7 @@ def embed_managewiki_rights(ctx: Context, change: dict): @formatter.compact(event="managewiki/rights") def compact_managewiki_rights(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) group_name = change["title"].split("/permissions/", 1)[1] content = _("[{author}]({author_url}) modified user group *{group_name}*{comment}").format( author=author, author_url=author_url, group_name=group_name, comment=parsed_comment @@ -176,7 +176,7 @@ def embed_managewiki_undelete(ctx: Context, change: dict): @formatter.compact(event="managewiki/undelete") def compact_managewiki_undelete(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}").format( author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", _("Unknown")), comment=parsed_comment @@ -198,7 +198,7 @@ def embed_managewiki_unlock(ctx: Context, change: dict): @formatter.compact(event="managewiki/unlock") def compact_managewiki_unlock(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}").format( author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", _("Unknown")), comment=parsed_comment diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index e6e5d8e..e511c7e 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -24,7 +24,7 @@ from src.api import formatter from src.i18n import formatters_i18n from src.api.context import Context from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author, \ - create_article_path, sanitize_to_markdown + create_article_path, sanitize_to_markdown, compact_summary from src.configloader import settings from src.exceptions import * @@ -93,7 +93,7 @@ def embed_edit(ctx: Context, change: dict) -> DiscordMessage: @formatter.compact(event="edit", mode="compact", aliases=["new"]) def compact_edit(ctx: Context, change: dict) -> DiscordMessage: - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) author, author_url = compact_author(ctx, change) action = ctx.event edit_link = clean_link("{wiki}index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format( @@ -233,7 +233,7 @@ def embed_upload_upload(ctx, change) -> DiscordMessage: def compact_upload_revert(ctx, change) -> DiscordMessage: author, author_url = compact_author(ctx, change) file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}").format( author=author, author_url=author_url, file=sanitize_to_markdown(change["title"]), file_link=file_link, comment=parsed_comment) @@ -244,7 +244,7 @@ def compact_upload_revert(ctx, change) -> DiscordMessage: def compact_upload_overwrite(ctx, change) -> DiscordMessage: author, author_url = compact_author(ctx, change) file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) uploaded a new version of [{file}]({file_link}){comment}").format( author=author, author_url=author_url, file=sanitize_to_markdown(change["title"]), file_link=file_link, comment=parsed_comment) @@ -255,7 +255,7 @@ def compact_upload_overwrite(ctx, change) -> DiscordMessage: def compact_upload_upload(ctx, change) -> DiscordMessage: author, author_url = compact_author(ctx, change) file_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) uploaded [{file}]({file_link}){comment}").format(author=author, author_url=author_url, file=sanitize_to_markdown( @@ -277,7 +277,7 @@ def embed_delete_delete(ctx, change) -> DiscordMessage: @formatter.compact(event="delete/delete", mode="compact") def compact_delete_delete(ctx, change) -> DiscordMessage: - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) author, author_url = compact_author(ctx, change) page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) content = _("[{author}]({author_url}) deleted [{page}]({page_link}){comment}").format(author=author, @@ -304,7 +304,7 @@ def embed_delete_delete_redir(ctx, change) -> DiscordMessage: def compact_delete_delete_redir(ctx, change) -> DiscordMessage: page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) deleted redirect by overwriting [{page}]({page_link}){comment}").format( author=author, author_url=author_url, page=change["title"], page_link=page_link, comment=parsed_comment) @@ -327,7 +327,7 @@ def embed_delete_restore(ctx, change) -> DiscordMessage: def compact_delete_restore(ctx, change) -> DiscordMessage: page_link = clean_link(create_article_path(sanitize_to_url(change["title"]))) author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) restored [{article}]({article_url}){comment}").format(author=author, author_url=author_url, article=sanitize_to_markdown( @@ -352,7 +352,7 @@ def embed_delete_event(ctx, change) -> DiscordMessage: @formatter.compact(event="delete/event", mode="compact") def compact_delete_event(ctx, change) -> DiscordMessage: author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) changed visibility of log events{comment}").format(author=author, author_url=author_url, comment=parsed_comment) @@ -378,7 +378,7 @@ def compact_delete_revision(ctx, change) -> DiscordMessage: author, author_url = compact_author(ctx, change) amount = len(change["logparams"]["ids"]) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = ngettext( "[{author}]({author_url}) changed visibility of revision on page [{article}]({article_url}){comment}", "[{author}]({author_url}) changed visibility of {amount} revisions on page [{article}]({article_url}){comment}", @@ -413,10 +413,11 @@ def compact_move_move(ctx, change) -> DiscordMessage: link = clean_link(create_article_path(sanitize_to_url(change["logparams"]['target_title']))) redirect_status = _("without making a redirect") if "suppressredirect" in change["logparams"] else _( "with a redirect") + parsed_comment = compact_summary(ctx) content = _( "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]({target_url}) {made_a_redirect}{comment}").format( author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", article=change["title"], - target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=ctx.parsedcomment, + target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=parsed_comment, made_a_redirect=redirect_status) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -446,11 +447,12 @@ def compact_move_move_redir(ctx, change) -> DiscordMessage: link = clean_link(create_article_path(sanitize_to_url(change["logparams"]['target_title']))) redirect_status = _("without making a redirect") if "suppressredirect" in change["logparams"] else _( "with a redirect") + parsed_comment = compact_summary(ctx) content = _( "[{author}]({author_url}) moved {redirect}*{article}* over redirect to [{target}]({target_url}) {made_a_redirect}{comment}").format( author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["title"]), - target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=ctx.parsedcomment, + target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=parsed_comment, made_a_redirect=redirect_status) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -474,11 +476,12 @@ def embed_protect_move_prot(ctx, change): def compact_protect_move_prot(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path(sanitize_to_url(change["logparams"]["oldtitle_title"]))) + parsed_comment = compact_summary(ctx) content = _( "[{author}]({author_url}) moved protection settings from {redirect}*{article}* to [{target}]({target_url}){comment}").format( author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["logparams"]["oldtitle_title"]), - target=sanitize_to_markdown(change["title"]), target_url=link, comment=ctx.parsedcomment) + target=sanitize_to_markdown(change["title"]), target_url=link, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -502,13 +505,14 @@ def embed_protect_protect(ctx, change): def compact_protect_protect(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = compact_summary(ctx) content = _( "[{author}]({author_url}) protected [{article}]({article_url}) with the following settings: {settings}{comment}").format( author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, settings=change["logparams"].get("description", "") + ( _(" [cascading]") if "cascade" in change["logparams"] else ""), - comment=ctx.parsedcomment) + comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -533,13 +537,14 @@ def embed_protect_modify(ctx, change): def compact_protect_modify(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = compact_summary(ctx) content = _( "[{author}]({author_url}) modified protection settings of [{article}]({article_url}) to: {settings}{comment}").format( author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, settings=sanitize_to_markdown(change["logparams"].get("description", "")) + ( _(" [cascading]") if "cascade" in change["logparams"] else ""), - comment=ctx.parsedcomment) + comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -559,9 +564,10 @@ def embed_protect_unprotect(ctx, change): def compact_protect_unprotect(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) removed protection from [{article}]({article_url}){comment}").format( author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, - comment=ctx.parsedcomment) + comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -640,6 +646,7 @@ def compact_block_block(ctx, change): user = change["title"].split(':', 1)[1] restriction_description = "" author, author_url = compact_author(ctx, change) + parsed_comment = compact_summary(ctx) try: ipaddress.ip_address(user) link = clean_link(create_article_path("Special:Contributions/{user}".format(user=user))) @@ -678,7 +685,7 @@ def compact_block_block(ctx, change): change), user_url=link, restriction_desc=restriction_description, - comment=ctx.parsedcomment) + comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -698,8 +705,9 @@ def compact_block_reblock(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) user = change["title"].split(':', 1)[1] + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) changed block settings for [{blocked_user}]({user_url}){comment}").format( - author=author, author_url=author_url, blocked_user=user, user_url=link, comment=ctx.parsedcomment) + author=author, author_url=author_url, blocked_user=user, user_url=link, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -720,11 +728,12 @@ def compact_block_unblock(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) user = change["title"].split(':', 1)[1] + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}").format(author=author, author_url=author_url, blocked_user=user, user_url=link, - comment=ctx.parsedcomment) + comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -764,7 +773,7 @@ def embed_import_upload(ctx, change): def compact_import_upload(ctx, change): link = clean_link(create_article_path(sanitize_to_url(change["title"]))) author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = ngettext("[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision{comment}", "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revisions{comment}", change["logparams"]["count"]).format( @@ -794,7 +803,7 @@ def compact_import_interwiki(ctx, change): link = clean_link(create_article_path(sanitize_to_url(change["title"]))) author, author_url = compact_author(ctx, change) source_link = clean_link(create_article_path(change["logparams"]["interwiki_title"])) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = ngettext( "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revision from [{source}]({source_url}){comment}", "[{author}]({author_url}) imported [{article}]({article_url}) with {count} revisions from [{source}]({source_url}){comment}", @@ -844,7 +853,7 @@ def compact_rights_rights(ctx, change): link = clean_link(create_article_path(sanitize_to_url("User:{user}".format(user=change["title"].split(":")[1])))) added, removed = get_changed_groups(change, ", ") author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) if ctx.event == "rights/rights": content = _( "[{author}]({author_url}) changed group membership for [{target}]({target_url}) {added} {removed}{comment}").format( @@ -874,7 +883,7 @@ def embed_merge_merge(ctx, change): @formatter.compact(event="merge/merge") def compact_merge_merge(ctx, change): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) link_dest = clean_link(create_article_path(sanitize_to_url(change["logparams"]["dest_title"]))) content = _( @@ -938,7 +947,7 @@ def embed_newusers_create2(ctx, change): @formatter.compact(event="newusers/create2") def compact_newusers_create2(ctx, change): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) content = _("Account [{article}]({article_url}) was created by [{author}]({author_url}){comment}").format( article=change["title"], article_url=link, author=author, author_url=author_url, comment=parsed_comment) @@ -961,7 +970,7 @@ def embed_newusers_byemail(ctx, change): @formatter.compact(event="newusers/byemail") def compact_newusers_byemail(ctx, change): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) content = _( "Account [{article}]({article_url}) was created by [{author}]({author_url}) and password was sent by email{comment}").format( @@ -1007,7 +1016,7 @@ def embed_interwiki_iw_add(ctx, change): def compact_interwiki_iw_add(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path("Special:Interwiki")) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _( "[{author}]({author_url}) added an entry to the [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], @@ -1034,7 +1043,7 @@ def embed_interwiki_iw_edit(ctx, change): def compact_interwiki_iw_edit(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path("Special:Interwiki")) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _( "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], @@ -1060,7 +1069,7 @@ def embed_interwiki_iw_delete(ctx, change): def compact_interwiki_iw_delete(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path("Special:Interwiki")) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) deleted an entry in [interwiki table]({table_url}){desc}").format( author=author, author_url=author_url, @@ -1090,7 +1099,7 @@ def embed_contentmodel_change(ctx, change): def compact_contentmodel_change(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _( "[{author}]({author_url}) changed the content model of the page [{article}]({article_url}) from {old} to {new}{comment}").format( author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, @@ -1118,7 +1127,7 @@ def embed_contentmodel_new(ctx, change): def compact_contentmodel_new(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _( "[{author}]({author_url}) created the page [{article}]({article_url}) using a non-default content model {new}{comment}").format( author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, @@ -1144,6 +1153,7 @@ def compact_managetags_create(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) ctx.client.refresh_internal_data() + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, author_url=author_url, tag= @@ -1152,7 +1162,7 @@ def compact_managetags_create(ctx, change): "logparams"][ "tag"]), tag_url=link, - comment=ctx.parsedcomment) + comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -1178,6 +1188,7 @@ def compact_managetags_delete(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) ctx.client.refresh_internal_data() + parsed_comment = compact_summary(ctx) if change["logparams"]["count"] == 0: content = _("[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, author_url=author_url, @@ -1186,7 +1197,7 @@ def compact_managetags_delete(ctx, change): "logparams"][ "tag"]), tag_url=link, - comment=ctx.parsedcomment) + comment=parsed_comment) else: content = ngettext( "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed it from {count} revision or log entry{comment}", @@ -1194,7 +1205,7 @@ def compact_managetags_delete(ctx, change): change["logparams"]["count"]).format(author=author, author_url=author_url, tag=sanitize_to_markdown(change["logparams"]["tag"]), tag_url=link, count=change["logparams"]["count"], - comment=ctx.parsedcomment) + comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -1214,6 +1225,7 @@ def embed_managetags_activate(ctx, change): def compact_managetags_activate(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, author_url=author_url, tag=sanitize_to_markdown( @@ -1221,7 +1233,7 @@ def compact_managetags_activate(ctx, change): "logparams"][ "tag"]), tag_url=link, - comment=ctx.parsedcomment) + comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -1241,6 +1253,7 @@ def embed_managetags_deactivate(ctx, change): def compact_managetags_deactivate(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}").format(author=author, author_url=author_url, tag=sanitize_to_markdown( @@ -1248,7 +1261,7 @@ def compact_managetags_deactivate(ctx, change): "logparams"][ "tag"]), tag_url=link, - comment=ctx.parsedcomment) + comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -1278,7 +1291,7 @@ def compact_renameuser_renameuser(ctx, change): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"]))) edits = change["logparams"]["edits"] - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) if edits > 0: content = ngettext( "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to [{new_name}]({link}){comment}", diff --git a/extensions/base/translate.py b/extensions/base/translate.py index c7360ea..99ee93f 100644 --- a/extensions/base/translate.py +++ b/extensions/base/translate.py @@ -19,7 +19,7 @@ from src.api import formatter from src.i18n import formatters_i18n from src.api.context import Context from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, \ - clean_link + clean_link, compact_summary _ = formatters_i18n.gettext ngettext = formatters_i18n.ngettext @@ -51,7 +51,7 @@ def compact_pagetranslation_mark(ctx: Context, change: dict): else: link = link + "?oldid={}".format(change["logparams"]["revision"]) link = clean_link(link) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) marked [{article}]({article_url}) for translation{comment}").format( author=author, author_url=author_url, article=change["title"], article_url=link, @@ -74,7 +74,7 @@ def embed_pagetranslation_unmark(ctx: Context, change: dict): @formatter.compact(event="pagetranslation/unmark") def compact_pagetranslation_unmark(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) content = _( "[{author}]({author_url}) removed [{article}]({article_url}) from the translation system{comment}").format( @@ -100,7 +100,7 @@ def embed_pagetranslation_moveok(ctx: Context, change: dict): @formatter.compact(event="pagetranslation/moveok") def compact_pagetranslation_moveok(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"]))) content = _( "[{author}]({author_url}) completed moving translation pages from *{article}* to [{target}]({target_url}){comment}").format( @@ -126,7 +126,7 @@ def embed_pagetranslation_movenok(ctx: Context, change: dict): @formatter.compact(event="pagetranslation/movenok") def compact_pagetranslation_movenok(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) target_url = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"]))) content = _( @@ -154,7 +154,7 @@ def embed_pagetranslation_deletefnok(ctx: Context, change: dict): @formatter.compact(event="pagetranslation/deletefnok") def compact_pagetranslation_deletefnok(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) target_url = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"]))) content = _( @@ -182,7 +182,7 @@ def embed_pagetranslation_deletelok(ctx: Context, change: dict): @formatter.compact(event="pagetranslation/deletelok") def compact_pagetranslation_deletelok(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) content = _( "[{author}]({author_url}) completed deletion of translation page [{article}]({article_url}){comment}").format( @@ -208,7 +208,7 @@ def embed_pagetranslation_deletelnok(ctx: Context, change: dict): @formatter.compact(event="pagetranslation/deletelnok") def compact_pagetranslation_deletelnok(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) target_url = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"]))) content = _( @@ -235,7 +235,7 @@ def embed_pagetranslation_encourage(ctx: Context, change: dict): @formatter.compact(event="pagetranslation/encourage") def compact_pagetranslation_encourage(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) content = _("[{author}]({author_url}) encouraged translation of [{article}]({article_url}){comment}").format( author=author, author_url=author_url, @@ -259,7 +259,7 @@ def embed_pagetranslation_discourage(ctx: Context, change: dict): @formatter.compact(event="pagetranslation/discourage") def compact_pagetranslation_discourage(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) content = _("[{author}]({author_url}) discouraged translation of [{article}]({article_url}){comment}").format( author=author, author_url=author_url, @@ -292,7 +292,7 @@ def embed_pagetranslation_prioritylanguages(ctx: Context, change: dict): @formatter.compact(event="pagetranslation/prioritylanguages") def compact_pagetranslation_prioritylanguages(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) if "languages" in change["logparams"]: languages = "`, `".join(change["logparams"]["languages"].split(",")) @@ -336,7 +336,7 @@ def embed_pagetranslation_associate(ctx: Context, change: dict): @formatter.compact(event="pagetranslation/associate") def compact_pagetranslation_associate(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) content = _( "[{author}]({author_url}) added translatable page [{article}]({article_url}) to aggregate group \"{group}\"{comment}").format( @@ -362,7 +362,7 @@ def embed_pagetranslation_dissociate(ctx: Context, change: dict): @formatter.compact(event="pagetranslation/dissociate") def compact_pagetranslation_dissociate(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) content = _( "[{author}]({author_url}) removed translatable page [{article}]({article_url}) from aggregate group \"{group}\"{comment}").format( @@ -391,7 +391,7 @@ def embed_translationreview_message(ctx: Context, change: dict): @formatter.compact(event="translationreview/message") def compact_translationreview_message(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = create_article_path(sanitize_to_url(change["title"])) if "?" in link: link = link + "&oldid={}".format(change["logparams"]["revision"]) @@ -424,7 +424,7 @@ def embed_translationreview_group(ctx: Context, change: dict): @formatter.compact(event="translationreview/group") def compact_translationreview_group(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) if "old-state" in change["logparams"]: content = _( @@ -470,7 +470,7 @@ def embed_pagelang_pagelang(ctx: Context, change: dict): @formatter.compact(event="pagelang/pagelang") def compact_pagelang_pagelang(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) old_lang, new_lang = get_languages(change) content = _( diff --git a/src/api/util.py b/src/api/util.py index 7b1f789..5e02c74 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -78,6 +78,12 @@ def create_article_path(article: str) -> str: return src.misc.WIKI_ARTICLE_PATH.replace("$1", article) +def compact_summary(ctx: Context) -> str: + """Creates a comment for compact formatters""" + if ctx.parsedcomment: + return " *({})*".format(ctx.parsedcomment) + return "" + def compact_author(ctx: Context, change: dict) -> (Optional[str], Optional[str]): """Returns link to the author and the author itself respecting the settings""" author, author_url = None, None From a38babfd198f7dd3cbb5046b61cfc57b8673292d Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 16 May 2021 16:52:27 +0200 Subject: [PATCH 089/173] Task number 2 from #204 --- extensions/base/abusefilter.py | 2 +- extensions/base/datadump.py | 6 ++-- extensions/base/mediawiki.py | 65 ++++++++++++++++------------------ extensions/base/translate.py | 2 +- 4 files changed, 35 insertions(+), 40 deletions(-) diff --git a/extensions/base/abusefilter.py b/extensions/base/abusefilter.py index d60bfa9..4cd23b1 100644 --- a/extensions/base/abusefilter.py +++ b/extensions/base/abusefilter.py @@ -64,7 +64,7 @@ def compact_abuselog(ctx: Context, change: dict): author_url = clean_link(create_article_path("User:{user}".format(user=change["user"]))) author = abuse_filter_format_user(change) message = _("[{author}]({author_url}) triggered *{abuse_filter}*, performing the action \"{action}\" on *[{target}]({target_url})* - action taken: {result}.").format( - author=author, author_url=author_url, abuse_filter=change["filter"], + author=author, author_url=author_url, abuse_filter=sanitize_to_markdown(change["filter"]), action=abusefilter_actions.get(change["action"], _("Unknown")), target=change.get("title", _("Unknown")), target_url=clean_link(create_article_path(sanitize_to_url(change.get("title", _("Unknown"))))), result=abusefilter_results.get(change["result"], _("Unknown"))) diff --git a/extensions/base/datadump.py b/extensions/base/datadump.py index ebcba51..82eeae8 100644 --- a/extensions/base/datadump.py +++ b/extensions/base/datadump.py @@ -43,7 +43,7 @@ def compact_datadump_generate(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) generated *{file}* dump{comment}").format( - author=author, author_url=author_url, file=change["logparams"]["filename"], + author=author, author_url=author_url, file=sanitize_to_markdown(change["logparams"]["filename"]), comment=parsed_comment ) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -55,7 +55,7 @@ def compact_datadump_generate(ctx: Context, change: dict): def embed_datadump_delete(ctx: Context, change: dict) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) - embed["title"] = _("Deleted {file} dump").format(file=change["logparams"]["filename"]) + embed["title"] = _("Deleted {file} dump").format(file=sanitize_to_markdown(change["logparams"]["filename"])) embed["url"] = create_article_path(sanitize_to_url(change["title"])) return embed @@ -65,7 +65,7 @@ def compact_datadump_delete(ctx: Context, change: dict) -> DiscordMessage: author, author_url = compact_author(ctx, change) parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) deleted *{file}* dump{comment}").format( - author=author, author_url=author_url, file=change["logparams"]["filename"], + author=author, author_url=author_url, file=sanitize_to_markdown(change["logparams"]["filename"]), comment=parsed_comment ) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index e511c7e..550d978 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -66,7 +66,7 @@ def embed_edit(ctx: Context, change: dict) -> DiscordMessage: ) embed["title"] = "{redirect}{article} ({new}{minor}{bot}{space}{editsize})".format( redirect="⤷ " if "redirect" in change else "", - article=change["title"], + article=sanitize_to_markdown(change["title"]), editsize="+" + str(editsize) if editsize > 0 else editsize, new=_("(N!) ") if action == "new" else "", minor=_("m") if action == "edit" and "minor" in change else "", @@ -110,12 +110,12 @@ def compact_edit(ctx: Context, change: dict) -> DiscordMessage: if action == "edit": content = _( "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}({sign}{edit_size}){bold}").format( - author=author, author_url=author_url, article=change["title"], edit_link=edit_link, comment=parsed_comment, + author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), edit_link=edit_link, comment=parsed_comment, edit_size=edit_size, sign=sign, bold=bold) else: content = _( "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}({sign}{edit_size}){bold}").format( - author=author, author_url=author_url, article=change["title"], edit_link=edit_link, comment=parsed_comment, + author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), edit_link=edit_link, comment=parsed_comment, edit_size=edit_size, sign=sign, bold=bold) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -193,11 +193,11 @@ def embed_upload_upload(ctx, change) -> DiscordMessage: if settings["appearance"]["embed"]["embed_images"]: embed["image"]["url"] = image_direct_url if action == "upload/overwrite": - embed["title"] = _("Uploaded a new version of {name}").format(name=change["title"]) + embed["title"] = _("Uploaded a new version of {name}").format(name=sanitize_to_markdown(change["title"])) elif action == "upload/revert": - embed["title"] = _("Reverted a version of {name}").format(name=change["title"]) + embed["title"] = _("Reverted a version of {name}").format(name=sanitize_to_markdown(change["title"])) else: - embed["title"] = _("Uploaded {name}").format(name=change["title"]) + embed["title"] = _("Uploaded {name}").format(name=sanitize_to_markdown(change["title"])) if settings["license_detection"]: try: content = image_data['revisions'][0]["slots"]["main"]['*'] @@ -271,7 +271,7 @@ def embed_delete_delete(ctx, change) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) embed['url'] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Deleted page {article}").format(article=change["title"]) + embed["title"] = _("Deleted page {article}").format(article=sanitize_to_markdown(change["title"])) return embed @@ -306,7 +306,7 @@ def compact_delete_delete_redir(ctx, change) -> DiscordMessage: author, author_url = compact_author(ctx, change) parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) deleted redirect by overwriting [{page}]({page_link}){comment}").format( - author=author, author_url=author_url, page=change["title"], page_link=page_link, + author=author, author_url=author_url, page=sanitize_to_markdown(change["title"]), page_link=page_link, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -369,7 +369,7 @@ def embed_delete_revision(ctx, change) -> DiscordMessage: embed['url'] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = ngettext("Changed visibility of revision on page {article} ", "Changed visibility of {amount} revisions on page {article} ", amount).format( - article=change["title"], amount=amount) + article=sanitize_to_markdown(change["title"]), amount=amount) return embed @@ -383,7 +383,7 @@ def compact_delete_revision(ctx, change) -> DiscordMessage: "[{author}]({author_url}) changed visibility of revision on page [{article}]({article_url}){comment}", "[{author}]({author_url}) changed visibility of {amount} revisions on page [{article}]({article_url}){comment}", amount).format(author=author, author_url=author_url, - article=change["title"], article_url=link, amount=amount, comment=parsed_comment) + article=sanitize_to_markdown(change["title"]), article_url=link, amount=amount, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -397,9 +397,7 @@ def embed_move_move(ctx, change) -> DiscordMessage: embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title'])) embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment, supress=_("No redirect has been made") if "suppressredirect" in - change[ - "logparams"] else _( - "A redirect has been made")) + change["logparams"] else _("A redirect has been made")) embed["title"] = _("Moved {redirect}{article} to {target}").format(redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown( @@ -416,7 +414,7 @@ def compact_move_move(ctx, change) -> DiscordMessage: parsed_comment = compact_summary(ctx) content = _( "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]({target_url}) {made_a_redirect}{comment}").format( - author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", article=change["title"], + author=author, author_url=author_url, redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]['target_title']), target_url=link, comment=parsed_comment, made_a_redirect=redirect_status) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -432,9 +430,7 @@ def embed_move_move_redir(ctx, change) -> DiscordMessage: embed["url"] = create_article_path(sanitize_to_url(change["logparams"]['target_title'])) embed["description"] = "{supress}. {desc}".format(desc=ctx.parsedcomment, supress=_("No redirect has been made") if "suppressredirect" in - change[ - "logparams"] else _( - "A redirect has been made")) + change["logparams"] else _("A redirect has been made")) embed["title"] = _("Moved {redirect}{article} to {title} over redirect").format( redirect="⤷ " if "redirect" in change else "", article=sanitize_to_markdown(change["title"]), title=sanitize_to_markdown(change["logparams"]["target_title"])) @@ -527,8 +523,7 @@ def embed_protect_modify(ctx, change): embed["title"] = _("Changed protection level for {article}").format(article=sanitize_to_markdown(change["title"])) embed["description"] = "{settings}{cascade} | {reason}".format( settings=sanitize_to_markdown(change["logparams"].get("description", "")), - cascade=_(" [cascading]") if "cascade" in change[ - "logparams"] else "", + cascade=_(" [cascading]") if "cascade" in change["logparams"] else "", reason=ctx.parsedcomment) return embed @@ -556,7 +551,7 @@ def embed_protect_unprotect(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Removed protection from {article}").format(article=change["title"]) + embed["title"] = _("Removed protection from {article}").format(article=sanitize_to_markdown(change["title"])) return embed @@ -707,7 +702,7 @@ def compact_block_reblock(ctx, change): user = change["title"].split(':', 1)[1] parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) changed block settings for [{blocked_user}]({user_url}){comment}").format( - author=author, author_url=author_url, blocked_user=user, user_url=link, comment=parsed_comment) + author=author, author_url=author_url, blocked_user=sanitize_to_markdown(user), user_url=link, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -719,7 +714,7 @@ def embed_block_unblock(ctx, change): embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) user = change["title"].split(':', 1)[1] - embed["title"] = _("Unblocked {blocked_user}").format(blocked_user=user) + embed["title"] = _("Unblocked {blocked_user}").format(blocked_user=sanitize_to_markdown(user)) return embed @@ -731,7 +726,7 @@ def compact_block_unblock(ctx, change): parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}").format(author=author, author_url=author_url, - blocked_user=user, + blocked_user=sanitize_to_markdown(user), user_url=link, comment=parsed_comment) @@ -826,18 +821,18 @@ def get_changed_groups(change: dict, separator: str): return added, removed -@formatter.embed(event="rights/rights", mode="embed") +@formatter.embed(event="rights/rights", aliases=["rights/autopromote"]) def embed_rights_rights(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change, set_desc=False) embed["url"] = create_article_path(sanitize_to_url("User:{}".format(change["title"].split(":")[1]))) if ctx.event == "rights/rights": - embed["title"] = _("Changed group membership for {target}").format(target=change["title"].split(":")[1]) + embed["title"] = _("Changed group membership for {target}").format(target=sanitize_to_markdown(change["title"].split(":")[1])) else: author_url = "" embed.set_author(_("System"), author_url) embed["title"] = _("{target} got autopromoted to a new usergroup").format( - target=change["title"].split(":")[1]) + target=sanitize_to_markdown(change["title"].split(":")[1])) # if len(change["logparams"]["oldgroups"]) < len(change["logparams"]["newgroups"]): # embed["thumbnail"]["url"] = "https://i.imgur.com/WnGhF5g.gif" added, removed = get_changed_groups(change, "\n") @@ -848,7 +843,7 @@ def embed_rights_rights(ctx, change): return embed -@formatter.compact(event="rights/rights") +@formatter.compact(event="rights/rights", aliases=["rights/autopromote"]) def compact_rights_rights(ctx, change): link = clean_link(create_article_path(sanitize_to_url("User:{user}".format(user=change["title"].split(":")[1])))) added, removed = get_changed_groups(change, ", ") @@ -857,11 +852,11 @@ def compact_rights_rights(ctx, change): if ctx.event == "rights/rights": content = _( "[{author}]({author_url}) changed group membership for [{target}]({target_url}) {added} {removed}{comment}").format( - author=author, author_url=author_url, target=change["title"].split(":")[1], target_url=link, + author=author, author_url=author_url, target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link, added=added, removed=removed, comment=parsed_comment) else: content = _("{author} autopromoted [{target}]({target_url}) {added} {removed}{comment}").format( - author=_("System"), author_url=author_url, target=change["title"].split(":")[1], target_url=link, + author=_("System"), author_url=author_url, target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link, added=added, removed=removed, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -888,8 +883,8 @@ def compact_merge_merge(ctx, change): link_dest = clean_link(create_article_path(sanitize_to_url(change["logparams"]["dest_title"]))) content = _( "[{author}]({author_url}) merged revision histories of [{article}]({article_url}) into [{dest}]({dest_url}){comment}").format( - author=author, author_url=author_url, article=change["title"], article_url=link, dest_url=link_dest, - dest=change["logparams"]["dest_title"], comment=parsed_comment) + author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link, dest_url=link_dest, + dest=sanitize_to_markdown(change["logparams"]["dest_title"]), comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -940,7 +935,7 @@ def embed_newusers_create2(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) embed["url"] = create_article_path(sanitize_to_url(change["title"])) - embed["title"] = _("Created account {article}").format(article=change["title"]) + embed["title"] = _("Created account {article}").format(article=sanitize_to_markdown(change["title"])) return embed @@ -950,7 +945,7 @@ def compact_newusers_create2(ctx, change): parsed_comment = compact_summary(ctx) link = clean_link(create_article_path(sanitize_to_url(change["title"]))) content = _("Account [{article}]({article_url}) was created by [{author}]({author_url}){comment}").format( - article=change["title"], article_url=link, author=author, author_url=author_url, comment=parsed_comment) + article=sanitize_to_markdown(change["title"]), article_url=link, author=author, author_url=author_url, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -974,7 +969,7 @@ def compact_newusers_byemail(ctx, change): link = clean_link(create_article_path(sanitize_to_url(change["title"]))) content = _( "Account [{article}]({article_url}) was created by [{author}]({author_url}) and password was sent by email{comment}").format( - article=change["title"], article_url=link, author=author, author_url=author_url, comment=parsed_comment) + article=sanitize_to_markdown(change["title"]), article_url=link, author=author, author_url=author_url, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -985,7 +980,7 @@ def compact_newusers_byemail(ctx, change): def embed_newusers_newusers(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) - embed["url"] = create_article_path("User:{}".format(change["user"].replace(" ", "_"))) + embed["url"] = create_article_path(sanitize_to_url("User:{}".format(change["user"]))) embed["title"] = _("Created account") return embed diff --git a/extensions/base/translate.py b/extensions/base/translate.py index 99ee93f..68349cc 100644 --- a/extensions/base/translate.py +++ b/extensions/base/translate.py @@ -54,7 +54,7 @@ def compact_pagetranslation_mark(ctx: Context, change: dict): parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) marked [{article}]({article_url}) for translation{comment}").format( author=author, author_url=author_url, - article=change["title"], article_url=link, + article=sanitize_to_markdown(change["title"]), article_url=link, comment=parsed_comment ) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) From 5a3f6eee5a3a1dea1e6fc86a8e0b6f9b2b7cb173 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 16 May 2021 17:08:41 +0200 Subject: [PATCH 090/173] Small improvement to display of rights management logs --- extensions/base/mediawiki.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 550d978..afc675c 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -811,7 +811,7 @@ def compact_import_interwiki(ctx, change): # rights/rights - Assigning rights groups -def get_changed_groups(change: dict, separator: str): +def get_changed_groups(change: dict, separator: str) -> [str, str]: """Creates strings comparing the changes between the user groups for the user""" old_groups = {_(x) for x in change["logparams"]["oldgroups"]} # translate all groups and pull them into a set new_groups = {_(x) for x in change["logparams"]["newgroups"]} @@ -851,13 +851,13 @@ def compact_rights_rights(ctx, change): parsed_comment = compact_summary(ctx) if ctx.event == "rights/rights": content = _( - "[{author}]({author_url}) changed group membership for [{target}]({target_url}) {added} {removed}{comment}").format( + "[{author}]({author_url}) changed group membership for [{target}]({target_url}) {added}{comma} {removed}{comment}").format( author=author, author_url=author_url, target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link, - added=added, removed=removed, comment=parsed_comment) + added=added, comma="," if added and removed else "", removed=removed, comment=parsed_comment) else: - content = _("{author} autopromoted [{target}]({target_url}) {added} {removed}{comment}").format( + content = _("{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}{comment}").format( author=_("System"), author_url=author_url, target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link, - added=added, removed=removed, comment=parsed_comment) + added=added, comma="," if added and removed else "",removed=removed, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) From f948cdeec876bb9e1fe2b2486849d05efc3ba6fc Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 17 May 2021 12:59:41 +0200 Subject: [PATCH 091/173] Fixes for compact blocking functionality --- extensions/base/mediawiki.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index afc675c..977f786 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -579,7 +579,7 @@ def block_expiry(change: dict) -> str: timedelta_for_expiry.seconds % 31557600 // 86400, \ timedelta_for_expiry.seconds % 86400 // 3600, timedelta_for_expiry.seconds % 3600 // 60 if not any([years, days, hours, minutes]): - return _("less than a minute") + return _("for less than a minute") time_names = ( ngettext("year", "years", years), ngettext("day", "days", days), ngettext("hour", "hours", hours), ngettext("minute", "minutes", minutes)) @@ -587,7 +587,7 @@ def block_expiry(change: dict) -> str: for num, timev in enumerate([years, days, hours, minutes]): if timev: final_time.append( - _("{time_unit} {time_number}").format(time_unit=time_names[num], time_number=timev)) + _("for {time_number} {time_unit}").format(time_unit=time_names[num], time_number=timev)) return ", ".join(final_time) else: return change["logparams"]["duration"] # Temporary? Should be rare? We will see in testing From 69d250da457d55d2d09b6f2ca9e69be3e793486b Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 17 May 2021 15:16:50 +0200 Subject: [PATCH 092/173] Added #189 --- extensions/base/managewiki.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/extensions/base/managewiki.py b/extensions/base/managewiki.py index 5051592..7675441 100644 --- a/extensions/base/managewiki.py +++ b/extensions/base/managewiki.py @@ -13,7 +13,6 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . -import logging from src.discord.message import DiscordMessage from src.api import formatter from src.i18n import formatters_i18n @@ -69,6 +68,30 @@ def compact_managewiki_delete(ctx: Context, change: dict): comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) +# managewiki/delete-group - Deleting a group + + +@formatter.embed(event="managewiki/delete-group") +def embed_managewiki_delete_group(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + embed["url"] = create_article_path(sanitize_to_url(change["title"])) + group = change["title"].split("/")[-1] + embed["title"] = _("Deleted a \"{group}\" user group").format(wiki=group) + return embed + + +@formatter.compact(event="managewiki/delete-group") +def compact_managewiki_delete_group(ctx: Context, change: dict) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + parsed_comment = compact_summary(ctx) + group = change["title"].split("/")[-1] + content = _("[{author}]({author_url}) deleted a usergroup *{group}*{comment}").format(author=author, + author_url=author_url, + group=group, + comment=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + # managewiki/lock - Locking a wiki From d481e397dfa29c47afe639ae31505c751c66c29c Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 17 May 2021 16:42:54 +0200 Subject: [PATCH 093/173] Added #208 --- extensions/base/mediawiki.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 977f786..54743d8 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -813,10 +813,16 @@ def compact_import_interwiki(ctx, change): # rights/rights - Assigning rights groups def get_changed_groups(change: dict, separator: str) -> [str, str]: """Creates strings comparing the changes between the user groups for the user""" + def expiry_parse_time(passed_time): + try: + return " (until " + datetime.datetime.strptime(passed_time, "%Y-%m-%dT%H:%M:%SZ").strftime("%Y-%m-%d %H:%M:%S UTC") + ")" + except ValueError: + return "" + new_group_meta = {_(t["group"]): expiry_parse_time(t.get("expiry", "infinity")) for t in change["logparams"].get("newmetadata", [])} old_groups = {_(x) for x in change["logparams"]["oldgroups"]} # translate all groups and pull them into a set new_groups = {_(x) for x in change["logparams"]["newgroups"]} added = separator.join( - ["+ " + x for x in new_groups - old_groups]) # add + before every string and join them with separator + ["+ " + x + new_group_meta.get(x, "") for x in new_groups - old_groups]) # add + before every string and join them with separator removed = separator.join(["- " + x for x in old_groups - new_groups]) return added, removed From bb2e684a8ae43189d96f06a0111794fd50dda33b Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 17 May 2021 23:37:53 +0200 Subject: [PATCH 094/173] Made new string translatable --- extensions/base/mediawiki.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 54743d8..6acc780 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -815,7 +815,7 @@ def get_changed_groups(change: dict, separator: str) -> [str, str]: """Creates strings comparing the changes between the user groups for the user""" def expiry_parse_time(passed_time): try: - return " (until " + datetime.datetime.strptime(passed_time, "%Y-%m-%dT%H:%M:%SZ").strftime("%Y-%m-%d %H:%M:%S UTC") + ")" + return _(" (until {date_and_time})").format(date_and_time=datetime.datetime.strptime(passed_time, "%Y-%m-%dT%H:%M:%SZ").strftime("%Y-%m-%d %H:%M:%S UTC")) except ValueError: return "" new_group_meta = {_(t["group"]): expiry_parse_time(t.get("expiry", "infinity")) for t in change["logparams"].get("newmetadata", [])} From 57358f1a99e5c57ed335f87ba432b4e761017f18 Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 18 May 2021 13:46:00 +0200 Subject: [PATCH 095/173] Whitespace changes --- src/misc.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/misc.py b/src/misc.py index f922c5d..642c8fe 100644 --- a/src/misc.py +++ b/src/misc.py @@ -43,6 +43,7 @@ WIKI_JUST_DOMAIN: str = "" profile_fields = {"profile-location": _("Location"), "profile-aboutme": _("About me"), "profile-link-google": _("Google link"), "profile-link-facebook":_("Facebook link"), "profile-link-twitter": _("Twitter link"), "profile-link-reddit": _("Reddit link"), "profile-link-twitch": _("Twitch link"), "profile-link-psn": _("PSN link"), "profile-link-vk": _("VK link"), "profile-link-xbl": _("XBL link"), "profile-link-steam": _("Steam link"), "profile-link-discord": _("Discord handle"), "profile-link-battlenet": _("Battle.net handle")} + class DataFile: """Data class which instance of is shared by multiple modules to remain consistent and do not cause too many IO operations.""" def __init__(self): @@ -239,6 +240,7 @@ def parse_mw_request_info(request_data: dict, url: str): )) return request_data + def add_to_dict(dictionary, key): if key in dictionary: dictionary[key] += 1 @@ -246,6 +248,7 @@ def add_to_dict(dictionary, key): dictionary[key] = 1 return dictionary + def prepare_paths(path, dry=False): global WIKI_API_PATH global WIKI_ARTICLE_PATH From 9e0c722e3eebaa861bcb62be711e1ec1b28af0f5 Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 18 May 2021 13:47:57 +0200 Subject: [PATCH 096/173] Merged .po files into added together file --- locale/de/LC_MESSAGES/formatters.po | 1769 +++++++++++++++++++++ locale/fr/LC_MESSAGES/formatters.po | 1601 +++++++++++++++++++ locale/hi/LC_MESSAGES/formatters.po | 1723 +++++++++++++++++++++ locale/lol/LC_MESSAGES/formatters.po | 1521 ++++++++++++++++++ locale/pl/LC_MESSAGES/formatters.po | 1766 +++++++++++++++++++++ locale/pt-br/LC_MESSAGES/formatters.po | 1747 +++++++++++++++++++++ locale/ru/LC_MESSAGES/formatters.po | 1792 ++++++++++++++++++++++ locale/uk/LC_MESSAGES/formatters.po | 1707 +++++++++++++++++++++ locale/zh-hans/LC_MESSAGES/formatters.po | 1683 ++++++++++++++++++++ locale/zh-hant/LC_MESSAGES/formatters.po | 1533 ++++++++++++++++++ 10 files changed, 16842 insertions(+) create mode 100644 locale/de/LC_MESSAGES/formatters.po create mode 100644 locale/fr/LC_MESSAGES/formatters.po create mode 100644 locale/hi/LC_MESSAGES/formatters.po create mode 100644 locale/lol/LC_MESSAGES/formatters.po create mode 100644 locale/pl/LC_MESSAGES/formatters.po create mode 100644 locale/pt-br/LC_MESSAGES/formatters.po create mode 100644 locale/ru/LC_MESSAGES/formatters.po create mode 100644 locale/uk/LC_MESSAGES/formatters.po create mode 100644 locale/zh-hans/LC_MESSAGES/formatters.po create mode 100644 locale/zh-hant/LC_MESSAGES/formatters.po diff --git a/locale/de/LC_MESSAGES/formatters.po b/locale/de/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..97abe6e --- /dev/null +++ b/locale/de/LC_MESSAGES/formatters.po @@ -0,0 +1,1769 @@ +# #-#-#-#-# discussion_formatters.po #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"PO-Revision-Date: 2020-12-13 14:30+0000\n" +"Last-Translator: Frisk The Evil Goat Overlord \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.2.1\n" +"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"PO-Revision-Date: 2020-12-29 15:21+0000\n" +"Last-Translator: MarkusRost \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.2.1\n" +"X-Loco-Source-Locale: de_DE\n" +"Generated-By: pygettext.py 1.5\n" +"X-Loco-Parser: loco_parse_po\n" + +#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 +#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 +#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 +msgid "unknown" +msgstr "Unbekannt" + +#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 +#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 +#: src/rc_formatters.py:75 src/rc_formatters.py:96 +msgid "Unregistered user" +msgstr "Nicht angemeldeter Benutzer" + +#: src/discussion_formatters.py:39 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) erstellte [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" + +#: src/discussion_formatters.py:42 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) erstellte eine Umfrage [{title}](<{url}f/p/" +"{threadId}>) in {forumName}" + +#: src/discussion_formatters.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) erstellte ein Quiz [{title}](<{url}f/p/{threadId}>) " +"in {forumName}" + +#: src/discussion_formatters.py:54 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" +"[{author}]({author_url}) erstellte eine [Antwort](<{url}f/p/{threadId}/r/" +"{postId}>) zu [{title}](<{url}f/p/{threadId}>) in {forumName}" + +#: src/discussion_formatters.py:61 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) erstellte [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) auf der [Nachrichtenseite von {user}]" +"(<{url}wiki/Message_Wall:{user_wall}>)" + +#: src/discussion_formatters.py:64 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) erstellte eine [Antwort](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) auf [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) auf der [Nachrichtenseite von " +"{user}](<{url}wiki/Message_Wall:{user_wall}>)" + +#: src/discussion_formatters.py:72 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) erstellte ein [Kommentar](<{url}?" +"commentId={commentId}>) zu [{article}](<{url}>)" + +#: src/discussion_formatters.py:78 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) erstellte eine [Antwort](<{url}?" +"commentId={commentId}&replyId={replyId}>) auf ein [Kommentar](<{url}?" +"commentId={commentId}>) zu [{article}](<{url}>)" + +#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" +"Unbekanntes Event `{event}` von [{author}]({author_url}), melde es auf dem " +"[Support-Server](<{support}>)." + +#: src/discussion_formatters.py:123 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "Erstellte „{title}“" + +#: src/discussion_formatters.py:127 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "Erstellte eine Umfrage „{title}“" + +#: src/discussion_formatters.py:134 +msgid "Option {}" +msgstr "Option {}" + +#: src/discussion_formatters.py:135 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[Bild öffnen]({image_url})__" + +#: src/discussion_formatters.py:139 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "Erstellte ein Quiz „{title}“" + +#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 +#: src/rc_formatters.py:1283 +#, fuzzy +msgid "Tags" +msgstr "" +"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +"Tags\n" +"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" +"Markierungen" + +#: src/discussion_formatters.py:155 +msgid "{} tags" +msgstr "{} Tags" + +#: src/discussion_formatters.py:160 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "Antwortete auf „{title}“" + +#: src/discussion_formatters.py:169 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "Erstellte „{title}“ auf der Nachrichtenseite von {user}" + +#: src/discussion_formatters.py:173 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "Antwortete auf „{title}“ auf der Nachrichtenseite von {user}" + +#: src/discussion_formatters.py:180 +#, python-brace-format +msgid "Commented on {article}" +msgstr "Kommentierte zu „{article}“" + +#: src/discussion_formatters.py:184 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "Antwortete auf ein Kommentar zu „{article}“" + +#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "Unbekanntes Event `{event}`" + +#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 +#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 +msgid "Report this on the support server" +msgstr "Melde es auf dem Support-Server" + +#: src/rc_formatters.py:28 +msgid "None" +msgstr "Keine" + +#: src/rc_formatters.py:28 +msgid "Warning issued" +msgstr "Gewarnt" + +#: src/rc_formatters.py:28 +msgid "**Blocked user**" +msgstr "**Benutzer gesperrt**" + +#: src/rc_formatters.py:28 +msgid "Tagged the edit" +msgstr "Änderung markiert" + +#: src/rc_formatters.py:28 +msgid "Disallowed the action" +msgstr "Aktion verhindert" + +#: src/rc_formatters.py:28 +msgid "**IP range blocked**" +msgstr "**IP-Adressbereich gesperrt**" + +#: src/rc_formatters.py:28 +msgid "Throttled actions" +msgstr "Aktionen gedrosselt" + +#: src/rc_formatters.py:28 +msgid "Removed autoconfirmed group" +msgstr "„Automatisch bestätigter Benutzer“-Status entzogen" + +#: src/rc_formatters.py:28 +msgid "**Removed from privileged groups**" +msgstr "**Gruppen mit Sonderrechten entfernt**" + +#: src/rc_formatters.py:29 +msgid "Edit" +msgstr "Bearbeitung" + +#: src/rc_formatters.py:29 +msgid "Upload" +msgstr "Hochladen" + +#: src/rc_formatters.py:29 +msgid "Move" +msgstr "Verschieben" + +#: src/rc_formatters.py:29 +msgid "Stash upload" +msgstr "Hochladen vom Zwischenspeicher" + +#: src/rc_formatters.py:29 +msgid "Deletion" +msgstr "Löschung" + +#: src/rc_formatters.py:29 +msgid "Account creation" +msgstr "Benutzerkontenerstellung" + +#: src/rc_formatters.py:29 +msgid "Auto account creation" +msgstr "Automatische Benutzerkontenerstellung" + +#: src/rc_formatters.py:83 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" +"[{author}]({author_url}) löste durch die Aktion „{action}“ auf der Seite " +"*[{target}]({target_url})* den Filter *{abuse_filter}* aus. Ergriffene " +"Maßnahmen: {result}." + +#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 +#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 +#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 +#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 +#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 +#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 +#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 +#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 +#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 +msgid "Unknown" +msgstr "Unbekannt" + +#: src/rc_formatters.py:116 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) bearbeitete [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" + +#: src/rc_formatters.py:118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) erstellte [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" + +#: src/rc_formatters.py:121 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) lud [{file}]({file_link}) hoch{comment}" + +#: src/rc_formatters.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" +"[{author}]({author_url}) setzte [{file}]({file_link}) auf eine alte Version " +"zurück{comment}" + +#: src/rc_formatters.py:132 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) lud eine neue Version von [{file}]({file_link}) " +"hoch{comment}" + +#: src/rc_formatters.py:135 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "[{author}]({author_url}) löschte [{page}]({page_link}){comment}" + +#: src/rc_formatters.py:141 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" +"[{author}]({author_url}) löschte die Weiterleitung [{page}]({page_link}) " +"durch Überschreiben{comment}" + +#: src/rc_formatters.py:147 src/rc_formatters.py:152 +msgid "without making a redirect" +msgstr "ohne eine Weiterleitung zu erstellen" + +#: src/rc_formatters.py:147 src/rc_formatters.py:153 +msgid "with a redirect" +msgstr "und erstellte eine Weiterleitung" + +#: src/rc_formatters.py:148 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) verschob {redirect}*{article}* nach [{target}]" +"({target_url}) {made_a_redirect}{comment}" + +#: src/rc_formatters.py:154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) verschob {redirect}*{article}* nach [{target}]" +"({target_url}) und überschrieb eine Weiterleitung {made_a_redirect}{comment}" + +#: src/rc_formatters.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) verschob die Schutzeinstellungen von {redirect}" +"*{article}* nach [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:170 src/rc_formatters.py:855 +msgid "for infinity and beyond" +msgstr "für alle Ewigkeit" + +#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#, python-brace-format +msgid "for {num} {translated_length}" +msgstr "für {num} {translated_length}" + +#: src/rc_formatters.py:185 src/rc_formatters.py:867 +msgid "until {}" +msgstr "bis {}" + +#: src/rc_formatters.py:189 +msgid " on pages: " +msgstr " auf Seiten: " + +#: src/rc_formatters.py:196 src/rc_formatters.py:881 +msgid " and namespaces: " +msgstr " und Namensräumen: " + +#: src/rc_formatters.py:198 +msgid " on namespaces: " +msgstr " in Namensräumen: " + +#: src/rc_formatters.py:210 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) sperrte [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" + +#: src/rc_formatters.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) änderte die Sperreinstellungen für [{blocked_user}]" +"({user_url}){comment}" + +#: src/rc_formatters.py:218 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) hob die Sperre von [{blocked_user}]({user_url}) " +"auf{comment}" + +#: src/rc_formatters.py:223 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) hinterließ einen [Kommentar]({comment}) auf dem " +"Profil von {target}" + +#: src/rc_formatters.py:225 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) hinterließ einen [Kommentar]({comment}) auf dem " +"eigenen Profil" + +#: src/rc_formatters.py:231 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile" +msgstr "" +"[{author}]({author_url}) antwortete auf einen [Kommentar]({comment}) auf dem " +"Profil von {target}" + +#: src/rc_formatters.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile" +msgstr "" +"[{author}]({author_url}) antwortete auf einen [Kommentar]({comment}) auf dem " +"eigenen Profil" + +#: src/rc_formatters.py:245 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) bearbeitete einen [Kommentar]({comment}) auf dem " +"Profil von {target}" + +#: src/rc_formatters.py:251 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) bearbeitete einen [Kommentar]({comment}) auf dem " +"eigenen Profil" + +#: src/rc_formatters.py:257 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +msgstr "" +"[{author}]({author_url}) löschte einen Kommentar auf dem Profil von {target} " +"dauerhaft" + +#: src/rc_formatters.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on their own profile" +msgstr "" +"[{author}]({author_url}) löschte einen Kommentar auf dem eigenen Profil " +"dauerhaft" + +#: src/rc_formatters.py:267 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) löschte einen [Kommentar]({comment}) auf dem Profil " +"von {target}" + +#: src/rc_formatters.py:269 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) löschte einen [Kommentar]({comment}) auf dem " +"eigenen Profil" + +#: src/rc_formatters.py:274 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) bearbeitete den {field} auf dem Profil von " +"[{target}]({target_url}). *({desc})*" + +#: src/rc_formatters.py:281 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) bearbeitete den {field} auf dem [eigenen Profil]" +"({target_url}). *({desc})*" + +#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 +#: src/rc_formatters.py:979 +msgid "none" +msgstr "keine" + +#: src/rc_formatters.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) from {old_groups} to {new_groups}{comment}" +msgstr "" +"[{author}]({author_url}) änderte die Benutzergruppen für [{target}]" +"({target_url}) von {old_groups} zu {new_groups}{comment}" + +#: src/rc_formatters.py:303 +#, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) from {old_groups} to " +"{new_groups}{comment}" +msgstr "" +"{author} änderte die Benutzergruppen für [{target}]({target_url}) " +"automatisch von {old_groups} zu {new_groups}{comment}" + +#: src/rc_formatters.py:304 src/rc_formatters.py:965 +msgid "System" +msgstr "System" + +#: src/rc_formatters.py:309 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) schützte [{article}]({article_url}) {settings}" +"{comment}" + +#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 +#: src/rc_formatters.py:993 +msgid " [cascading]" +msgstr " [kaskadierend]" + +#: src/rc_formatters.py:316 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) änderte den Schutzstatus von [{article}]" +"({article_url}) {settings}{comment}" + +#: src/rc_formatters.py:323 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) entfernte den Schutz von [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:327 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) änderte die Sichtbarkeit einer Version von " +"[{article}]({article_url}){comment}" +msgstr[1] "" +"[{author}]({author_url}) änderte die Sichtbarkeit von {amount} Versionen von " +"[{article}]({article_url}){comment}" + +#: src/rc_formatters.py:340 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" +"[{author}]({author_url}) importierte [{article}]({article_url}) mit einer " +"Version{comment}" +msgstr[1] "" +"[{author}]({author_url}) importierte [{article}]({article_url}) mit {count} " +"Versionen{comment}" + +#: src/rc_formatters.py:345 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) stellte [{article}]({article_url}) wieder " +"her{comment}" + +#: src/rc_formatters.py:347 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "" +"[{author}]({author_url}) änderte die Sichtbarkeit eines " +"Logbucheintrags{comment}" + +#: src/rc_formatters.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) importierte [{article}]({article_url}) mit einer " +"Version von [{source}]({source_url}){comment}" +msgstr[1] "" +"[{author}]({author_url}) importierte [{article}]({article_url}) mit {count} " +"Versionen von [{source}]({source_url}){comment}" + +#: src/rc_formatters.py:364 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) änderte [Missbrauchsfilter {number}]({filter_url})" + +#: src/rc_formatters.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) erstellte [Missbrauchsfilter {number}]({filter_url})" + +#: src/rc_formatters.py:372 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" +"[{author}]({author_url}) vereinigte Versionen von [{article}]({article_url}) " +"in [{dest}]({dest_url}){comment}" + +#: src/rc_formatters.py:375 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "Konto [{author}]({author_url}) wurde automtisch erstellt" + +#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "Konto [{author}]({author_url}) wurde erstellt" + +#: src/rc_formatters.py:380 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" +"Konto [{article}]({article_url}) wurde von [{author}]({author_url}) " +"erstellt{comment}" + +#: src/rc_formatters.py:383 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" +"Konto [{article}]({article_url}) wurde von [{author}]({author_url}) erstellt " +"und das Passwort wurde per E-Mail zugesandt{comment}" + +#: src/rc_formatters.py:388 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) erstellte den [Interwiki-Präfix]({table_url}) " +"{prefix} nach {website}" + +#: src/rc_formatters.py:394 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) bearbeitete den [Interwiki-Präfix]({table_url}) " +"{prefix} nach {website}" + +#: src/rc_formatters.py:400 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +msgstr "[{author}]({author_url}) entfernte ein [Interwiki-Präfix]({table_url})" + +#: src/rc_formatters.py:403 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" +"[{author}]({author_url}) änderte das Inhaltsmodell der Seite [{article}]" +"({article_url}) von {old} zu {new}{comment}" + +#: src/rc_formatters.py:407 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" +"[{author}]({author_url}) erstellte die Seite [{article}]({article_url}) mit " +"dem Inhaltsmodell {new}{comment}" + +#: src/rc_formatters.py:410 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) änderte das Sprite für [{article}]({article_url})" + +#: src/rc_formatters.py:413 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) erstellte das Sprite-sheet für [{article}]" +"({article_url})" + +#: src/rc_formatters.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) änderte das Stück für [{article}]({article_url})" + +#: src/rc_formatters.py:421 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) erstellte die Cargo-Tabelle „{table}“" + +#: src/rc_formatters.py:423 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) löschte die Cargo-Tabelle „{table}“" + +#: src/rc_formatters.py:428 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) erstellte die Cargo-Tabelle „{table}“ neu" + +#: src/rc_formatters.py:433 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) ersetzte die Cargo-Tabelle „{table}“" + +#: src/rc_formatters.py:436 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" +"[{author}]({author_url}) erstellte eine [Markierung]({tag_url}) „{tag}“" + +#: src/rc_formatters.py:441 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) löschte eine [Markierung]({tag_url}) „{tag}“" + +#: src/rc_formatters.py:443 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +"[{author}]({author_url}) importierte [{article}]({article_url}) mit einer " +"Version{comment}" +msgstr[1] "" +"[{author}]({author_url}) importierte [{article}]({article_url}) mit {count} " +"Versionen{comment}" + +#: src/rc_formatters.py:449 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" +"[{author}]({author_url}) aktivierte eine [Markierung]({tag_url}) „{tag}“" + +#: src/rc_formatters.py:452 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" +"[{author}]({author_url}) deaktivierte eine [Markierung]({tag_url}) „{tag}“" + +#: src/rc_formatters.py:454 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) änderte Wiki-Einstellungen{reason}" + +#: src/rc_formatters.py:456 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) löschte das Wiki *{wiki_name}*{comment}" + +#: src/rc_formatters.py:459 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) sperrte das Wiki *{wiki_name}*{comment}" + +#: src/rc_formatters.py:462 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) bearbeitete den Namensraum *{namespace_name}* für " +"*{wiki_name}*{comment}" + +#: src/rc_formatters.py:467 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) löschte den Namesraum *{namespace_name}* für " +"*{wiki_name}*{comment}" + +#: src/rc_formatters.py:473 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" +"[{author}]({author_url}) bearbeitete die Benutzergruppe *{group_name}" +"*{comment}" + +#: src/rc_formatters.py:477 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) löschte das Wiki *{wiki_name}*{comment}" + +#: src/rc_formatters.py:481 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) entsperrte das Wiki *{wiki_name}*{comment}" + +#: src/rc_formatters.py:486 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "[{author}]({author_url}) generierte *{file}* Dump{comment}" + +#: src/rc_formatters.py:491 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "[{author}]({author_url}) löschte *{file}* Dump{comment}" + +#: src/rc_formatters.py:502 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" +"[{author}]({author_url}) markierte [{article}]({article_url}) zur " +"Übersetzung{comment}" + +#: src/rc_formatters.py:509 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" +"[{author}]({author_url}) entfernte [{article}]({article_url}) aus dem " +"Übersetzungssystem{comment}" + +#: src/rc_formatters.py:516 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) schloss die Umbenennung der übersetzbaren Seite von " +"*{article}* nach [{target}]({target_url}) ab{comment}" + +#: src/rc_formatters.py:524 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) hatte ein Problem beim Verschieben der Seite von " +"[{article}]({article_url}) nach [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:532 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translatable page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) schloss die Löschung der übersetzbaren Seite " +"[{article}]({article_url}) ab{comment}" + +#: src/rc_formatters.py:540 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) konnte die Seite [{article}]({article_url}) nicht " +"löschen, die zur übersetzbaren Seite [{target}]({target_url}) gehört{comment}" + +#: src/rc_formatters.py:548 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) schloss die Löschung der Übersetzungsseite " +"[{article}]({article_url}) ab{comment}" + +#: src/rc_formatters.py:556 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) konnte die Seite [{article}]({article_url}) nicht " +"löschen, die zur Übersetzungsseite [{target}]({target_url}) gehört{comment}" + +#: src/rc_formatters.py:564 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) empfahl die Übersetzung der Seite [{article}]" +"({article_url}){comment}" + +#: src/rc_formatters.py:571 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) riet von der Übersetzung der Seite [{article}]" +"({article_url}) ab{comment}" + +#: src/rc_formatters.py:581 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) begrenzte die Sprachen für [{article}]" +"({article_url}) auf `{languages}`{comment}" + +#: src/rc_formatters.py:587 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) legte die priorisierten Sprachen für [{article}]" +"({article_url}) auf `{languages}` fest{comment}" + +#: src/rc_formatters.py:593 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) entfernte die priorisierten Sprachen von [{article}]" +"({article_url}){comment}" + +#: src/rc_formatters.py:600 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) fügte die übersetzbare Seite [{article}]" +"({article_url}) zur zusammenfassenden Gruppe „{group}“ hinzu{comment}" + +#: src/rc_formatters.py:607 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) entfernte die übersetzbare Seite [{article}]" +"({article_url}) von der zusammenfassenden Gruppe „{group}“{comment}" + +#: src/rc_formatters.py:619 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) überprüfte die Übersetzung [{article}]" +"({article_url}){comment}" + +#: src/rc_formatters.py:627 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) änderte den Status der Übersetzungen in der Sprache " +"`{language}` der Seite [{article}]({article_url}) von `{old_state}` in " +"`{new_state}`{comment}" + +#: src/rc_formatters.py:634 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) änderte den Status der Übersetzungen in der Sprache " +"`{language}` der Seite [{article}]({article_url}) in `{new_state}`{comment}" + +#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 +#: src/rc_formatters.py:1241 +msgid "(default)" +msgstr "(Standard)" + +#: src/rc_formatters.py:647 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" +"[{author}]({author_url}) änderte die Sprache für [{article}]({article_url}) " +"von {old_lang} zu {new_lang}{comment}" + +#: src/rc_formatters.py:656 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" +"[{author}]({author_url}) hat den Benutzer *{old_name}* mit einer Bearbeitung " +"zu [{new_name}]({link}) umbenannt{comment}" +msgstr[1] "" +"[{author}]({author_url}) hat den Benutzer *{old_name}* mit {edits} " +"Bearbeitungen zu [{new_name}]({link}) umbenannt{comment}" + +#: src/rc_formatters.py:661 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) hat den Benutzer *{old_name}* zu [{new_name}]" +"({link}) umbenannt{comment}" + +#: src/rc_formatters.py:665 +msgid "An action has been hidden by administration." +msgstr "Eine Aktion wurde versteckt." + +#: src/rc_formatters.py:681 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "{user} löste „{abuse_filter}“ aus" + +#: src/rc_formatters.py:682 +msgid "Performed" +msgstr "Aktion" + +#: src/rc_formatters.py:683 +msgid "Action taken" +msgstr "Maßnahmen" + +#: src/rc_formatters.py:684 +msgid "Title" +msgstr "Seite" + +#: src/rc_formatters.py:693 src/rc_formatters.py:980 +msgid "No description provided" +msgstr "Keine Zusammenfassung angegeben" + +#: src/rc_formatters.py:717 +msgid "(N!) " +msgstr "(N!) " + +#: src/rc_formatters.py:718 +msgid "m" +msgstr "K" + +#: src/rc_formatters.py:718 +msgid "b" +msgstr "B" + +#: src/rc_formatters.py:735 src/rc_formatters.py:740 +msgid "__Only whitespace__" +msgstr "__Nur Leerraum__" + +#: src/rc_formatters.py:745 +msgid "Removed" +msgstr "Entfernt" + +#: src/rc_formatters.py:747 +msgid "Added" +msgstr "Hinzugefügt" + +#: src/rc_formatters.py:781 src/rc_formatters.py:820 +msgid "Options" +msgstr "Optionen" + +#: src/rc_formatters.py:781 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([Vorschau]({link}) | [zurücksetzen]({undolink}))" + +#: src/rc_formatters.py:786 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "Neue Dateiversion {name}" + +#: src/rc_formatters.py:788 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "Setzte {name} auf eine alte Version zurück" + +#: src/rc_formatters.py:790 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "Neue Datei {name}" + +#: src/rc_formatters.py:806 +msgid "**No license!**" +msgstr "**Keine Lizenz!**" + +#: src/rc_formatters.py:818 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"Lizenz: {}" + +#: src/rc_formatters.py:820 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([Vorschau]({link}))" + +#: src/rc_formatters.py:825 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "Löschte {article}" + +#: src/rc_formatters.py:830 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "Löschte die Weiterleitung {article} um Platz zu machen" + +#: src/rc_formatters.py:836 +msgid "No redirect has been made" +msgstr "Die Erstellung einer Weiterleitung wurde unterdrückt" + +#: src/rc_formatters.py:837 +msgid "A redirect has been made" +msgstr "Eine Weiterleitung wurde erstellt" + +#: src/rc_formatters.py:838 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "Verschob {redirect}{article} nach {target}" + +#: src/rc_formatters.py:841 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" +"Verschob {redirect}{article} nach {title} und überschrieb eine Weiterleitung" + +#: src/rc_formatters.py:845 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "Verschob die Schutzeinstellungen von {redirect}{article} nach {title}" + +#: src/rc_formatters.py:869 +msgid "unknown expiry time" +msgstr "unbekannte Ablaufdauer" + +#: src/rc_formatters.py:874 +msgid "Blocked from editing the following pages: " +msgstr "Bearbeiten von folgenden Seiten gesperrt: " + +#: src/rc_formatters.py:883 +msgid "Blocked from editing pages on following namespaces: " +msgstr "Bearbeiten von Seiten in folgenden Namensräumen gesperrt: " + +#: src/rc_formatters.py:894 +msgid "Partial block details" +msgstr "Teilweise Sperre" + +#: src/rc_formatters.py:895 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "Sperrte {blocked_user} {time}" + +#: src/rc_formatters.py:899 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "Änderte die Sperreinstellungen für {blocked_user}" + +#: src/rc_formatters.py:903 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "Hob die Sperre von {blocked_user} auf" + +#: src/rc_formatters.py:910 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "Hinterließ ein Kommentar auf dem Profil von {target}" + +#: src/rc_formatters.py:912 +msgid "Left a comment on their own profile" +msgstr "Hinterließ ein Kommentar auf dem eigenen Profil" + +#: src/rc_formatters.py:919 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "Antwortete auf ein Kommentar auf dem Profil von {target}" + +#: src/rc_formatters.py:921 +msgid "Replied to a comment on their own profile" +msgstr "Antwortete auf ein Kommentar auf dem eigenen Profil" + +#: src/rc_formatters.py:928 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "Bearbeitete ein Kommentar auf dem Profil von {target}" + +#: src/rc_formatters.py:930 +msgid "Edited a comment on their own profile" +msgstr "Bearbeitete ein Kommentar auf dem eigenen Profil" + +#: src/rc_formatters.py:935 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "Bearbeitete das Profil von {target}" + +#: src/rc_formatters.py:937 +msgid "Edited their own profile" +msgstr "Bearbeitete das eigene Profil" + +#: src/rc_formatters.py:939 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "Entfernte den {field}" + +#: src/rc_formatters.py:941 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "{field} geändert zu: {desc}" + +#: src/rc_formatters.py:946 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "Löschte ein Kommentar auf dem Profil von {target} dauerhaft" + +#: src/rc_formatters.py:948 +msgid "Purged a comment on their own profile" +msgstr "Löschte ein Kommentar auf dem eigenen Profil dauerhaft" + +#: src/rc_formatters.py:956 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "Löschte ein Kommentar auf dem Profil von {target}" + +#: src/rc_formatters.py:958 +msgid "Deleted a comment on their own profile" +msgstr "Löschte ein Kommentar auf dem eigenen Profil" + +#: src/rc_formatters.py:962 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "Änderte die Gruppenzugehörigkeit von {target}" + +#: src/rc_formatters.py:966 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} wurde automatisch einer neuen Benutzergruppe zugeordnet" + +#: src/rc_formatters.py:981 +#, python-brace-format +msgid "Groups changed from {old_groups} to {new_groups}{reason}" +msgstr "" +"Änderte die Gruppenzugehörigkeit von {old_groups} auf {new_groups}{reason}" + +#: src/rc_formatters.py:985 +#, python-brace-format +msgid "Protected {target}" +msgstr "Schützte {target}" + +#: src/rc_formatters.py:991 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "Änderte den Schutzstatus von {article}" + +#: src/rc_formatters.py:997 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "Entfernte den Schutz von {article}" + +#: src/rc_formatters.py:1001 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "Änderte die Sichtbarkeit einer Versionen von {article} " +msgstr[1] "Änderte die Sichtbarkeit von {amount} Versionen von {article} " + +#: src/rc_formatters.py:1013 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "Importierte {article} mit einer Version" +msgstr[1] "Importierte {article} mit {count} Versionen" + +#: src/rc_formatters.py:1018 +#, python-brace-format +msgid "Restored {article}" +msgstr "Stellte {article} wieder her" + +#: src/rc_formatters.py:1021 +msgid "Changed visibility of log events" +msgstr "Änderte die Sichtbarkeit eines Logbucheintrags" + +#: src/rc_formatters.py:1031 +#, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "Importierte {article} mit einer Version von „{source}“" +msgstr[1] "Importierte {article} mit {count} Versionen von „{source}“" + +#: src/rc_formatters.py:1036 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "Änderte Missbrauchsfilter {number}" + +#: src/rc_formatters.py:1039 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "Erstellte Missbrauchsfilter {number}" + +#: src/rc_formatters.py:1042 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "Vereinigte Versionen von {article} in {dest}" + +#: src/rc_formatters.py:1046 +msgid "Created account automatically" +msgstr "Erstellte Konto automatisch" + +#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 +msgid "Created account" +msgstr "Erstellte Konto" + +#: src/rc_formatters.py:1052 +#, python-brace-format +msgid "Created account {article}" +msgstr "Erstellte Konto {article}" + +#: src/rc_formatters.py:1055 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "Erstellte Konto {article} und das Passwort wurde per E-Mail zugesandt" + +#: src/rc_formatters.py:1061 +msgid "Added an entry to the interwiki table" +msgstr "Fügte ein Interwiki-Präfix hinzu" + +#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Präfix: {prefix}, URL: {website} | {desc}" + +#: src/rc_formatters.py:1067 +msgid "Edited an entry in interwiki table" +msgstr "Änderte ein Interwiki-Präfix" + +#: src/rc_formatters.py:1073 +msgid "Deleted an entry in interwiki table" +msgstr "Entfernte ein Interwiki-Präfix" + +#: src/rc_formatters.py:1074 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Präfix: {prefix} | {desc}" + +#: src/rc_formatters.py:1077 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "Änderte das Inhaltsmodell von {article}" + +#: src/rc_formatters.py:1078 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "Modell geändert von {old} zu {new}: {reason}" + +#: src/rc_formatters.py:1083 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "Erstellte die Seite {article}mit einem nicht-standard Inhaltsmodell" + +#: src/rc_formatters.py:1084 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "Erstellt mit Modell {new}: {reason}" + +#: src/rc_formatters.py:1087 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "Änderte das Sprite für {article}" + +#: src/rc_formatters.py:1090 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "Erstellte das Sprite-sheet für {article}" + +#: src/rc_formatters.py:1093 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "Änderte das Stück für {article}" + +#: src/rc_formatters.py:1099 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "Erstellte die Cargo-Tabelle „{table}“" + +#: src/rc_formatters.py:1103 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "Löschte die Cargo-Tabelle „{table}“" + +#: src/rc_formatters.py:1110 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "Erstellte die Cargo-Tabelle „{table}“ neu" + +#: src/rc_formatters.py:1117 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "Ersetzte die Cargo-Tabelle „{table}“" + +#: src/rc_formatters.py:1121 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "Erstellte die Markierung „{tag}“" + +#: src/rc_formatters.py:1125 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "Löschte die Markierung „{tag}“" + +#: src/rc_formatters.py:1127 +#, fuzzy +msgid "Removed from" +msgstr "Entfernt" + +#: src/rc_formatters.py:1127 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:1131 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "Aktivierte die Markierung „{tag}“" + +#: src/rc_formatters.py:1134 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "Deaktivierte die Markierung „{tag}“" + +#: src/rc_formatters.py:1137 +msgid "Changed wiki settings" +msgstr "Änderte Wiki-Einstellungen" + +#: src/rc_formatters.py:1141 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "Löschte das Wiki „{wiki}“" + +#: src/rc_formatters.py:1144 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "Sperrte das Wiki „{wiki}“" + +#: src/rc_formatters.py:1147 +#, fuzzy, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "Bearbeitete den Namensraum „{namespace_name}“" + +#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 +msgid "Wiki" +msgstr "Wiki" + +#: src/rc_formatters.py:1151 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "Löschte den Namensraum „{namespace_name}“" + +#: src/rc_formatters.py:1157 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "Bearbeitete die Benutzergruppe „{usergroup_name}“" + +#: src/rc_formatters.py:1160 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "Löschte das Wiki „{wiki}“" + +#: src/rc_formatters.py:1163 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "Entsperrte das Wiki „{wiki}“" + +#: src/rc_formatters.py:1166 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "Generierte {file} Dump" + +#: src/rc_formatters.py:1169 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "Löschte {file} Dump" + +#: src/rc_formatters.py:1177 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "Markierte „{article}“ zum Übersetzen" + +#: src/rc_formatters.py:1180 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "Entfernte „{article}“ aus dem Übersetzungssystem" + +#: src/rc_formatters.py:1183 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" +"Schloss die Verschiebung der Übersetzungsseiten von „{article}“ nach " +"„{target}“ ab" + +#: src/rc_formatters.py:1186 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "Hatte ein Problem beim Verschieben von „{article}“ nach „{target}“" + +#: src/rc_formatters.py:1189 +#, python-brace-format +msgid "Completed deletion of translatable page \"{article}\"" +msgstr "Schloss die Löschung der übersetzbaren Seite „{article}“ ab" + +#: src/rc_formatters.py:1192 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" +"Konnte „{article}“ nicht löschen, die zur übersetzbaren Seite „{target}“ " +"gehört" + +#: src/rc_formatters.py:1195 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "Schloss die Löschung der Übersetzungsseite „{article}“ ab" + +#: src/rc_formatters.py:1198 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" +"Konnte „{article}“ nicht löschen, die zur Übersetzungsseite „{target}“ gehört" + +#: src/rc_formatters.py:1201 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "Empfahl die Übersetzung von „{article}“" + +#: src/rc_formatters.py:1204 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "Riet von der Übersetzung von „{article}“ ab" + +#: src/rc_formatters.py:1210 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "Begrenzte die Sprachen für „{article}“ auf `{languages}`" + +#: src/rc_formatters.py:1212 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" +"Legte die priorisierten Sprachen für „{article}“ auf `{languages}` fest" + +#: src/rc_formatters.py:1214 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "Entfernte die priorisierten Sprachen von „{article}“" + +#: src/rc_formatters.py:1217 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" +"Fügte die übersetzbare Seite „{article}“ zur zusammenfassenden Gruppe " +"„{group}“ hinzu" + +#: src/rc_formatters.py:1220 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" +"Entfernte die übersetzbare Seite „{article}“ von der zusammenfassenden " +"Gruppe „{group}“" + +#: src/rc_formatters.py:1227 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "Überprüfte die Übersetzung „{article}“" + +#: src/rc_formatters.py:1230 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "Änderte den Status der Übersetzungen in `{language}` für „{article}“" + +#: src/rc_formatters.py:1232 +msgid "Old state" +msgstr "Alter Status" + +#: src/rc_formatters.py:1233 +msgid "New state" +msgstr "Neuer Status" + +#: src/rc_formatters.py:1242 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "Änderte die Sprache für „{article}“" + +#: src/rc_formatters.py:1243 +msgid "Old language" +msgstr "Alte Sprache" + +#: src/rc_formatters.py:1244 +msgid "New language" +msgstr "Neue Sprache" + +#: src/rc_formatters.py:1248 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +"Nannte den Benutzer „{old_name}“ mit einer Bearbeitung zu „{new_name}“ um" +msgstr[1] "" +"Nannte den Benutzer „{old_name}“ mit {edits} Bearbeitungen zu „{new_name}“ um" + +#: src/rc_formatters.py:1250 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "Nannte den Benutzer „{old_name}“ zu „{new_name}“ um" + +#: src/rc_formatters.py:1254 +msgid "Action has been hidden by administration" +msgstr "Aktion wurde versteckt" + +#: src/rc_formatters.py:1288 +msgid "**Added**: " +msgstr "**Hinzugefügt:** " + +#: src/rc_formatters.py:1288 +msgid " and {} more\n" +msgstr " und {} mehr\n" + +#: src/rc_formatters.py:1289 +msgid "**Removed**: " +msgstr "**Entfernt:** " + +#: src/rc_formatters.py:1289 +msgid " and {} more" +msgstr " und {} mehr" + +#: src/rc_formatters.py:1290 +msgid "Changed categories" +msgstr "Geänderte Kategorien" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" +#~ msgstr "" +#~ "[{author}]({author_url}) stellte das Wiki *{wiki_name}* wieder " +#~ "her{comment}" + +#, python-brace-format +#~ msgid "Restored a \"{wiki}\" wiki" +#~ msgstr "Stellte das Wiki „{wiki}“ wieder her" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) löschte einen Kommentar auf dem Profil von " +#~ "{target}" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) löschte einen Kommentar auf dem eigenen Profil" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) imported interwiki{comment}" +#~ msgstr "[{author}]({author_url}) importierte Interwiki{comment}" + +#~ msgid "Imported interwiki" +#~ msgstr "Importierte Interwiki" + +#~ msgid "their own profile" +#~ msgstr "das eigene Profil" + +#~ msgid "their own" +#~ msgstr "sich selbst" + +#, python-brace-format +#~ msgid "[{target}]({target_url})'s" +#~ msgstr "dem Profil von [{target}]({target_url})" + +#, python-brace-format +#~ msgid "[their own]({target_url})" +#~ msgstr "dem [eigenen Profil]({target_url})" diff --git a/locale/fr/LC_MESSAGES/formatters.po b/locale/fr/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..da32806 --- /dev/null +++ b/locale/fr/LC_MESSAGES/formatters.po @@ -0,0 +1,1601 @@ +# #-#-#-#-# discussion_formatters.po #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# rc_formatters.po #-#-#-#-# +# UN TITRE MERVEILLEUSEMENT DESCRIPTIF +# COPYRIGHT HAHAHAHA I WISH J'AI PAS DE COPYRIGHT +# AUTEUR #1 C'EST MOI MWAHAHAHAHAHA +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"PO-Revision-Date: 2020-07-04 01:08+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"PO-Revision-Date: 2020-03-17 21:40+0100\n" +"Last-Translator: Frisk <>\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: ../../..\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Poedit-SearchPath-0: rcgcdw.pot\n" + +#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 +#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 +#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 +msgid "unknown" +msgstr "inconnu" + +#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 +#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 +#: src/rc_formatters.py:75 src/rc_formatters.py:96 +msgid "Unregistered user" +msgstr "" + +#: src/discussion_formatters.py:39 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" +"{creatorId}>) dans {forumName}" + +#: src/discussion_formatters.py:42 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" +"{creatorId}>) dans {forumName}" + +#: src/discussion_formatters.py:45 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" +"{creatorId}>) dans {forumName}" + +#: src/discussion_formatters.py:54 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" +"[Réponse](<{url}f/p/{threadId}/r/{postId}>) de [{author}](<{url}f/u/" +"{creatorId}>) à [{title}](<{url}f/p/{threadId}>) dans {forumName}" + +#: src/discussion_formatters.py:61 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" +"Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" +"{creatorId}>) dans {forumName}" + +#: src/discussion_formatters.py:64 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" +"Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" +"{creatorId}>) dans {forumName}" + +#: src/discussion_formatters.py:72 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" +"[Réponse](<{url}f/p/{threadId}/r/{postId}>) de [{author}](<{url}f/u/" +"{creatorId}>) à [{title}](<{url}f/p/{threadId}>) dans {forumName}" + +#: src/discussion_formatters.py:78 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" +"[Réponse](<{url}f/p/{threadId}/r/{postId}>) de [{author}](<{url}f/u/" +"{creatorId}>) à [{title}](<{url}f/p/{threadId}>) dans {forumName}" + +#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" + +#: src/discussion_formatters.py:123 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "Création de {title}" + +#: src/discussion_formatters.py:127 +#, fuzzy, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "Création de {title}" + +#: src/discussion_formatters.py:134 +msgid "Option {}" +msgstr "" + +#: src/discussion_formatters.py:135 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: src/discussion_formatters.py:139 +#, fuzzy, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "Création de {title}" + +#: src/rc_formatters.py:1283 +msgid "Tags" +msgstr "Tags" + +#: src/discussion_formatters.py:155 +msgid "{} tags" +msgstr "" + +#: src/discussion_formatters.py:160 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "A répondu à « {title} »" + +#: src/discussion_formatters.py:169 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "Création de « {title} » sur le mur de {user}" + +#: src/discussion_formatters.py:173 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "Réponse à « {title} » sur le mur de {user}" + +#: src/discussion_formatters.py:180 +#, fuzzy, python-brace-format +msgid "Commented on {article}" +msgstr "Création de {title}" + +#: src/discussion_formatters.py:184 +#, fuzzy, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "A répondu à « {title} »" + +#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "" + +#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 +#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 +msgid "Report this on the support server" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "None" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Warning issued" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "**Blocked user**" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Tagged the edit" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Disallowed the action" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "**IP range blocked**" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Throttled actions" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Removed autoconfirmed group" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "**Removed from privileged groups**" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Edit" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Upload" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Move" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Stash upload" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Deletion" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Account creation" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Auto account creation" +msgstr "" + +#: src/rc_formatters.py:83 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 +#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 +#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 +#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 +#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 +#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 +#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 +#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 +#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 +msgid "Unknown" +msgstr "Inconnu" + +#: src/rc_formatters.py:116 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "Édition d'un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:118 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "Création d'une feuille de sprite pour {article}" + +#: src/rc_formatters.py:121 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: src/rc_formatters.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" +"[{author}]({author_url}) a rétabli une version de [{file}]({file_link})" +"{comment}" + +#: src/rc_formatters.py:132 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:135 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" + +#: src/rc_formatters.py:141 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: src/rc_formatters.py:147 src/rc_formatters.py:152 +msgid "without making a redirect" +msgstr "" + +#: src/rc_formatters.py:147 src/rc_formatters.py:153 +msgid "with a redirect" +msgstr "" + +#: src/rc_formatters.py:148 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: src/rc_formatters.py:154 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: src/rc_formatters.py:159 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: src/rc_formatters.py:170 src/rc_formatters.py:855 +#, fuzzy +msgid "for infinity and beyond" +msgstr "toujours" + +#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#, python-brace-format +msgid "for {num} {translated_length}" +msgstr "" + +#: src/rc_formatters.py:185 src/rc_formatters.py:867 +msgid "until {}" +msgstr "" + +#: src/rc_formatters.py:189 +msgid " on pages: " +msgstr " on pages: " + +#: src/rc_formatters.py:196 src/rc_formatters.py:881 +msgid " and namespaces: " +msgstr " et ces espaces de noms: " + +#: src/rc_formatters.py:198 +msgid " on namespaces: " +msgstr " on namespaces: " + +#: src/rc_formatters.py:210 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: src/rc_formatters.py:214 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: src/rc_formatters.py:218 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: src/rc_formatters.py:223 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +msgstr "Ajout d'un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:225 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile" +msgstr "Ajout d'un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:231 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile" +msgstr "Réponse à un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:237 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile" +msgstr "Réponse à un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:245 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" +msgstr "Édition d'un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:251 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" +msgstr "Édition d'un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:257 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +msgstr "" +"[{author}]({author_url}) a retiré un commentaire sur le profil de {target}." + +#: src/rc_formatters.py:259 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) purged a comment on their own profile" +msgstr "" +"[{author}]({author_url}) a retiré un commentaire sur le profil de {target}." + +#: src/rc_formatters.py:267 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" +msgstr "Édition d'un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:269 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" +msgstr "Édition d'un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:274 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "Retrait d'un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:281 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "Retrait d'un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 +#: src/rc_formatters.py:979 +msgid "none" +msgstr "aucun" + +#: src/rc_formatters.py:301 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) from {old_groups} to {new_groups}{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:303 +#, fuzzy, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) from {old_groups} to " +"{new_groups}{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:304 src/rc_formatters.py:965 +msgid "System" +msgstr "Système" + +#: src/rc_formatters.py:309 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 +#: src/rc_formatters.py:993 +msgid " [cascading]" +msgstr " [protection en cascade]" + +#: src/rc_formatters.py:316 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: src/rc_formatters.py:323 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "Création d'une feuille de sprite pour {article}" + +#: src/rc_formatters.py:327 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "Modification de la visibilité d'une révision de la page {article} " +msgstr[1] "" +"Modification de la visibilité de {amount} révisions sur la page {article} " + +#: src/rc_formatters.py:340 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "Modification des paramètres de blocage pour {blocked_user}" +msgstr[1] "Modification des paramètres de blocage pour {blocked_user}" + +#: src/rc_formatters.py:345 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:347 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: src/rc_formatters.py:359 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "Modification des paramètres de blocage pour {blocked_user}" +msgstr[1] "Modification des paramètres de blocage pour {blocked_user}" + +#: src/rc_formatters.py:364 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "Édition de la règle {number} du filtre anti-abus" + +#: src/rc_formatters.py:368 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "Édition de la règle {number} du filtre anti-abus" + +#: src/rc_formatters.py:372 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: src/rc_formatters.py:375 +#, fuzzy, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" + +#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#, fuzzy, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" + +#: src/rc_formatters.py:380 +#, fuzzy, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:383 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" + +#: src/rc_formatters.py:388 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "Retrait d'une entrée de la table interwiki" + +#: src/rc_formatters.py:394 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "Retrait d'une entrée de la table interwiki" + +#: src/rc_formatters.py:400 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +msgstr "Retrait d'une entrée de la table interwiki" + +#: src/rc_formatters.py:403 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:407 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:410 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "Création d'une feuille de sprite pour {article}" + +#: src/rc_formatters.py:413 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "Création d'une feuille de sprite pour {article}" + +#: src/rc_formatters.py:416 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "Création d'une feuille de sprite pour {article}" + +#: src/rc_formatters.py:421 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" + +#: src/rc_formatters.py:423 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" + +#: src/rc_formatters.py:428 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) a recréé le tableau Cargo « {table} »" + +#: src/rc_formatters.py:433 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) a remplacé le tableau cargo « {table} »" + +#: src/rc_formatters.py:436 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" + +#: src/rc_formatters.py:441 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" + +#: src/rc_formatters.py:443 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "Modification des paramètres de blocage pour {blocked_user}" +msgstr[1] "Modification des paramètres de blocage pour {blocked_user}" + +#: src/rc_formatters.py:449 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" + +#: src/rc_formatters.py:452 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) a recréé le tableau Cargo « {table} »" + +#: src/rc_formatters.py:454 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: src/rc_formatters.py:456 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: src/rc_formatters.py:459 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: src/rc_formatters.py:462 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:467 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" + +#: src/rc_formatters.py:473 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: src/rc_formatters.py:477 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: src/rc_formatters.py:481 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: src/rc_formatters.py:486 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: src/rc_formatters.py:491 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: src/rc_formatters.py:502 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:509 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: src/rc_formatters.py:516 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: src/rc_formatters.py:524 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: src/rc_formatters.py:532 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translatable page [{article}]" +"({article_url}){comment}" +msgstr "Création d'une feuille de sprite pour {article}" + +#: src/rc_formatters.py:540 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: src/rc_formatters.py:548 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:556 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: src/rc_formatters.py:564 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "Création d'une feuille de sprite pour {article}" + +#: src/rc_formatters.py:571 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:581 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: src/rc_formatters.py:587 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: src/rc_formatters.py:593 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "Création d'une feuille de sprite pour {article}" + +#: src/rc_formatters.py:600 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:607 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "Création d'une feuille de sprite pour {article}" + +#: src/rc_formatters.py:619 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:627 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:634 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 +#: src/rc_formatters.py:1241 +msgid "(default)" +msgstr "" + +#: src/rc_formatters.py:647 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:656 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" +msgstr[1] "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" + +#: src/rc_formatters.py:661 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" + +#: src/rc_formatters.py:665 +#, fuzzy +msgid "An action has been hidden by administration." +msgstr "L'action a été masquée par le personnel de Gamepedia." + +#: src/rc_formatters.py:681 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: src/rc_formatters.py:682 +msgid "Performed" +msgstr "" + +#: src/rc_formatters.py:683 +msgid "Action taken" +msgstr "" + +#: src/rc_formatters.py:684 +msgid "Title" +msgstr "" + +#: src/rc_formatters.py:693 src/rc_formatters.py:980 +msgid "No description provided" +msgstr "Aucune description" + +#: src/rc_formatters.py:717 +msgid "(N!) " +msgstr "(N!) " + +#: src/rc_formatters.py:718 +msgid "m" +msgstr "m" + +#: src/rc_formatters.py:718 +msgid "b" +msgstr "b" + +#: src/rc_formatters.py:735 src/rc_formatters.py:740 +msgid "__Only whitespace__" +msgstr "__Espaces uniquement__" + +#: src/rc_formatters.py:745 +msgid "Removed" +msgstr "Retirés" + +#: src/rc_formatters.py:747 +msgid "Added" +msgstr "Ajoutés" + +#: src/rc_formatters.py:781 src/rc_formatters.py:820 +msgid "Options" +msgstr "Options" + +#: src/rc_formatters.py:781 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([Aperçu]({link}) | [Annuler]({undolink}))" + +#: src/rc_formatters.py:786 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "Téléversement d'une nouvelle version de {name}" + +#: src/rc_formatters.py:788 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "Rétablissement d'une version de {name}" + +#: src/rc_formatters.py:790 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "Téléversement de {name}" + +#: src/rc_formatters.py:806 +msgid "**No license!**" +msgstr "**Aucune license!**" + +#: src/rc_formatters.py:818 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"License: {}" + +#: src/rc_formatters.py:820 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([Aperçu]({link}))" + +#: src/rc_formatters.py:825 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "Suppression de la page {article}" + +#: src/rc_formatters.py:830 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "Suppression par écrasement de la redirection {article}" + +#: src/rc_formatters.py:836 +msgid "No redirect has been made" +msgstr "Aucune redirection créée" + +#: src/rc_formatters.py:837 +msgid "A redirect has been made" +msgstr "Une redirection a été créée" + +#: src/rc_formatters.py:838 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "Déplacement de {redirect}{article} vers {target}" + +#: src/rc_formatters.py:841 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "Déplacement de {redirect}{article} vers {title} par redirection" + +#: src/rc_formatters.py:845 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: src/rc_formatters.py:869 +msgid "unknown expiry time" +msgstr "" + +#: src/rc_formatters.py:874 +msgid "Blocked from editing the following pages: " +msgstr "Ne peut plus modifier les pages suivantes : " + +#: src/rc_formatters.py:883 +msgid "Blocked from editing pages on following namespaces: " +msgstr "Ne peut plus modifier les pages des espaces de noms suivants : " + +#: src/rc_formatters.py:894 +msgid "Partial block details" +msgstr "Détails partiaux du blocage" + +#: src/rc_formatters.py:895 +#, fuzzy, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "{blocked_user} a été bloqué pour {time}" + +#: src/rc_formatters.py:899 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: src/rc_formatters.py:903 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "{blocked_user} a été débloqué" + +#: src/rc_formatters.py:910 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "Ajout d'un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:912 +msgid "Left a comment on their own profile" +msgstr "Ajout d'un commentaire sur son propre profil" + +#: src/rc_formatters.py:919 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "Réponse à un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:921 +msgid "Replied to a comment on their own profile" +msgstr "Réponse à un commentaire sur son propre profil" + +#: src/rc_formatters.py:928 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "Édition d'un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:930 +msgid "Edited a comment on their own profile" +msgstr "Modification d'un commentaire sur son propre profil" + +#: src/rc_formatters.py:935 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "Modification du profil de {target}" + +#: src/rc_formatters.py:937 +msgid "Edited their own profile" +msgstr "Modification de son propre profil" + +#: src/rc_formatters.py:939 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "" + +#: src/rc_formatters.py:941 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "{field} modifié pour: {desc}" + +#: src/rc_formatters.py:946 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "Retrait d'un commentaire sur le profil de {target}." + +#: src/rc_formatters.py:948 +#, fuzzy +msgid "Purged a comment on their own profile" +msgstr "Modification d'un commentaire sur son propre profil" + +#: src/rc_formatters.py:956 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "Retrait d'un commentaire sur le profil de {target}" + +#: src/rc_formatters.py:958 +#, fuzzy +msgid "Deleted a comment on their own profile" +msgstr "Modification d'un commentaire sur son propre profil" + +#: src/rc_formatters.py:962 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "Modification des groupes pour {target}" + +#: src/rc_formatters.py:966 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} a été auto-promu dans un nouveau groupe" + +#: src/rc_formatters.py:981 +#, python-brace-format +msgid "Groups changed from {old_groups} to {new_groups}{reason}" +msgstr "Groupe modifié de {old_groups} vers {new_groups}{reason}" + +#: src/rc_formatters.py:985 +#, python-brace-format +msgid "Protected {target}" +msgstr "Protection de {target}" + +#: src/rc_formatters.py:991 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "Modification du niveau de protection de {article}" + +#: src/rc_formatters.py:997 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "Retrait de la protection de {article}" + +#: src/rc_formatters.py:1001 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "Modification de la visibilité d'une révision de la page {article} " +msgstr[1] "" +"Modification de la visibilité de {amount} révisions sur la page {article} " + +#: src/rc_formatters.py:1013 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "Article {article} importé avec {count} révision" +msgstr[1] "Article {article} importé avec {count} révisions" + +#: src/rc_formatters.py:1018 +#, python-brace-format +msgid "Restored {article}" +msgstr "Restauration de {article}" + +#: src/rc_formatters.py:1021 +msgid "Changed visibility of log events" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: src/rc_formatters.py:1031 +#, fuzzy, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "Article {article} importé avec {count} révision" +msgstr[1] "Article {article} importé avec {count} révisions" + +#: src/rc_formatters.py:1036 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "Édition de la règle {number} du filtre anti-abus" + +#: src/rc_formatters.py:1039 +#, fuzzy, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "Édition de la règle {number} du filtre anti-abus" + +#: src/rc_formatters.py:1042 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "Fusion de l'historique de {article} vers {dest}" + +#: src/rc_formatters.py:1046 +msgid "Created account automatically" +msgstr "" + +#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 +msgid "Created account" +msgstr "" + +#: src/rc_formatters.py:1052 +#, fuzzy, python-brace-format +msgid "Created account {article}" +msgstr "Suppression de la page {article}" + +#: src/rc_formatters.py:1055 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" + +#: src/rc_formatters.py:1061 +msgid "Added an entry to the interwiki table" +msgstr "Ajout d'une entrée à la table interwiki" + +#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Préfixe: {prefix}, site: {website} | {desc}" + +#: src/rc_formatters.py:1067 +msgid "Edited an entry in interwiki table" +msgstr "Modification d'une entrée de la table interwiki" + +#: src/rc_formatters.py:1073 +msgid "Deleted an entry in interwiki table" +msgstr "Retrait d'une entrée de la table interwiki" + +#: src/rc_formatters.py:1074 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Préfixe: {prefix} | {desc}" + +#: src/rc_formatters.py:1077 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "Modification du modèle de contenu de l'article {article}" + +#: src/rc_formatters.py:1078 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "Modèle changé de {old} à {new}: {reason}" + +#: src/rc_formatters.py:1083 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: src/rc_formatters.py:1084 +#, fuzzy, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "Modèle changé de {old} à {new}: {reason}" + +#: src/rc_formatters.py:1087 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "Édition du sprite de {article}" + +#: src/rc_formatters.py:1090 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "Création d'une feuille de sprite pour {article}" + +#: src/rc_formatters.py:1093 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "Edited the slice for {article}" + +#: src/rc_formatters.py:1099 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "Création du tableau Cargo « {table} »" + +#: src/rc_formatters.py:1103 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "Suppression du tableau Cargo « {table} »" + +#: src/rc_formatters.py:1110 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "Recréation du tableau Cargo « {table} »" + +#: src/rc_formatters.py:1117 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "Remplacement du tableau Cargo « {table} »" + +#: src/rc_formatters.py:1121 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "Création du tag « {tag} »" + +#: src/rc_formatters.py:1125 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "Suppression du tag « {tag} »" + +#: src/rc_formatters.py:1127 +#, fuzzy +msgid "Removed from" +msgstr "Retirés" + +#: src/rc_formatters.py:1127 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:1131 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "Activation du tag « {tag} »" + +#: src/rc_formatters.py:1134 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "Désactivation du tag « {tag} »" + +#: src/rc_formatters.py:1137 +msgid "Changed wiki settings" +msgstr "" + +#: src/rc_formatters.py:1141 +#, fuzzy, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "Suppression du tag « {tag} »" + +#: src/rc_formatters.py:1144 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: src/rc_formatters.py:1147 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 +msgid "Wiki" +msgstr "" + +#: src/rc_formatters.py:1151 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "" + +#: src/rc_formatters.py:1157 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "" + +#: src/rc_formatters.py:1160 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "Suppression du tag « {tag} »" + +#: src/rc_formatters.py:1163 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "" + +#: src/rc_formatters.py:1166 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "" + +#: src/rc_formatters.py:1169 +#, fuzzy, python-brace-format +msgid "Deleted {file} dump" +msgstr "Suppression de la page {article}" + +#: src/rc_formatters.py:1177 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: src/rc_formatters.py:1180 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: src/rc_formatters.py:1183 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1186 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1189 +#, python-brace-format +msgid "Completed deletion of translatable page \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1192 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1195 +#, fuzzy, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: src/rc_formatters.py:1198 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1201 +#, fuzzy, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "Retrait de la protection de {article}" + +#: src/rc_formatters.py:1204 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1210 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: src/rc_formatters.py:1212 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: src/rc_formatters.py:1214 +#, fuzzy, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "Retrait de la protection de {article}" + +#: src/rc_formatters.py:1217 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: src/rc_formatters.py:1220 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: src/rc_formatters.py:1227 +#, fuzzy, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "Retrait de la protection de {article}" + +#: src/rc_formatters.py:1230 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1232 +msgid "Old state" +msgstr "" + +#: src/rc_formatters.py:1233 +msgid "New state" +msgstr "" + +#: src/rc_formatters.py:1242 +#, fuzzy, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "Retrait de la protection de {article}" + +#: src/rc_formatters.py:1243 +msgid "Old language" +msgstr "" + +#: src/rc_formatters.py:1244 +msgid "New language" +msgstr "" + +#: src/rc_formatters.py:1248 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:1250 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: src/rc_formatters.py:1254 +#, fuzzy +msgid "Action has been hidden by administration" +msgstr "L'action a été masquée par le personnel de Gamepedia." + +#: src/rc_formatters.py:1288 +msgid "**Added**: " +msgstr "**Ajoutées : ** " + +#: src/rc_formatters.py:1288 +msgid " and {} more\n" +msgstr " et {} autres\n" + +#: src/rc_formatters.py:1289 +msgid "**Removed**: " +msgstr "**Retirées : ** " + +#: src/rc_formatters.py:1289 +msgid " and {} more" +msgstr " et {} autres" + +#: src/rc_formatters.py:1290 +msgid "Changed categories" +msgstr "Catégories modifiées" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" +#~ msgstr "Modification de la visibilité d'évènements des journaux" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on {target}'s profile" +#~ msgstr "Retrait d'un commentaire sur le profil de {target}" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on their own profile" +#~ msgstr "Retrait d'un commentaire sur le profil de {target}" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) imported interwiki{comment}" +#~ msgstr "Modification de la visibilité d'évènements des journaux" + +#~ msgid "Imported interwiki" +#~ msgstr "Importation d'interwiki" + +#, fuzzy +#~ msgid "their own profile" +#~ msgstr "Modification de son propre profil" + +#, fuzzy +#~ msgid "their own" +#~ msgstr "Modification de son propre profil" diff --git a/locale/hi/LC_MESSAGES/formatters.po b/locale/hi/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..0a13e06 --- /dev/null +++ b/locale/hi/LC_MESSAGES/formatters.po @@ -0,0 +1,1723 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDw package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"PO-Revision-Date: 2020-12-13 14:30+0000\n" +"Last-Translator: MarkusRost \n" +"Language-Team: Hindi \n" +"Language: hi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.2.1\n" +"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"PO-Revision-Date: 2020-12-30 13:26+0000\n" +"Last-Translator: Creeper \n" +"Language-Team: Hindi \n" +"Language: hi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.2.1\n" + +#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 +#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 +#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 +msgid "unknown" +msgstr "अनजान" + +#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 +#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 +#: src/rc_formatters.py:75 src/rc_formatters.py:96 +msgid "Unregistered user" +msgstr "अनरेजिसटर्ड सदस्य" + +#: src/discussion_formatters.py:39 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) ने {forumName} में [{title}](<{url}f/p/{threadId}>) " +"बनाया" + +#: src/discussion_formatters.py:42 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) ने {forumName} में पॉल [{title}](<{url}f/p/{threadId}" +">) बनाया" + +#: src/discussion_formatters.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) ने {forumName} में क्विज़ [{title}](<{url}f/p/{threadId}" +">) बनाया" + +#: src/discussion_formatters.py:54 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" +"[{author}]({author_url}) ने {forumName} में [{title}](<{url}f/p/{threadId}>) पर " +"[जवाब](<{url}f/p/{threadId}/r/{postId}>) दिया" + +#: src/discussion_formatters.py:61 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) ने [{user} के मैसेज वॉल](<{url}wiki/Message_Wall:" +"{user_wall}>) पर [{title}](<{url}wiki/Message_Wall:{user_wall}?" +"threadId={threadId}>) बनाया" + +#: src/discussion_formatters.py:64 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) ने [{user} के मैसेज वॉल](<{url}wiki/Message_Wall:" +"{user_wall}>) के [{title}](<{url}wiki/Message_Wall:{user_wall}?" +"threadId={threadId}>) पर [जवाब](<{url}wiki/Message_Wall:{user_wall}?" +"threadId={threadId}#{replyId}>) दिया" + +#: src/discussion_formatters.py:72 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) ने [{article}](<{url}>) पर [कमेंट](<{url}?" +"commentId={commentId}>) किया" + +#: src/discussion_formatters.py:78 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) ने [{article}](<{url}>) के एक [कमेंट](<{url}?" +"commentId={commentId}>) पर [जवाब](<{url}?commentId={commentId}" +"&replyId={replyId}>) दिया" + +#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#, fuzzy, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" +"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) द्वारा अनजान घटना `{event}`, [सहायता सर्वर](<{support}" +">) पर रिपोर्ट करें।\n" +"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) द्वारा अनजान घटना `{event}`, इसे [सहायता सर्वर]" +"(<{support}>) पर रिपोर्ट करें।" + +#: src/discussion_formatters.py:123 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "\"{title}\" बनाया" + +#: src/discussion_formatters.py:127 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "पॉल \"{title}\" बनाया" + +#: src/discussion_formatters.py:134 +msgid "Option {}" +msgstr "विकल्प {}" + +#: src/discussion_formatters.py:135 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[चित्र देखें]({image_url})__" + +#: src/discussion_formatters.py:139 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "एक क्विज़ \"{title}\" बनाया" + +#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 +#: src/rc_formatters.py:1283 +msgid "Tags" +msgstr "टैग" + +#: src/discussion_formatters.py:155 +msgid "{} tags" +msgstr "{} टैग" + +#: src/discussion_formatters.py:160 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "\"{title}\" पर जवाब दिया" + +#: src/discussion_formatters.py:169 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "{user} के मैसेज वॉल पर \"{title}\" बनाया" + +#: src/discussion_formatters.py:173 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "{user} के मैसेज वॉल के \"{title}\" पर जवाब दिया" + +#: src/discussion_formatters.py:180 +#, python-brace-format +msgid "Commented on {article}" +msgstr "{article} पर कमेंट किया" + +#: src/discussion_formatters.py:184 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "{article} के एक कमेंट पर जवाब दिया" + +#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "अनजान घटना `{event}`" + +#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 +#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 +msgid "Report this on the support server" +msgstr "इसे सहायता सर्वर पर रिपोर्ट करें" + +#: src/rc_formatters.py:28 +msgid "None" +msgstr "कुछ नहीं" + +#: src/rc_formatters.py:28 +msgid "Warning issued" +msgstr "सूचना दे दी गई है" + +#: src/rc_formatters.py:28 +msgid "**Blocked user**" +msgstr "**ब्लॉक्ड सदस्य**" + +#: src/rc_formatters.py:28 +msgid "Tagged the edit" +msgstr "सम्पादना को टैग कर दिया है" + +#: src/rc_formatters.py:28 +msgid "Disallowed the action" +msgstr "काम को मना कर दिया" + +#: src/rc_formatters.py:28 +msgid "**IP range blocked**" +msgstr "**IP रेंज ब्लॉक्ड है**" + +#: src/rc_formatters.py:28 +msgid "Throttled actions" +msgstr "थ्रॉटल किए गए काम" + +#: src/rc_formatters.py:28 +msgid "Removed autoconfirmed group" +msgstr "ऑटोकन्फर्म्ड ग्रुप हटा दिया गया है" + +#: src/rc_formatters.py:28 +msgid "**Removed from privileged groups**" +msgstr "**प्रिविलेज वाले ग्रुपों से हटा दिया गया है**" + +#: src/rc_formatters.py:29 +msgid "Edit" +msgstr "सम्पादना" + +#: src/rc_formatters.py:29 +msgid "Upload" +msgstr "अपलोड" + +#: src/rc_formatters.py:29 +msgid "Move" +msgstr "मूव" + +#: src/rc_formatters.py:29 +msgid "Stash upload" +msgstr "स्टैश अपलोड" + +#: src/rc_formatters.py:29 +msgid "Deletion" +msgstr "डिलीशन" + +#: src/rc_formatters.py:29 +msgid "Account creation" +msgstr "अकाउंट सृष्टि" + +#: src/rc_formatters.py:29 +msgid "Auto account creation" +msgstr "ऑटो अकाउंट सृष्टि" + +#: src/rc_formatters.py:83 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" +"[{author}]({author_url}) ने *[{target}]({target_url})* पर ऐक्शन \"{action}\" " +"लेते हुए *{abuse_filter}* को ट्रिगर किया - लिया गया ऐक्शन: {result}।" + +#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 +#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 +#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 +#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 +#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 +#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 +#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 +#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 +#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 +msgid "Unknown" +msgstr "अनजान" + +#: src/rc_formatters.py:116 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({edit_link}){comment} ({bold}({sign}" +"{edit_size}){bold} को सम्पादित किया" + +#: src/rc_formatters.py:118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({edit_link}){comment} {bold}({sign}" +"{edit_size}){bold} बनाया" + +#: src/rc_formatters.py:121 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{file}]({file_link}){comment} को अपलोड किया" + +#: src/rc_formatters.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{file}]({file_link}){comment} के एक संसकरण को " +"रिवर्ट किया" + +#: src/rc_formatters.py:132 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) ने [{file}]({file_link}){comment} के एक नए संसकरण को " +"अपलोड किया" + +#: src/rc_formatters.py:135 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{page}]({page_link}){comment} को डिलीट किया" + +#: src/rc_formatters.py:141 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{page}]({page_link}){comment} को ओवर्राइट करके " +"रेडिरेक्ट को डिलीट किया" + +#: src/rc_formatters.py:147 src/rc_formatters.py:152 +msgid "without making a redirect" +msgstr "बिना रेडिरेक्ट छोड़े" + +#: src/rc_formatters.py:147 src/rc_formatters.py:153 +msgid "with a redirect" +msgstr "रेडिरेक्ट छोड़कर" + +#: src/rc_formatters.py:148 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) ने {redirect}*{article}* को [{target}]({target_url}) " +"पर {made_a_redirect} मूव किया{comment}" + +#: src/rc_formatters.py:154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) ने {redirect}*{article}* को रेडिरेक्ट के साथ [{target}]" +"({target_url}) {made_a_redirect}{comment} पर मूव किया" + +#: src/rc_formatters.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने प्रॉटेक्शन सेटिंगस को {redirect}*{article}* से " +"[{target}]({target_url}){comment} पर मूव किया" + +#: src/rc_formatters.py:170 src/rc_formatters.py:855 +msgid "for infinity and beyond" +msgstr "अनंत और इसके परे तक" + +#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#, python-brace-format +msgid "for {num} {translated_length}" +msgstr "{num} {translated_length} के लिए" + +#: src/rc_formatters.py:185 src/rc_formatters.py:867 +msgid "until {}" +msgstr "{} के लिए" + +#: src/rc_formatters.py:189 +msgid " on pages: " +msgstr " इन पृष्ठों पर: " + +#: src/rc_formatters.py:196 src/rc_formatters.py:881 +msgid " and namespaces: " +msgstr " और इन नेमस्पेसों पर: " + +#: src/rc_formatters.py:198 +msgid " on namespaces: " +msgstr " इन नेमस्पेसों पर: " + +#: src/rc_formatters.py:210 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) ने [{user}]({user_url}) {time}{restriction_desc} को " +"ब्लॉक किया{comment}" + +#: src/rc_formatters.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{blocked_user}]({user_url}) के ब्लॉक सेटिंगस को " +"बदला{comment}" + +#: src/rc_formatters.py:218 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{blocked_user}]({user_url}) को अनब्लॉक " +"किया{comment}" + +#: src/rc_formatters.py:223 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) ने {target} के प्रॉफाइल पर एक [कमेंट]({comment}) छोड़ा" + +#: src/rc_formatters.py:225 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile" +msgstr "[{author}]({author_url}) ने अपने प्रॉफाइल पर एक [कमेंट]({comment}) छोड़ा" + +#: src/rc_formatters.py:231 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile" +msgstr "" +"[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) पर जवाब " +"दिया" + +#: src/rc_formatters.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile" +msgstr "" +"[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) पर जवाब दिया" + +#: src/rc_formatters.py:245 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) पर जवाब " +"दिया" + +#: src/rc_formatters.py:251 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) को सम्पादित किया" + +#: src/rc_formatters.py:257 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +msgstr "[{author}]({author_url}) ने {target} के प्रॉफाइल के एक कमेंट को पर्ज किया" + +#: src/rc_formatters.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on their own profile" +msgstr "[{author}]({author_url}) ने अपने प्रॉफाइल के एक कमेंट को पर्ज किया" + +#: src/rc_formatters.py:267 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) को डिलीट " +"किया" + +#: src/rc_formatters.py:269 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) को डिलीट किया" + +#: src/rc_formatters.py:274 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) ने [{target}]({target_url}) के प्रॉफाइल पर {field} को " +"सम्पादित किया। *({desc})*" + +#: src/rc_formatters.py:281 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) ने [अपने]({target_url}) प्रॉफाइल पर {field} को सम्पादित " +"किया। *({desc})*" + +#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 +#: src/rc_formatters.py:979 +msgid "none" +msgstr "कुछ नहीं" + +#: src/rc_formatters.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) from {old_groups} to {new_groups}{comment}" +msgstr "" +"[{author}]({author_url}) ने [{target}]({target_url}) के लिए ग्रुप {old_groups} से " +"{new_groups} में बदला{comment}" + +#: src/rc_formatters.py:303 +#, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) from {old_groups} to " +"{new_groups}{comment}" +msgstr "" +"{author} ने [{target}]({target_url}) को {old_groups} से {new_groups} में " +"ऑटोप्रमोट किया{comment}" + +#: src/rc_formatters.py:304 src/rc_formatters.py:965 +msgid "System" +msgstr "सिस्टम" + +#: src/rc_formatters.py:309 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) को इन सेटिंग्स के साथ " +"प्रॉटेक्ट किया: {settings}{comment}" + +#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 +#: src/rc_formatters.py:993 +msgid " [cascading]" +msgstr " [कैस्केडिंग]" + +#: src/rc_formatters.py:316 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) के प्रॉटेक्शन सेटिंग्स को इसमें " +"मॉडिफाइ किया: {settings}{comment}" + +#: src/rc_formatters.py:323 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) से प्रॉटेक्शन हटा " +"दिया{comment}" + +#: src/rc_formatters.py:327 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) ने [{article}]({article_url}) पर रिवीशन के दृश्यता को " +"बदल दिया{comment}" +msgstr[1] "" +"[{author}]({author_url}) ने [{article}]({article_url}) पर {amount} रिवीशनों के " +"दृश्यता को बदल दिया{comment}" + +#: src/rc_formatters.py:340 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" +"[{author}]({author_url}) ने [{article}]({article_url}) को {count} रिवीशन के " +"साथ ({article_url}) इम्पोर्ट किया{comment}" +msgstr[1] "" +"[{author}]({author_url}) ने [{article}]({article_url}) को {count} रिवीशनों के " +"साथ ({article_url}) इम्पोर्ट किया{comment}" + +#: src/rc_formatters.py:345 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) को रिस्टोर किया{comment}" + +#: src/rc_formatters.py:347 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "[{author}]({author_url}) ने लॉग घटनाओं के दृश्यता को बदल दिया{comment}" + +#: src/rc_formatters.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) ने [{source}]({source_url}) से [{article}]" +"({article_url}) को {count} रिवीशन के साथ ({article_url}) इम्पोर्ट किया{comment}" +msgstr[1] "" +"[{author}]({author_url}) ने [{source}]({source_url}) से [{article}]" +"({article_url}) को {count} रिवीशनों के साथ ({article_url}) इम्पोर्ट किया{comment}" + +#: src/rc_formatters.py:364 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) ने अब्यूज़ फिल्टर [संख्या {number}]({filter_url}) को " +"सम्पादित किया" + +#: src/rc_formatters.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) ने अब्यूज़ फिल्टर [संख्या {number}]({filter_url}) बनाया" + +#: src/rc_formatters.py:372 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) के रिवीशन इतिहास को " +"[{dest}]({dest_url}) में मर्ज किया{comment}" + +#: src/rc_formatters.py:375 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "अकाउंट [{author}]({author_url}) अपने आप बना है" + +#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "अकाउंट [{author}]({author_url}) को बनाया गया है" + +#: src/rc_formatters.py:380 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" +"अकाउंट [{article}]({article_url}) [{author}]({author_url}) द्वारा बनाया गया " +"है{comment}" + +#: src/rc_formatters.py:383 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" +"अकाउंट [{article}]({article_url}) [{author}]({author_url}) द्वारा बनाया गया है " +"और पासवर्ड ईमेल के ज़रिये भेजा गया है{comment}" + +#: src/rc_formatters.py:388 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) ने {prefix} उपसर्ग के साथ {website} की तरफ इशारा करने " +"वाले [इंटरविकी टेबल]({table_url}) में एक एंट्री जोड़ा" + +#: src/rc_formatters.py:394 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) ने {prefix} उपसर्ग के साथ {website} की तरफ इशारा करने " +"वाले [इंटरविकी टेबल]({table_url}) में एक एंट्री को सम्पादित किया" + +#: src/rc_formatters.py:400 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +msgstr "" +"[{author}]({author_url}) ने [इंटरविकी टेबल]({table_url}) पर एक एंट्री को डिलीट " +"किया" + +#: src/rc_formatters.py:403 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" +"[{author}]({author_url}) ने पृष्ठ [{article}]({article_url}) के कंटेंट मॉडल को " +"{old} से {new} में बदला{comment}" + +#: src/rc_formatters.py:407 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" +"[{author}]({author_url}) ने पृष्ठ [{article}]({article_url}) को गैर-डिफ़ॉल्ट कंटेंट " +"मॉडल की मदद से बनाया {new}{comment}" + +#: src/rc_formatters.py:410 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) [{article}]({article_url}) के स्प्राइट को सम्पादित किया" + +#: src/rc_formatters.py:413 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) के लिए स्प्राइट शीट बनाया" + +#: src/rc_formatters.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) के स्लाइस को सम्पादित किया" + +#: src/rc_formatters.py:421 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) ने कीर्गो टेबल \"{table}\" बनाया" + +#: src/rc_formatters.py:423 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) ने कार्गो टेबल \"{table}\" को डिलीट किया" + +#: src/rc_formatters.py:428 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) ने कार्गो टेबल \"{table}\" को फिर से बनाया" + +#: src/rc_formatters.py:433 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) ने कार्गो टेबल \"{table}\" को बदल दिया" + +#: src/rc_formatters.py:436 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" बनाया" + +#: src/rc_formatters.py:441 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिलीट किया" + +#: src/rc_formatters.py:443 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +"[{author}]({author_url}) ने [{article}]({article_url}) को {count} रिवीशन के " +"साथ ({article_url}) इम्पोर्ट किया{comment}" +msgstr[1] "" +"[{author}]({author_url}) ने [{article}]({article_url}) को {count} रिवीशनों के " +"साथ ({article_url}) इम्पोर्ट किया{comment}" + +#: src/rc_formatters.py:449 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को ऐक्टिवेट किया" + +#: src/rc_formatters.py:452 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" +"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिऐक्टिवेट किया" + +#: src/rc_formatters.py:454 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) ने विकी सेटिंग्स को बदला{reason}" + +#: src/rc_formatters.py:456 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* को डिलीट किया{comment}" + +#: src/rc_formatters.py:459 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* के लॉक किया{comment}" + +#: src/rc_formatters.py:462 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) ने *{wiki_name}* पर एक नेमस्पेस *{namespace_name}* को " +"मॉडिफाइ किया{comment}" + +#: src/rc_formatters.py:467 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) ने *{wiki_name}* पर नेमस्पेस *{namespace_name}* को " +"डिलीट किया{comment}" + +#: src/rc_formatters.py:473 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" +"[{author}]({author_url}) ने यूज़र ग्रुप *{group_name}* को मॉडिफाइ किया{comment}" + +#: src/rc_formatters.py:477 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* को डिलीट किया{comment}" + +#: src/rc_formatters.py:481 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) ने एक विकी *{wiki_name}* को अनलॉक किया{comment}" + +#: src/rc_formatters.py:486 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "[{author}]({author_url}) ने *{file}* डंप जनरेट किया{comment}" + +#: src/rc_formatters.py:491 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "[{author}]({author_url}) *{file}* डंप को डिलीट किया{comment}" + +#: src/rc_formatters.py:502 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) को अनुवाद के लिए मार्क " +"किया{comment}" + +#: src/rc_formatters.py:509 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" +"[{author}]({author_url}) ने अनुवाद सिस्टम से [{article}]({article_url}) को " +"हटाया{comment}" + +#: src/rc_formatters.py:516 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने *{article}* से [{target}]({target_url}) पर अनुवाद " +"पृष्ठ को लाना ख़त्म किया{comment}" + +#: src/rc_formatters.py:524 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) को [{target}]" +"({target_url}) पर लाते वक्त मुश्किलें पाई{comment}" + +#: src/rc_formatters.py:532 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translatable page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने अनुवाद लायक पृष्ठ [{article}]({article_url}) के " +"डिलीशन को पूरा किया{comment}" + +#: src/rc_formatters.py:540 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) [{article}]({article_url}) को डिलीट न कर पाए, जो " +"अनुवाद-लायक पृष्ठ [{target}]({target_url}) का है{comment}" + +#: src/rc_formatters.py:548 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने अनुवाद पृष्ठ [{article}]({article_url}) के डिलीशन को " +"पूरा किया{comment}" + +#: src/rc_formatters.py:556 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) [{article}]({article_url}) को डिलीट न कर पाए, जो " +"अनुवाद पृष्ठ [{target}]({target_url}) का है{comment}" + +#: src/rc_formatters.py:564 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) [{article}]({article_url}) को अनुवाद करने का बढ़ावा " +"दिया{comment}" + +#: src/rc_formatters.py:571 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) के अनुवाद के बढ़ावे को कम " +"किया{comment}" + +#: src/rc_formatters.py:581 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) के भाषाओं को `{languages}" +"` तक सीमित किया{comment}" + +#: src/rc_formatters.py:587 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) के मुख्य भाषाओं को " +"`{languages}` में सेट किया{comment}" + +#: src/rc_formatters.py:593 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) से मुख्य भाषाओं को " +"हटाया{comment}" + +#: src/rc_formatters.py:600 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) ने अनुवाद-लायक पृष्ठ [{article}]({article_url}) को " +"एग्रीगेट ग्रुप \"{group}\" में डाला{comment}" + +#: src/rc_formatters.py:607 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) ने अनुवाद-लायक [{article}]({article_url}) को एग्रीगेट " +"ग्रुप \"{group}\" से हटाया{comment}" + +#: src/rc_formatters.py:619 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) ने अनुवाद [{article}]({article_url}) को रिव्यु " +"किया{comment}" + +#: src/rc_formatters.py:627 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) ने पृष्ठ [{article}]({article_url}) के `{language}` के " +"स्थिति को `{old_state}` से `{new_state}` में बदला{comment}" + +#: src/rc_formatters.py:634 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) ने पृष्ठ [{article}]({article_url}) के `{language}` " +"अनुवादों को `{new_state}` में बदला{comment}" + +#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 +#: src/rc_formatters.py:1241 +msgid "(default)" +msgstr "(डिफ़ॉल्ट)" + +#: src/rc_formatters.py:647 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" +"[{author}]({author_url}) [{article}]({article_url}) के भाषा को {old_lang} से " +"{new_lang} में बदला{comment}" + +#: src/rc_formatters.py:656 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" +"[{author}]({author_url}) ने {edits} सम्पादना वाले सदस्य *{old_name}* को " +"[{new_name}]({link}) में रीनेम किया{comment}" +msgstr[1] "" +"[{author}]({author_url}) ने {edits} सम्पादनाओं वाले सदस्य *{old_name}* को " +"[{new_name}]({link}) में रीनेम किया{comment}" + +#: src/rc_formatters.py:661 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) ने सदस्य *{old_name}* को [{new_name}]({link}) में रीनेम " +"किया{comment}" + +#: src/rc_formatters.py:665 +msgid "An action has been hidden by administration." +msgstr "एक ऐक्शन ऐडमिनिस्ट्रेशन द्वारा छिपाया गया है।" + +#: src/rc_formatters.py:681 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "{user} ने \"{abuse_filter}\" को ट्रिगर किया" + +#: src/rc_formatters.py:682 +msgid "Performed" +msgstr "ऐक्शन" + +#: src/rc_formatters.py:683 +msgid "Action taken" +msgstr "लिया गया ऐक्शन" + +#: src/rc_formatters.py:684 +msgid "Title" +msgstr "शीर्षक" + +#: src/rc_formatters.py:693 src/rc_formatters.py:980 +msgid "No description provided" +msgstr "कोई विवरण नहीं दिया गया" + +#: src/rc_formatters.py:717 +msgid "(N!) " +msgstr "(न!) " + +#: src/rc_formatters.py:718 +msgid "m" +msgstr "छो" + +#: src/rc_formatters.py:718 +msgid "b" +msgstr "बॉ" + +#: src/rc_formatters.py:735 src/rc_formatters.py:740 +msgid "__Only whitespace__" +msgstr "__सिर्फ वाइटस्पेस__" + +#: src/rc_formatters.py:745 +msgid "Removed" +msgstr "हटाया गया" + +#: src/rc_formatters.py:747 +msgid "Added" +msgstr "जोड़ा" + +#: src/rc_formatters.py:781 src/rc_formatters.py:820 +msgid "Options" +msgstr "विकल्प" + +#: src/rc_formatters.py:781 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([पूर्वावलोकन]({link}) | [पूर्ववत करें]({undolink}))" + +#: src/rc_formatters.py:786 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "{name} के एक नए संसकरण को अपलोड किया" + +#: src/rc_formatters.py:788 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "{name} के एक संसकरण को पूर्ववत किया" + +#: src/rc_formatters.py:790 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "{name} को अपलोड किया" + +#: src/rc_formatters.py:806 +msgid "**No license!**" +msgstr "**कोई लाइसेंस नहीं है!**" + +#: src/rc_formatters.py:818 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"लाइसेंस: {}" + +#: src/rc_formatters.py:820 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([पूर्वावलोकन]({link}))" + +#: src/rc_formatters.py:825 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "पृष्ठ {article} को डिलीट किया" + +#: src/rc_formatters.py:830 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "ओवर्राइट करके रेडिरेक्ट {article} को डिलीट किया" + +#: src/rc_formatters.py:836 +msgid "No redirect has been made" +msgstr "कोई रेडिरेक्ट नहीं बनाया गया" + +#: src/rc_formatters.py:837 +msgid "A redirect has been made" +msgstr "एक रेडिरेक्ट बनाया गया है" + +#: src/rc_formatters.py:838 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "{redirect}{article} को {target} पर ले जाया गया है" + +#: src/rc_formatters.py:841 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "{redirect}{article} को रेडिरेक्ट के साथ {title} पर ले जाया गया है" + +#: src/rc_formatters.py:845 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "प्रॉटेक्शन सेटिंग्स को {redirect}{article} से {title} पर ले जाया गया" + +#: src/rc_formatters.py:869 +msgid "unknown expiry time" +msgstr "अनजान समय सीमा" + +#: src/rc_formatters.py:874 +msgid "Blocked from editing the following pages: " +msgstr "इन पृष्ठों को सम्पादित करने से ब्लॉक्ड: " + +#: src/rc_formatters.py:883 +msgid "Blocked from editing pages on following namespaces: " +msgstr "इन नेमस्पेसों में पृष्ठों को सम्पादित करने से ब्लॉक्ड: " + +#: src/rc_formatters.py:894 +msgid "Partial block details" +msgstr "आधा ब्लॉक विवरण" + +#: src/rc_formatters.py:895 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "{blocked_user} को ब्लॉक किया {time}" + +#: src/rc_formatters.py:899 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "{blocked_user} के ब्लॉक सेटिंग्स को बदला" + +#: src/rc_formatters.py:903 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "{blocked_user} को अनब्लॉक किया" + +#: src/rc_formatters.py:910 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "{target} के प्रॉफाइल पर एक कमेंट छोड़ा" + +#: src/rc_formatters.py:912 +msgid "Left a comment on their own profile" +msgstr "अपने प्रॉफाइल पर एक कमेंट छोड़ा" + +#: src/rc_formatters.py:919 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "{target} के प्रॉफाइल के एक कमेंट पर जवाब दिया" + +#: src/rc_formatters.py:921 +msgid "Replied to a comment on their own profile" +msgstr "अपने प्रॉफाइल क के एक कमेंट पर जवाब दिया" + +#: src/rc_formatters.py:928 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "{target} के प्रॉफाइल के एक कमेंट को सम्पादित किया" + +#: src/rc_formatters.py:930 +msgid "Edited a comment on their own profile" +msgstr "अपने प्रॉफाइल के एक कमेंट को सम्पादित किया" + +#: src/rc_formatters.py:935 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "{target} के प्रॉफाइल को सम्पादित किया" + +#: src/rc_formatters.py:937 +msgid "Edited their own profile" +msgstr "अपने प्रॉफाइल को सम्पादित किया" + +#: src/rc_formatters.py:939 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "{field} फील्ड को क्लियर किया" + +#: src/rc_formatters.py:941 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "{field} फील्ड को बदला गया: {desc} में" + +#: src/rc_formatters.py:946 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "{target} के प्रॉफाइल के एक कमेंट को पर्ज किया" + +#: src/rc_formatters.py:948 +msgid "Purged a comment on their own profile" +msgstr "अपने प्रॉफाइल के एक कमेंट को पर्ज किया" + +#: src/rc_formatters.py:956 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "{target} के प्रॉफाइल के एक कमेंट को सम्पादित किया" + +#: src/rc_formatters.py:958 +msgid "Deleted a comment on their own profile" +msgstr "अपने प्रॉफाइल के एक कमेंट को डिलीट किया" + +#: src/rc_formatters.py:962 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "{target} के ग्रुपों को बदला" + +#: src/rc_formatters.py:966 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} को एक नए यूज़रग्रुप में ऑटोप्रमोट किया गया" + +#: src/rc_formatters.py:981 +#, python-brace-format +msgid "Groups changed from {old_groups} to {new_groups}{reason}" +msgstr "ग्रुपों को {old_groups} से {new_groups} में बदला गया{reason}" + +#: src/rc_formatters.py:985 +#, python-brace-format +msgid "Protected {target}" +msgstr "{target} को प्रॉटेक्ट किया गया" + +#: src/rc_formatters.py:991 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "{article} के प्रॉटेक्शन लेवल को बदला" + +#: src/rc_formatters.py:997 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "{article} से प्रॉटेक्शन हटा दिया गया" + +#: src/rc_formatters.py:1001 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "पृष्ठ {article} पर रिवीशन के दृश्यता को बदला " +msgstr[1] "पृष्ठ {article} पर {amount} रिवीशनों के दृश्यता को बदला " + +#: src/rc_formatters.py:1013 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "{count} रिवीशन के साथ {article} को इम्पोर्ट किया गया" +msgstr[1] "{count} रिवीशनों के साथ {article} को इम्पोर्ट किया गया" + +#: src/rc_formatters.py:1018 +#, python-brace-format +msgid "Restored {article}" +msgstr "{article} को रिस्टोर किया गया" + +#: src/rc_formatters.py:1021 +msgid "Changed visibility of log events" +msgstr "लॉग घटनाओं के दृश्यता को बदला गया" + +#: src/rc_formatters.py:1031 +#, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "\"{source}\" से {count} रिवीशन के साथ {article} को इम्पोर्ट किया गया" +msgstr[1] "\"{source}\" से {count} रिवीशनों के साथ {article} को इम्पोर्ट किया गया" + +#: src/rc_formatters.py:1036 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "अब्यूज़ फिल्टर संख्यी {number} को बदला गया" + +#: src/rc_formatters.py:1039 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "अब्यूज़ फिल्टर संख्या {number} को बनाया गया" + +#: src/rc_formatters.py:1042 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "{article} के रिवीशन इतिहास को {dest} में मर्ज किया गया" + +#: src/rc_formatters.py:1046 +msgid "Created account automatically" +msgstr "अपने आप अकाउंट बनाया गया" + +#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 +msgid "Created account" +msgstr "अकाउंट बनाया गया" + +#: src/rc_formatters.py:1052 +#, python-brace-format +msgid "Created account {article}" +msgstr "अकाउंट {article} बनाया गया" + +#: src/rc_formatters.py:1055 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "अकाउंट {article} बनाया गया और पासवर्ड ईमेल के ज़रिये भेजा गया" + +#: src/rc_formatters.py:1061 +msgid "Added an entry to the interwiki table" +msgstr "इंटरविकी टेबल पर एक एंट्री जोड़ा गया" + +#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "उपसर्ग: {prefix}, वेबसाइट: {website} | {desc}" + +#: src/rc_formatters.py:1067 +msgid "Edited an entry in interwiki table" +msgstr "इंटरविकी टेबल पर एक एंट्री को सम्पादित किया गया" + +#: src/rc_formatters.py:1073 +msgid "Deleted an entry in interwiki table" +msgstr "इंटरविकी टेबल में एक एंट्री को डिलीट किया गया" + +#: src/rc_formatters.py:1074 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "उपसर्ग: {prefix} | {desc}" + +#: src/rc_formatters.py:1077 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "पृष्ठ {article} के कंटेंट मॉडल को बदला गया" + +#: src/rc_formatters.py:1078 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "मॉडल को {old} से {new} में बदला गया: {reason}" + +#: src/rc_formatters.py:1083 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "पृष्ठ {article} को गैर-डिफ़ॉल्ट कंटेंट मॉडल की मदद से बनाया" + +#: src/rc_formatters.py:1084 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "मॉडल {new} से बनाया: {reason}" + +#: src/rc_formatters.py:1087 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "{article} के स्प्राइट को सम्पादित किया गया" + +#: src/rc_formatters.py:1090 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "{article} के लिए स्प्राइट शीट बनाया गया" + +#: src/rc_formatters.py:1093 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "{article} के स्लाइस को सम्पादित किया गया" + +#: src/rc_formatters.py:1099 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "कार्गो टेबल \"{table}\" बनाया गया" + +#: src/rc_formatters.py:1103 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "कार्गो टेबल \"{table}\" को डिलीट किया गया" + +#: src/rc_formatters.py:1110 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "कार्गो टेबल \"{table}\" को फिर से बनाया गया" + +#: src/rc_formatters.py:1117 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "कोर्गो टेबल \"{table}\" को बदला गया" + +#: src/rc_formatters.py:1121 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "टैग \"{tag}\" बनाया गया" + +#: src/rc_formatters.py:1125 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "टैग \"{tag}\" को डिलीट किया गया" + +#: src/rc_formatters.py:1127 +#, fuzzy +msgid "Removed from" +msgstr "हटाया गया" + +#: src/rc_formatters.py:1127 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:1131 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "टैग \"{tag}\" को ऐक्टिवेट किया गया" + +#: src/rc_formatters.py:1134 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "टैग \"{tag}\" को डिऐक्टिवेट किया गया" + +#: src/rc_formatters.py:1137 +msgid "Changed wiki settings" +msgstr "विकी सेटिंग्स को बदला गया" + +#: src/rc_formatters.py:1141 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "\"{wiki}\" विकी को डिलीट किया गया" + +#: src/rc_formatters.py:1144 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "\"{wiki}\" विकी को लॉक किया गया" + +#: src/rc_formatters.py:1147 +#, fuzzy, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "\"{namespace_name}\" नेमस्पेस को मॉडिफाइ किया गया" + +#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 +msgid "Wiki" +msgstr "विकी" + +#: src/rc_formatters.py:1151 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "\"{namespace_name}\" नेमस्पेस को डिलीट किया गया" + +#: src/rc_formatters.py:1157 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "\"{usergroup_name}\" यूज़रग्रुप को मॉडिफाइ किया गया" + +#: src/rc_formatters.py:1160 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "\"{wiki}\" विकी को डिलीट किया गया" + +#: src/rc_formatters.py:1163 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "\"{wiki}\" विकी को अनलॉक किया गया" + +#: src/rc_formatters.py:1166 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "{file} डंप जनरेट किया" + +#: src/rc_formatters.py:1169 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "{file} डंप को डिलीट किया" + +#: src/rc_formatters.py:1177 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "\"{article}\" को अनुवाद के लिए मार्क किया गया" + +#: src/rc_formatters.py:1180 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "\"{article}\" को अनुवाद सिस्टम से हटा दिया गया" + +#: src/rc_formatters.py:1183 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "\"{article}\" से \"{target}\" तक अनुवाद पृष्ठों को लाना पूरा हुआ" + +#: src/rc_formatters.py:1186 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "\"{article}\" को \"{target}\" पर ले जाते वक्त एक त्रुटि आई" + +#: src/rc_formatters.py:1189 +#, python-brace-format +msgid "Completed deletion of translatable page \"{article}\"" +msgstr "अनुवाद-लायक पृष्ठ \"{article}\" के डिलीशन पृष्ठ को पूरा किया" + +#: src/rc_formatters.py:1192 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" +"\"{article}\" को डिलीट न किया जा सका जो अनुवाद-लायक पृष्ठ \"{target}\" का है" + +#: src/rc_formatters.py:1195 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "अनुवाद पृष्ठ {article} के डिलीशन को पूरा किया" + +#: src/rc_formatters.py:1198 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "\"{article}\" को डिलीट न किया जा सका जो अनुवाद पृष्ठ \"{target}\" का है" + +#: src/rc_formatters.py:1201 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "{article} के अनुवाद को बढ़ावा दिया गया" + +#: src/rc_formatters.py:1204 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "\"{article}\" के अनुवाद के बढ़ावे को कम किया" + +#: src/rc_formatters.py:1210 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "\"{article}\" के भाषाओं को `{languages}` तक सीमित किया गया" + +#: src/rc_formatters.py:1212 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "\"{article}\" के मुख्य भाषाओं को `{languages}` में सेट किया गया" + +#: src/rc_formatters.py:1214 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "\"{article}\" से मुख्य भाषाओं को हटा दिया गया" + +#: src/rc_formatters.py:1217 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "अनुवाद-लायक पृष्ठ \"{article}\" को एग्रीगेट ग्रुप \"{group}\" में डाला गया" + +#: src/rc_formatters.py:1220 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "अनुवाद-लायक पृष्ठ \"{article}\" को एग्रीगेट ग्रुप \"{group}\" से हटा दिया गया" + +#: src/rc_formatters.py:1227 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "अनुवाद \"{article}\" को रिव्यु किया गया" + +#: src/rc_formatters.py:1230 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "\"{article}\" `{language}` अनुवादों के स्थिति को बदला गया" + +#: src/rc_formatters.py:1232 +msgid "Old state" +msgstr "पुरानी स्थिति" + +#: src/rc_formatters.py:1233 +msgid "New state" +msgstr "नई स्थिति" + +#: src/rc_formatters.py:1242 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "\"{article}\" के भाषा को बदला" + +#: src/rc_formatters.py:1243 +msgid "Old language" +msgstr "पुरानी भाषा" + +#: src/rc_formatters.py:1244 +msgid "New language" +msgstr "नई भाषा" + +#: src/rc_formatters.py:1248 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +"{edits} सम्पादना वाले सदस्य \"{old_name}\" को \"{new_name}\" में रीनेम किया गया" +msgstr[1] "" +"{edits} सम्पादनाओं वाले सदस्य \"{old_name}\" को \"{new_name}\" में रीनेम किया गया" + +#: src/rc_formatters.py:1250 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "सदस्य \"{old_name}\" को \"{new_name}\" में रीनेम किया गया" + +#: src/rc_formatters.py:1254 +msgid "Action has been hidden by administration" +msgstr "ऐक्शन ऐडमिनिस्ट्रेशन द्वारा छिपाया गया है" + +#: src/rc_formatters.py:1288 +msgid "**Added**: " +msgstr "**जोड़ा**: " + +#: src/rc_formatters.py:1288 +msgid " and {} more\n" +msgstr " और {}\n" + +#: src/rc_formatters.py:1289 +msgid "**Removed**: " +msgstr "**हटाया**: " + +#: src/rc_formatters.py:1289 +msgid " and {} more" +msgstr " और {}" + +#: src/rc_formatters.py:1290 +msgid "Changed categories" +msgstr "श्रेणियों को बदला गया" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" +#~ msgstr "" +#~ "[{author}]({author_url}) ने एक विकी *{wiki_name}* को रिस्टोर किया{comment}" + +#, python-brace-format +#~ msgid "Restored a \"{wiki}\" wiki" +#~ msgstr "\"{wiki}\" विकी को रिस्टोर किया गया" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) ने {target} के प्रॉफाइल के एक कमेंट को डिलीट किया" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on their own profile" +#~ msgstr "[{author}]({author_url}) ने अपने प्रॉफाइल पर एक कमेंट को डिलीट किया" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) imported interwiki{comment}" +#~ msgstr "[{author}]({author_url}) ने इंटरविकी इम्पोर्ट किया{comment}" + +#~ msgid "Imported interwiki" +#~ msgstr "इंटरविकी इम्पोर्ट किया गया" diff --git a/locale/lol/LC_MESSAGES/formatters.po b/locale/lol/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..90b01dc --- /dev/null +++ b/locale/lol/LC_MESSAGES/formatters.po @@ -0,0 +1,1521 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDw package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: lol\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: lol\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 +#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 +#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 +msgid "unknown" +msgstr "" + +#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 +#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 +#: src/rc_formatters.py:75 src/rc_formatters.py:96 +msgid "Unregistered user" +msgstr "" + +#: src/discussion_formatters.py:39 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: src/discussion_formatters.py:42 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: src/discussion_formatters.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: src/discussion_formatters.py:54 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" + +#: src/discussion_formatters.py:61 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" + +#: src/discussion_formatters.py:64 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" + +#: src/discussion_formatters.py:72 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" + +#: src/discussion_formatters.py:78 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" + +#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" + +#: src/discussion_formatters.py:123 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "" + +#: src/discussion_formatters.py:127 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "" + +#: src/discussion_formatters.py:134 +msgid "Option {}" +msgstr "" + +#: src/discussion_formatters.py:135 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: src/discussion_formatters.py:139 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "" + +#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 +#: src/rc_formatters.py:1283 +msgid "Tags" +msgstr "" + +#: src/discussion_formatters.py:155 +msgid "{} tags" +msgstr "" + +#: src/discussion_formatters.py:160 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "" + +#: src/discussion_formatters.py:169 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: src/discussion_formatters.py:173 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: src/discussion_formatters.py:180 +#, python-brace-format +msgid "Commented on {article}" +msgstr "" + +#: src/discussion_formatters.py:184 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "" + +#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "" + +#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 +#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 +msgid "Report this on the support server" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "None" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Warning issued" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "**Blocked user**" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Tagged the edit" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Disallowed the action" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "**IP range blocked**" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Throttled actions" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Removed autoconfirmed group" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "**Removed from privileged groups**" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Edit" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Upload" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Move" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Stash upload" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Deletion" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Account creation" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Auto account creation" +msgstr "" + +#: src/rc_formatters.py:83 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" + +#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 +#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 +#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 +#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 +#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 +#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 +#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 +#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 +#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 +msgid "Unknown" +msgstr "" + +#: src/rc_formatters.py:116 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: src/rc_formatters.py:118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: src/rc_formatters.py:121 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "" + +#: src/rc_formatters.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" + +#: src/rc_formatters.py:132 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" + +#: src/rc_formatters.py:135 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "" + +#: src/rc_formatters.py:141 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" + +#: src/rc_formatters.py:147 src/rc_formatters.py:152 +msgid "without making a redirect" +msgstr "" + +#: src/rc_formatters.py:147 src/rc_formatters.py:153 +msgid "with a redirect" +msgstr "" + +#: src/rc_formatters.py:148 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: src/rc_formatters.py:154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: src/rc_formatters.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:170 src/rc_formatters.py:855 +msgid "for infinity and beyond" +msgstr "" + +#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#, python-brace-format +msgid "for {num} {translated_length}" +msgstr "" + +#: src/rc_formatters.py:185 src/rc_formatters.py:867 +msgid "until {}" +msgstr "" + +#: src/rc_formatters.py:189 +msgid " on pages: " +msgstr "" + +#: src/rc_formatters.py:196 src/rc_formatters.py:881 +msgid " and namespaces: " +msgstr "" + +#: src/rc_formatters.py:198 +msgid " on namespaces: " +msgstr "" + +#: src/rc_formatters.py:210 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" + +#: src/rc_formatters.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:218 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:223 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:225 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile" +msgstr "" + +#: src/rc_formatters.py:231 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile" +msgstr "" + +#: src/rc_formatters.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile" +msgstr "" + +#: src/rc_formatters.py:245 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:251 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" +msgstr "" + +#: src/rc_formatters.py:257 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on their own profile" +msgstr "" + +#: src/rc_formatters.py:267 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:269 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" +msgstr "" + +#: src/rc_formatters.py:274 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" + +#: src/rc_formatters.py:281 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" + +#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 +#: src/rc_formatters.py:979 +msgid "none" +msgstr "" + +#: src/rc_formatters.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) from {old_groups} to {new_groups}{comment}" +msgstr "" + +#: src/rc_formatters.py:303 +#, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) from {old_groups} to " +"{new_groups}{comment}" +msgstr "" + +#: src/rc_formatters.py:304 src/rc_formatters.py:965 +msgid "System" +msgstr "" + +#: src/rc_formatters.py:309 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" + +#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 +#: src/rc_formatters.py:993 +msgid " [cascading]" +msgstr "" + +#: src/rc_formatters.py:316 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" + +#: src/rc_formatters.py:323 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" + +#: src/rc_formatters.py:327 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:340 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:345 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:347 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "" + +#: src/rc_formatters.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:364 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" + +#: src/rc_formatters.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" + +#: src/rc_formatters.py:372 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:375 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "" + +#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "" + +#: src/rc_formatters.py:380 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" + +#: src/rc_formatters.py:383 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" + +#: src/rc_formatters.py:388 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" + +#: src/rc_formatters.py:394 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" + +#: src/rc_formatters.py:400 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +msgstr "" + +#: src/rc_formatters.py:403 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" + +#: src/rc_formatters.py:407 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" + +#: src/rc_formatters.py:410 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" + +#: src/rc_formatters.py:413 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" + +#: src/rc_formatters.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" + +#: src/rc_formatters.py:421 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:423 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:428 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:433 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:436 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: src/rc_formatters.py:441 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: src/rc_formatters.py:443 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:449 +#, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: src/rc_formatters.py:452 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: src/rc_formatters.py:454 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "" + +#: src/rc_formatters.py:456 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: src/rc_formatters.py:459 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: src/rc_formatters.py:462 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: src/rc_formatters.py:467 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: src/rc_formatters.py:473 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" + +#: src/rc_formatters.py:477 +#, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: src/rc_formatters.py:481 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: src/rc_formatters.py:486 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "" + +#: src/rc_formatters.py:491 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "" + +#: src/rc_formatters.py:502 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" + +#: src/rc_formatters.py:509 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" + +#: src/rc_formatters.py:516 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:524 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:532 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translatable page [{article}]" +"({article_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:540 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:548 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:556 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:564 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" + +#: src/rc_formatters.py:571 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:581 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" + +#: src/rc_formatters.py:587 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" + +#: src/rc_formatters.py:593 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:600 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" + +#: src/rc_formatters.py:607 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" + +#: src/rc_formatters.py:619 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" + +#: src/rc_formatters.py:627 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" + +#: src/rc_formatters.py:634 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" + +#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 +#: src/rc_formatters.py:1241 +msgid "(default)" +msgstr "" + +#: src/rc_formatters.py:647 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" + +#: src/rc_formatters.py:656 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:661 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" + +#: src/rc_formatters.py:665 +msgid "An action has been hidden by administration." +msgstr "" + +#: src/rc_formatters.py:681 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: src/rc_formatters.py:682 +msgid "Performed" +msgstr "" + +#: src/rc_formatters.py:683 +msgid "Action taken" +msgstr "" + +#: src/rc_formatters.py:684 +msgid "Title" +msgstr "" + +#: src/rc_formatters.py:693 src/rc_formatters.py:980 +msgid "No description provided" +msgstr "" + +#: src/rc_formatters.py:717 +msgid "(N!) " +msgstr "" + +#: src/rc_formatters.py:718 +msgid "m" +msgstr "" + +#: src/rc_formatters.py:718 +msgid "b" +msgstr "" + +#: src/rc_formatters.py:735 src/rc_formatters.py:740 +msgid "__Only whitespace__" +msgstr "" + +#: src/rc_formatters.py:745 +msgid "Removed" +msgstr "" + +#: src/rc_formatters.py:747 +msgid "Added" +msgstr "" + +#: src/rc_formatters.py:781 src/rc_formatters.py:820 +msgid "Options" +msgstr "" + +#: src/rc_formatters.py:781 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "" + +#: src/rc_formatters.py:786 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "" + +#: src/rc_formatters.py:788 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "" + +#: src/rc_formatters.py:790 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "" + +#: src/rc_formatters.py:806 +msgid "**No license!**" +msgstr "" + +#: src/rc_formatters.py:818 +msgid "" +"\n" +"License: {}" +msgstr "" + +#: src/rc_formatters.py:820 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "" + +#: src/rc_formatters.py:825 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "" + +#: src/rc_formatters.py:830 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" + +#: src/rc_formatters.py:836 +msgid "No redirect has been made" +msgstr "" + +#: src/rc_formatters.py:837 +msgid "A redirect has been made" +msgstr "" + +#: src/rc_formatters.py:838 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "" + +#: src/rc_formatters.py:841 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" + +#: src/rc_formatters.py:845 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "" + +#: src/rc_formatters.py:869 +msgid "unknown expiry time" +msgstr "" + +#: src/rc_formatters.py:874 +msgid "Blocked from editing the following pages: " +msgstr "" + +#: src/rc_formatters.py:883 +msgid "Blocked from editing pages on following namespaces: " +msgstr "" + +#: src/rc_formatters.py:894 +msgid "Partial block details" +msgstr "" + +#: src/rc_formatters.py:895 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "" + +#: src/rc_formatters.py:899 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "" + +#: src/rc_formatters.py:903 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "" + +#: src/rc_formatters.py:910 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:912 +msgid "Left a comment on their own profile" +msgstr "" + +#: src/rc_formatters.py:919 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:921 +msgid "Replied to a comment on their own profile" +msgstr "" + +#: src/rc_formatters.py:928 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:930 +msgid "Edited a comment on their own profile" +msgstr "" + +#: src/rc_formatters.py:935 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:937 +msgid "Edited their own profile" +msgstr "" + +#: src/rc_formatters.py:939 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "" + +#: src/rc_formatters.py:941 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "" + +#: src/rc_formatters.py:946 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:948 +msgid "Purged a comment on their own profile" +msgstr "" + +#: src/rc_formatters.py:956 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:958 +msgid "Deleted a comment on their own profile" +msgstr "" + +#: src/rc_formatters.py:962 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "" + +#: src/rc_formatters.py:966 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "" + +#: src/rc_formatters.py:981 +#, python-brace-format +msgid "Groups changed from {old_groups} to {new_groups}{reason}" +msgstr "" + +#: src/rc_formatters.py:985 +#, python-brace-format +msgid "Protected {target}" +msgstr "" + +#: src/rc_formatters.py:991 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "" + +#: src/rc_formatters.py:997 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "" + +#: src/rc_formatters.py:1001 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:1013 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:1018 +#, python-brace-format +msgid "Restored {article}" +msgstr "" + +#: src/rc_formatters.py:1021 +msgid "Changed visibility of log events" +msgstr "" + +#: src/rc_formatters.py:1031 +#, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:1036 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "" + +#: src/rc_formatters.py:1039 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "" + +#: src/rc_formatters.py:1042 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" + +#: src/rc_formatters.py:1046 +msgid "Created account automatically" +msgstr "" + +#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 +msgid "Created account" +msgstr "" + +#: src/rc_formatters.py:1052 +#, python-brace-format +msgid "Created account {article}" +msgstr "" + +#: src/rc_formatters.py:1055 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" + +#: src/rc_formatters.py:1061 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: src/rc_formatters.py:1067 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: src/rc_formatters.py:1073 +msgid "Deleted an entry in interwiki table" +msgstr "" + +#: src/rc_formatters.py:1074 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: src/rc_formatters.py:1077 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "" + +#: src/rc_formatters.py:1078 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "" + +#: src/rc_formatters.py:1083 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: src/rc_formatters.py:1084 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "" + +#: src/rc_formatters.py:1087 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "" + +#: src/rc_formatters.py:1090 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "" + +#: src/rc_formatters.py:1093 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "" + +#: src/rc_formatters.py:1099 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:1103 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:1110 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:1117 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:1121 +#, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "" + +#: src/rc_formatters.py:1125 +#, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "" + +#: src/rc_formatters.py:1127 +msgid "Removed from" +msgstr "" + +#: src/rc_formatters.py:1127 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:1131 +#, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "" + +#: src/rc_formatters.py:1134 +#, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "" + +#: src/rc_formatters.py:1137 +msgid "Changed wiki settings" +msgstr "" + +#: src/rc_formatters.py:1141 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "" + +#: src/rc_formatters.py:1144 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: src/rc_formatters.py:1147 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 +msgid "Wiki" +msgstr "" + +#: src/rc_formatters.py:1151 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "" + +#: src/rc_formatters.py:1157 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "" + +#: src/rc_formatters.py:1160 +#, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "" + +#: src/rc_formatters.py:1163 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "" + +#: src/rc_formatters.py:1166 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "" + +#: src/rc_formatters.py:1169 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "" + +#: src/rc_formatters.py:1177 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: src/rc_formatters.py:1180 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: src/rc_formatters.py:1183 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1186 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1189 +#, python-brace-format +msgid "Completed deletion of translatable page \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1192 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1195 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1198 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1201 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1204 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1210 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: src/rc_formatters.py:1212 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: src/rc_formatters.py:1214 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1217 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: src/rc_formatters.py:1220 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: src/rc_formatters.py:1227 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1230 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1232 +msgid "Old state" +msgstr "" + +#: src/rc_formatters.py:1233 +msgid "New state" +msgstr "" + +#: src/rc_formatters.py:1242 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1243 +msgid "Old language" +msgstr "" + +#: src/rc_formatters.py:1244 +msgid "New language" +msgstr "" + +#: src/rc_formatters.py:1248 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:1250 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: src/rc_formatters.py:1254 +msgid "Action has been hidden by administration" +msgstr "" + +#: src/rc_formatters.py:1288 +msgid "**Added**: " +msgstr "" + +#: src/rc_formatters.py:1288 +msgid " and {} more\n" +msgstr "" + +#: src/rc_formatters.py:1289 +msgid "**Removed**: " +msgstr "" + +#: src/rc_formatters.py:1289 +msgid " and {} more" +msgstr "" + +#: src/rc_formatters.py:1290 +msgid "Changed categories" +msgstr "" diff --git a/locale/pl/LC_MESSAGES/formatters.po b/locale/pl/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..d200199 --- /dev/null +++ b/locale/pl/LC_MESSAGES/formatters.po @@ -0,0 +1,1766 @@ +# #-#-#-#-# discussion_formatters.po #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"PO-Revision-Date: 2020-12-13 14:30+0000\n" +"Last-Translator: MarkusRost \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.2.1\n" +"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"PO-Revision-Date: 2021-04-14 14:22+0000\n" +"Last-Translator: Frisk The Evil Goat Overlord \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.4.2\n" +"Generated-By: pygettext.py 1.5\n" + +#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 +#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 +#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 +msgid "unknown" +msgstr "nieznany" + +#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 +#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 +#: src/rc_formatters.py:75 src/rc_formatters.py:96 +msgid "Unregistered user" +msgstr "Niezarejestrowany użytkownik" + +#: src/discussion_formatters.py:39 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) stworzył(a) [{title}](<{url}f/p/{threadId}>) w " +"{forumName}" + +#: src/discussion_formatters.py:42 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) stworzył(a) ankietę [{title}](<{url}f/p/{threadId}" +">) w {forumName}" + +#: src/discussion_formatters.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) stworzył(a) quiz [{title}](<{url}f/p/{threadId}>) w " +"{forumName}" + +#: src/discussion_formatters.py:54 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" +"[{author}]({author_url}) dodał(a) [odpowiedź](<{url}f/p/{threadId}/r/{postId}" +">) pod tematem [{title}](<{url}f/p/{threadId}>) w {forumName}" + +#: src/discussion_formatters.py:61 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) zostawił(a) [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) na [tablicy wiadomości {user}](<{url}wiki/" +"Message_Wall:{user_wall}>)" + +#: src/discussion_formatters.py:64 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) dodał(a) [odpowiedź](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) do [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) na [tablicy wiadomości {user}]" +"(<{url}wiki/Message_Wall:{user_wall}>)" + +#: src/discussion_formatters.py:72 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) dodał(a) [komentarz](<{url}?commentId={commentId}>) " +"w [{article}](<{url}>)" + +#: src/discussion_formatters.py:78 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) dodał(a) [odpowiedź](<{url}?commentId={commentId}" +"&replyId={replyId}>) na [komentarz](<{url}?commentId={commentId}>) w " +"artykule [{article}](<{url}>)" + +#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" +"Nieznane wydarzenie `{event}` wykonane przez [{author}]({author_url}), zgłoś " +"je na [serwerze wsparcia](<{support}>)." + +#: src/discussion_formatters.py:123 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "Stworzył(a) „{title}”" + +#: src/discussion_formatters.py:127 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "Stworzył(a) ankietę zatytułowaną „{title}”" + +#: src/discussion_formatters.py:134 +msgid "Option {}" +msgstr "Opcja {}" + +#: src/discussion_formatters.py:135 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[Zobacz zdjęcie]({image_url})__" + +#: src/discussion_formatters.py:139 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "Stworzył(a) quiz „{title}”" + +#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 +#: src/rc_formatters.py:1283 +#, fuzzy +msgid "Tags" +msgstr "" +"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +"Fora\n" +"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +"Znaczniki" + +#: src/discussion_formatters.py:155 +msgid "{} tags" +msgstr "{} tagów" + +#: src/discussion_formatters.py:160 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "Odpowiedział(a) w „{title}”" + +#: src/discussion_formatters.py:169 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "Stworzył(a) „{title}” na tablicy wiadomości {user}" + +#: src/discussion_formatters.py:173 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "Odpowiedział(a) na „{title}” z tablicy wiadomości {user}" + +#: src/discussion_formatters.py:180 +#, python-brace-format +msgid "Commented on {article}" +msgstr "Skomentował(a) „{article}”" + +#: src/discussion_formatters.py:184 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "Odpowiedział(a) na komentarz w „{article}”" + +#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "Nieznane wydarzenie `{event}`" + +#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 +#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 +msgid "Report this on the support server" +msgstr "Zgłoś to na serwerze wsparcia" + +#: src/rc_formatters.py:28 +msgid "None" +msgstr "Brak" + +#: src/rc_formatters.py:28 +msgid "Warning issued" +msgstr "Wydano ostrzeżenie" + +#: src/rc_formatters.py:28 +msgid "**Blocked user**" +msgstr "**Zablokowano użytkownika**" + +#: src/rc_formatters.py:28 +msgid "Tagged the edit" +msgstr "Otagowano edycję" + +#: src/rc_formatters.py:28 +msgid "Disallowed the action" +msgstr "Zabroniono akcji" + +#: src/rc_formatters.py:28 +msgid "**IP range blocked**" +msgstr "**Zablokowano zakres adresów IP**" + +#: src/rc_formatters.py:28 +msgid "Throttled actions" +msgstr "Spowolniono akcje użytkownika" + +#: src/rc_formatters.py:28 +msgid "Removed autoconfirmed group" +msgstr "Usunięto autopotwierdzoną grupę" + +#: src/rc_formatters.py:28 +msgid "**Removed from privileged groups**" +msgstr "**Usunięto z uprzywilejowanych grup**" + +#: src/rc_formatters.py:29 +msgid "Edit" +msgstr "Edycja" + +#: src/rc_formatters.py:29 +msgid "Upload" +msgstr "Przesłanie pliku" + +#: src/rc_formatters.py:29 +msgid "Move" +msgstr "Przeniesienie strony" + +#: src/rc_formatters.py:29 +msgid "Stash upload" +msgstr "Masowe przesłanie plików" + +#: src/rc_formatters.py:29 +msgid "Deletion" +msgstr "Usunięcie" + +#: src/rc_formatters.py:29 +msgid "Account creation" +msgstr "Utworzenie konta" + +#: src/rc_formatters.py:29 +msgid "Auto account creation" +msgstr "Automatyczne utworzenie konta" + +#: src/rc_formatters.py:83 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" +"[{author}]({author_url}) wywołał(a) *{abuse_filter}*, wykonując akcję " +"\"{action}\" w *[{target}]({target_url})* - podjęte działanie: {result}" + +#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 +#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 +#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 +#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 +#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 +#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 +#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 +#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 +#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 +msgid "Unknown" +msgstr "Nieznana" + +#: src/rc_formatters.py:116 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) edytował(a) [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" + +#: src/rc_formatters.py:118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) stworzył(a) [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" + +#: src/rc_formatters.py:121 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) przesłał(a) [{file}]({file_link}){comment}" + +#: src/rc_formatters.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" +"[{author}]({author_url}) wycofał(a) wersję [{file}]({file_link}){comment}" + +#: src/rc_formatters.py:132 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) przesłał(a) nową wersję [{file}]({file_link})" +"{comment}" + +#: src/rc_formatters.py:135 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" + +#: src/rc_formatters.py:141 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" +"[{author}]({author_url}) usunął przekierowanie przez nadpisanie [{page}]" +"({page_link}){comment}" + +#: src/rc_formatters.py:147 src/rc_formatters.py:152 +msgid "without making a redirect" +msgstr "bez utworzenia przekierowania" + +#: src/rc_formatters.py:147 src/rc_formatters.py:153 +msgid "with a redirect" +msgstr "z przekierowaniem" + +#: src/rc_formatters.py:148 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) przeniósł {redirect}*{article}* do [{target}]" +"({target_url}) {made_a_redirect}{comment}" + +#: src/rc_formatters.py:154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) przeniósł {redirect}*{article}* do przekierowania " +"[{target}]({target_url}) {made_a_redirect}{comment}" + +#: src/rc_formatters.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) przeniósł ustawienia zabezpieczeń z {redirect}" +"*{article}* do [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:170 src/rc_formatters.py:855 +msgid "for infinity and beyond" +msgstr "na wieczność" + +#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#, python-brace-format +msgid "for {num} {translated_length}" +msgstr "na {num} {translated_length}" + +#: src/rc_formatters.py:185 src/rc_formatters.py:867 +msgid "until {}" +msgstr "do {}" + +#: src/rc_formatters.py:189 +msgid " on pages: " +msgstr " na stronach: " + +#: src/rc_formatters.py:196 src/rc_formatters.py:881 +msgid " and namespaces: " +msgstr " oraz przestrzeniach nazw: " + +#: src/rc_formatters.py:198 +msgid " on namespaces: " +msgstr " na przestrzeniach nazw: " + +#: src/rc_formatters.py:210 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) zablokował(a) [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" + +#: src/rc_formatters.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) ustawienia blokady dla [{blocked_user}]" +"({user_url}){comment}" + +#: src/rc_formatters.py:218 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) odblokował(a) [{blocked_user}]({user_url}){comment}" + +#: src/rc_formatters.py:223 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) zostawił(a) [komentarz]({comment}) na profilu " +"użytkownika {target}" + +#: src/rc_formatters.py:225 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) zostawił(a) [komentarz]({comment}) na swoim własnym " +"profilu" + +#: src/rc_formatters.py:231 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile" +msgstr "" +"[{author}]({author_url}) odpowiedział(a) na [komentarz]({comment}) na " +"profilu użytkownika {target}" + +#: src/rc_formatters.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile" +msgstr "" +"[{author}]({author_url}) odpowiedział(a) na [komentarz]({comment}) na swoim " +"własnym profilu" + +#: src/rc_formatters.py:245 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) edytował(a) [komentarz]({comment}) na profilu " +"użytkownika {target}" + +#: src/rc_formatters.py:251 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) edytował(a) [komentarz]({comment}) na swoim własnym " +"profilu" + +#: src/rc_formatters.py:257 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +msgstr "" +"[{author}]({author_url}) usunął/usunęła permanentnie komentarz na profilu " +"użytkownika {target}" + +#: src/rc_formatters.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on their own profile" +msgstr "" +"[{author}]({author_url}) usunął/usunęła permanentnie komentarz na swoim " +"własnym profilu" + +#: src/rc_formatters.py:267 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) usunął [komentarz]({comment}) na profilu " +"użytkownika {target}" + +#: src/rc_formatters.py:269 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) usunął [komentarz]({comment}) na swoim własnym " +"profilu" + +#: src/rc_formatters.py:274 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) edytował(a) pole {field} na profilu użytkownika " +"[{target}]({target_url}). *({desc})*" + +#: src/rc_formatters.py:281 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) edytował(a) pole {field} na [swoim własnym]" +"({target_url}) profilu. *({desc})*" + +#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 +#: src/rc_formatters.py:979 +msgid "none" +msgstr "brak" + +#: src/rc_formatters.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) from {old_groups} to {new_groups}{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) przynależność do grup dla [{target}]" +"({target_url}) z {old_groups} na {new_groups}{comment}" + +#: src/rc_formatters.py:303 +#, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) from {old_groups} to " +"{new_groups}{comment}" +msgstr "" +"{author} automatycznie zmienił przynależność do grup [{target}]" +"({target_url}) z {old_groups} na {new_groups}{comment}" + +#: src/rc_formatters.py:304 src/rc_formatters.py:965 +msgid "System" +msgstr "System" + +#: src/rc_formatters.py:309 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) zabezpieczył(a) [{article}]({article_url}) z " +"ustawieniami: {settings}{comment}" + +#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 +#: src/rc_formatters.py:993 +msgid " [cascading]" +msgstr " [kaskadowo]" + +#: src/rc_formatters.py:316 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) ustawienia zabezpieczeń [{article}]" +"({article_url}) na: {settings}{comment}" + +#: src/rc_formatters.py:323 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) usunął zabezpieczenia z [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:327 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) zmienił(a) widoczność wersji strony [{article}]" +"({article_url}){comment}" +msgstr[1] "" +"[{author}]({author_url}) zmienił(a) widoczność {amount} wersji strony " +"[{article}]({article_url}){comment}" +msgstr[2] "" +"[{author}]({author_url}) zmienił(a) widoczność {amount} wersji strony " +"[{article}]({article_url}){comment}" + +#: src/rc_formatters.py:340 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" +"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z jedną " +"wersją{comment}" +msgstr[1] "" +"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z " +"{count} wersjami{comment}" +msgstr[2] "" +"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z " +"{count} wersjami{comment}" + +#: src/rc_formatters.py:345 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) odtworzył(a) [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:347 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) widoczność wpisów rejestru{comment}" + +#: src/rc_formatters.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) zaimportował(a) wersję [{article}]({article_url}) z " +"[{source}]({source_url}){comment}" +msgstr[1] "" +"[{author}]({author_url}) zaimportował(a) {count} wersji artykułu [{article}]" +"({article_url}) z [{source}]({source_url}){comment}" +msgstr[2] "" +"[{author}]({author_url}) zaimportował(a) {count} wersji artykułu [{article}]" +"({article_url}) z [{source}]({source_url}){comment}" + +#: src/rc_formatters.py:364 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) edytował(a) filtr nadużyć [numer {number}]" +"({filter_url})" + +#: src/rc_formatters.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) stworzył(a) filtr nadużyć [numer {number}]" +"({filter_url})" + +#: src/rc_formatters.py:372 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" +"[{author}]({author_url}) połączył(a) historie zmian [{article}]" +"({article_url}) z [{dest}]({dest_url}){comment}" + +#: src/rc_formatters.py:375 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "Konto [{author}]({author_url}) zostało utworzone automatycznie" + +#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "Konto [{author}]({author_url}) zostało utworzone" + +#: src/rc_formatters.py:380 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" +"Konto [{article}]({article_url}) zostało utworzone przez [{author}]" +"({author_url}){comment}" + +#: src/rc_formatters.py:383 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" +"Konto [{article}]({article_url}) zostało utworzone przez [{author}]" +"({author_url}) oraz hasło do konta zostało przesłane przez email {comment}" + +#: src/rc_formatters.py:388 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) dodał(a) do [tabeli interwiki]({table_url}) wpis " +"{prefix}, który prowadzi do {website}" + +#: src/rc_formatters.py:394 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) edytował(a) w [tabeli interwiki]({table_url}) wpis " +"{prefix}, który prowadzi do {website}" + +#: src/rc_formatters.py:400 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +msgstr "[{author}]({author_url}) usunął wpis z [tabeli interwiki]({table_url})" + +#: src/rc_formatters.py:403 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) model zawartości [{article}]" +"({article_url}) z {old} na {new}{comment}" + +#: src/rc_formatters.py:407 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" +"[{author}]({author_url}) utworzył(a) stronę [{article}]({article_url}) " +"używając niedomyślnego modelu zawartości {new}{comment}" + +#: src/rc_formatters.py:410 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "[{author}]({author_url}) edytował(a) sprite [{article}]({article_url})" + +#: src/rc_formatters.py:413 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) utworzył(a) sprite sheet [{article}]({article_url})" + +#: src/rc_formatters.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "[{author}]({author_url}) edytował(a) slice [{article}]({article_url})" + +#: src/rc_formatters.py:421 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) utworzył(a) tabelę Cargo „{table}”" + +#: src/rc_formatters.py:423 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) usunął tabelę Cargo „{table}”" + +#: src/rc_formatters.py:428 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) utworzył(a) ponownie tabelę Cargo „{table}”" + +#: src/rc_formatters.py:433 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) zastąpił(a) tabelę Cargo „{table}”" + +#: src/rc_formatters.py:436 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) utworzył(a) [znacznik]({tag_url}) „{tag}”" + +#: src/rc_formatters.py:441 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) usunął [znacznik]({tag_url}) „{tag}”" + +#: src/rc_formatters.py:443 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z jedną " +"wersją{comment}" +msgstr[1] "" +"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z " +"{count} wersjami{comment}" +msgstr[2] "" +"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z " +"{count} wersjami{comment}" + +#: src/rc_formatters.py:449 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) aktywował(a) [znacznik]({tag_url}) „{tag}”" + +#: src/rc_formatters.py:452 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) dezaktywował(a) [znacznik]({tag_url}) „{tag}”" + +#: src/rc_formatters.py:454 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) zmienił(a) ustawienia wiki{reason}" + +#: src/rc_formatters.py:456 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) usunął/usunęła wiki *{wiki_name}*{comment}" + +#: src/rc_formatters.py:459 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) zablokował(a) wiki *{wiki_name}*{comment}" + +#: src/rc_formatters.py:462 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) zmodyfikował(a) przestrzeń nazw *{namespace_name}* " +"na *{wiki_name}*{comment}" + +#: src/rc_formatters.py:467 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) usunął/usunęła przestrzeń nazw *{namespace_name}* " +"na *{wiki_name}*{comment}" + +#: src/rc_formatters.py:473 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" +"[{author}]({author_url}) zaimportował(a) grupę użytkownika *{group_name}" +"*{comment}" + +#: src/rc_formatters.py:477 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) usunął/usunęła wiki *{wiki_name}*{comment}" + +#: src/rc_formatters.py:481 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) odblokował(a) wiki *{wiki_name}*{comment}" + +#: src/rc_formatters.py:486 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "" +"[{author}]({author_url}) wygenerował(a) kopię zapasową w *{file}*{comment}" + +#: src/rc_formatters.py:491 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "" +"[{author}]({author_url}) usunął/usunęła kopię zapasową *{file}*{comment}" + +#: src/rc_formatters.py:502 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" +"[{author}]({author_url}) oznaczył(a) [{article}]({article_url}) do " +"tłumaczenia{comment}" + +#: src/rc_formatters.py:509 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" +"[{author}]({author_url}) usunął/usunęła [{article}]({article_url}) z systemu " +"tłumaczeń{comment}" + +#: src/rc_formatters.py:516 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) zakończył(a) przenoszenie stron tłumaczeń z " +"*{article}* do [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:524 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) napotkał(a) problem podczas przenoszenia [{article}]" +"({article_url}) do [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:532 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translatable page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) zakończył(a) usuwanie tłumaczonej strony [{article}]" +"({article_url}){comment}" + +#: src/rc_formatters.py:540 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z jedną " +"wersją{comment}" + +#: src/rc_formatters.py:548 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) widoczność wersji strony [{article}]" +"({article_url}){comment}" + +#: src/rc_formatters.py:556 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z jedną " +"wersją{comment}" + +#: src/rc_formatters.py:564 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) usunął zabezpieczenia z [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:571 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) odtworzył(a) [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:581 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) ustawienia zabezpieczeń [{article}]" +"({article_url}) na: {settings}{comment}" + +#: src/rc_formatters.py:587 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) ustawienia zabezpieczeń [{article}]" +"({article_url}) na: {settings}{comment}" + +#: src/rc_formatters.py:593 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) usunął zabezpieczenia z [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:600 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) model zawartości [{article}]" +"({article_url}) z {old} na {new}{comment}" + +#: src/rc_formatters.py:607 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) usunął zabezpieczenia z [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:619 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) odtworzył(a) [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:627 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) model zawartości [{article}]" +"({article_url}) z {old} na {new}{comment}" + +#: src/rc_formatters.py:634 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) model zawartości [{article}]" +"({article_url}) z {old} na {new}{comment}" + +#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 +#: src/rc_formatters.py:1241 +msgid "(default)" +msgstr "" + +#: src/rc_formatters.py:647 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) model zawartości [{article}]" +"({article_url}) z {old} na {new}{comment}" + +#: src/rc_formatters.py:656 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" +msgstr[1] "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" +msgstr[2] "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" + +#: src/rc_formatters.py:661 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" + +#: src/rc_formatters.py:665 +msgid "An action has been hidden by administration." +msgstr "Akcja została ukryta przez administrację." + +#: src/rc_formatters.py:681 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "{user} wywołał(a) \"{abuse_filter}\"" + +#: src/rc_formatters.py:682 +msgid "Performed" +msgstr "Wykonano" + +#: src/rc_formatters.py:683 +msgid "Action taken" +msgstr "Podjęte działania" + +#: src/rc_formatters.py:684 +msgid "Title" +msgstr "Tytuł" + +#: src/rc_formatters.py:693 src/rc_formatters.py:980 +msgid "No description provided" +msgstr "Nie podano opisu zmian" + +#: src/rc_formatters.py:717 +msgid "(N!) " +msgstr "(N!) " + +#: src/rc_formatters.py:718 +msgid "m" +msgstr "d" + +#: src/rc_formatters.py:718 +msgid "b" +msgstr "b" + +#: src/rc_formatters.py:735 src/rc_formatters.py:740 +msgid "__Only whitespace__" +msgstr "__Tylko znaki niedrukowane__" + +#: src/rc_formatters.py:745 +msgid "Removed" +msgstr "Usunięto" + +#: src/rc_formatters.py:747 +msgid "Added" +msgstr "Dodano" + +#: src/rc_formatters.py:781 src/rc_formatters.py:820 +msgid "Options" +msgstr "Opcje" + +#: src/rc_formatters.py:781 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([podgląd]({link}) | [wycofaj]({undolink}))" + +#: src/rc_formatters.py:786 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "Przesłał(a) nową wersję {name}" + +#: src/rc_formatters.py:788 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "Wycofał(a) wersję {name}" + +#: src/rc_formatters.py:790 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "Przesłał(a) {name}" + +#: src/rc_formatters.py:806 +msgid "**No license!**" +msgstr "**Brak licencji!**" + +#: src/rc_formatters.py:818 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"Licencja: {}" + +#: src/rc_formatters.py:820 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([podgląd]({link}))" + +#: src/rc_formatters.py:825 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "Usunął stronę {article}" + +#: src/rc_formatters.py:830 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" +"Usunął przekierowanie ({article}), aby zrobić miejsce dla przenoszonej strony" + +#: src/rc_formatters.py:836 +msgid "No redirect has been made" +msgstr "Nie utworzono przekierowania" + +#: src/rc_formatters.py:837 +msgid "A redirect has been made" +msgstr "Zostało utworzone przekierowanie" + +#: src/rc_formatters.py:838 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "Przeniósł {redirect}{article} do {target}" + +#: src/rc_formatters.py:841 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "Przeniósł {redirect}{article} do strony przekierowującej {title}" + +#: src/rc_formatters.py:845 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "Przeniesiono ustawienia zabezpieczeń z {redirect}{article} do {title}" + +#: src/rc_formatters.py:869 +msgid "unknown expiry time" +msgstr "nieznany czas zakończenia" + +#: src/rc_formatters.py:874 +msgid "Blocked from editing the following pages: " +msgstr "Blokada przed edytowaniem następujących stron: " + +#: src/rc_formatters.py:883 +msgid "Blocked from editing pages on following namespaces: " +msgstr "Blokada przed edytowaniem stron na następujących przestrzeniach nazw: " + +#: src/rc_formatters.py:894 +msgid "Partial block details" +msgstr "Szczegóły częściowej blokady" + +#: src/rc_formatters.py:895 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "Zablokowano {blocked_user} {time}" + +#: src/rc_formatters.py:899 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "Zmienił ustawienia blokady {blocked_user}" + +#: src/rc_formatters.py:903 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "Odblokował {blocked_user}" + +#: src/rc_formatters.py:910 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "Zostawiono komentarz na profilu użytkownika {target}" + +#: src/rc_formatters.py:912 +msgid "Left a comment on their own profile" +msgstr "Zostawił(a) komentarz na swoim profilu" + +#: src/rc_formatters.py:919 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "Odpowiedziano na komentarz na profilu użytkownika {target}" + +#: src/rc_formatters.py:921 +msgid "Replied to a comment on their own profile" +msgstr "Odpowiedział(a) na komentarz na swoim profilu" + +#: src/rc_formatters.py:928 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "Edytowano komentarz na profilu użytkownika {target}" + +#: src/rc_formatters.py:930 +msgid "Edited a comment on their own profile" +msgstr "Edytował(a) komentarz na swoim profilu" + +#: src/rc_formatters.py:935 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "Edytowano profil użytkownika {target}" + +#: src/rc_formatters.py:937 +msgid "Edited their own profile" +msgstr "Edytował(a) swój profil" + +#: src/rc_formatters.py:939 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "Wyczyszczono pole {field}" + +#: src/rc_formatters.py:941 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "pole „{field}” zostało zmienione na: {desc}" + +#: src/rc_formatters.py:946 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "Usunął permanentnie komentarz na profilu użytkownika {target}" + +#: src/rc_formatters.py:948 +#, fuzzy +msgid "Purged a comment on their own profile" +msgstr "Edytował(a) komentarz na swoim profilu" + +#: src/rc_formatters.py:956 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "Usunął komentarz na profilu użytkownika {target}" + +#: src/rc_formatters.py:958 +#, fuzzy +msgid "Deleted a comment on their own profile" +msgstr "Edytował(a) komentarz na swoim profilu" + +#: src/rc_formatters.py:962 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "Zmieniono przynależność do grup dla {target}" + +#: src/rc_formatters.py:966 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} automatycznie otrzymał nową grupę użytkownika" + +#: src/rc_formatters.py:981 +#, python-brace-format +msgid "Groups changed from {old_groups} to {new_groups}{reason}" +msgstr "Grupy zmienione z {old_groups} do {new_groups}{reason}" + +#: src/rc_formatters.py:985 +#, python-brace-format +msgid "Protected {target}" +msgstr "Zabezpieczono {target}" + +#: src/rc_formatters.py:991 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "Zmieniono poziom zabezpieczeń {article}" + +#: src/rc_formatters.py:997 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "Usunięto zabezpieczenie z {article}" + +#: src/rc_formatters.py:1001 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "Zmieniono widoczność wersji na stronie {article} " +msgstr[1] "Zmieniono widoczność {amount} wersji na stronie {article} " +msgstr[2] "Zmieniono widoczność {amount} wersji na stronie {article} " + +#: src/rc_formatters.py:1013 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "Zaimportowano {article} z {count} wersją" +msgstr[1] "Zaimportowano {article} z {count} wersjami" +msgstr[2] "Zaimportowano {article} z {count} wersjami" + +#: src/rc_formatters.py:1018 +#, python-brace-format +msgid "Restored {article}" +msgstr "Przywrócono {article}" + +#: src/rc_formatters.py:1021 +msgid "Changed visibility of log events" +msgstr "Zmieniono widoczność wpisów rejestru" + +#: src/rc_formatters.py:1031 +#, fuzzy, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "Zaimportowano {article} z {count} wersją" +msgstr[1] "Zaimportowano {article} z {count} wersjami" +msgstr[2] "Zaimportowano {article} z {count} wersjami" + +#: src/rc_formatters.py:1036 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "Edytowano filtr nadużyć numer {number}" + +#: src/rc_formatters.py:1039 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "Utworzono filtr nadużyć numer {number}" + +#: src/rc_formatters.py:1042 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "Połączono historie {article} z {dest}" + +#: src/rc_formatters.py:1046 +msgid "Created account automatically" +msgstr "Konto zostało utworzone automatycznie" + +#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 +msgid "Created account" +msgstr "Stworzono konto" + +#: src/rc_formatters.py:1052 +#, python-brace-format +msgid "Created account {article}" +msgstr "Utworzono konto {article}" + +#: src/rc_formatters.py:1055 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "Utworzono konto {article} oraz wysłano hasło z użyciem emaila" + +#: src/rc_formatters.py:1061 +msgid "Added an entry to the interwiki table" +msgstr "Dodano wpis do tabeli interwiki" + +#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Prefix: {prefix}, strona: {website} | {desc}" + +#: src/rc_formatters.py:1067 +msgid "Edited an entry in interwiki table" +msgstr "Edytowano wpis interwiki" + +#: src/rc_formatters.py:1073 +msgid "Deleted an entry in interwiki table" +msgstr "Usunięto wpis interwiki" + +#: src/rc_formatters.py:1074 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Prefix: {prefix} | {desc}" + +#: src/rc_formatters.py:1077 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "Zmieniono model zawartości {article}" + +#: src/rc_formatters.py:1078 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "Model został zmieniony z {old} na {new}: {reason}" + +#: src/rc_formatters.py:1083 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: src/rc_formatters.py:1084 +#, fuzzy, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "Model został zmieniony z {old} na {new}: {reason}" + +#: src/rc_formatters.py:1087 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "Edytowano sprite dla {article}" + +#: src/rc_formatters.py:1090 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "Utworzono sprite sheet dla {article}" + +#: src/rc_formatters.py:1093 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "Edytowano część sprite dla {article}" + +#: src/rc_formatters.py:1099 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "Utworzono tabelę Cargo „{table}”" + +#: src/rc_formatters.py:1103 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "Usunięto tabelę Cargo „{table}”" + +#: src/rc_formatters.py:1110 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "Utworzono ponownie tabelę Cargo „{table}”" + +#: src/rc_formatters.py:1117 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "Zastąpiono tabelę Cargo „{table}”" + +#: src/rc_formatters.py:1121 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "Utworzono znacznik „{tag}”" + +#: src/rc_formatters.py:1125 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "Usunięto znacznik „{tag}”" + +#: src/rc_formatters.py:1127 +#, fuzzy +msgid "Removed from" +msgstr "Usunięto" + +#: src/rc_formatters.py:1127 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: src/rc_formatters.py:1131 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "Aktywowano znaczni „{tag}”" + +#: src/rc_formatters.py:1134 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "Dezaktywowano znacznik „{tag}”" + +#: src/rc_formatters.py:1137 +msgid "Changed wiki settings" +msgstr "Zmieniono ustawienia wiki" + +#: src/rc_formatters.py:1141 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "Usunięto wiki „{wiki}”" + +#: src/rc_formatters.py:1144 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "Zablokowano wiki „{wiki}”" + +#: src/rc_formatters.py:1147 +#, fuzzy, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "Modyfikowano przestrzeń nazw „{namespace_name}”" + +#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 +msgid "Wiki" +msgstr "Wiki" + +#: src/rc_formatters.py:1151 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "Usunięto przestrzeń nazw „{namespace_name}”" + +#: src/rc_formatters.py:1157 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "Modyfikowano grupę użytkowników „{usergroup_name}”" + +#: src/rc_formatters.py:1160 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "Usunięto wiki „{wiki}”" + +#: src/rc_formatters.py:1163 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "Odblokowano wiki „{wiki}”" + +#: src/rc_formatters.py:1166 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "" + +#: src/rc_formatters.py:1169 +#, fuzzy, python-brace-format +msgid "Deleted {file} dump" +msgstr "Usunął stronę {article}" + +#: src/rc_formatters.py:1177 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: src/rc_formatters.py:1180 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: src/rc_formatters.py:1183 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1186 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1189 +#, python-brace-format +msgid "Completed deletion of translatable page \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1192 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1195 +#, fuzzy, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "Zmieniono widoczność wersji na stronie {article} " + +#: src/rc_formatters.py:1198 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1201 +#, fuzzy, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "Usunięto zabezpieczenie z {article}" + +#: src/rc_formatters.py:1204 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1210 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: src/rc_formatters.py:1212 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: src/rc_formatters.py:1214 +#, fuzzy, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "Usunięto zabezpieczenie z {article}" + +#: src/rc_formatters.py:1217 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: src/rc_formatters.py:1220 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: src/rc_formatters.py:1227 +#, fuzzy, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "Usunięto zabezpieczenie z {article}" + +#: src/rc_formatters.py:1230 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1232 +msgid "Old state" +msgstr "" + +#: src/rc_formatters.py:1233 +msgid "New state" +msgstr "" + +#: src/rc_formatters.py:1242 +#, fuzzy, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "Usunięto zabezpieczenie z {article}" + +#: src/rc_formatters.py:1243 +msgid "Old language" +msgstr "" + +#: src/rc_formatters.py:1244 +msgid "New language" +msgstr "" + +#: src/rc_formatters.py:1248 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +"Zmienił(a) nazwę użytkownika „{old_name}” z jedną edycją na „{new_name}”" +msgstr[1] "" +"Zmienił(a) nazwę użytkownika „{old_name}” z {edits} edycjami na „{new_name}”" +msgstr[2] "" +"Zmienił(a) nazwę użytkownika „{old_name}” z {edits} edycjami na „{new_name}”" + +#: src/rc_formatters.py:1250 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "Zmieniono nazwę użytkownika „{old_name}” na „{new_name}”" + +#: src/rc_formatters.py:1254 +msgid "Action has been hidden by administration" +msgstr "Akcja została ukryta przez administrację" + +#: src/rc_formatters.py:1288 +msgid "**Added**: " +msgstr "**Dodane**: " + +#: src/rc_formatters.py:1288 +msgid " and {} more\n" +msgstr " oraz {} innych\n" + +#: src/rc_formatters.py:1289 +msgid "**Removed**: " +msgstr "**Usunięte**: " + +#: src/rc_formatters.py:1289 +msgid " and {} more" +msgstr " oraz {} innych" + +#: src/rc_formatters.py:1290 +msgid "Changed categories" +msgstr "Zmienione kategorie" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" +#~ msgstr "[{author}]({author_url}) przywrócił(a) wiki *{wiki_name}*{comment}" + +#, python-brace-format +#~ msgid "Restored a \"{wiki}\" wiki" +#~ msgstr "Przywrócono wiki „{wiki}”" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) usunął/usunęła komentarz na profilu użytkownika " +#~ "{target}" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) usunął/usunęła komentarz na swoim własnym profilu" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) imported interwiki{comment}" +#~ msgstr "[{author}]({author_url}) zaimportował(a) interwiki{comment}" + +#~ msgid "Imported interwiki" +#~ msgstr "Zaimportowano interwiki" + +#~ msgid "their own profile" +#~ msgstr "swoim własnym profilu" + +#~ msgid "their own" +#~ msgstr "swój własny" + +#, python-brace-format +#~ msgid "[{target}]({target_url})'s" +#~ msgstr "na profilu użytkownika [{target}]({target_url})" + +#, python-brace-format +#~ msgid "[their own]({target_url})" +#~ msgstr "na [swoim własnym profilu użytkownika]({target_url})" diff --git a/locale/pt-br/LC_MESSAGES/formatters.po b/locale/pt-br/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..d2a12da --- /dev/null +++ b/locale/pt-br/LC_MESSAGES/formatters.po @@ -0,0 +1,1747 @@ +# #-#-#-#-# discussion_formatters.po #-#-#-#-# +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Frisk <>, 2020. +# #-#-#-#-# rc_formatters.po #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"PO-Revision-Date: 2020-12-13 14:30+0000\n" +"Last-Translator: MarkusRost \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt-br\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 4.2.1\n" +"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"PO-Revision-Date: 2020-12-29 15:21+0000\n" +"Last-Translator: Eduaddad \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt-br\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.2.1\n" + +#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 +#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 +#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 +msgid "unknown" +msgstr "desconhecido" + +#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 +#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 +#: src/rc_formatters.py:75 src/rc_formatters.py:96 +msgid "Unregistered user" +msgstr "Usuário não registrado" + +#: src/discussion_formatters.py:39 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) criou [{title}](<{url}f/p/{threadId}>) em " +"{forumName}" + +#: src/discussion_formatters.py:42 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) criou uma pesquisa [{title}](<{url}f/p/{threadId}>) " +"em {forumName}" + +#: src/discussion_formatters.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) criou um quiz [{title}](<{url}f/p/{threadId}>) em " +"{forumName}" + +#: src/discussion_formatters.py:54 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" +"[{author}]({author_url}) criou uma [resposta](<{url}f/p/{threadId}/r/{postId}" +">) a [{title}](<{url}f/p/{threadId}>) em {forumName}" + +#: src/discussion_formatters.py:61 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) criou [{title}](<{url}wiki/Message_Wall:{user_wall}?" +"threadId={threadId}>) no mural de mensagens de [{user}](<{url}wiki/" +"Message_Wall:{user_wall}>)" + +#: src/discussion_formatters.py:64 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) criou uma [resposta](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) a [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) no mural de mensagens de " +"[{user}](<{url}wiki/Message_Wall:{user_wall}>)" + +#: src/discussion_formatters.py:72 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) fez um [comentário](<{url}?commentId={commentId}>) " +"em [{article}](<{url}>)" + +#: src/discussion_formatters.py:78 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) criou uma [resposta](<{url}?commentId={commentId}" +"&replyId={replyId}>) a um [comentário](<{url}?commentId={commentId}>) em " +"[{article}](<{url}>)" + +#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" +"Evento `{event}` desconhecido por [{author}]({author_url}), relate no " +"[servidor de suporte](<{support}>)." + +#: src/discussion_formatters.py:123 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "Criou \"{title}\"" + +#: src/discussion_formatters.py:127 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "Criou uma pesquisa \"{title}\"" + +#: src/discussion_formatters.py:134 +msgid "Option {}" +msgstr "Opção {}" + +#: src/discussion_formatters.py:135 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[Ver imagem]({image_url})__" + +#: src/discussion_formatters.py:139 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "Criou um quiz \"{title}\"" + +#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 +#: src/rc_formatters.py:1283 +msgid "Tags" +msgstr "Etiquetas" + +#: src/discussion_formatters.py:155 +msgid "{} tags" +msgstr "{} etiquetas" + +#: src/discussion_formatters.py:160 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "Respondeu \"{title}\"" + +#: src/discussion_formatters.py:169 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "Criou \"{title}\" no mural de mensagens de {user}" + +#: src/discussion_formatters.py:173 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "Respondeu \"{title}\" no mural de mensagens de {user}" + +#: src/discussion_formatters.py:180 +#, python-brace-format +msgid "Commented on {article}" +msgstr "Comentou em {article}" + +#: src/discussion_formatters.py:184 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "Respondeu a um comentário em {article}" + +#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#, fuzzy, python-brace-format +msgid "Unknown event `{event}`" +msgstr "" +"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +"Evento `{event}` desconhecido\n" +"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" +"Evento desconhecido `{event}`" + +#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 +#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 +msgid "Report this on the support server" +msgstr "Reportar isso no servidor de suporte" + +#: src/rc_formatters.py:28 +msgid "None" +msgstr "Nenhum" + +#: src/rc_formatters.py:28 +msgid "Warning issued" +msgstr "Aviso emitido" + +#: src/rc_formatters.py:28 +msgid "**Blocked user**" +msgstr "**Usuário bloqueado**" + +#: src/rc_formatters.py:28 +msgid "Tagged the edit" +msgstr "Marcou a edição" + +#: src/rc_formatters.py:28 +msgid "Disallowed the action" +msgstr "Desautorizado a ação" + +#: src/rc_formatters.py:28 +msgid "**IP range blocked**" +msgstr "**Faixa de IP bloqueada**" + +#: src/rc_formatters.py:28 +msgid "Throttled actions" +msgstr "Ações estranguladas" + +#: src/rc_formatters.py:28 +msgid "Removed autoconfirmed group" +msgstr "Grupo auto-confirmado removido" + +#: src/rc_formatters.py:28 +msgid "**Removed from privileged groups**" +msgstr "**Removido de grupos privilegiados**" + +#: src/rc_formatters.py:29 +msgid "Edit" +msgstr "Edição" + +#: src/rc_formatters.py:29 +msgid "Upload" +msgstr "Carregamento" + +#: src/rc_formatters.py:29 +msgid "Move" +msgstr "Movimentação" + +#: src/rc_formatters.py:29 +msgid "Stash upload" +msgstr "Carregamento múltiplo" + +#: src/rc_formatters.py:29 +msgid "Deletion" +msgstr "Exclusão" + +#: src/rc_formatters.py:29 +msgid "Account creation" +msgstr "Criação de conta" + +#: src/rc_formatters.py:29 +msgid "Auto account creation" +msgstr "Criação automática de contas" + +#: src/rc_formatters.py:83 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" +"[{author}]({author_url}) disparou *{abuse_filter}*, executando a ação " +"\"{action}\" em *[{target}]({target_url})* - ação realizada: {result}." + +#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 +#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 +#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 +#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 +#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 +#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 +#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 +#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 +#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 +msgid "Unknown" +msgstr "Desconhecido" + +#: src/rc_formatters.py:116 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) editou [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" + +#: src/rc_formatters.py:118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) criou [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" + +#: src/rc_formatters.py:121 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) carregou [{file}]({file_link}){comment}" + +#: src/rc_formatters.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" +"[{author}]({author_url}) reverteu uma versão de [{file}]({file_link})" +"{comment}" + +#: src/rc_formatters.py:132 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) carregou uma nova versão de [{file}]({file_link})" +"{comment}" + +#: src/rc_formatters.py:135 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "[{author}]({author_url}) excluiu [{page}]({page_link}){comment}" + +#: src/rc_formatters.py:141 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" +"[{author}]({author_url}) excluiu o redirecionamento substituindo [{page}]" +"({page_link}){comment}" + +#: src/rc_formatters.py:147 src/rc_formatters.py:152 +msgid "without making a redirect" +msgstr "sem fazer um redirecionamento" + +#: src/rc_formatters.py:147 src/rc_formatters.py:153 +msgid "with a redirect" +msgstr "com um redirecionamento" + +#: src/rc_formatters.py:148 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) moveu {redirect}*{article}* para [{target}]" +"({target_url}) {made_a_redirect}{comment}" + +#: src/rc_formatters.py:154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) moveu {redirect}*{article}* para [{target}]" +"({target_url}) deixando um redirecionamento {made_a_redirect}{comment}" + +#: src/rc_formatters.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) moveu as configurações de proteção de {redirect}" +"*{article}* para [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:170 src/rc_formatters.py:855 +msgid "for infinity and beyond" +msgstr "para o infinito e além" + +#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#, python-brace-format +msgid "for {num} {translated_length}" +msgstr "por {num} {translated_length}" + +#: src/rc_formatters.py:185 src/rc_formatters.py:867 +msgid "until {}" +msgstr "até {}" + +#: src/rc_formatters.py:189 +msgid " on pages: " +msgstr " nas páginas: " + +#: src/rc_formatters.py:196 src/rc_formatters.py:881 +msgid " and namespaces: " +msgstr " e espaços nominais: " + +#: src/rc_formatters.py:198 +msgid " on namespaces: " +msgstr " nos espaços nominais: " + +#: src/rc_formatters.py:210 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) bloqueou [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" + +#: src/rc_formatters.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) alterou as configurações de bloqueio de " +"[{blocked_user}]({user_url}){comment}" + +#: src/rc_formatters.py:218 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) desbloqueou [{blocked_user}]({user_url}){comment}" + +#: src/rc_formatters.py:223 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) deixou um [comentário]({comment}) no perfil de " +"{target}" + +#: src/rc_formatters.py:225 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) deixou um [comentário]({comment}) no próprio perfil" + +#: src/rc_formatters.py:231 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile" +msgstr "" +"[{author}]({author_url}) respondeu a um [comentário]({comment}) no perfil de " +"{target}" + +#: src/rc_formatters.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile" +msgstr "" +"[{author}]({author_url}) respondeu a um [comentário]({comment}) no próprio " +"perfil" + +#: src/rc_formatters.py:245 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) editou um [comentário]({comment}) no perfil de " +"{target}" + +#: src/rc_formatters.py:251 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) editou um [comentário]({comment}) no próprio perfil" + +#: src/rc_formatters.py:257 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +msgstr "[{author}]({author_url}) limpou um comentário no perfil de {target}" + +#: src/rc_formatters.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on their own profile" +msgstr "[{author}]({author_url}) limpou um comentário no próprio perfil" + +#: src/rc_formatters.py:267 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) excluiu um [comentário]({comment}) no perfil de " +"{target}" + +#: src/rc_formatters.py:269 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) excluiu um [comentário]({comment}) no próprio perfil" + +#: src/rc_formatters.py:274 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) editou o {field} no perfil de [{target}]" +"({target_url}). *({desc})*" + +#: src/rc_formatters.py:281 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) editou o {field} em seu [próprio perfil]" +"({target_url}). *({desc})*" + +#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 +#: src/rc_formatters.py:979 +msgid "none" +msgstr "nenhum" + +#: src/rc_formatters.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) from {old_groups} to {new_groups}{comment}" +msgstr "" +"[{author}]({author_url}) alterou os privilégios do usuário [{target}]" +"({target_url}) de {old_groups} para {new_groups}{comment}" + +#: src/rc_formatters.py:303 +#, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) from {old_groups} to " +"{new_groups}{comment}" +msgstr "" +"{author} autopromoveu [{target}]({target_url}) de {old_groups} para " +"{new_groups}{comment}" + +#: src/rc_formatters.py:304 src/rc_formatters.py:965 +msgid "System" +msgstr "Sistema" + +#: src/rc_formatters.py:309 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) protegeu [{article}]({article_url}) com as " +"seguintes configurações: {settings}{comment}" + +#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 +#: src/rc_formatters.py:993 +msgid " [cascading]" +msgstr " [em cascata]" + +#: src/rc_formatters.py:316 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) modificou as configurações de proteção de " +"[{article}]({article_url}) para: {settings}{comment}" + +#: src/rc_formatters.py:323 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) removeu a proteção de [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:327 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) alterou a visibilidade de uma revisão na página " +"[{article}]({article_url}){comment}" +msgstr[1] "" +"[{author}]({author_url}) alterou a visibilidade de {amount} revisões na " +"página [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:340 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" +"[{author}]({author_url}) importou [{article}]({article_url}) com {count} " +"revisão{comment}" +msgstr[1] "" +"[{author}]({author_url}) importou [{article}]({article_url}) com {count} " +"revisões{comment}" + +#: src/rc_formatters.py:345 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "[{author}]({author_url}) restaurou [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:347 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "" +"[{author}]({author_url}) mudou a visibilidade dos eventos de " +"registro{comment}" + +#: src/rc_formatters.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) importou [{article}]({article_url}) com {count} " +"revisão{comment} de [{source}]({source_url}){comment}" +msgstr[1] "" +"[{author}]({author_url}) importou [{article}]({article_url}) com {count} " +"revisões{comment} de [{source}]({source_url}){comment}" + +#: src/rc_formatters.py:364 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) editou o filtro de abuso [number {number}]" +"({filter_url})" + +#: src/rc_formatters.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) criou o filtro de abuso [number {number}]" +"({filter_url})" + +#: src/rc_formatters.py:372 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" +"[{author}]({author_url}) mesclou o histórico de revisão de [{article}]" +"({article_url}) com [{dest}]({dest_url}){comment}" + +#: src/rc_formatters.py:375 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "Conta [{author}]({author_url}) foi criada automaticamente" + +#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "Conta [{author}]({author_url}) foi criada" + +#: src/rc_formatters.py:380 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" +"Conta [{article}]({article_url}) foi criada por [{author}]({author_url})" +"{comment}" + +#: src/rc_formatters.py:383 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" +"Conta [{article}]({article_url}) foi criada por [{author}]({author_url}) e a " +"senha foi enviada por e-mail{comment}" + +#: src/rc_formatters.py:388 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) adicionou uma entrada à [tabela de interwiki]" +"({table_url}) apontando para {website} com o prefixo {prefix}" + +#: src/rc_formatters.py:394 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) editou uma entrada na [tabela de Interwiki]" +"({table_url}) apontando para {website} com o prefixo {prefix}" + +#: src/rc_formatters.py:400 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +msgstr "" +"[{author}]({author_url}) excluiu uma entrada na [tabela de Interwiki]" +"({table_url})" + +#: src/rc_formatters.py:403 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" +"[{author}]({author_url}) mudou o modelo de conteúdo da página [{article}]" +"({article_url}) de {old} para {new}{comment}" + +#: src/rc_formatters.py:407 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" +"[{author}]({author_url}) criou a página [{article}]({article_url}) usando um " +"modelo de conteúdo não padrão {new}{comment}" + +#: src/rc_formatters.py:410 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) editou o sprite para [{article}]({article_url})" + +#: src/rc_formatters.py:413 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) criou a folha de sprite para [{article}]" +"({article_url})" + +#: src/rc_formatters.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "[{author}]({author_url}) editou a peça para [{article}]({article_url})" + +#: src/rc_formatters.py:421 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) criou a tabela Cargo \"{table}\"" + +#: src/rc_formatters.py:423 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) excluiu a tabela Cargo \"{table}\"" + +#: src/rc_formatters.py:428 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) recriou a tabela Cargo \"{table}\"" + +#: src/rc_formatters.py:433 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) substituiu a tabela Cargo \"{table}\"" + +#: src/rc_formatters.py:436 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) criou a [etiqueta]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:441 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) excluiu a [etiqueta]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:443 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +"[{author}]({author_url}) importou [{article}]({article_url}) com {count} " +"revisão{comment}" +msgstr[1] "" +"[{author}]({author_url}) importou [{article}]({article_url}) com {count} " +"revisões{comment}" + +#: src/rc_formatters.py:449 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) ativou a [etiqueta]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:452 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) desativou a [etiqueta]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:454 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) alterou as configurações da wiki{reason}" + +#: src/rc_formatters.py:456 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) excluiu uma wiki *{wiki_name}*{comment}" + +#: src/rc_formatters.py:459 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) travou uma wiki *{wiki_name}*{comment}" + +#: src/rc_formatters.py:462 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) modificou o espaço nominal *{namespace_name}* " +"em*{wiki_name}*{comment}" + +#: src/rc_formatters.py:467 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) excluiu o espaço nominal *{namespace_name}* em " +"*{wiki_name}* ({comment})" + +#: src/rc_formatters.py:473 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" +"[{author}]({author_url}) modificou o grupo de usuário *{group_name}*{comment}" + +#: src/rc_formatters.py:477 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) excluiu uma wiki *{wiki_name}*{comment}" + +#: src/rc_formatters.py:481 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) destravou a wiki *{wiki_name}*{comment}" + +#: src/rc_formatters.py:486 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "[{author}]({author_url}) gerou *{file}* de despejo{comment}" + +#: src/rc_formatters.py:491 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "[{author}]({author_url}) excluiu *{file}* de despejo{comment}" + +#: src/rc_formatters.py:502 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" +"[{author}]({author_url}) marcou [{article}]({article_url}) para " +"tradução{comment}" + +#: src/rc_formatters.py:509 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" +"[{author}]({author_url}) removeu [{article}]({article_url}) do sistema de " +"tradução{comment}" + +#: src/rc_formatters.py:516 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) completou a movimentação das páginas de tradução de " +"*{article}* para [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:524 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) encontrou um problema ao se mover [{article}]" +"({article_url}) para [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:532 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translatable page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) completou a exclusão da página traduzível " +"[{article}]({article_url}){comment}" + +#: src/rc_formatters.py:540 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) falhou em deletar [{article}]({article_url}) que " +"pertence à página traduzível [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:548 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) completou a exclusão da página de tradução " +"[{article}]({article_url}){comment}" + +#: src/rc_formatters.py:556 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) falhou em deletar [{article}]({article_url}) que " +"pertence à página de tradução [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:564 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) incentivou a tradução de [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:571 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) incentivou a tradução de [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:581 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) limitou idiomas para [{article}]({article_url}) " +"para`{languages}`{comment}" + +#: src/rc_formatters.py:587 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) definiu os idiomas prioritários para [{article}]" +"({article_url}) para `{languages}`{comment}" + +#: src/rc_formatters.py:593 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) removeu idiomas prioritários de [{article}]" +"({article_url}){comment}" + +#: src/rc_formatters.py:600 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) adicionou a página traduzível [{article}]" +"({article_url}) para agregar o grupo \"{group}\"{comment}" + +#: src/rc_formatters.py:607 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) removeu a página traduzida [{article}]" +"({article_url}) do grupo agregado \"{group}\"{comment}" + +#: src/rc_formatters.py:619 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) revisou a tradução [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:627 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) mudou o estado das traduçõe de `{language}` de " +"[{article}]({article_url}) de `{old_state}` para `{new_state}`{comment}" + +#: src/rc_formatters.py:634 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) mudou o estado de traduções `{language}` de " +"[{article}]({article_url}) para `{new_state}`{comment}" + +#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 +#: src/rc_formatters.py:1241 +msgid "(default)" +msgstr "(padrão)" + +#: src/rc_formatters.py:647 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" +"[{author}]({author_url}) mudou o idioma do [{article}]({article_url}) de " +"{old_lang} para {new_lang}{comment}" + +#: src/rc_formatters.py:656 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" +"[{author}]({author_url}) renomeou usuário *{old_name}* com edição {edits} " +"para [{new_name}]({link}){comment}" +msgstr[1] "" +"[{author}]({author_url}) renomeou usuário *{old_name}* com edições {edits} " +"para [{new_name}]({link}){comment}" + +#: src/rc_formatters.py:661 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) renomeou o usuário *{old_name}* para [{new_name}]" +"({link}){comment}" + +#: src/rc_formatters.py:665 +msgid "An action has been hidden by administration." +msgstr "Uma ação foi oculta pela administração." + +#: src/rc_formatters.py:681 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "{user} disparou \"{abuse_filter}\"" + +#: src/rc_formatters.py:682 +msgid "Performed" +msgstr "Realizado" + +#: src/rc_formatters.py:683 +msgid "Action taken" +msgstr "Medida tomada" + +#: src/rc_formatters.py:684 +msgid "Title" +msgstr "Título" + +#: src/rc_formatters.py:693 src/rc_formatters.py:980 +msgid "No description provided" +msgstr "Nenhuma descrição fornecida" + +#: src/rc_formatters.py:717 +msgid "(N!) " +msgstr "(N!) " + +#: src/rc_formatters.py:718 +msgid "m" +msgstr "m" + +#: src/rc_formatters.py:718 +msgid "b" +msgstr "r" + +#: src/rc_formatters.py:735 src/rc_formatters.py:740 +msgid "__Only whitespace__" +msgstr "__Apenas espaço em branco__" + +#: src/rc_formatters.py:745 +msgid "Removed" +msgstr "Removido" + +#: src/rc_formatters.py:747 +msgid "Added" +msgstr "Adicionado" + +#: src/rc_formatters.py:781 src/rc_formatters.py:820 +msgid "Options" +msgstr "Opções" + +#: src/rc_formatters.py:781 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([visualização]({link}) | [desfazer]({undolink}))" + +#: src/rc_formatters.py:786 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "Carregou uma nova versão de {name}" + +#: src/rc_formatters.py:788 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "Reverteu uma versão do {name}" + +#: src/rc_formatters.py:790 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "Carregou {name}" + +#: src/rc_formatters.py:806 +msgid "**No license!**" +msgstr "**Sem licença!**" + +#: src/rc_formatters.py:818 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"Licença: {}" + +#: src/rc_formatters.py:820 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([visualização]({link}))" + +#: src/rc_formatters.py:825 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "Excluiu a página {article}" + +#: src/rc_formatters.py:830 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "Excluiu redirecionamento {article} ao sobrescrever" + +#: src/rc_formatters.py:836 +msgid "No redirect has been made" +msgstr "Nenhum redirecionamento foi feito" + +#: src/rc_formatters.py:837 +msgid "A redirect has been made" +msgstr "Foi feito um redirecionamento" + +#: src/rc_formatters.py:838 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "Movido {redirect}{article} para {target}" + +#: src/rc_formatters.py:841 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "Moveu {redirect}{article} para {title} deixando um redirecionamento" + +#: src/rc_formatters.py:845 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "Moveu configurações de proteção de {redirect}{article} para {title}" + +#: src/rc_formatters.py:869 +msgid "unknown expiry time" +msgstr "tempo de expiração desconhecido" + +#: src/rc_formatters.py:874 +msgid "Blocked from editing the following pages: " +msgstr "Bloqueado de editar as seguintes páginas: " + +#: src/rc_formatters.py:883 +msgid "Blocked from editing pages on following namespaces: " +msgstr "Bloqueado de editar páginas nos seguintes espaços nominais: " + +#: src/rc_formatters.py:894 +msgid "Partial block details" +msgstr "Detalhes do bloqueio parcial" + +#: src/rc_formatters.py:895 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "Bloqueou {blocked_user} {time}" + +#: src/rc_formatters.py:899 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "Alterou configurações de bloqueio de {blocked_user}" + +#: src/rc_formatters.py:903 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "Desbloqueou {blocked_user}" + +#: src/rc_formatters.py:910 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "Deixou um comentário no perfil de {target}" + +#: src/rc_formatters.py:912 +msgid "Left a comment on their own profile" +msgstr "Deixou um comentário em seu próprio perfil" + +#: src/rc_formatters.py:919 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "Respondeu a um comentário no perfil de {target}" + +#: src/rc_formatters.py:921 +msgid "Replied to a comment on their own profile" +msgstr "Respondeu a um comentário em seu próprio perfil" + +#: src/rc_formatters.py:928 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "Editou um comentário no perfil de {target}" + +#: src/rc_formatters.py:930 +msgid "Edited a comment on their own profile" +msgstr "Editou um comentário em seu próprio perfil" + +#: src/rc_formatters.py:935 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "Editado perfil {target}" + +#: src/rc_formatters.py:937 +msgid "Edited their own profile" +msgstr "Editou seu próprio perfil" + +#: src/rc_formatters.py:939 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "Limpou o campo {field}" + +#: src/rc_formatters.py:941 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "Campo {field} alterado para: {desc}" + +#: src/rc_formatters.py:946 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "Excluiu permanentemente um comentário no perfil de {target}" + +#: src/rc_formatters.py:948 +msgid "Purged a comment on their own profile" +msgstr "Limitou um comentário em seu próprio perfil" + +#: src/rc_formatters.py:956 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "Excluiu um comentário no perfil de {target}" + +#: src/rc_formatters.py:958 +msgid "Deleted a comment on their own profile" +msgstr "Excluiu um comentário em seu próprio perfil" + +#: src/rc_formatters.py:962 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "Alterou privilégios de usuário de {target}" + +#: src/rc_formatters.py:966 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} foi promovido para um novo grupo de usuários" + +#: src/rc_formatters.py:981 +#, python-brace-format +msgid "Groups changed from {old_groups} to {new_groups}{reason}" +msgstr "Grupos alterados de {old_groups} para {new_groups}{reason}" + +#: src/rc_formatters.py:985 +#, python-brace-format +msgid "Protected {target}" +msgstr "Protegeu {target}" + +#: src/rc_formatters.py:991 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "Alterou nível de proteção de {article}" + +#: src/rc_formatters.py:997 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "Removeu a proteção de {article}" + +#: src/rc_formatters.py:1001 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "Alterou a visibilidade da revisão na página {article} " +msgstr[1] "Alterou a visibilidade de {amount} revisões na página {article} " + +#: src/rc_formatters.py:1013 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "Importou {article} com {count} revisão" +msgstr[1] "Importou {article} com {count} revisões" + +#: src/rc_formatters.py:1018 +#, python-brace-format +msgid "Restored {article}" +msgstr "Restaurou {article}" + +#: src/rc_formatters.py:1021 +msgid "Changed visibility of log events" +msgstr "Alterou a visibilidade de eventos de registros" + +#: src/rc_formatters.py:1031 +#, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "Importou {article} com {count} revisão de \"{source}\"" +msgstr[1] "Importou {article} com {count} revisões de \"{source}\"" + +#: src/rc_formatters.py:1036 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "Editou filtro de abusos número {number}" + +#: src/rc_formatters.py:1039 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "Criou filtro de abusos número {number}" + +#: src/rc_formatters.py:1042 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "Mesclou os históricos de revisão de {article} com {dest}" + +#: src/rc_formatters.py:1046 +msgid "Created account automatically" +msgstr "Criou uma conta automaticamente" + +#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 +msgid "Created account" +msgstr "Criou uma conta" + +#: src/rc_formatters.py:1052 +#, python-brace-format +msgid "Created account {article}" +msgstr "Criou conta {article}" + +#: src/rc_formatters.py:1055 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "Criou conta {article} e a senha foi enviada por e-mail" + +#: src/rc_formatters.py:1061 +msgid "Added an entry to the interwiki table" +msgstr "Adicionou uma entrada para a tabela interwiki" + +#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Prefixo: {prefix}, site: {website} | {desc}" + +#: src/rc_formatters.py:1067 +msgid "Edited an entry in interwiki table" +msgstr "Editou uma entrada na tabela interwiki" + +#: src/rc_formatters.py:1073 +msgid "Deleted an entry in interwiki table" +msgstr "Excluiu uma entrada na tabela interwiki" + +#: src/rc_formatters.py:1074 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Prefixo: {prefix} | {desc}" + +#: src/rc_formatters.py:1077 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "Alterou o modelo de conteúdo da página {article}" + +#: src/rc_formatters.py:1078 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "Modelo alterado de {old} para {new}: {reason}" + +#: src/rc_formatters.py:1083 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "Criou a página {article} usando um modelo de conteúdo não padrão" + +#: src/rc_formatters.py:1084 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "Criado com modelo {new}: {reason}" + +#: src/rc_formatters.py:1087 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "Editou o sprite de {article}" + +#: src/rc_formatters.py:1090 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "Criou a folha de sprites de {article}" + +#: src/rc_formatters.py:1093 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "Editou a peça de {article}" + +#: src/rc_formatters.py:1099 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "Criou a tabela Cargo \"{table}\"" + +#: src/rc_formatters.py:1103 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "Excluiu a tabela Cargo \"{table}\"" + +#: src/rc_formatters.py:1110 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "Recriou a tabela Cargo \"{table}\"" + +#: src/rc_formatters.py:1117 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "Substituiu a tabela Cargo \"{table}\"" + +#: src/rc_formatters.py:1121 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "Criou uma etiqueta \"{tag}\"" + +#: src/rc_formatters.py:1125 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "Excluiu uma etiqueta \"{tag}\"" + +#: src/rc_formatters.py:1127 +#, fuzzy +msgid "Removed from" +msgstr "Removido" + +#: src/rc_formatters.py:1127 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: src/rc_formatters.py:1131 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "Ativou uma etiqueta \"{tag}\"" + +#: src/rc_formatters.py:1134 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "Desativou uma etiqueta \"{tag}\"" + +#: src/rc_formatters.py:1137 +msgid "Changed wiki settings" +msgstr "Alterou configurações da wiki" + +#: src/rc_formatters.py:1141 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "Excluiu a wiki \"{wiki}\"" + +#: src/rc_formatters.py:1144 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "Travou a wiki \"{wiki}\"" + +#: src/rc_formatters.py:1147 +#, fuzzy, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "Modificou o espaço nominal \"{namespace_name}\"" + +#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 +msgid "Wiki" +msgstr "Wiki" + +#: src/rc_formatters.py:1151 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "Excluiu o espaço nominal \"{namespace_name}\"" + +#: src/rc_formatters.py:1157 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "Modificou o grupo de usuário \"{usergroup_name}\"" + +#: src/rc_formatters.py:1160 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "Excluiu a wiki \"{wiki}\"" + +#: src/rc_formatters.py:1163 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "Destravou a wiki \"{wiki}\"" + +#: src/rc_formatters.py:1166 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "Gerou despejo de {file}" + +#: src/rc_formatters.py:1169 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "Excluiu {file} de despejo" + +#: src/rc_formatters.py:1177 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "Marcado \"{article}\" para tradução" + +#: src/rc_formatters.py:1180 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "Removido \"{article}\" do sistema de tradução" + +#: src/rc_formatters.py:1183 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" +"Concluída a movimentação das páginas de tradução de \"{article}\" para " +"\"{target}\"" + +#: src/rc_formatters.py:1186 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" +"Encontrou um problema durante o movimento \"{article}\" para \"{target}\"" + +#: src/rc_formatters.py:1189 +#, python-brace-format +msgid "Completed deletion of translatable page \"{article}\"" +msgstr "Exclusão concluída da página traduzível \"{article}\"" + +#: src/rc_formatters.py:1192 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" +"Falha ao excluir \"{article}\" que pertence à página traduzível \"{target}\"" + +#: src/rc_formatters.py:1195 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "Concluiu a exclusão da página de tradução \"{article}\"" + +#: src/rc_formatters.py:1198 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" +"Falha ao excluir \"{article}\" que pertence à página de tradução \"{target}\"" + +#: src/rc_formatters.py:1201 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "Incentivou a tradução de \"{article}\"" + +#: src/rc_formatters.py:1204 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "Tradução desencorajada de \"{article}\"" + +#: src/rc_formatters.py:1210 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "Idiomas limitados para \"{article}\" para `{languages}`" + +#: src/rc_formatters.py:1212 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "Idiomas prioritários para \"{article}\" definido como `{languages}`" + +#: src/rc_formatters.py:1214 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "Removeu Idiomas prioritários de \"{article}\"" + +#: src/rc_formatters.py:1217 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" +"Adicionada página traduzível \"{article}\" para agregar o grupo \"{group}\"" + +#: src/rc_formatters.py:1220 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "Página traduzível removida \"{article}\" do grupo agregado \"{group}\"" + +#: src/rc_formatters.py:1227 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "Revisou a tradução \"{article}\"" + +#: src/rc_formatters.py:1230 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "Mudou o estado de traduções de`{language}` de \"{article}\"" + +#: src/rc_formatters.py:1232 +msgid "Old state" +msgstr "Estado antigo" + +#: src/rc_formatters.py:1233 +msgid "New state" +msgstr "Novo estado" + +#: src/rc_formatters.py:1242 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "Mudou o idioma de \"{article}\"" + +#: src/rc_formatters.py:1243 +msgid "Old language" +msgstr "Idioma antigo" + +#: src/rc_formatters.py:1244 +msgid "New language" +msgstr "Novo idioma" + +#: src/rc_formatters.py:1248 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +"Usuário renomeado \"{old_name}\" com edição de {edits} para \"{new_name}\"" +msgstr[1] "" +"Usuário renomeado \"{old_name}\" com edições {edits} para \"{new_name}\"" + +#: src/rc_formatters.py:1250 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "Renomeou usuário \"{old_name}\" para \"{new_name}\"" + +#: src/rc_formatters.py:1254 +msgid "Action has been hidden by administration" +msgstr "A ação foi oculta pela administração" + +#: src/rc_formatters.py:1288 +msgid "**Added**: " +msgstr "**Adicionado**: " + +#: src/rc_formatters.py:1288 +msgid " and {} more\n" +msgstr " e {} mais\n" + +#: src/rc_formatters.py:1289 +msgid "**Removed**: " +msgstr "**Removida**: " + +#: src/rc_formatters.py:1289 +msgid " and {} more" +msgstr " e {} mais" + +#: src/rc_formatters.py:1290 +msgid "Changed categories" +msgstr "Mudanças de categorias" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" +#~ msgstr "[{author}]({author_url}) restaurou a wiki *{wiki_name}*{comment}" + +#, python-brace-format +#~ msgid "Restored a \"{wiki}\" wiki" +#~ msgstr "Restaurou uma wiki \"{wiki}\"" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) excluiu um comentário no perfil de {target}" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on their own profile" +#~ msgstr "[{author}]({author_url}) excluiu um comentário no próprio perfil" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) imported interwiki{comment}" +#~ msgstr "[{author}]({author_url}) importou um interwiki{comment}" + +#~ msgid "Imported interwiki" +#~ msgstr "Importou interwiki" + +#~ msgid "their own profile" +#~ msgstr "seu próprio perfil" + +#~ msgid "their own" +#~ msgstr "próprio" + +#, python-brace-format +#~ msgid "[{target}]({target_url})'s" +#~ msgstr "[{target}]({target_url})" + +#, python-brace-format +#~ msgid "[their own]({target_url})" +#~ msgstr "[seu próprio]({target_url})" diff --git a/locale/ru/LC_MESSAGES/formatters.po b/locale/ru/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..0064699 --- /dev/null +++ b/locale/ru/LC_MESSAGES/formatters.po @@ -0,0 +1,1792 @@ +# #-#-#-#-# discussion_formatters.po #-#-#-#-# +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Frisk <>, 2020. +# #-#-#-#-# rc_formatters.po #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"PO-Revision-Date: 2020-12-29 15:21+0000\n" +"Last-Translator: Philo04 \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 4.2.1\n" +"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"PO-Revision-Date: 2020-12-30 13:26+0000\n" +"Last-Translator: Philo04 \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.2.1\n" + +#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 +#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 +#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 +msgid "unknown" +msgstr "неизвестно" + +#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 +#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 +#: src/rc_formatters.py:75 src/rc_formatters.py:96 +msgid "Unregistered user" +msgstr "Незарегистрированный пользователь" + +#: src/discussion_formatters.py:39 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) создал(а) [{title}](<{url}f/p/{threadId}>) в " +"{forumName}" + +#: src/discussion_formatters.py:42 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) создал(а) опрос [{title}](<{url}f/p/{threadId}>) в " +"{forumName}" + +#: src/discussion_formatters.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) создал викторину [{title}](<{url}f/p/{threadId}>) в " +"{forumName}" + +#: src/discussion_formatters.py:54 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" +"[{author}]({author_url}) [ответил](<{url}f/p/{threadId}/r/{postId}>) на " +"[{title}](<{url}f/p/{threadId}>) в {forumName}" + +#: src/discussion_formatters.py:61 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) создал [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) на [Стене Обсуждения Участника {user}]" +"(<{url}wiki/Message_Wall:{user_wall}>)" + +#: src/discussion_formatters.py:64 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) [ответил](<{url}wiki/Message_Wall:{user_wall}?" +"threadId={threadId}#{replyId}>) на [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) на [Стене Обсуждения Участника {user}]" +"(<{url}wiki/Message_Wall:{user_wall}>)" + +#: src/discussion_formatters.py:72 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) оставил [комментарий](<{url}?commentId={commentId}" +">) к [{article}](<{url}>)" + +#: src/discussion_formatters.py:78 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) [ответил](<{url}?commentId={commentId}" +"&replyId={replyId}>) на [комментарий](<{url}?commentId={commentId}>) к " +"[{article}](<{url}>)" + +#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" +"Неизвестное событие `{event}`, выполненное участником [{author}]" +"({author_url}), сообщите об этом на [сервере поддержки](<{support}>)." + +#: src/discussion_formatters.py:123 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "Создал \"{title}\"" + +#: src/discussion_formatters.py:127 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "Создал опрос \"{title}\"" + +#: src/discussion_formatters.py:134 +msgid "Option {}" +msgstr "Вариант {}" + +#: src/discussion_formatters.py:135 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[Просмотреть изображение]({image_url})__" + +#: src/discussion_formatters.py:139 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "Создал викторину \"{title}\"" + +#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 +#: src/rc_formatters.py:1283 +msgid "Tags" +msgstr "Метки" + +#: src/discussion_formatters.py:155 +msgid "{} tags" +msgstr "{} меток" + +#: src/discussion_formatters.py:160 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "Ответил на \"{title}\"" + +#: src/discussion_formatters.py:169 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "Создал \"{title}\" на Стене Обсуждения Участника {user}" + +#: src/discussion_formatters.py:173 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "Ответил на \"{title}\" на Стене Обсуждения Участника {user}" + +#: src/discussion_formatters.py:180 +#, python-brace-format +msgid "Commented on {article}" +msgstr "Оставил Комментарий к статье {article}" + +#: src/discussion_formatters.py:184 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "Ответил на Комментарий к статье {article}" + +#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "Неизвестное событие `{event}`" + +#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 +#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 +#, fuzzy +msgid "Report this on the support server" +msgstr "" +"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +"Сообщите об этом на сервере поддержки\n" +"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" +"Сообщить об этом на сервер поддержки" + +#: src/rc_formatters.py:28 +msgid "None" +msgstr "Нет" + +#: src/rc_formatters.py:28 +msgid "Warning issued" +msgstr "Выдано предупреждение" + +#: src/rc_formatters.py:28 +msgid "**Blocked user**" +msgstr "**Участник заблокирован**" + +#: src/rc_formatters.py:28 +msgid "Tagged the edit" +msgstr "Проставлена метка" + +#: src/rc_formatters.py:28 +msgid "Disallowed the action" +msgstr "Действие отклонено" + +#: src/rc_formatters.py:28 +msgid "**IP range blocked**" +msgstr "**Диапазон IP-адресов заблокирован**" + +#: src/rc_formatters.py:28 +msgid "Throttled actions" +msgstr "Действия замедлены" + +#: src/rc_formatters.py:28 +msgid "Removed autoconfirmed group" +msgstr "Сняты права автоподтверждённого" + +#: src/rc_formatters.py:28 +msgid "**Removed from privileged groups**" +msgstr "**Удаление из привилегированных групп**" + +#: src/rc_formatters.py:29 +msgid "Edit" +msgstr "Правка" + +#: src/rc_formatters.py:29 +msgid "Upload" +msgstr "Загрузка Файла" + +#: src/rc_formatters.py:29 +msgid "Move" +msgstr "Переименование" + +#: src/rc_formatters.py:29 +msgid "Stash upload" +msgstr "Загрузка Файла во временное хранилище" + +#: src/rc_formatters.py:29 +msgid "Deletion" +msgstr "Удаление" + +#: src/rc_formatters.py:29 +msgid "Account creation" +msgstr "Создание учётной записи" + +#: src/rc_formatters.py:29 +msgid "Auto account creation" +msgstr "Автоматическое создание учётной записи" + +#: src/rc_formatters.py:83 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" +"[{author}]({author_url}) вызвал срабатывание *{abuse_filter}*, выполнив " +"действие \"{action}\" на странице *[{target}]({target_url})* - Предпринятые " +"меры: {result}." + +#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 +#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 +#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 +#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 +#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 +#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 +#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 +#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 +#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 +msgid "Unknown" +msgstr "Неизвестно" + +#: src/rc_formatters.py:116 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) отредактировал страницу [{article}]({edit_link})" +"{comment} {bold}({sign}{edit_size}){bold}" + +#: src/rc_formatters.py:118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) создал страницу [{article}]({edit_link}){comment} " +"{bold}({sign}{edit_size}){bold}" + +#: src/rc_formatters.py:121 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) загрузил [{file}]({file_link}){comment}" + +#: src/rc_formatters.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" +"[{author}]({author_url}) возвратил версию [{file}]({file_link}) {comment}" + +#: src/rc_formatters.py:132 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) загрузил новую версию [{file}]({file_link}){comment}" + +#: src/rc_formatters.py:135 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "" +"[{author}]({author_url}) удалил страницу [{page}]({page_link}){comment}" + +#: src/rc_formatters.py:141 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" +"[{author}]({author_url}) удалил перенаправление с помощью перезаписи [{page}]" +"({page_link}){comment}" + +#: src/rc_formatters.py:147 src/rc_formatters.py:152 +msgid "without making a redirect" +msgstr "без перенаправления" + +#: src/rc_formatters.py:147 src/rc_formatters.py:153 +msgid "with a redirect" +msgstr "с перенаправлением" + +#: src/rc_formatters.py:148 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) переименовал страницу {redirect}*{article}* в " +"[{target}]({target_url}) {made_a_redirect}{comment}" + +#: src/rc_formatters.py:154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) переименовал страницу {redirect}*{article}* поверх " +"перенаправления в [{target}]({target_url}) {made_a_redirect}{comment}" + +#: src/rc_formatters.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) перенёс параметры защиты со страницы {redirect}" +"*{article}* на страницу [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:170 src/rc_formatters.py:855 +msgid "for infinity and beyond" +msgstr "до бесконечности и дальше" + +#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#, python-brace-format +msgid "for {num} {translated_length}" +msgstr "на {num}{translated_length}" + +#: src/rc_formatters.py:185 src/rc_formatters.py:867 +msgid "until {}" +msgstr "до {}" + +#: src/rc_formatters.py:189 +msgid " on pages: " +msgstr " на страницах: " + +#: src/rc_formatters.py:196 src/rc_formatters.py:881 +msgid " and namespaces: " +msgstr " и в пространствах имён: " + +#: src/rc_formatters.py:198 +msgid " on namespaces: " +msgstr " в пространствах имён: " + +#: src/rc_formatters.py:210 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) заблокировал участника [{user}]({user_url}) на срок " +"«{time}»{restriction_desc}{comment}" + +#: src/rc_formatters.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) изменил параметры блокировки для участника " +"[{blocked_user}]({user_url}){comment}" + +#: src/rc_formatters.py:218 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) разблокировал участника [{blocked_user}]({user_url})" +"{comment}" + +#: src/rc_formatters.py:223 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) оставил [комментарий]({comment}) на профиле " +"участника {target}" + +#: src/rc_formatters.py:225 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) оставил [комментарий]({comment}) на своём " +"собственном профиле" + +#: src/rc_formatters.py:231 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile" +msgstr "" +"[{author}]({author_url}) ответил на [комментарий]({comment}) на профиле " +"участника {target}" + +#: src/rc_formatters.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile" +msgstr "" +"[{author}]({author_url}) ответил на [комментарий]({comment}) на своём " +"собственном профиле" + +#: src/rc_formatters.py:245 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) отредактировал [комментарий]({comment}) на профиле " +"участника {target}" + +#: src/rc_formatters.py:251 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) отредактировал [комментарий]({comment}) на своём " +"собственном профиле" + +#: src/rc_formatters.py:257 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +msgstr "[{author}]({author_url}) удалил комментарий на профиле {target}" + +#: src/rc_formatters.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on their own profile" +msgstr "" +"[{author}]({author_url}) удалил комментарий на своём собственном профиле" + +#: src/rc_formatters.py:267 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) удалил [комментарий]({comment}) на профиле " +"участника {target}" + +#: src/rc_formatters.py:269 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) удалил [комментарий]({comment}) на своём " +"собственном профиле" + +#: src/rc_formatters.py:274 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) отредактировал поле «{field}» на профиле участника " +"[{target}]({target_url}). *({desc})*" + +#: src/rc_formatters.py:281 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) отредактировал поле «{field}» на [своём собственном]" +"({target_url}) профиле. *({desc})*" + +#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 +#: src/rc_formatters.py:979 +msgid "none" +msgstr "ничего" + +#: src/rc_formatters.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) from {old_groups} to {new_groups}{comment}" +msgstr "" +"[{author}]({author_url}) изменил модель содержимого страницы [{target}]" +"({target_url}) с {old_groups} на {new_groups}{comment}" + +#: src/rc_formatters.py:303 +#, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) from {old_groups} to " +"{new_groups}{comment}" +msgstr "" +"{author} изменил модель содержимого страницы [{target}]({target_url}) с " +"{old_groups} на {new_groups}{comment}" + +#: src/rc_formatters.py:304 src/rc_formatters.py:965 +msgid "System" +msgstr "Система" + +#: src/rc_formatters.py:309 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) защитил страницу [{article}]({article_url}) со " +"следующими настройками: {settings}{comment}" + +#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 +#: src/rc_formatters.py:993 +msgid " [cascading]" +msgstr " [каскадно]" + +#: src/rc_formatters.py:316 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) изменил настройки защиты страницы [{article}]" +"({article_url}) на: {settings}{comment}" + +#: src/rc_formatters.py:323 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) снял защиту со страницу [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:327 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) изменил видимость правки на странице [{article}]" +"({article_url}){comment}" +msgstr[1] "" +"[{author}]({author_url}) изменил видимость {amount} правок на странице " +"[{article}]({article_url}){comment}" +msgstr[2] "" +"[{author}]({author_url}) изменил видимость {amount} правок на странице " +"[{article}]({article_url}){comment}" + +#: src/rc_formatters.py:340 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" +"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " +"{count} правкой{comment}" +msgstr[1] "" +"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " +"{count} правками{comment}" +msgstr[2] "" +"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " +"{count} правками{comment}" + +#: src/rc_formatters.py:345 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) восстановил страницу [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:347 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "[{author}]({author_url}) изменил видимость событий журнала{comment}" + +#: src/rc_formatters.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " +"{count} версией [{source}]({source_url}){comment}" +msgstr[1] "" +"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " +"{count} версиями [{source}]({source_url}){comment}" +msgstr[2] "" +"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " +"{count} версиями [{source}]({source_url}){comment}" + +#: src/rc_formatters.py:364 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) отредактировал фильтр злоупотреблений [под номером " +"{number}]({filter_url})" + +#: src/rc_formatters.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) создал фильтр злоупотреблений [под номером {number}]" +"({filter_url})" + +#: src/rc_formatters.py:372 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" +"[{author}]({author_url}) объединил истории версий [{article}]({article_url}) " +"с [{dest}]({dest_url}){comment}" + +#: src/rc_formatters.py:375 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "Учётная запись [{author}]({author_url}) была автоматически создана" + +#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "Учётная запись [{author}]({author_url}) была создана" + +#: src/rc_formatters.py:380 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" +"Учётная запись [{article}]({article_url}) была создана [{author}]" +"({author_url}){comment}" + +#: src/rc_formatters.py:383 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" +"Учётная запись [{article}]({article_url}) была создана [{author}]" +"({author_url}) и пароль был отправлен на электронную почту{comment}" + +#: src/rc_formatters.py:388 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) добавил запись в [таблицу интервики]({table_url}), " +"указывающая на {website} с префиксом {prefix}" + +#: src/rc_formatters.py:394 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) отредактировал запись в [таблице интервики]" +"({table_url}), указывающая на {website} с префиксом {prefix}" + +#: src/rc_formatters.py:400 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +msgstr "" +"[{author}]({author_url}) удалил запись из [таблицы интервики]({table_url})" + +#: src/rc_formatters.py:403 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" +"[{author}]({author_url}) изменил модель содержимого страницы [{article}]" +"({article_url}) с {old} на {new}{comment}" + +#: src/rc_formatters.py:407 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" +"[{author}]({author_url}) создал страницу [{article}]({article_url}) с " +"использованием нестандартной модели содержимого {new}{comment}" + +#: src/rc_formatters.py:410 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) отредактировал спрайт для [{article}]({article_url})" + +#: src/rc_formatters.py:413 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) создал таблицу спрайтов для [{article}]" +"({article_url})" + +#: src/rc_formatters.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) отредактировал фрагмент для [{article}]" +"({article_url})" + +#: src/rc_formatters.py:421 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) создал таблицу Cargo \"{table}\"" + +#: src/rc_formatters.py:423 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) удалил таблицу Cargo \"{table}\"" + +#: src/rc_formatters.py:428 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) воссоздал таблицу Cargo \"{table}\"" + +#: src/rc_formatters.py:433 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) заменил таблицу Cargo \"{table}\"" + +#: src/rc_formatters.py:436 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) создал [метку]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:441 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:443 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " +"{count} правкой{comment}" +msgstr[1] "" +"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " +"{count} правками{comment}" +msgstr[2] "" +"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " +"{count} правками{comment}" + +#: src/rc_formatters.py:449 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) активировал [метку]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:452 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) деактивировал [метку]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:454 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) изменил настройки вики{reason}" + +#: src/rc_formatters.py:456 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) удалил вики *{wiki_name}*{comment}" + +#: src/rc_formatters.py:459 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) заблокировал вики *{wiki_name}*{comment}" + +#: src/rc_formatters.py:462 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) изменил пространство имён *{namespace_name}* на " +"вики *{wiki_name}*{comment}" + +#: src/rc_formatters.py:467 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) удалил пространство имён *{namespace_name}* на вики " +"*{wiki_name}*{comment}" + +#: src/rc_formatters.py:473 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" +"[{author}]({author_url}) изменил группу пользователей *{group_name}*{comment}" + +#: src/rc_formatters.py:477 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) удалил вики *{wiki_name}*{comment}" + +#: src/rc_formatters.py:481 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) разблокировал вики *{wiki_name}*{comment}" + +#: src/rc_formatters.py:486 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "[{author}]({author_url}) сгенерировал дамп *{file}*{comment}" + +#: src/rc_formatters.py:491 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "[{author}]({author_url}) удалил дамп *{file}*{comment}" + +#: src/rc_formatters.py:502 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" +"[{author}]({author_url}) пометил страницу [{article}]({article_url}) как " +"доступную для перевода{comment}" + +#: src/rc_formatters.py:509 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" +"[{author}]({author_url}) удалил [{article}]({article_url}) из системы " +"перевода{comment}" + +#: src/rc_formatters.py:516 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) переименовал доступную для перевода страницу " +"*{article}* в [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:524 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) столкнулся с проблемой при попытке переименования " +"[{article}]({article_url}) в [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:532 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translatable page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) удалил доступную для перевода страницу [{article}]" +"({article_url}){comment}" + +#: src/rc_formatters.py:540 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) не смог удалить [{article}]({article_url}), " +"относящуюся к доступной для перевода странице [{target}]({target_url})" +"{comment}" + +#: src/rc_formatters.py:548 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) удалил страницу перевода [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:556 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) не смог удалить [{article}]({article_url}), " +"относящуюся к странице перевода [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:564 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) повысил приоритет перевода страницы [{article}]" +"({article_url}){comment}" + +#: src/rc_formatters.py:571 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) понизил приоритет перевода страницы [{article}]" +"({article_url}){comment}" + +#: src/rc_formatters.py:581 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) ограничил для страницы [{article}]({article_url}) " +"список языков: `{languages}`{comment}" + +#: src/rc_formatters.py:587 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) задал для страницы [{article}]({article_url}) " +"следующий список приоритетных языков: `{languages}`{comment}" + +#: src/rc_formatters.py:593 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) удалил приоритетные языки со страницы [{article}]" +"({article_url}){comment}" + +#: src/rc_formatters.py:600 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) добавил доступную для перевода страницу [{article}]" +"({article_url}) в агрегированную группу \"{group}\"{comment}" + +#: src/rc_formatters.py:607 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) удалил доступную для перевода страницу [{article}]" +"({article_url}) из агрегированной группы \"{group}\"{comment}" + +#: src/rc_formatters.py:619 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) проверил перевод [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:627 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) изменил состояние переводов страницы [{article}]" +"({article_url}) на `{language}` язык с `{old_state}` на `{new_state}" +"`{comment}" + +#: src/rc_formatters.py:634 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) изменил состояние переводов страницы [{article}]" +"({article_url}) на `{language}` язык на `{new_state}`{comment}" + +#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 +#: src/rc_formatters.py:1241 +msgid "(default)" +msgstr "(по умолчанию)" + +#: src/rc_formatters.py:647 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" +"[{author}]({author_url}) изменил язык страницы [{article}]({article_url}) с " +"{old_lang} на {new_lang}{comment}" + +#: src/rc_formatters.py:656 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" +"[{author}]({author_url}) переименовал участника *{old_name}* с {edits} " +"правкой в [{new_name}]({link}){comment}" +msgstr[1] "" +"[{author}]({author_url}) переименовал участника *{old_name}* с {edits} " +"правками в [{new_name}]({link}){comment}" +msgstr[2] "" +"[{author}]({author_url}) переименовал участника *{old_name}* с {edits} " +"правками в [{new_name}]({link}){comment}" + +#: src/rc_formatters.py:661 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) переименовал участника *{old_name}* в [{new_name}]" +"({link}){comment}" + +#: src/rc_formatters.py:665 +msgid "An action has been hidden by administration." +msgstr "Действие было скрыто администрацией." + +#: src/rc_formatters.py:681 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "{user} вызвал срабатывание фильтра \"{abuse_filter}\"" + +#: src/rc_formatters.py:682 +msgid "Performed" +msgstr "Выполнил" + +#: src/rc_formatters.py:683 +msgid "Action taken" +msgstr "Предпринятые меры" + +#: src/rc_formatters.py:684 +msgid "Title" +msgstr "Заголовок" + +#: src/rc_formatters.py:693 src/rc_formatters.py:980 +msgid "No description provided" +msgstr "Нет описания правки" + +#: src/rc_formatters.py:717 +msgid "(N!) " +msgstr "(Н!) " + +#: src/rc_formatters.py:718 +msgid "m" +msgstr "м" + +#: src/rc_formatters.py:718 +msgid "b" +msgstr "б" + +#: src/rc_formatters.py:735 src/rc_formatters.py:740 +msgid "__Only whitespace__" +msgstr "__Только пробел__" + +#: src/rc_formatters.py:745 +msgid "Removed" +msgstr "Удалено" + +#: src/rc_formatters.py:747 +msgid "Added" +msgstr "Добавлено" + +#: src/rc_formatters.py:781 src/rc_formatters.py:820 +msgid "Options" +msgstr "Настройки" + +#: src/rc_formatters.py:781 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([просмотр]({link}) | [отмена]({undolink}))" + +#: src/rc_formatters.py:786 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "Загрузил новую версию {name}" + +#: src/rc_formatters.py:788 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "Возвратил версию {name}" + +#: src/rc_formatters.py:790 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "Загрузил {name}" + +#: src/rc_formatters.py:806 +msgid "**No license!**" +msgstr "**Отсутствует лицензия!**" + +#: src/rc_formatters.py:818 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"Лицензия: {}" + +#: src/rc_formatters.py:820 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([просмотр]({link}))" + +#: src/rc_formatters.py:825 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "Удалил страницу «{article}»" + +#: src/rc_formatters.py:830 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "Удалил перенаправление «{article}» с помощью перезаписи" + +#: src/rc_formatters.py:836 +msgid "No redirect has been made" +msgstr "Перенаправление не было сделано" + +#: src/rc_formatters.py:837 +msgid "A redirect has been made" +msgstr "Было сделано перенаправление" + +#: src/rc_formatters.py:838 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "Переименовал страницу {redirect}{article} в {target}" + +#: src/rc_formatters.py:841 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" +"Переименовал страницу {redirect}{article} в {title} поверх перенаправления" + +#: src/rc_formatters.py:845 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "Перенёс параметры защиты с «{redirect}{article}» на «{title}»" + +#: src/rc_formatters.py:869 +msgid "unknown expiry time" +msgstr "неизвестный период" + +#: src/rc_formatters.py:874 +msgid "Blocked from editing the following pages: " +msgstr "Заблокирован от редактирования в следующих страницах: " + +#: src/rc_formatters.py:883 +msgid "Blocked from editing pages on following namespaces: " +msgstr "" +"Заблокирован от редактирования на страницах в следующих пространствах имён: " + +#: src/rc_formatters.py:894 +msgid "Partial block details" +msgstr "Частичные детали блокировки" + +#: src/rc_formatters.py:895 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "Заблокировал участника {blocked_user} {time}" + +#: src/rc_formatters.py:899 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "Изменил параметры блокировки для {blocked_user}" + +#: src/rc_formatters.py:903 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "Разблокировал участника {blocked_user}" + +#: src/rc_formatters.py:910 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "Оставил комментарий на профиле участника {target}" + +#: src/rc_formatters.py:912 +msgid "Left a comment on their own profile" +msgstr "Оставил комментарий на своём профиле" + +#: src/rc_formatters.py:919 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "Ответил на комментарий на профиле участника {target}" + +#: src/rc_formatters.py:921 +msgid "Replied to a comment on their own profile" +msgstr "Ответил на комментарий на своём профиле" + +#: src/rc_formatters.py:928 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "Отредактировал комментарий на профиле участника {target}" + +#: src/rc_formatters.py:930 +msgid "Edited a comment on their own profile" +msgstr "Отредактировал комментарий на своём профиле" + +#: src/rc_formatters.py:935 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "Отредактировал профиль участника {target}" + +#: src/rc_formatters.py:937 +msgid "Edited their own profile" +msgstr "Отредактировал свой профиль" + +#: src/rc_formatters.py:939 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "Очистил поле «{field}»" + +#: src/rc_formatters.py:941 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "Поле «{field}» изменено на: {desc}" + +#: src/rc_formatters.py:946 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "Удалил комментарий в профиле {target}" + +#: src/rc_formatters.py:948 +msgid "Purged a comment on their own profile" +msgstr "Удалил комментарий на своём профиле" + +#: src/rc_formatters.py:956 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "Удалил комментарий на профиле участника {target}" + +#: src/rc_formatters.py:958 +msgid "Deleted a comment on their own profile" +msgstr "Удалил комментарий на своём профиле" + +#: src/rc_formatters.py:962 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "Изменил членство в группах для участника {target}" + +#: src/rc_formatters.py:966 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "Участник {target} был автоматически повышен до новой группы участников" + +#: src/rc_formatters.py:981 +#, python-brace-format +msgid "Groups changed from {old_groups} to {new_groups}{reason}" +msgstr "Группы изменены с {old_groups} на {new_groups}{reason}" + +#: src/rc_formatters.py:985 +#, python-brace-format +msgid "Protected {target}" +msgstr "Защитил страницу «{target}»" + +#: src/rc_formatters.py:991 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "Изменил уровень защиты для страницы «{article}»" + +#: src/rc_formatters.py:997 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "Убрал защиту со страницы «{article}»" + +#: src/rc_formatters.py:1001 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "Изменил видимость правки на странице «{article}» " +msgstr[1] "Изменил видимость {amount} правок на странице «{article}» " +msgstr[2] "Изменил видимость {amount} правок на странице «{article}» " + +#: src/rc_formatters.py:1013 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "Импортировал страницу «{article}» с {count} правкой" +msgstr[1] "Импортировал страницу «{article}» с {count} правками" +msgstr[2] "Импортировал страницу «{article}» с {count} правками" + +#: src/rc_formatters.py:1018 +#, python-brace-format +msgid "Restored {article}" +msgstr "Восстановил страницу «{article}»" + +#: src/rc_formatters.py:1021 +msgid "Changed visibility of log events" +msgstr "Изменил видимость событий в журнале" + +#: src/rc_formatters.py:1031 +#, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "Импортировал страницу «{article}» с {count} правкой из \"{source}\"" +msgstr[1] "" +"Импортировал страницу «{article}» с {count} правками из \"{source}\"" +msgstr[2] "" +"Импортировал страницу «{article}» с {count} правками из \"{source}\"" + +#: src/rc_formatters.py:1036 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "Отредактировал фильтр злоупотреблений под номером {number}" + +#: src/rc_formatters.py:1039 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "Создал фильтр злоупотреблений под номером {number}" + +#: src/rc_formatters.py:1042 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" +"Объединил историю правок страницы «{article}» с историей правок «{dest}»" + +#: src/rc_formatters.py:1046 +msgid "Created account automatically" +msgstr "Учетная запись была создана автоматически" + +#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 +msgid "Created account" +msgstr "Создана учётная запись" + +#: src/rc_formatters.py:1052 +#, python-brace-format +msgid "Created account {article}" +msgstr "Создана учетная запись {article}" + +#: src/rc_formatters.py:1055 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" +"Создана учетная запись {article} и пароль был отправлен на электронную почту" + +#: src/rc_formatters.py:1061 +msgid "Added an entry to the interwiki table" +msgstr "Добавил запись в таблицу префиксов интервики" + +#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Префикс: {prefix}, сайт: {website} | {desc}" + +#: src/rc_formatters.py:1067 +msgid "Edited an entry in interwiki table" +msgstr "Отредактировал запись в таблице префиксов интервики" + +#: src/rc_formatters.py:1073 +msgid "Deleted an entry in interwiki table" +msgstr "Удалил запись из таблицы префиксов интервики" + +#: src/rc_formatters.py:1074 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Префикс: {prefix} | {desc}" + +#: src/rc_formatters.py:1077 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "Изменил модель содержимого для страницы «{article}»" + +#: src/rc_formatters.py:1078 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "Модель изменена с «{old}» на «{new}»: {reason}" + +#: src/rc_formatters.py:1083 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" +"Создал страницу {article} с использованием нестандартной модели содержимого" + +#: src/rc_formatters.py:1084 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "Создал с использованием модели содержимого {new}: {reason}" + +#: src/rc_formatters.py:1087 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "Отредактировал спрайт для страницы «{article}»" + +#: src/rc_formatters.py:1090 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "Создал таблицу спрайтов для страницы «{article}»" + +#: src/rc_formatters.py:1093 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "Отредактировал срез для страницы «{article}»" + +#: src/rc_formatters.py:1099 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "Создал Cargo таблицу \"{table}\"" + +#: src/rc_formatters.py:1103 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "Удалил Cargo таблицу \"{table}\"" + +#: src/rc_formatters.py:1110 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "Воссоздал Cargo таблицу \"{table}\"" + +#: src/rc_formatters.py:1117 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "Заменил Cargo таблицу \"{table}\"" + +#: src/rc_formatters.py:1121 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "Создал метку «{tag}»" + +#: src/rc_formatters.py:1125 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "Удалил метку «{tag}»" + +#: src/rc_formatters.py:1127 +#, fuzzy +msgid "Removed from" +msgstr "Удалено" + +#: src/rc_formatters.py:1127 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: src/rc_formatters.py:1131 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "Активировал метку «{tag}»" + +#: src/rc_formatters.py:1134 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "Деактивировал метку «{tag}»" + +#: src/rc_formatters.py:1137 +msgid "Changed wiki settings" +msgstr "Изменил настройки вики" + +#: src/rc_formatters.py:1141 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "Удалил вики \"{wiki}\"" + +#: src/rc_formatters.py:1144 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "Заблокировал вики \"{wiki}\"" + +#: src/rc_formatters.py:1147 +#, fuzzy, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "Изменил пространство имён \"{namespace_name}\"" + +#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 +msgid "Wiki" +msgstr "Вики" + +#: src/rc_formatters.py:1151 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "Удалил пространство имён \"{namespace_name}\"" + +#: src/rc_formatters.py:1157 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "Изменил группу \"{usergroup_name}\"" + +#: src/rc_formatters.py:1160 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "Удалил вики \"{wiki}\"" + +#: src/rc_formatters.py:1163 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "Разблокировал вики \"{wiki}\"" + +#: src/rc_formatters.py:1166 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "Сгенерировал дамп {file}" + +#: src/rc_formatters.py:1169 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "Удалил дамп {file}" + +#: src/rc_formatters.py:1177 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "Пометил страницу \"{article}\" как доступную для перевода" + +#: src/rc_formatters.py:1180 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "Удалил \"{article}\" из системы перевода" + +#: src/rc_formatters.py:1183 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" +"Переименовал доступную для перевода страницу \"{article}\" в \"{target}\"" + +#: src/rc_formatters.py:1186 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" +"Столкнулся с проблемой при попытке переименования \"{article}\" в " +"\"{target}\"" + +#: src/rc_formatters.py:1189 +#, python-brace-format +msgid "Completed deletion of translatable page \"{article}\"" +msgstr "Удалил доступную для перевода страницу \"{article}\"" + +#: src/rc_formatters.py:1192 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" +"Не смог удалить \"{article}\", относящуюся к доступной для перевода странице " +"\"{target}\"" + +#: src/rc_formatters.py:1195 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "Удалил страницу перевода \"{article}\"" + +#: src/rc_formatters.py:1198 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" +"Не смог удалить \"{article}\", относящуюся к странице перевода \"{target}\"" + +#: src/rc_formatters.py:1201 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "Повысил приоритет перевода страницы \"{article}\"" + +#: src/rc_formatters.py:1204 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "Понизил приоритет перевода страницы \"{article}\"" + +#: src/rc_formatters.py:1210 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "Ограничил для страницы \"{article}\" список языков: `{languages}`" + +#: src/rc_formatters.py:1212 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" +"Задал для страницы \"{article}\" следующий список приоритетных языков: " +"`{languages}`" + +#: src/rc_formatters.py:1214 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "Удалил приоритетные языки со страницы \"{article}\"" + +#: src/rc_formatters.py:1217 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" +"Добавил доступную для перевода страницу \"{article}\" в агрегированную " +"группу \"{group}\"" + +#: src/rc_formatters.py:1220 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" +"Удалил доступную для перевода страницу \"{article}\" из агрегированной " +"группы \"{group}\"" + +#: src/rc_formatters.py:1227 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "Проверил перевод \"{article}\"" + +#: src/rc_formatters.py:1230 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" +"Изменил состояние переводов страницы \"{article}\" на `{language}` язык" + +#: src/rc_formatters.py:1232 +msgid "Old state" +msgstr "Старое состояние" + +#: src/rc_formatters.py:1233 +msgid "New state" +msgstr "Новое состояние" + +#: src/rc_formatters.py:1242 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "Изменил язык страницы «{article}»" + +#: src/rc_formatters.py:1243 +msgid "Old language" +msgstr "Старый язык" + +#: src/rc_formatters.py:1244 +msgid "New language" +msgstr "Новый язык" + +#: src/rc_formatters.py:1248 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +"Переименовал участника \"{old_name}\" с {edits} правкой в \"{new_name}\"" +msgstr[1] "" +"Переименовал участника \"{old_name}\" с {edits} правками в \"{new_name}\"" +msgstr[2] "" +"Переименовал участника \"{old_name}\" с {edits} правками в \"{new_name}\"" + +#: src/rc_formatters.py:1250 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "Переименовал участника \"{old_name}\" в \"{new_name}\"" + +#: src/rc_formatters.py:1254 +msgid "Action has been hidden by administration" +msgstr "Действие было скрыто администрацией" + +#: src/rc_formatters.py:1288 +msgid "**Added**: " +msgstr "**Добавлено**: " + +#: src/rc_formatters.py:1288 +msgid " and {} more\n" +msgstr " и ещё {}\n" + +#: src/rc_formatters.py:1289 +msgid "**Removed**: " +msgstr "**Удалено**: " + +#: src/rc_formatters.py:1289 +msgid " and {} more" +msgstr " и ещё {}" + +#: src/rc_formatters.py:1290 +msgid "Changed categories" +msgstr "Изменены категории" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" +#~ msgstr "[{author}]({author_url}) восстановил вики *{wiki_name}*{comment}" + +#, python-brace-format +#~ msgid "Restored a \"{wiki}\" wiki" +#~ msgstr "Восстановил вики \"{wiki}\"" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) удалил комментарий на профиле участника {target}" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) удалил комментарий на профиле участника {target}" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) imported interwiki{comment}" +#~ msgstr "[{author}]({author_url}) импортировал интервики{comment}" + +#~ msgid "Imported interwiki" +#~ msgstr "Импортировал префикс интервики" + +#~ msgid "their own profile" +#~ msgstr "на своём профиле" + +#~ msgid "their own" +#~ msgstr "на своём" + +#, python-brace-format +#~ msgid "[{target}]({target_url})'s" +#~ msgstr "[{target}]({target_url})" + +#, python-brace-format +#~ msgid "[their own]({target_url})" +#~ msgstr "[на своём]({target_url})" diff --git a/locale/uk/LC_MESSAGES/formatters.po b/locale/uk/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..e9e9417 --- /dev/null +++ b/locale/uk/LC_MESSAGES/formatters.po @@ -0,0 +1,1707 @@ +# #-#-#-#-# discussion_formatters.po #-#-#-#-# +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Frisk <>, 2020. +# #-#-#-#-# rc_formatters.po #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"PO-Revision-Date: 2020-04-23 23:32+0200\n" +"Last-Translator: Frisk <>\n" +"Language-Team: \n" +"Language: en_US\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 19.12.3\n" +"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"PO-Revision-Date: 2020-11-18 07:47+0000\n" +"Last-Translator: MakandIv <>\n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.2.1\n" + +#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 +#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 +#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 +msgid "unknown" +msgstr "" + +#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 +#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 +#: src/rc_formatters.py:75 src/rc_formatters.py:96 +msgid "Unregistered user" +msgstr "" + +#: src/discussion_formatters.py:39 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: src/discussion_formatters.py:42 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: src/discussion_formatters.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: src/discussion_formatters.py:54 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" + +#: src/discussion_formatters.py:61 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" + +#: src/discussion_formatters.py:64 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" + +#: src/discussion_formatters.py:72 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" + +#: src/discussion_formatters.py:78 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" + +#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" + +#: src/discussion_formatters.py:123 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "" + +#: src/discussion_formatters.py:127 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "" + +#: src/discussion_formatters.py:134 +msgid "Option {}" +msgstr "" + +#: src/discussion_formatters.py:135 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: src/discussion_formatters.py:139 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "" + +#: src/rc_formatters.py:1283 +msgid "Tags" +msgstr "Теги" + +#: src/discussion_formatters.py:155 +msgid "{} tags" +msgstr "" + +#: src/discussion_formatters.py:160 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "" + +#: src/discussion_formatters.py:169 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: src/discussion_formatters.py:173 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: src/discussion_formatters.py:180 +#, python-brace-format +msgid "Commented on {article}" +msgstr "" + +#: src/discussion_formatters.py:184 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "" + +#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "" + +#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 +msgid "Report this on the support server" +msgstr "Повідомити про це на сервер підтримки" + +#: src/rc_formatters.py:28 +msgid "None" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Warning issued" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "**Blocked user**" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Tagged the edit" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Disallowed the action" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "**IP range blocked**" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Throttled actions" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "Removed autoconfirmed group" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "**Removed from privileged groups**" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Edit" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Upload" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Move" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Stash upload" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Deletion" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Account creation" +msgstr "" + +#: src/rc_formatters.py:29 +msgid "Auto account creation" +msgstr "" + +#: src/rc_formatters.py:83 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" +"[{author}]({author_url}) перейменував {redirect}*{article}* поверх " +"перенаправлення в [{target}]({target_url}) {made_a_redirect}{comment}" + +#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 +#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 +#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 +#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 +#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 +#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 +#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 +#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 +#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 +msgid "Unknown" +msgstr "Невідомо" + +#: src/rc_formatters.py:116 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) відредагував [{article}]({edit_link}){comment} " +"({sign}{edit_size})" + +#: src/rc_formatters.py:118 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) створив [{article}]({edit_link}){comment} ({sign}" +"{edit_size})" + +#: src/rc_formatters.py:121 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) завантажив [{file}]({file_link}){comment}" + +#: src/rc_formatters.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" +"[{author}] ({author_url}) повернув версію [{file}] ({file_link}) {comment}" + +#: src/rc_formatters.py:132 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) завантажив нову версію [{file}]({file_link})" +"{comment}" + +#: src/rc_formatters.py:135 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "[{author}]({author_url}) вилучив [{page}]({page_link}){comment}" + +#: src/rc_formatters.py:141 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" +"[{author}]({author_url}) вилучив перенаправлення за допомогою перезапису " +"[{page}]({page_link}){comment}" + +#: src/rc_formatters.py:147 src/rc_formatters.py:152 +msgid "without making a redirect" +msgstr "не залишивши перенаправлення" + +#: src/rc_formatters.py:147 src/rc_formatters.py:153 +msgid "with a redirect" +msgstr "з перенаправленням" + +#: src/rc_formatters.py:148 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) перейменував {redirect}*{article}* в [{target}]" +"({target_url}) {made_a_redirect}{comment}" + +#: src/rc_formatters.py:154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) перейменував {redirect}*{article}* поверх " +"перенаправлення в [{target}]({target_url}) {made_a_redirect}{comment}" + +#: src/rc_formatters.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) переніс налаштування захисту з {redirect}*{article}" +"* на [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:170 src/rc_formatters.py:855 +#, fuzzy +msgid "for infinity and beyond" +msgstr "навіки і назавжди" + +#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#, python-brace-format +msgid "for {num} {translated_length}" +msgstr "на {num}{translated_length}" + +#: src/rc_formatters.py:185 src/rc_formatters.py:867 +msgid "until {}" +msgstr "" + +#: src/rc_formatters.py:189 +msgid " on pages: " +msgstr " на сторінках: " + +#: src/rc_formatters.py:196 src/rc_formatters.py:881 +msgid " and namespaces: " +msgstr " і в простору імен: " + +#: src/rc_formatters.py:198 +msgid " on namespaces: " +msgstr " в просторах імен: " + +#: src/rc_formatters.py:210 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) заблокував [{user}]({user_url}) на {time}" +"{restriction_desc}{comment}" + +#: src/rc_formatters.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) змінив блокування для [{blocked_user}]({user_url})" +"{comment}" + +#: src/rc_formatters.py:218 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) розблокував [{blocked_user}]({user_url}){comment}" + +#: src/rc_formatters.py:223 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) залишив [коментар]({comment}) на профілі {target}" + +#: src/rc_formatters.py:225 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) залишив [коментар]({comment}) на профілі {target}" + +#: src/rc_formatters.py:231 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile" +msgstr "" +"[{author}]({author_url}) відповів на [коментар]({comment}) на профілі " +"{target}" + +#: src/rc_formatters.py:237 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile" +msgstr "" +"[{author}]({author_url}) відповів на [коментар]({comment}) на профілі " +"{target}" + +#: src/rc_formatters.py:245 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " +"{target}" + +#: src/rc_formatters.py:251 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " +"{target}" + +#: src/rc_formatters.py:257 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +msgstr "[{author}] ({author_url}) вилучив коментар в профілі {target}" + +#: src/rc_formatters.py:259 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) purged a comment on their own profile" +msgstr "[{author}] ({author_url}) вилучив коментар в профілі {target}" + +#: src/rc_formatters.py:267 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " +"{target}" + +#: src/rc_formatters.py:269 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" +msgstr "" +"[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " +"{target}" + +#: src/rc_formatters.py:274 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) відредагував {field} на профілі {target}. *({desc})*" + +#: src/rc_formatters.py:281 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) відредагував {field} на профілі {target}. *({desc})*" + +#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 +#: src/rc_formatters.py:979 +msgid "none" +msgstr "нічого" + +#: src/rc_formatters.py:301 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) from {old_groups} to {new_groups}{comment}" +msgstr "" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" + +#: src/rc_formatters.py:303 +#, fuzzy, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) from {old_groups} to " +"{new_groups}{comment}" +msgstr "" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" + +#: src/rc_formatters.py:304 src/rc_formatters.py:965 +msgid "System" +msgstr "Система" + +#: src/rc_formatters.py:309 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) захистив [{article}]({article_url}) з наступними " +"налаштуваннями: {settings}{comment}" + +#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 +#: src/rc_formatters.py:993 +msgid " [cascading]" +msgstr " [каскадний]" + +#: src/rc_formatters.py:316 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) змінив налаштування захисту [{article}]" +"({article_url}) на: {settings}{comment}" + +#: src/rc_formatters.py:323 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:327 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) змінив видимість {amount} версії сторінки " +"[{article}]({article_url}){comment}" +msgstr[1] "" +"[{author}]({author_url}) змінив видимість {amount} версій сторінки " +"[{article}]({article_url}){comment}" +msgstr[2] "" +"[{author}]({author_url}) змінив видимість {amount} версій сторінки " +"[{article}]({article_url}){comment}" + +#: src/rc_formatters.py:340 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версією{comment}" +msgstr[1] "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версіями{comment}" +msgstr[2] "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версіями{comment}" + +#: src/rc_formatters.py:345 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:347 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "[{author}]({author_url}) змінив видимість подій журналу{comment}" + +#: src/rc_formatters.py:359 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версією{comment}" +msgstr[1] "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версіями{comment}" +msgstr[2] "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версіями{comment}" + +#: src/rc_formatters.py:364 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) відредагував фільтр зловживань [під номером " +"{number}]({filter_url})" + +#: src/rc_formatters.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) створив фільтр зловживань [під номером {number}]" +"({filter_url})" + +#: src/rc_formatters.py:372 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" +"[{author}]({author_url}) об'єднав історії версій [{article}]({article_url}) " +"з [{dest}]({dest_url}){comment}" + +#: src/rc_formatters.py:375 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "Обліковий запис [{author}]({author_url}) був автоматично створений" + +#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "Обліковий запис [{author}]({author_url}) був створений" + +#: src/rc_formatters.py:380 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" +"Обліковий запис [{article}]({article_url}) був створений [{author}]" +"({author_url}){comment}" + +#: src/rc_formatters.py:383 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" +"Обліковий запис [{article}]({article_url}) був створений [{author}]" +"({author_url}) і пароль був відправлений на електронну пошту{comment}" + +#: src/rc_formatters.py:388 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) додав запис в [таблицю інтервікі]({table_url}), яка " +"вказує на {website} з префіксом {prefix}" + +#: src/rc_formatters.py:394 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) відредагував запис в [таблиці інтервікі]" +"({table_url}), яка вказує на {website} з префіксом {prefix}" + +#: src/rc_formatters.py:400 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +msgstr "" +"[{author}]({author_url}) вилучив запис в [таблиці інтервікі]({table_url})" + +#: src/rc_formatters.py:403 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" + +#: src/rc_formatters.py:407 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" + +#: src/rc_formatters.py:410 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) відредагував спрайт для [{article}]({article_url})" + +#: src/rc_formatters.py:413 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) створив таблицю спрайтів для [{article}]" +"({article_url})" + +#: src/rc_formatters.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) відредагував фрагмент для [{article}]({article_url})" + +#: src/rc_formatters.py:421 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:423 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) вилучив [тег]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:428 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:433 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:436 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:441 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) вилучив [тег]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:443 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версією{comment}" +msgstr[1] "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версіями{comment}" +msgstr[2] "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версіями{comment}" + +#: src/rc_formatters.py:449 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) активував [тег]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:452 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) деактивував [тег]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:454 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) змінив видимість подій журналу{comment}" + +#: src/rc_formatters.py:456 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#: src/rc_formatters.py:459 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#: src/rc_formatters.py:462 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) завантажив нову версію [{file}]({file_link})" +"{comment}" + +#: src/rc_formatters.py:467 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) вилучив [{page}]({page_link}){comment}" + +#: src/rc_formatters.py:473 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#: src/rc_formatters.py:477 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#: src/rc_formatters.py:481 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#: src/rc_formatters.py:486 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#: src/rc_formatters.py:491 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#: src/rc_formatters.py:502 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:509 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версією{comment}" + +#: src/rc_formatters.py:516 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) переніс налаштування захисту з {redirect}*{article}" +"* на [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:524 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) об'єднав історії версій [{article}]({article_url}) " +"з [{dest}]({dest_url}){comment}" + +#: src/rc_formatters.py:532 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translatable page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:540 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версією{comment}" + +#: src/rc_formatters.py:548 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) змінив видимість {amount} версії сторінки " +"[{article}]({article_url}){comment}" + +#: src/rc_formatters.py:556 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версією{comment}" + +#: src/rc_formatters.py:564 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:571 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:581 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) змінив налаштування захисту [{article}]" +"({article_url}) на: {settings}{comment}" + +#: src/rc_formatters.py:587 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) змінив налаштування захисту [{article}]" +"({article_url}) на: {settings}{comment}" + +#: src/rc_formatters.py:593 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:600 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" + +#: src/rc_formatters.py:607 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:619 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:627 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" + +#: src/rc_formatters.py:634 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" + +#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 +#: src/rc_formatters.py:1241 +msgid "(default)" +msgstr "" + +#: src/rc_formatters.py:647 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" + +#: src/rc_formatters.py:656 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "[{author}]({author_url}) вилучив [{page}]({page_link}){comment}" +msgstr[1] "[{author}]({author_url}) вилучив [{page}]({page_link}){comment}" +msgstr[2] "[{author}]({author_url}) вилучив [{page}]({page_link}){comment}" + +#: src/rc_formatters.py:661 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "[{author}]({author_url}) вилучив [{page}]({page_link}){comment}" + +#: src/rc_formatters.py:665 +msgid "An action has been hidden by administration." +msgstr "Дія була прихована адміністрацією." + +#: src/rc_formatters.py:681 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: src/rc_formatters.py:682 +msgid "Performed" +msgstr "" + +#: src/rc_formatters.py:683 +msgid "Action taken" +msgstr "" + +#: src/rc_formatters.py:684 +msgid "Title" +msgstr "" + +#: src/rc_formatters.py:693 src/rc_formatters.py:980 +msgid "No description provided" +msgstr "Немає опису редагування" + +#: src/rc_formatters.py:717 +msgid "(N!) " +msgstr "(Н!) " + +#: src/rc_formatters.py:718 +msgid "m" +msgstr "м" + +#: src/rc_formatters.py:718 +msgid "b" +msgstr "б" + +#: src/rc_formatters.py:735 src/rc_formatters.py:740 +msgid "__Only whitespace__" +msgstr "__Тільки пробіли__" + +#: src/rc_formatters.py:745 +msgid "Removed" +msgstr "Видалено" + +#: src/rc_formatters.py:747 +msgid "Added" +msgstr "Додано" + +#: src/rc_formatters.py:781 src/rc_formatters.py:820 +msgid "Options" +msgstr "Параметри" + +#: src/rc_formatters.py:781 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([перегляд]({link}) | [скасувати]({undolink}))" + +#: src/rc_formatters.py:786 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "Завантажив нову версію {name}" + +#: src/rc_formatters.py:788 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "Повернув версію {name}" + +#: src/rc_formatters.py:790 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "Загрузил {name}" + +#: src/rc_formatters.py:806 +msgid "**No license!**" +msgstr "**Немає ліцензії!**" + +#: src/rc_formatters.py:818 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"Ліцензія: {}" + +#: src/rc_formatters.py:820 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([перегляд]({link}))" + +#: src/rc_formatters.py:825 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "Вилучив сторінку {article}" + +#: src/rc_formatters.py:830 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "Вилучив перенаправлення {article} by overwriting" + +#: src/rc_formatters.py:836 +msgid "No redirect has been made" +msgstr "Перенаправлення не зроблено" + +#: src/rc_formatters.py:837 +msgid "A redirect has been made" +msgstr "Перенаправлення було зроблено" + +#: src/rc_formatters.py:838 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "Перейменував сторінку {redirect}{article} to {target}" + +#: src/rc_formatters.py:841 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" +"Перейменував сторінку {redirect}{article} to {title} поверх перенаправлення" + +#: src/rc_formatters.py:845 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "Переніс налаштування захисту з {redirect}{article} на {title}" + +#: src/rc_formatters.py:869 +msgid "unknown expiry time" +msgstr "" + +#: src/rc_formatters.py:874 +msgid "Blocked from editing the following pages: " +msgstr "Заблокований від редагування в наступних сторінках: " + +#: src/rc_formatters.py:883 +msgid "Blocked from editing pages on following namespaces: " +msgstr "Заблокований від редагування на сторінках в наступних просторах назв: " + +#: src/rc_formatters.py:894 +msgid "Partial block details" +msgstr "Часткові деталі блокування" + +#: src/rc_formatters.py:895 +#, fuzzy, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "Заблокував {blocked_user} на {time}" + +#: src/rc_formatters.py:899 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "Змінив блокування для {blocked_user}" + +#: src/rc_formatters.py:903 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "Розблокував {blocked_user}" + +#: src/rc_formatters.py:910 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "Залишив коментар на профілі {target}" + +#: src/rc_formatters.py:912 +msgid "Left a comment on their own profile" +msgstr "Залишив коментар на своєму профілі" + +#: src/rc_formatters.py:919 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "Відповів на коментар на профілі {target}" + +#: src/rc_formatters.py:921 +msgid "Replied to a comment on their own profile" +msgstr "Відповів на коментар на своєму профілі" + +#: src/rc_formatters.py:928 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "Відредагував коментар на профілі {target}" + +#: src/rc_formatters.py:930 +msgid "Edited a comment on their own profile" +msgstr "Відредагував коментар на своєму профілі" + +#: src/rc_formatters.py:935 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "Відредагував профіль {target}" + +#: src/rc_formatters.py:937 +msgid "Edited their own profile" +msgstr "Відредагував свій профіль" + +#: src/rc_formatters.py:939 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "Очистив поле {field}" + +#: src/rc_formatters.py:941 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "Поле {field} змінено на: {desc}" + +#: src/rc_formatters.py:946 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "Вилучив коментар в профілі {target}" + +#: src/rc_formatters.py:948 +#, fuzzy +msgid "Purged a comment on their own profile" +msgstr "Відредагував коментар на своєму профілі" + +#: src/rc_formatters.py:956 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "Вилучив коментар на профілі {target}" + +#: src/rc_formatters.py:958 +#, fuzzy +msgid "Deleted a comment on their own profile" +msgstr "Відредагував коментар на своєму профілі" + +#: src/rc_formatters.py:962 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "Змінено членство в групі для {target}" + +#: src/rc_formatters.py:966 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} автоматично переведений в нову групу користувачів" + +#: src/rc_formatters.py:981 +#, python-brace-format +msgid "Groups changed from {old_groups} to {new_groups}{reason}" +msgstr "Групи змінені з {old_groups} на {new_groups}{reason}" + +#: src/rc_formatters.py:985 +#, python-brace-format +msgid "Protected {target}" +msgstr "Захистив {target}" + +#: src/rc_formatters.py:991 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "Змінив рівень захисту для {article}" + +#: src/rc_formatters.py:997 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "Зняв захист з {article}" + +#: src/rc_formatters.py:1001 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "Змінив видимість {amount} версії сторінки {article} " +msgstr[1] "Змінив видимість {amount} версій сторінки {article} " +msgstr[2] "Змінив видимість {amount} версій сторінки {article} " + +#: src/rc_formatters.py:1013 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "Імпортував {article} з {count} версією" +msgstr[1] "Імпортував {article} з {count} версіями" +msgstr[2] "Імпортував {article} з {count} версіями" + +#: src/rc_formatters.py:1018 +#, python-brace-format +msgid "Restored {article}" +msgstr "Відновив {article}" + +#: src/rc_formatters.py:1021 +msgid "Changed visibility of log events" +msgstr "Змінив видимість подій журналу" + +#: src/rc_formatters.py:1031 +#, fuzzy, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "Імпортував {article} з {count} версією" +msgstr[1] "Імпортував {article} з {count} версіями" +msgstr[2] "Імпортував {article} з {count} версіями" + +#: src/rc_formatters.py:1036 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "Відредагував фільтр зловживань під номером {number}" + +#: src/rc_formatters.py:1039 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "Створив фільтр зловживань під номером {number}" + +#: src/rc_formatters.py:1042 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "Об'єднав історії версій {article} з {dest}" + +#: src/rc_formatters.py:1046 +msgid "Created account automatically" +msgstr "Обліковий запис був створений автоматично" + +#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 +msgid "Created account" +msgstr "Створено обліковий запис" + +#: src/rc_formatters.py:1052 +#, python-brace-format +msgid "Created account {article}" +msgstr "Створено обліковий запис {article}" + +#: src/rc_formatters.py:1055 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" +"Створено обліковий запис {article} і і пароль був відправлений на електронну " +"пошту" + +#: src/rc_formatters.py:1061 +msgid "Added an entry to the interwiki table" +msgstr "Додав запис в таблицю інтервікі" + +#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Префікс: {prefix}, веб-сайт: {website} | {desc}" + +#: src/rc_formatters.py:1067 +msgid "Edited an entry in interwiki table" +msgstr "Відредагував запис в таблиці інтервікі" + +#: src/rc_formatters.py:1073 +msgid "Deleted an entry in interwiki table" +msgstr "Вилучив запис в таблиці інтервікі" + +#: src/rc_formatters.py:1074 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Префікс: {prefix} | {desc}" + +#: src/rc_formatters.py:1077 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "Змінив модель вмісту сторінки {article}" + +#: src/rc_formatters.py:1078 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "Модель змінена з {old} на {new}: {reason}" + +#: src/rc_formatters.py:1083 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: src/rc_formatters.py:1084 +#, fuzzy, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "Модель змінена з {old} на {new}: {reason}" + +#: src/rc_formatters.py:1087 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "Відредагував спрайт для {article}" + +#: src/rc_formatters.py:1090 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "Створив таблицю спрайтів для {article}" + +#: src/rc_formatters.py:1093 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "Відредагував фрагмент для {article}" + +#: src/rc_formatters.py:1099 +#, fuzzy, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "Створив тег \"{tag}\"" + +#: src/rc_formatters.py:1103 +#, fuzzy, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "Вилучив тег \"{tag}\"" + +#: src/rc_formatters.py:1110 +#, fuzzy, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "Створив тег \"{tag}\"" + +#: src/rc_formatters.py:1117 +#, fuzzy, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "Вилучив тег \"{tag}\"" + +#: src/rc_formatters.py:1121 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "Створив тег \"{tag}\"" + +#: src/rc_formatters.py:1125 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "Вилучив тег \"{tag}\"" + +#: src/rc_formatters.py:1127 +#, fuzzy +msgid "Removed from" +msgstr "Видалено" + +#: src/rc_formatters.py:1127 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: src/rc_formatters.py:1131 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "Активував тег \"{tag}\"" + +#: src/rc_formatters.py:1134 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "Деактивував тег \"{tag}\"" + +#: src/rc_formatters.py:1137 +msgid "Changed wiki settings" +msgstr "" + +#: src/rc_formatters.py:1141 +#, fuzzy, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "Вилучив тег \"{tag}\"" + +#: src/rc_formatters.py:1144 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: src/rc_formatters.py:1147 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 +msgid "Wiki" +msgstr "" + +#: src/rc_formatters.py:1151 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "" + +#: src/rc_formatters.py:1157 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "" + +#: src/rc_formatters.py:1160 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "Вилучив тег \"{tag}\"" + +#: src/rc_formatters.py:1163 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "" + +#: src/rc_formatters.py:1166 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "" + +#: src/rc_formatters.py:1169 +#, fuzzy, python-brace-format +msgid "Deleted {file} dump" +msgstr "Вилучив сторінку {article}" + +#: src/rc_formatters.py:1177 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: src/rc_formatters.py:1180 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: src/rc_formatters.py:1183 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1186 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1189 +#, python-brace-format +msgid "Completed deletion of translatable page \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1192 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1195 +#, fuzzy, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "Змінив видимість {amount} версії сторінки {article} " + +#: src/rc_formatters.py:1198 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1201 +#, fuzzy, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "Зняв захист з {article}" + +#: src/rc_formatters.py:1204 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1210 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: src/rc_formatters.py:1212 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: src/rc_formatters.py:1214 +#, fuzzy, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "Зняв захист з {article}" + +#: src/rc_formatters.py:1217 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: src/rc_formatters.py:1220 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: src/rc_formatters.py:1227 +#, fuzzy, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "Зняв захист з {article}" + +#: src/rc_formatters.py:1230 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1232 +msgid "Old state" +msgstr "" + +#: src/rc_formatters.py:1233 +msgid "New state" +msgstr "" + +#: src/rc_formatters.py:1242 +#, fuzzy, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "Зняв захист з {article}" + +#: src/rc_formatters.py:1243 +msgid "Old language" +msgstr "" + +#: src/rc_formatters.py:1244 +msgid "New language" +msgstr "" + +#: src/rc_formatters.py:1248 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: src/rc_formatters.py:1250 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: src/rc_formatters.py:1254 +#, fuzzy +msgid "Action has been hidden by administration" +msgstr "Дія була прихована адміністрацією." + +#: src/rc_formatters.py:1288 +msgid "**Added**: " +msgstr "**Додано**: " + +#: src/rc_formatters.py:1288 +msgid " and {} more\n" +msgstr " та ще {}\n" + +#: src/rc_formatters.py:1289 +msgid "**Removed**: " +msgstr "**Видалено**: " + +#: src/rc_formatters.py:1289 +msgid " and {} more" +msgstr " та ще {}" + +#: src/rc_formatters.py:1290 +msgid "Changed categories" +msgstr "Змінені категорії" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" +#~ msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on {target}'s profile" +#~ msgstr "[{author}]({author_url}) видалив коментар з профілю {target}" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on their own profile" +#~ msgstr "[{author}]({author_url}) видалив коментар з профілю {target}" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) imported interwiki{comment}" +#~ msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#~ msgid "Imported interwiki" +#~ msgstr "Імпортував інтервікі" + +#~ msgid "their own profile" +#~ msgstr "на своєму профілі" + +#~ msgid "their own" +#~ msgstr "на своєму" + +#, python-brace-format +#~ msgid "[{target}]({target_url})'s" +#~ msgstr "[{target}]({target_url})" + +#, python-brace-format +#~ msgid "[their own]({target_url})" +#~ msgstr "[на своєму]({target_url})" diff --git a/locale/zh-hans/LC_MESSAGES/formatters.po b/locale/zh-hans/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..f0e7d73 --- /dev/null +++ b/locale/zh-hans/LC_MESSAGES/formatters.po @@ -0,0 +1,1683 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDw package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"PO-Revision-Date: 2020-12-22 00:13+0000\n" +"Last-Translator: lakejason0 \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh-hans\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.2.1\n" +"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"PO-Revision-Date: 2020-12-29 15:21+0000\n" +"Last-Translator: lakejason0 \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh-hans\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.2.1\n" + +#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 +#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 +#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 +msgid "unknown" +msgstr "未知" + +#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 +#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 +#: src/rc_formatters.py:75 src/rc_formatters.py:96 +msgid "Unregistered user" +msgstr "未注册用户" + +#: src/discussion_formatters.py:39 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) 创建了 [{title}](<{url}f/p/{threadId}>) 于 " +"{forumName}" + +#: src/discussion_formatters.py:42 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) 创建了一个投票 [{title}](<{url}f/p/{threadId}>) 于 " +"{forumName}" + +#: src/discussion_formatters.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) 创建了一份问卷 [{title}](<{url}f/p/{threadId}>) 于 " +"{forumName}" + +#: src/discussion_formatters.py:54 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" +"[{author}]({author_url}) 创建了一条[回复](<{url}f/p/{threadId}/r/{postId}>) " +"至 [{title}](<{url}f/p/{threadId}>) 于 {forumName}" + +#: src/discussion_formatters.py:61 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) 创建了 [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) 于 [{user}的信息墙](<{url}wiki/" +"Message_Wall:{user_wall}>)" + +#: src/discussion_formatters.py:64 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) 创建了一条[回复](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) 至 [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) 于 [{user}的信息墙](<{url}" +"wiki/Message_Wall:{user_wall}>)" + +#: src/discussion_formatters.py:72 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) 创建了一条[评论](<{url}?commentId={commentId}>) 于 " +"[{article}](<{url}>)" + +#: src/discussion_formatters.py:78 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) 创建了一条[回复](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) 于 " +"[{article}](<{url}>)" + +#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#, fuzzy, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" +"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" +"未知事件 `{event}` 由 [{author}]({author_url}) 发出,请在[支持服务器]" +"(<{support}>)中报告。\n" +"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +"未知事件 `{event}`,作者为 [{author}]({author_url}),请在[支持服务器]" +"(<{support}>)上报告。" + +#: src/discussion_formatters.py:123 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "创建了 \"{title}\"" + +#: src/discussion_formatters.py:127 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "创建了投票 \"{title}\"" + +#: src/discussion_formatters.py:134 +msgid "Option {}" +msgstr "选项 {}" + +#: src/discussion_formatters.py:135 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[查看图片]({image_url})__" + +#: src/discussion_formatters.py:139 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "创建了问卷 \"{title}\"" + +#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 +#: src/rc_formatters.py:1283 +msgid "Tags" +msgstr "标签" + +#: src/discussion_formatters.py:155 +msgid "{} tags" +msgstr "{} 个标签" + +#: src/discussion_formatters.py:160 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "回复至 \"{title}\"" + +#: src/discussion_formatters.py:169 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "创建了 \"{title}\" 于 {user} 的信息墙" + +#: src/discussion_formatters.py:173 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "回复至 \"{title}\" 于 {user} 的信息墙" + +#: src/discussion_formatters.py:180 +#, python-brace-format +msgid "Commented on {article}" +msgstr "评论于 {article}" + +#: src/discussion_formatters.py:184 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "回复至一条评论于 {article}" + +#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "未知事件 `{event}`" + +#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 +#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 +#, fuzzy +msgid "Report this on the support server" +msgstr "" +"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" +"在支持服务器上报告\n" +"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +"在支持服务器上报告此错误" + +#: src/rc_formatters.py:28 +msgid "None" +msgstr "无" + +#: src/rc_formatters.py:28 +msgid "Warning issued" +msgstr "已发出警告" + +#: src/rc_formatters.py:28 +msgid "**Blocked user**" +msgstr "**已封禁用户**" + +#: src/rc_formatters.py:28 +msgid "Tagged the edit" +msgstr "已标记编辑" + +#: src/rc_formatters.py:28 +msgid "Disallowed the action" +msgstr "已阻止操作" + +#: src/rc_formatters.py:28 +msgid "**IP range blocked**" +msgstr "**已封禁IP区段**" + +#: src/rc_formatters.py:28 +msgid "Throttled actions" +msgstr "已对操作进行频率控制" + +#: src/rc_formatters.py:28 +msgid "Removed autoconfirmed group" +msgstr "已撤销自动确认用户组" + +#: src/rc_formatters.py:28 +msgid "**Removed from privileged groups**" +msgstr "**已移除用户组**" + +#: src/rc_formatters.py:29 +msgid "Edit" +msgstr "编辑" + +#: src/rc_formatters.py:29 +msgid "Upload" +msgstr "上传" + +#: src/rc_formatters.py:29 +msgid "Move" +msgstr "移动" + +#: src/rc_formatters.py:29 +msgid "Stash upload" +msgstr "隐藏上传" + +#: src/rc_formatters.py:29 +msgid "Deletion" +msgstr "删除" + +#: src/rc_formatters.py:29 +msgid "Account creation" +msgstr "账户创建" + +#: src/rc_formatters.py:29 +msgid "Auto account creation" +msgstr "自动账户创建" + +#: src/rc_formatters.py:83 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" +"[{author}]({author_url}) 触发了 *{abuse_filter}*,执行操作 \"{action}\" 于 " +"*[{target}]({target_url})* - 已采取的行动: {result}。" + +#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 +#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 +#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 +#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 +#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 +#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 +#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 +#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 +#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 +msgid "Unknown" +msgstr "未知" + +#: src/rc_formatters.py:116 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) 编辑了 [{article}]({edit_link}){comment}{bold}" +"({sign}{edit_size}){bold}" + +#: src/rc_formatters.py:118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) 创建了 [{article}]({edit_link}){comment}{bold}" +"({sign}{edit_size}){bold}" + +#: src/rc_formatters.py:121 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) 上传了 [{file}]({file_link}){comment}" + +#: src/rc_formatters.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" +"[{author}]({author_url}) 回退了 [{file}]({file_link}) 的一个版本 {comment}" + +#: src/rc_formatters.py:132 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) 上传了 [{file}]({file_link}) 的一个新版本 {comment}" + +#: src/rc_formatters.py:135 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "[{author}]({author_url}) 删除了 [{page}]({page_link}){comment}" + +#: src/rc_formatters.py:141 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" +"[{author}]({author_url}) 通过覆盖 [{page}]({page_link}) 删除重定向 {comment}" + +#: src/rc_formatters.py:147 src/rc_formatters.py:152 +msgid "without making a redirect" +msgstr "不留重定向" + +#: src/rc_formatters.py:147 src/rc_formatters.py:153 +msgid "with a redirect" +msgstr "创建重定向" + +#: src/rc_formatters.py:148 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) 移动 {redirect}*{article}* 至 [{target}]" +"({target_url}),{made_a_redirect}{comment}" + +#: src/rc_formatters.py:154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) 移动 {redirect}*{article}* 至 [{target}]" +"({target_url}) 覆盖重定向,{made_a_redirect}{comment}" + +#: src/rc_formatters.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) 将保护设置从 {redirect}*{article}* 移动到了 " +"[{target}]({target_url}){comment}" + +#: src/rc_formatters.py:170 src/rc_formatters.py:855 +msgid "for infinity and beyond" +msgstr "时长为无限期" + +#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#, python-brace-format +msgid "for {num} {translated_length}" +msgstr "时长为{num}{translated_length}" + +#: src/rc_formatters.py:185 src/rc_formatters.py:867 +msgid "until {}" +msgstr "直到{}" + +#: src/rc_formatters.py:189 +msgid " on pages: " +msgstr " 于页面: " + +#: src/rc_formatters.py:196 src/rc_formatters.py:881 +msgid " and namespaces: " +msgstr " 和命名空间: " + +#: src/rc_formatters.py:198 +msgid " on namespaces: " +msgstr " 于命名空间: " + +#: src/rc_formatters.py:210 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) 封禁了 [{user}]({user_url}),{time}" +"{restriction_desc}{comment}" + +#: src/rc_formatters.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) 更改了 [{blocked_user}]({user_url}) 的封禁设置 " +"{comment}" + +#: src/rc_formatters.py:218 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "[{author}]({author_url}) 解封了 [{blocked_user}]({user_url}){comment}" + +#: src/rc_formatters.py:223 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) 在 {target} 的资料页上留下了一条[评论]({comment})" + +#: src/rc_formatters.py:225 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile" +msgstr "[{author}]({author_url}) 在自己的资料页上留下了一条[评论]({comment})" + +#: src/rc_formatters.py:231 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile" +msgstr "" +"[{author}]({author_url}) 在 {target} 的资料页上回复了一条[评论]({comment})" + +#: src/rc_formatters.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile" +msgstr "[{author}]({author_url}) 在自己的资料页上回复了一条[评论]({comment})" + +#: src/rc_formatters.py:245 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) 在 {target} 的资料页上编辑了一条[评论]({comment})" + +#: src/rc_formatters.py:251 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" +msgstr "[{author}]({author_url}) 在自己的资料页上编辑了一条[评论]({comment})" + +#: src/rc_formatters.py:257 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +msgstr "[{author}]({author_url}) 在 {target} 的资料页上永久删除了一条评论" + +#: src/rc_formatters.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on their own profile" +msgstr "[{author}]({author_url}) 在自己的资料页上永久删除了一条评论" + +#: src/rc_formatters.py:267 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" +msgstr "" +"[{author}]({author_url}) 在 {target} 的资料页上删除了一条[评论]({comment})" + +#: src/rc_formatters.py:269 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" +msgstr "[{author}]({author_url}) 在自己的资料页上删除了一条[评论]({comment})" + +#: src/rc_formatters.py:274 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) 在 [{target}]({target_url}) 的资料页上编辑了 " +"{field} 栏位。*({desc})*" + +#: src/rc_formatters.py:281 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) 在[自己]({target_url})的资料页上编辑了 {field} 栏" +"位。*({desc})*" + +#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 +#: src/rc_formatters.py:979 +msgid "none" +msgstr "无" + +#: src/rc_formatters.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) from {old_groups} to {new_groups}{comment}" +msgstr "" +"[{author}]({author_url}) 已将 [{target}]({target_url}) 的用户组从 " +"{old_groups} 更改为 {new_groups}{comment}" + +#: src/rc_formatters.py:303 +#, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) from {old_groups} to " +"{new_groups}{comment}" +msgstr "" +"{author} 自动提升了 [{target}]({target_url}) 的用户组,从 {old_groups} 更改" +"为 {new_groups}{comment}" + +#: src/rc_formatters.py:304 src/rc_formatters.py:965 +msgid "System" +msgstr "系统" + +#: src/rc_formatters.py:309 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) 保护了 [{article}]({article_url}),设置为:" +"{settings}{comment}" + +#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 +#: src/rc_formatters.py:993 +msgid " [cascading]" +msgstr " [级联]" + +#: src/rc_formatters.py:316 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) 将 [{article}]({article_url}) 的保护设置更改为:" +"{settings}{comment}" + +#: src/rc_formatters.py:323 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) 移除了 [{article}]({article_url}) 的保护 {comment}" + +#: src/rc_formatters.py:327 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) 更改了[{article}]({article_url}) 的 {amount} 个版本" +"的可见性{comment}" + +#: src/rc_formatters.py:340 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" +"[{author}]({author_url}) 导入了 [{article}]({article_url}) 的 {count} 个修订" +"版本{comment}" + +#: src/rc_formatters.py:345 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "[{author}]({author_url}) 还原了 [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:347 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "[{author}]({author_url}) 更改了日志事件的可视性{comment}" + +#: src/rc_formatters.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) 从 [{source}]({source_url}) 导入了 [{article}]" +"({article_url}) 的 {count} 个修订版本{comment}" + +#: src/rc_formatters.py:364 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) 更改了滥用过滤器[number {number}]({filter_url})" + +#: src/rc_formatters.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) 创建了滥用过滤器[number {number}]({filter_url})" + +#: src/rc_formatters.py:372 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" +"[{author}]({author_url}) 将 [{article}]({article_url}) 的修订版本历史合并到 " +"[{dest}]({dest_url}){comment}" + +#: src/rc_formatters.py:375 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "用户账户 [{author}]({author_url}) 被自动创建" + +#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "用户账户 [{author}]({author_url}) 被创建" + +#: src/rc_formatters.py:380 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" +"用户账户 [{article}]({article_url}) 被 [{author}]({author_url}) 创建{comment}" + +#: src/rc_formatters.py:383 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" +"用户账户 [{article}]({article_url}) 被 [{author}]({author_url}) 创建,密码已" +"通过电子邮件发送{comment}" + +#: src/rc_formatters.py:388 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) 向[跨wiki表]({table_url})中加入了指向 {website} 的," +"前缀为 {prefix} 的跨wiki前缀" + +#: src/rc_formatters.py:394 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url})修改了[跨wiki表]({table_url}) 中指向 {website} 的,前" +"缀为 {prefix} 的跨wiki前缀" + +#: src/rc_formatters.py:400 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +msgstr "" +"[{author}]({author_url})删除了[跨wiki表]({table_url})中的一个跨wiki前缀" + +#: src/rc_formatters.py:403 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" +"[{author}]({author_url}) 将页面 [{article}]({article_url}) 的内容模型从 " +"{old} 更改为 {new}{comment}" + +#: src/rc_formatters.py:407 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" +"[{author}]({author_url}) 创建了页面 [{article}]({article_url}),使用了非默认" +"的内容模型 {new}{comment}" + +#: src/rc_formatters.py:410 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) 编辑了 [{article}]({article_url}) 的 Sprite 图" + +#: src/rc_formatters.py:413 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) 创建了 [{article}]({article_url}) 的 Sprite 表" + +#: src/rc_formatters.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "[{author}]({author_url}) 编辑了 [{article}]({article_url}) 的 Slice" + +#: src/rc_formatters.py:421 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) 创建了 Cargo 表 \"{table}\"" + +#: src/rc_formatters.py:423 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) 删除了 Cargo 表 \"{table}\"" + +#: src/rc_formatters.py:428 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) 重新创建了 Cargo 表 \"{table}\"" + +#: src/rc_formatters.py:433 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) 替换了 Cargo 表 \"{table}\"" + +#: src/rc_formatters.py:436 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) 创建了一个[标签]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:441 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) 删除了一个[标签]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:443 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +"[{author}]({author_url}) 导入了 [{article}]({article_url}) 的 {count} 个修订" +"版本{comment}" + +#: src/rc_formatters.py:449 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) 激活了一个[标签]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:452 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) 取消激活了一个[标签]({tag_url}) \"{tag}\"" + +#: src/rc_formatters.py:454 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) 更改了wiki设置{reason}" + +#: src/rc_formatters.py:456 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) 删除了wiki *{wiki_name}* {comment}" + +#: src/rc_formatters.py:459 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) 锁定了wiki *{wiki_name}* {comment}" + +#: src/rc_formatters.py:462 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) 修改了命名空间 *{namespace_name}* 于 *{wiki_name}* " +"{comment}" + +#: src/rc_formatters.py:467 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) 删除了命名空间 *{namespace_name}* 于 *{wiki_name}* " +"{comment}" + +#: src/rc_formatters.py:473 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "[{author}]({author_url}) 修改了用户组 *{group_name}*{comment}" + +#: src/rc_formatters.py:477 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) 删除了wiki *{wiki_name}* {comment}" + +#: src/rc_formatters.py:481 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) 解锁了wiki *{wiki_name}* {comment}" + +#: src/rc_formatters.py:486 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "[{author}]({author_url}) 生成了 *{file}* 转储{comment}" + +#: src/rc_formatters.py:491 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "[{author}]({author_url}) 删除了 *{file}* 转储{comment}" + +#: src/rc_formatters.py:502 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" +"[{author}]({author_url}) 标记了 [{article}]({article_url}) 进行翻译 {comment}" + +#: src/rc_formatters.py:509 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" +"[{author}]({author_url}) 从翻译系统中移除了 [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:516 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) 已完成将翻译页面 *{article}* 移动到 [{target}]" +"({target_url}){comment}" + +#: src/rc_formatters.py:524 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) 在移动 [{article}]({article_url}) 至 [{target}]" +"({target_url}) 时遇到了问题{comment}" + +#: src/rc_formatters.py:532 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translatable page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) 完成了对可翻译页面 [{article}]({article_url}) 的删除" +"{comment}" + +#: src/rc_formatters.py:540 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) 无法删除 [{article}]({article_url}),其属于可翻译页" +"面 [{target}]({target_url}){comment}" + +#: src/rc_formatters.py:548 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) 已完成删除翻译页面 [{article}]({article_url})" +"{comment}" + +#: src/rc_formatters.py:556 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) 无法删除 [{article}]({article_url}),其属于翻译页面 " +"[{target}]({target_url}){comment}" + +#: src/rc_formatters.py:564 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) 支持了 [{article}]({article_url}) 的翻译 {comment}" + +#: src/rc_formatters.py:571 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) 不支持 [{article}]({article_url}) 的翻译{comment}" + +#: src/rc_formatters.py:581 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) 将 [{article}]({article_url}) 的语言限制为 " +"`{languages}`{comment}" + +#: src/rc_formatters.py:587 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) 将 [{article}]({article_url}) 的优先语言设置为 " +"`{languages}`{comment}" + +#: src/rc_formatters.py:593 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) 移除了 [{article}]({article_url}) 的优先语言 " +"{comment}" + +#: src/rc_formatters.py:600 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) 将可翻译页面 [{article}]({article_url}) 加入了聚合消" +"息组 \"{group}\"{comment}" + +#: src/rc_formatters.py:607 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) 将可翻译页面 [{article}]({article_url}) 从聚合消息" +"组 \"{group}\" 中移除{comment}" + +#: src/rc_formatters.py:619 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) 复核了翻译 [{article}]({article_url}){comment}" + +#: src/rc_formatters.py:627 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) 将 [{article}]({article_url}) 的 `{language}` 翻译的" +"状态从 `{old_state}` 更改为 `{new_state}`{comment}" + +#: src/rc_formatters.py:634 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) 更改了 [{article}]({article_url}) 的 `{language}` 翻" +"译的状态为 `{new_state}`{comment}" + +#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 +#: src/rc_formatters.py:1241 +msgid "(default)" +msgstr "(默认)" + +#: src/rc_formatters.py:647 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" +"[{author}]({author_url}) 更改了 [{article}]({article_url}) 的语言,从 " +"{old_lang} 更改为 {new_lang}{comment}" + +#: src/rc_formatters.py:656 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" +"[{author}]({author_url}) 将编辑数为 {edits} 的用户 *{old_name}* 重命名为 " +"[{new_name}]({link}) {comment}" + +#: src/rc_formatters.py:661 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) 将用户 *{old_name}* 重命名为 [{new_name}]({link})" +"{comment}" + +#: src/rc_formatters.py:665 +msgid "An action has been hidden by administration." +msgstr "一项操作已被管理员隐藏。" + +#: src/rc_formatters.py:681 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "{user} 触发了 \"{abuse_filter}\"" + +#: src/rc_formatters.py:682 +msgid "Performed" +msgstr "执行了" + +#: src/rc_formatters.py:683 +msgid "Action taken" +msgstr "采取的操作" + +#: src/rc_formatters.py:684 +msgid "Title" +msgstr "标题" + +#: src/rc_formatters.py:693 src/rc_formatters.py:980 +msgid "No description provided" +msgstr "没有提供描述" + +#: src/rc_formatters.py:717 +msgid "(N!) " +msgstr "(新!) " + +#: src/rc_formatters.py:718 +msgid "m" +msgstr "小" + +#: src/rc_formatters.py:718 +msgid "b" +msgstr "机" + +#: src/rc_formatters.py:735 src/rc_formatters.py:740 +msgid "__Only whitespace__" +msgstr "__仅空格__" + +#: src/rc_formatters.py:745 +msgid "Removed" +msgstr "移除了" + +#: src/rc_formatters.py:747 +msgid "Added" +msgstr "添加了" + +#: src/rc_formatters.py:781 src/rc_formatters.py:820 +msgid "Options" +msgstr "选项" + +#: src/rc_formatters.py:781 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([预览]({link}) | [撤销]({undolink}))" + +#: src/rc_formatters.py:786 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "上传了 {name} 的新版本" + +#: src/rc_formatters.py:788 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "回退了 {name} 的一个版本" + +#: src/rc_formatters.py:790 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "上传了 {name}" + +#: src/rc_formatters.py:806 +msgid "**No license!**" +msgstr "**没有许可协议!**" + +#: src/rc_formatters.py:818 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"许可协议:{}" + +#: src/rc_formatters.py:820 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([预览]({link}))" + +#: src/rc_formatters.py:825 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "删除了页面 {article}" + +#: src/rc_formatters.py:830 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "通过覆盖删除了重定向 {article}" + +#: src/rc_formatters.py:836 +msgid "No redirect has been made" +msgstr "未创建重定向" + +#: src/rc_formatters.py:837 +msgid "A redirect has been made" +msgstr "创建了重定向" + +#: src/rc_formatters.py:838 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "将 {redirect}{article} 移动到了 {target}" + +#: src/rc_formatters.py:841 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "将 {redirect}{article} 移动到了 {title},不留重定向" + +#: src/rc_formatters.py:845 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "将保护设置从 {redirect}{article} 移动到了 {title}" + +#: src/rc_formatters.py:869 +msgid "unknown expiry time" +msgstr "未知的过期时间" + +#: src/rc_formatters.py:874 +msgid "Blocked from editing the following pages: " +msgstr "被阻止编辑下列页面: " + +#: src/rc_formatters.py:883 +msgid "Blocked from editing pages on following namespaces: " +msgstr "被阻止编辑下列命名空间的页面: " + +#: src/rc_formatters.py:894 +msgid "Partial block details" +msgstr "部分封禁详情" + +#: src/rc_formatters.py:895 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "封禁 {blocked_user} {time}" + +#: src/rc_formatters.py:899 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "更改了 {blocked_user} 的封禁设置" + +#: src/rc_formatters.py:903 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "解封 {blocked_user}" + +#: src/rc_formatters.py:910 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "在 {target} 的资料页上留下留言" + +#: src/rc_formatters.py:912 +msgid "Left a comment on their own profile" +msgstr "在自己的资料页上留下留言" + +#: src/rc_formatters.py:919 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "在 {target} 的资料页上回复留言" + +#: src/rc_formatters.py:921 +msgid "Replied to a comment on their own profile" +msgstr "在自己的资料页上回复留言" + +#: src/rc_formatters.py:928 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "编辑了 {target} 的资料页上的一条留言" + +#: src/rc_formatters.py:930 +msgid "Edited a comment on their own profile" +msgstr "编辑了自己的资料页上的一条留言" + +#: src/rc_formatters.py:935 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "编辑了 {target} 的资料页" + +#: src/rc_formatters.py:937 +msgid "Edited their own profile" +msgstr "编辑了自己的资料页" + +#: src/rc_formatters.py:939 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "清空了 {field} 栏位" + +#: src/rc_formatters.py:941 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "{field} 栏位改为:{desc}" + +#: src/rc_formatters.py:946 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "永久删除了 {target} 的资料页上的一条留言" + +#: src/rc_formatters.py:948 +msgid "Purged a comment on their own profile" +msgstr "永久删除了自己的资料页上的一条评论" + +#: src/rc_formatters.py:956 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "删除了 {target} 的资料页上的一条留言" + +#: src/rc_formatters.py:958 +msgid "Deleted a comment on their own profile" +msgstr "删除了自己的资料页上的一条评论" + +#: src/rc_formatters.py:962 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "更改了 {target} 的用户组" + +#: src/rc_formatters.py:966 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} 被自动地提升到新用户组" + +#: src/rc_formatters.py:981 +#, python-brace-format +msgid "Groups changed from {old_groups} to {new_groups}{reason}" +msgstr "用户组从 {old_groups} 更改为 {new_groups}{reason}" + +#: src/rc_formatters.py:985 +#, python-brace-format +msgid "Protected {target}" +msgstr "保护了 {target}" + +#: src/rc_formatters.py:991 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "更改了 {article} 的保护等级" + +#: src/rc_formatters.py:997 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "移除了 {article} 的保护" + +#: src/rc_formatters.py:1001 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "更改了页面 {article} 的 {amount} 个修订版本的可见性 " + +#: src/rc_formatters.py:1013 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "导入了含有 {count} 个修订版本的 {article}" + +#: src/rc_formatters.py:1018 +#, python-brace-format +msgid "Restored {article}" +msgstr "还原了 {article}" + +#: src/rc_formatters.py:1021 +msgid "Changed visibility of log events" +msgstr "更改了日志事件的可见性" + +#: src/rc_formatters.py:1031 +#, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "导入了来自 \"{source}\" 的含有 {count} 个修订版本的 {article}" + +#: src/rc_formatters.py:1036 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "编辑了滥用过滤器{number}" + +#: src/rc_formatters.py:1039 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "创建了滥用过滤器{number}" + +#: src/rc_formatters.py:1042 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "将 {article} 的修订版本历史合并到了 {dest}" + +#: src/rc_formatters.py:1046 +msgid "Created account automatically" +msgstr "自动创建账户" + +#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 +msgid "Created account" +msgstr "创建了账户" + +#: src/rc_formatters.py:1052 +#, python-brace-format +msgid "Created account {article}" +msgstr "创建了账户 {article}" + +#: src/rc_formatters.py:1055 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "创建了账户 {article} 且密码已通过电子邮件发送" + +#: src/rc_formatters.py:1061 +msgid "Added an entry to the interwiki table" +msgstr "向跨wiki表添加了跨wiki前缀" + +#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "前缀:{prefix},网站:{website} | {desc}" + +#: src/rc_formatters.py:1067 +msgid "Edited an entry in interwiki table" +msgstr "编辑了跨wiki表的跨wiki前缀" + +#: src/rc_formatters.py:1073 +msgid "Deleted an entry in interwiki table" +msgstr "删除了跨wiki表的跨wiki前缀" + +#: src/rc_formatters.py:1074 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "前缀:{prefix} | {desc}" + +#: src/rc_formatters.py:1077 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "更改了页面 {article} 的内容模型" + +#: src/rc_formatters.py:1078 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "内容模型从 {old} 更改为 {new}:{reason}" + +#: src/rc_formatters.py:1083 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "使用非默认内容模型创建了页面 {article}" + +#: src/rc_formatters.py:1084 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "使用内容模型 {new} 创建:{reason}" + +#: src/rc_formatters.py:1087 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "编辑了 {article} 的 Sprite 图" + +#: src/rc_formatters.py:1090 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "创建了 {article} 的 Sprite 表" + +#: src/rc_formatters.py:1093 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "编辑了 {article} 的 Slice" + +#: src/rc_formatters.py:1099 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "创建了 Cargo 表 \"{table}\"" + +#: src/rc_formatters.py:1103 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "删除了 Cargo 表 \"{table}\"" + +#: src/rc_formatters.py:1110 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "重新创建了 Cargo 表 \"{table}\"" + +#: src/rc_formatters.py:1117 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "替换了 Cargo 表 \"{table}\"" + +#: src/rc_formatters.py:1121 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "创建了标签 \"{tag}\"" + +#: src/rc_formatters.py:1125 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "删除了标签 \"{tag}\"" + +#: src/rc_formatters.py:1127 +#, fuzzy +msgid "Removed from" +msgstr "移除了" + +#: src/rc_formatters.py:1127 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" + +#: src/rc_formatters.py:1131 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "激活了标签 \"{tag}\"" + +#: src/rc_formatters.py:1134 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "取消激活了标签 \"{tag}\"" + +#: src/rc_formatters.py:1137 +msgid "Changed wiki settings" +msgstr "更改了wiki设置" + +#: src/rc_formatters.py:1141 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "删除了wiki \"{wiki}\"" + +#: src/rc_formatters.py:1144 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "锁定了wiki \"{wiki}\"" + +#: src/rc_formatters.py:1147 +#, fuzzy, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "修改了命名空间 \"{namespace_name}\"" + +#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 +msgid "Wiki" +msgstr "Wiki" + +#: src/rc_formatters.py:1151 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "删除了命名空间 \"{namespace_name}\"" + +#: src/rc_formatters.py:1157 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "修改了用户组 \"{usergroup_name}\"" + +#: src/rc_formatters.py:1160 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "删除了wiki \"{wiki}\"" + +#: src/rc_formatters.py:1163 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "解锁了wiki \"{wiki}\"" + +#: src/rc_formatters.py:1166 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "生成了转储 {file}" + +#: src/rc_formatters.py:1169 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "删除了转储 {file}" + +#: src/rc_formatters.py:1177 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "将 \"{article}\" 标记为进行翻译" + +#: src/rc_formatters.py:1180 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "将 \"{article}\" 从翻译系统中移除" + +#: src/rc_formatters.py:1183 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "已完成将翻译页面从 \"{article}\" 移动到 \"{target}\"" + +#: src/rc_formatters.py:1186 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "在移动 \"{article}\" 到 \"{target}\" 时遇到问题" + +#: src/rc_formatters.py:1189 +#, python-brace-format +msgid "Completed deletion of translatable page \"{article}\"" +msgstr "已完成删除可翻译页面 \"{article}\"" + +#: src/rc_formatters.py:1192 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "无法删除 \"{article}\",其属于可翻译页面 \"{target}\"" + +#: src/rc_formatters.py:1195 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "已完成删除翻译页面 \"{article}\"" + +#: src/rc_formatters.py:1198 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "无法删除 \"{article}\",其属于翻译页面 \"{target}\"" + +#: src/rc_formatters.py:1201 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "支持了 \"{article}\" 的翻译" + +#: src/rc_formatters.py:1204 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "不支持了 \"{article}\" 的翻译" + +#: src/rc_formatters.py:1210 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "将 \"{article}\" 的语言限制为 `{languages}`" + +#: src/rc_formatters.py:1212 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "将 \"{article}\" 的优先语言设为 `{languages}`" + +#: src/rc_formatters.py:1214 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "从 \"{article}\" 移除了优先语言" + +#: src/rc_formatters.py:1217 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "将可翻译页面 \"{article}\" 加入聚合信息组 \"{group}\"" + +#: src/rc_formatters.py:1220 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "将可翻译页面 \"{article}\" 从聚合信息组 \"{group}\" 中移除" + +#: src/rc_formatters.py:1227 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "复核了翻译 \"{article}\"" + +#: src/rc_formatters.py:1230 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "更改了 \"{article}\" 的 `{language}` 翻译的状态" + +#: src/rc_formatters.py:1232 +msgid "Old state" +msgstr "旧状态" + +#: src/rc_formatters.py:1233 +msgid "New state" +msgstr "新状态" + +#: src/rc_formatters.py:1242 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "更改了 \"{article}\" 的语言" + +#: src/rc_formatters.py:1243 +msgid "Old language" +msgstr "旧语言" + +#: src/rc_formatters.py:1244 +msgid "New language" +msgstr "新语言" + +#: src/rc_formatters.py:1248 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "将有 {edits} 次编辑的用户 \"{old_name}\" 重命名为 \"{new_name}\"" + +#: src/rc_formatters.py:1250 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "将用户 \"{old_name}\" 重命名为 \"{new_name}\"" + +#: src/rc_formatters.py:1254 +msgid "Action has been hidden by administration" +msgstr "操作已被管理员隐藏" + +#: src/rc_formatters.py:1288 +msgid "**Added**: " +msgstr "**添加了**: " + +#: src/rc_formatters.py:1288 +msgid " and {} more\n" +msgstr " 还有{}更多\n" + +#: src/rc_formatters.py:1289 +msgid "**Removed**: " +msgstr "**移除了**: " + +#: src/rc_formatters.py:1289 +msgid " and {} more" +msgstr " 还有{}更多" + +#: src/rc_formatters.py:1290 +msgid "Changed categories" +msgstr "更改了分类" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" +#~ msgstr "[{author}]({author_url}) 恢复了wiki *{wiki_name}* {comment}" + +#, python-brace-format +#~ msgid "Restored a \"{wiki}\" wiki" +#~ msgstr "还原了wiki \"{wiki}\"" + +#~ msgid "their own profile" +#~ msgstr "自己" + +#~ msgid "their own" +#~ msgstr "自己" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on {target} profile" +#~ msgstr "[{author}]({author_url}) 在 {target} 的资料页上删除了一条评论" + +#, python-brace-format +#~ msgid "[{target}]({target_url})'s" +#~ msgstr "[{target}]({target_url})的" + +#, python-brace-format +#~ msgid "[their own]({target_url})" +#~ msgstr "[Ta自己的]({target_url})" + +#~ msgid "Imported interwiki" +#~ msgstr "导入了跨wiki表" diff --git a/locale/zh-hant/LC_MESSAGES/formatters.po b/locale/zh-hant/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..52f8fe3 --- /dev/null +++ b/locale/zh-hant/LC_MESSAGES/formatters.po @@ -0,0 +1,1533 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDw package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: zh_Hant\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"PO-Revision-Date: 2021-04-14 14:22+0000\n" +"Last-Translator: Winston Sung \n" +"Language-Team: Chinese (Traditional) \n" +"Language: zh-hant\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.4.2\n" + +#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 +#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 +#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 +msgid "unknown" +msgstr "" + +#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 +#: src/rc_formatters.py:75 src/rc_formatters.py:96 +msgid "Unregistered user" +msgstr "未註冊使用者" + +#: src/discussion_formatters.py:39 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: src/discussion_formatters.py:42 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: src/discussion_formatters.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: src/discussion_formatters.py:54 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" + +#: src/discussion_formatters.py:61 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" + +#: src/discussion_formatters.py:64 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" + +#: src/discussion_formatters.py:72 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" + +#: src/discussion_formatters.py:78 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" + +#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" + +#: src/discussion_formatters.py:123 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "" + +#: src/discussion_formatters.py:127 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "" + +#: src/discussion_formatters.py:134 +msgid "Option {}" +msgstr "" + +#: src/discussion_formatters.py:135 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: src/discussion_formatters.py:139 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "" + +#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 +#: src/rc_formatters.py:1283 +msgid "Tags" +msgstr "" + +#: src/discussion_formatters.py:155 +msgid "{} tags" +msgstr "" + +#: src/discussion_formatters.py:160 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "" + +#: src/discussion_formatters.py:169 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: src/discussion_formatters.py:173 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: src/discussion_formatters.py:180 +#, python-brace-format +msgid "Commented on {article}" +msgstr "" + +#: src/discussion_formatters.py:184 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "" + +#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "" + +#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 +#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 +msgid "Report this on the support server" +msgstr "" + +#: src/rc_formatters.py:28 +msgid "None" +msgstr "無" + +#: src/rc_formatters.py:28 +msgid "Warning issued" +msgstr "已發出警告" + +#: src/rc_formatters.py:28 +msgid "**Blocked user**" +msgstr "**已封鎖使用者**" + +#: src/rc_formatters.py:28 +msgid "Tagged the edit" +msgstr "已標記編輯" + +#: src/rc_formatters.py:28 +msgid "Disallowed the action" +msgstr "已阻止操作" + +#: src/rc_formatters.py:28 +msgid "**IP range blocked**" +msgstr "**已封鎖IP段**" + +#: src/rc_formatters.py:28 +msgid "Throttled actions" +msgstr "已壓制操作" + +#: src/rc_formatters.py:28 +msgid "Removed autoconfirmed group" +msgstr "已移除自動確認使用者群組" + +#: src/rc_formatters.py:28 +msgid "**Removed from privileged groups**" +msgstr "**已移除特有使用者群組**" + +#: src/rc_formatters.py:29 +msgid "Edit" +msgstr "編輯" + +#: src/rc_formatters.py:29 +msgid "Upload" +msgstr "上傳" + +#: src/rc_formatters.py:29 +msgid "Move" +msgstr "移動" + +#: src/rc_formatters.py:29 +msgid "Stash upload" +msgstr "隱藏上傳" + +#: src/rc_formatters.py:29 +msgid "Deletion" +msgstr "刪除" + +#: src/rc_formatters.py:29 +msgid "Account creation" +msgstr "建立帳號" + +#: src/rc_formatters.py:29 +msgid "Auto account creation" +msgstr "自動建立帳號" + +#: src/rc_formatters.py:83 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" +"[{author}]({author_url}) 觸發了 *{abuse_filter}* ,於 *[{target}]" +"({target_url})* 執行操作「{action}」 - 已採取的操作:{result}。" + +#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 +#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 +#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 +#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 +#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 +#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 +#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 +#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 +#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 +msgid "Unknown" +msgstr "未知" + +#: src/rc_formatters.py:116 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) 編輯了 [{article}]({edit_link}) {comment} {bold}" +"({sign}{edit_size}){bold}" + +#: src/rc_formatters.py:118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) 建立了 [{article}]({edit_link}) {comment} {bold}" +"({sign}{edit_size}){bold}" + +#: src/rc_formatters.py:121 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) 上傳了 [{file}]({file_link}) {comment}" + +#: src/rc_formatters.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) 回退了 [{file}]({file_link}) 的版本 {comment}" + +#: src/rc_formatters.py:132 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) 上傳了 [{file}]({file_link}) 的新版本 {comment}" + +#: src/rc_formatters.py:135 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" + +#: src/rc_formatters.py:141 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" +"[{author}]({author_url}) 透過覆蓋 [{page}]({page_link}) 刪除了重新導向 " +"{comment}" + +#: src/rc_formatters.py:147 src/rc_formatters.py:152 +msgid "without making a redirect" +msgstr "不留重新導向" + +#: src/rc_formatters.py:147 src/rc_formatters.py:153 +msgid "with a redirect" +msgstr "保留重新導向" + +#: src/rc_formatters.py:148 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) 已將 {redirect}*{article}* 移動至 [{target}]" +"({target_url}) {made_a_redirect} {comment}" + +#: src/rc_formatters.py:154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) 已透過重新導向將 {redirect}*{article}* 移動至 " +"[{target}]({target_url}) {made_a_redirect} {comment}" + +#: src/rc_formatters.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) 已將 {redirect}*{article}* 的保護設定移動至 " +"[{target}]({target_url}) {comment}" + +#: src/rc_formatters.py:170 src/rc_formatters.py:855 +msgid "for infinity and beyond" +msgstr "時長為無線期" + +#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#, python-brace-format +msgid "for {num} {translated_length}" +msgstr "時長為{num} {translated_length}" + +#: src/rc_formatters.py:185 src/rc_formatters.py:867 +msgid "until {}" +msgstr "直到{}" + +#: src/rc_formatters.py:189 +msgid " on pages: " +msgstr " 於頁面: " + +#: src/rc_formatters.py:196 src/rc_formatters.py:881 +msgid " and namespaces: " +msgstr " 及命名空間: " + +#: src/rc_formatters.py:198 +msgid " on namespaces: " +msgstr " 於命名空間: " + +#: src/rc_formatters.py:210 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) 封鎖了 [{user}]({user_url}) {time}{restriction_desc}" +"{comment}" + +#: src/rc_formatters.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) 變更了 [{blocked_user}]({user_url}) 的封鎖設定 " +"{comment}" + +#: src/rc_formatters.py:218 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "[{author}]({author_url}) 解封了 [{blocked_user}]({user_url}) {comment}" + +#: src/rc_formatters.py:223 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:225 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile" +msgstr "" + +#: src/rc_formatters.py:231 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile" +msgstr "" + +#: src/rc_formatters.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile" +msgstr "" + +#: src/rc_formatters.py:245 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:251 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" +msgstr "" + +#: src/rc_formatters.py:257 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) purged a comment on their own profile" +msgstr "" + +#: src/rc_formatters.py:267 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:269 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" +msgstr "" + +#: src/rc_formatters.py:274 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" + +#: src/rc_formatters.py:281 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" + +#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 +#: src/rc_formatters.py:979 +msgid "none" +msgstr "" + +#: src/rc_formatters.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) from {old_groups} to {new_groups}{comment}" +msgstr "" + +#: src/rc_formatters.py:303 +#, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) from {old_groups} to " +"{new_groups}{comment}" +msgstr "" + +#: src/rc_formatters.py:304 src/rc_formatters.py:965 +msgid "System" +msgstr "" + +#: src/rc_formatters.py:309 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" + +#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 +#: src/rc_formatters.py:993 +msgid " [cascading]" +msgstr "" + +#: src/rc_formatters.py:316 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" + +#: src/rc_formatters.py:323 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" + +#: src/rc_formatters.py:327 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" + +#: src/rc_formatters.py:340 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" + +#: src/rc_formatters.py:345 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:347 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "" + +#: src/rc_formatters.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" + +#: src/rc_formatters.py:364 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" + +#: src/rc_formatters.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" + +#: src/rc_formatters.py:372 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:375 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "" + +#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "" + +#: src/rc_formatters.py:380 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" + +#: src/rc_formatters.py:383 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" + +#: src/rc_formatters.py:388 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" + +#: src/rc_formatters.py:394 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" + +#: src/rc_formatters.py:400 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +msgstr "" + +#: src/rc_formatters.py:403 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" + +#: src/rc_formatters.py:407 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" + +#: src/rc_formatters.py:410 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" + +#: src/rc_formatters.py:413 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" + +#: src/rc_formatters.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" + +#: src/rc_formatters.py:421 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:423 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:428 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:433 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:436 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" + +#: src/rc_formatters.py:441 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" + +#: src/rc_formatters.py:443 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +"[{author}]({author_url}) 已將 {redirect}*{article}* 移動至 [{target}]" +"({target_url}) {made_a_redirect} {comment}" + +#: src/rc_formatters.py:449 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" + +#: src/rc_formatters.py:452 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" + +#: src/rc_formatters.py:454 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "" + +#: src/rc_formatters.py:456 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: src/rc_formatters.py:459 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: src/rc_formatters.py:462 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" + +#: src/rc_formatters.py:467 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: src/rc_formatters.py:473 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" + +#: src/rc_formatters.py:477 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" + +#: src/rc_formatters.py:481 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: src/rc_formatters.py:486 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "" + +#: src/rc_formatters.py:491 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "" + +#: src/rc_formatters.py:502 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" + +#: src/rc_formatters.py:509 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" + +#: src/rc_formatters.py:516 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:524 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:532 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translatable page [{article}]" +"({article_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:540 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:548 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:556 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:564 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" + +#: src/rc_formatters.py:571 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:581 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" + +#: src/rc_formatters.py:587 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" + +#: src/rc_formatters.py:593 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" + +#: src/rc_formatters.py:600 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" + +#: src/rc_formatters.py:607 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" + +#: src/rc_formatters.py:619 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" + +#: src/rc_formatters.py:627 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" + +#: src/rc_formatters.py:634 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" + +#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 +#: src/rc_formatters.py:1241 +msgid "(default)" +msgstr "" + +#: src/rc_formatters.py:647 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" + +#: src/rc_formatters.py:656 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" + +#: src/rc_formatters.py:661 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" + +#: src/rc_formatters.py:665 +msgid "An action has been hidden by administration." +msgstr "" + +#: src/rc_formatters.py:681 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: src/rc_formatters.py:682 +msgid "Performed" +msgstr "" + +#: src/rc_formatters.py:683 +msgid "Action taken" +msgstr "" + +#: src/rc_formatters.py:684 +msgid "Title" +msgstr "" + +#: src/rc_formatters.py:693 src/rc_formatters.py:980 +msgid "No description provided" +msgstr "" + +#: src/rc_formatters.py:717 +msgid "(N!) " +msgstr "" + +#: src/rc_formatters.py:718 +msgid "m" +msgstr "" + +#: src/rc_formatters.py:718 +msgid "b" +msgstr "" + +#: src/rc_formatters.py:735 src/rc_formatters.py:740 +msgid "__Only whitespace__" +msgstr "" + +#: src/rc_formatters.py:745 +msgid "Removed" +msgstr "" + +#: src/rc_formatters.py:747 +msgid "Added" +msgstr "" + +#: src/rc_formatters.py:781 src/rc_formatters.py:820 +msgid "Options" +msgstr "" + +#: src/rc_formatters.py:781 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "" + +#: src/rc_formatters.py:786 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "" + +#: src/rc_formatters.py:788 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "" + +#: src/rc_formatters.py:790 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "" + +#: src/rc_formatters.py:806 +msgid "**No license!**" +msgstr "" + +#: src/rc_formatters.py:818 +msgid "" +"\n" +"License: {}" +msgstr "" + +#: src/rc_formatters.py:820 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "" + +#: src/rc_formatters.py:825 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "" + +#: src/rc_formatters.py:830 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" + +#: src/rc_formatters.py:836 +msgid "No redirect has been made" +msgstr "" + +#: src/rc_formatters.py:837 +msgid "A redirect has been made" +msgstr "" + +#: src/rc_formatters.py:838 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "" + +#: src/rc_formatters.py:841 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" + +#: src/rc_formatters.py:845 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "" + +#: src/rc_formatters.py:869 +msgid "unknown expiry time" +msgstr "" + +#: src/rc_formatters.py:874 +msgid "Blocked from editing the following pages: " +msgstr "" + +#: src/rc_formatters.py:883 +msgid "Blocked from editing pages on following namespaces: " +msgstr "" + +#: src/rc_formatters.py:894 +msgid "Partial block details" +msgstr "" + +#: src/rc_formatters.py:895 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "" + +#: src/rc_formatters.py:899 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "" + +#: src/rc_formatters.py:903 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "" + +#: src/rc_formatters.py:910 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:912 +msgid "Left a comment on their own profile" +msgstr "" + +#: src/rc_formatters.py:919 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:921 +msgid "Replied to a comment on their own profile" +msgstr "" + +#: src/rc_formatters.py:928 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:930 +msgid "Edited a comment on their own profile" +msgstr "" + +#: src/rc_formatters.py:935 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:937 +msgid "Edited their own profile" +msgstr "" + +#: src/rc_formatters.py:939 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "" + +#: src/rc_formatters.py:941 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "" + +#: src/rc_formatters.py:946 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:948 +msgid "Purged a comment on their own profile" +msgstr "" + +#: src/rc_formatters.py:956 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "" + +#: src/rc_formatters.py:958 +msgid "Deleted a comment on their own profile" +msgstr "" + +#: src/rc_formatters.py:962 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "" + +#: src/rc_formatters.py:966 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "" + +#: src/rc_formatters.py:981 +#, python-brace-format +msgid "Groups changed from {old_groups} to {new_groups}{reason}" +msgstr "" + +#: src/rc_formatters.py:985 +#, python-brace-format +msgid "Protected {target}" +msgstr "" + +#: src/rc_formatters.py:991 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "" + +#: src/rc_formatters.py:997 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "" + +#: src/rc_formatters.py:1001 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "" + +#: src/rc_formatters.py:1013 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "" + +#: src/rc_formatters.py:1018 +#, python-brace-format +msgid "Restored {article}" +msgstr "" + +#: src/rc_formatters.py:1021 +msgid "Changed visibility of log events" +msgstr "" + +#: src/rc_formatters.py:1031 +#, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "" + +#: src/rc_formatters.py:1036 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "" + +#: src/rc_formatters.py:1039 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "" + +#: src/rc_formatters.py:1042 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" + +#: src/rc_formatters.py:1046 +msgid "Created account automatically" +msgstr "" + +#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 +msgid "Created account" +msgstr "" + +#: src/rc_formatters.py:1052 +#, python-brace-format +msgid "Created account {article}" +msgstr "" + +#: src/rc_formatters.py:1055 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" + +#: src/rc_formatters.py:1061 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: src/rc_formatters.py:1067 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: src/rc_formatters.py:1073 +msgid "Deleted an entry in interwiki table" +msgstr "" + +#: src/rc_formatters.py:1074 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: src/rc_formatters.py:1077 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "" + +#: src/rc_formatters.py:1078 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "" + +#: src/rc_formatters.py:1083 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: src/rc_formatters.py:1084 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "" + +#: src/rc_formatters.py:1087 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "" + +#: src/rc_formatters.py:1090 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "" + +#: src/rc_formatters.py:1093 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "" + +#: src/rc_formatters.py:1099 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:1103 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:1110 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:1117 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "" + +#: src/rc_formatters.py:1121 +#, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "" + +#: src/rc_formatters.py:1125 +#, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "" + +#: src/rc_formatters.py:1127 +msgid "Removed from" +msgstr "" + +#: src/rc_formatters.py:1127 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" + +#: src/rc_formatters.py:1131 +#, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "" + +#: src/rc_formatters.py:1134 +#, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "" + +#: src/rc_formatters.py:1137 +msgid "Changed wiki settings" +msgstr "" + +#: src/rc_formatters.py:1141 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "" + +#: src/rc_formatters.py:1144 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: src/rc_formatters.py:1147 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 +msgid "Wiki" +msgstr "" + +#: src/rc_formatters.py:1151 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "" + +#: src/rc_formatters.py:1157 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "" + +#: src/rc_formatters.py:1160 +#, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "" + +#: src/rc_formatters.py:1163 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "" + +#: src/rc_formatters.py:1166 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "" + +#: src/rc_formatters.py:1169 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "" + +#: src/rc_formatters.py:1177 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: src/rc_formatters.py:1180 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: src/rc_formatters.py:1183 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1186 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1189 +#, python-brace-format +msgid "Completed deletion of translatable page \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1192 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1195 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1198 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: src/rc_formatters.py:1201 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1204 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1210 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: src/rc_formatters.py:1212 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: src/rc_formatters.py:1214 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1217 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: src/rc_formatters.py:1220 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: src/rc_formatters.py:1227 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1230 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1232 +msgid "Old state" +msgstr "" + +#: src/rc_formatters.py:1233 +msgid "New state" +msgstr "" + +#: src/rc_formatters.py:1242 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "" + +#: src/rc_formatters.py:1243 +msgid "Old language" +msgstr "" + +#: src/rc_formatters.py:1244 +msgid "New language" +msgstr "" + +#: src/rc_formatters.py:1248 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" + +#: src/rc_formatters.py:1250 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: src/rc_formatters.py:1254 +msgid "Action has been hidden by administration" +msgstr "" + +#: src/rc_formatters.py:1288 +msgid "**Added**: " +msgstr "" + +#: src/rc_formatters.py:1288 +msgid " and {} more\n" +msgstr "" + +#: src/rc_formatters.py:1289 +msgid "**Removed**: " +msgstr "" + +#: src/rc_formatters.py:1289 +msgid " and {} more" +msgstr "" + +#: src/rc_formatters.py:1290 +msgid "Changed categories" +msgstr "" From 598e4139beaacbde5188696b08db514a16145b3a Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 18 May 2021 13:54:12 +0200 Subject: [PATCH 097/173] Updated translation files with new merged format for formatters --- locale/de/LC_MESSAGES/formatters.po | 2581 ++++++++++----------- locale/de/LC_MESSAGES/misc.po | 34 +- locale/de/LC_MESSAGES/rcgcdw.po | 189 +- locale/de/LC_MESSAGES/redaction.po | 6 +- locale/fr/LC_MESSAGES/formatters.po | 2398 ++++++++++---------- locale/fr/LC_MESSAGES/misc.po | 34 +- locale/fr/LC_MESSAGES/rcgcdw.po | 189 +- locale/fr/LC_MESSAGES/redaction.po | 6 +- locale/hi/LC_MESSAGES/formatters.po | 2525 +++++++++++---------- locale/hi/LC_MESSAGES/misc.po | 34 +- locale/hi/LC_MESSAGES/rcgcdw.po | 192 +- locale/hi/LC_MESSAGES/redaction.po | 6 +- locale/lol/LC_MESSAGES/formatters.po | 2203 +++++++++--------- locale/lol/LC_MESSAGES/misc.po | 34 +- locale/lol/LC_MESSAGES/rcgcdw.po | 144 +- locale/lol/LC_MESSAGES/redaction.po | 6 +- locale/pl/LC_MESSAGES/formatters.po | 2617 +++++++++++----------- locale/pl/LC_MESSAGES/misc.po | 34 +- locale/pl/LC_MESSAGES/rcgcdw.po | 209 +- locale/pl/LC_MESSAGES/redaction.po | 6 +- locale/pt-br/LC_MESSAGES/formatters.po | 2577 ++++++++++----------- locale/pt-br/LC_MESSAGES/misc.po | 34 +- locale/pt-br/LC_MESSAGES/rcgcdw.po | 189 +- locale/pt-br/LC_MESSAGES/redaction.po | 6 +- locale/ru/LC_MESSAGES/formatters.po | 2592 ++++++++++----------- locale/ru/LC_MESSAGES/misc.po | 34 +- locale/ru/LC_MESSAGES/rcgcdw.po | 209 +- locale/ru/LC_MESSAGES/redaction.po | 6 +- locale/templates/formatters.pot | 657 ++---- locale/templates/misc.pot | 34 +- locale/templates/rcgcdw.pot | 137 +- locale/templates/redaction.pot | 6 +- locale/uk/LC_MESSAGES/formatters.po | 2536 ++++++++++----------- locale/uk/LC_MESSAGES/misc.po | 34 +- locale/uk/LC_MESSAGES/rcgcdw.po | 209 +- locale/uk/LC_MESSAGES/redaction.po | 6 +- locale/zh-hans/LC_MESSAGES/formatters.po | 2477 ++++++++++---------- locale/zh-hans/LC_MESSAGES/misc.po | 34 +- locale/zh-hans/LC_MESSAGES/rcgcdw.po | 169 +- locale/zh-hans/LC_MESSAGES/redaction.po | 6 +- locale/zh-hant/LC_MESSAGES/formatters.po | 2219 +++++++++--------- locale/zh-hant/LC_MESSAGES/misc.po | 34 +- locale/zh-hant/LC_MESSAGES/rcgcdw.po | 169 +- locale/zh-hant/LC_MESSAGES/redaction.po | 6 +- 44 files changed, 13752 insertions(+), 14075 deletions(-) diff --git a/locale/de/LC_MESSAGES/formatters.po b/locale/de/LC_MESSAGES/formatters.po index 97abe6e..e8634d9 100644 --- a/locale/de/LC_MESSAGES/formatters.po +++ b/locale/de/LC_MESSAGES/formatters.po @@ -7,24 +7,9 @@ #, fuzzy msgid "" msgstr "" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" -"PO-Revision-Date: 2020-12-13 14:30+0000\n" -"Last-Translator: Frisk The Evil Goat Overlord \n" -"Language-Team: German \n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-12-29 15:21+0000\n" "Last-Translator: MarkusRost \n" "Language-Team: German ) in " @@ -60,7 +447,7 @@ msgstr "" "[{author}]({author_url}) erstellte [{title}](<{url}f/p/{threadId}>) in " "{forumName}" -#: src/discussion_formatters.py:42 +#: extensions/base/discussions.py:217 #, python-brace-format msgid "" "[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " @@ -69,7 +456,7 @@ msgstr "" "[{author}]({author_url}) erstellte eine Umfrage [{title}](<{url}f/p/" "{threadId}>) in {forumName}" -#: src/discussion_formatters.py:45 +#: extensions/base/discussions.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " @@ -78,7 +465,7 @@ msgstr "" "[{author}]({author_url}) erstellte ein Quiz [{title}](<{url}f/p/{threadId}>) " "in {forumName}" -#: src/discussion_formatters.py:54 +#: extensions/base/discussions.py:234 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " @@ -87,7 +474,17 @@ msgstr "" "[{author}]({author_url}) erstellte eine [Antwort](<{url}f/p/{threadId}/r/" "{postId}>) zu [{title}](<{url}f/p/{threadId}>) in {forumName}" -#: src/discussion_formatters.py:61 +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "Erstellte „{title}“ auf der Nachrichtenseite von {user}" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "Antwortete auf „{title}“ auf der Nachrichtenseite von {user}" + +#: extensions/base/discussions.py:312 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" @@ -98,7 +495,7 @@ msgstr "" "{user_wall}?threadId={threadId}>) auf der [Nachrichtenseite von {user}]" "(<{url}wiki/Message_Wall:{user_wall}>)" -#: src/discussion_formatters.py:64 +#: extensions/base/discussions.py:318 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" @@ -111,7 +508,17 @@ msgstr "" "Message_Wall:{user_wall}?threadId={threadId}>) auf der [Nachrichtenseite von " "{user}](<{url}wiki/Message_Wall:{user_wall}>)" -#: src/discussion_formatters.py:72 +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "Kommentierte zu „{article}“" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "Antwortete auf ein Kommentar zu „{article}“" + +#: extensions/base/discussions.py:359 #, python-brace-format msgid "" "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " @@ -120,7 +527,7 @@ msgstr "" "[{author}]({author_url}) erstellte ein [Kommentar](<{url}?" "commentId={commentId}>) zu [{article}](<{url}>)" -#: src/discussion_formatters.py:78 +#: extensions/base/discussions.py:365 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" @@ -131,153 +538,228 @@ msgstr "" "commentId={commentId}&replyId={replyId}>) auf ein [Kommentar](<{url}?" "commentId={commentId}>) zu [{article}](<{url}>)" -#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "Änderte Wiki-Einstellungen" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) änderte Wiki-Einstellungen{reason}" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "Löschte das Wiki „{wiki}“" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "Unbekannt" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) löschte das Wiki *{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:80 +#, fuzzy, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "Bearbeitete die Benutzergruppe „{usergroup_name}“" + +#: extensions/base/managewiki.py:89 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" +"[{author}]({author_url}) bearbeitete die Benutzergruppe *{group_name}" +"*{comment}" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "Sperrte das Wiki „{wiki}“" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) sperrte das Wiki *{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:124 +#, fuzzy, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "Bearbeitete den Namensraum „{namespace_name}“" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "Wiki" + +#: extensions/base/managewiki.py:134 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) bearbeitete den Namensraum *{namespace_name}* für " +"*{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:147 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "Löschte den Namensraum „{namespace_name}“" + +#: extensions/base/managewiki.py:158 #, python-brace-format msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" msgstr "" -"Unbekanntes Event `{event}` von [{author}]({author_url}), melde es auf dem " -"[Support-Server](<{support}>)." +"[{author}]({author_url}) löschte den Namesraum *{namespace_name}* für " +"*{wiki_name}*{comment}" -#: src/discussion_formatters.py:123 +#: extensions/base/managewiki.py:173 #, python-brace-format -msgid "Created \"{title}\"" -msgstr "Erstellte „{title}“" +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "Bearbeitete die Benutzergruppe „{usergroup_name}“" -#: src/discussion_formatters.py:127 +#: extensions/base/managewiki.py:182 #, python-brace-format -msgid "Created a poll \"{title}\"" -msgstr "Erstellte eine Umfrage „{title}“" - -#: src/discussion_formatters.py:134 -msgid "Option {}" -msgstr "Option {}" - -#: src/discussion_formatters.py:135 -#, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "__[Bild öffnen]({image_url})__" - -#: src/discussion_formatters.py:139 -#, python-brace-format -msgid "Created a quiz \"{title}\"" -msgstr "Erstellte ein Quiz „{title}“" - -#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 -#: src/rc_formatters.py:1283 -#, fuzzy -msgid "Tags" +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" msgstr "" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" -"Tags\n" -"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" -"Markierungen" +"[{author}]({author_url}) bearbeitete die Benutzergruppe *{group_name}" +"*{comment}" -#: src/discussion_formatters.py:155 -msgid "{} tags" -msgstr "{} Tags" +#: extensions/base/managewiki.py:195 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "Löschte das Wiki „{wiki}“" -#: src/discussion_formatters.py:160 +#: extensions/base/managewiki.py:203 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) löschte das Wiki *{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:217 #, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "Antwortete auf „{title}“" +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "Entsperrte das Wiki „{wiki}“" -#: src/discussion_formatters.py:169 +#: extensions/base/managewiki.py:225 #, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "Erstellte „{title}“ auf der Nachrichtenseite von {user}" +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) entsperrte das Wiki *{wiki_name}*{comment}" -#: src/discussion_formatters.py:173 +#: extensions/base/datadump.py:36 #, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "Antwortete auf „{title}“ auf der Nachrichtenseite von {user}" +msgid "Generated {file} dump" +msgstr "Generierte {file} Dump" -#: src/discussion_formatters.py:180 +#: extensions/base/datadump.py:45 #, python-brace-format -msgid "Commented on {article}" -msgstr "Kommentierte zu „{article}“" +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "[{author}]({author_url}) generierte *{file}* Dump{comment}" -#: src/discussion_formatters.py:184 +#: extensions/base/datadump.py:58 #, python-brace-format -msgid "Replied to a comment on {article}" -msgstr "Antwortete auf ein Kommentar zu „{article}“" +msgid "Deleted {file} dump" +msgstr "Löschte {file} Dump" -#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#: extensions/base/datadump.py:67 #, python-brace-format -msgid "Unknown event `{event}`" -msgstr "Unbekanntes Event `{event}`" +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "[{author}]({author_url}) löschte *{file}* Dump{comment}" -#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 -#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 -msgid "Report this on the support server" -msgstr "Melde es auf dem Support-Server" - -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "None" msgstr "Keine" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Warning issued" msgstr "Gewarnt" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Blocked user**" msgstr "**Benutzer gesperrt**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Tagged the edit" msgstr "Änderung markiert" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Disallowed the action" msgstr "Aktion verhindert" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**IP range blocked**" msgstr "**IP-Adressbereich gesperrt**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Throttled actions" msgstr "Aktionen gedrosselt" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Removed autoconfirmed group" msgstr "„Automatisch bestätigter Benutzer“-Status entzogen" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Removed from privileged groups**" msgstr "**Gruppen mit Sonderrechten entfernt**" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Edit" msgstr "Bearbeitung" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Upload" msgstr "Hochladen" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Move" msgstr "Verschieben" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Stash upload" msgstr "Hochladen vom Zwischenspeicher" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Deletion" msgstr "Löschung" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Account creation" msgstr "Benutzerkontenerstellung" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Auto account creation" msgstr "Automatische Benutzerkontenerstellung" -#: src/rc_formatters.py:83 +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "{user} löste „{abuse_filter}“ aus" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "Aktion" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "Maßnahmen" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "Seite" + +#: extensions/base/abusefilter.py:66 #, python-brace-format msgid "" "[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " @@ -287,19 +769,83 @@ msgstr "" "*[{target}]({target_url})* den Filter *{abuse_filter}* aus. Ergriffene " "Maßnahmen: {result}." -#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 -#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 -#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 -#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 -#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 -#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 -#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 -#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 -#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 -msgid "Unknown" -msgstr "Unbekannt" +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "Änderte Missbrauchsfilter {number}" -#: src/rc_formatters.py:116 +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) änderte [Missbrauchsfilter {number}]({filter_url})" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "Erstellte Missbrauchsfilter {number}" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) erstellte [Missbrauchsfilter {number}]({filter_url})" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "(N!) " + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "K" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "B" + +#: extensions/base/mediawiki.py:112 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" @@ -308,7 +854,7 @@ msgstr "" "[{author}]({author_url}) bearbeitete [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" -#: src/rc_formatters.py:118 +#: extensions/base/mediawiki.py:117 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" @@ -317,12 +863,48 @@ msgstr "" "[{author}]({author_url}) erstellte [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" -#: src/rc_formatters.py:121 -#, python-brace-format -msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" -msgstr "[{author}]({author_url}) lud [{file}]({file_link}) hoch{comment}" +#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +msgid "Options" +msgstr "Optionen" -#: src/rc_formatters.py:128 +#: extensions/base/mediawiki.py:191 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([Vorschau]({link}) | [zurücksetzen]({undolink}))" + +#: extensions/base/mediawiki.py:196 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "Neue Dateiversion {name}" + +#: extensions/base/mediawiki.py:198 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "Setzte {name} auf eine alte Version zurück" + +#: extensions/base/mediawiki.py:200 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "Neue Datei {name}" + +#: extensions/base/mediawiki.py:209 +msgid "**No license!**" +msgstr "**Keine Lizenz!**" + +#: extensions/base/mediawiki.py:224 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"Lizenz: {}" + +#: extensions/base/mediawiki.py:226 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([Vorschau]({link}))" + +#: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" @@ -330,7 +912,7 @@ msgstr "" "[{author}]({author_url}) setzte [{file}]({file_link}) auf eine alte Version " "zurück{comment}" -#: src/rc_formatters.py:132 +#: extensions/base/mediawiki.py:248 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -339,12 +921,27 @@ msgstr "" "[{author}]({author_url}) lud eine neue Version von [{file}]({file_link}) " "hoch{comment}" -#: src/rc_formatters.py:135 +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) lud [{file}]({file_link}) hoch{comment}" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "Löschte {article}" + +#: extensions/base/mediawiki.py:283 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) löschte [{page}]({page_link}){comment}" -#: src/rc_formatters.py:141 +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "Löschte die Weiterleitung {article} um Platz zu machen" + +#: extensions/base/mediawiki.py:308 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -353,250 +950,37 @@ msgstr "" "[{author}]({author_url}) löschte die Weiterleitung [{page}]({page_link}) " "durch Überschreiben{comment}" -#: src/rc_formatters.py:147 src/rc_formatters.py:152 -msgid "without making a redirect" -msgstr "ohne eine Weiterleitung zu erstellen" - -#: src/rc_formatters.py:147 src/rc_formatters.py:153 -msgid "with a redirect" -msgstr "und erstellte eine Weiterleitung" - -#: src/rc_formatters.py:148 +#: extensions/base/mediawiki.py:322 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" +msgid "Restored {article}" +msgstr "Stellte {article} wieder her" + +#: extensions/base/mediawiki.py:331 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" -"[{author}]({author_url}) verschob {redirect}*{article}* nach [{target}]" -"({target_url}) {made_a_redirect}{comment}" +"[{author}]({author_url}) stellte [{article}]({article_url}) wieder " +"her{comment}" -#: src/rc_formatters.py:154 +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "Änderte die Sichtbarkeit eines Logbucheintrags" + +#: extensions/base/mediawiki.py:356 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -"[{target}]({target_url}) {made_a_redirect}{comment}" +msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "" -"[{author}]({author_url}) verschob {redirect}*{article}* nach [{target}]" -"({target_url}) und überschrieb eine Weiterleitung {made_a_redirect}{comment}" +"[{author}]({author_url}) änderte die Sichtbarkeit eines " +"Logbucheintrags{comment}" -#: src/rc_formatters.py:159 +#: extensions/base/mediawiki.py:370 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) verschob die Schutzeinstellungen von {redirect}" -"*{article}* nach [{target}]({target_url}){comment}" +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "Änderte die Sichtbarkeit einer Versionen von {article} " +msgstr[1] "Änderte die Sichtbarkeit von {amount} Versionen von {article} " -#: src/rc_formatters.py:170 src/rc_formatters.py:855 -msgid "for infinity and beyond" -msgstr "für alle Ewigkeit" - -#: src/rc_formatters.py:179 src/rc_formatters.py:863 -#, python-brace-format -msgid "for {num} {translated_length}" -msgstr "für {num} {translated_length}" - -#: src/rc_formatters.py:185 src/rc_formatters.py:867 -msgid "until {}" -msgstr "bis {}" - -#: src/rc_formatters.py:189 -msgid " on pages: " -msgstr " auf Seiten: " - -#: src/rc_formatters.py:196 src/rc_formatters.py:881 -msgid " and namespaces: " -msgstr " und Namensräumen: " - -#: src/rc_formatters.py:198 -msgid " on namespaces: " -msgstr " in Namensräumen: " - -#: src/rc_formatters.py:210 -#, python-brace-format -msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" -msgstr "" -"[{author}]({author_url}) sperrte [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" - -#: src/rc_formatters.py:214 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) änderte die Sperreinstellungen für [{blocked_user}]" -"({user_url}){comment}" - -#: src/rc_formatters.py:218 -#, python-brace-format -msgid "" -"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) hob die Sperre von [{blocked_user}]({user_url}) " -"auf{comment}" - -#: src/rc_formatters.py:223 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) hinterließ einen [Kommentar]({comment}) auf dem " -"Profil von {target}" - -#: src/rc_formatters.py:225 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) hinterließ einen [Kommentar]({comment}) auf dem " -"eigenen Profil" - -#: src/rc_formatters.py:231 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -"profile" -msgstr "" -"[{author}]({author_url}) antwortete auf einen [Kommentar]({comment}) auf dem " -"Profil von {target}" - -#: src/rc_formatters.py:237 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on their own " -"profile" -msgstr "" -"[{author}]({author_url}) antwortete auf einen [Kommentar]({comment}) auf dem " -"eigenen Profil" - -#: src/rc_formatters.py:245 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) bearbeitete einen [Kommentar]({comment}) auf dem " -"Profil von {target}" - -#: src/rc_formatters.py:251 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) bearbeitete einen [Kommentar]({comment}) auf dem " -"eigenen Profil" - -#: src/rc_formatters.py:257 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "" -"[{author}]({author_url}) löschte einen Kommentar auf dem Profil von {target} " -"dauerhaft" - -#: src/rc_formatters.py:259 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "" -"[{author}]({author_url}) löschte einen Kommentar auf dem eigenen Profil " -"dauerhaft" - -#: src/rc_formatters.py:267 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) löschte einen [Kommentar]({comment}) auf dem Profil " -"von {target}" - -#: src/rc_formatters.py:269 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) löschte einen [Kommentar]({comment}) auf dem " -"eigenen Profil" - -#: src/rc_formatters.py:274 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) bearbeitete den {field} auf dem Profil von " -"[{target}]({target_url}). *({desc})*" - -#: src/rc_formatters.py:281 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) bearbeitete den {field} auf dem [eigenen Profil]" -"({target_url}). *({desc})*" - -#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 -#: src/rc_formatters.py:979 -msgid "none" -msgstr "keine" - -#: src/rc_formatters.py:301 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) from {old_groups} to {new_groups}{comment}" -msgstr "" -"[{author}]({author_url}) änderte die Benutzergruppen für [{target}]" -"({target_url}) von {old_groups} zu {new_groups}{comment}" - -#: src/rc_formatters.py:303 -#, python-brace-format -msgid "" -"{author} autopromoted [{target}]({target_url}) from {old_groups} to " -"{new_groups}{comment}" -msgstr "" -"{author} änderte die Benutzergruppen für [{target}]({target_url}) " -"automatisch von {old_groups} zu {new_groups}{comment}" - -#: src/rc_formatters.py:304 src/rc_formatters.py:965 -msgid "System" -msgstr "System" - -#: src/rc_formatters.py:309 -#, python-brace-format -msgid "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) schützte [{article}]({article_url}) {settings}" -"{comment}" - -#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 -#: src/rc_formatters.py:993 -msgid " [cascading]" -msgstr " [kaskadierend]" - -#: src/rc_formatters.py:316 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) änderte den Schutzstatus von [{article}]" -"({article_url}) {settings}{comment}" - -#: src/rc_formatters.py:323 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) entfernte den Schutz von [{article}]({article_url})" -"{comment}" - -#: src/rc_formatters.py:327 +#: extensions/base/mediawiki.py:383 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -611,7 +995,234 @@ msgstr[1] "" "[{author}]({author_url}) änderte die Sichtbarkeit von {amount} Versionen von " "[{article}]({article_url}){comment}" -#: src/rc_formatters.py:340 +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "Die Erstellung einer Weiterleitung wurde unterdrückt" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "Eine Weiterleitung wurde erstellt" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "Verschob {redirect}{article} nach {target}" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "ohne eine Weiterleitung zu erstellen" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "und erstellte eine Weiterleitung" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) verschob {redirect}*{article}* nach [{target}]" +"({target_url}) {made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" +"Verschob {redirect}{article} nach {title} und überschrieb eine Weiterleitung" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) verschob {redirect}*{article}* nach [{target}]" +"({target_url}) und überschrieb eine Weiterleitung {made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "Verschob die Schutzeinstellungen von {redirect}{article} nach {title}" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) verschob die Schutzeinstellungen von {redirect}" +"*{article}* nach [{target}]({target_url}){comment}" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "Schützte {target}" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr " [kaskadierend]" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) schützte [{article}]({article_url}) {settings}" +"{comment}" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "Änderte den Schutzstatus von {article}" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) änderte den Schutzstatus von [{article}]" +"({article_url}) {settings}{comment}" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "Entfernte den Schutz von {article}" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) entfernte den Schutz von [{article}]({article_url})" +"{comment}" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "für alle Ewigkeit" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:610 +msgid "Blocked from editing the following pages: " +msgstr "Bearbeiten von folgenden Seiten gesperrt: " + +#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr " und Namensräumen: " + +#: extensions/base/mediawiki.py:619 +msgid "Blocked from editing pages on following namespaces: " +msgstr "Bearbeiten von Seiten in folgenden Namensräumen gesperrt: " + +#: extensions/base/mediawiki.py:630 +msgid "Partial block details" +msgstr "Teilweise Sperre" + +#: extensions/base/mediawiki.py:633 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:635 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "Sperrte {blocked_user} {time}" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr " auf Seiten: " + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr " in Namensräumen: " + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) sperrte [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "Änderte die Sperreinstellungen für {blocked_user}" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) änderte die Sperreinstellungen für [{blocked_user}]" +"({user_url}){comment}" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "Hob die Sperre von {blocked_user} auf" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) hob die Sperre von [{blocked_user}]({user_url}) " +"auf{comment}" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "Aktion wurde versteckt" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "Eine Aktion wurde versteckt." + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "Importierte {article} mit einer Version" +msgstr[1] "Importierte {article} mit {count} Versionen" + +#: extensions/base/mediawiki.py:772 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -626,21 +1237,14 @@ msgstr[1] "" "[{author}]({author_url}) importierte [{article}]({article_url}) mit {count} " "Versionen{comment}" -#: src/rc_formatters.py:345 +#: extensions/base/mediawiki.py:788 #, python-brace-format -msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) stellte [{article}]({article_url}) wieder " -"her{comment}" +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "Importierte {article} mit einer Version von „{source}“" +msgstr[1] "Importierte {article} mit {count} Versionen von „{source}“" -#: src/rc_formatters.py:347 -#, python-brace-format -msgid "[{author}]({author_url}) changed visibility of log events{comment}" -msgstr "" -"[{author}]({author_url}) änderte die Sichtbarkeit eines " -"Logbucheintrags{comment}" - -#: src/rc_formatters.py:359 +#: extensions/base/mediawiki.py:803 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -655,21 +1259,56 @@ msgstr[1] "" "[{author}]({author_url}) importierte [{article}]({article_url}) mit {count} " "Versionen von [{source}]({source_url}){comment}" -#: src/rc_formatters.py:364 +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:836 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "Änderte die Gruppenzugehörigkeit von {target}" + +#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +msgid "System" +msgstr "System" + +#: extensions/base/mediawiki.py:840 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} wurde automatisch einer neuen Benutzergruppe zugeordnet" + +#: extensions/base/mediawiki.py:846 #, python-brace-format msgid "" -"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +"{reason}\n" +"{added}{linebreak}{removed}" msgstr "" -"[{author}]({author_url}) änderte [Missbrauchsfilter {number}]({filter_url})" -#: src/rc_formatters.py:368 -#, python-brace-format +#: extensions/base/mediawiki.py:860 +#, fuzzy, python-brace-format msgid "" -"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) {added}{comma} {removed}{comment}" msgstr "" -"[{author}]({author_url}) erstellte [Missbrauchsfilter {number}]({filter_url})" +"[{author}]({author_url}) änderte die Benutzergruppen für [{target}]" +"({target_url}) von {old_groups} zu {new_groups}{comment}" -#: src/rc_formatters.py:372 +#: extensions/base/mediawiki.py:864 +#, fuzzy, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"{comment}" +msgstr "" +"{author} änderte die Benutzergruppen für [{target}]({target_url}) " +"automatisch von {old_groups} zu {new_groups}{comment}" + +#: extensions/base/mediawiki.py:877 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "Vereinigte Versionen von {article} in {dest}" + +#: extensions/base/mediawiki.py:891 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -678,17 +1317,30 @@ msgstr "" "[{author}]({author_url}) vereinigte Versionen von [{article}]({article_url}) " "in [{dest}]({dest_url}){comment}" -#: src/rc_formatters.py:375 +#: extensions/base/mediawiki.py:905 +msgid "Created account automatically" +msgstr "Erstellte Konto automatisch" + +#: extensions/base/mediawiki.py:912 #, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "Konto [{author}]({author_url}) wurde automtisch erstellt" -#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +msgid "Created account" +msgstr "Erstellte Konto" + +#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 #, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "Konto [{author}]({author_url}) wurde erstellt" -#: src/rc_formatters.py:380 +#: extensions/base/mediawiki.py:944 +#, python-brace-format +msgid "Created account {article}" +msgstr "Erstellte Konto {article}" + +#: extensions/base/mediawiki.py:953 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" @@ -697,7 +1349,12 @@ msgstr "" "Konto [{article}]({article_url}) wurde von [{author}]({author_url}) " "erstellt{comment}" -#: src/rc_formatters.py:383 +#: extensions/base/mediawiki.py:966 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "Erstellte Konto {article} und das Passwort wurde per E-Mail zugesandt" + +#: extensions/base/mediawiki.py:977 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " @@ -706,7 +1363,16 @@ msgstr "" "Konto [{article}]({article_url}) wurde von [{author}]({author_url}) erstellt " "und das Passwort wurde per E-Mail zugesandt{comment}" -#: src/rc_formatters.py:388 +#: extensions/base/mediawiki.py:1009 +msgid "Added an entry to the interwiki table" +msgstr "Fügte ein Interwiki-Präfix hinzu" + +#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Präfix: {prefix}, URL: {website} | {desc}" + +#: extensions/base/mediawiki.py:1022 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -715,7 +1381,11 @@ msgstr "" "[{author}]({author_url}) erstellte den [Interwiki-Präfix]({table_url}) " "{prefix} nach {website}" -#: src/rc_formatters.py:394 +#: extensions/base/mediawiki.py:1036 +msgid "Edited an entry in interwiki table" +msgstr "Änderte ein Interwiki-Präfix" + +#: extensions/base/mediawiki.py:1049 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -724,13 +1394,33 @@ msgstr "" "[{author}]({author_url}) bearbeitete den [Interwiki-Präfix]({table_url}) " "{prefix} nach {website}" -#: src/rc_formatters.py:400 +#: extensions/base/mediawiki.py:1063 +msgid "Deleted an entry in interwiki table" +msgstr "Entfernte ein Interwiki-Präfix" + +#: extensions/base/mediawiki.py:1064 #, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Präfix: {prefix} | {desc}" + +#: extensions/base/mediawiki.py:1074 +#, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" msgstr "[{author}]({author_url}) entfernte ein [Interwiki-Präfix]({table_url})" -#: src/rc_formatters.py:403 +#: extensions/base/mediawiki.py:1091 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "Änderte das Inhaltsmodell von {article}" + +#: extensions/base/mediawiki.py:1093 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "Modell geändert von {old} zu {new}: {reason}" + +#: extensions/base/mediawiki.py:1105 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -739,7 +1429,17 @@ msgstr "" "[{author}]({author_url}) änderte das Inhaltsmodell der Seite [{article}]" "({article_url}) von {old} zu {new}{comment}" -#: src/rc_formatters.py:407 +#: extensions/base/mediawiki.py:1120 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "Erstellte die Seite {article}mit einem nicht-standard Inhaltsmodell" + +#: extensions/base/mediawiki.py:1122 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "Erstellt mit Modell {new}: {reason}" + +#: extensions/base/mediawiki.py:1133 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " @@ -748,63 +1448,41 @@ msgstr "" "[{author}]({author_url}) erstellte die Seite [{article}]({article_url}) mit " "dem Inhaltsmodell {new}{comment}" -#: src/rc_formatters.py:410 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" -msgstr "" -"[{author}]({author_url}) änderte das Sprite für [{article}]({article_url})" +#: extensions/base/mediawiki.py:1148 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "Erstellte die Markierung „{tag}“" -#: src/rc_formatters.py:413 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" -msgstr "" -"[{author}]({author_url}) erstellte das Sprite-sheet für [{article}]" -"({article_url})" - -#: src/rc_formatters.py:416 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the slice for [{article}]({article_url})" -msgstr "" -"[{author}]({author_url}) änderte das Stück für [{article}]({article_url})" - -#: src/rc_formatters.py:421 -#, python-brace-format -msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) erstellte die Cargo-Tabelle „{table}“" - -#: src/rc_formatters.py:423 -#, python-brace-format -msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) löschte die Cargo-Tabelle „{table}“" - -#: src/rc_formatters.py:428 -#, python-brace-format -msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) erstellte die Cargo-Tabelle „{table}“ neu" - -#: src/rc_formatters.py:433 -#, python-brace-format -msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) ersetzte die Cargo-Tabelle „{table}“" - -#: src/rc_formatters.py:436 +#: extensions/base/mediawiki.py:1158 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" "[{author}]({author_url}) erstellte eine [Markierung]({tag_url}) „{tag}“" -#: src/rc_formatters.py:441 +#: extensions/base/mediawiki.py:1180 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "Löschte die Markierung „{tag}“" + +#: extensions/base/mediawiki.py:1182 +#, fuzzy +msgid "Removed from" +msgstr "Entfernt" + +#: extensions/base/mediawiki.py:1182 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1194 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) löschte eine [Markierung]({tag_url}) „{tag}“" -#: src/rc_formatters.py:443 +#: extensions/base/mediawiki.py:1204 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -819,258 +1497,45 @@ msgstr[1] "" "[{author}]({author_url}) importierte [{article}]({article_url}) mit {count} " "Versionen{comment}" -#: src/rc_formatters.py:449 +#: extensions/base/mediawiki.py:1221 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "Aktivierte die Markierung „{tag}“" + +#: extensions/base/mediawiki.py:1230 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" "[{author}]({author_url}) aktivierte eine [Markierung]({tag_url}) „{tag}“" -#: src/rc_formatters.py:452 +#: extensions/base/mediawiki.py:1249 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "Deaktivierte die Markierung „{tag}“" + +#: extensions/base/mediawiki.py:1258 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" "[{author}]({author_url}) deaktivierte eine [Markierung]({tag_url}) „{tag}“" -#: src/rc_formatters.py:454 +#: extensions/base/mediawiki.py:1278 #, python-brace-format -msgid "[{author}]({author_url}) changed wiki settings{reason}" -msgstr "[{author}]({author_url}) änderte Wiki-Einstellungen{reason}" +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +"Nannte den Benutzer „{old_name}“ mit einer Bearbeitung zu „{new_name}“ um" +msgstr[1] "" +"Nannte den Benutzer „{old_name}“ mit {edits} Bearbeitungen zu „{new_name}“ um" -#: src/rc_formatters.py:456 +#: extensions/base/mediawiki.py:1283 #, python-brace-format -msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) löschte das Wiki *{wiki_name}*{comment}" +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "Nannte den Benutzer „{old_name}“ zu „{new_name}“ um" -#: src/rc_formatters.py:459 -#, python-brace-format -msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) sperrte das Wiki *{wiki_name}*{comment}" - -#: src/rc_formatters.py:462 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) modified namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) bearbeitete den Namensraum *{namespace_name}* für " -"*{wiki_name}*{comment}" - -#: src/rc_formatters.py:467 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) löschte den Namesraum *{namespace_name}* für " -"*{wiki_name}*{comment}" - -#: src/rc_formatters.py:473 -#, python-brace-format -msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "" -"[{author}]({author_url}) bearbeitete die Benutzergruppe *{group_name}" -"*{comment}" - -#: src/rc_formatters.py:477 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) löschte das Wiki *{wiki_name}*{comment}" - -#: src/rc_formatters.py:481 -#, python-brace-format -msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) entsperrte das Wiki *{wiki_name}*{comment}" - -#: src/rc_formatters.py:486 -#, python-brace-format -msgid "[{author}]({author_url}) generated *{file}* dump{comment}" -msgstr "[{author}]({author_url}) generierte *{file}* Dump{comment}" - -#: src/rc_formatters.py:491 -#, python-brace-format -msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" -msgstr "[{author}]({author_url}) löschte *{file}* Dump{comment}" - -#: src/rc_formatters.py:502 -#, python-brace-format -msgid "" -"[{author}]({author_url}) marked [{article}]({article_url}) for " -"translation{comment}" -msgstr "" -"[{author}]({author_url}) markierte [{article}]({article_url}) zur " -"Übersetzung{comment}" - -#: src/rc_formatters.py:509 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed [{article}]({article_url}) from the " -"translation system{comment}" -msgstr "" -"[{author}]({author_url}) entfernte [{article}]({article_url}) aus dem " -"Übersetzungssystem{comment}" - -#: src/rc_formatters.py:516 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed moving translation pages from *{article}* " -"to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) schloss die Umbenennung der übersetzbaren Seite von " -"*{article}* nach [{target}]({target_url}) ab{comment}" - -#: src/rc_formatters.py:524 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encountered a problem while moving [{article}]" -"({article_url}) to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) hatte ein Problem beim Verschieben der Seite von " -"[{article}]({article_url}) nach [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:532 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translatable page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) schloss die Löschung der übersetzbaren Seite " -"[{article}]({article_url}) ab{comment}" - -#: src/rc_formatters.py:540 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translatable page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) konnte die Seite [{article}]({article_url}) nicht " -"löschen, die zur übersetzbaren Seite [{target}]({target_url}) gehört{comment}" - -#: src/rc_formatters.py:548 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translation page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) schloss die Löschung der Übersetzungsseite " -"[{article}]({article_url}) ab{comment}" - -#: src/rc_formatters.py:556 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translation page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) konnte die Seite [{article}]({article_url}) nicht " -"löschen, die zur Übersetzungsseite [{target}]({target_url}) gehört{comment}" - -#: src/rc_formatters.py:564 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) empfahl die Übersetzung der Seite [{article}]" -"({article_url}){comment}" - -#: src/rc_formatters.py:571 -#, python-brace-format -msgid "" -"[{author}]({author_url}) discouraged translation of [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) riet von der Übersetzung der Seite [{article}]" -"({article_url}) ab{comment}" - -#: src/rc_formatters.py:581 -#, python-brace-format -msgid "" -"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " -"`{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) begrenzte die Sprachen für [{article}]" -"({article_url}) auf `{languages}`{comment}" - -#: src/rc_formatters.py:587 -#, python-brace-format -msgid "" -"[{author}]({author_url}) set the priority languages for [{article}]" -"({article_url}) to `{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) legte die priorisierten Sprachen für [{article}]" -"({article_url}) auf `{languages}` fest{comment}" - -#: src/rc_formatters.py:593 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed priority languages from [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) entfernte die priorisierten Sprachen von [{article}]" -"({article_url}){comment}" - -#: src/rc_formatters.py:600 -#, python-brace-format -msgid "" -"[{author}]({author_url}) added translatable page [{article}]({article_url}) " -"to aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) fügte die übersetzbare Seite [{article}]" -"({article_url}) zur zusammenfassenden Gruppe „{group}“ hinzu{comment}" - -#: src/rc_formatters.py:607 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed translatable page [{article}]" -"({article_url}) from aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) entfernte die übersetzbare Seite [{article}]" -"({article_url}) von der zusammenfassenden Gruppe „{group}“{comment}" - -#: src/rc_formatters.py:619 -#, python-brace-format -msgid "" -"[{author}]({author_url}) reviewed translation [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) überprüfte die Übersetzung [{article}]" -"({article_url}){comment}" - -#: src/rc_formatters.py:627 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) änderte den Status der Übersetzungen in der Sprache " -"`{language}` der Seite [{article}]({article_url}) von `{old_state}` in " -"`{new_state}`{comment}" - -#: src/rc_formatters.py:634 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) änderte den Status der Übersetzungen in der Sprache " -"`{language}` der Seite [{article}]({article_url}) in `{new_state}`{comment}" - -#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 -#: src/rc_formatters.py:1241 -msgid "(default)" -msgstr "(Standard)" - -#: src/rc_formatters.py:647 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the language of [{article}]({article_url}) " -"from {old_lang} to {new_lang}{comment}" -msgstr "" -"[{author}]({author_url}) änderte die Sprache für [{article}]({article_url}) " -"von {old_lang} zu {new_lang}{comment}" - -#: src/rc_formatters.py:656 +#: extensions/base/mediawiki.py:1298 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " @@ -1085,7 +1550,7 @@ msgstr[1] "" "[{author}]({author_url}) hat den Benutzer *{old_name}* mit {edits} " "Bearbeitungen zu [{new_name}]({link}) umbenannt{comment}" -#: src/rc_formatters.py:661 +#: extensions/base/mediawiki.py:1306 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" @@ -1094,637 +1559,231 @@ msgstr "" "[{author}]({author_url}) hat den Benutzer *{old_name}* zu [{new_name}]" "({link}) umbenannt{comment}" -#: src/rc_formatters.py:665 -msgid "An action has been hidden by administration." -msgstr "Eine Aktion wurde versteckt." - -#: src/rc_formatters.py:681 -#, python-brace-format -msgid "{user} triggered \"{abuse_filter}\"" -msgstr "{user} löste „{abuse_filter}“ aus" - -#: src/rc_formatters.py:682 -msgid "Performed" -msgstr "Aktion" - -#: src/rc_formatters.py:683 -msgid "Action taken" -msgstr "Maßnahmen" - -#: src/rc_formatters.py:684 -msgid "Title" -msgstr "Seite" - -#: src/rc_formatters.py:693 src/rc_formatters.py:980 -msgid "No description provided" -msgstr "Keine Zusammenfassung angegeben" - -#: src/rc_formatters.py:717 -msgid "(N!) " -msgstr "(N!) " - -#: src/rc_formatters.py:718 -msgid "m" -msgstr "K" - -#: src/rc_formatters.py:718 -msgid "b" -msgstr "B" - -#: src/rc_formatters.py:735 src/rc_formatters.py:740 -msgid "__Only whitespace__" -msgstr "__Nur Leerraum__" - -#: src/rc_formatters.py:745 -msgid "Removed" -msgstr "Entfernt" - -#: src/rc_formatters.py:747 -msgid "Added" -msgstr "Hinzugefügt" - -#: src/rc_formatters.py:781 src/rc_formatters.py:820 -msgid "Options" -msgstr "Optionen" - -#: src/rc_formatters.py:781 -#, python-brace-format -msgid "([preview]({link}) | [undo]({undolink}))" -msgstr "([Vorschau]({link}) | [zurücksetzen]({undolink}))" - -#: src/rc_formatters.py:786 -#, python-brace-format -msgid "Uploaded a new version of {name}" -msgstr "Neue Dateiversion {name}" - -#: src/rc_formatters.py:788 -#, python-brace-format -msgid "Reverted a version of {name}" -msgstr "Setzte {name} auf eine alte Version zurück" - -#: src/rc_formatters.py:790 -#, python-brace-format -msgid "Uploaded {name}" -msgstr "Neue Datei {name}" - -#: src/rc_formatters.py:806 -msgid "**No license!**" -msgstr "**Keine Lizenz!**" - -#: src/rc_formatters.py:818 -msgid "" -"\n" -"License: {}" -msgstr "" -"\n" -"Lizenz: {}" - -#: src/rc_formatters.py:820 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "([Vorschau]({link}))" - -#: src/rc_formatters.py:825 -#, python-brace-format -msgid "Deleted page {article}" -msgstr "Löschte {article}" - -#: src/rc_formatters.py:830 -#, python-brace-format -msgid "Deleted redirect {article} by overwriting" -msgstr "Löschte die Weiterleitung {article} um Platz zu machen" - -#: src/rc_formatters.py:836 -msgid "No redirect has been made" -msgstr "Die Erstellung einer Weiterleitung wurde unterdrückt" - -#: src/rc_formatters.py:837 -msgid "A redirect has been made" -msgstr "Eine Weiterleitung wurde erstellt" - -#: src/rc_formatters.py:838 -#, python-brace-format -msgid "Moved {redirect}{article} to {target}" -msgstr "Verschob {redirect}{article} nach {target}" - -#: src/rc_formatters.py:841 -#, python-brace-format -msgid "Moved {redirect}{article} to {title} over redirect" -msgstr "" -"Verschob {redirect}{article} nach {title} und überschrieb eine Weiterleitung" - -#: src/rc_formatters.py:845 -#, python-brace-format -msgid "Moved protection settings from {redirect}{article} to {title}" -msgstr "Verschob die Schutzeinstellungen von {redirect}{article} nach {title}" - -#: src/rc_formatters.py:869 -msgid "unknown expiry time" -msgstr "unbekannte Ablaufdauer" - -#: src/rc_formatters.py:874 -msgid "Blocked from editing the following pages: " -msgstr "Bearbeiten von folgenden Seiten gesperrt: " - -#: src/rc_formatters.py:883 -msgid "Blocked from editing pages on following namespaces: " -msgstr "Bearbeiten von Seiten in folgenden Namensräumen gesperrt: " - -#: src/rc_formatters.py:894 -msgid "Partial block details" -msgstr "Teilweise Sperre" - -#: src/rc_formatters.py:895 -#, python-brace-format -msgid "Blocked {blocked_user} {time}" -msgstr "Sperrte {blocked_user} {time}" - -#: src/rc_formatters.py:899 -#, python-brace-format -msgid "Changed block settings for {blocked_user}" -msgstr "Änderte die Sperreinstellungen für {blocked_user}" - -#: src/rc_formatters.py:903 -#, python-brace-format -msgid "Unblocked {blocked_user}" -msgstr "Hob die Sperre von {blocked_user} auf" - -#: src/rc_formatters.py:910 -#, python-brace-format -msgid "Left a comment on {target}'s profile" -msgstr "Hinterließ ein Kommentar auf dem Profil von {target}" - -#: src/rc_formatters.py:912 -msgid "Left a comment on their own profile" -msgstr "Hinterließ ein Kommentar auf dem eigenen Profil" - -#: src/rc_formatters.py:919 -#, python-brace-format -msgid "Replied to a comment on {target}'s profile" -msgstr "Antwortete auf ein Kommentar auf dem Profil von {target}" - -#: src/rc_formatters.py:921 -msgid "Replied to a comment on their own profile" -msgstr "Antwortete auf ein Kommentar auf dem eigenen Profil" - -#: src/rc_formatters.py:928 -#, python-brace-format -msgid "Edited a comment on {target}'s profile" -msgstr "Bearbeitete ein Kommentar auf dem Profil von {target}" - -#: src/rc_formatters.py:930 -msgid "Edited a comment on their own profile" -msgstr "Bearbeitete ein Kommentar auf dem eigenen Profil" - -#: src/rc_formatters.py:935 -#, python-brace-format -msgid "Edited {target}'s profile" -msgstr "Bearbeitete das Profil von {target}" - -#: src/rc_formatters.py:937 -msgid "Edited their own profile" -msgstr "Bearbeitete das eigene Profil" - -#: src/rc_formatters.py:939 -#, python-brace-format -msgid "Cleared the {field} field" -msgstr "Entfernte den {field}" - -#: src/rc_formatters.py:941 -#, python-brace-format -msgid "{field} field changed to: {desc}" -msgstr "{field} geändert zu: {desc}" - -#: src/rc_formatters.py:946 -#, python-brace-format -msgid "Purged a comment on {target}'s profile" -msgstr "Löschte ein Kommentar auf dem Profil von {target} dauerhaft" - -#: src/rc_formatters.py:948 -msgid "Purged a comment on their own profile" -msgstr "Löschte ein Kommentar auf dem eigenen Profil dauerhaft" - -#: src/rc_formatters.py:956 -#, python-brace-format -msgid "Deleted a comment on {target}'s profile" -msgstr "Löschte ein Kommentar auf dem Profil von {target}" - -#: src/rc_formatters.py:958 -msgid "Deleted a comment on their own profile" -msgstr "Löschte ein Kommentar auf dem eigenen Profil" - -#: src/rc_formatters.py:962 -#, python-brace-format -msgid "Changed group membership for {target}" -msgstr "Änderte die Gruppenzugehörigkeit von {target}" - -#: src/rc_formatters.py:966 -#, python-brace-format -msgid "{target} got autopromoted to a new usergroup" -msgstr "{target} wurde automatisch einer neuen Benutzergruppe zugeordnet" - -#: src/rc_formatters.py:981 -#, python-brace-format -msgid "Groups changed from {old_groups} to {new_groups}{reason}" -msgstr "" -"Änderte die Gruppenzugehörigkeit von {old_groups} auf {new_groups}{reason}" - -#: src/rc_formatters.py:985 -#, python-brace-format -msgid "Protected {target}" -msgstr "Schützte {target}" - -#: src/rc_formatters.py:991 -#, python-brace-format -msgid "Changed protection level for {article}" -msgstr "Änderte den Schutzstatus von {article}" - -#: src/rc_formatters.py:997 -#, python-brace-format -msgid "Removed protection from {article}" -msgstr "Entfernte den Schutz von {article}" - -#: src/rc_formatters.py:1001 -#, python-brace-format -msgid "Changed visibility of revision on page {article} " -msgid_plural "Changed visibility of {amount} revisions on page {article} " -msgstr[0] "Änderte die Sichtbarkeit einer Versionen von {article} " -msgstr[1] "Änderte die Sichtbarkeit von {amount} Versionen von {article} " - -#: src/rc_formatters.py:1013 -#, python-brace-format -msgid "Imported {article} with {count} revision" -msgid_plural "Imported {article} with {count} revisions" -msgstr[0] "Importierte {article} mit einer Version" -msgstr[1] "Importierte {article} mit {count} Versionen" - -#: src/rc_formatters.py:1018 -#, python-brace-format -msgid "Restored {article}" -msgstr "Stellte {article} wieder her" - -#: src/rc_formatters.py:1021 -msgid "Changed visibility of log events" -msgstr "Änderte die Sichtbarkeit eines Logbucheintrags" - -#: src/rc_formatters.py:1031 -#, python-brace-format -msgid "Imported {article} with {count} revision from \"{source}\"" -msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "Importierte {article} mit einer Version von „{source}“" -msgstr[1] "Importierte {article} mit {count} Versionen von „{source}“" - -#: src/rc_formatters.py:1036 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "Änderte Missbrauchsfilter {number}" - -#: src/rc_formatters.py:1039 -#, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "Erstellte Missbrauchsfilter {number}" - -#: src/rc_formatters.py:1042 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "Vereinigte Versionen von {article} in {dest}" - -#: src/rc_formatters.py:1046 -msgid "Created account automatically" -msgstr "Erstellte Konto automatisch" - -#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 -msgid "Created account" -msgstr "Erstellte Konto" - -#: src/rc_formatters.py:1052 -#, python-brace-format -msgid "Created account {article}" -msgstr "Erstellte Konto {article}" - -#: src/rc_formatters.py:1055 -#, python-brace-format -msgid "Created account {article} and password was sent by email" -msgstr "Erstellte Konto {article} und das Passwort wurde per E-Mail zugesandt" - -#: src/rc_formatters.py:1061 -msgid "Added an entry to the interwiki table" -msgstr "Fügte ein Interwiki-Präfix hinzu" - -#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "Präfix: {prefix}, URL: {website} | {desc}" - -#: src/rc_formatters.py:1067 -msgid "Edited an entry in interwiki table" -msgstr "Änderte ein Interwiki-Präfix" - -#: src/rc_formatters.py:1073 -msgid "Deleted an entry in interwiki table" -msgstr "Entfernte ein Interwiki-Präfix" - -#: src/rc_formatters.py:1074 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "Präfix: {prefix} | {desc}" - -#: src/rc_formatters.py:1077 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "Änderte das Inhaltsmodell von {article}" - -#: src/rc_formatters.py:1078 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "Modell geändert von {old} zu {new}: {reason}" - -#: src/rc_formatters.py:1083 -#, python-brace-format -msgid "Created the page {article} using a non-default content model" -msgstr "Erstellte die Seite {article}mit einem nicht-standard Inhaltsmodell" - -#: src/rc_formatters.py:1084 -#, python-brace-format -msgid "Created with model {new}: {reason}" -msgstr "Erstellt mit Modell {new}: {reason}" - -#: src/rc_formatters.py:1087 +#: extensions/base/sprite.py:37 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Änderte das Sprite für {article}" -#: src/rc_formatters.py:1090 +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) änderte das Sprite für [{article}]({article_url})" + +#: extensions/base/sprite.py:60 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Erstellte das Sprite-sheet für {article}" -#: src/rc_formatters.py:1093 +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) erstellte das Sprite-sheet für [{article}]" +"({article_url})" + +#: extensions/base/sprite.py:79 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Änderte das Stück für {article}" -#: src/rc_formatters.py:1099 -#, python-brace-format -msgid "Created the Cargo table \"{table}\"" -msgstr "Erstellte die Cargo-Tabelle „{table}“" - -#: src/rc_formatters.py:1103 -#, python-brace-format -msgid "Deleted the Cargo table \"{table}\"" -msgstr "Löschte die Cargo-Tabelle „{table}“" - -#: src/rc_formatters.py:1110 -#, python-brace-format -msgid "Recreated the Cargo table \"{table}\"" -msgstr "Erstellte die Cargo-Tabelle „{table}“ neu" - -#: src/rc_formatters.py:1117 -#, python-brace-format -msgid "Replaced the Cargo table \"{table}\"" -msgstr "Ersetzte die Cargo-Tabelle „{table}“" - -#: src/rc_formatters.py:1121 -#, fuzzy, python-brace-format -msgid "Created the tag \"{tag}\"" -msgstr "Erstellte die Markierung „{tag}“" - -#: src/rc_formatters.py:1125 -#, fuzzy, python-brace-format -msgid "Deleted the tag \"{tag}\"" -msgstr "Löschte die Markierung „{tag}“" - -#: src/rc_formatters.py:1127 -#, fuzzy -msgid "Removed from" -msgstr "Entfernt" - -#: src/rc_formatters.py:1127 -msgid "{} revision or log entry" -msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1131 -#, fuzzy, python-brace-format -msgid "Activated the tag \"{tag}\"" -msgstr "Aktivierte die Markierung „{tag}“" - -#: src/rc_formatters.py:1134 -#, fuzzy, python-brace-format -msgid "Deactivated the tag \"{tag}\"" -msgstr "Deaktivierte die Markierung „{tag}“" - -#: src/rc_formatters.py:1137 -msgid "Changed wiki settings" -msgstr "Änderte Wiki-Einstellungen" - -#: src/rc_formatters.py:1141 -#, python-brace-format -msgid "Deleted a \"{wiki}\" wiki" -msgstr "Löschte das Wiki „{wiki}“" - -#: src/rc_formatters.py:1144 -#, python-brace-format -msgid "Locked a \"{wiki}\" wiki" -msgstr "Sperrte das Wiki „{wiki}“" - -#: src/rc_formatters.py:1147 -#, fuzzy, python-brace-format -msgid "Modified \"{namespace_name}\" namespace" -msgstr "Bearbeitete den Namensraum „{namespace_name}“" - -#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 -msgid "Wiki" -msgstr "Wiki" - -#: src/rc_formatters.py:1151 -#, python-brace-format -msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "Löschte den Namensraum „{namespace_name}“" - -#: src/rc_formatters.py:1157 -#, python-brace-format -msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "Bearbeitete die Benutzergruppe „{usergroup_name}“" - -#: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format -msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Löschte das Wiki „{wiki}“" - -#: src/rc_formatters.py:1163 -#, python-brace-format -msgid "Unlocked a \"{wiki}\" wiki" -msgstr "Entsperrte das Wiki „{wiki}“" - -#: src/rc_formatters.py:1166 -#, python-brace-format -msgid "Generated {file} dump" -msgstr "Generierte {file} Dump" - -#: src/rc_formatters.py:1169 -#, python-brace-format -msgid "Deleted {file} dump" -msgstr "Löschte {file} Dump" - -#: src/rc_formatters.py:1177 -#, python-brace-format -msgid "Marked \"{article}\" for translation" -msgstr "Markierte „{article}“ zum Übersetzen" - -#: src/rc_formatters.py:1180 -#, python-brace-format -msgid "Removed \"{article}\" from the translation system" -msgstr "Entfernte „{article}“ aus dem Übersetzungssystem" - -#: src/rc_formatters.py:1183 -#, python-brace-format -msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" -"Schloss die Verschiebung der Übersetzungsseiten von „{article}“ nach " -"„{target}“ ab" - -#: src/rc_formatters.py:1186 -#, python-brace-format -msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "Hatte ein Problem beim Verschieben von „{article}“ nach „{target}“" - -#: src/rc_formatters.py:1189 -#, python-brace-format -msgid "Completed deletion of translatable page \"{article}\"" -msgstr "Schloss die Löschung der übersetzbaren Seite „{article}“ ab" - -#: src/rc_formatters.py:1192 +#: extensions/base/sprite.py:86 #, python-brace-format msgid "" -"Failed to delete \"{article}\" which belongs to translatable page " -"\"{target}\"" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" -"Konnte „{article}“ nicht löschen, die zur übersetzbaren Seite „{target}“ " -"gehört" +"[{author}]({author_url}) änderte das Stück für [{article}]({article_url})" -#: src/rc_formatters.py:1195 #, python-brace-format -msgid "Completed deletion of translation page \"{article}\"" -msgstr "Schloss die Löschung der Übersetzungsseite „{article}“ ab" +#~ msgid "" +#~ "Unknown event `{event}` by [{author}]({author_url}), report it on the " +#~ "[support server](<{support}>)." +#~ msgstr "" +#~ "Unbekanntes Event `{event}` von [{author}]({author_url}), melde es auf " +#~ "dem [Support-Server](<{support}>)." -#: src/rc_formatters.py:1198 #, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" -msgstr "" -"Konnte „{article}“ nicht löschen, die zur Übersetzungsseite „{target}“ gehört" +#~ msgid "Unknown event `{event}`" +#~ msgstr "Unbekanntes Event `{event}`" + +#~ msgid "Report this on the support server" +#~ msgstr "Melde es auf dem Support-Server" -#: src/rc_formatters.py:1201 #, python-brace-format -msgid "Encouraged translation of \"{article}\"" -msgstr "Empfahl die Übersetzung von „{article}“" +#~ msgid "for {num} {translated_length}" +#~ msgstr "für {num} {translated_length}" + +#~ msgid "until {}" +#~ msgstr "bis {}" -#: src/rc_formatters.py:1204 #, python-brace-format -msgid "Discouraged translation of \"{article}\"" -msgstr "Riet von der Übersetzung von „{article}“ ab" +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) hinterließ einen [Kommentar]({comment}) auf dem " +#~ "Profil von {target}" -#: src/rc_formatters.py:1210 #, python-brace-format -msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "Begrenzte die Sprachen für „{article}“ auf `{languages}`" +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) hinterließ einen [Kommentar]({comment}) auf dem " +#~ "eigenen Profil" -#: src/rc_formatters.py:1212 #, python-brace-format -msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "" -"Legte die priorisierten Sprachen für „{article}“ auf `{languages}` fest" +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) antwortete auf einen [Kommentar]({comment}) auf " +#~ "dem Profil von {target}" -#: src/rc_formatters.py:1214 #, python-brace-format -msgid "Removed priority languages from \"{article}\"" -msgstr "Entfernte die priorisierten Sprachen von „{article}“" +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) antwortete auf einen [Kommentar]({comment}) auf " +#~ "dem eigenen Profil" -#: src/rc_formatters.py:1217 #, python-brace-format -msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" -msgstr "" -"Fügte die übersetzbare Seite „{article}“ zur zusammenfassenden Gruppe " -"„{group}“ hinzu" +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) bearbeitete einen [Kommentar]({comment}) auf dem " +#~ "Profil von {target}" -#: src/rc_formatters.py:1220 #, python-brace-format -msgid "" -"Removed translatable page \"{article}\" from aggregate group \"{group}\"" -msgstr "" -"Entfernte die übersetzbare Seite „{article}“ von der zusammenfassenden " -"Gruppe „{group}“" +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) bearbeitete einen [Kommentar]({comment}) auf dem " +#~ "eigenen Profil" -#: src/rc_formatters.py:1227 #, python-brace-format -msgid "Reviewed translation \"{article}\"" -msgstr "Überprüfte die Übersetzung „{article}“" +#~ msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) löschte einen Kommentar auf dem Profil von " +#~ "{target} dauerhaft" -#: src/rc_formatters.py:1230 #, python-brace-format -msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "Änderte den Status der Übersetzungen in `{language}` für „{article}“" +#~ msgid "[{author}]({author_url}) purged a comment on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) löschte einen Kommentar auf dem eigenen Profil " +#~ "dauerhaft" -#: src/rc_formatters.py:1232 -msgid "Old state" -msgstr "Alter Status" - -#: src/rc_formatters.py:1233 -msgid "New state" -msgstr "Neuer Status" - -#: src/rc_formatters.py:1242 #, python-brace-format -msgid "Changed the language of \"{article}\"" -msgstr "Änderte die Sprache für „{article}“" +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) löschte einen [Kommentar]({comment}) auf dem " +#~ "Profil von {target}" -#: src/rc_formatters.py:1243 -msgid "Old language" -msgstr "Alte Sprache" - -#: src/rc_formatters.py:1244 -msgid "New language" -msgstr "Neue Sprache" - -#: src/rc_formatters.py:1248 #, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -"Nannte den Benutzer „{old_name}“ mit einer Bearbeitung zu „{new_name}“ um" -msgstr[1] "" -"Nannte den Benutzer „{old_name}“ mit {edits} Bearbeitungen zu „{new_name}“ um" +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) löschte einen [Kommentar]({comment}) auf dem " +#~ "eigenen Profil" -#: src/rc_formatters.py:1250 #, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "Nannte den Benutzer „{old_name}“ zu „{new_name}“ um" +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) bearbeitete den {field} auf dem Profil von " +#~ "[{target}]({target_url}). *({desc})*" -#: src/rc_formatters.py:1254 -msgid "Action has been hidden by administration" -msgstr "Aktion wurde versteckt" +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) bearbeitete den {field} auf dem [eigenen Profil]" +#~ "({target_url}). *({desc})*" -#: src/rc_formatters.py:1288 -msgid "**Added**: " -msgstr "**Hinzugefügt:** " +#~ msgid "none" +#~ msgstr "keine" -#: src/rc_formatters.py:1288 -msgid " and {} more\n" -msgstr " und {} mehr\n" +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) completed deletion of translatable page " +#~ "[{article}]({article_url}){comment}" +#~ msgstr "" +#~ "[{author}]({author_url}) schloss die Löschung der übersetzbaren Seite " +#~ "[{article}]({article_url}) ab{comment}" -#: src/rc_formatters.py:1289 -msgid "**Removed**: " -msgstr "**Entfernt:** " +#~ msgid "No description provided" +#~ msgstr "Keine Zusammenfassung angegeben" -#: src/rc_formatters.py:1289 -msgid " and {} more" -msgstr " und {} mehr" +#~ msgid "unknown expiry time" +#~ msgstr "unbekannte Ablaufdauer" -#: src/rc_formatters.py:1290 -msgid "Changed categories" -msgstr "Geänderte Kategorien" +#, python-brace-format +#~ msgid "Left a comment on {target}'s profile" +#~ msgstr "Hinterließ ein Kommentar auf dem Profil von {target}" + +#~ msgid "Left a comment on their own profile" +#~ msgstr "Hinterließ ein Kommentar auf dem eigenen Profil" + +#, python-brace-format +#~ msgid "Replied to a comment on {target}'s profile" +#~ msgstr "Antwortete auf ein Kommentar auf dem Profil von {target}" + +#~ msgid "Replied to a comment on their own profile" +#~ msgstr "Antwortete auf ein Kommentar auf dem eigenen Profil" + +#, python-brace-format +#~ msgid "Edited a comment on {target}'s profile" +#~ msgstr "Bearbeitete ein Kommentar auf dem Profil von {target}" + +#~ msgid "Edited a comment on their own profile" +#~ msgstr "Bearbeitete ein Kommentar auf dem eigenen Profil" + +#, python-brace-format +#~ msgid "Edited {target}'s profile" +#~ msgstr "Bearbeitete das Profil von {target}" + +#~ msgid "Edited their own profile" +#~ msgstr "Bearbeitete das eigene Profil" + +#, python-brace-format +#~ msgid "Cleared the {field} field" +#~ msgstr "Entfernte den {field}" + +#, python-brace-format +#~ msgid "{field} field changed to: {desc}" +#~ msgstr "{field} geändert zu: {desc}" + +#, python-brace-format +#~ msgid "Purged a comment on {target}'s profile" +#~ msgstr "Löschte ein Kommentar auf dem Profil von {target} dauerhaft" + +#~ msgid "Purged a comment on their own profile" +#~ msgstr "Löschte ein Kommentar auf dem eigenen Profil dauerhaft" + +#, python-brace-format +#~ msgid "Deleted a comment on {target}'s profile" +#~ msgstr "Löschte ein Kommentar auf dem Profil von {target}" + +#~ msgid "Deleted a comment on their own profile" +#~ msgstr "Löschte ein Kommentar auf dem eigenen Profil" + +#, python-brace-format +#~ msgid "Groups changed from {old_groups} to {new_groups}{reason}" +#~ msgstr "" +#~ "Änderte die Gruppenzugehörigkeit von {old_groups} auf {new_groups}{reason}" + +#, python-brace-format +#~ msgid "Completed deletion of translatable page \"{article}\"" +#~ msgstr "Schloss die Löschung der übersetzbaren Seite „{article}“ ab" #, python-brace-format #~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" diff --git a/locale/de/LC_MESSAGES/misc.po b/locale/de/LC_MESSAGES/misc.po index c4349dd..be85499 100644 --- a/locale/de/LC_MESSAGES/misc.po +++ b/locale/de/LC_MESSAGES/misc.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-28 23:45+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-08-03 13:44+0000\n" "Last-Translator: MarkusRost <>\n" "Language-Team: German \n" "Language-Team: German \n" "Language-Team: German 1);\n" -"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-03-17 21:40+0100\n" "Last-Translator: Frisk <>\n" "Language-Team: \n" @@ -36,25 +22,379 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +"X-Generator: Poedit 2.3\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: Poedit 2.3\n" "X-Poedit-Basepath: ../../..\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-SearchPath-0: rcgcdw.pot\n" -#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 -#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 -#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 -msgid "unknown" -msgstr "inconnu" +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" +msgstr "__Espaces uniquement__" -#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 -#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 -#: src/rc_formatters.py:75 src/rc_formatters.py:96 +#: src/api/util.py:71 +msgid "Removed" +msgstr "Retirés" + +#: src/api/util.py:73 +msgid "Added" +msgstr "Ajoutés" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 msgid "Unregistered user" msgstr "" -#: src/discussion_formatters.py:39 +#: src/api/util.py:160 extensions/base/discussions.py:193 +#: extensions/base/discussions.py:195 +msgid "Tags" +msgstr "Tags" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "**Ajoutées : ** " + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr " et {} autres\n" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "**Retirées : ** " + +#: src/api/util.py:166 +msgid " and {} more" +msgstr " et {} autres" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "Catégories modifiées" + +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "Création du tableau Cargo « {table} »" + +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" + +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "Recréation du tableau Cargo « {table} »" + +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) a recréé le tableau Cargo « {table} »" + +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "Remplacement du tableau Cargo « {table} »" + +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) a remplacé le tableau cargo « {table} »" + +#: extensions/base/cargo.py:105 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "Suppression du tableau Cargo « {table} »" + +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: extensions/base/translate.py:55 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: extensions/base/translate.py:80 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:106 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:133 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: extensions/base/translate.py:161 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: extensions/base/translate.py:177 +#, fuzzy, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: extensions/base/translate.py:188 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:215 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: extensions/base/translate.py:231 +#, fuzzy, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "Retrait de la protection de {article}" + +#: extensions/base/translate.py:240 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "Création d'une feuille de sprite pour {article}" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:264 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:288 +#, fuzzy, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "Retrait de la protection de {article}" + +#: extensions/base/translate.py:301 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: extensions/base/translate.py:308 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: extensions/base/translate.py:315 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "Création d'une feuille de sprite pour {article}" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:342 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:368 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "Création d'une feuille de sprite pour {article}" + +#: extensions/base/translate.py:387 +#, fuzzy, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "Retrait de la protection de {article}" + +#: extensions/base/translate.py:401 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "" + +#: extensions/base/translate.py:431 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: extensions/base/translate.py:439 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "" + +#: extensions/base/translate.py:464 +#, fuzzy, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "Retrait de la protection de {article}" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "" + +#: extensions/base/translate.py:477 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "inconnu" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "Création de {title}" + +#: extensions/base/discussions.py:161 +#, fuzzy, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "Création de {title}" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: extensions/base/discussions.py:174 +#, fuzzy, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "Création de {title}" + +#: extensions/base/discussions.py:193 +msgid "{} tags" +msgstr "" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "A répondu à « {title} »" + +#: extensions/base/discussions.py:214 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " @@ -63,7 +403,7 @@ msgstr "" "Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" "{creatorId}>) dans {forumName}" -#: src/discussion_formatters.py:42 +#: extensions/base/discussions.py:217 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " @@ -72,7 +412,7 @@ msgstr "" "Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" "{creatorId}>) dans {forumName}" -#: src/discussion_formatters.py:45 +#: extensions/base/discussions.py:220 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " @@ -81,7 +421,7 @@ msgstr "" "Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" "{creatorId}>) dans {forumName}" -#: src/discussion_formatters.py:54 +#: extensions/base/discussions.py:234 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " @@ -90,7 +430,17 @@ msgstr "" "[Réponse](<{url}f/p/{threadId}/r/{postId}>) de [{author}](<{url}f/u/" "{creatorId}>) à [{title}](<{url}f/p/{threadId}>) dans {forumName}" -#: src/discussion_formatters.py:61 +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "Création de « {title} » sur le mur de {user}" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "Réponse à « {title} » sur le mur de {user}" + +#: extensions/base/discussions.py:312 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" @@ -100,7 +450,7 @@ msgstr "" "Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" "{creatorId}>) dans {forumName}" -#: src/discussion_formatters.py:64 +#: extensions/base/discussions.py:318 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" @@ -111,7 +461,17 @@ msgstr "" "Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/" "{creatorId}>) dans {forumName}" -#: src/discussion_formatters.py:72 +#: extensions/base/discussions.py:338 +#, fuzzy, python-brace-format +msgid "Commented on {article}" +msgstr "Création de {title}" + +#: extensions/base/discussions.py:344 +#, fuzzy, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "A répondu à « {title} »" + +#: extensions/base/discussions.py:359 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " @@ -120,7 +480,7 @@ msgstr "" "[Réponse](<{url}f/p/{threadId}/r/{postId}>) de [{author}](<{url}f/u/" "{creatorId}>) à [{title}](<{url}f/p/{threadId}>) dans {forumName}" -#: src/discussion_formatters.py:78 +#: extensions/base/discussions.py:365 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" @@ -130,145 +490,220 @@ msgstr "" "[Réponse](<{url}f/p/{threadId}/r/{postId}>) de [{author}](<{url}f/u/" "{creatorId}>) à [{title}](<{url}f/p/{threadId}>) dans {forumName}" -#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "" + +#: extensions/base/managewiki.py:44 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: extensions/base/managewiki.py:55 +#, fuzzy, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "Suppression du tag « {tag} »" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "Inconnu" + +#: extensions/base/managewiki.py:63 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: extensions/base/managewiki.py:80 #, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "" + +#: extensions/base/managewiki.py:89 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:111 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: extensions/base/managewiki.py:124 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "" + +#: extensions/base/managewiki.py:134 +#, fuzzy, python-brace-format msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " + +#: extensions/base/managewiki.py:147 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" msgstr "" -#: src/discussion_formatters.py:123 -#, python-brace-format -msgid "Created \"{title}\"" -msgstr "Création de {title}" - -#: src/discussion_formatters.py:127 +#: extensions/base/managewiki.py:158 #, fuzzy, python-brace-format -msgid "Created a poll \"{title}\"" -msgstr "Création de {title}" +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" -#: src/discussion_formatters.py:134 -msgid "Option {}" -msgstr "" - -#: src/discussion_formatters.py:135 +#: extensions/base/managewiki.py:173 #, python-brace-format -msgid "__[View image]({image_url})__" +msgid "Modified \"{usergroup_name}\" usergroup" msgstr "" -#: src/discussion_formatters.py:139 +#: extensions/base/managewiki.py:182 #, fuzzy, python-brace-format -msgid "Created a quiz \"{title}\"" -msgstr "Création de {title}" +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" -#: src/rc_formatters.py:1283 -msgid "Tags" -msgstr "Tags" - -#: src/discussion_formatters.py:155 -msgid "{} tags" -msgstr "" - -#: src/discussion_formatters.py:160 -#, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "A répondu à « {title} »" - -#: src/discussion_formatters.py:169 -#, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "Création de « {title} » sur le mur de {user}" - -#: src/discussion_formatters.py:173 -#, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "Réponse à « {title} » sur le mur de {user}" - -#: src/discussion_formatters.py:180 +#: extensions/base/managewiki.py:195 #, fuzzy, python-brace-format -msgid "Commented on {article}" -msgstr "Création de {title}" +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "Suppression du tag « {tag} »" -#: src/discussion_formatters.py:184 +#: extensions/base/managewiki.py:203 #, fuzzy, python-brace-format -msgid "Replied to a comment on {article}" -msgstr "A répondu à « {title} »" +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" -#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#: extensions/base/managewiki.py:217 #, python-brace-format -msgid "Unknown event `{event}`" +msgid "Unlocked a \"{wiki}\" wiki" msgstr "" -#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 -#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 -msgid "Report this on the support server" +#: extensions/base/managewiki.py:225 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: extensions/base/datadump.py:36 +#, python-brace-format +msgid "Generated {file} dump" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/datadump.py:45 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: extensions/base/datadump.py:58 +#, fuzzy, python-brace-format +msgid "Deleted {file} dump" +msgstr "Suppression de la page {article}" + +#: extensions/base/datadump.py:67 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: extensions/base/abusefilter.py:29 msgid "None" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Warning issued" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Blocked user**" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Tagged the edit" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Disallowed the action" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**IP range blocked**" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Throttled actions" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Removed autoconfirmed group" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Removed from privileged groups**" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Edit" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Upload" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Move" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Stash upload" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Deletion" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Account creation" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Auto account creation" msgstr "" -#: src/rc_formatters.py:83 +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "" + +#: extensions/base/abusefilter.py:66 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " @@ -276,38 +711,136 @@ msgid "" msgstr "" "Transfert des paramètres de protection de {redirect}{article} vers {title}" -#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 -#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 -#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 -#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 -#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 -#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 -#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 -#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 -#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 -msgid "Unknown" -msgstr "Inconnu" +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "Édition de la règle {number} du filtre anti-abus" -#: src/rc_formatters.py:116 +#: extensions/base/abusefilter.py:95 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "Édition de la règle {number} du filtre anti-abus" + +#: extensions/base/abusefilter.py:111 +#, fuzzy, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "Édition de la règle {number} du filtre anti-abus" + +#: extensions/base/abusefilter.py:119 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "Édition de la règle {number} du filtre anti-abus" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "(N!) " + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "m" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "b" + +#: extensions/base/mediawiki.py:112 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" msgstr "Édition d'un commentaire sur le profil de {target}" -#: src/rc_formatters.py:118 +#: extensions/base/mediawiki.py:117 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" msgstr "Création d'une feuille de sprite pour {article}" -#: src/rc_formatters.py:121 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" -msgstr "Modification de la visibilité d'évènements des journaux" +#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +msgid "Options" +msgstr "Options" -#: src/rc_formatters.py:128 +#: extensions/base/mediawiki.py:191 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([Aperçu]({link}) | [Annuler]({undolink}))" + +#: extensions/base/mediawiki.py:196 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "Téléversement d'une nouvelle version de {name}" + +#: extensions/base/mediawiki.py:198 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "Rétablissement d'une version de {name}" + +#: extensions/base/mediawiki.py:200 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "Téléversement de {name}" + +#: extensions/base/mediawiki.py:209 +msgid "**No license!**" +msgstr "**Aucune license!**" + +#: extensions/base/mediawiki.py:224 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"License: {}" + +#: extensions/base/mediawiki.py:226 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([Aperçu]({link}))" + +#: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" @@ -315,19 +848,34 @@ msgstr "" "[{author}]({author_url}) a rétabli une version de [{file}]({file_link})" "{comment}" -#: src/rc_formatters.py:132 +#: extensions/base/mediawiki.py:248 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" "{comment}" msgstr "Modification de la visibilité d'une révision de la page {article} " -#: src/rc_formatters.py:135 +#: extensions/base/mediawiki.py:259 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "Suppression de la page {article}" + +#: extensions/base/mediawiki.py:283 #, fuzzy, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" -#: src/rc_formatters.py:141 +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "Suppression par écrasement de la redirection {article}" + +#: extensions/base/mediawiki.py:308 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -335,211 +883,34 @@ msgid "" msgstr "" "Transfert des paramètres de protection de {redirect}{article} vers {title}" -#: src/rc_formatters.py:147 src/rc_formatters.py:152 -msgid "without making a redirect" -msgstr "" - -#: src/rc_formatters.py:147 src/rc_formatters.py:153 -msgid "with a redirect" -msgstr "" - -#: src/rc_formatters.py:148 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" -msgstr "" -"Transfert des paramètres de protection de {redirect}{article} vers {title}" - -#: src/rc_formatters.py:154 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -"[{target}]({target_url}) {made_a_redirect}{comment}" -msgstr "" -"Transfert des paramètres de protection de {redirect}{article} vers {title}" - -#: src/rc_formatters.py:159 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" -msgstr "" -"Transfert des paramètres de protection de {redirect}{article} vers {title}" - -#: src/rc_formatters.py:170 src/rc_formatters.py:855 -#, fuzzy -msgid "for infinity and beyond" -msgstr "toujours" - -#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#: extensions/base/mediawiki.py:322 #, python-brace-format -msgid "for {num} {translated_length}" -msgstr "" +msgid "Restored {article}" +msgstr "Restauration de {article}" -#: src/rc_formatters.py:185 src/rc_formatters.py:867 -msgid "until {}" -msgstr "" - -#: src/rc_formatters.py:189 -msgid " on pages: " -msgstr " on pages: " - -#: src/rc_formatters.py:196 src/rc_formatters.py:881 -msgid " and namespaces: " -msgstr " et ces espaces de noms: " - -#: src/rc_formatters.py:198 -msgid " on namespaces: " -msgstr " on namespaces: " - -#: src/rc_formatters.py:210 +#: extensions/base/mediawiki.py:331 #, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" -msgstr "Modification des paramètres de blocage pour {blocked_user}" - -#: src/rc_formatters.py:214 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" -msgstr "Modification des paramètres de blocage pour {blocked_user}" - -#: src/rc_formatters.py:218 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" -msgstr "Modification des paramètres de blocage pour {blocked_user}" - -#: src/rc_formatters.py:223 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -msgstr "Ajout d'un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:225 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on their own profile" -msgstr "Ajout d'un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:231 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -"profile" -msgstr "Réponse à un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:237 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on their own " -"profile" -msgstr "Réponse à un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:245 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" -msgstr "Édition d'un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:251 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" -msgstr "Édition d'un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:257 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "" -"[{author}]({author_url}) a retiré un commentaire sur le profil de {target}." - -#: src/rc_formatters.py:259 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "" -"[{author}]({author_url}) a retiré un commentaire sur le profil de {target}." - -#: src/rc_formatters.py:267 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" -msgstr "Édition d'un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:269 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" -msgstr "Édition d'un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:274 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -"profile. *({desc})*" -msgstr "Retrait d'un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:281 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -"profile. *({desc})*" -msgstr "Retrait d'un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 -#: src/rc_formatters.py:979 -msgid "none" -msgstr "aucun" - -#: src/rc_formatters.py:301 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) from {old_groups} to {new_groups}{comment}" +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "Modification de la visibilité d'une révision de la page {article} " -#: src/rc_formatters.py:303 +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "Modification de la visibilité d'évènements des journaux" + +#: extensions/base/mediawiki.py:356 #, fuzzy, python-brace-format -msgid "" -"{author} autopromoted [{target}]({target_url}) from {old_groups} to " -"{new_groups}{comment}" -msgstr "Modification de la visibilité d'une révision de la page {article} " +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "Modification de la visibilité d'évènements des journaux" -#: src/rc_formatters.py:304 src/rc_formatters.py:965 -msgid "System" -msgstr "Système" +#: extensions/base/mediawiki.py:370 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "Modification de la visibilité d'une révision de la page {article} " +msgstr[1] "" +"Modification de la visibilité de {amount} révisions sur la page {article} " -#: src/rc_formatters.py:309 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" -msgstr "Modification des paramètres de blocage pour {blocked_user}" - -#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 -#: src/rc_formatters.py:993 -msgid " [cascading]" -msgstr " [protection en cascade]" - -#: src/rc_formatters.py:316 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" -msgstr "" -"Transfert des paramètres de protection de {redirect}{article} vers {title}" - -#: src/rc_formatters.py:323 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" -msgstr "Création d'une feuille de sprite pour {article}" - -#: src/rc_formatters.py:327 +#: extensions/base/mediawiki.py:383 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -551,7 +922,223 @@ msgstr[0] "Modification de la visibilité d'une révision de la page {article} " msgstr[1] "" "Modification de la visibilité de {amount} révisions sur la page {article} " -#: src/rc_formatters.py:340 +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "Aucune redirection créée" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "Une redirection a été créée" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "Déplacement de {redirect}{article} vers {target}" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:416 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "Déplacement de {redirect}{article} vers {title} par redirection" + +#: extensions/base/mediawiki.py:448 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: extensions/base/mediawiki.py:477 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "Protection de {target}" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr " [protection en cascade]" + +#: extensions/base/mediawiki.py:506 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "Modification du niveau de protection de {article}" + +#: extensions/base/mediawiki.py:537 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"Transfert des paramètres de protection de {redirect}{article} vers {title}" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "Retrait de la protection de {article}" + +#: extensions/base/mediawiki.py:563 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "Création d'une feuille de sprite pour {article}" + +#: extensions/base/mediawiki.py:572 +#, fuzzy +msgid "for infinity and beyond" +msgstr "toujours" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:610 +msgid "Blocked from editing the following pages: " +msgstr "Ne peut plus modifier les pages suivantes : " + +#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr " et ces espaces de noms: " + +#: extensions/base/mediawiki.py:619 +msgid "Blocked from editing pages on following namespaces: " +msgstr "Ne peut plus modifier les pages des espaces de noms suivants : " + +#: extensions/base/mediawiki.py:630 +msgid "Partial block details" +msgstr "Détails partiaux du blocage" + +#: extensions/base/mediawiki.py:633 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:635 +#, fuzzy, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "{blocked_user} a été bloqué pour {time}" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr " on pages: " + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr " on namespaces: " + +#: extensions/base/mediawiki.py:676 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: extensions/base/mediawiki.py:704 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "{blocked_user} a été débloqué" + +#: extensions/base/mediawiki.py:727 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "Modification des paramètres de blocage pour {blocked_user}" + +#: extensions/base/mediawiki.py:743 +#, fuzzy +msgid "Action has been hidden by administration" +msgstr "L'action a été masquée par le personnel de Gamepedia." + +#: extensions/base/mediawiki.py:750 +#, fuzzy +msgid "An action has been hidden by administration." +msgstr "L'action a été masquée par le personnel de Gamepedia." + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "Article {article} importé avec {count} révision" +msgstr[1] "Article {article} importé avec {count} révisions" + +#: extensions/base/mediawiki.py:772 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -562,17 +1149,14 @@ msgid_plural "" msgstr[0] "Modification des paramètres de blocage pour {blocked_user}" msgstr[1] "Modification des paramètres de blocage pour {blocked_user}" -#: src/rc_formatters.py:345 +#: extensions/base/mediawiki.py:788 #, fuzzy, python-brace-format -msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "Modification de la visibilité d'une révision de la page {article} " +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "Article {article} importé avec {count} révision" +msgstr[1] "Article {article} importé avec {count} révisions" -#: src/rc_formatters.py:347 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) changed visibility of log events{comment}" -msgstr "Modification de la visibilité d'évènements des journaux" - -#: src/rc_formatters.py:359 +#: extensions/base/mediawiki.py:803 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -583,19 +1167,52 @@ msgid_plural "" msgstr[0] "Modification des paramètres de blocage pour {blocked_user}" msgstr[1] "Modification des paramètres de blocage pour {blocked_user}" -#: src/rc_formatters.py:364 +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:836 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "Modification des groupes pour {target}" + +#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +msgid "System" +msgstr "Système" + +#: extensions/base/mediawiki.py:840 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} a été auto-promu dans un nouveau groupe" + +#: extensions/base/mediawiki.py:846 +#, python-brace-format +msgid "" +"{reason}\n" +"{added}{linebreak}{removed}" +msgstr "" + +#: extensions/base/mediawiki.py:860 #, fuzzy, python-brace-format msgid "" -"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" -msgstr "Édition de la règle {number} du filtre anti-abus" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) {added}{comma} {removed}{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " -#: src/rc_formatters.py:368 +#: extensions/base/mediawiki.py:864 #, fuzzy, python-brace-format msgid "" -"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" -msgstr "Édition de la règle {number} du filtre anti-abus" +"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"{comment}" +msgstr "Modification de la visibilité d'une révision de la page {article} " -#: src/rc_formatters.py:372 +#: extensions/base/mediawiki.py:877 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "Fusion de l'historique de {article} vers {dest}" + +#: extensions/base/mediawiki.py:891 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -603,116 +1220,159 @@ msgid "" msgstr "" "Transfert des paramètres de protection de {redirect}{article} vers {title}" -#: src/rc_formatters.py:375 +#: extensions/base/mediawiki.py:905 +msgid "Created account automatically" +msgstr "" + +#: extensions/base/mediawiki.py:912 #, fuzzy, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" -#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +msgid "Created account" +msgstr "" + +#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 #, fuzzy, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" -#: src/rc_formatters.py:380 +#: extensions/base/mediawiki.py:944 +#, fuzzy, python-brace-format +msgid "Created account {article}" +msgstr "Suppression de la page {article}" + +#: extensions/base/mediawiki.py:953 #, fuzzy, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" "{comment}" msgstr "Modification de la visibilité d'une révision de la page {article} " -#: src/rc_formatters.py:383 +#: extensions/base/mediawiki.py:966 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" + +#: extensions/base/mediawiki.py:977 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " "and password was sent by email{comment}" msgstr "" -#: src/rc_formatters.py:388 +#: extensions/base/mediawiki.py:1009 +msgid "Added an entry to the interwiki table" +msgstr "Ajout d'une entrée à la table interwiki" + +#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Préfixe: {prefix}, site: {website} | {desc}" + +#: extensions/base/mediawiki.py:1022 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" "({table_url}) pointing to {website} with {prefix} prefix" msgstr "Retrait d'une entrée de la table interwiki" -#: src/rc_formatters.py:394 +#: extensions/base/mediawiki.py:1036 +msgid "Edited an entry in interwiki table" +msgstr "Modification d'une entrée de la table interwiki" + +#: extensions/base/mediawiki.py:1049 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " "pointing to {website} with {prefix} prefix" msgstr "Retrait d'une entrée de la table interwiki" -#: src/rc_formatters.py:400 +#: extensions/base/mediawiki.py:1063 +msgid "Deleted an entry in interwiki table" +msgstr "Retrait d'une entrée de la table interwiki" + +#: extensions/base/mediawiki.py:1064 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Préfixe: {prefix} | {desc}" + +#: extensions/base/mediawiki.py:1074 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" msgstr "Retrait d'une entrée de la table interwiki" -#: src/rc_formatters.py:403 +#: extensions/base/mediawiki.py:1091 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "Modification du modèle de contenu de l'article {article}" + +#: extensions/base/mediawiki.py:1093 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "Modèle changé de {old} à {new}: {reason}" + +#: extensions/base/mediawiki.py:1105 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "Modification de la visibilité d'une révision de la page {article} " -#: src/rc_formatters.py:407 +#: extensions/base/mediawiki.py:1120 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: extensions/base/mediawiki.py:1122 +#, fuzzy, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "Modèle changé de {old} à {new}: {reason}" + +#: extensions/base/mediawiki.py:1133 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " "non-default content model {new}{comment}" msgstr "Modification de la visibilité d'une révision de la page {article} " -#: src/rc_formatters.py:410 +#: extensions/base/mediawiki.py:1148 #, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" -msgstr "Création d'une feuille de sprite pour {article}" +msgid "Created the tag \"{tag}\"" +msgstr "Création du tag « {tag} »" -#: src/rc_formatters.py:413 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" -msgstr "Création d'une feuille de sprite pour {article}" - -#: src/rc_formatters.py:416 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) edited the slice for [{article}]({article_url})" -msgstr "Création d'une feuille de sprite pour {article}" - -#: src/rc_formatters.py:421 -#, python-brace-format -msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" - -#: src/rc_formatters.py:423 -#, python-brace-format -msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" - -#: src/rc_formatters.py:428 -#, python-brace-format -msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) a recréé le tableau Cargo « {table} »" - -#: src/rc_formatters.py:433 -#, python-brace-format -msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) a remplacé le tableau cargo « {table} »" - -#: src/rc_formatters.py:436 +#: extensions/base/mediawiki.py:1158 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" -#: src/rc_formatters.py:441 +#: extensions/base/mediawiki.py:1180 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "Suppression du tag « {tag} »" + +#: extensions/base/mediawiki.py:1182 +#, fuzzy +msgid "Removed from" +msgstr "Retirés" + +#: extensions/base/mediawiki.py:1182 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1194 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" -#: src/rc_formatters.py:443 +#: extensions/base/mediawiki.py:1204 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -723,215 +1383,41 @@ msgid_plural "" msgstr[0] "Modification des paramètres de blocage pour {blocked_user}" msgstr[1] "Modification des paramètres de blocage pour {blocked_user}" -#: src/rc_formatters.py:449 +#: extensions/base/mediawiki.py:1221 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "Activation du tag « {tag} »" + +#: extensions/base/mediawiki.py:1230 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" -#: src/rc_formatters.py:452 +#: extensions/base/mediawiki.py:1249 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "Désactivation du tag « {tag} »" + +#: extensions/base/mediawiki.py:1258 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) a recréé le tableau Cargo « {table} »" -#: src/rc_formatters.py:454 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) changed wiki settings{reason}" -msgstr "Modification de la visibilité d'évènements des journaux" +#: extensions/base/mediawiki.py:1278 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" -#: src/rc_formatters.py:456 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" -msgstr "Modification de la visibilité d'évènements des journaux" - -#: src/rc_formatters.py:459 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "Modification de la visibilité d'évènements des journaux" - -#: src/rc_formatters.py:462 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) modified namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "Modification de la visibilité d'une révision de la page {article} " - -#: src/rc_formatters.py:467 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" - -#: src/rc_formatters.py:473 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "Modification de la visibilité d'évènements des journaux" - -#: src/rc_formatters.py:477 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "Modification de la visibilité d'évènements des journaux" - -#: src/rc_formatters.py:481 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "Modification de la visibilité d'évènements des journaux" - -#: src/rc_formatters.py:486 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) generated *{file}* dump{comment}" -msgstr "Modification de la visibilité d'évènements des journaux" - -#: src/rc_formatters.py:491 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" -msgstr "Modification de la visibilité d'évènements des journaux" - -#: src/rc_formatters.py:502 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) marked [{article}]({article_url}) for " -"translation{comment}" -msgstr "Modification de la visibilité d'une révision de la page {article} " - -#: src/rc_formatters.py:509 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) removed [{article}]({article_url}) from the " -"translation system{comment}" -msgstr "Modification des paramètres de blocage pour {blocked_user}" - -#: src/rc_formatters.py:516 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) completed moving translation pages from *{article}* " -"to [{target}]({target_url}){comment}" -msgstr "" -"Transfert des paramètres de protection de {redirect}{article} vers {title}" - -#: src/rc_formatters.py:524 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) encountered a problem while moving [{article}]" -"({article_url}) to [{target}]({target_url}){comment}" -msgstr "" -"Transfert des paramètres de protection de {redirect}{article} vers {title}" - -#: src/rc_formatters.py:532 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translatable page [{article}]" -"({article_url}){comment}" -msgstr "Création d'une feuille de sprite pour {article}" - -#: src/rc_formatters.py:540 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translatable page [{target}]({target_url}){comment}" -msgstr "Modification des paramètres de blocage pour {blocked_user}" - -#: src/rc_formatters.py:548 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translation page [{article}]" -"({article_url}){comment}" -msgstr "Modification de la visibilité d'une révision de la page {article} " - -#: src/rc_formatters.py:556 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translation page [{target}]({target_url}){comment}" -msgstr "Modification des paramètres de blocage pour {blocked_user}" - -#: src/rc_formatters.py:564 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" -"{comment}" -msgstr "Création d'une feuille de sprite pour {article}" - -#: src/rc_formatters.py:571 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) discouraged translation of [{article}]" -"({article_url}){comment}" -msgstr "Modification de la visibilité d'une révision de la page {article} " - -#: src/rc_formatters.py:581 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " -"`{languages}`{comment}" -msgstr "" -"Transfert des paramètres de protection de {redirect}{article} vers {title}" - -#: src/rc_formatters.py:587 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) set the priority languages for [{article}]" -"({article_url}) to `{languages}`{comment}" -msgstr "" -"Transfert des paramètres de protection de {redirect}{article} vers {title}" - -#: src/rc_formatters.py:593 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) removed priority languages from [{article}]" -"({article_url}){comment}" -msgstr "Création d'une feuille de sprite pour {article}" - -#: src/rc_formatters.py:600 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) added translatable page [{article}]({article_url}) " -"to aggregate group \"{group}\"{comment}" -msgstr "Modification de la visibilité d'une révision de la page {article} " - -#: src/rc_formatters.py:607 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) removed translatable page [{article}]" -"({article_url}) from aggregate group \"{group}\"{comment}" -msgstr "Création d'une feuille de sprite pour {article}" - -#: src/rc_formatters.py:619 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) reviewed translation [{article}]({article_url})" -"{comment}" -msgstr "Modification de la visibilité d'une révision de la page {article} " - -#: src/rc_formatters.py:627 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" -msgstr "Modification de la visibilité d'une révision de la page {article} " - -#: src/rc_formatters.py:634 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) to `{new_state}`{comment}" -msgstr "Modification de la visibilité d'une révision de la page {article} " - -#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 -#: src/rc_formatters.py:1241 -msgid "(default)" +#: extensions/base/mediawiki.py:1283 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" msgstr "" -#: src/rc_formatters.py:647 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) changed the language of [{article}]({article_url}) " -"from {old_lang} to {new_lang}{comment}" -msgstr "Modification de la visibilité d'une révision de la page {article} " - -#: src/rc_formatters.py:656 +#: extensions/base/mediawiki.py:1298 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " @@ -942,636 +1428,180 @@ msgid_plural "" msgstr[0] "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" msgstr[1] "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" -#: src/rc_formatters.py:661 +#: extensions/base/mediawiki.py:1306 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" "{comment}" msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" -#: src/rc_formatters.py:665 -#, fuzzy -msgid "An action has been hidden by administration." -msgstr "L'action a été masquée par le personnel de Gamepedia." - -#: src/rc_formatters.py:681 -#, python-brace-format -msgid "{user} triggered \"{abuse_filter}\"" -msgstr "" - -#: src/rc_formatters.py:682 -msgid "Performed" -msgstr "" - -#: src/rc_formatters.py:683 -msgid "Action taken" -msgstr "" - -#: src/rc_formatters.py:684 -msgid "Title" -msgstr "" - -#: src/rc_formatters.py:693 src/rc_formatters.py:980 -msgid "No description provided" -msgstr "Aucune description" - -#: src/rc_formatters.py:717 -msgid "(N!) " -msgstr "(N!) " - -#: src/rc_formatters.py:718 -msgid "m" -msgstr "m" - -#: src/rc_formatters.py:718 -msgid "b" -msgstr "b" - -#: src/rc_formatters.py:735 src/rc_formatters.py:740 -msgid "__Only whitespace__" -msgstr "__Espaces uniquement__" - -#: src/rc_formatters.py:745 -msgid "Removed" -msgstr "Retirés" - -#: src/rc_formatters.py:747 -msgid "Added" -msgstr "Ajoutés" - -#: src/rc_formatters.py:781 src/rc_formatters.py:820 -msgid "Options" -msgstr "Options" - -#: src/rc_formatters.py:781 -#, python-brace-format -msgid "([preview]({link}) | [undo]({undolink}))" -msgstr "([Aperçu]({link}) | [Annuler]({undolink}))" - -#: src/rc_formatters.py:786 -#, python-brace-format -msgid "Uploaded a new version of {name}" -msgstr "Téléversement d'une nouvelle version de {name}" - -#: src/rc_formatters.py:788 -#, python-brace-format -msgid "Reverted a version of {name}" -msgstr "Rétablissement d'une version de {name}" - -#: src/rc_formatters.py:790 -#, python-brace-format -msgid "Uploaded {name}" -msgstr "Téléversement de {name}" - -#: src/rc_formatters.py:806 -msgid "**No license!**" -msgstr "**Aucune license!**" - -#: src/rc_formatters.py:818 -msgid "" -"\n" -"License: {}" -msgstr "" -"\n" -"License: {}" - -#: src/rc_formatters.py:820 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "([Aperçu]({link}))" - -#: src/rc_formatters.py:825 -#, python-brace-format -msgid "Deleted page {article}" -msgstr "Suppression de la page {article}" - -#: src/rc_formatters.py:830 -#, python-brace-format -msgid "Deleted redirect {article} by overwriting" -msgstr "Suppression par écrasement de la redirection {article}" - -#: src/rc_formatters.py:836 -msgid "No redirect has been made" -msgstr "Aucune redirection créée" - -#: src/rc_formatters.py:837 -msgid "A redirect has been made" -msgstr "Une redirection a été créée" - -#: src/rc_formatters.py:838 -#, python-brace-format -msgid "Moved {redirect}{article} to {target}" -msgstr "Déplacement de {redirect}{article} vers {target}" - -#: src/rc_formatters.py:841 -#, python-brace-format -msgid "Moved {redirect}{article} to {title} over redirect" -msgstr "Déplacement de {redirect}{article} vers {title} par redirection" - -#: src/rc_formatters.py:845 -#, python-brace-format -msgid "Moved protection settings from {redirect}{article} to {title}" -msgstr "" -"Transfert des paramètres de protection de {redirect}{article} vers {title}" - -#: src/rc_formatters.py:869 -msgid "unknown expiry time" -msgstr "" - -#: src/rc_formatters.py:874 -msgid "Blocked from editing the following pages: " -msgstr "Ne peut plus modifier les pages suivantes : " - -#: src/rc_formatters.py:883 -msgid "Blocked from editing pages on following namespaces: " -msgstr "Ne peut plus modifier les pages des espaces de noms suivants : " - -#: src/rc_formatters.py:894 -msgid "Partial block details" -msgstr "Détails partiaux du blocage" - -#: src/rc_formatters.py:895 -#, fuzzy, python-brace-format -msgid "Blocked {blocked_user} {time}" -msgstr "{blocked_user} a été bloqué pour {time}" - -#: src/rc_formatters.py:899 -#, python-brace-format -msgid "Changed block settings for {blocked_user}" -msgstr "Modification des paramètres de blocage pour {blocked_user}" - -#: src/rc_formatters.py:903 -#, python-brace-format -msgid "Unblocked {blocked_user}" -msgstr "{blocked_user} a été débloqué" - -#: src/rc_formatters.py:910 -#, python-brace-format -msgid "Left a comment on {target}'s profile" -msgstr "Ajout d'un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:912 -msgid "Left a comment on their own profile" -msgstr "Ajout d'un commentaire sur son propre profil" - -#: src/rc_formatters.py:919 -#, python-brace-format -msgid "Replied to a comment on {target}'s profile" -msgstr "Réponse à un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:921 -msgid "Replied to a comment on their own profile" -msgstr "Réponse à un commentaire sur son propre profil" - -#: src/rc_formatters.py:928 -#, python-brace-format -msgid "Edited a comment on {target}'s profile" -msgstr "Édition d'un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:930 -msgid "Edited a comment on their own profile" -msgstr "Modification d'un commentaire sur son propre profil" - -#: src/rc_formatters.py:935 -#, python-brace-format -msgid "Edited {target}'s profile" -msgstr "Modification du profil de {target}" - -#: src/rc_formatters.py:937 -msgid "Edited their own profile" -msgstr "Modification de son propre profil" - -#: src/rc_formatters.py:939 -#, python-brace-format -msgid "Cleared the {field} field" -msgstr "" - -#: src/rc_formatters.py:941 -#, python-brace-format -msgid "{field} field changed to: {desc}" -msgstr "{field} modifié pour: {desc}" - -#: src/rc_formatters.py:946 -#, python-brace-format -msgid "Purged a comment on {target}'s profile" -msgstr "Retrait d'un commentaire sur le profil de {target}." - -#: src/rc_formatters.py:948 -#, fuzzy -msgid "Purged a comment on their own profile" -msgstr "Modification d'un commentaire sur son propre profil" - -#: src/rc_formatters.py:956 -#, python-brace-format -msgid "Deleted a comment on {target}'s profile" -msgstr "Retrait d'un commentaire sur le profil de {target}" - -#: src/rc_formatters.py:958 -#, fuzzy -msgid "Deleted a comment on their own profile" -msgstr "Modification d'un commentaire sur son propre profil" - -#: src/rc_formatters.py:962 -#, python-brace-format -msgid "Changed group membership for {target}" -msgstr "Modification des groupes pour {target}" - -#: src/rc_formatters.py:966 -#, python-brace-format -msgid "{target} got autopromoted to a new usergroup" -msgstr "{target} a été auto-promu dans un nouveau groupe" - -#: src/rc_formatters.py:981 -#, python-brace-format -msgid "Groups changed from {old_groups} to {new_groups}{reason}" -msgstr "Groupe modifié de {old_groups} vers {new_groups}{reason}" - -#: src/rc_formatters.py:985 -#, python-brace-format -msgid "Protected {target}" -msgstr "Protection de {target}" - -#: src/rc_formatters.py:991 -#, python-brace-format -msgid "Changed protection level for {article}" -msgstr "Modification du niveau de protection de {article}" - -#: src/rc_formatters.py:997 -#, python-brace-format -msgid "Removed protection from {article}" -msgstr "Retrait de la protection de {article}" - -#: src/rc_formatters.py:1001 -#, python-brace-format -msgid "Changed visibility of revision on page {article} " -msgid_plural "Changed visibility of {amount} revisions on page {article} " -msgstr[0] "Modification de la visibilité d'une révision de la page {article} " -msgstr[1] "" -"Modification de la visibilité de {amount} révisions sur la page {article} " - -#: src/rc_formatters.py:1013 -#, python-brace-format -msgid "Imported {article} with {count} revision" -msgid_plural "Imported {article} with {count} revisions" -msgstr[0] "Article {article} importé avec {count} révision" -msgstr[1] "Article {article} importé avec {count} révisions" - -#: src/rc_formatters.py:1018 -#, python-brace-format -msgid "Restored {article}" -msgstr "Restauration de {article}" - -#: src/rc_formatters.py:1021 -msgid "Changed visibility of log events" -msgstr "Modification de la visibilité d'évènements des journaux" - -#: src/rc_formatters.py:1031 -#, fuzzy, python-brace-format -msgid "Imported {article} with {count} revision from \"{source}\"" -msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "Article {article} importé avec {count} révision" -msgstr[1] "Article {article} importé avec {count} révisions" - -#: src/rc_formatters.py:1036 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "Édition de la règle {number} du filtre anti-abus" - -#: src/rc_formatters.py:1039 -#, fuzzy, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "Édition de la règle {number} du filtre anti-abus" - -#: src/rc_formatters.py:1042 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "Fusion de l'historique de {article} vers {dest}" - -#: src/rc_formatters.py:1046 -msgid "Created account automatically" -msgstr "" - -#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 -msgid "Created account" -msgstr "" - -#: src/rc_formatters.py:1052 -#, fuzzy, python-brace-format -msgid "Created account {article}" -msgstr "Suppression de la page {article}" - -#: src/rc_formatters.py:1055 -#, python-brace-format -msgid "Created account {article} and password was sent by email" -msgstr "" - -#: src/rc_formatters.py:1061 -msgid "Added an entry to the interwiki table" -msgstr "Ajout d'une entrée à la table interwiki" - -#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "Préfixe: {prefix}, site: {website} | {desc}" - -#: src/rc_formatters.py:1067 -msgid "Edited an entry in interwiki table" -msgstr "Modification d'une entrée de la table interwiki" - -#: src/rc_formatters.py:1073 -msgid "Deleted an entry in interwiki table" -msgstr "Retrait d'une entrée de la table interwiki" - -#: src/rc_formatters.py:1074 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "Préfixe: {prefix} | {desc}" - -#: src/rc_formatters.py:1077 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "Modification du modèle de contenu de l'article {article}" - -#: src/rc_formatters.py:1078 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "Modèle changé de {old} à {new}: {reason}" - -#: src/rc_formatters.py:1083 -#, python-brace-format -msgid "Created the page {article} using a non-default content model" -msgstr "" - -#: src/rc_formatters.py:1084 -#, fuzzy, python-brace-format -msgid "Created with model {new}: {reason}" -msgstr "Modèle changé de {old} à {new}: {reason}" - -#: src/rc_formatters.py:1087 +#: extensions/base/sprite.py:37 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Édition du sprite de {article}" -#: src/rc_formatters.py:1090 +#: extensions/base/sprite.py:45 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "Création d'une feuille de sprite pour {article}" + +#: extensions/base/sprite.py:60 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Création d'une feuille de sprite pour {article}" -#: src/rc_formatters.py:1093 +#: extensions/base/sprite.py:68 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "Création d'une feuille de sprite pour {article}" + +#: extensions/base/sprite.py:79 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Edited the slice for {article}" -#: src/rc_formatters.py:1099 -#, python-brace-format -msgid "Created the Cargo table \"{table}\"" -msgstr "Création du tableau Cargo « {table} »" - -#: src/rc_formatters.py:1103 -#, python-brace-format -msgid "Deleted the Cargo table \"{table}\"" -msgstr "Suppression du tableau Cargo « {table} »" - -#: src/rc_formatters.py:1110 -#, python-brace-format -msgid "Recreated the Cargo table \"{table}\"" -msgstr "Recréation du tableau Cargo « {table} »" - -#: src/rc_formatters.py:1117 -#, python-brace-format -msgid "Replaced the Cargo table \"{table}\"" -msgstr "Remplacement du tableau Cargo « {table} »" - -#: src/rc_formatters.py:1121 +#: extensions/base/sprite.py:86 #, fuzzy, python-brace-format -msgid "Created the tag \"{tag}\"" -msgstr "Création du tag « {tag} »" +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "Création d'une feuille de sprite pour {article}" -#: src/rc_formatters.py:1125 #, fuzzy, python-brace-format -msgid "Deleted the tag \"{tag}\"" -msgstr "Suppression du tag « {tag} »" +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +#~ msgstr "Ajout d'un commentaire sur le profil de {target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on their own profile" +#~ msgstr "Ajout d'un commentaire sur le profil de {target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "Réponse à un commentaire sur le profil de {target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "Réponse à un commentaire sur le profil de {target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "Édition d'un commentaire sur le profil de {target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "Édition d'un commentaire sur le profil de {target}" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) a retiré un commentaire sur le profil de " +#~ "{target}." + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) purged a comment on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) a retiré un commentaire sur le profil de " +#~ "{target}." + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "Édition d'un commentaire sur le profil de {target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "Édition d'un commentaire sur le profil de {target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +#~ "profile. *({desc})*" +#~ msgstr "Retrait d'un commentaire sur le profil de {target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +#~ "profile. *({desc})*" +#~ msgstr "Retrait d'un commentaire sur le profil de {target}" + +#~ msgid "none" +#~ msgstr "aucun" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) completed deletion of translatable page " +#~ "[{article}]({article_url}){comment}" +#~ msgstr "Création d'une feuille de sprite pour {article}" + +#~ msgid "No description provided" +#~ msgstr "Aucune description" + +#, python-brace-format +#~ msgid "Left a comment on {target}'s profile" +#~ msgstr "Ajout d'un commentaire sur le profil de {target}" + +#~ msgid "Left a comment on their own profile" +#~ msgstr "Ajout d'un commentaire sur son propre profil" + +#, python-brace-format +#~ msgid "Replied to a comment on {target}'s profile" +#~ msgstr "Réponse à un commentaire sur le profil de {target}" + +#~ msgid "Replied to a comment on their own profile" +#~ msgstr "Réponse à un commentaire sur son propre profil" + +#, python-brace-format +#~ msgid "Edited a comment on {target}'s profile" +#~ msgstr "Édition d'un commentaire sur le profil de {target}" + +#~ msgid "Edited a comment on their own profile" +#~ msgstr "Modification d'un commentaire sur son propre profil" + +#, python-brace-format +#~ msgid "Edited {target}'s profile" +#~ msgstr "Modification du profil de {target}" + +#~ msgid "Edited their own profile" +#~ msgstr "Modification de son propre profil" + +#, python-brace-format +#~ msgid "{field} field changed to: {desc}" +#~ msgstr "{field} modifié pour: {desc}" + +#, python-brace-format +#~ msgid "Purged a comment on {target}'s profile" +#~ msgstr "Retrait d'un commentaire sur le profil de {target}." -#: src/rc_formatters.py:1127 #, fuzzy -msgid "Removed from" -msgstr "Retirés" +#~ msgid "Purged a comment on their own profile" +#~ msgstr "Modification d'un commentaire sur son propre profil" -#: src/rc_formatters.py:1127 -msgid "{} revision or log entry" -msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1131 -#, fuzzy, python-brace-format -msgid "Activated the tag \"{tag}\"" -msgstr "Activation du tag « {tag} »" - -#: src/rc_formatters.py:1134 -#, fuzzy, python-brace-format -msgid "Deactivated the tag \"{tag}\"" -msgstr "Désactivation du tag « {tag} »" - -#: src/rc_formatters.py:1137 -msgid "Changed wiki settings" -msgstr "" - -#: src/rc_formatters.py:1141 -#, fuzzy, python-brace-format -msgid "Deleted a \"{wiki}\" wiki" -msgstr "Suppression du tag « {tag} »" - -#: src/rc_formatters.py:1144 #, python-brace-format -msgid "Locked a \"{wiki}\" wiki" -msgstr "" +#~ msgid "Deleted a comment on {target}'s profile" +#~ msgstr "Retrait d'un commentaire sur le profil de {target}" -#: src/rc_formatters.py:1147 -#, python-brace-format -msgid "Modified \"{namespace_name}\" namespace" -msgstr "" - -#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 -msgid "Wiki" -msgstr "" - -#: src/rc_formatters.py:1151 -#, python-brace-format -msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "" - -#: src/rc_formatters.py:1157 -#, python-brace-format -msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "" - -#: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format -msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Suppression du tag « {tag} »" - -#: src/rc_formatters.py:1163 -#, python-brace-format -msgid "Unlocked a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1166 -#, python-brace-format -msgid "Generated {file} dump" -msgstr "" - -#: src/rc_formatters.py:1169 -#, fuzzy, python-brace-format -msgid "Deleted {file} dump" -msgstr "Suppression de la page {article}" - -#: src/rc_formatters.py:1177 -#, python-brace-format -msgid "Marked \"{article}\" for translation" -msgstr "" - -#: src/rc_formatters.py:1180 -#, python-brace-format -msgid "Removed \"{article}\" from the translation system" -msgstr "" - -#: src/rc_formatters.py:1183 -#, python-brace-format -msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1186 -#, python-brace-format -msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1189 -#, python-brace-format -msgid "Completed deletion of translatable page \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1192 -#, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translatable page " -"\"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1195 -#, fuzzy, python-brace-format -msgid "Completed deletion of translation page \"{article}\"" -msgstr "Modification de la visibilité d'une révision de la page {article} " - -#: src/rc_formatters.py:1198 -#, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1201 -#, fuzzy, python-brace-format -msgid "Encouraged translation of \"{article}\"" -msgstr "Retrait de la protection de {article}" - -#: src/rc_formatters.py:1204 -#, python-brace-format -msgid "Discouraged translation of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1210 -#, python-brace-format -msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1212 -#, python-brace-format -msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1214 -#, fuzzy, python-brace-format -msgid "Removed priority languages from \"{article}\"" -msgstr "Retrait de la protection de {article}" - -#: src/rc_formatters.py:1217 -#, python-brace-format -msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1220 -#, python-brace-format -msgid "" -"Removed translatable page \"{article}\" from aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1227 -#, fuzzy, python-brace-format -msgid "Reviewed translation \"{article}\"" -msgstr "Retrait de la protection de {article}" - -#: src/rc_formatters.py:1230 -#, python-brace-format -msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1232 -msgid "Old state" -msgstr "" - -#: src/rc_formatters.py:1233 -msgid "New state" -msgstr "" - -#: src/rc_formatters.py:1242 -#, fuzzy, python-brace-format -msgid "Changed the language of \"{article}\"" -msgstr "Retrait de la protection de {article}" - -#: src/rc_formatters.py:1243 -msgid "Old language" -msgstr "" - -#: src/rc_formatters.py:1244 -msgid "New language" -msgstr "" - -#: src/rc_formatters.py:1248 -#, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1250 -#, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "" - -#: src/rc_formatters.py:1254 #, fuzzy -msgid "Action has been hidden by administration" -msgstr "L'action a été masquée par le personnel de Gamepedia." +#~ msgid "Deleted a comment on their own profile" +#~ msgstr "Modification d'un commentaire sur son propre profil" -#: src/rc_formatters.py:1288 -msgid "**Added**: " -msgstr "**Ajoutées : ** " - -#: src/rc_formatters.py:1288 -msgid " and {} more\n" -msgstr " et {} autres\n" - -#: src/rc_formatters.py:1289 -msgid "**Removed**: " -msgstr "**Retirées : ** " - -#: src/rc_formatters.py:1289 -msgid " and {} more" -msgstr " et {} autres" - -#: src/rc_formatters.py:1290 -msgid "Changed categories" -msgstr "Catégories modifiées" +#, python-brace-format +#~ msgid "Groups changed from {old_groups} to {new_groups}{reason}" +#~ msgstr "Groupe modifié de {old_groups} vers {new_groups}{reason}" #, fuzzy, python-brace-format #~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" diff --git a/locale/fr/LC_MESSAGES/misc.po b/locale/fr/LC_MESSAGES/misc.po index 907b861..5ab14f8 100644 --- a/locale/fr/LC_MESSAGES/misc.po +++ b/locale/fr/LC_MESSAGES/misc.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-28 23:45+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-03-17 21:40+0100\n" "Last-Translator: Frisk <>\n" "Language-Team: \n" @@ -20,59 +20,59 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-SearchPath-0: rcgcdw.pot\n" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Location" msgstr "Emplacement" -#: src/misc.py:45 +#: src/misc.py:44 msgid "About me" msgstr "À propos de moi" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Google link" msgstr "Lien Google" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Facebook link" msgstr "Lien Facebook" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitter link" msgstr "Lien Twitter" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Reddit link" msgstr "Lien Reddit" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitch link" msgstr "Lien Twitch" -#: src/misc.py:45 +#: src/misc.py:44 msgid "PSN link" msgstr "Lien PSN" -#: src/misc.py:45 +#: src/misc.py:44 msgid "VK link" msgstr "Lien VK" -#: src/misc.py:45 +#: src/misc.py:44 msgid "XBL link" msgstr "Lien XBL" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Steam link" msgstr "Lien Steam" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Discord handle" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Battle.net handle" msgstr "" -#: src/misc.py:119 +#: src/misc.py:138 msgid "" "\n" "__And more__" @@ -80,11 +80,11 @@ msgstr "" "\n" "__Et plus__" -#: src/misc.py:276 +#: src/misc.py:322 msgid "Unknown" msgstr "Inconnu" -#: src/misc.py:278 +#: src/misc.py:324 #, fuzzy msgid "unknown" msgstr "Inconnu" diff --git a/locale/fr/LC_MESSAGES/rcgcdw.po b/locale/fr/LC_MESSAGES/rcgcdw.po index 75d19f4..081759e 100644 --- a/locale/fr/LC_MESSAGES/rcgcdw.po +++ b/locale/fr/LC_MESSAGES/rcgcdw.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-12-13 14:30+0000\n" "Last-Translator: magiczocker \n" "Language-Team: French \n" "Language-Team: French 1;\n" "X-Generator: Weblate 4.4.2\n" -#: src/discord/redaction.py:62 src/discord/redaction.py:65 -#: src/discord/redaction.py:70 +#: src/discord/redaction.py:77 src/discord/redaction.py:80 +#: src/discord/redaction.py:85 msgid "Removed" msgstr "Retiré" diff --git a/locale/hi/LC_MESSAGES/formatters.po b/locale/hi/LC_MESSAGES/formatters.po index 0a13e06..fe177f0 100644 --- a/locale/hi/LC_MESSAGES/formatters.po +++ b/locale/hi/LC_MESSAGES/formatters.po @@ -6,24 +6,9 @@ #, fuzzy msgid "" msgstr "" -"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" -"PO-Revision-Date: 2020-12-13 14:30+0000\n" -"Last-Translator: MarkusRost \n" -"Language-Team: Hindi \n" -"Language: hi\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -"Project-Id-Version: RcGcDw\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-12-30 13:26+0000\n" "Last-Translator: Creeper \n" "Language-Team: Hindi 1;\n" +"X-Generator: Weblate 4.2.1\n" +"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.2.1\n" -#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 -#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 -#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 -msgid "unknown" -msgstr "अनजान" +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" +msgstr "__सिर्फ वाइटस्पेस__" -#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 -#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 -#: src/rc_formatters.py:75 src/rc_formatters.py:96 +#: src/api/util.py:71 +msgid "Removed" +msgstr "हटाया गया" + +#: src/api/util.py:73 +msgid "Added" +msgstr "जोड़ा" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 msgid "Unregistered user" msgstr "अनरेजिसटर्ड सदस्य" -#: src/discussion_formatters.py:39 +#: src/api/util.py:160 extensions/base/discussions.py:193 +#: extensions/base/discussions.py:195 +msgid "Tags" +msgstr "टैग" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "**जोड़ा**: " + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr " और {}\n" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "**हटाया**: " + +#: src/api/util.py:166 +msgid " and {} more" +msgstr " और {}" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "श्रेणियों को बदला गया" + +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "कार्गो टेबल \"{table}\" बनाया गया" + +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) ने कीर्गो टेबल \"{table}\" बनाया" + +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "कार्गो टेबल \"{table}\" को फिर से बनाया गया" + +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) ने कार्गो टेबल \"{table}\" को फिर से बनाया" + +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "कोर्गो टेबल \"{table}\" को बदला गया" + +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) ने कार्गो टेबल \"{table}\" को बदल दिया" + +#: extensions/base/cargo.py:105 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "कार्गो टेबल \"{table}\" को डिलीट किया गया" + +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) ने कार्गो टेबल \"{table}\" को डिलीट किया" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "\"{article}\" को अनुवाद के लिए मार्क किया गया" + +#: extensions/base/translate.py:55 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) को अनुवाद के लिए मार्क " +"किया{comment}" + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "\"{article}\" को अनुवाद सिस्टम से हटा दिया गया" + +#: extensions/base/translate.py:80 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" +"[{author}]({author_url}) ने अनुवाद सिस्टम से [{article}]({article_url}) को " +"हटाया{comment}" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "\"{article}\" से \"{target}\" तक अनुवाद पृष्ठों को लाना पूरा हुआ" + +#: extensions/base/translate.py:106 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने *{article}* से [{target}]({target_url}) पर अनुवाद " +"पृष्ठ को लाना ख़त्म किया{comment}" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "\"{article}\" को \"{target}\" पर ले जाते वक्त एक त्रुटि आई" + +#: extensions/base/translate.py:133 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) को [{target}]" +"({target_url}) पर लाते वक्त मुश्किलें पाई{comment}" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" +"\"{article}\" को डिलीट न किया जा सका जो अनुवाद-लायक पृष्ठ \"{target}\" का है" + +#: extensions/base/translate.py:161 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) [{article}]({article_url}) को डिलीट न कर पाए, जो " +"अनुवाद-लायक पृष्ठ [{target}]({target_url}) का है{comment}" + +#: extensions/base/translate.py:177 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "अनुवाद पृष्ठ {article} के डिलीशन को पूरा किया" + +#: extensions/base/translate.py:188 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने अनुवाद पृष्ठ [{article}]({article_url}) के डिलीशन को " +"पूरा किया{comment}" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "\"{article}\" को डिलीट न किया जा सका जो अनुवाद पृष्ठ \"{target}\" का है" + +#: extensions/base/translate.py:215 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) [{article}]({article_url}) को डिलीट न कर पाए, जो " +"अनुवाद पृष्ठ [{target}]({target_url}) का है{comment}" + +#: extensions/base/translate.py:231 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "{article} के अनुवाद को बढ़ावा दिया गया" + +#: extensions/base/translate.py:240 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) [{article}]({article_url}) को अनुवाद करने का बढ़ावा " +"दिया{comment}" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "\"{article}\" के अनुवाद के बढ़ावे को कम किया" + +#: extensions/base/translate.py:264 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) के अनुवाद के बढ़ावे को कम " +"किया{comment}" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "\"{article}\" के भाषाओं को `{languages}` तक सीमित किया गया" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "\"{article}\" के मुख्य भाषाओं को `{languages}` में सेट किया गया" + +#: extensions/base/translate.py:288 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "\"{article}\" से मुख्य भाषाओं को हटा दिया गया" + +#: extensions/base/translate.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) के भाषाओं को `{languages}" +"` तक सीमित किया{comment}" + +#: extensions/base/translate.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) के मुख्य भाषाओं को " +"`{languages}` में सेट किया{comment}" + +#: extensions/base/translate.py:315 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) से मुख्य भाषाओं को " +"हटाया{comment}" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "अनुवाद-लायक पृष्ठ \"{article}\" को एग्रीगेट ग्रुप \"{group}\" में डाला गया" + +#: extensions/base/translate.py:342 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) ने अनुवाद-लायक पृष्ठ [{article}]({article_url}) को " +"एग्रीगेट ग्रुप \"{group}\" में डाला{comment}" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "अनुवाद-लायक पृष्ठ \"{article}\" को एग्रीगेट ग्रुप \"{group}\" से हटा दिया गया" + +#: extensions/base/translate.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) ने अनुवाद-लायक [{article}]({article_url}) को एग्रीगेट " +"ग्रुप \"{group}\" से हटाया{comment}" + +#: extensions/base/translate.py:387 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "अनुवाद \"{article}\" को रिव्यु किया गया" + +#: extensions/base/translate.py:401 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) ने अनुवाद [{article}]({article_url}) को रिव्यु " +"किया{comment}" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "\"{article}\" `{language}` अनुवादों के स्थिति को बदला गया" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "पुरानी स्थिति" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "नई स्थिति" + +#: extensions/base/translate.py:431 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) ने पृष्ठ [{article}]({article_url}) के `{language}` के " +"स्थिति को `{old_state}` से `{new_state}` में बदला{comment}" + +#: extensions/base/translate.py:439 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) ने पृष्ठ [{article}]({article_url}) के `{language}` " +"अनुवादों को `{new_state}` में बदला{comment}" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "(डिफ़ॉल्ट)" + +#: extensions/base/translate.py:464 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "\"{article}\" के भाषा को बदला" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "पुरानी भाषा" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "नई भाषा" + +#: extensions/base/translate.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" +"[{author}]({author_url}) [{article}]({article_url}) के भाषा को {old_lang} से " +"{new_lang} में बदला{comment}" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "अनजान" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "\"{title}\" बनाया" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "पॉल \"{title}\" बनाया" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "विकल्प {}" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[चित्र देखें]({image_url})__" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "एक क्विज़ \"{title}\" बनाया" + +#: extensions/base/discussions.py:193 +msgid "{} tags" +msgstr "{} टैग" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "\"{title}\" पर जवाब दिया" + +#: extensions/base/discussions.py:214 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " @@ -56,7 +428,7 @@ msgstr "" "[{author}]({author_url}) ने {forumName} में [{title}](<{url}f/p/{threadId}>) " "बनाया" -#: src/discussion_formatters.py:42 +#: extensions/base/discussions.py:217 #, python-brace-format msgid "" "[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " @@ -65,7 +437,7 @@ msgstr "" "[{author}]({author_url}) ने {forumName} में पॉल [{title}](<{url}f/p/{threadId}" ">) बनाया" -#: src/discussion_formatters.py:45 +#: extensions/base/discussions.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " @@ -74,7 +446,7 @@ msgstr "" "[{author}]({author_url}) ने {forumName} में क्विज़ [{title}](<{url}f/p/{threadId}" ">) बनाया" -#: src/discussion_formatters.py:54 +#: extensions/base/discussions.py:234 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " @@ -83,7 +455,17 @@ msgstr "" "[{author}]({author_url}) ने {forumName} में [{title}](<{url}f/p/{threadId}>) पर " "[जवाब](<{url}f/p/{threadId}/r/{postId}>) दिया" -#: src/discussion_formatters.py:61 +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "{user} के मैसेज वॉल पर \"{title}\" बनाया" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "{user} के मैसेज वॉल के \"{title}\" पर जवाब दिया" + +#: extensions/base/discussions.py:312 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" @@ -94,7 +476,7 @@ msgstr "" "{user_wall}>) पर [{title}](<{url}wiki/Message_Wall:{user_wall}?" "threadId={threadId}>) बनाया" -#: src/discussion_formatters.py:64 +#: extensions/base/discussions.py:318 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" @@ -107,7 +489,17 @@ msgstr "" "threadId={threadId}>) पर [जवाब](<{url}wiki/Message_Wall:{user_wall}?" "threadId={threadId}#{replyId}>) दिया" -#: src/discussion_formatters.py:72 +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "{article} पर कमेंट किया" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "{article} के एक कमेंट पर जवाब दिया" + +#: extensions/base/discussions.py:359 #, python-brace-format msgid "" "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " @@ -116,7 +508,7 @@ msgstr "" "[{author}]({author_url}) ने [{article}](<{url}>) पर [कमेंट](<{url}?" "commentId={commentId}>) किया" -#: src/discussion_formatters.py:78 +#: extensions/base/discussions.py:365 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" @@ -127,152 +519,227 @@ msgstr "" "commentId={commentId}>) पर [जवाब](<{url}?commentId={commentId}" "&replyId={replyId}>) दिया" -#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "विकी सेटिंग्स को बदला गया" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) ने विकी सेटिंग्स को बदला{reason}" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "\"{wiki}\" विकी को डिलीट किया गया" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "अनजान" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* को डिलीट किया{comment}" + +#: extensions/base/managewiki.py:80 +#, fuzzy, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "\"{usergroup_name}\" यूज़रग्रुप को मॉडिफाइ किया गया" + +#: extensions/base/managewiki.py:89 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" +"[{author}]({author_url}) ने यूज़र ग्रुप *{group_name}* को मॉडिफाइ किया{comment}" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "\"{wiki}\" विकी को लॉक किया गया" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* के लॉक किया{comment}" + +#: extensions/base/managewiki.py:124 +#, fuzzy, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "\"{namespace_name}\" नेमस्पेस को मॉडिफाइ किया गया" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "विकी" + +#: extensions/base/managewiki.py:134 #, fuzzy, python-brace-format msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" msgstr "" -"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" -"[{author}]({author_url}) द्वारा अनजान घटना `{event}`, [सहायता सर्वर](<{support}" -">) पर रिपोर्ट करें।\n" -"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -"[{author}]({author_url}) द्वारा अनजान घटना `{event}`, इसे [सहायता सर्वर]" -"(<{support}>) पर रिपोर्ट करें।" +"[{author}]({author_url}) ने *{wiki_name}* पर एक नेमस्पेस *{namespace_name}* को " +"मॉडिफाइ किया{comment}" -#: src/discussion_formatters.py:123 +#: extensions/base/managewiki.py:147 #, python-brace-format -msgid "Created \"{title}\"" -msgstr "\"{title}\" बनाया" +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "\"{namespace_name}\" नेमस्पेस को डिलीट किया गया" -#: src/discussion_formatters.py:127 +#: extensions/base/managewiki.py:158 #, python-brace-format -msgid "Created a poll \"{title}\"" -msgstr "पॉल \"{title}\" बनाया" +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) ने *{wiki_name}* पर नेमस्पेस *{namespace_name}* को " +"डिलीट किया{comment}" -#: src/discussion_formatters.py:134 -msgid "Option {}" -msgstr "विकल्प {}" - -#: src/discussion_formatters.py:135 +#: extensions/base/managewiki.py:173 #, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "__[चित्र देखें]({image_url})__" +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "\"{usergroup_name}\" यूज़रग्रुप को मॉडिफाइ किया गया" -#: src/discussion_formatters.py:139 +#: extensions/base/managewiki.py:182 #, python-brace-format -msgid "Created a quiz \"{title}\"" -msgstr "एक क्विज़ \"{title}\" बनाया" +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" +"[{author}]({author_url}) ने यूज़र ग्रुप *{group_name}* को मॉडिफाइ किया{comment}" -#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 -#: src/rc_formatters.py:1283 -msgid "Tags" -msgstr "टैग" +#: extensions/base/managewiki.py:195 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "\"{wiki}\" विकी को डिलीट किया गया" -#: src/discussion_formatters.py:155 -msgid "{} tags" -msgstr "{} टैग" +#: extensions/base/managewiki.py:203 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* को डिलीट किया{comment}" -#: src/discussion_formatters.py:160 +#: extensions/base/managewiki.py:217 #, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "\"{title}\" पर जवाब दिया" +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "\"{wiki}\" विकी को अनलॉक किया गया" -#: src/discussion_formatters.py:169 +#: extensions/base/managewiki.py:225 #, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "{user} के मैसेज वॉल पर \"{title}\" बनाया" +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) ने एक विकी *{wiki_name}* को अनलॉक किया{comment}" -#: src/discussion_formatters.py:173 +#: extensions/base/datadump.py:36 #, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "{user} के मैसेज वॉल के \"{title}\" पर जवाब दिया" +msgid "Generated {file} dump" +msgstr "{file} डंप जनरेट किया" -#: src/discussion_formatters.py:180 +#: extensions/base/datadump.py:45 #, python-brace-format -msgid "Commented on {article}" -msgstr "{article} पर कमेंट किया" +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "[{author}]({author_url}) ने *{file}* डंप जनरेट किया{comment}" -#: src/discussion_formatters.py:184 +#: extensions/base/datadump.py:58 #, python-brace-format -msgid "Replied to a comment on {article}" -msgstr "{article} के एक कमेंट पर जवाब दिया" +msgid "Deleted {file} dump" +msgstr "{file} डंप को डिलीट किया" -#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#: extensions/base/datadump.py:67 #, python-brace-format -msgid "Unknown event `{event}`" -msgstr "अनजान घटना `{event}`" +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "[{author}]({author_url}) *{file}* डंप को डिलीट किया{comment}" -#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 -#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 -msgid "Report this on the support server" -msgstr "इसे सहायता सर्वर पर रिपोर्ट करें" - -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "None" msgstr "कुछ नहीं" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Warning issued" msgstr "सूचना दे दी गई है" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Blocked user**" msgstr "**ब्लॉक्ड सदस्य**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Tagged the edit" msgstr "सम्पादना को टैग कर दिया है" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Disallowed the action" msgstr "काम को मना कर दिया" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**IP range blocked**" msgstr "**IP रेंज ब्लॉक्ड है**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Throttled actions" msgstr "थ्रॉटल किए गए काम" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Removed autoconfirmed group" msgstr "ऑटोकन्फर्म्ड ग्रुप हटा दिया गया है" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Removed from privileged groups**" msgstr "**प्रिविलेज वाले ग्रुपों से हटा दिया गया है**" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Edit" msgstr "सम्पादना" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Upload" msgstr "अपलोड" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Move" msgstr "मूव" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Stash upload" msgstr "स्टैश अपलोड" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Deletion" msgstr "डिलीशन" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Account creation" msgstr "अकाउंट सृष्टि" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Auto account creation" msgstr "ऑटो अकाउंट सृष्टि" -#: src/rc_formatters.py:83 +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "{user} ने \"{abuse_filter}\" को ट्रिगर किया" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "ऐक्शन" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "लिया गया ऐक्शन" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "शीर्षक" + +#: extensions/base/abusefilter.py:66 #, python-brace-format msgid "" "[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " @@ -281,19 +748,84 @@ msgstr "" "[{author}]({author_url}) ने *[{target}]({target_url})* पर ऐक्शन \"{action}\" " "लेते हुए *{abuse_filter}* को ट्रिगर किया - लिया गया ऐक्शन: {result}।" -#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 -#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 -#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 -#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 -#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 -#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 -#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 -#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 -#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 -msgid "Unknown" -msgstr "अनजान" +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "अब्यूज़ फिल्टर संख्यी {number} को बदला गया" -#: src/rc_formatters.py:116 +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) ने अब्यूज़ फिल्टर [संख्या {number}]({filter_url}) को " +"सम्पादित किया" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "अब्यूज़ फिल्टर संख्या {number} को बनाया गया" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) ने अब्यूज़ फिल्टर [संख्या {number}]({filter_url}) बनाया" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "(न!) " + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "छो" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "बॉ" + +#: extensions/base/mediawiki.py:112 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" @@ -302,7 +834,7 @@ msgstr "" "[{author}]({author_url}) ने [{article}]({edit_link}){comment} ({bold}({sign}" "{edit_size}){bold} को सम्पादित किया" -#: src/rc_formatters.py:118 +#: extensions/base/mediawiki.py:117 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" @@ -311,13 +843,48 @@ msgstr "" "[{author}]({author_url}) ने [{article}]({edit_link}){comment} {bold}({sign}" "{edit_size}){bold} बनाया" -#: src/rc_formatters.py:121 -#, python-brace-format -msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" -msgstr "" -"[{author}]({author_url}) ने [{file}]({file_link}){comment} को अपलोड किया" +#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +msgid "Options" +msgstr "विकल्प" -#: src/rc_formatters.py:128 +#: extensions/base/mediawiki.py:191 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([पूर्वावलोकन]({link}) | [पूर्ववत करें]({undolink}))" + +#: extensions/base/mediawiki.py:196 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "{name} के एक नए संसकरण को अपलोड किया" + +#: extensions/base/mediawiki.py:198 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "{name} के एक संसकरण को पूर्ववत किया" + +#: extensions/base/mediawiki.py:200 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "{name} को अपलोड किया" + +#: extensions/base/mediawiki.py:209 +msgid "**No license!**" +msgstr "**कोई लाइसेंस नहीं है!**" + +#: extensions/base/mediawiki.py:224 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"लाइसेंस: {}" + +#: extensions/base/mediawiki.py:226 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([पूर्वावलोकन]({link}))" + +#: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" @@ -325,7 +892,7 @@ msgstr "" "[{author}]({author_url}) ने [{file}]({file_link}){comment} के एक संसकरण को " "रिवर्ट किया" -#: src/rc_formatters.py:132 +#: extensions/base/mediawiki.py:248 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -334,13 +901,29 @@ msgstr "" "[{author}]({author_url}) ने [{file}]({file_link}){comment} के एक नए संसकरण को " "अपलोड किया" -#: src/rc_formatters.py:135 +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{file}]({file_link}){comment} को अपलोड किया" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "पृष्ठ {article} को डिलीट किया" + +#: extensions/base/mediawiki.py:283 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "" "[{author}]({author_url}) ने [{page}]({page_link}){comment} को डिलीट किया" -#: src/rc_formatters.py:141 +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "ओवर्राइट करके रेडिरेक्ट {article} को डिलीट किया" + +#: extensions/base/mediawiki.py:308 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -349,240 +932,34 @@ msgstr "" "[{author}]({author_url}) ने [{page}]({page_link}){comment} को ओवर्राइट करके " "रेडिरेक्ट को डिलीट किया" -#: src/rc_formatters.py:147 src/rc_formatters.py:152 -msgid "without making a redirect" -msgstr "बिना रेडिरेक्ट छोड़े" - -#: src/rc_formatters.py:147 src/rc_formatters.py:153 -msgid "with a redirect" -msgstr "रेडिरेक्ट छोड़कर" - -#: src/rc_formatters.py:148 +#: extensions/base/mediawiki.py:322 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" +msgid "Restored {article}" +msgstr "{article} को रिस्टोर किया गया" + +#: extensions/base/mediawiki.py:331 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" -"[{author}]({author_url}) ने {redirect}*{article}* को [{target}]({target_url}) " -"पर {made_a_redirect} मूव किया{comment}" +"[{author}]({author_url}) ने [{article}]({article_url}) को रिस्टोर किया{comment}" -#: src/rc_formatters.py:154 +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "लॉग घटनाओं के दृश्यता को बदला गया" + +#: extensions/base/mediawiki.py:356 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -"[{target}]({target_url}) {made_a_redirect}{comment}" -msgstr "" -"[{author}]({author_url}) ने {redirect}*{article}* को रेडिरेक्ट के साथ [{target}]" -"({target_url}) {made_a_redirect}{comment} पर मूव किया" +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "[{author}]({author_url}) ने लॉग घटनाओं के दृश्यता को बदल दिया{comment}" -#: src/rc_formatters.py:159 +#: extensions/base/mediawiki.py:370 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) ने प्रॉटेक्शन सेटिंगस को {redirect}*{article}* से " -"[{target}]({target_url}){comment} पर मूव किया" +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "पृष्ठ {article} पर रिवीशन के दृश्यता को बदला " +msgstr[1] "पृष्ठ {article} पर {amount} रिवीशनों के दृश्यता को बदला " -#: src/rc_formatters.py:170 src/rc_formatters.py:855 -msgid "for infinity and beyond" -msgstr "अनंत और इसके परे तक" - -#: src/rc_formatters.py:179 src/rc_formatters.py:863 -#, python-brace-format -msgid "for {num} {translated_length}" -msgstr "{num} {translated_length} के लिए" - -#: src/rc_formatters.py:185 src/rc_formatters.py:867 -msgid "until {}" -msgstr "{} के लिए" - -#: src/rc_formatters.py:189 -msgid " on pages: " -msgstr " इन पृष्ठों पर: " - -#: src/rc_formatters.py:196 src/rc_formatters.py:881 -msgid " and namespaces: " -msgstr " और इन नेमस्पेसों पर: " - -#: src/rc_formatters.py:198 -msgid " on namespaces: " -msgstr " इन नेमस्पेसों पर: " - -#: src/rc_formatters.py:210 -#, python-brace-format -msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" -msgstr "" -"[{author}]({author_url}) ने [{user}]({user_url}) {time}{restriction_desc} को " -"ब्लॉक किया{comment}" - -#: src/rc_formatters.py:214 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) ने [{blocked_user}]({user_url}) के ब्लॉक सेटिंगस को " -"बदला{comment}" - -#: src/rc_formatters.py:218 -#, python-brace-format -msgid "" -"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) ने [{blocked_user}]({user_url}) को अनब्लॉक " -"किया{comment}" - -#: src/rc_formatters.py:223 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) ने {target} के प्रॉफाइल पर एक [कमेंट]({comment}) छोड़ा" - -#: src/rc_formatters.py:225 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on their own profile" -msgstr "[{author}]({author_url}) ने अपने प्रॉफाइल पर एक [कमेंट]({comment}) छोड़ा" - -#: src/rc_formatters.py:231 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -"profile" -msgstr "" -"[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) पर जवाब " -"दिया" - -#: src/rc_formatters.py:237 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on their own " -"profile" -msgstr "" -"[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) पर जवाब दिया" - -#: src/rc_formatters.py:245 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) पर जवाब " -"दिया" - -#: src/rc_formatters.py:251 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) को सम्पादित किया" - -#: src/rc_formatters.py:257 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "[{author}]({author_url}) ने {target} के प्रॉफाइल के एक कमेंट को पर्ज किया" - -#: src/rc_formatters.py:259 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "[{author}]({author_url}) ने अपने प्रॉफाइल के एक कमेंट को पर्ज किया" - -#: src/rc_formatters.py:267 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) को डिलीट " -"किया" - -#: src/rc_formatters.py:269 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) को डिलीट किया" - -#: src/rc_formatters.py:274 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) ने [{target}]({target_url}) के प्रॉफाइल पर {field} को " -"सम्पादित किया। *({desc})*" - -#: src/rc_formatters.py:281 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) ने [अपने]({target_url}) प्रॉफाइल पर {field} को सम्पादित " -"किया। *({desc})*" - -#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 -#: src/rc_formatters.py:979 -msgid "none" -msgstr "कुछ नहीं" - -#: src/rc_formatters.py:301 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) from {old_groups} to {new_groups}{comment}" -msgstr "" -"[{author}]({author_url}) ने [{target}]({target_url}) के लिए ग्रुप {old_groups} से " -"{new_groups} में बदला{comment}" - -#: src/rc_formatters.py:303 -#, python-brace-format -msgid "" -"{author} autopromoted [{target}]({target_url}) from {old_groups} to " -"{new_groups}{comment}" -msgstr "" -"{author} ने [{target}]({target_url}) को {old_groups} से {new_groups} में " -"ऑटोप्रमोट किया{comment}" - -#: src/rc_formatters.py:304 src/rc_formatters.py:965 -msgid "System" -msgstr "सिस्टम" - -#: src/rc_formatters.py:309 -#, python-brace-format -msgid "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) ने [{article}]({article_url}) को इन सेटिंग्स के साथ " -"प्रॉटेक्ट किया: {settings}{comment}" - -#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 -#: src/rc_formatters.py:993 -msgid " [cascading]" -msgstr " [कैस्केडिंग]" - -#: src/rc_formatters.py:316 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) ने [{article}]({article_url}) के प्रॉटेक्शन सेटिंग्स को इसमें " -"मॉडिफाइ किया: {settings}{comment}" - -#: src/rc_formatters.py:323 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) ने [{article}]({article_url}) से प्रॉटेक्शन हटा " -"दिया{comment}" - -#: src/rc_formatters.py:327 +#: extensions/base/mediawiki.py:383 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -597,7 +974,233 @@ msgstr[1] "" "[{author}]({author_url}) ने [{article}]({article_url}) पर {amount} रिवीशनों के " "दृश्यता को बदल दिया{comment}" -#: src/rc_formatters.py:340 +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "कोई रेडिरेक्ट नहीं बनाया गया" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "एक रेडिरेक्ट बनाया गया है" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "{redirect}{article} को {target} पर ले जाया गया है" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "बिना रेडिरेक्ट छोड़े" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "रेडिरेक्ट छोड़कर" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) ने {redirect}*{article}* को [{target}]({target_url}) " +"पर {made_a_redirect} मूव किया{comment}" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "{redirect}{article} को रेडिरेक्ट के साथ {title} पर ले जाया गया है" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) ने {redirect}*{article}* को रेडिरेक्ट के साथ [{target}]" +"({target_url}) {made_a_redirect}{comment} पर मूव किया" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "प्रॉटेक्शन सेटिंग्स को {redirect}{article} से {title} पर ले जाया गया" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने प्रॉटेक्शन सेटिंगस को {redirect}*{article}* से " +"[{target}]({target_url}){comment} पर मूव किया" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "{target} को प्रॉटेक्ट किया गया" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr " [कैस्केडिंग]" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) को इन सेटिंग्स के साथ " +"प्रॉटेक्ट किया: {settings}{comment}" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "{article} के प्रॉटेक्शन लेवल को बदला" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) के प्रॉटेक्शन सेटिंग्स को इसमें " +"मॉडिफाइ किया: {settings}{comment}" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "{article} से प्रॉटेक्शन हटा दिया गया" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) से प्रॉटेक्शन हटा " +"दिया{comment}" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "अनंत और इसके परे तक" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:610 +msgid "Blocked from editing the following pages: " +msgstr "इन पृष्ठों को सम्पादित करने से ब्लॉक्ड: " + +#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr " और इन नेमस्पेसों पर: " + +#: extensions/base/mediawiki.py:619 +msgid "Blocked from editing pages on following namespaces: " +msgstr "इन नेमस्पेसों में पृष्ठों को सम्पादित करने से ब्लॉक्ड: " + +#: extensions/base/mediawiki.py:630 +msgid "Partial block details" +msgstr "आधा ब्लॉक विवरण" + +#: extensions/base/mediawiki.py:633 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:635 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "{blocked_user} को ब्लॉक किया {time}" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr " इन पृष्ठों पर: " + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr " इन नेमस्पेसों पर: " + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) ने [{user}]({user_url}) {time}{restriction_desc} को " +"ब्लॉक किया{comment}" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "{blocked_user} के ब्लॉक सेटिंग्स को बदला" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{blocked_user}]({user_url}) के ब्लॉक सेटिंगस को " +"बदला{comment}" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "{blocked_user} को अनब्लॉक किया" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) ने [{blocked_user}]({user_url}) को अनब्लॉक " +"किया{comment}" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "ऐक्शन ऐडमिनिस्ट्रेशन द्वारा छिपाया गया है" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "एक ऐक्शन ऐडमिनिस्ट्रेशन द्वारा छिपाया गया है।" + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "{count} रिवीशन के साथ {article} को इम्पोर्ट किया गया" +msgstr[1] "{count} रिवीशनों के साथ {article} को इम्पोर्ट किया गया" + +#: extensions/base/mediawiki.py:772 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -612,18 +1215,14 @@ msgstr[1] "" "[{author}]({author_url}) ने [{article}]({article_url}) को {count} रिवीशनों के " "साथ ({article_url}) इम्पोर्ट किया{comment}" -#: src/rc_formatters.py:345 +#: extensions/base/mediawiki.py:788 #, python-brace-format -msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) ने [{article}]({article_url}) को रिस्टोर किया{comment}" +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "\"{source}\" से {count} रिवीशन के साथ {article} को इम्पोर्ट किया गया" +msgstr[1] "\"{source}\" से {count} रिवीशनों के साथ {article} को इम्पोर्ट किया गया" -#: src/rc_formatters.py:347 -#, python-brace-format -msgid "[{author}]({author_url}) changed visibility of log events{comment}" -msgstr "[{author}]({author_url}) ने लॉग घटनाओं के दृश्यता को बदल दिया{comment}" - -#: src/rc_formatters.py:359 +#: extensions/base/mediawiki.py:803 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -638,22 +1237,56 @@ msgstr[1] "" "[{author}]({author_url}) ने [{source}]({source_url}) से [{article}]" "({article_url}) को {count} रिवीशनों के साथ ({article_url}) इम्पोर्ट किया{comment}" -#: src/rc_formatters.py:364 +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:836 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "{target} के ग्रुपों को बदला" + +#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +msgid "System" +msgstr "सिस्टम" + +#: extensions/base/mediawiki.py:840 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} को एक नए यूज़रग्रुप में ऑटोप्रमोट किया गया" + +#: extensions/base/mediawiki.py:846 #, python-brace-format msgid "" -"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +"{reason}\n" +"{added}{linebreak}{removed}" msgstr "" -"[{author}]({author_url}) ने अब्यूज़ फिल्टर [संख्या {number}]({filter_url}) को " -"सम्पादित किया" -#: src/rc_formatters.py:368 -#, python-brace-format +#: extensions/base/mediawiki.py:860 +#, fuzzy, python-brace-format msgid "" -"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) {added}{comma} {removed}{comment}" msgstr "" -"[{author}]({author_url}) ने अब्यूज़ फिल्टर [संख्या {number}]({filter_url}) बनाया" +"[{author}]({author_url}) ने [{target}]({target_url}) के लिए ग्रुप {old_groups} से " +"{new_groups} में बदला{comment}" -#: src/rc_formatters.py:372 +#: extensions/base/mediawiki.py:864 +#, fuzzy, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"{comment}" +msgstr "" +"{author} ने [{target}]({target_url}) को {old_groups} से {new_groups} में " +"ऑटोप्रमोट किया{comment}" + +#: extensions/base/mediawiki.py:877 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "{article} के रिवीशन इतिहास को {dest} में मर्ज किया गया" + +#: extensions/base/mediawiki.py:891 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -662,17 +1295,30 @@ msgstr "" "[{author}]({author_url}) ने [{article}]({article_url}) के रिवीशन इतिहास को " "[{dest}]({dest_url}) में मर्ज किया{comment}" -#: src/rc_formatters.py:375 +#: extensions/base/mediawiki.py:905 +msgid "Created account automatically" +msgstr "अपने आप अकाउंट बनाया गया" + +#: extensions/base/mediawiki.py:912 #, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "अकाउंट [{author}]({author_url}) अपने आप बना है" -#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +msgid "Created account" +msgstr "अकाउंट बनाया गया" + +#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 #, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "अकाउंट [{author}]({author_url}) को बनाया गया है" -#: src/rc_formatters.py:380 +#: extensions/base/mediawiki.py:944 +#, python-brace-format +msgid "Created account {article}" +msgstr "अकाउंट {article} बनाया गया" + +#: extensions/base/mediawiki.py:953 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" @@ -681,7 +1327,12 @@ msgstr "" "अकाउंट [{article}]({article_url}) [{author}]({author_url}) द्वारा बनाया गया " "है{comment}" -#: src/rc_formatters.py:383 +#: extensions/base/mediawiki.py:966 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "अकाउंट {article} बनाया गया और पासवर्ड ईमेल के ज़रिये भेजा गया" + +#: extensions/base/mediawiki.py:977 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " @@ -690,7 +1341,16 @@ msgstr "" "अकाउंट [{article}]({article_url}) [{author}]({author_url}) द्वारा बनाया गया है " "और पासवर्ड ईमेल के ज़रिये भेजा गया है{comment}" -#: src/rc_formatters.py:388 +#: extensions/base/mediawiki.py:1009 +msgid "Added an entry to the interwiki table" +msgstr "इंटरविकी टेबल पर एक एंट्री जोड़ा गया" + +#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "उपसर्ग: {prefix}, वेबसाइट: {website} | {desc}" + +#: extensions/base/mediawiki.py:1022 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -699,7 +1359,11 @@ msgstr "" "[{author}]({author_url}) ने {prefix} उपसर्ग के साथ {website} की तरफ इशारा करने " "वाले [इंटरविकी टेबल]({table_url}) में एक एंट्री जोड़ा" -#: src/rc_formatters.py:394 +#: extensions/base/mediawiki.py:1036 +msgid "Edited an entry in interwiki table" +msgstr "इंटरविकी टेबल पर एक एंट्री को सम्पादित किया गया" + +#: extensions/base/mediawiki.py:1049 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -708,15 +1372,35 @@ msgstr "" "[{author}]({author_url}) ने {prefix} उपसर्ग के साथ {website} की तरफ इशारा करने " "वाले [इंटरविकी टेबल]({table_url}) में एक एंट्री को सम्पादित किया" -#: src/rc_formatters.py:400 +#: extensions/base/mediawiki.py:1063 +msgid "Deleted an entry in interwiki table" +msgstr "इंटरविकी टेबल में एक एंट्री को डिलीट किया गया" + +#: extensions/base/mediawiki.py:1064 #, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "उपसर्ग: {prefix} | {desc}" + +#: extensions/base/mediawiki.py:1074 +#, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" msgstr "" "[{author}]({author_url}) ने [इंटरविकी टेबल]({table_url}) पर एक एंट्री को डिलीट " "किया" -#: src/rc_formatters.py:403 +#: extensions/base/mediawiki.py:1091 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "पृष्ठ {article} के कंटेंट मॉडल को बदला गया" + +#: extensions/base/mediawiki.py:1093 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "मॉडल को {old} से {new} में बदला गया: {reason}" + +#: extensions/base/mediawiki.py:1105 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -725,7 +1409,17 @@ msgstr "" "[{author}]({author_url}) ने पृष्ठ [{article}]({article_url}) के कंटेंट मॉडल को " "{old} से {new} में बदला{comment}" -#: src/rc_formatters.py:407 +#: extensions/base/mediawiki.py:1120 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "पृष्ठ {article} को गैर-डिफ़ॉल्ट कंटेंट मॉडल की मदद से बनाया" + +#: extensions/base/mediawiki.py:1122 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "मॉडल {new} से बनाया: {reason}" + +#: extensions/base/mediawiki.py:1133 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " @@ -734,61 +1428,40 @@ msgstr "" "[{author}]({author_url}) ने पृष्ठ [{article}]({article_url}) को गैर-डिफ़ॉल्ट कंटेंट " "मॉडल की मदद से बनाया {new}{comment}" -#: src/rc_formatters.py:410 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" -msgstr "" -"[{author}]({author_url}) [{article}]({article_url}) के स्प्राइट को सम्पादित किया" +#: extensions/base/mediawiki.py:1148 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "टैग \"{tag}\" बनाया गया" -#: src/rc_formatters.py:413 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" -msgstr "" -"[{author}]({author_url}) ने [{article}]({article_url}) के लिए स्प्राइट शीट बनाया" - -#: src/rc_formatters.py:416 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the slice for [{article}]({article_url})" -msgstr "" -"[{author}]({author_url}) ने [{article}]({article_url}) के स्लाइस को सम्पादित किया" - -#: src/rc_formatters.py:421 -#, python-brace-format -msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) ने कीर्गो टेबल \"{table}\" बनाया" - -#: src/rc_formatters.py:423 -#, python-brace-format -msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) ने कार्गो टेबल \"{table}\" को डिलीट किया" - -#: src/rc_formatters.py:428 -#, python-brace-format -msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) ने कार्गो टेबल \"{table}\" को फिर से बनाया" - -#: src/rc_formatters.py:433 -#, python-brace-format -msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) ने कार्गो टेबल \"{table}\" को बदल दिया" - -#: src/rc_formatters.py:436 +#: extensions/base/mediawiki.py:1158 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" बनाया" -#: src/rc_formatters.py:441 +#: extensions/base/mediawiki.py:1180 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "टैग \"{tag}\" को डिलीट किया गया" + +#: extensions/base/mediawiki.py:1182 +#, fuzzy +msgid "Removed from" +msgstr "हटाया गया" + +#: extensions/base/mediawiki.py:1182 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1194 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिलीट किया" -#: src/rc_formatters.py:443 +#: extensions/base/mediawiki.py:1204 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -803,256 +1476,44 @@ msgstr[1] "" "[{author}]({author_url}) ने [{article}]({article_url}) को {count} रिवीशनों के " "साथ ({article_url}) इम्पोर्ट किया{comment}" -#: src/rc_formatters.py:449 +#: extensions/base/mediawiki.py:1221 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "टैग \"{tag}\" को ऐक्टिवेट किया गया" + +#: extensions/base/mediawiki.py:1230 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को ऐक्टिवेट किया" -#: src/rc_formatters.py:452 +#: extensions/base/mediawiki.py:1249 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "टैग \"{tag}\" को डिऐक्टिवेट किया गया" + +#: extensions/base/mediawiki.py:1258 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिऐक्टिवेट किया" -#: src/rc_formatters.py:454 +#: extensions/base/mediawiki.py:1278 #, python-brace-format -msgid "[{author}]({author_url}) changed wiki settings{reason}" -msgstr "[{author}]({author_url}) ने विकी सेटिंग्स को बदला{reason}" +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +"{edits} सम्पादना वाले सदस्य \"{old_name}\" को \"{new_name}\" में रीनेम किया गया" +msgstr[1] "" +"{edits} सम्पादनाओं वाले सदस्य \"{old_name}\" को \"{new_name}\" में रीनेम किया गया" -#: src/rc_formatters.py:456 +#: extensions/base/mediawiki.py:1283 #, python-brace-format -msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* को डिलीट किया{comment}" +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "सदस्य \"{old_name}\" को \"{new_name}\" में रीनेम किया गया" -#: src/rc_formatters.py:459 -#, python-brace-format -msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* के लॉक किया{comment}" - -#: src/rc_formatters.py:462 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) modified namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) ने *{wiki_name}* पर एक नेमस्पेस *{namespace_name}* को " -"मॉडिफाइ किया{comment}" - -#: src/rc_formatters.py:467 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) ने *{wiki_name}* पर नेमस्पेस *{namespace_name}* को " -"डिलीट किया{comment}" - -#: src/rc_formatters.py:473 -#, python-brace-format -msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "" -"[{author}]({author_url}) ने यूज़र ग्रुप *{group_name}* को मॉडिफाइ किया{comment}" - -#: src/rc_formatters.py:477 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* को डिलीट किया{comment}" - -#: src/rc_formatters.py:481 -#, python-brace-format -msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) ने एक विकी *{wiki_name}* को अनलॉक किया{comment}" - -#: src/rc_formatters.py:486 -#, python-brace-format -msgid "[{author}]({author_url}) generated *{file}* dump{comment}" -msgstr "[{author}]({author_url}) ने *{file}* डंप जनरेट किया{comment}" - -#: src/rc_formatters.py:491 -#, python-brace-format -msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" -msgstr "[{author}]({author_url}) *{file}* डंप को डिलीट किया{comment}" - -#: src/rc_formatters.py:502 -#, python-brace-format -msgid "" -"[{author}]({author_url}) marked [{article}]({article_url}) for " -"translation{comment}" -msgstr "" -"[{author}]({author_url}) ने [{article}]({article_url}) को अनुवाद के लिए मार्क " -"किया{comment}" - -#: src/rc_formatters.py:509 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed [{article}]({article_url}) from the " -"translation system{comment}" -msgstr "" -"[{author}]({author_url}) ने अनुवाद सिस्टम से [{article}]({article_url}) को " -"हटाया{comment}" - -#: src/rc_formatters.py:516 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed moving translation pages from *{article}* " -"to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) ने *{article}* से [{target}]({target_url}) पर अनुवाद " -"पृष्ठ को लाना ख़त्म किया{comment}" - -#: src/rc_formatters.py:524 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encountered a problem while moving [{article}]" -"({article_url}) to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) ने [{article}]({article_url}) को [{target}]" -"({target_url}) पर लाते वक्त मुश्किलें पाई{comment}" - -#: src/rc_formatters.py:532 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translatable page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) ने अनुवाद लायक पृष्ठ [{article}]({article_url}) के " -"डिलीशन को पूरा किया{comment}" - -#: src/rc_formatters.py:540 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translatable page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) [{article}]({article_url}) को डिलीट न कर पाए, जो " -"अनुवाद-लायक पृष्ठ [{target}]({target_url}) का है{comment}" - -#: src/rc_formatters.py:548 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translation page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) ने अनुवाद पृष्ठ [{article}]({article_url}) के डिलीशन को " -"पूरा किया{comment}" - -#: src/rc_formatters.py:556 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translation page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) [{article}]({article_url}) को डिलीट न कर पाए, जो " -"अनुवाद पृष्ठ [{target}]({target_url}) का है{comment}" - -#: src/rc_formatters.py:564 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) [{article}]({article_url}) को अनुवाद करने का बढ़ावा " -"दिया{comment}" - -#: src/rc_formatters.py:571 -#, python-brace-format -msgid "" -"[{author}]({author_url}) discouraged translation of [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) ने [{article}]({article_url}) के अनुवाद के बढ़ावे को कम " -"किया{comment}" - -#: src/rc_formatters.py:581 -#, python-brace-format -msgid "" -"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " -"`{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) ने [{article}]({article_url}) के भाषाओं को `{languages}" -"` तक सीमित किया{comment}" - -#: src/rc_formatters.py:587 -#, python-brace-format -msgid "" -"[{author}]({author_url}) set the priority languages for [{article}]" -"({article_url}) to `{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) ने [{article}]({article_url}) के मुख्य भाषाओं को " -"`{languages}` में सेट किया{comment}" - -#: src/rc_formatters.py:593 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed priority languages from [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) ने [{article}]({article_url}) से मुख्य भाषाओं को " -"हटाया{comment}" - -#: src/rc_formatters.py:600 -#, python-brace-format -msgid "" -"[{author}]({author_url}) added translatable page [{article}]({article_url}) " -"to aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) ने अनुवाद-लायक पृष्ठ [{article}]({article_url}) को " -"एग्रीगेट ग्रुप \"{group}\" में डाला{comment}" - -#: src/rc_formatters.py:607 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed translatable page [{article}]" -"({article_url}) from aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) ने अनुवाद-लायक [{article}]({article_url}) को एग्रीगेट " -"ग्रुप \"{group}\" से हटाया{comment}" - -#: src/rc_formatters.py:619 -#, python-brace-format -msgid "" -"[{author}]({author_url}) reviewed translation [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) ने अनुवाद [{article}]({article_url}) को रिव्यु " -"किया{comment}" - -#: src/rc_formatters.py:627 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) ने पृष्ठ [{article}]({article_url}) के `{language}` के " -"स्थिति को `{old_state}` से `{new_state}` में बदला{comment}" - -#: src/rc_formatters.py:634 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) ने पृष्ठ [{article}]({article_url}) के `{language}` " -"अनुवादों को `{new_state}` में बदला{comment}" - -#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 -#: src/rc_formatters.py:1241 -msgid "(default)" -msgstr "(डिफ़ॉल्ट)" - -#: src/rc_formatters.py:647 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the language of [{article}]({article_url}) " -"from {old_lang} to {new_lang}{comment}" -msgstr "" -"[{author}]({author_url}) [{article}]({article_url}) के भाषा को {old_lang} से " -"{new_lang} में बदला{comment}" - -#: src/rc_formatters.py:656 +#: extensions/base/mediawiki.py:1298 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " @@ -1067,7 +1528,7 @@ msgstr[1] "" "[{author}]({author_url}) ने {edits} सम्पादनाओं वाले सदस्य *{old_name}* को " "[{new_name}]({link}) में रीनेम किया{comment}" -#: src/rc_formatters.py:661 +#: extensions/base/mediawiki.py:1306 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" @@ -1076,626 +1537,224 @@ msgstr "" "[{author}]({author_url}) ने सदस्य *{old_name}* को [{new_name}]({link}) में रीनेम " "किया{comment}" -#: src/rc_formatters.py:665 -msgid "An action has been hidden by administration." -msgstr "एक ऐक्शन ऐडमिनिस्ट्रेशन द्वारा छिपाया गया है।" - -#: src/rc_formatters.py:681 -#, python-brace-format -msgid "{user} triggered \"{abuse_filter}\"" -msgstr "{user} ने \"{abuse_filter}\" को ट्रिगर किया" - -#: src/rc_formatters.py:682 -msgid "Performed" -msgstr "ऐक्शन" - -#: src/rc_formatters.py:683 -msgid "Action taken" -msgstr "लिया गया ऐक्शन" - -#: src/rc_formatters.py:684 -msgid "Title" -msgstr "शीर्षक" - -#: src/rc_formatters.py:693 src/rc_formatters.py:980 -msgid "No description provided" -msgstr "कोई विवरण नहीं दिया गया" - -#: src/rc_formatters.py:717 -msgid "(N!) " -msgstr "(न!) " - -#: src/rc_formatters.py:718 -msgid "m" -msgstr "छो" - -#: src/rc_formatters.py:718 -msgid "b" -msgstr "बॉ" - -#: src/rc_formatters.py:735 src/rc_formatters.py:740 -msgid "__Only whitespace__" -msgstr "__सिर्फ वाइटस्पेस__" - -#: src/rc_formatters.py:745 -msgid "Removed" -msgstr "हटाया गया" - -#: src/rc_formatters.py:747 -msgid "Added" -msgstr "जोड़ा" - -#: src/rc_formatters.py:781 src/rc_formatters.py:820 -msgid "Options" -msgstr "विकल्प" - -#: src/rc_formatters.py:781 -#, python-brace-format -msgid "([preview]({link}) | [undo]({undolink}))" -msgstr "([पूर्वावलोकन]({link}) | [पूर्ववत करें]({undolink}))" - -#: src/rc_formatters.py:786 -#, python-brace-format -msgid "Uploaded a new version of {name}" -msgstr "{name} के एक नए संसकरण को अपलोड किया" - -#: src/rc_formatters.py:788 -#, python-brace-format -msgid "Reverted a version of {name}" -msgstr "{name} के एक संसकरण को पूर्ववत किया" - -#: src/rc_formatters.py:790 -#, python-brace-format -msgid "Uploaded {name}" -msgstr "{name} को अपलोड किया" - -#: src/rc_formatters.py:806 -msgid "**No license!**" -msgstr "**कोई लाइसेंस नहीं है!**" - -#: src/rc_formatters.py:818 -msgid "" -"\n" -"License: {}" -msgstr "" -"\n" -"लाइसेंस: {}" - -#: src/rc_formatters.py:820 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "([पूर्वावलोकन]({link}))" - -#: src/rc_formatters.py:825 -#, python-brace-format -msgid "Deleted page {article}" -msgstr "पृष्ठ {article} को डिलीट किया" - -#: src/rc_formatters.py:830 -#, python-brace-format -msgid "Deleted redirect {article} by overwriting" -msgstr "ओवर्राइट करके रेडिरेक्ट {article} को डिलीट किया" - -#: src/rc_formatters.py:836 -msgid "No redirect has been made" -msgstr "कोई रेडिरेक्ट नहीं बनाया गया" - -#: src/rc_formatters.py:837 -msgid "A redirect has been made" -msgstr "एक रेडिरेक्ट बनाया गया है" - -#: src/rc_formatters.py:838 -#, python-brace-format -msgid "Moved {redirect}{article} to {target}" -msgstr "{redirect}{article} को {target} पर ले जाया गया है" - -#: src/rc_formatters.py:841 -#, python-brace-format -msgid "Moved {redirect}{article} to {title} over redirect" -msgstr "{redirect}{article} को रेडिरेक्ट के साथ {title} पर ले जाया गया है" - -#: src/rc_formatters.py:845 -#, python-brace-format -msgid "Moved protection settings from {redirect}{article} to {title}" -msgstr "प्रॉटेक्शन सेटिंग्स को {redirect}{article} से {title} पर ले जाया गया" - -#: src/rc_formatters.py:869 -msgid "unknown expiry time" -msgstr "अनजान समय सीमा" - -#: src/rc_formatters.py:874 -msgid "Blocked from editing the following pages: " -msgstr "इन पृष्ठों को सम्पादित करने से ब्लॉक्ड: " - -#: src/rc_formatters.py:883 -msgid "Blocked from editing pages on following namespaces: " -msgstr "इन नेमस्पेसों में पृष्ठों को सम्पादित करने से ब्लॉक्ड: " - -#: src/rc_formatters.py:894 -msgid "Partial block details" -msgstr "आधा ब्लॉक विवरण" - -#: src/rc_formatters.py:895 -#, python-brace-format -msgid "Blocked {blocked_user} {time}" -msgstr "{blocked_user} को ब्लॉक किया {time}" - -#: src/rc_formatters.py:899 -#, python-brace-format -msgid "Changed block settings for {blocked_user}" -msgstr "{blocked_user} के ब्लॉक सेटिंग्स को बदला" - -#: src/rc_formatters.py:903 -#, python-brace-format -msgid "Unblocked {blocked_user}" -msgstr "{blocked_user} को अनब्लॉक किया" - -#: src/rc_formatters.py:910 -#, python-brace-format -msgid "Left a comment on {target}'s profile" -msgstr "{target} के प्रॉफाइल पर एक कमेंट छोड़ा" - -#: src/rc_formatters.py:912 -msgid "Left a comment on their own profile" -msgstr "अपने प्रॉफाइल पर एक कमेंट छोड़ा" - -#: src/rc_formatters.py:919 -#, python-brace-format -msgid "Replied to a comment on {target}'s profile" -msgstr "{target} के प्रॉफाइल के एक कमेंट पर जवाब दिया" - -#: src/rc_formatters.py:921 -msgid "Replied to a comment on their own profile" -msgstr "अपने प्रॉफाइल क के एक कमेंट पर जवाब दिया" - -#: src/rc_formatters.py:928 -#, python-brace-format -msgid "Edited a comment on {target}'s profile" -msgstr "{target} के प्रॉफाइल के एक कमेंट को सम्पादित किया" - -#: src/rc_formatters.py:930 -msgid "Edited a comment on their own profile" -msgstr "अपने प्रॉफाइल के एक कमेंट को सम्पादित किया" - -#: src/rc_formatters.py:935 -#, python-brace-format -msgid "Edited {target}'s profile" -msgstr "{target} के प्रॉफाइल को सम्पादित किया" - -#: src/rc_formatters.py:937 -msgid "Edited their own profile" -msgstr "अपने प्रॉफाइल को सम्पादित किया" - -#: src/rc_formatters.py:939 -#, python-brace-format -msgid "Cleared the {field} field" -msgstr "{field} फील्ड को क्लियर किया" - -#: src/rc_formatters.py:941 -#, python-brace-format -msgid "{field} field changed to: {desc}" -msgstr "{field} फील्ड को बदला गया: {desc} में" - -#: src/rc_formatters.py:946 -#, python-brace-format -msgid "Purged a comment on {target}'s profile" -msgstr "{target} के प्रॉफाइल के एक कमेंट को पर्ज किया" - -#: src/rc_formatters.py:948 -msgid "Purged a comment on their own profile" -msgstr "अपने प्रॉफाइल के एक कमेंट को पर्ज किया" - -#: src/rc_formatters.py:956 -#, python-brace-format -msgid "Deleted a comment on {target}'s profile" -msgstr "{target} के प्रॉफाइल के एक कमेंट को सम्पादित किया" - -#: src/rc_formatters.py:958 -msgid "Deleted a comment on their own profile" -msgstr "अपने प्रॉफाइल के एक कमेंट को डिलीट किया" - -#: src/rc_formatters.py:962 -#, python-brace-format -msgid "Changed group membership for {target}" -msgstr "{target} के ग्रुपों को बदला" - -#: src/rc_formatters.py:966 -#, python-brace-format -msgid "{target} got autopromoted to a new usergroup" -msgstr "{target} को एक नए यूज़रग्रुप में ऑटोप्रमोट किया गया" - -#: src/rc_formatters.py:981 -#, python-brace-format -msgid "Groups changed from {old_groups} to {new_groups}{reason}" -msgstr "ग्रुपों को {old_groups} से {new_groups} में बदला गया{reason}" - -#: src/rc_formatters.py:985 -#, python-brace-format -msgid "Protected {target}" -msgstr "{target} को प्रॉटेक्ट किया गया" - -#: src/rc_formatters.py:991 -#, python-brace-format -msgid "Changed protection level for {article}" -msgstr "{article} के प्रॉटेक्शन लेवल को बदला" - -#: src/rc_formatters.py:997 -#, python-brace-format -msgid "Removed protection from {article}" -msgstr "{article} से प्रॉटेक्शन हटा दिया गया" - -#: src/rc_formatters.py:1001 -#, python-brace-format -msgid "Changed visibility of revision on page {article} " -msgid_plural "Changed visibility of {amount} revisions on page {article} " -msgstr[0] "पृष्ठ {article} पर रिवीशन के दृश्यता को बदला " -msgstr[1] "पृष्ठ {article} पर {amount} रिवीशनों के दृश्यता को बदला " - -#: src/rc_formatters.py:1013 -#, python-brace-format -msgid "Imported {article} with {count} revision" -msgid_plural "Imported {article} with {count} revisions" -msgstr[0] "{count} रिवीशन के साथ {article} को इम्पोर्ट किया गया" -msgstr[1] "{count} रिवीशनों के साथ {article} को इम्पोर्ट किया गया" - -#: src/rc_formatters.py:1018 -#, python-brace-format -msgid "Restored {article}" -msgstr "{article} को रिस्टोर किया गया" - -#: src/rc_formatters.py:1021 -msgid "Changed visibility of log events" -msgstr "लॉग घटनाओं के दृश्यता को बदला गया" - -#: src/rc_formatters.py:1031 -#, python-brace-format -msgid "Imported {article} with {count} revision from \"{source}\"" -msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "\"{source}\" से {count} रिवीशन के साथ {article} को इम्पोर्ट किया गया" -msgstr[1] "\"{source}\" से {count} रिवीशनों के साथ {article} को इम्पोर्ट किया गया" - -#: src/rc_formatters.py:1036 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "अब्यूज़ फिल्टर संख्यी {number} को बदला गया" - -#: src/rc_formatters.py:1039 -#, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "अब्यूज़ फिल्टर संख्या {number} को बनाया गया" - -#: src/rc_formatters.py:1042 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "{article} के रिवीशन इतिहास को {dest} में मर्ज किया गया" - -#: src/rc_formatters.py:1046 -msgid "Created account automatically" -msgstr "अपने आप अकाउंट बनाया गया" - -#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 -msgid "Created account" -msgstr "अकाउंट बनाया गया" - -#: src/rc_formatters.py:1052 -#, python-brace-format -msgid "Created account {article}" -msgstr "अकाउंट {article} बनाया गया" - -#: src/rc_formatters.py:1055 -#, python-brace-format -msgid "Created account {article} and password was sent by email" -msgstr "अकाउंट {article} बनाया गया और पासवर्ड ईमेल के ज़रिये भेजा गया" - -#: src/rc_formatters.py:1061 -msgid "Added an entry to the interwiki table" -msgstr "इंटरविकी टेबल पर एक एंट्री जोड़ा गया" - -#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "उपसर्ग: {prefix}, वेबसाइट: {website} | {desc}" - -#: src/rc_formatters.py:1067 -msgid "Edited an entry in interwiki table" -msgstr "इंटरविकी टेबल पर एक एंट्री को सम्पादित किया गया" - -#: src/rc_formatters.py:1073 -msgid "Deleted an entry in interwiki table" -msgstr "इंटरविकी टेबल में एक एंट्री को डिलीट किया गया" - -#: src/rc_formatters.py:1074 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "उपसर्ग: {prefix} | {desc}" - -#: src/rc_formatters.py:1077 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "पृष्ठ {article} के कंटेंट मॉडल को बदला गया" - -#: src/rc_formatters.py:1078 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "मॉडल को {old} से {new} में बदला गया: {reason}" - -#: src/rc_formatters.py:1083 -#, python-brace-format -msgid "Created the page {article} using a non-default content model" -msgstr "पृष्ठ {article} को गैर-डिफ़ॉल्ट कंटेंट मॉडल की मदद से बनाया" - -#: src/rc_formatters.py:1084 -#, python-brace-format -msgid "Created with model {new}: {reason}" -msgstr "मॉडल {new} से बनाया: {reason}" - -#: src/rc_formatters.py:1087 +#: extensions/base/sprite.py:37 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "{article} के स्प्राइट को सम्पादित किया गया" -#: src/rc_formatters.py:1090 +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) [{article}]({article_url}) के स्प्राइट को सम्पादित किया" + +#: extensions/base/sprite.py:60 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "{article} के लिए स्प्राइट शीट बनाया गया" -#: src/rc_formatters.py:1093 +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) ने [{article}]({article_url}) के लिए स्प्राइट शीट बनाया" + +#: extensions/base/sprite.py:79 #, python-brace-format msgid "Edited the slice for {article}" msgstr "{article} के स्लाइस को सम्पादित किया गया" -#: src/rc_formatters.py:1099 -#, python-brace-format -msgid "Created the Cargo table \"{table}\"" -msgstr "कार्गो टेबल \"{table}\" बनाया गया" - -#: src/rc_formatters.py:1103 -#, python-brace-format -msgid "Deleted the Cargo table \"{table}\"" -msgstr "कार्गो टेबल \"{table}\" को डिलीट किया गया" - -#: src/rc_formatters.py:1110 -#, python-brace-format -msgid "Recreated the Cargo table \"{table}\"" -msgstr "कार्गो टेबल \"{table}\" को फिर से बनाया गया" - -#: src/rc_formatters.py:1117 -#, python-brace-format -msgid "Replaced the Cargo table \"{table}\"" -msgstr "कोर्गो टेबल \"{table}\" को बदला गया" - -#: src/rc_formatters.py:1121 -#, fuzzy, python-brace-format -msgid "Created the tag \"{tag}\"" -msgstr "टैग \"{tag}\" बनाया गया" - -#: src/rc_formatters.py:1125 -#, fuzzy, python-brace-format -msgid "Deleted the tag \"{tag}\"" -msgstr "टैग \"{tag}\" को डिलीट किया गया" - -#: src/rc_formatters.py:1127 -#, fuzzy -msgid "Removed from" -msgstr "हटाया गया" - -#: src/rc_formatters.py:1127 -msgid "{} revision or log entry" -msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1131 -#, fuzzy, python-brace-format -msgid "Activated the tag \"{tag}\"" -msgstr "टैग \"{tag}\" को ऐक्टिवेट किया गया" - -#: src/rc_formatters.py:1134 -#, fuzzy, python-brace-format -msgid "Deactivated the tag \"{tag}\"" -msgstr "टैग \"{tag}\" को डिऐक्टिवेट किया गया" - -#: src/rc_formatters.py:1137 -msgid "Changed wiki settings" -msgstr "विकी सेटिंग्स को बदला गया" - -#: src/rc_formatters.py:1141 -#, python-brace-format -msgid "Deleted a \"{wiki}\" wiki" -msgstr "\"{wiki}\" विकी को डिलीट किया गया" - -#: src/rc_formatters.py:1144 -#, python-brace-format -msgid "Locked a \"{wiki}\" wiki" -msgstr "\"{wiki}\" विकी को लॉक किया गया" - -#: src/rc_formatters.py:1147 -#, fuzzy, python-brace-format -msgid "Modified \"{namespace_name}\" namespace" -msgstr "\"{namespace_name}\" नेमस्पेस को मॉडिफाइ किया गया" - -#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 -msgid "Wiki" -msgstr "विकी" - -#: src/rc_formatters.py:1151 -#, python-brace-format -msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "\"{namespace_name}\" नेमस्पेस को डिलीट किया गया" - -#: src/rc_formatters.py:1157 -#, python-brace-format -msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "\"{usergroup_name}\" यूज़रग्रुप को मॉडिफाइ किया गया" - -#: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format -msgid "Undeleted a \"{wiki}\" wiki" -msgstr "\"{wiki}\" विकी को डिलीट किया गया" - -#: src/rc_formatters.py:1163 -#, python-brace-format -msgid "Unlocked a \"{wiki}\" wiki" -msgstr "\"{wiki}\" विकी को अनलॉक किया गया" - -#: src/rc_formatters.py:1166 -#, python-brace-format -msgid "Generated {file} dump" -msgstr "{file} डंप जनरेट किया" - -#: src/rc_formatters.py:1169 -#, python-brace-format -msgid "Deleted {file} dump" -msgstr "{file} डंप को डिलीट किया" - -#: src/rc_formatters.py:1177 -#, python-brace-format -msgid "Marked \"{article}\" for translation" -msgstr "\"{article}\" को अनुवाद के लिए मार्क किया गया" - -#: src/rc_formatters.py:1180 -#, python-brace-format -msgid "Removed \"{article}\" from the translation system" -msgstr "\"{article}\" को अनुवाद सिस्टम से हटा दिया गया" - -#: src/rc_formatters.py:1183 -#, python-brace-format -msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "\"{article}\" से \"{target}\" तक अनुवाद पृष्ठों को लाना पूरा हुआ" - -#: src/rc_formatters.py:1186 -#, python-brace-format -msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "\"{article}\" को \"{target}\" पर ले जाते वक्त एक त्रुटि आई" - -#: src/rc_formatters.py:1189 -#, python-brace-format -msgid "Completed deletion of translatable page \"{article}\"" -msgstr "अनुवाद-लायक पृष्ठ \"{article}\" के डिलीशन पृष्ठ को पूरा किया" - -#: src/rc_formatters.py:1192 +#: extensions/base/sprite.py:86 #, python-brace-format msgid "" -"Failed to delete \"{article}\" which belongs to translatable page " -"\"{target}\"" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" -"\"{article}\" को डिलीट न किया जा सका जो अनुवाद-लायक पृष्ठ \"{target}\" का है" +"[{author}]({author_url}) ने [{article}]({article_url}) के स्लाइस को सम्पादित किया" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "Unknown event `{event}` by [{author}]({author_url}), report it on the " +#~ "[support server](<{support}>)." +#~ msgstr "" +#~ "#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" +#~ "[{author}]({author_url}) द्वारा अनजान घटना `{event}`, [सहायता सर्वर]" +#~ "(<{support}>) पर रिपोर्ट करें।\n" +#~ "#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +#~ "[{author}]({author_url}) द्वारा अनजान घटना `{event}`, इसे [सहायता सर्वर]" +#~ "(<{support}>) पर रिपोर्ट करें।" -#: src/rc_formatters.py:1195 #, python-brace-format -msgid "Completed deletion of translation page \"{article}\"" -msgstr "अनुवाद पृष्ठ {article} के डिलीशन को पूरा किया" +#~ msgid "Unknown event `{event}`" +#~ msgstr "अनजान घटना `{event}`" + +#~ msgid "Report this on the support server" +#~ msgstr "इसे सहायता सर्वर पर रिपोर्ट करें" -#: src/rc_formatters.py:1198 #, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" -msgstr "\"{article}\" को डिलीट न किया जा सका जो अनुवाद पृष्ठ \"{target}\" का है" +#~ msgid "for {num} {translated_length}" +#~ msgstr "{num} {translated_length} के लिए" + +#~ msgid "until {}" +#~ msgstr "{} के लिए" -#: src/rc_formatters.py:1201 #, python-brace-format -msgid "Encouraged translation of \"{article}\"" -msgstr "{article} के अनुवाद को बढ़ावा दिया गया" +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) ने {target} के प्रॉफाइल पर एक [कमेंट]({comment}) छोड़ा" -#: src/rc_formatters.py:1204 #, python-brace-format -msgid "Discouraged translation of \"{article}\"" -msgstr "\"{article}\" के अनुवाद के बढ़ावे को कम किया" +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on their own profile" +#~ msgstr "[{author}]({author_url}) ने अपने प्रॉफाइल पर एक [कमेंट]({comment}) छोड़ा" -#: src/rc_formatters.py:1210 #, python-brace-format -msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "\"{article}\" के भाषाओं को `{languages}` तक सीमित किया गया" +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) पर " +#~ "जवाब दिया" -#: src/rc_formatters.py:1212 #, python-brace-format -msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "\"{article}\" के मुख्य भाषाओं को `{languages}` में सेट किया गया" +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) पर जवाब दिया" -#: src/rc_formatters.py:1214 #, python-brace-format -msgid "Removed priority languages from \"{article}\"" -msgstr "\"{article}\" से मुख्य भाषाओं को हटा दिया गया" +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) पर " +#~ "जवाब दिया" -#: src/rc_formatters.py:1217 #, python-brace-format -msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" -msgstr "अनुवाद-लायक पृष्ठ \"{article}\" को एग्रीगेट ग्रुप \"{group}\" में डाला गया" +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) को सम्पादित " +#~ "किया" -#: src/rc_formatters.py:1220 #, python-brace-format -msgid "" -"Removed translatable page \"{article}\" from aggregate group \"{group}\"" -msgstr "अनुवाद-लायक पृष्ठ \"{article}\" को एग्रीगेट ग्रुप \"{group}\" से हटा दिया गया" +#~ msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +#~ msgstr "[{author}]({author_url}) ने {target} के प्रॉफाइल के एक कमेंट को पर्ज किया" -#: src/rc_formatters.py:1227 #, python-brace-format -msgid "Reviewed translation \"{article}\"" -msgstr "अनुवाद \"{article}\" को रिव्यु किया गया" +#~ msgid "[{author}]({author_url}) purged a comment on their own profile" +#~ msgstr "[{author}]({author_url}) ने अपने प्रॉफाइल के एक कमेंट को पर्ज किया" -#: src/rc_formatters.py:1230 #, python-brace-format -msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "\"{article}\" `{language}` अनुवादों के स्थिति को बदला गया" +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) को " +#~ "डिलीट किया" -#: src/rc_formatters.py:1232 -msgid "Old state" -msgstr "पुरानी स्थिति" - -#: src/rc_formatters.py:1233 -msgid "New state" -msgstr "नई स्थिति" - -#: src/rc_formatters.py:1242 #, python-brace-format -msgid "Changed the language of \"{article}\"" -msgstr "\"{article}\" के भाषा को बदला" +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) को डिलीट किया" -#: src/rc_formatters.py:1243 -msgid "Old language" -msgstr "पुरानी भाषा" - -#: src/rc_formatters.py:1244 -msgid "New language" -msgstr "नई भाषा" - -#: src/rc_formatters.py:1248 #, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -"{edits} सम्पादना वाले सदस्य \"{old_name}\" को \"{new_name}\" में रीनेम किया गया" -msgstr[1] "" -"{edits} सम्पादनाओं वाले सदस्य \"{old_name}\" को \"{new_name}\" में रीनेम किया गया" +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) ने [{target}]({target_url}) के प्रॉफाइल पर {field} " +#~ "को सम्पादित किया। *({desc})*" -#: src/rc_formatters.py:1250 #, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "सदस्य \"{old_name}\" को \"{new_name}\" में रीनेम किया गया" +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) ने [अपने]({target_url}) प्रॉफाइल पर {field} को " +#~ "सम्पादित किया। *({desc})*" -#: src/rc_formatters.py:1254 -msgid "Action has been hidden by administration" -msgstr "ऐक्शन ऐडमिनिस्ट्रेशन द्वारा छिपाया गया है" +#~ msgid "none" +#~ msgstr "कुछ नहीं" -#: src/rc_formatters.py:1288 -msgid "**Added**: " -msgstr "**जोड़ा**: " +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) completed deletion of translatable page " +#~ "[{article}]({article_url}){comment}" +#~ msgstr "" +#~ "[{author}]({author_url}) ने अनुवाद लायक पृष्ठ [{article}]({article_url}) के " +#~ "डिलीशन को पूरा किया{comment}" -#: src/rc_formatters.py:1288 -msgid " and {} more\n" -msgstr " और {}\n" +#~ msgid "No description provided" +#~ msgstr "कोई विवरण नहीं दिया गया" -#: src/rc_formatters.py:1289 -msgid "**Removed**: " -msgstr "**हटाया**: " +#~ msgid "unknown expiry time" +#~ msgstr "अनजान समय सीमा" -#: src/rc_formatters.py:1289 -msgid " and {} more" -msgstr " और {}" +#, python-brace-format +#~ msgid "Left a comment on {target}'s profile" +#~ msgstr "{target} के प्रॉफाइल पर एक कमेंट छोड़ा" -#: src/rc_formatters.py:1290 -msgid "Changed categories" -msgstr "श्रेणियों को बदला गया" +#~ msgid "Left a comment on their own profile" +#~ msgstr "अपने प्रॉफाइल पर एक कमेंट छोड़ा" + +#, python-brace-format +#~ msgid "Replied to a comment on {target}'s profile" +#~ msgstr "{target} के प्रॉफाइल के एक कमेंट पर जवाब दिया" + +#~ msgid "Replied to a comment on their own profile" +#~ msgstr "अपने प्रॉफाइल क के एक कमेंट पर जवाब दिया" + +#, python-brace-format +#~ msgid "Edited a comment on {target}'s profile" +#~ msgstr "{target} के प्रॉफाइल के एक कमेंट को सम्पादित किया" + +#~ msgid "Edited a comment on their own profile" +#~ msgstr "अपने प्रॉफाइल के एक कमेंट को सम्पादित किया" + +#, python-brace-format +#~ msgid "Edited {target}'s profile" +#~ msgstr "{target} के प्रॉफाइल को सम्पादित किया" + +#~ msgid "Edited their own profile" +#~ msgstr "अपने प्रॉफाइल को सम्पादित किया" + +#, python-brace-format +#~ msgid "Cleared the {field} field" +#~ msgstr "{field} फील्ड को क्लियर किया" + +#, python-brace-format +#~ msgid "{field} field changed to: {desc}" +#~ msgstr "{field} फील्ड को बदला गया: {desc} में" + +#, python-brace-format +#~ msgid "Purged a comment on {target}'s profile" +#~ msgstr "{target} के प्रॉफाइल के एक कमेंट को पर्ज किया" + +#~ msgid "Purged a comment on their own profile" +#~ msgstr "अपने प्रॉफाइल के एक कमेंट को पर्ज किया" + +#, python-brace-format +#~ msgid "Deleted a comment on {target}'s profile" +#~ msgstr "{target} के प्रॉफाइल के एक कमेंट को सम्पादित किया" + +#~ msgid "Deleted a comment on their own profile" +#~ msgstr "अपने प्रॉफाइल के एक कमेंट को डिलीट किया" + +#, python-brace-format +#~ msgid "Groups changed from {old_groups} to {new_groups}{reason}" +#~ msgstr "ग्रुपों को {old_groups} से {new_groups} में बदला गया{reason}" + +#, python-brace-format +#~ msgid "Completed deletion of translatable page \"{article}\"" +#~ msgstr "अनुवाद-लायक पृष्ठ \"{article}\" के डिलीशन पृष्ठ को पूरा किया" #, python-brace-format #~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" diff --git a/locale/hi/LC_MESSAGES/misc.po b/locale/hi/LC_MESSAGES/misc.po index 687a64a..5d9242c 100644 --- a/locale/hi/LC_MESSAGES/misc.po +++ b/locale/hi/LC_MESSAGES/misc.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-29 00:05+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-11-25 10:16+0000\n" "Last-Translator: Creeper \n" "Language-Team: Hindi \n" @@ -18,59 +18,59 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.2.1\n" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Location" msgstr "जगह" -#: src/misc.py:45 +#: src/misc.py:44 msgid "About me" msgstr "मेरे बारे में" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Google link" msgstr "गूगल लिंक" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Facebook link" msgstr "फेसबुक लिंक" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitter link" msgstr "ट्विटर लिंक" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Reddit link" msgstr "रेड्डिट लिंक" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitch link" msgstr "ट्विच लिंक" -#: src/misc.py:45 +#: src/misc.py:44 msgid "PSN link" msgstr "PSN लिंक" -#: src/misc.py:45 +#: src/misc.py:44 msgid "VK link" msgstr "VK लिंक" -#: src/misc.py:45 +#: src/misc.py:44 msgid "XBL link" msgstr "XBL लिंक" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Steam link" msgstr "स्टीम लिंक" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Discord handle" msgstr "डिस्कॉर्ड अकाउंट" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Battle.net handle" msgstr "Battle.net अकाउंट" -#: src/misc.py:119 +#: src/misc.py:138 msgid "" "\n" "__And more__" @@ -78,10 +78,10 @@ msgstr "" "\n" "__और काफी कुछ__" -#: src/misc.py:276 +#: src/misc.py:322 msgid "Unknown" msgstr "अनजान" -#: src/misc.py:278 +#: src/misc.py:324 msgid "unknown" msgstr "अनजान" diff --git a/locale/hi/LC_MESSAGES/rcgcdw.po b/locale/hi/LC_MESSAGES/rcgcdw.po index 170dfa7..9781cf3 100644 --- a/locale/hi/LC_MESSAGES/rcgcdw.po +++ b/locale/hi/LC_MESSAGES/rcgcdw.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-12-06 14:17+0000\n" "Last-Translator: Creeper \n" "Language-Team: Hindi 1;\n" "X-Generator: Weblate 4.2.1\n" -#: src/rcgcdw.py:115 src/rcgcdw.py:117 src/rcgcdw.py:119 src/rcgcdw.py:121 -#: src/rcgcdw.py:123 src/rcgcdw.py:125 src/rcgcdw.py:127 +#: src/rcgcdw.py:116 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "{value} (औसत {avg})" -#: src/rcgcdw.py:147 +#: src/rcgcdw.py:135 msgid "Daily overview" msgstr "दैनिक अवलोकन" -#: src/rcgcdw.py:154 +#: src/rcgcdw.py:142 msgid "No activity" msgstr "कोई ऐक्टिविटी नहीं थी" -#: src/rcgcdw.py:178 +#: src/rcgcdw.py:166 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} एक्शन)" msgstr[1] " ({} एक्शन)" -#: src/rcgcdw.py:180 +#: src/rcgcdw.py:168 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} सम्पादना)" msgstr[1] " ({} सम्पादनाएँ)" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:173 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} एक्शन)" msgstr[1] " UTC ({} एक्शन)" -#: src/rcgcdw.py:187 src/rcgcdw.py:188 src/rcgcdw.py:192 +#: src/rcgcdw.py:175 src/rcgcdw.py:178 msgid "But nobody came" msgstr "पर कोई नहीं आया" -#: src/rcgcdw.py:195 +#: src/rcgcdw.py:182 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "सबसे सक्रीय सदस्य" msgstr[1] "सबसे सक्रीय सदस्य" -#: src/rcgcdw.py:196 +#: src/rcgcdw.py:183 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "सबसे ज़्यादा सम्पादित किया गया आर्टिकल" msgstr[1] "सबसे ज़्यादा सम्पादित किए गए आर्टिकल" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:184 msgid "Edits made" msgstr "दिए गए सम्पादनाएँ" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:184 msgid "New files" msgstr "नए चित्र" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:185 msgid "Admin actions" msgstr "एडमिन एक्शन" -#: src/rcgcdw.py:198 +#: src/rcgcdw.py:185 msgid "Bytes changed" msgstr "बदले गए बाइट" -#: src/rcgcdw.py:198 +#: src/rcgcdw.py:186 msgid "New articles" msgstr "नए आर्टिकल" -#: src/rcgcdw.py:199 +#: src/rcgcdw.py:186 msgid "Unique contributors" msgstr "विशेष सदस्य" -#: src/rcgcdw.py:200 +#: src/rcgcdw.py:187 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "सबसे सक्रीय घंटा" msgstr[1] "सबसे सक्रीय घंटे" -#: src/rcgcdw.py:201 +#: src/rcgcdw.py:188 msgid "Day score" msgstr "दिन का स्कोर" -#: src/rcgcdw.py:243 -msgid "director" -msgstr "निर्देशक" +#: src/rcgcdw.py:214 +msgid "~~hidden~~" +msgstr "" -#: src/rcgcdw.py:243 -msgid "bot" -msgstr "बॉट" +#: src/rcgcdw.py:216 +msgid "No description provided" +msgstr "कोई विवरण नहीं दिया गया" -#: src/rcgcdw.py:243 -msgid "editor" -msgstr "सम्पादक" +#: src/rcgcdw.py:219 +msgid "hidden" +msgstr "" -#: src/rcgcdw.py:243 -msgid "directors" -msgstr "निर्देशक" +#~ msgid "director" +#~ msgstr "निर्देशक" -#: src/rcgcdw.py:243 -msgid "sysop" -msgstr "साइसॉप" +#~ msgid "bot" +#~ msgstr "बॉट" -#: src/rcgcdw.py:243 -msgid "bureaucrat" -msgstr "ब्यूरोक्रैट" +#~ msgid "editor" +#~ msgstr "सम्पादक" -#: src/rcgcdw.py:243 -msgid "reviewer" -msgstr "रिव्युअर" +#~ msgid "directors" +#~ msgstr "निर्देशक" -#: src/rcgcdw.py:244 -msgid "autoreview" -msgstr "ऑटोरिव्यु" +#~ msgid "sysop" +#~ msgstr "साइसॉप" -#: src/rcgcdw.py:244 -msgid "autopatrol" -msgstr "ऑटोपैट्रॉल" +#~ msgid "bureaucrat" +#~ msgstr "ब्यूरोक्रैट" -#: src/rcgcdw.py:244 -msgid "wiki_guardian" -msgstr "विकी_संरक्षक" +#~ msgid "reviewer" +#~ msgstr "रिव्युअर" -#: src/rcgcdw.py:244 -msgid "second" -msgid_plural "seconds" -msgstr[0] "सेकंड" -msgstr[1] "सेकंड" +#~ msgid "autoreview" +#~ msgstr "ऑटोरिव्यु" -#: src/rcgcdw.py:244 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "मिनट" -msgstr[1] "मिनट" +#~ msgid "autopatrol" +#~ msgstr "ऑटोपैट्रॉल" -#: src/rcgcdw.py:244 -msgid "hour" -msgid_plural "hours" -msgstr[0] "घंटा" -msgstr[1] "घंटे" +#~ msgid "wiki_guardian" +#~ msgstr "विकी_संरक्षक" -#: src/rcgcdw.py:244 -msgid "day" -msgid_plural "days" -msgstr[0] "दिन" -msgstr[1] "दिन" +#~ msgid "second" +#~ msgid_plural "seconds" +#~ msgstr[0] "सेकंड" +#~ msgstr[1] "सेकंड" -#: src/rcgcdw.py:244 -msgid "week" -msgid_plural "weeks" -msgstr[0] "हफ्ता" -msgstr[1] "हफ्तें" +#~ msgid "minute" +#~ msgid_plural "minutes" +#~ msgstr[0] "मिनट" +#~ msgstr[1] "मिनट" -#: src/rcgcdw.py:244 -msgid "month" -msgid_plural "months" -msgstr[0] "महीना" -msgstr[1] "महीनें" +#~ msgid "hour" +#~ msgid_plural "hours" +#~ msgstr[0] "घंटा" +#~ msgstr[1] "घंटे" -#: src/rcgcdw.py:244 -msgid "year" -msgid_plural "years" -msgstr[0] "साल" -msgstr[1] "साल" +#~ msgid "day" +#~ msgid_plural "days" +#~ msgstr[0] "दिन" +#~ msgstr[1] "दिन" -#: src/rcgcdw.py:244 -msgid "millennium" -msgid_plural "millennia" -msgstr[0] "सहस्त्राब्द" -msgstr[1] "सहस्त्राब्द" +#~ msgid "week" +#~ msgid_plural "weeks" +#~ msgstr[0] "हफ्ता" +#~ msgstr[1] "हफ्तें" -#: src/rcgcdw.py:244 -msgid "decade" -msgid_plural "decades" -msgstr[0] "दशक" -msgstr[1] "दशक" +#~ msgid "month" +#~ msgid_plural "months" +#~ msgstr[0] "महीना" +#~ msgstr[1] "महीनें" -#: src/rcgcdw.py:244 -msgid "century" -msgid_plural "centuries" -msgstr[0] "शताब्दी" -msgstr[1] "शताब्दियाँ" +#~ msgid "year" +#~ msgid_plural "years" +#~ msgstr[0] "साल" +#~ msgstr[1] "साल" + +#~ msgid "millennium" +#~ msgid_plural "millennia" +#~ msgstr[0] "सहस्त्राब्द" +#~ msgstr[1] "सहस्त्राब्द" + +#~ msgid "decade" +#~ msgid_plural "decades" +#~ msgstr[0] "दशक" +#~ msgstr[1] "दशक" + +#~ msgid "century" +#~ msgid_plural "centuries" +#~ msgstr[0] "शताब्दी" +#~ msgstr[1] "शताब्दियाँ" #~ msgid "None" #~ msgstr "कुछ नहीं" @@ -759,9 +750,6 @@ msgstr[1] "शताब्दियाँ" #~ msgid "Title" #~ msgstr "शीर्षक" -#~ msgid "No description provided" -#~ msgstr "कोई विवरण नहीं दिया गया" - #~ msgid "(N!) " #~ msgstr "(न!) " diff --git a/locale/hi/LC_MESSAGES/redaction.po b/locale/hi/LC_MESSAGES/redaction.po index 2de303a..9e81c45 100644 --- a/locale/hi/LC_MESSAGES/redaction.po +++ b/locale/hi/LC_MESSAGES/redaction.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"POT-Creation-Date: 2021-05-18 13:48+0200\n" "PO-Revision-Date: 2020-11-27 13:07+0000\n" "Last-Translator: Creeper \n" "Language-Team: Hindi 1;\n" "X-Generator: Weblate 4.2.1\n" -#: src/discord/redaction.py:62 src/discord/redaction.py:65 -#: src/discord/redaction.py:70 +#: src/discord/redaction.py:77 src/discord/redaction.py:80 +#: src/discord/redaction.py:85 msgid "Removed" msgstr "हटाया गया" diff --git a/locale/lol/LC_MESSAGES/formatters.po b/locale/lol/LC_MESSAGES/formatters.po index 90b01dc..c1b85ae 100644 --- a/locale/lol/LC_MESSAGES/formatters.po +++ b/locale/lol/LC_MESSAGES/formatters.po @@ -6,71 +6,417 @@ #, fuzzy msgid "" msgstr "" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: lol\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" "#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" -"Project-Id-Version: RcGcDw\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: lol\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" "#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -"Project-Id-Version: RcGcDw\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: lol\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 -#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 -#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 -msgid "unknown" +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" msgstr "" -#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 -#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 -#: src/rc_formatters.py:75 src/rc_formatters.py:96 +#: src/api/util.py:71 +msgid "Removed" +msgstr "" + +#: src/api/util.py:73 +msgid "Added" +msgstr "" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 msgid "Unregistered user" msgstr "" -#: src/discussion_formatters.py:39 +#: src/api/util.py:160 extensions/base/discussions.py:193 +#: extensions/base/discussions.py:195 +msgid "Tags" +msgstr "" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "" + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr "" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "" + +#: src/api/util.py:166 +msgid " and {} more" +msgstr "" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "" + +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:105 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: extensions/base/translate.py:55 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: extensions/base/translate.py:80 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:106 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:133 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: extensions/base/translate.py:161 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:177 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:188 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:215 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:231 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:240 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:264 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:288 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:315 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:342 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:387 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:401 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "" + +#: extensions/base/translate.py:431 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:439 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "" + +#: extensions/base/translate.py:464 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "" + +#: extensions/base/translate.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:193 +msgid "{} tags" +msgstr "" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:214 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -#: src/discussion_formatters.py:42 +#: extensions/base/discussions.py:217 #, python-brace-format msgid "" "[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -#: src/discussion_formatters.py:45 +#: extensions/base/discussions.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -#: src/discussion_formatters.py:54 +#: extensions/base/discussions.py:234 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " "to [{title}](<{url}f/p/{threadId}>) in {forumName}" msgstr "" -#: src/discussion_formatters.py:61 +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:312 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" @@ -78,7 +424,7 @@ msgid "" "Message_Wall:{user_wall}>)" msgstr "" -#: src/discussion_formatters.py:64 +#: extensions/base/discussions.py:318 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" @@ -87,14 +433,24 @@ msgid "" "(<{url}wiki/Message_Wall:{user_wall}>)" msgstr "" -#: src/discussion_formatters.py:72 +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "" + +#: extensions/base/discussions.py:359 #, python-brace-format msgid "" "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " "on [{article}](<{url}>)" msgstr "" -#: src/discussion_formatters.py:78 +#: extensions/base/discussions.py:365 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" @@ -102,406 +458,420 @@ msgid "" "[{article}](<{url}>)" msgstr "" -#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:80 +#, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "" + +#: extensions/base/managewiki.py:89 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:124 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "" + +#: extensions/base/managewiki.py:134 #, python-brace-format msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" msgstr "" -#: src/discussion_formatters.py:123 +#: extensions/base/managewiki.py:147 #, python-brace-format -msgid "Created \"{title}\"" +msgid "Deleted a \"{namespace_name}\" namespace" msgstr "" -#: src/discussion_formatters.py:127 +#: extensions/base/managewiki.py:158 #, python-brace-format -msgid "Created a poll \"{title}\"" +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" msgstr "" -#: src/discussion_formatters.py:134 -msgid "Option {}" -msgstr "" - -#: src/discussion_formatters.py:135 +#: extensions/base/managewiki.py:173 #, python-brace-format -msgid "__[View image]({image_url})__" +msgid "Modified \"{usergroup_name}\" usergroup" msgstr "" -#: src/discussion_formatters.py:139 +#: extensions/base/managewiki.py:182 #, python-brace-format -msgid "Created a quiz \"{title}\"" +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" msgstr "" -#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 -#: src/rc_formatters.py:1283 -msgid "Tags" -msgstr "" - -#: src/discussion_formatters.py:155 -msgid "{} tags" -msgstr "" - -#: src/discussion_formatters.py:160 +#: extensions/base/managewiki.py:195 #, python-brace-format -msgid "Replied to \"{title}\"" +msgid "Undeleted a \"{wiki}\" wiki" msgstr "" -#: src/discussion_formatters.py:169 +#: extensions/base/managewiki.py:203 #, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" msgstr "" -#: src/discussion_formatters.py:173 +#: extensions/base/managewiki.py:217 #, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgid "Unlocked a \"{wiki}\" wiki" msgstr "" -#: src/discussion_formatters.py:180 +#: extensions/base/managewiki.py:225 #, python-brace-format -msgid "Commented on {article}" +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" msgstr "" -#: src/discussion_formatters.py:184 +#: extensions/base/datadump.py:36 #, python-brace-format -msgid "Replied to a comment on {article}" +msgid "Generated {file} dump" msgstr "" -#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#: extensions/base/datadump.py:45 #, python-brace-format -msgid "Unknown event `{event}`" +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" msgstr "" -#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 -#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 -msgid "Report this on the support server" +#: extensions/base/datadump.py:58 +#, python-brace-format +msgid "Deleted {file} dump" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/datadump.py:67 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "" + +#: extensions/base/abusefilter.py:29 msgid "None" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Warning issued" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Blocked user**" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Tagged the edit" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Disallowed the action" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**IP range blocked**" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Throttled actions" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Removed autoconfirmed group" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Removed from privileged groups**" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Edit" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Upload" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Move" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Stash upload" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Deletion" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Account creation" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Auto account creation" msgstr "" -#: src/rc_formatters.py:83 +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "" + +#: extensions/base/abusefilter.py:66 #, python-brace-format msgid "" "[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " "\"{action}\" on *[{target}]({target_url})* - action taken: {result}." msgstr "" -#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 -#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 -#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 -#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 -#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 -#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 -#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 -#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 -#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 -msgid "Unknown" +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" msgstr "" -#: src/rc_formatters.py:116 +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "" + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "" + +#: extensions/base/mediawiki.py:112 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" msgstr "" -#: src/rc_formatters.py:118 +#: extensions/base/mediawiki.py:117 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" msgstr "" -#: src/rc_formatters.py:121 -#, python-brace-format -msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +msgid "Options" msgstr "" -#: src/rc_formatters.py:128 +#: extensions/base/mediawiki.py:191 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "" + +#: extensions/base/mediawiki.py:196 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:198 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:200 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "" + +#: extensions/base/mediawiki.py:209 +msgid "**No license!**" +msgstr "" + +#: extensions/base/mediawiki.py:224 +msgid "" +"\n" +"License: {}" +msgstr "" + +#: extensions/base/mediawiki.py:226 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "" + +#: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" msgstr "" -#: src/rc_formatters.py:132 +#: extensions/base/mediawiki.py:248 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" "{comment}" msgstr "" -#: src/rc_formatters.py:135 +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:283 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "" -#: src/rc_formatters.py:141 +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" + +#: extensions/base/mediawiki.py:308 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" "({page_link}){comment}" msgstr "" -#: src/rc_formatters.py:147 src/rc_formatters.py:152 -msgid "without making a redirect" -msgstr "" - -#: src/rc_formatters.py:147 src/rc_formatters.py:153 -msgid "with a redirect" -msgstr "" - -#: src/rc_formatters.py:148 +#: extensions/base/mediawiki.py:322 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" +msgid "Restored {article}" msgstr "" -#: src/rc_formatters.py:154 +#: extensions/base/mediawiki.py:331 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -"[{target}]({target_url}) {made_a_redirect}{comment}" +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" -#: src/rc_formatters.py:159 +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "" + +#: extensions/base/mediawiki.py:356 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" +msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "" -#: src/rc_formatters.py:170 src/rc_formatters.py:855 -msgid "for infinity and beyond" -msgstr "" - -#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#: extensions/base/mediawiki.py:370 #, python-brace-format -msgid "for {num} {translated_length}" -msgstr "" +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "" +msgstr[1] "" -#: src/rc_formatters.py:185 src/rc_formatters.py:867 -msgid "until {}" -msgstr "" - -#: src/rc_formatters.py:189 -msgid " on pages: " -msgstr "" - -#: src/rc_formatters.py:196 src/rc_formatters.py:881 -msgid " and namespaces: " -msgstr "" - -#: src/rc_formatters.py:198 -msgid " on namespaces: " -msgstr "" - -#: src/rc_formatters.py:210 -#, python-brace-format -msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" -msgstr "" - -#: src/rc_formatters.py:214 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:218 -#, python-brace-format -msgid "" -"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:223 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:225 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:231 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -"profile" -msgstr "" - -#: src/rc_formatters.py:237 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on their own " -"profile" -msgstr "" - -#: src/rc_formatters.py:245 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:251 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:257 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:259 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:267 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:269 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:274 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -"profile. *({desc})*" -msgstr "" - -#: src/rc_formatters.py:281 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -"profile. *({desc})*" -msgstr "" - -#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 -#: src/rc_formatters.py:979 -msgid "none" -msgstr "" - -#: src/rc_formatters.py:301 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) from {old_groups} to {new_groups}{comment}" -msgstr "" - -#: src/rc_formatters.py:303 -#, python-brace-format -msgid "" -"{author} autopromoted [{target}]({target_url}) from {old_groups} to " -"{new_groups}{comment}" -msgstr "" - -#: src/rc_formatters.py:304 src/rc_formatters.py:965 -msgid "System" -msgstr "" - -#: src/rc_formatters.py:309 -#, python-brace-format -msgid "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" -msgstr "" - -#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 -#: src/rc_formatters.py:993 -msgid " [cascading]" -msgstr "" - -#: src/rc_formatters.py:316 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" -msgstr "" - -#: src/rc_formatters.py:323 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:327 +#: extensions/base/mediawiki.py:383 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -512,7 +882,215 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/rc_formatters.py:340 +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr "" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:610 +msgid "Blocked from editing the following pages: " +msgstr "" + +#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:619 +msgid "Blocked from editing pages on following namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:630 +msgid "Partial block details" +msgstr "" + +#: extensions/base/mediawiki.py:633 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:635 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr "" + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "" + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:772 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -523,17 +1101,14 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/rc_formatters.py:345 +#: extensions/base/mediawiki.py:788 #, python-brace-format -msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "" +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "" +msgstr[1] "" -#: src/rc_formatters.py:347 -#, python-brace-format -msgid "[{author}]({author_url}) changed visibility of log events{comment}" -msgstr "" - -#: src/rc_formatters.py:359 +#: extensions/base/mediawiki.py:803 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -544,135 +1119,210 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/rc_formatters.py:364 +#: extensions/base/mediawiki.py:818 #, python-brace-format -msgid "" -"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgid " (until {date_and_time})" msgstr "" -#: src/rc_formatters.py:368 +#: extensions/base/mediawiki.py:836 #, python-brace-format -msgid "" -"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgid "Changed group membership for {target}" msgstr "" -#: src/rc_formatters.py:372 +#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +msgid "System" +msgstr "" + +#: extensions/base/mediawiki.py:840 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "" + +#: extensions/base/mediawiki.py:846 +#, python-brace-format +msgid "" +"{reason}\n" +"{added}{linebreak}{removed}" +msgstr "" + +#: extensions/base/mediawiki.py:860 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) {added}{comma} {removed}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:864 +#, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:877 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" + +#: extensions/base/mediawiki.py:891 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" "({article_url}) into [{dest}]({dest_url}){comment}" msgstr "" -#: src/rc_formatters.py:375 +#: extensions/base/mediawiki.py:905 +msgid "Created account automatically" +msgstr "" + +#: extensions/base/mediawiki.py:912 #, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "" -#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +msgid "Created account" +msgstr "" + +#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 #, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "" -#: src/rc_formatters.py:380 +#: extensions/base/mediawiki.py:944 +#, python-brace-format +msgid "Created account {article}" +msgstr "" + +#: extensions/base/mediawiki.py:953 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" "{comment}" msgstr "" -#: src/rc_formatters.py:383 +#: extensions/base/mediawiki.py:966 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" + +#: extensions/base/mediawiki.py:977 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " "and password was sent by email{comment}" msgstr "" -#: src/rc_formatters.py:388 +#: extensions/base/mediawiki.py:1009 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: extensions/base/mediawiki.py:1022 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" "({table_url}) pointing to {website} with {prefix} prefix" msgstr "" -#: src/rc_formatters.py:394 +#: extensions/base/mediawiki.py:1036 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: extensions/base/mediawiki.py:1049 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " "pointing to {website} with {prefix} prefix" msgstr "" -#: src/rc_formatters.py:400 +#: extensions/base/mediawiki.py:1063 +msgid "Deleted an entry in interwiki table" +msgstr "" + +#: extensions/base/mediawiki.py:1064 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: extensions/base/mediawiki.py:1074 #, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" msgstr "" -#: src/rc_formatters.py:403 +#: extensions/base/mediawiki.py:1091 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:1093 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1105 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "" -#: src/rc_formatters.py:407 +#: extensions/base/mediawiki.py:1120 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: extensions/base/mediawiki.py:1122 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1133 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " "non-default content model {new}{comment}" msgstr "" -#: src/rc_formatters.py:410 +#: extensions/base/mediawiki.py:1148 #, python-brace-format -msgid "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgid "Created the tag \"{tag}\"" msgstr "" -#: src/rc_formatters.py:413 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" -msgstr "" - -#: src/rc_formatters.py:416 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the slice for [{article}]({article_url})" -msgstr "" - -#: src/rc_formatters.py:421 -#, python-brace-format -msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:423 -#, python-brace-format -msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:428 -#, python-brace-format -msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:433 -#, python-brace-format -msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:436 +#: extensions/base/mediawiki.py:1158 #, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: src/rc_formatters.py:441 +#: extensions/base/mediawiki.py:1180 +#, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1182 +msgid "Removed from" +msgstr "" + +#: extensions/base/mediawiki.py:1182 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1194 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: src/rc_formatters.py:443 +#: extensions/base/mediawiki.py:1204 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -683,211 +1333,41 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/rc_formatters.py:449 +#: extensions/base/mediawiki.py:1221 +#, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1230 #, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: src/rc_formatters.py:452 +#: extensions/base/mediawiki.py:1249 +#, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1258 #, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: src/rc_formatters.py:454 +#: extensions/base/mediawiki.py:1278 #, python-brace-format -msgid "[{author}]({author_url}) changed wiki settings{reason}" -msgstr "" +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" -#: src/rc_formatters.py:456 +#: extensions/base/mediawiki.py:1283 #, python-brace-format -msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" msgstr "" -#: src/rc_formatters.py:459 -#, python-brace-format -msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:462 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:467 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:473 -#, python-brace-format -msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:477 -#, python-brace-format -msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:481 -#, python-brace-format -msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:486 -#, python-brace-format -msgid "[{author}]({author_url}) generated *{file}* dump{comment}" -msgstr "" - -#: src/rc_formatters.py:491 -#, python-brace-format -msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" -msgstr "" - -#: src/rc_formatters.py:502 -#, python-brace-format -msgid "" -"[{author}]({author_url}) marked [{article}]({article_url}) for " -"translation{comment}" -msgstr "" - -#: src/rc_formatters.py:509 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed [{article}]({article_url}) from the " -"translation system{comment}" -msgstr "" - -#: src/rc_formatters.py:516 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed moving translation pages from *{article}* " -"to [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:524 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encountered a problem while moving [{article}]" -"({article_url}) to [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:532 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translatable page [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:540 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translatable page [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:548 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translation page [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:556 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translation page [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:564 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:571 -#, python-brace-format -msgid "" -"[{author}]({author_url}) discouraged translation of [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:581 -#, python-brace-format -msgid "" -"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " -"`{languages}`{comment}" -msgstr "" - -#: src/rc_formatters.py:587 -#, python-brace-format -msgid "" -"[{author}]({author_url}) set the priority languages for [{article}]" -"({article_url}) to `{languages}`{comment}" -msgstr "" - -#: src/rc_formatters.py:593 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed priority languages from [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:600 -#, python-brace-format -msgid "" -"[{author}]({author_url}) added translatable page [{article}]({article_url}) " -"to aggregate group \"{group}\"{comment}" -msgstr "" - -#: src/rc_formatters.py:607 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed translatable page [{article}]" -"({article_url}) from aggregate group \"{group}\"{comment}" -msgstr "" - -#: src/rc_formatters.py:619 -#, python-brace-format -msgid "" -"[{author}]({author_url}) reviewed translation [{article}]({article_url})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:627 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" -msgstr "" - -#: src/rc_formatters.py:634 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) to `{new_state}`{comment}" -msgstr "" - -#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 -#: src/rc_formatters.py:1241 -msgid "(default)" -msgstr "" - -#: src/rc_formatters.py:647 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the language of [{article}]({article_url}) " -"from {old_lang} to {new_lang}{comment}" -msgstr "" - -#: src/rc_formatters.py:656 +#: extensions/base/mediawiki.py:1298 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " @@ -898,624 +1378,43 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/rc_formatters.py:661 +#: extensions/base/mediawiki.py:1306 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" "{comment}" msgstr "" -#: src/rc_formatters.py:665 -msgid "An action has been hidden by administration." -msgstr "" - -#: src/rc_formatters.py:681 -#, python-brace-format -msgid "{user} triggered \"{abuse_filter}\"" -msgstr "" - -#: src/rc_formatters.py:682 -msgid "Performed" -msgstr "" - -#: src/rc_formatters.py:683 -msgid "Action taken" -msgstr "" - -#: src/rc_formatters.py:684 -msgid "Title" -msgstr "" - -#: src/rc_formatters.py:693 src/rc_formatters.py:980 -msgid "No description provided" -msgstr "" - -#: src/rc_formatters.py:717 -msgid "(N!) " -msgstr "" - -#: src/rc_formatters.py:718 -msgid "m" -msgstr "" - -#: src/rc_formatters.py:718 -msgid "b" -msgstr "" - -#: src/rc_formatters.py:735 src/rc_formatters.py:740 -msgid "__Only whitespace__" -msgstr "" - -#: src/rc_formatters.py:745 -msgid "Removed" -msgstr "" - -#: src/rc_formatters.py:747 -msgid "Added" -msgstr "" - -#: src/rc_formatters.py:781 src/rc_formatters.py:820 -msgid "Options" -msgstr "" - -#: src/rc_formatters.py:781 -#, python-brace-format -msgid "([preview]({link}) | [undo]({undolink}))" -msgstr "" - -#: src/rc_formatters.py:786 -#, python-brace-format -msgid "Uploaded a new version of {name}" -msgstr "" - -#: src/rc_formatters.py:788 -#, python-brace-format -msgid "Reverted a version of {name}" -msgstr "" - -#: src/rc_formatters.py:790 -#, python-brace-format -msgid "Uploaded {name}" -msgstr "" - -#: src/rc_formatters.py:806 -msgid "**No license!**" -msgstr "" - -#: src/rc_formatters.py:818 -msgid "" -"\n" -"License: {}" -msgstr "" - -#: src/rc_formatters.py:820 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "" - -#: src/rc_formatters.py:825 -#, python-brace-format -msgid "Deleted page {article}" -msgstr "" - -#: src/rc_formatters.py:830 -#, python-brace-format -msgid "Deleted redirect {article} by overwriting" -msgstr "" - -#: src/rc_formatters.py:836 -msgid "No redirect has been made" -msgstr "" - -#: src/rc_formatters.py:837 -msgid "A redirect has been made" -msgstr "" - -#: src/rc_formatters.py:838 -#, python-brace-format -msgid "Moved {redirect}{article} to {target}" -msgstr "" - -#: src/rc_formatters.py:841 -#, python-brace-format -msgid "Moved {redirect}{article} to {title} over redirect" -msgstr "" - -#: src/rc_formatters.py:845 -#, python-brace-format -msgid "Moved protection settings from {redirect}{article} to {title}" -msgstr "" - -#: src/rc_formatters.py:869 -msgid "unknown expiry time" -msgstr "" - -#: src/rc_formatters.py:874 -msgid "Blocked from editing the following pages: " -msgstr "" - -#: src/rc_formatters.py:883 -msgid "Blocked from editing pages on following namespaces: " -msgstr "" - -#: src/rc_formatters.py:894 -msgid "Partial block details" -msgstr "" - -#: src/rc_formatters.py:895 -#, python-brace-format -msgid "Blocked {blocked_user} {time}" -msgstr "" - -#: src/rc_formatters.py:899 -#, python-brace-format -msgid "Changed block settings for {blocked_user}" -msgstr "" - -#: src/rc_formatters.py:903 -#, python-brace-format -msgid "Unblocked {blocked_user}" -msgstr "" - -#: src/rc_formatters.py:910 -#, python-brace-format -msgid "Left a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:912 -msgid "Left a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:919 -#, python-brace-format -msgid "Replied to a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:921 -msgid "Replied to a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:928 -#, python-brace-format -msgid "Edited a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:930 -msgid "Edited a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:935 -#, python-brace-format -msgid "Edited {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:937 -msgid "Edited their own profile" -msgstr "" - -#: src/rc_formatters.py:939 -#, python-brace-format -msgid "Cleared the {field} field" -msgstr "" - -#: src/rc_formatters.py:941 -#, python-brace-format -msgid "{field} field changed to: {desc}" -msgstr "" - -#: src/rc_formatters.py:946 -#, python-brace-format -msgid "Purged a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:948 -msgid "Purged a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:956 -#, python-brace-format -msgid "Deleted a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:958 -msgid "Deleted a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:962 -#, python-brace-format -msgid "Changed group membership for {target}" -msgstr "" - -#: src/rc_formatters.py:966 -#, python-brace-format -msgid "{target} got autopromoted to a new usergroup" -msgstr "" - -#: src/rc_formatters.py:981 -#, python-brace-format -msgid "Groups changed from {old_groups} to {new_groups}{reason}" -msgstr "" - -#: src/rc_formatters.py:985 -#, python-brace-format -msgid "Protected {target}" -msgstr "" - -#: src/rc_formatters.py:991 -#, python-brace-format -msgid "Changed protection level for {article}" -msgstr "" - -#: src/rc_formatters.py:997 -#, python-brace-format -msgid "Removed protection from {article}" -msgstr "" - -#: src/rc_formatters.py:1001 -#, python-brace-format -msgid "Changed visibility of revision on page {article} " -msgid_plural "Changed visibility of {amount} revisions on page {article} " -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1013 -#, python-brace-format -msgid "Imported {article} with {count} revision" -msgid_plural "Imported {article} with {count} revisions" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1018 -#, python-brace-format -msgid "Restored {article}" -msgstr "" - -#: src/rc_formatters.py:1021 -msgid "Changed visibility of log events" -msgstr "" - -#: src/rc_formatters.py:1031 -#, python-brace-format -msgid "Imported {article} with {count} revision from \"{source}\"" -msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1036 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "" - -#: src/rc_formatters.py:1039 -#, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "" - -#: src/rc_formatters.py:1042 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "" - -#: src/rc_formatters.py:1046 -msgid "Created account automatically" -msgstr "" - -#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 -msgid "Created account" -msgstr "" - -#: src/rc_formatters.py:1052 -#, python-brace-format -msgid "Created account {article}" -msgstr "" - -#: src/rc_formatters.py:1055 -#, python-brace-format -msgid "Created account {article} and password was sent by email" -msgstr "" - -#: src/rc_formatters.py:1061 -msgid "Added an entry to the interwiki table" -msgstr "" - -#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "" - -#: src/rc_formatters.py:1067 -msgid "Edited an entry in interwiki table" -msgstr "" - -#: src/rc_formatters.py:1073 -msgid "Deleted an entry in interwiki table" -msgstr "" - -#: src/rc_formatters.py:1074 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "" - -#: src/rc_formatters.py:1077 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "" - -#: src/rc_formatters.py:1078 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "" - -#: src/rc_formatters.py:1083 -#, python-brace-format -msgid "Created the page {article} using a non-default content model" -msgstr "" - -#: src/rc_formatters.py:1084 -#, python-brace-format -msgid "Created with model {new}: {reason}" -msgstr "" - -#: src/rc_formatters.py:1087 +#: extensions/base/sprite.py:37 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "" -#: src/rc_formatters.py:1090 +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" + +#: extensions/base/sprite.py:60 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "" -#: src/rc_formatters.py:1093 +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" + +#: extensions/base/sprite.py:79 #, python-brace-format msgid "Edited the slice for {article}" msgstr "" -#: src/rc_formatters.py:1099 -#, python-brace-format -msgid "Created the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1103 -#, python-brace-format -msgid "Deleted the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1110 -#, python-brace-format -msgid "Recreated the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1117 -#, python-brace-format -msgid "Replaced the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1121 -#, python-brace-format -msgid "Created the tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1125 -#, python-brace-format -msgid "Deleted the tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1127 -msgid "Removed from" -msgstr "" - -#: src/rc_formatters.py:1127 -msgid "{} revision or log entry" -msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1131 -#, python-brace-format -msgid "Activated the tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1134 -#, python-brace-format -msgid "Deactivated the tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1137 -msgid "Changed wiki settings" -msgstr "" - -#: src/rc_formatters.py:1141 -#, python-brace-format -msgid "Deleted a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1144 -#, python-brace-format -msgid "Locked a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1147 -#, python-brace-format -msgid "Modified \"{namespace_name}\" namespace" -msgstr "" - -#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 -msgid "Wiki" -msgstr "" - -#: src/rc_formatters.py:1151 -#, python-brace-format -msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "" - -#: src/rc_formatters.py:1157 -#, python-brace-format -msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "" - -#: src/rc_formatters.py:1160 -#, python-brace-format -msgid "Undeleted a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1163 -#, python-brace-format -msgid "Unlocked a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1166 -#, python-brace-format -msgid "Generated {file} dump" -msgstr "" - -#: src/rc_formatters.py:1169 -#, python-brace-format -msgid "Deleted {file} dump" -msgstr "" - -#: src/rc_formatters.py:1177 -#, python-brace-format -msgid "Marked \"{article}\" for translation" -msgstr "" - -#: src/rc_formatters.py:1180 -#, python-brace-format -msgid "Removed \"{article}\" from the translation system" -msgstr "" - -#: src/rc_formatters.py:1183 -#, python-brace-format -msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1186 -#, python-brace-format -msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1189 -#, python-brace-format -msgid "Completed deletion of translatable page \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1192 +#: extensions/base/sprite.py:86 #, python-brace-format msgid "" -"Failed to delete \"{article}\" which belongs to translatable page " -"\"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1195 -#, python-brace-format -msgid "Completed deletion of translation page \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1198 -#, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1201 -#, python-brace-format -msgid "Encouraged translation of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1204 -#, python-brace-format -msgid "Discouraged translation of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1210 -#, python-brace-format -msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1212 -#, python-brace-format -msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1214 -#, python-brace-format -msgid "Removed priority languages from \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1217 -#, python-brace-format -msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1220 -#, python-brace-format -msgid "" -"Removed translatable page \"{article}\" from aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1227 -#, python-brace-format -msgid "Reviewed translation \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1230 -#, python-brace-format -msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1232 -msgid "Old state" -msgstr "" - -#: src/rc_formatters.py:1233 -msgid "New state" -msgstr "" - -#: src/rc_formatters.py:1242 -#, python-brace-format -msgid "Changed the language of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1243 -msgid "Old language" -msgstr "" - -#: src/rc_formatters.py:1244 -msgid "New language" -msgstr "" - -#: src/rc_formatters.py:1248 -#, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1250 -#, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "" - -#: src/rc_formatters.py:1254 -msgid "Action has been hidden by administration" -msgstr "" - -#: src/rc_formatters.py:1288 -msgid "**Added**: " -msgstr "" - -#: src/rc_formatters.py:1288 -msgid " and {} more\n" -msgstr "" - -#: src/rc_formatters.py:1289 -msgid "**Removed**: " -msgstr "" - -#: src/rc_formatters.py:1289 -msgid " and {} more" -msgstr "" - -#: src/rc_formatters.py:1290 -msgid "Changed categories" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" diff --git a/locale/lol/LC_MESSAGES/misc.po b/locale/lol/LC_MESSAGES/misc.po index d23c546..9a2ff88 100644 --- a/locale/lol/LC_MESSAGES/misc.po +++ b/locale/lol/LC_MESSAGES/misc.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-28 23:45+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -16,68 +16,68 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Location" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "About me" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Google link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Facebook link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitter link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Reddit link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitch link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "PSN link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "VK link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "XBL link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Steam link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Discord handle" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Battle.net handle" msgstr "" -#: src/misc.py:119 +#: src/misc.py:138 msgid "" "\n" "__And more__" msgstr "" -#: src/misc.py:276 +#: src/misc.py:322 msgid "Unknown" msgstr "" -#: src/misc.py:278 +#: src/misc.py:324 msgid "unknown" msgstr "" diff --git a/locale/lol/LC_MESSAGES/rcgcdw.po b/locale/lol/LC_MESSAGES/rcgcdw.po index 1a6964d..a3a0fb4 100644 --- a/locale/lol/LC_MESSAGES/rcgcdw.po +++ b/locale/lol/LC_MESSAGES/rcgcdw.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-08-16 19:13+0000\n" "Last-Translator: Frisk The Evil Goat Overlord <>\n" "Language-Team: Lolcat \n" -"Language-Team: Polish \n" -"Language: pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2021-04-14 14:22+0000\n" "Last-Translator: Frisk The Evil Goat Overlord \n" "Language-Team: Polish =2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.2.1\n" +"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.4.2\n" "Generated-By: pygettext.py 1.5\n" -#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 -#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 -#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 -msgid "unknown" -msgstr "nieznany" +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" +msgstr "__Tylko znaki niedrukowane__" -#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 -#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 -#: src/rc_formatters.py:75 src/rc_formatters.py:96 +#: src/api/util.py:71 +msgid "Removed" +msgstr "Usunięto" + +#: src/api/util.py:73 +msgid "Added" +msgstr "Dodano" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 msgid "Unregistered user" msgstr "Niezarejestrowany użytkownik" -#: src/discussion_formatters.py:39 +#: src/api/util.py:160 extensions/base/discussions.py:193 +#: extensions/base/discussions.py:195 +#, fuzzy +msgid "Tags" +msgstr "" +"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +"Fora\n" +"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +"Znaczniki" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "**Dodane**: " + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr " oraz {} innych\n" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "**Usunięte**: " + +#: src/api/util.py:166 +msgid " and {} more" +msgstr " oraz {} innych" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "Zmienione kategorie" + +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "Utworzono tabelę Cargo „{table}”" + +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) utworzył(a) tabelę Cargo „{table}”" + +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "Utworzono ponownie tabelę Cargo „{table}”" + +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) utworzył(a) ponownie tabelę Cargo „{table}”" + +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "Zastąpiono tabelę Cargo „{table}”" + +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) zastąpił(a) tabelę Cargo „{table}”" + +#: extensions/base/cargo.py:105 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "Usunięto tabelę Cargo „{table}”" + +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) usunął tabelę Cargo „{table}”" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: extensions/base/translate.py:55 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" +"[{author}]({author_url}) oznaczył(a) [{article}]({article_url}) do " +"tłumaczenia{comment}" + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: extensions/base/translate.py:80 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" +"[{author}]({author_url}) usunął/usunęła [{article}]({article_url}) z systemu " +"tłumaczeń{comment}" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:106 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) zakończył(a) przenoszenie stron tłumaczeń z " +"*{article}* do [{target}]({target_url}){comment}" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:133 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) napotkał(a) problem podczas przenoszenia [{article}]" +"({article_url}) do [{target}]({target_url}){comment}" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: extensions/base/translate.py:161 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z jedną " +"wersją{comment}" + +#: extensions/base/translate.py:177 +#, fuzzy, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "Zmieniono widoczność wersji na stronie {article} " + +#: extensions/base/translate.py:188 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) widoczność wersji strony [{article}]" +"({article_url}){comment}" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:215 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z jedną " +"wersją{comment}" + +#: extensions/base/translate.py:231 +#, fuzzy, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "Usunięto zabezpieczenie z {article}" + +#: extensions/base/translate.py:240 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) usunął zabezpieczenia z [{article}]({article_url})" +"{comment}" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:264 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) odtworzył(a) [{article}]({article_url}){comment}" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:288 +#, fuzzy, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "Usunięto zabezpieczenie z {article}" + +#: extensions/base/translate.py:301 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) ustawienia zabezpieczeń [{article}]" +"({article_url}) na: {settings}{comment}" + +#: extensions/base/translate.py:308 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) ustawienia zabezpieczeń [{article}]" +"({article_url}) na: {settings}{comment}" + +#: extensions/base/translate.py:315 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) usunął zabezpieczenia z [{article}]({article_url})" +"{comment}" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:342 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) model zawartości [{article}]" +"({article_url}) z {old} na {new}{comment}" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:368 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) usunął zabezpieczenia z [{article}]({article_url})" +"{comment}" + +#: extensions/base/translate.py:387 +#, fuzzy, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "Usunięto zabezpieczenie z {article}" + +#: extensions/base/translate.py:401 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) odtworzył(a) [{article}]({article_url}){comment}" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "" + +#: extensions/base/translate.py:431 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) model zawartości [{article}]" +"({article_url}) z {old} na {new}{comment}" + +#: extensions/base/translate.py:439 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) model zawartości [{article}]" +"({article_url}) z {old} na {new}{comment}" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "" + +#: extensions/base/translate.py:464 +#, fuzzy, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "Usunięto zabezpieczenie z {article}" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "" + +#: extensions/base/translate.py:477 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) model zawartości [{article}]" +"({article_url}) z {old} na {new}{comment}" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "nieznany" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "Stworzył(a) „{title}”" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "Stworzył(a) ankietę zatytułowaną „{title}”" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "Opcja {}" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[Zobacz zdjęcie]({image_url})__" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "Stworzył(a) quiz „{title}”" + +#: extensions/base/discussions.py:193 +msgid "{} tags" +msgstr "{} tagów" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "Odpowiedział(a) w „{title}”" + +#: extensions/base/discussions.py:214 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " @@ -65,7 +439,7 @@ msgstr "" "[{author}]({author_url}) stworzył(a) [{title}](<{url}f/p/{threadId}>) w " "{forumName}" -#: src/discussion_formatters.py:42 +#: extensions/base/discussions.py:217 #, python-brace-format msgid "" "[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " @@ -74,7 +448,7 @@ msgstr "" "[{author}]({author_url}) stworzył(a) ankietę [{title}](<{url}f/p/{threadId}" ">) w {forumName}" -#: src/discussion_formatters.py:45 +#: extensions/base/discussions.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " @@ -83,7 +457,7 @@ msgstr "" "[{author}]({author_url}) stworzył(a) quiz [{title}](<{url}f/p/{threadId}>) w " "{forumName}" -#: src/discussion_formatters.py:54 +#: extensions/base/discussions.py:234 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " @@ -92,7 +466,17 @@ msgstr "" "[{author}]({author_url}) dodał(a) [odpowiedź](<{url}f/p/{threadId}/r/{postId}" ">) pod tematem [{title}](<{url}f/p/{threadId}>) w {forumName}" -#: src/discussion_formatters.py:61 +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "Stworzył(a) „{title}” na tablicy wiadomości {user}" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "Odpowiedział(a) na „{title}” z tablicy wiadomości {user}" + +#: extensions/base/discussions.py:312 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" @@ -103,7 +487,7 @@ msgstr "" "{user_wall}?threadId={threadId}>) na [tablicy wiadomości {user}](<{url}wiki/" "Message_Wall:{user_wall}>)" -#: src/discussion_formatters.py:64 +#: extensions/base/discussions.py:318 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" @@ -116,7 +500,17 @@ msgstr "" "Message_Wall:{user_wall}?threadId={threadId}>) na [tablicy wiadomości {user}]" "(<{url}wiki/Message_Wall:{user_wall}>)" -#: src/discussion_formatters.py:72 +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "Skomentował(a) „{article}”" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "Odpowiedział(a) na komentarz w „{article}”" + +#: extensions/base/discussions.py:359 #, python-brace-format msgid "" "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " @@ -125,7 +519,7 @@ msgstr "" "[{author}]({author_url}) dodał(a) [komentarz](<{url}?commentId={commentId}>) " "w [{article}](<{url}>)" -#: src/discussion_formatters.py:78 +#: extensions/base/discussions.py:365 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" @@ -136,153 +530,230 @@ msgstr "" "&replyId={replyId}>) na [komentarz](<{url}?commentId={commentId}>) w " "artykule [{article}](<{url}>)" -#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "Zmieniono ustawienia wiki" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) zmienił(a) ustawienia wiki{reason}" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "Usunięto wiki „{wiki}”" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "Nieznana" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) usunął/usunęła wiki *{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:80 +#, fuzzy, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "Modyfikowano grupę użytkowników „{usergroup_name}”" + +#: extensions/base/managewiki.py:89 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" +"[{author}]({author_url}) zaimportował(a) grupę użytkownika *{group_name}" +"*{comment}" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "Zablokowano wiki „{wiki}”" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) zablokował(a) wiki *{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:124 +#, fuzzy, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "Modyfikowano przestrzeń nazw „{namespace_name}”" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "Wiki" + +#: extensions/base/managewiki.py:134 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) zmodyfikował(a) przestrzeń nazw *{namespace_name}* " +"na *{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:147 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "Usunięto przestrzeń nazw „{namespace_name}”" + +#: extensions/base/managewiki.py:158 #, python-brace-format msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" msgstr "" -"Nieznane wydarzenie `{event}` wykonane przez [{author}]({author_url}), zgłoś " -"je na [serwerze wsparcia](<{support}>)." +"[{author}]({author_url}) usunął/usunęła przestrzeń nazw *{namespace_name}* " +"na *{wiki_name}*{comment}" -#: src/discussion_formatters.py:123 +#: extensions/base/managewiki.py:173 #, python-brace-format -msgid "Created \"{title}\"" -msgstr "Stworzył(a) „{title}”" +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "Modyfikowano grupę użytkowników „{usergroup_name}”" -#: src/discussion_formatters.py:127 +#: extensions/base/managewiki.py:182 #, python-brace-format -msgid "Created a poll \"{title}\"" -msgstr "Stworzył(a) ankietę zatytułowaną „{title}”" - -#: src/discussion_formatters.py:134 -msgid "Option {}" -msgstr "Opcja {}" - -#: src/discussion_formatters.py:135 -#, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "__[Zobacz zdjęcie]({image_url})__" - -#: src/discussion_formatters.py:139 -#, python-brace-format -msgid "Created a quiz \"{title}\"" -msgstr "Stworzył(a) quiz „{title}”" - -#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 -#: src/rc_formatters.py:1283 -#, fuzzy -msgid "Tags" +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" msgstr "" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" -"Fora\n" -"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -"Znaczniki" +"[{author}]({author_url}) zaimportował(a) grupę użytkownika *{group_name}" +"*{comment}" -#: src/discussion_formatters.py:155 -msgid "{} tags" -msgstr "{} tagów" +#: extensions/base/managewiki.py:195 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "Usunięto wiki „{wiki}”" -#: src/discussion_formatters.py:160 +#: extensions/base/managewiki.py:203 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) usunął/usunęła wiki *{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:217 #, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "Odpowiedział(a) w „{title}”" +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "Odblokowano wiki „{wiki}”" -#: src/discussion_formatters.py:169 +#: extensions/base/managewiki.py:225 #, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "Stworzył(a) „{title}” na tablicy wiadomości {user}" +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) odblokował(a) wiki *{wiki_name}*{comment}" -#: src/discussion_formatters.py:173 +#: extensions/base/datadump.py:36 #, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "Odpowiedział(a) na „{title}” z tablicy wiadomości {user}" +msgid "Generated {file} dump" +msgstr "" -#: src/discussion_formatters.py:180 +#: extensions/base/datadump.py:45 #, python-brace-format -msgid "Commented on {article}" -msgstr "Skomentował(a) „{article}”" +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "" +"[{author}]({author_url}) wygenerował(a) kopię zapasową w *{file}*{comment}" -#: src/discussion_formatters.py:184 +#: extensions/base/datadump.py:58 +#, fuzzy, python-brace-format +msgid "Deleted {file} dump" +msgstr "Usunął stronę {article}" + +#: extensions/base/datadump.py:67 #, python-brace-format -msgid "Replied to a comment on {article}" -msgstr "Odpowiedział(a) na komentarz w „{article}”" +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "" +"[{author}]({author_url}) usunął/usunęła kopię zapasową *{file}*{comment}" -#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 -#, python-brace-format -msgid "Unknown event `{event}`" -msgstr "Nieznane wydarzenie `{event}`" - -#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 -#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 -msgid "Report this on the support server" -msgstr "Zgłoś to na serwerze wsparcia" - -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "None" msgstr "Brak" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Warning issued" msgstr "Wydano ostrzeżenie" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Blocked user**" msgstr "**Zablokowano użytkownika**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Tagged the edit" msgstr "Otagowano edycję" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Disallowed the action" msgstr "Zabroniono akcji" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**IP range blocked**" msgstr "**Zablokowano zakres adresów IP**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Throttled actions" msgstr "Spowolniono akcje użytkownika" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Removed autoconfirmed group" msgstr "Usunięto autopotwierdzoną grupę" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Removed from privileged groups**" msgstr "**Usunięto z uprzywilejowanych grup**" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Edit" msgstr "Edycja" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Upload" msgstr "Przesłanie pliku" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Move" msgstr "Przeniesienie strony" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Stash upload" msgstr "Masowe przesłanie plików" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Deletion" msgstr "Usunięcie" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Account creation" msgstr "Utworzenie konta" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Auto account creation" msgstr "Automatyczne utworzenie konta" -#: src/rc_formatters.py:83 +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "{user} wywołał(a) \"{abuse_filter}\"" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "Wykonano" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "Podjęte działania" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "Tytuł" + +#: extensions/base/abusefilter.py:66 #, python-brace-format msgid "" "[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " @@ -291,19 +762,85 @@ msgstr "" "[{author}]({author_url}) wywołał(a) *{abuse_filter}*, wykonując akcję " "\"{action}\" w *[{target}]({target_url})* - podjęte działanie: {result}" -#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 -#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 -#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 -#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 -#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 -#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 -#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 -#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 -#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 -msgid "Unknown" -msgstr "Nieznana" +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "Edytowano filtr nadużyć numer {number}" -#: src/rc_formatters.py:116 +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) edytował(a) filtr nadużyć [numer {number}]" +"({filter_url})" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "Utworzono filtr nadużyć numer {number}" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) stworzył(a) filtr nadużyć [numer {number}]" +"({filter_url})" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "(N!) " + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "d" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "b" + +#: extensions/base/mediawiki.py:112 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" @@ -312,7 +849,7 @@ msgstr "" "[{author}]({author_url}) edytował(a) [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" -#: src/rc_formatters.py:118 +#: extensions/base/mediawiki.py:117 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" @@ -321,19 +858,55 @@ msgstr "" "[{author}]({author_url}) stworzył(a) [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" -#: src/rc_formatters.py:121 -#, python-brace-format -msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" -msgstr "[{author}]({author_url}) przesłał(a) [{file}]({file_link}){comment}" +#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +msgid "Options" +msgstr "Opcje" -#: src/rc_formatters.py:128 +#: extensions/base/mediawiki.py:191 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([podgląd]({link}) | [wycofaj]({undolink}))" + +#: extensions/base/mediawiki.py:196 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "Przesłał(a) nową wersję {name}" + +#: extensions/base/mediawiki.py:198 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "Wycofał(a) wersję {name}" + +#: extensions/base/mediawiki.py:200 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "Przesłał(a) {name}" + +#: extensions/base/mediawiki.py:209 +msgid "**No license!**" +msgstr "**Brak licencji!**" + +#: extensions/base/mediawiki.py:224 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"Licencja: {}" + +#: extensions/base/mediawiki.py:226 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([podgląd]({link}))" + +#: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" msgstr "" "[{author}]({author_url}) wycofał(a) wersję [{file}]({file_link}){comment}" -#: src/rc_formatters.py:132 +#: extensions/base/mediawiki.py:248 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -342,12 +915,28 @@ msgstr "" "[{author}]({author_url}) przesłał(a) nową wersję [{file}]({file_link})" "{comment}" -#: src/rc_formatters.py:135 +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) przesłał(a) [{file}]({file_link}){comment}" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "Usunął stronę {article}" + +#: extensions/base/mediawiki.py:283 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" -#: src/rc_formatters.py:141 +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" +"Usunął przekierowanie ({article}), aby zrobić miejsce dla przenoszonej strony" + +#: extensions/base/mediawiki.py:308 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -356,249 +945,36 @@ msgstr "" "[{author}]({author_url}) usunął przekierowanie przez nadpisanie [{page}]" "({page_link}){comment}" -#: src/rc_formatters.py:147 src/rc_formatters.py:152 -msgid "without making a redirect" -msgstr "bez utworzenia przekierowania" - -#: src/rc_formatters.py:147 src/rc_formatters.py:153 -msgid "with a redirect" -msgstr "z przekierowaniem" - -#: src/rc_formatters.py:148 +#: extensions/base/mediawiki.py:322 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" +msgid "Restored {article}" +msgstr "Przywrócono {article}" + +#: extensions/base/mediawiki.py:331 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" -"[{author}]({author_url}) przeniósł {redirect}*{article}* do [{target}]" -"({target_url}) {made_a_redirect}{comment}" +"[{author}]({author_url}) odtworzył(a) [{article}]({article_url}){comment}" -#: src/rc_formatters.py:154 +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "Zmieniono widoczność wpisów rejestru" + +#: extensions/base/mediawiki.py:356 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -"[{target}]({target_url}) {made_a_redirect}{comment}" +msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "" -"[{author}]({author_url}) przeniósł {redirect}*{article}* do przekierowania " -"[{target}]({target_url}) {made_a_redirect}{comment}" +"[{author}]({author_url}) zmienił(a) widoczność wpisów rejestru{comment}" -#: src/rc_formatters.py:159 +#: extensions/base/mediawiki.py:370 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) przeniósł ustawienia zabezpieczeń z {redirect}" -"*{article}* do [{target}]({target_url}){comment}" +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "Zmieniono widoczność wersji na stronie {article} " +msgstr[1] "Zmieniono widoczność {amount} wersji na stronie {article} " +msgstr[2] "Zmieniono widoczność {amount} wersji na stronie {article} " -#: src/rc_formatters.py:170 src/rc_formatters.py:855 -msgid "for infinity and beyond" -msgstr "na wieczność" - -#: src/rc_formatters.py:179 src/rc_formatters.py:863 -#, python-brace-format -msgid "for {num} {translated_length}" -msgstr "na {num} {translated_length}" - -#: src/rc_formatters.py:185 src/rc_formatters.py:867 -msgid "until {}" -msgstr "do {}" - -#: src/rc_formatters.py:189 -msgid " on pages: " -msgstr " na stronach: " - -#: src/rc_formatters.py:196 src/rc_formatters.py:881 -msgid " and namespaces: " -msgstr " oraz przestrzeniach nazw: " - -#: src/rc_formatters.py:198 -msgid " on namespaces: " -msgstr " na przestrzeniach nazw: " - -#: src/rc_formatters.py:210 -#, python-brace-format -msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" -msgstr "" -"[{author}]({author_url}) zablokował(a) [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" - -#: src/rc_formatters.py:214 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) zmienił(a) ustawienia blokady dla [{blocked_user}]" -"({user_url}){comment}" - -#: src/rc_formatters.py:218 -#, python-brace-format -msgid "" -"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) odblokował(a) [{blocked_user}]({user_url}){comment}" - -#: src/rc_formatters.py:223 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) zostawił(a) [komentarz]({comment}) na profilu " -"użytkownika {target}" - -#: src/rc_formatters.py:225 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) zostawił(a) [komentarz]({comment}) na swoim własnym " -"profilu" - -#: src/rc_formatters.py:231 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -"profile" -msgstr "" -"[{author}]({author_url}) odpowiedział(a) na [komentarz]({comment}) na " -"profilu użytkownika {target}" - -#: src/rc_formatters.py:237 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on their own " -"profile" -msgstr "" -"[{author}]({author_url}) odpowiedział(a) na [komentarz]({comment}) na swoim " -"własnym profilu" - -#: src/rc_formatters.py:245 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) edytował(a) [komentarz]({comment}) na profilu " -"użytkownika {target}" - -#: src/rc_formatters.py:251 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) edytował(a) [komentarz]({comment}) na swoim własnym " -"profilu" - -#: src/rc_formatters.py:257 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "" -"[{author}]({author_url}) usunął/usunęła permanentnie komentarz na profilu " -"użytkownika {target}" - -#: src/rc_formatters.py:259 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "" -"[{author}]({author_url}) usunął/usunęła permanentnie komentarz na swoim " -"własnym profilu" - -#: src/rc_formatters.py:267 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) usunął [komentarz]({comment}) na profilu " -"użytkownika {target}" - -#: src/rc_formatters.py:269 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) usunął [komentarz]({comment}) na swoim własnym " -"profilu" - -#: src/rc_formatters.py:274 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) edytował(a) pole {field} na profilu użytkownika " -"[{target}]({target_url}). *({desc})*" - -#: src/rc_formatters.py:281 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) edytował(a) pole {field} na [swoim własnym]" -"({target_url}) profilu. *({desc})*" - -#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 -#: src/rc_formatters.py:979 -msgid "none" -msgstr "brak" - -#: src/rc_formatters.py:301 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) from {old_groups} to {new_groups}{comment}" -msgstr "" -"[{author}]({author_url}) zmienił(a) przynależność do grup dla [{target}]" -"({target_url}) z {old_groups} na {new_groups}{comment}" - -#: src/rc_formatters.py:303 -#, python-brace-format -msgid "" -"{author} autopromoted [{target}]({target_url}) from {old_groups} to " -"{new_groups}{comment}" -msgstr "" -"{author} automatycznie zmienił przynależność do grup [{target}]" -"({target_url}) z {old_groups} na {new_groups}{comment}" - -#: src/rc_formatters.py:304 src/rc_formatters.py:965 -msgid "System" -msgstr "System" - -#: src/rc_formatters.py:309 -#, python-brace-format -msgid "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) zabezpieczył(a) [{article}]({article_url}) z " -"ustawieniami: {settings}{comment}" - -#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 -#: src/rc_formatters.py:993 -msgid " [cascading]" -msgstr " [kaskadowo]" - -#: src/rc_formatters.py:316 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) zmienił(a) ustawienia zabezpieczeń [{article}]" -"({article_url}) na: {settings}{comment}" - -#: src/rc_formatters.py:323 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) usunął zabezpieczenia z [{article}]({article_url})" -"{comment}" - -#: src/rc_formatters.py:327 +#: extensions/base/mediawiki.py:383 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -616,7 +992,237 @@ msgstr[2] "" "[{author}]({author_url}) zmienił(a) widoczność {amount} wersji strony " "[{article}]({article_url}){comment}" -#: src/rc_formatters.py:340 +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "Nie utworzono przekierowania" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "Zostało utworzone przekierowanie" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "Przeniósł {redirect}{article} do {target}" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "bez utworzenia przekierowania" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "z przekierowaniem" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) przeniósł {redirect}*{article}* do [{target}]" +"({target_url}) {made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "Przeniósł {redirect}{article} do strony przekierowującej {title}" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) przeniósł {redirect}*{article}* do przekierowania " +"[{target}]({target_url}) {made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "Przeniesiono ustawienia zabezpieczeń z {redirect}{article} do {title}" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) przeniósł ustawienia zabezpieczeń z {redirect}" +"*{article}* do [{target}]({target_url}){comment}" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "Zabezpieczono {target}" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr " [kaskadowo]" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) zabezpieczył(a) [{article}]({article_url}) z " +"ustawieniami: {settings}{comment}" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "Zmieniono poziom zabezpieczeń {article}" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) ustawienia zabezpieczeń [{article}]" +"({article_url}) na: {settings}{comment}" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "Usunięto zabezpieczenie z {article}" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) usunął zabezpieczenia z [{article}]({article_url})" +"{comment}" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "na wieczność" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:610 +msgid "Blocked from editing the following pages: " +msgstr "Blokada przed edytowaniem następujących stron: " + +#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr " oraz przestrzeniach nazw: " + +#: extensions/base/mediawiki.py:619 +msgid "Blocked from editing pages on following namespaces: " +msgstr "Blokada przed edytowaniem stron na następujących przestrzeniach nazw: " + +#: extensions/base/mediawiki.py:630 +msgid "Partial block details" +msgstr "Szczegóły częściowej blokady" + +#: extensions/base/mediawiki.py:633 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:635 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "Zablokowano {blocked_user} {time}" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr " na stronach: " + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr " na przestrzeniach nazw: " + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) zablokował(a) [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "Zmienił ustawienia blokady {blocked_user}" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) ustawienia blokady dla [{blocked_user}]" +"({user_url}){comment}" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "Odblokował {blocked_user}" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) odblokował(a) [{blocked_user}]({user_url}){comment}" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "Akcja została ukryta przez administrację" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "Akcja została ukryta przez administrację." + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "Zaimportowano {article} z {count} wersją" +msgstr[1] "Zaimportowano {article} z {count} wersjami" +msgstr[2] "Zaimportowano {article} z {count} wersjami" + +#: extensions/base/mediawiki.py:772 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -634,19 +1240,15 @@ msgstr[2] "" "[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z " "{count} wersjami{comment}" -#: src/rc_formatters.py:345 -#, python-brace-format -msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) odtworzył(a) [{article}]({article_url}){comment}" +#: extensions/base/mediawiki.py:788 +#, fuzzy, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "Zaimportowano {article} z {count} wersją" +msgstr[1] "Zaimportowano {article} z {count} wersjami" +msgstr[2] "Zaimportowano {article} z {count} wersjami" -#: src/rc_formatters.py:347 -#, python-brace-format -msgid "[{author}]({author_url}) changed visibility of log events{comment}" -msgstr "" -"[{author}]({author_url}) zmienił(a) widoczność wpisów rejestru{comment}" - -#: src/rc_formatters.py:359 +#: extensions/base/mediawiki.py:803 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -664,23 +1266,56 @@ msgstr[2] "" "[{author}]({author_url}) zaimportował(a) {count} wersji artykułu [{article}]" "({article_url}) z [{source}]({source_url}){comment}" -#: src/rc_formatters.py:364 +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:836 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "Zmieniono przynależność do grup dla {target}" + +#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +msgid "System" +msgstr "System" + +#: extensions/base/mediawiki.py:840 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} automatycznie otrzymał nową grupę użytkownika" + +#: extensions/base/mediawiki.py:846 #, python-brace-format msgid "" -"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +"{reason}\n" +"{added}{linebreak}{removed}" msgstr "" -"[{author}]({author_url}) edytował(a) filtr nadużyć [numer {number}]" -"({filter_url})" -#: src/rc_formatters.py:368 -#, python-brace-format +#: extensions/base/mediawiki.py:860 +#, fuzzy, python-brace-format msgid "" -"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) {added}{comma} {removed}{comment}" msgstr "" -"[{author}]({author_url}) stworzył(a) filtr nadużyć [numer {number}]" -"({filter_url})" +"[{author}]({author_url}) zmienił(a) przynależność do grup dla [{target}]" +"({target_url}) z {old_groups} na {new_groups}{comment}" -#: src/rc_formatters.py:372 +#: extensions/base/mediawiki.py:864 +#, fuzzy, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"{comment}" +msgstr "" +"{author} automatycznie zmienił przynależność do grup [{target}]" +"({target_url}) z {old_groups} na {new_groups}{comment}" + +#: extensions/base/mediawiki.py:877 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "Połączono historie {article} z {dest}" + +#: extensions/base/mediawiki.py:891 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -689,17 +1324,30 @@ msgstr "" "[{author}]({author_url}) połączył(a) historie zmian [{article}]" "({article_url}) z [{dest}]({dest_url}){comment}" -#: src/rc_formatters.py:375 +#: extensions/base/mediawiki.py:905 +msgid "Created account automatically" +msgstr "Konto zostało utworzone automatycznie" + +#: extensions/base/mediawiki.py:912 #, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "Konto [{author}]({author_url}) zostało utworzone automatycznie" -#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +msgid "Created account" +msgstr "Stworzono konto" + +#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 #, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "Konto [{author}]({author_url}) zostało utworzone" -#: src/rc_formatters.py:380 +#: extensions/base/mediawiki.py:944 +#, python-brace-format +msgid "Created account {article}" +msgstr "Utworzono konto {article}" + +#: extensions/base/mediawiki.py:953 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" @@ -708,7 +1356,12 @@ msgstr "" "Konto [{article}]({article_url}) zostało utworzone przez [{author}]" "({author_url}){comment}" -#: src/rc_formatters.py:383 +#: extensions/base/mediawiki.py:966 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "Utworzono konto {article} oraz wysłano hasło z użyciem emaila" + +#: extensions/base/mediawiki.py:977 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " @@ -717,7 +1370,16 @@ msgstr "" "Konto [{article}]({article_url}) zostało utworzone przez [{author}]" "({author_url}) oraz hasło do konta zostało przesłane przez email {comment}" -#: src/rc_formatters.py:388 +#: extensions/base/mediawiki.py:1009 +msgid "Added an entry to the interwiki table" +msgstr "Dodano wpis do tabeli interwiki" + +#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Prefix: {prefix}, strona: {website} | {desc}" + +#: extensions/base/mediawiki.py:1022 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -726,7 +1388,11 @@ msgstr "" "[{author}]({author_url}) dodał(a) do [tabeli interwiki]({table_url}) wpis " "{prefix}, który prowadzi do {website}" -#: src/rc_formatters.py:394 +#: extensions/base/mediawiki.py:1036 +msgid "Edited an entry in interwiki table" +msgstr "Edytowano wpis interwiki" + +#: extensions/base/mediawiki.py:1049 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -735,13 +1401,33 @@ msgstr "" "[{author}]({author_url}) edytował(a) w [tabeli interwiki]({table_url}) wpis " "{prefix}, który prowadzi do {website}" -#: src/rc_formatters.py:400 +#: extensions/base/mediawiki.py:1063 +msgid "Deleted an entry in interwiki table" +msgstr "Usunięto wpis interwiki" + +#: extensions/base/mediawiki.py:1064 #, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Prefix: {prefix} | {desc}" + +#: extensions/base/mediawiki.py:1074 +#, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" msgstr "[{author}]({author_url}) usunął wpis z [tabeli interwiki]({table_url})" -#: src/rc_formatters.py:403 +#: extensions/base/mediawiki.py:1091 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "Zmieniono model zawartości {article}" + +#: extensions/base/mediawiki.py:1093 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "Model został zmieniony z {old} na {new}: {reason}" + +#: extensions/base/mediawiki.py:1105 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -750,7 +1436,17 @@ msgstr "" "[{author}]({author_url}) zmienił(a) model zawartości [{article}]" "({article_url}) z {old} na {new}{comment}" -#: src/rc_formatters.py:407 +#: extensions/base/mediawiki.py:1120 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: extensions/base/mediawiki.py:1122 +#, fuzzy, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "Model został zmieniony z {old} na {new}: {reason}" + +#: extensions/base/mediawiki.py:1133 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " @@ -759,59 +1455,41 @@ msgstr "" "[{author}]({author_url}) utworzył(a) stronę [{article}]({article_url}) " "używając niedomyślnego modelu zawartości {new}{comment}" -#: src/rc_formatters.py:410 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" -msgstr "[{author}]({author_url}) edytował(a) sprite [{article}]({article_url})" +#: extensions/base/mediawiki.py:1148 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "Utworzono znacznik „{tag}”" -#: src/rc_formatters.py:413 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" -msgstr "" -"[{author}]({author_url}) utworzył(a) sprite sheet [{article}]({article_url})" - -#: src/rc_formatters.py:416 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the slice for [{article}]({article_url})" -msgstr "[{author}]({author_url}) edytował(a) slice [{article}]({article_url})" - -#: src/rc_formatters.py:421 -#, python-brace-format -msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) utworzył(a) tabelę Cargo „{table}”" - -#: src/rc_formatters.py:423 -#, python-brace-format -msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) usunął tabelę Cargo „{table}”" - -#: src/rc_formatters.py:428 -#, python-brace-format -msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) utworzył(a) ponownie tabelę Cargo „{table}”" - -#: src/rc_formatters.py:433 -#, python-brace-format -msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) zastąpił(a) tabelę Cargo „{table}”" - -#: src/rc_formatters.py:436 +#: extensions/base/mediawiki.py:1158 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) utworzył(a) [znacznik]({tag_url}) „{tag}”" -#: src/rc_formatters.py:441 +#: extensions/base/mediawiki.py:1180 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "Usunięto znacznik „{tag}”" + +#: extensions/base/mediawiki.py:1182 +#, fuzzy +msgid "Removed from" +msgstr "Usunięto" + +#: extensions/base/mediawiki.py:1182 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: extensions/base/mediawiki.py:1194 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) usunął [znacznik]({tag_url}) „{tag}”" -#: src/rc_formatters.py:443 +#: extensions/base/mediawiki.py:1204 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -829,255 +1507,45 @@ msgstr[2] "" "[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z " "{count} wersjami{comment}" -#: src/rc_formatters.py:449 +#: extensions/base/mediawiki.py:1221 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "Aktywowano znaczni „{tag}”" + +#: extensions/base/mediawiki.py:1230 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) aktywował(a) [znacznik]({tag_url}) „{tag}”" -#: src/rc_formatters.py:452 +#: extensions/base/mediawiki.py:1249 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "Dezaktywowano znacznik „{tag}”" + +#: extensions/base/mediawiki.py:1258 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) dezaktywował(a) [znacznik]({tag_url}) „{tag}”" -#: src/rc_formatters.py:454 +#: extensions/base/mediawiki.py:1278 #, python-brace-format -msgid "[{author}]({author_url}) changed wiki settings{reason}" -msgstr "[{author}]({author_url}) zmienił(a) ustawienia wiki{reason}" +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +"Zmienił(a) nazwę użytkownika „{old_name}” z jedną edycją na „{new_name}”" +msgstr[1] "" +"Zmienił(a) nazwę użytkownika „{old_name}” z {edits} edycjami na „{new_name}”" +msgstr[2] "" +"Zmienił(a) nazwę użytkownika „{old_name}” z {edits} edycjami na „{new_name}”" -#: src/rc_formatters.py:456 +#: extensions/base/mediawiki.py:1283 #, python-brace-format -msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) usunął/usunęła wiki *{wiki_name}*{comment}" +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "Zmieniono nazwę użytkownika „{old_name}” na „{new_name}”" -#: src/rc_formatters.py:459 -#, python-brace-format -msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) zablokował(a) wiki *{wiki_name}*{comment}" - -#: src/rc_formatters.py:462 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) modified namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) zmodyfikował(a) przestrzeń nazw *{namespace_name}* " -"na *{wiki_name}*{comment}" - -#: src/rc_formatters.py:467 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) usunął/usunęła przestrzeń nazw *{namespace_name}* " -"na *{wiki_name}*{comment}" - -#: src/rc_formatters.py:473 -#, python-brace-format -msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "" -"[{author}]({author_url}) zaimportował(a) grupę użytkownika *{group_name}" -"*{comment}" - -#: src/rc_formatters.py:477 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) usunął/usunęła wiki *{wiki_name}*{comment}" - -#: src/rc_formatters.py:481 -#, python-brace-format -msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) odblokował(a) wiki *{wiki_name}*{comment}" - -#: src/rc_formatters.py:486 -#, python-brace-format -msgid "[{author}]({author_url}) generated *{file}* dump{comment}" -msgstr "" -"[{author}]({author_url}) wygenerował(a) kopię zapasową w *{file}*{comment}" - -#: src/rc_formatters.py:491 -#, python-brace-format -msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" -msgstr "" -"[{author}]({author_url}) usunął/usunęła kopię zapasową *{file}*{comment}" - -#: src/rc_formatters.py:502 -#, python-brace-format -msgid "" -"[{author}]({author_url}) marked [{article}]({article_url}) for " -"translation{comment}" -msgstr "" -"[{author}]({author_url}) oznaczył(a) [{article}]({article_url}) do " -"tłumaczenia{comment}" - -#: src/rc_formatters.py:509 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed [{article}]({article_url}) from the " -"translation system{comment}" -msgstr "" -"[{author}]({author_url}) usunął/usunęła [{article}]({article_url}) z systemu " -"tłumaczeń{comment}" - -#: src/rc_formatters.py:516 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed moving translation pages from *{article}* " -"to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) zakończył(a) przenoszenie stron tłumaczeń z " -"*{article}* do [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:524 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encountered a problem while moving [{article}]" -"({article_url}) to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) napotkał(a) problem podczas przenoszenia [{article}]" -"({article_url}) do [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:532 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translatable page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) zakończył(a) usuwanie tłumaczonej strony [{article}]" -"({article_url}){comment}" - -#: src/rc_formatters.py:540 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translatable page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z jedną " -"wersją{comment}" - -#: src/rc_formatters.py:548 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translation page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) zmienił(a) widoczność wersji strony [{article}]" -"({article_url}){comment}" - -#: src/rc_formatters.py:556 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translation page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z jedną " -"wersją{comment}" - -#: src/rc_formatters.py:564 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) usunął zabezpieczenia z [{article}]({article_url})" -"{comment}" - -#: src/rc_formatters.py:571 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) discouraged translation of [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) odtworzył(a) [{article}]({article_url}){comment}" - -#: src/rc_formatters.py:581 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " -"`{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) zmienił(a) ustawienia zabezpieczeń [{article}]" -"({article_url}) na: {settings}{comment}" - -#: src/rc_formatters.py:587 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) set the priority languages for [{article}]" -"({article_url}) to `{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) zmienił(a) ustawienia zabezpieczeń [{article}]" -"({article_url}) na: {settings}{comment}" - -#: src/rc_formatters.py:593 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) removed priority languages from [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) usunął zabezpieczenia z [{article}]({article_url})" -"{comment}" - -#: src/rc_formatters.py:600 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) added translatable page [{article}]({article_url}) " -"to aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) zmienił(a) model zawartości [{article}]" -"({article_url}) z {old} na {new}{comment}" - -#: src/rc_formatters.py:607 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) removed translatable page [{article}]" -"({article_url}) from aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) usunął zabezpieczenia z [{article}]({article_url})" -"{comment}" - -#: src/rc_formatters.py:619 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) reviewed translation [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) odtworzył(a) [{article}]({article_url}){comment}" - -#: src/rc_formatters.py:627 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) zmienił(a) model zawartości [{article}]" -"({article_url}) z {old} na {new}{comment}" - -#: src/rc_formatters.py:634 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) zmienił(a) model zawartości [{article}]" -"({article_url}) z {old} na {new}{comment}" - -#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 -#: src/rc_formatters.py:1241 -msgid "(default)" -msgstr "" - -#: src/rc_formatters.py:647 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) changed the language of [{article}]({article_url}) " -"from {old_lang} to {new_lang}{comment}" -msgstr "" -"[{author}]({author_url}) zmienił(a) model zawartości [{article}]" -"({article_url}) z {old} na {new}{comment}" - -#: src/rc_formatters.py:656 +#: extensions/base/mediawiki.py:1298 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " @@ -1089,641 +1557,232 @@ msgstr[0] "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" msgstr[1] "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" msgstr[2] "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" -#: src/rc_formatters.py:661 +#: extensions/base/mediawiki.py:1306 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" "{comment}" msgstr "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" -#: src/rc_formatters.py:665 -msgid "An action has been hidden by administration." -msgstr "Akcja została ukryta przez administrację." - -#: src/rc_formatters.py:681 -#, python-brace-format -msgid "{user} triggered \"{abuse_filter}\"" -msgstr "{user} wywołał(a) \"{abuse_filter}\"" - -#: src/rc_formatters.py:682 -msgid "Performed" -msgstr "Wykonano" - -#: src/rc_formatters.py:683 -msgid "Action taken" -msgstr "Podjęte działania" - -#: src/rc_formatters.py:684 -msgid "Title" -msgstr "Tytuł" - -#: src/rc_formatters.py:693 src/rc_formatters.py:980 -msgid "No description provided" -msgstr "Nie podano opisu zmian" - -#: src/rc_formatters.py:717 -msgid "(N!) " -msgstr "(N!) " - -#: src/rc_formatters.py:718 -msgid "m" -msgstr "d" - -#: src/rc_formatters.py:718 -msgid "b" -msgstr "b" - -#: src/rc_formatters.py:735 src/rc_formatters.py:740 -msgid "__Only whitespace__" -msgstr "__Tylko znaki niedrukowane__" - -#: src/rc_formatters.py:745 -msgid "Removed" -msgstr "Usunięto" - -#: src/rc_formatters.py:747 -msgid "Added" -msgstr "Dodano" - -#: src/rc_formatters.py:781 src/rc_formatters.py:820 -msgid "Options" -msgstr "Opcje" - -#: src/rc_formatters.py:781 -#, python-brace-format -msgid "([preview]({link}) | [undo]({undolink}))" -msgstr "([podgląd]({link}) | [wycofaj]({undolink}))" - -#: src/rc_formatters.py:786 -#, python-brace-format -msgid "Uploaded a new version of {name}" -msgstr "Przesłał(a) nową wersję {name}" - -#: src/rc_formatters.py:788 -#, python-brace-format -msgid "Reverted a version of {name}" -msgstr "Wycofał(a) wersję {name}" - -#: src/rc_formatters.py:790 -#, python-brace-format -msgid "Uploaded {name}" -msgstr "Przesłał(a) {name}" - -#: src/rc_formatters.py:806 -msgid "**No license!**" -msgstr "**Brak licencji!**" - -#: src/rc_formatters.py:818 -msgid "" -"\n" -"License: {}" -msgstr "" -"\n" -"Licencja: {}" - -#: src/rc_formatters.py:820 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "([podgląd]({link}))" - -#: src/rc_formatters.py:825 -#, python-brace-format -msgid "Deleted page {article}" -msgstr "Usunął stronę {article}" - -#: src/rc_formatters.py:830 -#, python-brace-format -msgid "Deleted redirect {article} by overwriting" -msgstr "" -"Usunął przekierowanie ({article}), aby zrobić miejsce dla przenoszonej strony" - -#: src/rc_formatters.py:836 -msgid "No redirect has been made" -msgstr "Nie utworzono przekierowania" - -#: src/rc_formatters.py:837 -msgid "A redirect has been made" -msgstr "Zostało utworzone przekierowanie" - -#: src/rc_formatters.py:838 -#, python-brace-format -msgid "Moved {redirect}{article} to {target}" -msgstr "Przeniósł {redirect}{article} do {target}" - -#: src/rc_formatters.py:841 -#, python-brace-format -msgid "Moved {redirect}{article} to {title} over redirect" -msgstr "Przeniósł {redirect}{article} do strony przekierowującej {title}" - -#: src/rc_formatters.py:845 -#, python-brace-format -msgid "Moved protection settings from {redirect}{article} to {title}" -msgstr "Przeniesiono ustawienia zabezpieczeń z {redirect}{article} do {title}" - -#: src/rc_formatters.py:869 -msgid "unknown expiry time" -msgstr "nieznany czas zakończenia" - -#: src/rc_formatters.py:874 -msgid "Blocked from editing the following pages: " -msgstr "Blokada przed edytowaniem następujących stron: " - -#: src/rc_formatters.py:883 -msgid "Blocked from editing pages on following namespaces: " -msgstr "Blokada przed edytowaniem stron na następujących przestrzeniach nazw: " - -#: src/rc_formatters.py:894 -msgid "Partial block details" -msgstr "Szczegóły częściowej blokady" - -#: src/rc_formatters.py:895 -#, python-brace-format -msgid "Blocked {blocked_user} {time}" -msgstr "Zablokowano {blocked_user} {time}" - -#: src/rc_formatters.py:899 -#, python-brace-format -msgid "Changed block settings for {blocked_user}" -msgstr "Zmienił ustawienia blokady {blocked_user}" - -#: src/rc_formatters.py:903 -#, python-brace-format -msgid "Unblocked {blocked_user}" -msgstr "Odblokował {blocked_user}" - -#: src/rc_formatters.py:910 -#, python-brace-format -msgid "Left a comment on {target}'s profile" -msgstr "Zostawiono komentarz na profilu użytkownika {target}" - -#: src/rc_formatters.py:912 -msgid "Left a comment on their own profile" -msgstr "Zostawił(a) komentarz na swoim profilu" - -#: src/rc_formatters.py:919 -#, python-brace-format -msgid "Replied to a comment on {target}'s profile" -msgstr "Odpowiedziano na komentarz na profilu użytkownika {target}" - -#: src/rc_formatters.py:921 -msgid "Replied to a comment on their own profile" -msgstr "Odpowiedział(a) na komentarz na swoim profilu" - -#: src/rc_formatters.py:928 -#, python-brace-format -msgid "Edited a comment on {target}'s profile" -msgstr "Edytowano komentarz na profilu użytkownika {target}" - -#: src/rc_formatters.py:930 -msgid "Edited a comment on their own profile" -msgstr "Edytował(a) komentarz na swoim profilu" - -#: src/rc_formatters.py:935 -#, python-brace-format -msgid "Edited {target}'s profile" -msgstr "Edytowano profil użytkownika {target}" - -#: src/rc_formatters.py:937 -msgid "Edited their own profile" -msgstr "Edytował(a) swój profil" - -#: src/rc_formatters.py:939 -#, python-brace-format -msgid "Cleared the {field} field" -msgstr "Wyczyszczono pole {field}" - -#: src/rc_formatters.py:941 -#, python-brace-format -msgid "{field} field changed to: {desc}" -msgstr "pole „{field}” zostało zmienione na: {desc}" - -#: src/rc_formatters.py:946 -#, python-brace-format -msgid "Purged a comment on {target}'s profile" -msgstr "Usunął permanentnie komentarz na profilu użytkownika {target}" - -#: src/rc_formatters.py:948 -#, fuzzy -msgid "Purged a comment on their own profile" -msgstr "Edytował(a) komentarz na swoim profilu" - -#: src/rc_formatters.py:956 -#, python-brace-format -msgid "Deleted a comment on {target}'s profile" -msgstr "Usunął komentarz na profilu użytkownika {target}" - -#: src/rc_formatters.py:958 -#, fuzzy -msgid "Deleted a comment on their own profile" -msgstr "Edytował(a) komentarz na swoim profilu" - -#: src/rc_formatters.py:962 -#, python-brace-format -msgid "Changed group membership for {target}" -msgstr "Zmieniono przynależność do grup dla {target}" - -#: src/rc_formatters.py:966 -#, python-brace-format -msgid "{target} got autopromoted to a new usergroup" -msgstr "{target} automatycznie otrzymał nową grupę użytkownika" - -#: src/rc_formatters.py:981 -#, python-brace-format -msgid "Groups changed from {old_groups} to {new_groups}{reason}" -msgstr "Grupy zmienione z {old_groups} do {new_groups}{reason}" - -#: src/rc_formatters.py:985 -#, python-brace-format -msgid "Protected {target}" -msgstr "Zabezpieczono {target}" - -#: src/rc_formatters.py:991 -#, python-brace-format -msgid "Changed protection level for {article}" -msgstr "Zmieniono poziom zabezpieczeń {article}" - -#: src/rc_formatters.py:997 -#, python-brace-format -msgid "Removed protection from {article}" -msgstr "Usunięto zabezpieczenie z {article}" - -#: src/rc_formatters.py:1001 -#, python-brace-format -msgid "Changed visibility of revision on page {article} " -msgid_plural "Changed visibility of {amount} revisions on page {article} " -msgstr[0] "Zmieniono widoczność wersji na stronie {article} " -msgstr[1] "Zmieniono widoczność {amount} wersji na stronie {article} " -msgstr[2] "Zmieniono widoczność {amount} wersji na stronie {article} " - -#: src/rc_formatters.py:1013 -#, python-brace-format -msgid "Imported {article} with {count} revision" -msgid_plural "Imported {article} with {count} revisions" -msgstr[0] "Zaimportowano {article} z {count} wersją" -msgstr[1] "Zaimportowano {article} z {count} wersjami" -msgstr[2] "Zaimportowano {article} z {count} wersjami" - -#: src/rc_formatters.py:1018 -#, python-brace-format -msgid "Restored {article}" -msgstr "Przywrócono {article}" - -#: src/rc_formatters.py:1021 -msgid "Changed visibility of log events" -msgstr "Zmieniono widoczność wpisów rejestru" - -#: src/rc_formatters.py:1031 -#, fuzzy, python-brace-format -msgid "Imported {article} with {count} revision from \"{source}\"" -msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "Zaimportowano {article} z {count} wersją" -msgstr[1] "Zaimportowano {article} z {count} wersjami" -msgstr[2] "Zaimportowano {article} z {count} wersjami" - -#: src/rc_formatters.py:1036 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "Edytowano filtr nadużyć numer {number}" - -#: src/rc_formatters.py:1039 -#, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "Utworzono filtr nadużyć numer {number}" - -#: src/rc_formatters.py:1042 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "Połączono historie {article} z {dest}" - -#: src/rc_formatters.py:1046 -msgid "Created account automatically" -msgstr "Konto zostało utworzone automatycznie" - -#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 -msgid "Created account" -msgstr "Stworzono konto" - -#: src/rc_formatters.py:1052 -#, python-brace-format -msgid "Created account {article}" -msgstr "Utworzono konto {article}" - -#: src/rc_formatters.py:1055 -#, python-brace-format -msgid "Created account {article} and password was sent by email" -msgstr "Utworzono konto {article} oraz wysłano hasło z użyciem emaila" - -#: src/rc_formatters.py:1061 -msgid "Added an entry to the interwiki table" -msgstr "Dodano wpis do tabeli interwiki" - -#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "Prefix: {prefix}, strona: {website} | {desc}" - -#: src/rc_formatters.py:1067 -msgid "Edited an entry in interwiki table" -msgstr "Edytowano wpis interwiki" - -#: src/rc_formatters.py:1073 -msgid "Deleted an entry in interwiki table" -msgstr "Usunięto wpis interwiki" - -#: src/rc_formatters.py:1074 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "Prefix: {prefix} | {desc}" - -#: src/rc_formatters.py:1077 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "Zmieniono model zawartości {article}" - -#: src/rc_formatters.py:1078 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "Model został zmieniony z {old} na {new}: {reason}" - -#: src/rc_formatters.py:1083 -#, python-brace-format -msgid "Created the page {article} using a non-default content model" -msgstr "" - -#: src/rc_formatters.py:1084 -#, fuzzy, python-brace-format -msgid "Created with model {new}: {reason}" -msgstr "Model został zmieniony z {old} na {new}: {reason}" - -#: src/rc_formatters.py:1087 +#: extensions/base/sprite.py:37 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Edytowano sprite dla {article}" -#: src/rc_formatters.py:1090 +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "[{author}]({author_url}) edytował(a) sprite [{article}]({article_url})" + +#: extensions/base/sprite.py:60 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Utworzono sprite sheet dla {article}" -#: src/rc_formatters.py:1093 +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) utworzył(a) sprite sheet [{article}]({article_url})" + +#: extensions/base/sprite.py:79 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Edytowano część sprite dla {article}" -#: src/rc_formatters.py:1099 +#: extensions/base/sprite.py:86 #, python-brace-format -msgid "Created the Cargo table \"{table}\"" -msgstr "Utworzono tabelę Cargo „{table}”" +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "[{author}]({author_url}) edytował(a) slice [{article}]({article_url})" -#: src/rc_formatters.py:1103 #, python-brace-format -msgid "Deleted the Cargo table \"{table}\"" -msgstr "Usunięto tabelę Cargo „{table}”" +#~ msgid "" +#~ "Unknown event `{event}` by [{author}]({author_url}), report it on the " +#~ "[support server](<{support}>)." +#~ msgstr "" +#~ "Nieznane wydarzenie `{event}` wykonane przez [{author}]({author_url}), " +#~ "zgłoś je na [serwerze wsparcia](<{support}>)." -#: src/rc_formatters.py:1110 #, python-brace-format -msgid "Recreated the Cargo table \"{table}\"" -msgstr "Utworzono ponownie tabelę Cargo „{table}”" +#~ msgid "Unknown event `{event}`" +#~ msgstr "Nieznane wydarzenie `{event}`" + +#~ msgid "Report this on the support server" +#~ msgstr "Zgłoś to na serwerze wsparcia" -#: src/rc_formatters.py:1117 #, python-brace-format -msgid "Replaced the Cargo table \"{table}\"" -msgstr "Zastąpiono tabelę Cargo „{table}”" +#~ msgid "for {num} {translated_length}" +#~ msgstr "na {num} {translated_length}" -#: src/rc_formatters.py:1121 -#, fuzzy, python-brace-format -msgid "Created the tag \"{tag}\"" -msgstr "Utworzono znacznik „{tag}”" +#~ msgid "until {}" +#~ msgstr "do {}" -#: src/rc_formatters.py:1125 -#, fuzzy, python-brace-format -msgid "Deleted the tag \"{tag}\"" -msgstr "Usunięto znacznik „{tag}”" +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) zostawił(a) [komentarz]({comment}) na profilu " +#~ "użytkownika {target}" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) zostawił(a) [komentarz]({comment}) na swoim " +#~ "własnym profilu" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) odpowiedział(a) na [komentarz]({comment}) na " +#~ "profilu użytkownika {target}" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) odpowiedział(a) na [komentarz]({comment}) na " +#~ "swoim własnym profilu" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) edytował(a) [komentarz]({comment}) na profilu " +#~ "użytkownika {target}" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) edytował(a) [komentarz]({comment}) na swoim " +#~ "własnym profilu" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) usunął/usunęła permanentnie komentarz na profilu " +#~ "użytkownika {target}" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) purged a comment on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) usunął/usunęła permanentnie komentarz na swoim " +#~ "własnym profilu" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) usunął [komentarz]({comment}) na profilu " +#~ "użytkownika {target}" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) usunął [komentarz]({comment}) na swoim własnym " +#~ "profilu" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) edytował(a) pole {field} na profilu użytkownika " +#~ "[{target}]({target_url}). *({desc})*" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) edytował(a) pole {field} na [swoim własnym]" +#~ "({target_url}) profilu. *({desc})*" + +#~ msgid "none" +#~ msgstr "brak" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) completed deletion of translatable page " +#~ "[{article}]({article_url}){comment}" +#~ msgstr "" +#~ "[{author}]({author_url}) zakończył(a) usuwanie tłumaczonej strony " +#~ "[{article}]({article_url}){comment}" + +#~ msgid "No description provided" +#~ msgstr "Nie podano opisu zmian" + +#~ msgid "unknown expiry time" +#~ msgstr "nieznany czas zakończenia" + +#, python-brace-format +#~ msgid "Left a comment on {target}'s profile" +#~ msgstr "Zostawiono komentarz na profilu użytkownika {target}" + +#~ msgid "Left a comment on their own profile" +#~ msgstr "Zostawił(a) komentarz na swoim profilu" + +#, python-brace-format +#~ msgid "Replied to a comment on {target}'s profile" +#~ msgstr "Odpowiedziano na komentarz na profilu użytkownika {target}" + +#~ msgid "Replied to a comment on their own profile" +#~ msgstr "Odpowiedział(a) na komentarz na swoim profilu" + +#, python-brace-format +#~ msgid "Edited a comment on {target}'s profile" +#~ msgstr "Edytowano komentarz na profilu użytkownika {target}" + +#~ msgid "Edited a comment on their own profile" +#~ msgstr "Edytował(a) komentarz na swoim profilu" + +#, python-brace-format +#~ msgid "Edited {target}'s profile" +#~ msgstr "Edytowano profil użytkownika {target}" + +#~ msgid "Edited their own profile" +#~ msgstr "Edytował(a) swój profil" + +#, python-brace-format +#~ msgid "Cleared the {field} field" +#~ msgstr "Wyczyszczono pole {field}" + +#, python-brace-format +#~ msgid "{field} field changed to: {desc}" +#~ msgstr "pole „{field}” zostało zmienione na: {desc}" + +#, python-brace-format +#~ msgid "Purged a comment on {target}'s profile" +#~ msgstr "Usunął permanentnie komentarz na profilu użytkownika {target}" -#: src/rc_formatters.py:1127 #, fuzzy -msgid "Removed from" -msgstr "Usunięto" +#~ msgid "Purged a comment on their own profile" +#~ msgstr "Edytował(a) komentarz na swoim profilu" -#: src/rc_formatters.py:1127 -msgid "{} revision or log entry" -msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: src/rc_formatters.py:1131 -#, fuzzy, python-brace-format -msgid "Activated the tag \"{tag}\"" -msgstr "Aktywowano znaczni „{tag}”" - -#: src/rc_formatters.py:1134 -#, fuzzy, python-brace-format -msgid "Deactivated the tag \"{tag}\"" -msgstr "Dezaktywowano znacznik „{tag}”" - -#: src/rc_formatters.py:1137 -msgid "Changed wiki settings" -msgstr "Zmieniono ustawienia wiki" - -#: src/rc_formatters.py:1141 #, python-brace-format -msgid "Deleted a \"{wiki}\" wiki" -msgstr "Usunięto wiki „{wiki}”" +#~ msgid "Deleted a comment on {target}'s profile" +#~ msgstr "Usunął komentarz na profilu użytkownika {target}" + +#, fuzzy +#~ msgid "Deleted a comment on their own profile" +#~ msgstr "Edytował(a) komentarz na swoim profilu" -#: src/rc_formatters.py:1144 #, python-brace-format -msgid "Locked a \"{wiki}\" wiki" -msgstr "Zablokowano wiki „{wiki}”" - -#: src/rc_formatters.py:1147 -#, fuzzy, python-brace-format -msgid "Modified \"{namespace_name}\" namespace" -msgstr "Modyfikowano przestrzeń nazw „{namespace_name}”" - -#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 -msgid "Wiki" -msgstr "Wiki" - -#: src/rc_formatters.py:1151 -#, python-brace-format -msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "Usunięto przestrzeń nazw „{namespace_name}”" - -#: src/rc_formatters.py:1157 -#, python-brace-format -msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "Modyfikowano grupę użytkowników „{usergroup_name}”" - -#: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format -msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Usunięto wiki „{wiki}”" - -#: src/rc_formatters.py:1163 -#, python-brace-format -msgid "Unlocked a \"{wiki}\" wiki" -msgstr "Odblokowano wiki „{wiki}”" - -#: src/rc_formatters.py:1166 -#, python-brace-format -msgid "Generated {file} dump" -msgstr "" - -#: src/rc_formatters.py:1169 -#, fuzzy, python-brace-format -msgid "Deleted {file} dump" -msgstr "Usunął stronę {article}" - -#: src/rc_formatters.py:1177 -#, python-brace-format -msgid "Marked \"{article}\" for translation" -msgstr "" - -#: src/rc_formatters.py:1180 -#, python-brace-format -msgid "Removed \"{article}\" from the translation system" -msgstr "" - -#: src/rc_formatters.py:1183 -#, python-brace-format -msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1186 -#, python-brace-format -msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1189 -#, python-brace-format -msgid "Completed deletion of translatable page \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1192 -#, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translatable page " -"\"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1195 -#, fuzzy, python-brace-format -msgid "Completed deletion of translation page \"{article}\"" -msgstr "Zmieniono widoczność wersji na stronie {article} " - -#: src/rc_formatters.py:1198 -#, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1201 -#, fuzzy, python-brace-format -msgid "Encouraged translation of \"{article}\"" -msgstr "Usunięto zabezpieczenie z {article}" - -#: src/rc_formatters.py:1204 -#, python-brace-format -msgid "Discouraged translation of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1210 -#, python-brace-format -msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1212 -#, python-brace-format -msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1214 -#, fuzzy, python-brace-format -msgid "Removed priority languages from \"{article}\"" -msgstr "Usunięto zabezpieczenie z {article}" - -#: src/rc_formatters.py:1217 -#, python-brace-format -msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1220 -#, python-brace-format -msgid "" -"Removed translatable page \"{article}\" from aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1227 -#, fuzzy, python-brace-format -msgid "Reviewed translation \"{article}\"" -msgstr "Usunięto zabezpieczenie z {article}" - -#: src/rc_formatters.py:1230 -#, python-brace-format -msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1232 -msgid "Old state" -msgstr "" - -#: src/rc_formatters.py:1233 -msgid "New state" -msgstr "" - -#: src/rc_formatters.py:1242 -#, fuzzy, python-brace-format -msgid "Changed the language of \"{article}\"" -msgstr "Usunięto zabezpieczenie z {article}" - -#: src/rc_formatters.py:1243 -msgid "Old language" -msgstr "" - -#: src/rc_formatters.py:1244 -msgid "New language" -msgstr "" - -#: src/rc_formatters.py:1248 -#, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -"Zmienił(a) nazwę użytkownika „{old_name}” z jedną edycją na „{new_name}”" -msgstr[1] "" -"Zmienił(a) nazwę użytkownika „{old_name}” z {edits} edycjami na „{new_name}”" -msgstr[2] "" -"Zmienił(a) nazwę użytkownika „{old_name}” z {edits} edycjami na „{new_name}”" - -#: src/rc_formatters.py:1250 -#, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "Zmieniono nazwę użytkownika „{old_name}” na „{new_name}”" - -#: src/rc_formatters.py:1254 -msgid "Action has been hidden by administration" -msgstr "Akcja została ukryta przez administrację" - -#: src/rc_formatters.py:1288 -msgid "**Added**: " -msgstr "**Dodane**: " - -#: src/rc_formatters.py:1288 -msgid " and {} more\n" -msgstr " oraz {} innych\n" - -#: src/rc_formatters.py:1289 -msgid "**Removed**: " -msgstr "**Usunięte**: " - -#: src/rc_formatters.py:1289 -msgid " and {} more" -msgstr " oraz {} innych" - -#: src/rc_formatters.py:1290 -msgid "Changed categories" -msgstr "Zmienione kategorie" +#~ msgid "Groups changed from {old_groups} to {new_groups}{reason}" +#~ msgstr "Grupy zmienione z {old_groups} do {new_groups}{reason}" #, python-brace-format #~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" diff --git a/locale/pl/LC_MESSAGES/misc.po b/locale/pl/LC_MESSAGES/misc.po index cabdf2d..5f81e65 100644 --- a/locale/pl/LC_MESSAGES/misc.po +++ b/locale/pl/LC_MESSAGES/misc.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-28 23:45+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-03-17 20:57+0100\n" "Last-Translator: Frisk <>\n" "Language-Team: \n" @@ -19,59 +19,59 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Location" msgstr "Lokacja" -#: src/misc.py:45 +#: src/misc.py:44 msgid "About me" msgstr "O mnie" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Google link" msgstr "link Google" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Facebook link" msgstr "link Facebook" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitter link" msgstr "link Twitter" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Reddit link" msgstr "link Reddit" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitch link" msgstr "link Twitch" -#: src/misc.py:45 +#: src/misc.py:44 msgid "PSN link" msgstr "link PSN" -#: src/misc.py:45 +#: src/misc.py:44 msgid "VK link" msgstr "link VK" -#: src/misc.py:45 +#: src/misc.py:44 msgid "XBL link" msgstr "link XBL" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Steam link" msgstr "link Steam" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Discord handle" msgstr "konto Discord" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Battle.net handle" msgstr "konto Battle.net" -#: src/misc.py:119 +#: src/misc.py:138 msgid "" "\n" "__And more__" @@ -79,10 +79,10 @@ msgstr "" "\n" "__Oraz więcej__" -#: src/misc.py:276 +#: src/misc.py:322 msgid "Unknown" msgstr "Nieznana" -#: src/misc.py:278 +#: src/misc.py:324 msgid "unknown" msgstr "nieznana sekcja" diff --git a/locale/pl/LC_MESSAGES/rcgcdw.po b/locale/pl/LC_MESSAGES/rcgcdw.po index 527280b..99de0f9 100644 --- a/locale/pl/LC_MESSAGES/rcgcdw.po +++ b/locale/pl/LC_MESSAGES/rcgcdw.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-10-14 18:41+0000\n" "Last-Translator: Rail <>\n" "Language-Team: Polish =2 && n%10<=4 && (n%100<12 " "|| n%100>14) ? 1 : 2);\n" -#: src/discord/redaction.py:62 src/discord/redaction.py:65 -#: src/discord/redaction.py:70 +#: src/discord/redaction.py:77 src/discord/redaction.py:80 +#: src/discord/redaction.py:85 msgid "Removed" msgstr "Usunięte" diff --git a/locale/pt-br/LC_MESSAGES/formatters.po b/locale/pt-br/LC_MESSAGES/formatters.po index d2a12da..7c1e17a 100644 --- a/locale/pt-br/LC_MESSAGES/formatters.po +++ b/locale/pt-br/LC_MESSAGES/formatters.po @@ -12,24 +12,9 @@ #, fuzzy msgid "" msgstr "" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" -"PO-Revision-Date: 2020-12-13 14:30+0000\n" -"Last-Translator: MarkusRost \n" -"Language-Team: Portuguese (Brazil) \n" -"Language: pt-br\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-12-29 15:21+0000\n" "Last-Translator: Eduaddad \n" "Language-Team: Portuguese (Brazil) 1;\n" "X-Generator: Weblate 4.2.1\n" -#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 -#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 -#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 -msgid "unknown" -msgstr "desconhecido" +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" +msgstr "__Apenas espaço em branco__" -#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 -#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 -#: src/rc_formatters.py:75 src/rc_formatters.py:96 +#: src/api/util.py:71 +msgid "Removed" +msgstr "Removido" + +#: src/api/util.py:73 +msgid "Added" +msgstr "Adicionado" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 msgid "Unregistered user" msgstr "Usuário não registrado" -#: src/discussion_formatters.py:39 +#: src/api/util.py:160 extensions/base/discussions.py:193 +#: extensions/base/discussions.py:195 +msgid "Tags" +msgstr "Etiquetas" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "**Adicionado**: " + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr " e {} mais\n" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "**Removida**: " + +#: src/api/util.py:166 +msgid " and {} more" +msgstr " e {} mais" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "Mudanças de categorias" + +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "Criou a tabela Cargo \"{table}\"" + +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) criou a tabela Cargo \"{table}\"" + +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "Recriou a tabela Cargo \"{table}\"" + +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) recriou a tabela Cargo \"{table}\"" + +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "Substituiu a tabela Cargo \"{table}\"" + +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) substituiu a tabela Cargo \"{table}\"" + +#: extensions/base/cargo.py:105 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "Excluiu a tabela Cargo \"{table}\"" + +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) excluiu a tabela Cargo \"{table}\"" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "Marcado \"{article}\" para tradução" + +#: extensions/base/translate.py:55 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" +"[{author}]({author_url}) marcou [{article}]({article_url}) para " +"tradução{comment}" + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "Removido \"{article}\" do sistema de tradução" + +#: extensions/base/translate.py:80 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" +"[{author}]({author_url}) removeu [{article}]({article_url}) do sistema de " +"tradução{comment}" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" +"Concluída a movimentação das páginas de tradução de \"{article}\" para " +"\"{target}\"" + +#: extensions/base/translate.py:106 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) completou a movimentação das páginas de tradução de " +"*{article}* para [{target}]({target_url}){comment}" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" +"Encontrou um problema durante o movimento \"{article}\" para \"{target}\"" + +#: extensions/base/translate.py:133 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) encontrou um problema ao se mover [{article}]" +"({article_url}) para [{target}]({target_url}){comment}" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" +"Falha ao excluir \"{article}\" que pertence à página traduzível \"{target}\"" + +#: extensions/base/translate.py:161 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) falhou em deletar [{article}]({article_url}) que " +"pertence à página traduzível [{target}]({target_url}){comment}" + +#: extensions/base/translate.py:177 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "Concluiu a exclusão da página de tradução \"{article}\"" + +#: extensions/base/translate.py:188 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) completou a exclusão da página de tradução " +"[{article}]({article_url}){comment}" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" +"Falha ao excluir \"{article}\" que pertence à página de tradução \"{target}\"" + +#: extensions/base/translate.py:215 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) falhou em deletar [{article}]({article_url}) que " +"pertence à página de tradução [{target}]({target_url}){comment}" + +#: extensions/base/translate.py:231 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "Incentivou a tradução de \"{article}\"" + +#: extensions/base/translate.py:240 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) incentivou a tradução de [{article}]({article_url})" +"{comment}" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "Tradução desencorajada de \"{article}\"" + +#: extensions/base/translate.py:264 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) incentivou a tradução de [{article}]({article_url})" +"{comment}" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "Idiomas limitados para \"{article}\" para `{languages}`" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "Idiomas prioritários para \"{article}\" definido como `{languages}`" + +#: extensions/base/translate.py:288 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "Removeu Idiomas prioritários de \"{article}\"" + +#: extensions/base/translate.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) limitou idiomas para [{article}]({article_url}) " +"para`{languages}`{comment}" + +#: extensions/base/translate.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) definiu os idiomas prioritários para [{article}]" +"({article_url}) para `{languages}`{comment}" + +#: extensions/base/translate.py:315 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) removeu idiomas prioritários de [{article}]" +"({article_url}){comment}" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" +"Adicionada página traduzível \"{article}\" para agregar o grupo \"{group}\"" + +#: extensions/base/translate.py:342 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) adicionou a página traduzível [{article}]" +"({article_url}) para agregar o grupo \"{group}\"{comment}" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "Página traduzível removida \"{article}\" do grupo agregado \"{group}\"" + +#: extensions/base/translate.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) removeu a página traduzida [{article}]" +"({article_url}) do grupo agregado \"{group}\"{comment}" + +#: extensions/base/translate.py:387 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "Revisou a tradução \"{article}\"" + +#: extensions/base/translate.py:401 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) revisou a tradução [{article}]({article_url})" +"{comment}" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "Mudou o estado de traduções de`{language}` de \"{article}\"" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "Estado antigo" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "Novo estado" + +#: extensions/base/translate.py:431 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) mudou o estado das traduçõe de `{language}` de " +"[{article}]({article_url}) de `{old_state}` para `{new_state}`{comment}" + +#: extensions/base/translate.py:439 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) mudou o estado de traduções `{language}` de " +"[{article}]({article_url}) para `{new_state}`{comment}" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "(padrão)" + +#: extensions/base/translate.py:464 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "Mudou o idioma de \"{article}\"" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "Idioma antigo" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "Novo idioma" + +#: extensions/base/translate.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" +"[{author}]({author_url}) mudou o idioma do [{article}]({article_url}) de " +"{old_lang} para {new_lang}{comment}" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "desconhecido" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "Criou \"{title}\"" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "Criou uma pesquisa \"{title}\"" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "Opção {}" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[Ver imagem]({image_url})__" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "Criou um quiz \"{title}\"" + +#: extensions/base/discussions.py:193 +msgid "{} tags" +msgstr "{} etiquetas" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "Respondeu \"{title}\"" + +#: extensions/base/discussions.py:214 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " @@ -62,7 +439,7 @@ msgstr "" "[{author}]({author_url}) criou [{title}](<{url}f/p/{threadId}>) em " "{forumName}" -#: src/discussion_formatters.py:42 +#: extensions/base/discussions.py:217 #, python-brace-format msgid "" "[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " @@ -71,7 +448,7 @@ msgstr "" "[{author}]({author_url}) criou uma pesquisa [{title}](<{url}f/p/{threadId}>) " "em {forumName}" -#: src/discussion_formatters.py:45 +#: extensions/base/discussions.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " @@ -80,7 +457,7 @@ msgstr "" "[{author}]({author_url}) criou um quiz [{title}](<{url}f/p/{threadId}>) em " "{forumName}" -#: src/discussion_formatters.py:54 +#: extensions/base/discussions.py:234 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " @@ -89,7 +466,17 @@ msgstr "" "[{author}]({author_url}) criou uma [resposta](<{url}f/p/{threadId}/r/{postId}" ">) a [{title}](<{url}f/p/{threadId}>) em {forumName}" -#: src/discussion_formatters.py:61 +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "Criou \"{title}\" no mural de mensagens de {user}" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "Respondeu \"{title}\" no mural de mensagens de {user}" + +#: extensions/base/discussions.py:312 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" @@ -100,7 +487,7 @@ msgstr "" "threadId={threadId}>) no mural de mensagens de [{user}](<{url}wiki/" "Message_Wall:{user_wall}>)" -#: src/discussion_formatters.py:64 +#: extensions/base/discussions.py:318 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" @@ -113,7 +500,17 @@ msgstr "" "Message_Wall:{user_wall}?threadId={threadId}>) no mural de mensagens de " "[{user}](<{url}wiki/Message_Wall:{user_wall}>)" -#: src/discussion_formatters.py:72 +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "Comentou em {article}" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "Respondeu a um comentário em {article}" + +#: extensions/base/discussions.py:359 #, python-brace-format msgid "" "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " @@ -122,7 +519,7 @@ msgstr "" "[{author}]({author_url}) fez um [comentário](<{url}?commentId={commentId}>) " "em [{article}](<{url}>)" -#: src/discussion_formatters.py:78 +#: extensions/base/discussions.py:365 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" @@ -133,152 +530,226 @@ msgstr "" "&replyId={replyId}>) a um [comentário](<{url}?commentId={commentId}>) em " "[{article}](<{url}>)" -#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "Alterou configurações da wiki" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) alterou as configurações da wiki{reason}" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "Excluiu a wiki \"{wiki}\"" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "Desconhecido" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) excluiu uma wiki *{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:80 +#, fuzzy, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "Modificou o grupo de usuário \"{usergroup_name}\"" + +#: extensions/base/managewiki.py:89 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" +"[{author}]({author_url}) modificou o grupo de usuário *{group_name}*{comment}" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "Travou a wiki \"{wiki}\"" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) travou uma wiki *{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:124 +#, fuzzy, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "Modificou o espaço nominal \"{namespace_name}\"" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "Wiki" + +#: extensions/base/managewiki.py:134 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) modificou o espaço nominal *{namespace_name}* " +"em*{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:147 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "Excluiu o espaço nominal \"{namespace_name}\"" + +#: extensions/base/managewiki.py:158 #, python-brace-format msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" msgstr "" -"Evento `{event}` desconhecido por [{author}]({author_url}), relate no " -"[servidor de suporte](<{support}>)." +"[{author}]({author_url}) excluiu o espaço nominal *{namespace_name}* em " +"*{wiki_name}* ({comment})" -#: src/discussion_formatters.py:123 +#: extensions/base/managewiki.py:173 #, python-brace-format -msgid "Created \"{title}\"" -msgstr "Criou \"{title}\"" +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "Modificou o grupo de usuário \"{usergroup_name}\"" -#: src/discussion_formatters.py:127 +#: extensions/base/managewiki.py:182 #, python-brace-format -msgid "Created a poll \"{title}\"" -msgstr "Criou uma pesquisa \"{title}\"" +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" +"[{author}]({author_url}) modificou o grupo de usuário *{group_name}*{comment}" -#: src/discussion_formatters.py:134 -msgid "Option {}" -msgstr "Opção {}" - -#: src/discussion_formatters.py:135 -#, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "__[Ver imagem]({image_url})__" - -#: src/discussion_formatters.py:139 -#, python-brace-format -msgid "Created a quiz \"{title}\"" -msgstr "Criou um quiz \"{title}\"" - -#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 -#: src/rc_formatters.py:1283 -msgid "Tags" -msgstr "Etiquetas" - -#: src/discussion_formatters.py:155 -msgid "{} tags" -msgstr "{} etiquetas" - -#: src/discussion_formatters.py:160 -#, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "Respondeu \"{title}\"" - -#: src/discussion_formatters.py:169 -#, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "Criou \"{title}\" no mural de mensagens de {user}" - -#: src/discussion_formatters.py:173 -#, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "Respondeu \"{title}\" no mural de mensagens de {user}" - -#: src/discussion_formatters.py:180 -#, python-brace-format -msgid "Commented on {article}" -msgstr "Comentou em {article}" - -#: src/discussion_formatters.py:184 -#, python-brace-format -msgid "Replied to a comment on {article}" -msgstr "Respondeu a um comentário em {article}" - -#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 +#: extensions/base/managewiki.py:195 #, fuzzy, python-brace-format -msgid "Unknown event `{event}`" -msgstr "" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" -"Evento `{event}` desconhecido\n" -"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" -"Evento desconhecido `{event}`" +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "Excluiu a wiki \"{wiki}\"" -#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 -#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 -msgid "Report this on the support server" -msgstr "Reportar isso no servidor de suporte" +#: extensions/base/managewiki.py:203 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) excluiu uma wiki *{wiki_name}*{comment}" -#: src/rc_formatters.py:28 +#: extensions/base/managewiki.py:217 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "Destravou a wiki \"{wiki}\"" + +#: extensions/base/managewiki.py:225 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) destravou a wiki *{wiki_name}*{comment}" + +#: extensions/base/datadump.py:36 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "Gerou despejo de {file}" + +#: extensions/base/datadump.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "[{author}]({author_url}) gerou *{file}* de despejo{comment}" + +#: extensions/base/datadump.py:58 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "Excluiu {file} de despejo" + +#: extensions/base/datadump.py:67 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "[{author}]({author_url}) excluiu *{file}* de despejo{comment}" + +#: extensions/base/abusefilter.py:29 msgid "None" msgstr "Nenhum" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Warning issued" msgstr "Aviso emitido" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Blocked user**" msgstr "**Usuário bloqueado**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Tagged the edit" msgstr "Marcou a edição" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Disallowed the action" msgstr "Desautorizado a ação" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**IP range blocked**" msgstr "**Faixa de IP bloqueada**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Throttled actions" msgstr "Ações estranguladas" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Removed autoconfirmed group" msgstr "Grupo auto-confirmado removido" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Removed from privileged groups**" msgstr "**Removido de grupos privilegiados**" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Edit" msgstr "Edição" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Upload" msgstr "Carregamento" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Move" msgstr "Movimentação" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Stash upload" msgstr "Carregamento múltiplo" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Deletion" msgstr "Exclusão" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Account creation" msgstr "Criação de conta" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Auto account creation" msgstr "Criação automática de contas" -#: src/rc_formatters.py:83 +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "{user} disparou \"{abuse_filter}\"" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "Realizado" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "Medida tomada" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "Título" + +#: extensions/base/abusefilter.py:66 #, python-brace-format msgid "" "[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " @@ -287,19 +758,85 @@ msgstr "" "[{author}]({author_url}) disparou *{abuse_filter}*, executando a ação " "\"{action}\" em *[{target}]({target_url})* - ação realizada: {result}." -#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 -#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 -#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 -#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 -#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 -#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 -#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 -#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 -#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 -msgid "Unknown" -msgstr "Desconhecido" +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "Editou filtro de abusos número {number}" -#: src/rc_formatters.py:116 +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) editou o filtro de abuso [number {number}]" +"({filter_url})" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "Criou filtro de abusos número {number}" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) criou o filtro de abuso [number {number}]" +"({filter_url})" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "(N!) " + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "m" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "r" + +#: extensions/base/mediawiki.py:112 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" @@ -308,7 +845,7 @@ msgstr "" "[{author}]({author_url}) editou [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" -#: src/rc_formatters.py:118 +#: extensions/base/mediawiki.py:117 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" @@ -317,12 +854,48 @@ msgstr "" "[{author}]({author_url}) criou [{article}]({edit_link}){comment} {bold}" "({sign}{edit_size}){bold}" -#: src/rc_formatters.py:121 -#, python-brace-format -msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" -msgstr "[{author}]({author_url}) carregou [{file}]({file_link}){comment}" +#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +msgid "Options" +msgstr "Opções" -#: src/rc_formatters.py:128 +#: extensions/base/mediawiki.py:191 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([visualização]({link}) | [desfazer]({undolink}))" + +#: extensions/base/mediawiki.py:196 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "Carregou uma nova versão de {name}" + +#: extensions/base/mediawiki.py:198 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "Reverteu uma versão do {name}" + +#: extensions/base/mediawiki.py:200 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "Carregou {name}" + +#: extensions/base/mediawiki.py:209 +msgid "**No license!**" +msgstr "**Sem licença!**" + +#: extensions/base/mediawiki.py:224 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"Licença: {}" + +#: extensions/base/mediawiki.py:226 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([visualização]({link}))" + +#: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" @@ -330,7 +903,7 @@ msgstr "" "[{author}]({author_url}) reverteu uma versão de [{file}]({file_link})" "{comment}" -#: src/rc_formatters.py:132 +#: extensions/base/mediawiki.py:248 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -339,12 +912,27 @@ msgstr "" "[{author}]({author_url}) carregou uma nova versão de [{file}]({file_link})" "{comment}" -#: src/rc_formatters.py:135 +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) carregou [{file}]({file_link}){comment}" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "Excluiu a página {article}" + +#: extensions/base/mediawiki.py:283 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) excluiu [{page}]({page_link}){comment}" -#: src/rc_formatters.py:141 +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "Excluiu redirecionamento {article} ao sobrescrever" + +#: extensions/base/mediawiki.py:308 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -353,242 +941,35 @@ msgstr "" "[{author}]({author_url}) excluiu o redirecionamento substituindo [{page}]" "({page_link}){comment}" -#: src/rc_formatters.py:147 src/rc_formatters.py:152 -msgid "without making a redirect" -msgstr "sem fazer um redirecionamento" - -#: src/rc_formatters.py:147 src/rc_formatters.py:153 -msgid "with a redirect" -msgstr "com um redirecionamento" - -#: src/rc_formatters.py:148 +#: extensions/base/mediawiki.py:322 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" +msgid "Restored {article}" +msgstr "Restaurou {article}" + +#: extensions/base/mediawiki.py:331 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "[{author}]({author_url}) restaurou [{article}]({article_url}){comment}" + +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "Alterou a visibilidade de eventos de registros" + +#: extensions/base/mediawiki.py:356 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "" -"[{author}]({author_url}) moveu {redirect}*{article}* para [{target}]" -"({target_url}) {made_a_redirect}{comment}" +"[{author}]({author_url}) mudou a visibilidade dos eventos de " +"registro{comment}" -#: src/rc_formatters.py:154 +#: extensions/base/mediawiki.py:370 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -"[{target}]({target_url}) {made_a_redirect}{comment}" -msgstr "" -"[{author}]({author_url}) moveu {redirect}*{article}* para [{target}]" -"({target_url}) deixando um redirecionamento {made_a_redirect}{comment}" +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "Alterou a visibilidade da revisão na página {article} " +msgstr[1] "Alterou a visibilidade de {amount} revisões na página {article} " -#: src/rc_formatters.py:159 -#, python-brace-format -msgid "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) moveu as configurações de proteção de {redirect}" -"*{article}* para [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:170 src/rc_formatters.py:855 -msgid "for infinity and beyond" -msgstr "para o infinito e além" - -#: src/rc_formatters.py:179 src/rc_formatters.py:863 -#, python-brace-format -msgid "for {num} {translated_length}" -msgstr "por {num} {translated_length}" - -#: src/rc_formatters.py:185 src/rc_formatters.py:867 -msgid "until {}" -msgstr "até {}" - -#: src/rc_formatters.py:189 -msgid " on pages: " -msgstr " nas páginas: " - -#: src/rc_formatters.py:196 src/rc_formatters.py:881 -msgid " and namespaces: " -msgstr " e espaços nominais: " - -#: src/rc_formatters.py:198 -msgid " on namespaces: " -msgstr " nos espaços nominais: " - -#: src/rc_formatters.py:210 -#, python-brace-format -msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" -msgstr "" -"[{author}]({author_url}) bloqueou [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" - -#: src/rc_formatters.py:214 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) alterou as configurações de bloqueio de " -"[{blocked_user}]({user_url}){comment}" - -#: src/rc_formatters.py:218 -#, python-brace-format -msgid "" -"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) desbloqueou [{blocked_user}]({user_url}){comment}" - -#: src/rc_formatters.py:223 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) deixou um [comentário]({comment}) no perfil de " -"{target}" - -#: src/rc_formatters.py:225 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) deixou um [comentário]({comment}) no próprio perfil" - -#: src/rc_formatters.py:231 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -"profile" -msgstr "" -"[{author}]({author_url}) respondeu a um [comentário]({comment}) no perfil de " -"{target}" - -#: src/rc_formatters.py:237 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on their own " -"profile" -msgstr "" -"[{author}]({author_url}) respondeu a um [comentário]({comment}) no próprio " -"perfil" - -#: src/rc_formatters.py:245 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) editou um [comentário]({comment}) no perfil de " -"{target}" - -#: src/rc_formatters.py:251 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) editou um [comentário]({comment}) no próprio perfil" - -#: src/rc_formatters.py:257 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "[{author}]({author_url}) limpou um comentário no perfil de {target}" - -#: src/rc_formatters.py:259 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "[{author}]({author_url}) limpou um comentário no próprio perfil" - -#: src/rc_formatters.py:267 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) excluiu um [comentário]({comment}) no perfil de " -"{target}" - -#: src/rc_formatters.py:269 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) excluiu um [comentário]({comment}) no próprio perfil" - -#: src/rc_formatters.py:274 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) editou o {field} no perfil de [{target}]" -"({target_url}). *({desc})*" - -#: src/rc_formatters.py:281 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) editou o {field} em seu [próprio perfil]" -"({target_url}). *({desc})*" - -#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 -#: src/rc_formatters.py:979 -msgid "none" -msgstr "nenhum" - -#: src/rc_formatters.py:301 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) from {old_groups} to {new_groups}{comment}" -msgstr "" -"[{author}]({author_url}) alterou os privilégios do usuário [{target}]" -"({target_url}) de {old_groups} para {new_groups}{comment}" - -#: src/rc_formatters.py:303 -#, python-brace-format -msgid "" -"{author} autopromoted [{target}]({target_url}) from {old_groups} to " -"{new_groups}{comment}" -msgstr "" -"{author} autopromoveu [{target}]({target_url}) de {old_groups} para " -"{new_groups}{comment}" - -#: src/rc_formatters.py:304 src/rc_formatters.py:965 -msgid "System" -msgstr "Sistema" - -#: src/rc_formatters.py:309 -#, python-brace-format -msgid "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) protegeu [{article}]({article_url}) com as " -"seguintes configurações: {settings}{comment}" - -#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 -#: src/rc_formatters.py:993 -msgid " [cascading]" -msgstr " [em cascata]" - -#: src/rc_formatters.py:316 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) modificou as configurações de proteção de " -"[{article}]({article_url}) para: {settings}{comment}" - -#: src/rc_formatters.py:323 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) removeu a proteção de [{article}]({article_url})" -"{comment}" - -#: src/rc_formatters.py:327 +#: extensions/base/mediawiki.py:383 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -603,7 +984,232 @@ msgstr[1] "" "[{author}]({author_url}) alterou a visibilidade de {amount} revisões na " "página [{article}]({article_url}){comment}" -#: src/rc_formatters.py:340 +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "Nenhum redirecionamento foi feito" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "Foi feito um redirecionamento" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "Movido {redirect}{article} para {target}" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "sem fazer um redirecionamento" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "com um redirecionamento" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) moveu {redirect}*{article}* para [{target}]" +"({target_url}) {made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "Moveu {redirect}{article} para {title} deixando um redirecionamento" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) moveu {redirect}*{article}* para [{target}]" +"({target_url}) deixando um redirecionamento {made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "Moveu configurações de proteção de {redirect}{article} para {title}" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) moveu as configurações de proteção de {redirect}" +"*{article}* para [{target}]({target_url}){comment}" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "Protegeu {target}" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr " [em cascata]" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) protegeu [{article}]({article_url}) com as " +"seguintes configurações: {settings}{comment}" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "Alterou nível de proteção de {article}" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) modificou as configurações de proteção de " +"[{article}]({article_url}) para: {settings}{comment}" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "Removeu a proteção de {article}" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) removeu a proteção de [{article}]({article_url})" +"{comment}" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "para o infinito e além" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:610 +msgid "Blocked from editing the following pages: " +msgstr "Bloqueado de editar as seguintes páginas: " + +#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr " e espaços nominais: " + +#: extensions/base/mediawiki.py:619 +msgid "Blocked from editing pages on following namespaces: " +msgstr "Bloqueado de editar páginas nos seguintes espaços nominais: " + +#: extensions/base/mediawiki.py:630 +msgid "Partial block details" +msgstr "Detalhes do bloqueio parcial" + +#: extensions/base/mediawiki.py:633 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:635 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "Bloqueou {blocked_user} {time}" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr " nas páginas: " + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr " nos espaços nominais: " + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) bloqueou [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "Alterou configurações de bloqueio de {blocked_user}" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) alterou as configurações de bloqueio de " +"[{blocked_user}]({user_url}){comment}" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "Desbloqueou {blocked_user}" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) desbloqueou [{blocked_user}]({user_url}){comment}" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "A ação foi oculta pela administração" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "Uma ação foi oculta pela administração." + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "Importou {article} com {count} revisão" +msgstr[1] "Importou {article} com {count} revisões" + +#: extensions/base/mediawiki.py:772 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -618,19 +1224,14 @@ msgstr[1] "" "[{author}]({author_url}) importou [{article}]({article_url}) com {count} " "revisões{comment}" -#: src/rc_formatters.py:345 +#: extensions/base/mediawiki.py:788 #, python-brace-format -msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "[{author}]({author_url}) restaurou [{article}]({article_url}){comment}" +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "Importou {article} com {count} revisão de \"{source}\"" +msgstr[1] "Importou {article} com {count} revisões de \"{source}\"" -#: src/rc_formatters.py:347 -#, python-brace-format -msgid "[{author}]({author_url}) changed visibility of log events{comment}" -msgstr "" -"[{author}]({author_url}) mudou a visibilidade dos eventos de " -"registro{comment}" - -#: src/rc_formatters.py:359 +#: extensions/base/mediawiki.py:803 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -645,23 +1246,56 @@ msgstr[1] "" "[{author}]({author_url}) importou [{article}]({article_url}) com {count} " "revisões{comment} de [{source}]({source_url}){comment}" -#: src/rc_formatters.py:364 +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:836 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "Alterou privilégios de usuário de {target}" + +#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +msgid "System" +msgstr "Sistema" + +#: extensions/base/mediawiki.py:840 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} foi promovido para um novo grupo de usuários" + +#: extensions/base/mediawiki.py:846 #, python-brace-format msgid "" -"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +"{reason}\n" +"{added}{linebreak}{removed}" msgstr "" -"[{author}]({author_url}) editou o filtro de abuso [number {number}]" -"({filter_url})" -#: src/rc_formatters.py:368 -#, python-brace-format +#: extensions/base/mediawiki.py:860 +#, fuzzy, python-brace-format msgid "" -"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) {added}{comma} {removed}{comment}" msgstr "" -"[{author}]({author_url}) criou o filtro de abuso [number {number}]" -"({filter_url})" +"[{author}]({author_url}) alterou os privilégios do usuário [{target}]" +"({target_url}) de {old_groups} para {new_groups}{comment}" -#: src/rc_formatters.py:372 +#: extensions/base/mediawiki.py:864 +#, fuzzy, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"{comment}" +msgstr "" +"{author} autopromoveu [{target}]({target_url}) de {old_groups} para " +"{new_groups}{comment}" + +#: extensions/base/mediawiki.py:877 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "Mesclou os históricos de revisão de {article} com {dest}" + +#: extensions/base/mediawiki.py:891 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -670,17 +1304,30 @@ msgstr "" "[{author}]({author_url}) mesclou o histórico de revisão de [{article}]" "({article_url}) com [{dest}]({dest_url}){comment}" -#: src/rc_formatters.py:375 +#: extensions/base/mediawiki.py:905 +msgid "Created account automatically" +msgstr "Criou uma conta automaticamente" + +#: extensions/base/mediawiki.py:912 #, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "Conta [{author}]({author_url}) foi criada automaticamente" -#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +msgid "Created account" +msgstr "Criou uma conta" + +#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 #, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "Conta [{author}]({author_url}) foi criada" -#: src/rc_formatters.py:380 +#: extensions/base/mediawiki.py:944 +#, python-brace-format +msgid "Created account {article}" +msgstr "Criou conta {article}" + +#: extensions/base/mediawiki.py:953 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" @@ -689,7 +1336,12 @@ msgstr "" "Conta [{article}]({article_url}) foi criada por [{author}]({author_url})" "{comment}" -#: src/rc_formatters.py:383 +#: extensions/base/mediawiki.py:966 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "Criou conta {article} e a senha foi enviada por e-mail" + +#: extensions/base/mediawiki.py:977 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " @@ -698,7 +1350,16 @@ msgstr "" "Conta [{article}]({article_url}) foi criada por [{author}]({author_url}) e a " "senha foi enviada por e-mail{comment}" -#: src/rc_formatters.py:388 +#: extensions/base/mediawiki.py:1009 +msgid "Added an entry to the interwiki table" +msgstr "Adicionou uma entrada para a tabela interwiki" + +#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Prefixo: {prefix}, site: {website} | {desc}" + +#: extensions/base/mediawiki.py:1022 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -707,7 +1368,11 @@ msgstr "" "[{author}]({author_url}) adicionou uma entrada à [tabela de interwiki]" "({table_url}) apontando para {website} com o prefixo {prefix}" -#: src/rc_formatters.py:394 +#: extensions/base/mediawiki.py:1036 +msgid "Edited an entry in interwiki table" +msgstr "Editou uma entrada na tabela interwiki" + +#: extensions/base/mediawiki.py:1049 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -716,15 +1381,35 @@ msgstr "" "[{author}]({author_url}) editou uma entrada na [tabela de Interwiki]" "({table_url}) apontando para {website} com o prefixo {prefix}" -#: src/rc_formatters.py:400 +#: extensions/base/mediawiki.py:1063 +msgid "Deleted an entry in interwiki table" +msgstr "Excluiu uma entrada na tabela interwiki" + +#: extensions/base/mediawiki.py:1064 #, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Prefixo: {prefix} | {desc}" + +#: extensions/base/mediawiki.py:1074 +#, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" msgstr "" "[{author}]({author_url}) excluiu uma entrada na [tabela de Interwiki]" "({table_url})" -#: src/rc_formatters.py:403 +#: extensions/base/mediawiki.py:1091 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "Alterou o modelo de conteúdo da página {article}" + +#: extensions/base/mediawiki.py:1093 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "Modelo alterado de {old} para {new}: {reason}" + +#: extensions/base/mediawiki.py:1105 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -733,7 +1418,17 @@ msgstr "" "[{author}]({author_url}) mudou o modelo de conteúdo da página [{article}]" "({article_url}) de {old} para {new}{comment}" -#: src/rc_formatters.py:407 +#: extensions/base/mediawiki.py:1120 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "Criou a página {article} usando um modelo de conteúdo não padrão" + +#: extensions/base/mediawiki.py:1122 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "Criado com modelo {new}: {reason}" + +#: extensions/base/mediawiki.py:1133 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " @@ -742,61 +1437,40 @@ msgstr "" "[{author}]({author_url}) criou a página [{article}]({article_url}) usando um " "modelo de conteúdo não padrão {new}{comment}" -#: src/rc_formatters.py:410 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" -msgstr "" -"[{author}]({author_url}) editou o sprite para [{article}]({article_url})" +#: extensions/base/mediawiki.py:1148 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "Criou uma etiqueta \"{tag}\"" -#: src/rc_formatters.py:413 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" -msgstr "" -"[{author}]({author_url}) criou a folha de sprite para [{article}]" -"({article_url})" - -#: src/rc_formatters.py:416 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the slice for [{article}]({article_url})" -msgstr "[{author}]({author_url}) editou a peça para [{article}]({article_url})" - -#: src/rc_formatters.py:421 -#, python-brace-format -msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) criou a tabela Cargo \"{table}\"" - -#: src/rc_formatters.py:423 -#, python-brace-format -msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) excluiu a tabela Cargo \"{table}\"" - -#: src/rc_formatters.py:428 -#, python-brace-format -msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) recriou a tabela Cargo \"{table}\"" - -#: src/rc_formatters.py:433 -#, python-brace-format -msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) substituiu a tabela Cargo \"{table}\"" - -#: src/rc_formatters.py:436 +#: extensions/base/mediawiki.py:1158 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) criou a [etiqueta]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:441 +#: extensions/base/mediawiki.py:1180 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "Excluiu uma etiqueta \"{tag}\"" + +#: extensions/base/mediawiki.py:1182 +#, fuzzy +msgid "Removed from" +msgstr "Removido" + +#: extensions/base/mediawiki.py:1182 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1194 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) excluiu a [etiqueta]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:443 +#: extensions/base/mediawiki.py:1204 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -811,254 +1485,43 @@ msgstr[1] "" "[{author}]({author_url}) importou [{article}]({article_url}) com {count} " "revisões{comment}" -#: src/rc_formatters.py:449 +#: extensions/base/mediawiki.py:1221 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "Ativou uma etiqueta \"{tag}\"" + +#: extensions/base/mediawiki.py:1230 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) ativou a [etiqueta]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:452 +#: extensions/base/mediawiki.py:1249 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "Desativou uma etiqueta \"{tag}\"" + +#: extensions/base/mediawiki.py:1258 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) desativou a [etiqueta]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:454 +#: extensions/base/mediawiki.py:1278 #, python-brace-format -msgid "[{author}]({author_url}) changed wiki settings{reason}" -msgstr "[{author}]({author_url}) alterou as configurações da wiki{reason}" +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +"Usuário renomeado \"{old_name}\" com edição de {edits} para \"{new_name}\"" +msgstr[1] "" +"Usuário renomeado \"{old_name}\" com edições {edits} para \"{new_name}\"" -#: src/rc_formatters.py:456 +#: extensions/base/mediawiki.py:1283 #, python-brace-format -msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) excluiu uma wiki *{wiki_name}*{comment}" +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "Renomeou usuário \"{old_name}\" para \"{new_name}\"" -#: src/rc_formatters.py:459 -#, python-brace-format -msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) travou uma wiki *{wiki_name}*{comment}" - -#: src/rc_formatters.py:462 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) modified namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) modificou o espaço nominal *{namespace_name}* " -"em*{wiki_name}*{comment}" - -#: src/rc_formatters.py:467 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) excluiu o espaço nominal *{namespace_name}* em " -"*{wiki_name}* ({comment})" - -#: src/rc_formatters.py:473 -#, python-brace-format -msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "" -"[{author}]({author_url}) modificou o grupo de usuário *{group_name}*{comment}" - -#: src/rc_formatters.py:477 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) excluiu uma wiki *{wiki_name}*{comment}" - -#: src/rc_formatters.py:481 -#, python-brace-format -msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) destravou a wiki *{wiki_name}*{comment}" - -#: src/rc_formatters.py:486 -#, python-brace-format -msgid "[{author}]({author_url}) generated *{file}* dump{comment}" -msgstr "[{author}]({author_url}) gerou *{file}* de despejo{comment}" - -#: src/rc_formatters.py:491 -#, python-brace-format -msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" -msgstr "[{author}]({author_url}) excluiu *{file}* de despejo{comment}" - -#: src/rc_formatters.py:502 -#, python-brace-format -msgid "" -"[{author}]({author_url}) marked [{article}]({article_url}) for " -"translation{comment}" -msgstr "" -"[{author}]({author_url}) marcou [{article}]({article_url}) para " -"tradução{comment}" - -#: src/rc_formatters.py:509 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed [{article}]({article_url}) from the " -"translation system{comment}" -msgstr "" -"[{author}]({author_url}) removeu [{article}]({article_url}) do sistema de " -"tradução{comment}" - -#: src/rc_formatters.py:516 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed moving translation pages from *{article}* " -"to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) completou a movimentação das páginas de tradução de " -"*{article}* para [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:524 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encountered a problem while moving [{article}]" -"({article_url}) to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) encontrou um problema ao se mover [{article}]" -"({article_url}) para [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:532 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translatable page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) completou a exclusão da página traduzível " -"[{article}]({article_url}){comment}" - -#: src/rc_formatters.py:540 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translatable page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) falhou em deletar [{article}]({article_url}) que " -"pertence à página traduzível [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:548 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translation page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) completou a exclusão da página de tradução " -"[{article}]({article_url}){comment}" - -#: src/rc_formatters.py:556 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translation page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) falhou em deletar [{article}]({article_url}) que " -"pertence à página de tradução [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:564 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) incentivou a tradução de [{article}]({article_url})" -"{comment}" - -#: src/rc_formatters.py:571 -#, python-brace-format -msgid "" -"[{author}]({author_url}) discouraged translation of [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) incentivou a tradução de [{article}]({article_url})" -"{comment}" - -#: src/rc_formatters.py:581 -#, python-brace-format -msgid "" -"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " -"`{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) limitou idiomas para [{article}]({article_url}) " -"para`{languages}`{comment}" - -#: src/rc_formatters.py:587 -#, python-brace-format -msgid "" -"[{author}]({author_url}) set the priority languages for [{article}]" -"({article_url}) to `{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) definiu os idiomas prioritários para [{article}]" -"({article_url}) para `{languages}`{comment}" - -#: src/rc_formatters.py:593 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed priority languages from [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) removeu idiomas prioritários de [{article}]" -"({article_url}){comment}" - -#: src/rc_formatters.py:600 -#, python-brace-format -msgid "" -"[{author}]({author_url}) added translatable page [{article}]({article_url}) " -"to aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) adicionou a página traduzível [{article}]" -"({article_url}) para agregar o grupo \"{group}\"{comment}" - -#: src/rc_formatters.py:607 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed translatable page [{article}]" -"({article_url}) from aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) removeu a página traduzida [{article}]" -"({article_url}) do grupo agregado \"{group}\"{comment}" - -#: src/rc_formatters.py:619 -#, python-brace-format -msgid "" -"[{author}]({author_url}) reviewed translation [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) revisou a tradução [{article}]({article_url})" -"{comment}" - -#: src/rc_formatters.py:627 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) mudou o estado das traduçõe de `{language}` de " -"[{article}]({article_url}) de `{old_state}` para `{new_state}`{comment}" - -#: src/rc_formatters.py:634 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) mudou o estado de traduções `{language}` de " -"[{article}]({article_url}) para `{new_state}`{comment}" - -#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 -#: src/rc_formatters.py:1241 -msgid "(default)" -msgstr "(padrão)" - -#: src/rc_formatters.py:647 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the language of [{article}]({article_url}) " -"from {old_lang} to {new_lang}{comment}" -msgstr "" -"[{author}]({author_url}) mudou o idioma do [{article}]({article_url}) de " -"{old_lang} para {new_lang}{comment}" - -#: src/rc_formatters.py:656 +#: extensions/base/mediawiki.py:1298 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " @@ -1073,7 +1536,7 @@ msgstr[1] "" "[{author}]({author_url}) renomeou usuário *{old_name}* com edições {edits} " "para [{new_name}]({link}){comment}" -#: src/rc_formatters.py:661 +#: extensions/base/mediawiki.py:1306 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" @@ -1082,631 +1545,229 @@ msgstr "" "[{author}]({author_url}) renomeou o usuário *{old_name}* para [{new_name}]" "({link}){comment}" -#: src/rc_formatters.py:665 -msgid "An action has been hidden by administration." -msgstr "Uma ação foi oculta pela administração." - -#: src/rc_formatters.py:681 -#, python-brace-format -msgid "{user} triggered \"{abuse_filter}\"" -msgstr "{user} disparou \"{abuse_filter}\"" - -#: src/rc_formatters.py:682 -msgid "Performed" -msgstr "Realizado" - -#: src/rc_formatters.py:683 -msgid "Action taken" -msgstr "Medida tomada" - -#: src/rc_formatters.py:684 -msgid "Title" -msgstr "Título" - -#: src/rc_formatters.py:693 src/rc_formatters.py:980 -msgid "No description provided" -msgstr "Nenhuma descrição fornecida" - -#: src/rc_formatters.py:717 -msgid "(N!) " -msgstr "(N!) " - -#: src/rc_formatters.py:718 -msgid "m" -msgstr "m" - -#: src/rc_formatters.py:718 -msgid "b" -msgstr "r" - -#: src/rc_formatters.py:735 src/rc_formatters.py:740 -msgid "__Only whitespace__" -msgstr "__Apenas espaço em branco__" - -#: src/rc_formatters.py:745 -msgid "Removed" -msgstr "Removido" - -#: src/rc_formatters.py:747 -msgid "Added" -msgstr "Adicionado" - -#: src/rc_formatters.py:781 src/rc_formatters.py:820 -msgid "Options" -msgstr "Opções" - -#: src/rc_formatters.py:781 -#, python-brace-format -msgid "([preview]({link}) | [undo]({undolink}))" -msgstr "([visualização]({link}) | [desfazer]({undolink}))" - -#: src/rc_formatters.py:786 -#, python-brace-format -msgid "Uploaded a new version of {name}" -msgstr "Carregou uma nova versão de {name}" - -#: src/rc_formatters.py:788 -#, python-brace-format -msgid "Reverted a version of {name}" -msgstr "Reverteu uma versão do {name}" - -#: src/rc_formatters.py:790 -#, python-brace-format -msgid "Uploaded {name}" -msgstr "Carregou {name}" - -#: src/rc_formatters.py:806 -msgid "**No license!**" -msgstr "**Sem licença!**" - -#: src/rc_formatters.py:818 -msgid "" -"\n" -"License: {}" -msgstr "" -"\n" -"Licença: {}" - -#: src/rc_formatters.py:820 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "([visualização]({link}))" - -#: src/rc_formatters.py:825 -#, python-brace-format -msgid "Deleted page {article}" -msgstr "Excluiu a página {article}" - -#: src/rc_formatters.py:830 -#, python-brace-format -msgid "Deleted redirect {article} by overwriting" -msgstr "Excluiu redirecionamento {article} ao sobrescrever" - -#: src/rc_formatters.py:836 -msgid "No redirect has been made" -msgstr "Nenhum redirecionamento foi feito" - -#: src/rc_formatters.py:837 -msgid "A redirect has been made" -msgstr "Foi feito um redirecionamento" - -#: src/rc_formatters.py:838 -#, python-brace-format -msgid "Moved {redirect}{article} to {target}" -msgstr "Movido {redirect}{article} para {target}" - -#: src/rc_formatters.py:841 -#, python-brace-format -msgid "Moved {redirect}{article} to {title} over redirect" -msgstr "Moveu {redirect}{article} para {title} deixando um redirecionamento" - -#: src/rc_formatters.py:845 -#, python-brace-format -msgid "Moved protection settings from {redirect}{article} to {title}" -msgstr "Moveu configurações de proteção de {redirect}{article} para {title}" - -#: src/rc_formatters.py:869 -msgid "unknown expiry time" -msgstr "tempo de expiração desconhecido" - -#: src/rc_formatters.py:874 -msgid "Blocked from editing the following pages: " -msgstr "Bloqueado de editar as seguintes páginas: " - -#: src/rc_formatters.py:883 -msgid "Blocked from editing pages on following namespaces: " -msgstr "Bloqueado de editar páginas nos seguintes espaços nominais: " - -#: src/rc_formatters.py:894 -msgid "Partial block details" -msgstr "Detalhes do bloqueio parcial" - -#: src/rc_formatters.py:895 -#, python-brace-format -msgid "Blocked {blocked_user} {time}" -msgstr "Bloqueou {blocked_user} {time}" - -#: src/rc_formatters.py:899 -#, python-brace-format -msgid "Changed block settings for {blocked_user}" -msgstr "Alterou configurações de bloqueio de {blocked_user}" - -#: src/rc_formatters.py:903 -#, python-brace-format -msgid "Unblocked {blocked_user}" -msgstr "Desbloqueou {blocked_user}" - -#: src/rc_formatters.py:910 -#, python-brace-format -msgid "Left a comment on {target}'s profile" -msgstr "Deixou um comentário no perfil de {target}" - -#: src/rc_formatters.py:912 -msgid "Left a comment on their own profile" -msgstr "Deixou um comentário em seu próprio perfil" - -#: src/rc_formatters.py:919 -#, python-brace-format -msgid "Replied to a comment on {target}'s profile" -msgstr "Respondeu a um comentário no perfil de {target}" - -#: src/rc_formatters.py:921 -msgid "Replied to a comment on their own profile" -msgstr "Respondeu a um comentário em seu próprio perfil" - -#: src/rc_formatters.py:928 -#, python-brace-format -msgid "Edited a comment on {target}'s profile" -msgstr "Editou um comentário no perfil de {target}" - -#: src/rc_formatters.py:930 -msgid "Edited a comment on their own profile" -msgstr "Editou um comentário em seu próprio perfil" - -#: src/rc_formatters.py:935 -#, python-brace-format -msgid "Edited {target}'s profile" -msgstr "Editado perfil {target}" - -#: src/rc_formatters.py:937 -msgid "Edited their own profile" -msgstr "Editou seu próprio perfil" - -#: src/rc_formatters.py:939 -#, python-brace-format -msgid "Cleared the {field} field" -msgstr "Limpou o campo {field}" - -#: src/rc_formatters.py:941 -#, python-brace-format -msgid "{field} field changed to: {desc}" -msgstr "Campo {field} alterado para: {desc}" - -#: src/rc_formatters.py:946 -#, python-brace-format -msgid "Purged a comment on {target}'s profile" -msgstr "Excluiu permanentemente um comentário no perfil de {target}" - -#: src/rc_formatters.py:948 -msgid "Purged a comment on their own profile" -msgstr "Limitou um comentário em seu próprio perfil" - -#: src/rc_formatters.py:956 -#, python-brace-format -msgid "Deleted a comment on {target}'s profile" -msgstr "Excluiu um comentário no perfil de {target}" - -#: src/rc_formatters.py:958 -msgid "Deleted a comment on their own profile" -msgstr "Excluiu um comentário em seu próprio perfil" - -#: src/rc_formatters.py:962 -#, python-brace-format -msgid "Changed group membership for {target}" -msgstr "Alterou privilégios de usuário de {target}" - -#: src/rc_formatters.py:966 -#, python-brace-format -msgid "{target} got autopromoted to a new usergroup" -msgstr "{target} foi promovido para um novo grupo de usuários" - -#: src/rc_formatters.py:981 -#, python-brace-format -msgid "Groups changed from {old_groups} to {new_groups}{reason}" -msgstr "Grupos alterados de {old_groups} para {new_groups}{reason}" - -#: src/rc_formatters.py:985 -#, python-brace-format -msgid "Protected {target}" -msgstr "Protegeu {target}" - -#: src/rc_formatters.py:991 -#, python-brace-format -msgid "Changed protection level for {article}" -msgstr "Alterou nível de proteção de {article}" - -#: src/rc_formatters.py:997 -#, python-brace-format -msgid "Removed protection from {article}" -msgstr "Removeu a proteção de {article}" - -#: src/rc_formatters.py:1001 -#, python-brace-format -msgid "Changed visibility of revision on page {article} " -msgid_plural "Changed visibility of {amount} revisions on page {article} " -msgstr[0] "Alterou a visibilidade da revisão na página {article} " -msgstr[1] "Alterou a visibilidade de {amount} revisões na página {article} " - -#: src/rc_formatters.py:1013 -#, python-brace-format -msgid "Imported {article} with {count} revision" -msgid_plural "Imported {article} with {count} revisions" -msgstr[0] "Importou {article} com {count} revisão" -msgstr[1] "Importou {article} com {count} revisões" - -#: src/rc_formatters.py:1018 -#, python-brace-format -msgid "Restored {article}" -msgstr "Restaurou {article}" - -#: src/rc_formatters.py:1021 -msgid "Changed visibility of log events" -msgstr "Alterou a visibilidade de eventos de registros" - -#: src/rc_formatters.py:1031 -#, python-brace-format -msgid "Imported {article} with {count} revision from \"{source}\"" -msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "Importou {article} com {count} revisão de \"{source}\"" -msgstr[1] "Importou {article} com {count} revisões de \"{source}\"" - -#: src/rc_formatters.py:1036 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "Editou filtro de abusos número {number}" - -#: src/rc_formatters.py:1039 -#, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "Criou filtro de abusos número {number}" - -#: src/rc_formatters.py:1042 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "Mesclou os históricos de revisão de {article} com {dest}" - -#: src/rc_formatters.py:1046 -msgid "Created account automatically" -msgstr "Criou uma conta automaticamente" - -#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 -msgid "Created account" -msgstr "Criou uma conta" - -#: src/rc_formatters.py:1052 -#, python-brace-format -msgid "Created account {article}" -msgstr "Criou conta {article}" - -#: src/rc_formatters.py:1055 -#, python-brace-format -msgid "Created account {article} and password was sent by email" -msgstr "Criou conta {article} e a senha foi enviada por e-mail" - -#: src/rc_formatters.py:1061 -msgid "Added an entry to the interwiki table" -msgstr "Adicionou uma entrada para a tabela interwiki" - -#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "Prefixo: {prefix}, site: {website} | {desc}" - -#: src/rc_formatters.py:1067 -msgid "Edited an entry in interwiki table" -msgstr "Editou uma entrada na tabela interwiki" - -#: src/rc_formatters.py:1073 -msgid "Deleted an entry in interwiki table" -msgstr "Excluiu uma entrada na tabela interwiki" - -#: src/rc_formatters.py:1074 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "Prefixo: {prefix} | {desc}" - -#: src/rc_formatters.py:1077 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "Alterou o modelo de conteúdo da página {article}" - -#: src/rc_formatters.py:1078 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "Modelo alterado de {old} para {new}: {reason}" - -#: src/rc_formatters.py:1083 -#, python-brace-format -msgid "Created the page {article} using a non-default content model" -msgstr "Criou a página {article} usando um modelo de conteúdo não padrão" - -#: src/rc_formatters.py:1084 -#, python-brace-format -msgid "Created with model {new}: {reason}" -msgstr "Criado com modelo {new}: {reason}" - -#: src/rc_formatters.py:1087 +#: extensions/base/sprite.py:37 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Editou o sprite de {article}" -#: src/rc_formatters.py:1090 +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) editou o sprite para [{article}]({article_url})" + +#: extensions/base/sprite.py:60 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Criou a folha de sprites de {article}" -#: src/rc_formatters.py:1093 +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) criou a folha de sprite para [{article}]" +"({article_url})" + +#: extensions/base/sprite.py:79 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Editou a peça de {article}" -#: src/rc_formatters.py:1099 -#, python-brace-format -msgid "Created the Cargo table \"{table}\"" -msgstr "Criou a tabela Cargo \"{table}\"" - -#: src/rc_formatters.py:1103 -#, python-brace-format -msgid "Deleted the Cargo table \"{table}\"" -msgstr "Excluiu a tabela Cargo \"{table}\"" - -#: src/rc_formatters.py:1110 -#, python-brace-format -msgid "Recreated the Cargo table \"{table}\"" -msgstr "Recriou a tabela Cargo \"{table}\"" - -#: src/rc_formatters.py:1117 -#, python-brace-format -msgid "Replaced the Cargo table \"{table}\"" -msgstr "Substituiu a tabela Cargo \"{table}\"" - -#: src/rc_formatters.py:1121 -#, fuzzy, python-brace-format -msgid "Created the tag \"{tag}\"" -msgstr "Criou uma etiqueta \"{tag}\"" - -#: src/rc_formatters.py:1125 -#, fuzzy, python-brace-format -msgid "Deleted the tag \"{tag}\"" -msgstr "Excluiu uma etiqueta \"{tag}\"" - -#: src/rc_formatters.py:1127 -#, fuzzy -msgid "Removed from" -msgstr "Removido" - -#: src/rc_formatters.py:1127 -msgid "{} revision or log entry" -msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1131 -#, fuzzy, python-brace-format -msgid "Activated the tag \"{tag}\"" -msgstr "Ativou uma etiqueta \"{tag}\"" - -#: src/rc_formatters.py:1134 -#, fuzzy, python-brace-format -msgid "Deactivated the tag \"{tag}\"" -msgstr "Desativou uma etiqueta \"{tag}\"" - -#: src/rc_formatters.py:1137 -msgid "Changed wiki settings" -msgstr "Alterou configurações da wiki" - -#: src/rc_formatters.py:1141 -#, python-brace-format -msgid "Deleted a \"{wiki}\" wiki" -msgstr "Excluiu a wiki \"{wiki}\"" - -#: src/rc_formatters.py:1144 -#, python-brace-format -msgid "Locked a \"{wiki}\" wiki" -msgstr "Travou a wiki \"{wiki}\"" - -#: src/rc_formatters.py:1147 -#, fuzzy, python-brace-format -msgid "Modified \"{namespace_name}\" namespace" -msgstr "Modificou o espaço nominal \"{namespace_name}\"" - -#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 -msgid "Wiki" -msgstr "Wiki" - -#: src/rc_formatters.py:1151 -#, python-brace-format -msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "Excluiu o espaço nominal \"{namespace_name}\"" - -#: src/rc_formatters.py:1157 -#, python-brace-format -msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "Modificou o grupo de usuário \"{usergroup_name}\"" - -#: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format -msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Excluiu a wiki \"{wiki}\"" - -#: src/rc_formatters.py:1163 -#, python-brace-format -msgid "Unlocked a \"{wiki}\" wiki" -msgstr "Destravou a wiki \"{wiki}\"" - -#: src/rc_formatters.py:1166 -#, python-brace-format -msgid "Generated {file} dump" -msgstr "Gerou despejo de {file}" - -#: src/rc_formatters.py:1169 -#, python-brace-format -msgid "Deleted {file} dump" -msgstr "Excluiu {file} de despejo" - -#: src/rc_formatters.py:1177 -#, python-brace-format -msgid "Marked \"{article}\" for translation" -msgstr "Marcado \"{article}\" para tradução" - -#: src/rc_formatters.py:1180 -#, python-brace-format -msgid "Removed \"{article}\" from the translation system" -msgstr "Removido \"{article}\" do sistema de tradução" - -#: src/rc_formatters.py:1183 -#, python-brace-format -msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" -"Concluída a movimentação das páginas de tradução de \"{article}\" para " -"\"{target}\"" - -#: src/rc_formatters.py:1186 -#, python-brace-format -msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "" -"Encontrou um problema durante o movimento \"{article}\" para \"{target}\"" - -#: src/rc_formatters.py:1189 -#, python-brace-format -msgid "Completed deletion of translatable page \"{article}\"" -msgstr "Exclusão concluída da página traduzível \"{article}\"" - -#: src/rc_formatters.py:1192 +#: extensions/base/sprite.py:86 #, python-brace-format msgid "" -"Failed to delete \"{article}\" which belongs to translatable page " -"\"{target}\"" -msgstr "" -"Falha ao excluir \"{article}\" que pertence à página traduzível \"{target}\"" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "[{author}]({author_url}) editou a peça para [{article}]({article_url})" -#: src/rc_formatters.py:1195 #, python-brace-format -msgid "Completed deletion of translation page \"{article}\"" -msgstr "Concluiu a exclusão da página de tradução \"{article}\"" +#~ msgid "" +#~ "Unknown event `{event}` by [{author}]({author_url}), report it on the " +#~ "[support server](<{support}>)." +#~ msgstr "" +#~ "Evento `{event}` desconhecido por [{author}]({author_url}), relate no " +#~ "[servidor de suporte](<{support}>)." + +#, fuzzy, python-brace-format +#~ msgid "Unknown event `{event}`" +#~ msgstr "" +#~ "#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +#~ "Evento `{event}` desconhecido\n" +#~ "#-#-#-#-# rc_formatters.po #-#-#-#-#\n" +#~ "Evento desconhecido `{event}`" + +#~ msgid "Report this on the support server" +#~ msgstr "Reportar isso no servidor de suporte" -#: src/rc_formatters.py:1198 #, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" -msgstr "" -"Falha ao excluir \"{article}\" que pertence à página de tradução \"{target}\"" +#~ msgid "for {num} {translated_length}" +#~ msgstr "por {num} {translated_length}" + +#~ msgid "until {}" +#~ msgstr "até {}" -#: src/rc_formatters.py:1201 #, python-brace-format -msgid "Encouraged translation of \"{article}\"" -msgstr "Incentivou a tradução de \"{article}\"" +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) deixou um [comentário]({comment}) no perfil de " +#~ "{target}" -#: src/rc_formatters.py:1204 #, python-brace-format -msgid "Discouraged translation of \"{article}\"" -msgstr "Tradução desencorajada de \"{article}\"" +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) deixou um [comentário]({comment}) no próprio " +#~ "perfil" -#: src/rc_formatters.py:1210 #, python-brace-format -msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "Idiomas limitados para \"{article}\" para `{languages}`" +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) respondeu a um [comentário]({comment}) no perfil " +#~ "de {target}" -#: src/rc_formatters.py:1212 #, python-brace-format -msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "Idiomas prioritários para \"{article}\" definido como `{languages}`" +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) respondeu a um [comentário]({comment}) no " +#~ "próprio perfil" -#: src/rc_formatters.py:1214 #, python-brace-format -msgid "Removed priority languages from \"{article}\"" -msgstr "Removeu Idiomas prioritários de \"{article}\"" +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) editou um [comentário]({comment}) no perfil de " +#~ "{target}" -#: src/rc_formatters.py:1217 #, python-brace-format -msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" -msgstr "" -"Adicionada página traduzível \"{article}\" para agregar o grupo \"{group}\"" +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) editou um [comentário]({comment}) no próprio " +#~ "perfil" -#: src/rc_formatters.py:1220 #, python-brace-format -msgid "" -"Removed translatable page \"{article}\" from aggregate group \"{group}\"" -msgstr "Página traduzível removida \"{article}\" do grupo agregado \"{group}\"" +#~ msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +#~ msgstr "[{author}]({author_url}) limpou um comentário no perfil de {target}" -#: src/rc_formatters.py:1227 #, python-brace-format -msgid "Reviewed translation \"{article}\"" -msgstr "Revisou a tradução \"{article}\"" +#~ msgid "[{author}]({author_url}) purged a comment on their own profile" +#~ msgstr "[{author}]({author_url}) limpou um comentário no próprio perfil" -#: src/rc_formatters.py:1230 #, python-brace-format -msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "Mudou o estado de traduções de`{language}` de \"{article}\"" +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) excluiu um [comentário]({comment}) no perfil de " +#~ "{target}" -#: src/rc_formatters.py:1232 -msgid "Old state" -msgstr "Estado antigo" - -#: src/rc_formatters.py:1233 -msgid "New state" -msgstr "Novo estado" - -#: src/rc_formatters.py:1242 #, python-brace-format -msgid "Changed the language of \"{article}\"" -msgstr "Mudou o idioma de \"{article}\"" +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) excluiu um [comentário]({comment}) no próprio " +#~ "perfil" -#: src/rc_formatters.py:1243 -msgid "Old language" -msgstr "Idioma antigo" - -#: src/rc_formatters.py:1244 -msgid "New language" -msgstr "Novo idioma" - -#: src/rc_formatters.py:1248 #, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -"Usuário renomeado \"{old_name}\" com edição de {edits} para \"{new_name}\"" -msgstr[1] "" -"Usuário renomeado \"{old_name}\" com edições {edits} para \"{new_name}\"" +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) editou o {field} no perfil de [{target}]" +#~ "({target_url}). *({desc})*" -#: src/rc_formatters.py:1250 #, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "Renomeou usuário \"{old_name}\" para \"{new_name}\"" +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) editou o {field} em seu [próprio perfil]" +#~ "({target_url}). *({desc})*" -#: src/rc_formatters.py:1254 -msgid "Action has been hidden by administration" -msgstr "A ação foi oculta pela administração" +#~ msgid "none" +#~ msgstr "nenhum" -#: src/rc_formatters.py:1288 -msgid "**Added**: " -msgstr "**Adicionado**: " +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) completed deletion of translatable page " +#~ "[{article}]({article_url}){comment}" +#~ msgstr "" +#~ "[{author}]({author_url}) completou a exclusão da página traduzível " +#~ "[{article}]({article_url}){comment}" -#: src/rc_formatters.py:1288 -msgid " and {} more\n" -msgstr " e {} mais\n" +#~ msgid "No description provided" +#~ msgstr "Nenhuma descrição fornecida" -#: src/rc_formatters.py:1289 -msgid "**Removed**: " -msgstr "**Removida**: " +#~ msgid "unknown expiry time" +#~ msgstr "tempo de expiração desconhecido" -#: src/rc_formatters.py:1289 -msgid " and {} more" -msgstr " e {} mais" +#, python-brace-format +#~ msgid "Left a comment on {target}'s profile" +#~ msgstr "Deixou um comentário no perfil de {target}" -#: src/rc_formatters.py:1290 -msgid "Changed categories" -msgstr "Mudanças de categorias" +#~ msgid "Left a comment on their own profile" +#~ msgstr "Deixou um comentário em seu próprio perfil" + +#, python-brace-format +#~ msgid "Replied to a comment on {target}'s profile" +#~ msgstr "Respondeu a um comentário no perfil de {target}" + +#~ msgid "Replied to a comment on their own profile" +#~ msgstr "Respondeu a um comentário em seu próprio perfil" + +#, python-brace-format +#~ msgid "Edited a comment on {target}'s profile" +#~ msgstr "Editou um comentário no perfil de {target}" + +#~ msgid "Edited a comment on their own profile" +#~ msgstr "Editou um comentário em seu próprio perfil" + +#, python-brace-format +#~ msgid "Edited {target}'s profile" +#~ msgstr "Editado perfil {target}" + +#~ msgid "Edited their own profile" +#~ msgstr "Editou seu próprio perfil" + +#, python-brace-format +#~ msgid "Cleared the {field} field" +#~ msgstr "Limpou o campo {field}" + +#, python-brace-format +#~ msgid "{field} field changed to: {desc}" +#~ msgstr "Campo {field} alterado para: {desc}" + +#, python-brace-format +#~ msgid "Purged a comment on {target}'s profile" +#~ msgstr "Excluiu permanentemente um comentário no perfil de {target}" + +#~ msgid "Purged a comment on their own profile" +#~ msgstr "Limitou um comentário em seu próprio perfil" + +#, python-brace-format +#~ msgid "Deleted a comment on {target}'s profile" +#~ msgstr "Excluiu um comentário no perfil de {target}" + +#~ msgid "Deleted a comment on their own profile" +#~ msgstr "Excluiu um comentário em seu próprio perfil" + +#, python-brace-format +#~ msgid "Groups changed from {old_groups} to {new_groups}{reason}" +#~ msgstr "Grupos alterados de {old_groups} para {new_groups}{reason}" + +#, python-brace-format +#~ msgid "Completed deletion of translatable page \"{article}\"" +#~ msgstr "Exclusão concluída da página traduzível \"{article}\"" #, python-brace-format #~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" diff --git a/locale/pt-br/LC_MESSAGES/misc.po b/locale/pt-br/LC_MESSAGES/misc.po index f06eac9..c7d92aa 100644 --- a/locale/pt-br/LC_MESSAGES/misc.po +++ b/locale/pt-br/LC_MESSAGES/misc.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-28 23:45+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-11-27 13:07+0000\n" "Last-Translator: dr03ramos \n" "Language-Team: Portuguese (Brazil) 1;\n" "X-Generator: Weblate 4.2.1\n" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Location" msgstr "Localização" -#: src/misc.py:45 +#: src/misc.py:44 msgid "About me" msgstr "Sobre mim" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Google link" msgstr "Link do Google" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Facebook link" msgstr "Link do Facebook" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitter link" msgstr "Link do Twitter" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Reddit link" msgstr "Link do Reddit" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitch link" msgstr "Link da Twitch" -#: src/misc.py:45 +#: src/misc.py:44 msgid "PSN link" msgstr "Link do PSN" -#: src/misc.py:45 +#: src/misc.py:44 msgid "VK link" msgstr "Link do VK" -#: src/misc.py:45 +#: src/misc.py:44 msgid "XBL link" msgstr "Link do XBL" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Steam link" msgstr "Link da Steam" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Discord handle" msgstr "Link do Discord" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Battle.net handle" msgstr "Link do Battle.net" -#: src/misc.py:119 +#: src/misc.py:138 msgid "" "\n" "__And more__" @@ -79,10 +79,10 @@ msgstr "" "\n" "__E mais__" -#: src/misc.py:276 +#: src/misc.py:322 msgid "Unknown" msgstr "Desconhecido" -#: src/misc.py:278 +#: src/misc.py:324 msgid "unknown" msgstr "desconhecido" diff --git a/locale/pt-br/LC_MESSAGES/rcgcdw.po b/locale/pt-br/LC_MESSAGES/rcgcdw.po index 102f19b..e87355a 100644 --- a/locale/pt-br/LC_MESSAGES/rcgcdw.po +++ b/locale/pt-br/LC_MESSAGES/rcgcdw.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-11-27 13:07+0000\n" "Last-Translator: dr03ramos \n" "Language-Team: Portuguese (Brazil) 1;\n" "X-Generator: Weblate 4.2.1\n" -#: src/rcgcdw.py:115 src/rcgcdw.py:117 src/rcgcdw.py:119 src/rcgcdw.py:121 -#: src/rcgcdw.py:123 src/rcgcdw.py:125 src/rcgcdw.py:127 +#: src/rcgcdw.py:116 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "{value} (med. {avg})" -#: src/rcgcdw.py:147 +#: src/rcgcdw.py:135 msgid "Daily overview" msgstr "Visão geral diária" -#: src/rcgcdw.py:154 +#: src/rcgcdw.py:142 msgid "No activity" msgstr "Sem atividade" -#: src/rcgcdw.py:178 +#: src/rcgcdw.py:166 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} ação)" msgstr[1] " ({} ações)" -#: src/rcgcdw.py:180 +#: src/rcgcdw.py:168 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} edição)" msgstr[1] " ({} edições)" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:173 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} ação)" msgstr[1] " UTC ({} ações)" -#: src/rcgcdw.py:187 src/rcgcdw.py:188 src/rcgcdw.py:192 +#: src/rcgcdw.py:175 src/rcgcdw.py:178 msgid "But nobody came" msgstr "Ninguém apareceu por aqui" -#: src/rcgcdw.py:195 +#: src/rcgcdw.py:182 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Usuário mais ativo" msgstr[1] "Usuários mais ativos" -#: src/rcgcdw.py:196 +#: src/rcgcdw.py:183 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "Artigo mais editado" msgstr[1] "Artigos mais editados" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:184 msgid "Edits made" msgstr "Edições feitas" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:184 msgid "New files" msgstr "Novos arquivos" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:185 msgid "Admin actions" msgstr "Ações de administração" -#: src/rcgcdw.py:198 +#: src/rcgcdw.py:185 msgid "Bytes changed" msgstr "Bytes alterados" -#: src/rcgcdw.py:198 +#: src/rcgcdw.py:186 msgid "New articles" msgstr "Novos artigos" -#: src/rcgcdw.py:199 +#: src/rcgcdw.py:186 msgid "Unique contributors" msgstr "Contribuidores exclusivos" -#: src/rcgcdw.py:200 +#: src/rcgcdw.py:187 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Hora mais ativa" msgstr[1] "Horas mais ativas" -#: src/rcgcdw.py:201 +#: src/rcgcdw.py:188 msgid "Day score" msgstr "Pontuação do dia" -#: src/rcgcdw.py:243 -msgid "director" -msgstr "diretor" +#: src/rcgcdw.py:214 +msgid "~~hidden~~" +msgstr "" -#: src/rcgcdw.py:243 -msgid "bot" -msgstr "robô" +#: src/rcgcdw.py:216 +msgid "No description provided" +msgstr "" -#: src/rcgcdw.py:243 -msgid "editor" -msgstr "editor" +#: src/rcgcdw.py:219 +msgid "hidden" +msgstr "" -#: src/rcgcdw.py:243 -msgid "directors" -msgstr "diretores" +#~ msgid "director" +#~ msgstr "diretor" -#: src/rcgcdw.py:243 -msgid "sysop" -msgstr "administrador" +#~ msgid "bot" +#~ msgstr "robô" -#: src/rcgcdw.py:243 -msgid "bureaucrat" -msgstr "burocrata" +#~ msgid "editor" +#~ msgstr "editor" -#: src/rcgcdw.py:243 -msgid "reviewer" -msgstr "revisor" +#~ msgid "directors" +#~ msgstr "diretores" -#: src/rcgcdw.py:244 -msgid "autoreview" -msgstr "revisor automático" +#~ msgid "sysop" +#~ msgstr "administrador" -#: src/rcgcdw.py:244 -msgid "autopatrol" -msgstr "patrulheiro automático" +#~ msgid "bureaucrat" +#~ msgstr "burocrata" -#: src/rcgcdw.py:244 -msgid "wiki_guardian" -msgstr "guardião da wiki" +#~ msgid "reviewer" +#~ msgstr "revisor" -#: src/rcgcdw.py:244 -msgid "second" -msgid_plural "seconds" -msgstr[0] "segundo" -msgstr[1] "segundos" +#~ msgid "autoreview" +#~ msgstr "revisor automático" -#: src/rcgcdw.py:244 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "minuto" -msgstr[1] "minutos" +#~ msgid "autopatrol" +#~ msgstr "patrulheiro automático" -#: src/rcgcdw.py:244 -msgid "hour" -msgid_plural "hours" -msgstr[0] "hora" -msgstr[1] "horas" +#~ msgid "wiki_guardian" +#~ msgstr "guardião da wiki" -#: src/rcgcdw.py:244 -msgid "day" -msgid_plural "days" -msgstr[0] "dia" -msgstr[1] "dias" +#~ msgid "second" +#~ msgid_plural "seconds" +#~ msgstr[0] "segundo" +#~ msgstr[1] "segundos" -#: src/rcgcdw.py:244 -msgid "week" -msgid_plural "weeks" -msgstr[0] "semana" -msgstr[1] "semanas" +#~ msgid "minute" +#~ msgid_plural "minutes" +#~ msgstr[0] "minuto" +#~ msgstr[1] "minutos" -#: src/rcgcdw.py:244 -msgid "month" -msgid_plural "months" -msgstr[0] "mês" -msgstr[1] "meses" +#~ msgid "hour" +#~ msgid_plural "hours" +#~ msgstr[0] "hora" +#~ msgstr[1] "horas" -#: src/rcgcdw.py:244 -msgid "year" -msgid_plural "years" -msgstr[0] "ano" -msgstr[1] "anos" +#~ msgid "day" +#~ msgid_plural "days" +#~ msgstr[0] "dia" +#~ msgstr[1] "dias" -#: src/rcgcdw.py:244 -msgid "millennium" -msgid_plural "millennia" -msgstr[0] "milênio" -msgstr[1] "milênios" +#~ msgid "week" +#~ msgid_plural "weeks" +#~ msgstr[0] "semana" +#~ msgstr[1] "semanas" -#: src/rcgcdw.py:244 -msgid "decade" -msgid_plural "decades" -msgstr[0] "década" -msgstr[1] "décadas" +#~ msgid "month" +#~ msgid_plural "months" +#~ msgstr[0] "mês" +#~ msgstr[1] "meses" -#: src/rcgcdw.py:244 -msgid "century" -msgid_plural "centuries" -msgstr[0] "século" -msgstr[1] "séculos" +#~ msgid "year" +#~ msgid_plural "years" +#~ msgstr[0] "ano" +#~ msgstr[1] "anos" + +#~ msgid "millennium" +#~ msgid_plural "millennia" +#~ msgstr[0] "milênio" +#~ msgstr[1] "milênios" + +#~ msgid "decade" +#~ msgid_plural "decades" +#~ msgstr[0] "década" +#~ msgstr[1] "décadas" + +#~ msgid "century" +#~ msgid_plural "centuries" +#~ msgstr[0] "século" +#~ msgstr[1] "séculos" diff --git a/locale/pt-br/LC_MESSAGES/redaction.po b/locale/pt-br/LC_MESSAGES/redaction.po index c50c93b..0d9162f 100644 --- a/locale/pt-br/LC_MESSAGES/redaction.po +++ b/locale/pt-br/LC_MESSAGES/redaction.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"POT-Creation-Date: 2021-05-18 13:48+0200\n" "PO-Revision-Date: 2020-11-21 01:09+0000\n" "Last-Translator: Eduaddad \n" "Language-Team: Portuguese (Brazil) 1;\n" "X-Generator: Weblate 4.2.1\n" -#: src/discord/redaction.py:62 src/discord/redaction.py:65 -#: src/discord/redaction.py:70 +#: src/discord/redaction.py:77 src/discord/redaction.py:80 +#: src/discord/redaction.py:85 msgid "Removed" msgstr "Removido" diff --git a/locale/ru/LC_MESSAGES/formatters.po b/locale/ru/LC_MESSAGES/formatters.po index 0064699..d7331d3 100644 --- a/locale/ru/LC_MESSAGES/formatters.po +++ b/locale/ru/LC_MESSAGES/formatters.po @@ -12,24 +12,9 @@ #, fuzzy msgid "" msgstr "" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" -"PO-Revision-Date: 2020-12-29 15:21+0000\n" -"Last-Translator: Philo04 \n" -"Language-Team: Russian \n" -"Language: ru\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-12-30 13:26+0000\n" "Last-Translator: Philo04 \n" "Language-Team: Russian =2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.2.1\n" -#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 -#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 -#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 -msgid "unknown" -msgstr "неизвестно" +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" +msgstr "__Только пробел__" -#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 -#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 -#: src/rc_formatters.py:75 src/rc_formatters.py:96 +#: src/api/util.py:71 +msgid "Removed" +msgstr "Удалено" + +#: src/api/util.py:73 +msgid "Added" +msgstr "Добавлено" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 msgid "Unregistered user" msgstr "Незарегистрированный пользователь" -#: src/discussion_formatters.py:39 +#: src/api/util.py:160 extensions/base/discussions.py:193 +#: extensions/base/discussions.py:195 +msgid "Tags" +msgstr "Метки" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "**Добавлено**: " + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr " и ещё {}\n" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "**Удалено**: " + +#: src/api/util.py:166 +msgid " and {} more" +msgstr " и ещё {}" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "Изменены категории" + +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "Создал Cargo таблицу \"{table}\"" + +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) создал таблицу Cargo \"{table}\"" + +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "Воссоздал Cargo таблицу \"{table}\"" + +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) воссоздал таблицу Cargo \"{table}\"" + +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "Заменил Cargo таблицу \"{table}\"" + +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) заменил таблицу Cargo \"{table}\"" + +#: extensions/base/cargo.py:105 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "Удалил Cargo таблицу \"{table}\"" + +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) удалил таблицу Cargo \"{table}\"" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "Пометил страницу \"{article}\" как доступную для перевода" + +#: extensions/base/translate.py:55 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" +"[{author}]({author_url}) пометил страницу [{article}]({article_url}) как " +"доступную для перевода{comment}" + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "Удалил \"{article}\" из системы перевода" + +#: extensions/base/translate.py:80 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" +"[{author}]({author_url}) удалил [{article}]({article_url}) из системы " +"перевода{comment}" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" +"Переименовал доступную для перевода страницу \"{article}\" в \"{target}\"" + +#: extensions/base/translate.py:106 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) переименовал доступную для перевода страницу " +"*{article}* в [{target}]({target_url}){comment}" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" +"Столкнулся с проблемой при попытке переименования \"{article}\" в " +"\"{target}\"" + +#: extensions/base/translate.py:133 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) столкнулся с проблемой при попытке переименования " +"[{article}]({article_url}) в [{target}]({target_url}){comment}" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" +"Не смог удалить \"{article}\", относящуюся к доступной для перевода странице " +"\"{target}\"" + +#: extensions/base/translate.py:161 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) не смог удалить [{article}]({article_url}), " +"относящуюся к доступной для перевода странице [{target}]({target_url})" +"{comment}" + +#: extensions/base/translate.py:177 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "Удалил страницу перевода \"{article}\"" + +#: extensions/base/translate.py:188 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) удалил страницу перевода [{article}]({article_url})" +"{comment}" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" +"Не смог удалить \"{article}\", относящуюся к странице перевода \"{target}\"" + +#: extensions/base/translate.py:215 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) не смог удалить [{article}]({article_url}), " +"относящуюся к странице перевода [{target}]({target_url}){comment}" + +#: extensions/base/translate.py:231 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "Повысил приоритет перевода страницы \"{article}\"" + +#: extensions/base/translate.py:240 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) повысил приоритет перевода страницы [{article}]" +"({article_url}){comment}" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "Понизил приоритет перевода страницы \"{article}\"" + +#: extensions/base/translate.py:264 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) понизил приоритет перевода страницы [{article}]" +"({article_url}){comment}" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "Ограничил для страницы \"{article}\" список языков: `{languages}`" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" +"Задал для страницы \"{article}\" следующий список приоритетных языков: " +"`{languages}`" + +#: extensions/base/translate.py:288 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "Удалил приоритетные языки со страницы \"{article}\"" + +#: extensions/base/translate.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) ограничил для страницы [{article}]({article_url}) " +"список языков: `{languages}`{comment}" + +#: extensions/base/translate.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) задал для страницы [{article}]({article_url}) " +"следующий список приоритетных языков: `{languages}`{comment}" + +#: extensions/base/translate.py:315 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) удалил приоритетные языки со страницы [{article}]" +"({article_url}){comment}" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" +"Добавил доступную для перевода страницу \"{article}\" в агрегированную " +"группу \"{group}\"" + +#: extensions/base/translate.py:342 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) добавил доступную для перевода страницу [{article}]" +"({article_url}) в агрегированную группу \"{group}\"{comment}" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" +"Удалил доступную для перевода страницу \"{article}\" из агрегированной " +"группы \"{group}\"" + +#: extensions/base/translate.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) удалил доступную для перевода страницу [{article}]" +"({article_url}) из агрегированной группы \"{group}\"{comment}" + +#: extensions/base/translate.py:387 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "Проверил перевод \"{article}\"" + +#: extensions/base/translate.py:401 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) проверил перевод [{article}]({article_url}){comment}" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" +"Изменил состояние переводов страницы \"{article}\" на `{language}` язык" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "Старое состояние" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "Новое состояние" + +#: extensions/base/translate.py:431 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) изменил состояние переводов страницы [{article}]" +"({article_url}) на `{language}` язык с `{old_state}` на `{new_state}" +"`{comment}" + +#: extensions/base/translate.py:439 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) изменил состояние переводов страницы [{article}]" +"({article_url}) на `{language}` язык на `{new_state}`{comment}" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "(по умолчанию)" + +#: extensions/base/translate.py:464 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "Изменил язык страницы «{article}»" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "Старый язык" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "Новый язык" + +#: extensions/base/translate.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" +"[{author}]({author_url}) изменил язык страницы [{article}]({article_url}) с " +"{old_lang} на {new_lang}{comment}" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "неизвестно" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "Создал \"{title}\"" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "Создал опрос \"{title}\"" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "Вариант {}" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[Просмотреть изображение]({image_url})__" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "Создал викторину \"{title}\"" + +#: extensions/base/discussions.py:193 +msgid "{} tags" +msgstr "{} меток" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "Ответил на \"{title}\"" + +#: extensions/base/discussions.py:214 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " @@ -63,7 +448,7 @@ msgstr "" "[{author}]({author_url}) создал(а) [{title}](<{url}f/p/{threadId}>) в " "{forumName}" -#: src/discussion_formatters.py:42 +#: extensions/base/discussions.py:217 #, python-brace-format msgid "" "[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " @@ -72,7 +457,7 @@ msgstr "" "[{author}]({author_url}) создал(а) опрос [{title}](<{url}f/p/{threadId}>) в " "{forumName}" -#: src/discussion_formatters.py:45 +#: extensions/base/discussions.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " @@ -81,7 +466,7 @@ msgstr "" "[{author}]({author_url}) создал викторину [{title}](<{url}f/p/{threadId}>) в " "{forumName}" -#: src/discussion_formatters.py:54 +#: extensions/base/discussions.py:234 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " @@ -90,7 +475,17 @@ msgstr "" "[{author}]({author_url}) [ответил](<{url}f/p/{threadId}/r/{postId}>) на " "[{title}](<{url}f/p/{threadId}>) в {forumName}" -#: src/discussion_formatters.py:61 +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "Создал \"{title}\" на Стене Обсуждения Участника {user}" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "Ответил на \"{title}\" на Стене Обсуждения Участника {user}" + +#: extensions/base/discussions.py:312 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" @@ -101,7 +496,7 @@ msgstr "" "{user_wall}?threadId={threadId}>) на [Стене Обсуждения Участника {user}]" "(<{url}wiki/Message_Wall:{user_wall}>)" -#: src/discussion_formatters.py:64 +#: extensions/base/discussions.py:318 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" @@ -114,7 +509,17 @@ msgstr "" "{user_wall}?threadId={threadId}>) на [Стене Обсуждения Участника {user}]" "(<{url}wiki/Message_Wall:{user_wall}>)" -#: src/discussion_formatters.py:72 +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "Оставил Комментарий к статье {article}" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "Ответил на Комментарий к статье {article}" + +#: extensions/base/discussions.py:359 #, python-brace-format msgid "" "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " @@ -123,7 +528,7 @@ msgstr "" "[{author}]({author_url}) оставил [комментарий](<{url}?commentId={commentId}" ">) к [{article}](<{url}>)" -#: src/discussion_formatters.py:78 +#: extensions/base/discussions.py:365 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" @@ -134,153 +539,226 @@ msgstr "" "&replyId={replyId}>) на [комментарий](<{url}?commentId={commentId}>) к " "[{article}](<{url}>)" -#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "Изменил настройки вики" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) изменил настройки вики{reason}" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "Удалил вики \"{wiki}\"" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "Неизвестно" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) удалил вики *{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:80 +#, fuzzy, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "Изменил группу \"{usergroup_name}\"" + +#: extensions/base/managewiki.py:89 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" +"[{author}]({author_url}) изменил группу пользователей *{group_name}*{comment}" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "Заблокировал вики \"{wiki}\"" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) заблокировал вики *{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:124 +#, fuzzy, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "Изменил пространство имён \"{namespace_name}\"" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "Вики" + +#: extensions/base/managewiki.py:134 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) изменил пространство имён *{namespace_name}* на " +"вики *{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:147 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "Удалил пространство имён \"{namespace_name}\"" + +#: extensions/base/managewiki.py:158 #, python-brace-format msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" msgstr "" -"Неизвестное событие `{event}`, выполненное участником [{author}]" -"({author_url}), сообщите об этом на [сервере поддержки](<{support}>)." +"[{author}]({author_url}) удалил пространство имён *{namespace_name}* на вики " +"*{wiki_name}*{comment}" -#: src/discussion_formatters.py:123 +#: extensions/base/managewiki.py:173 #, python-brace-format -msgid "Created \"{title}\"" -msgstr "Создал \"{title}\"" +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "Изменил группу \"{usergroup_name}\"" -#: src/discussion_formatters.py:127 +#: extensions/base/managewiki.py:182 #, python-brace-format -msgid "Created a poll \"{title}\"" -msgstr "Создал опрос \"{title}\"" - -#: src/discussion_formatters.py:134 -msgid "Option {}" -msgstr "Вариант {}" - -#: src/discussion_formatters.py:135 -#, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "__[Просмотреть изображение]({image_url})__" - -#: src/discussion_formatters.py:139 -#, python-brace-format -msgid "Created a quiz \"{title}\"" -msgstr "Создал викторину \"{title}\"" - -#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 -#: src/rc_formatters.py:1283 -msgid "Tags" -msgstr "Метки" - -#: src/discussion_formatters.py:155 -msgid "{} tags" -msgstr "{} меток" - -#: src/discussion_formatters.py:160 -#, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "Ответил на \"{title}\"" - -#: src/discussion_formatters.py:169 -#, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "Создал \"{title}\" на Стене Обсуждения Участника {user}" - -#: src/discussion_formatters.py:173 -#, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "Ответил на \"{title}\" на Стене Обсуждения Участника {user}" - -#: src/discussion_formatters.py:180 -#, python-brace-format -msgid "Commented on {article}" -msgstr "Оставил Комментарий к статье {article}" - -#: src/discussion_formatters.py:184 -#, python-brace-format -msgid "Replied to a comment on {article}" -msgstr "Ответил на Комментарий к статье {article}" - -#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 -#, python-brace-format -msgid "Unknown event `{event}`" -msgstr "Неизвестное событие `{event}`" - -#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 -#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 -#, fuzzy -msgid "Report this on the support server" +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" msgstr "" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" -"Сообщите об этом на сервере поддержки\n" -"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" -"Сообщить об этом на сервер поддержки" +"[{author}]({author_url}) изменил группу пользователей *{group_name}*{comment}" -#: src/rc_formatters.py:28 +#: extensions/base/managewiki.py:195 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "Удалил вики \"{wiki}\"" + +#: extensions/base/managewiki.py:203 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) удалил вики *{wiki_name}*{comment}" + +#: extensions/base/managewiki.py:217 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "Разблокировал вики \"{wiki}\"" + +#: extensions/base/managewiki.py:225 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) разблокировал вики *{wiki_name}*{comment}" + +#: extensions/base/datadump.py:36 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "Сгенерировал дамп {file}" + +#: extensions/base/datadump.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "[{author}]({author_url}) сгенерировал дамп *{file}*{comment}" + +#: extensions/base/datadump.py:58 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "Удалил дамп {file}" + +#: extensions/base/datadump.py:67 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "[{author}]({author_url}) удалил дамп *{file}*{comment}" + +#: extensions/base/abusefilter.py:29 msgid "None" msgstr "Нет" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Warning issued" msgstr "Выдано предупреждение" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Blocked user**" msgstr "**Участник заблокирован**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Tagged the edit" msgstr "Проставлена метка" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Disallowed the action" msgstr "Действие отклонено" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**IP range blocked**" msgstr "**Диапазон IP-адресов заблокирован**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Throttled actions" msgstr "Действия замедлены" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Removed autoconfirmed group" msgstr "Сняты права автоподтверждённого" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Removed from privileged groups**" msgstr "**Удаление из привилегированных групп**" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Edit" msgstr "Правка" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Upload" msgstr "Загрузка Файла" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Move" msgstr "Переименование" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Stash upload" msgstr "Загрузка Файла во временное хранилище" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Deletion" msgstr "Удаление" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Account creation" msgstr "Создание учётной записи" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Auto account creation" msgstr "Автоматическое создание учётной записи" -#: src/rc_formatters.py:83 +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "{user} вызвал срабатывание фильтра \"{abuse_filter}\"" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "Выполнил" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "Предпринятые меры" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "Заголовок" + +#: extensions/base/abusefilter.py:66 #, python-brace-format msgid "" "[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " @@ -290,19 +768,85 @@ msgstr "" "действие \"{action}\" на странице *[{target}]({target_url})* - Предпринятые " "меры: {result}." -#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 -#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 -#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 -#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 -#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 -#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 -#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 -#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 -#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 -msgid "Unknown" -msgstr "Неизвестно" +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "Отредактировал фильтр злоупотреблений под номером {number}" -#: src/rc_formatters.py:116 +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) отредактировал фильтр злоупотреблений [под номером " +"{number}]({filter_url})" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "Создал фильтр злоупотреблений под номером {number}" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) создал фильтр злоупотреблений [под номером {number}]" +"({filter_url})" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "(Н!) " + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "м" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "б" + +#: extensions/base/mediawiki.py:112 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" @@ -311,7 +855,7 @@ msgstr "" "[{author}]({author_url}) отредактировал страницу [{article}]({edit_link})" "{comment} {bold}({sign}{edit_size}){bold}" -#: src/rc_formatters.py:118 +#: extensions/base/mediawiki.py:117 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" @@ -320,19 +864,55 @@ msgstr "" "[{author}]({author_url}) создал страницу [{article}]({edit_link}){comment} " "{bold}({sign}{edit_size}){bold}" -#: src/rc_formatters.py:121 -#, python-brace-format -msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" -msgstr "[{author}]({author_url}) загрузил [{file}]({file_link}){comment}" +#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +msgid "Options" +msgstr "Настройки" -#: src/rc_formatters.py:128 +#: extensions/base/mediawiki.py:191 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([просмотр]({link}) | [отмена]({undolink}))" + +#: extensions/base/mediawiki.py:196 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "Загрузил новую версию {name}" + +#: extensions/base/mediawiki.py:198 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "Возвратил версию {name}" + +#: extensions/base/mediawiki.py:200 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "Загрузил {name}" + +#: extensions/base/mediawiki.py:209 +msgid "**No license!**" +msgstr "**Отсутствует лицензия!**" + +#: extensions/base/mediawiki.py:224 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"Лицензия: {}" + +#: extensions/base/mediawiki.py:226 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([просмотр]({link}))" + +#: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" msgstr "" "[{author}]({author_url}) возвратил версию [{file}]({file_link}) {comment}" -#: src/rc_formatters.py:132 +#: extensions/base/mediawiki.py:248 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -340,13 +920,28 @@ msgid "" msgstr "" "[{author}]({author_url}) загрузил новую версию [{file}]({file_link}){comment}" -#: src/rc_formatters.py:135 +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) загрузил [{file}]({file_link}){comment}" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "Удалил страницу «{article}»" + +#: extensions/base/mediawiki.py:283 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "" "[{author}]({author_url}) удалил страницу [{page}]({page_link}){comment}" -#: src/rc_formatters.py:141 +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "Удалил перенаправление «{article}» с помощью перезаписи" + +#: extensions/base/mediawiki.py:308 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -355,247 +950,36 @@ msgstr "" "[{author}]({author_url}) удалил перенаправление с помощью перезаписи [{page}]" "({page_link}){comment}" -#: src/rc_formatters.py:147 src/rc_formatters.py:152 -msgid "without making a redirect" -msgstr "без перенаправления" - -#: src/rc_formatters.py:147 src/rc_formatters.py:153 -msgid "with a redirect" -msgstr "с перенаправлением" - -#: src/rc_formatters.py:148 +#: extensions/base/mediawiki.py:322 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" +msgid "Restored {article}" +msgstr "Восстановил страницу «{article}»" + +#: extensions/base/mediawiki.py:331 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" -"[{author}]({author_url}) переименовал страницу {redirect}*{article}* в " -"[{target}]({target_url}) {made_a_redirect}{comment}" - -#: src/rc_formatters.py:154 -#, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -"[{target}]({target_url}) {made_a_redirect}{comment}" -msgstr "" -"[{author}]({author_url}) переименовал страницу {redirect}*{article}* поверх " -"перенаправления в [{target}]({target_url}) {made_a_redirect}{comment}" - -#: src/rc_formatters.py:159 -#, python-brace-format -msgid "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) перенёс параметры защиты со страницы {redirect}" -"*{article}* на страницу [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:170 src/rc_formatters.py:855 -msgid "for infinity and beyond" -msgstr "до бесконечности и дальше" - -#: src/rc_formatters.py:179 src/rc_formatters.py:863 -#, python-brace-format -msgid "for {num} {translated_length}" -msgstr "на {num}{translated_length}" - -#: src/rc_formatters.py:185 src/rc_formatters.py:867 -msgid "until {}" -msgstr "до {}" - -#: src/rc_formatters.py:189 -msgid " on pages: " -msgstr " на страницах: " - -#: src/rc_formatters.py:196 src/rc_formatters.py:881 -msgid " and namespaces: " -msgstr " и в пространствах имён: " - -#: src/rc_formatters.py:198 -msgid " on namespaces: " -msgstr " в пространствах имён: " - -#: src/rc_formatters.py:210 -#, python-brace-format -msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" -msgstr "" -"[{author}]({author_url}) заблокировал участника [{user}]({user_url}) на срок " -"«{time}»{restriction_desc}{comment}" - -#: src/rc_formatters.py:214 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) изменил параметры блокировки для участника " -"[{blocked_user}]({user_url}){comment}" - -#: src/rc_formatters.py:218 -#, python-brace-format -msgid "" -"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) разблокировал участника [{blocked_user}]({user_url})" +"[{author}]({author_url}) восстановил страницу [{article}]({article_url})" "{comment}" -#: src/rc_formatters.py:223 +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "Изменил видимость событий в журнале" + +#: extensions/base/mediawiki.py:356 #, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) оставил [комментарий]({comment}) на профиле " -"участника {target}" +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "[{author}]({author_url}) изменил видимость событий журнала{comment}" -#: src/rc_formatters.py:225 +#: extensions/base/mediawiki.py:370 #, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) оставил [комментарий]({comment}) на своём " -"собственном профиле" +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "Изменил видимость правки на странице «{article}» " +msgstr[1] "Изменил видимость {amount} правок на странице «{article}» " +msgstr[2] "Изменил видимость {amount} правок на странице «{article}» " -#: src/rc_formatters.py:231 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -"profile" -msgstr "" -"[{author}]({author_url}) ответил на [комментарий]({comment}) на профиле " -"участника {target}" - -#: src/rc_formatters.py:237 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on their own " -"profile" -msgstr "" -"[{author}]({author_url}) ответил на [комментарий]({comment}) на своём " -"собственном профиле" - -#: src/rc_formatters.py:245 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) отредактировал [комментарий]({comment}) на профиле " -"участника {target}" - -#: src/rc_formatters.py:251 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) отредактировал [комментарий]({comment}) на своём " -"собственном профиле" - -#: src/rc_formatters.py:257 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "[{author}]({author_url}) удалил комментарий на профиле {target}" - -#: src/rc_formatters.py:259 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "" -"[{author}]({author_url}) удалил комментарий на своём собственном профиле" - -#: src/rc_formatters.py:267 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) удалил [комментарий]({comment}) на профиле " -"участника {target}" - -#: src/rc_formatters.py:269 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) удалил [комментарий]({comment}) на своём " -"собственном профиле" - -#: src/rc_formatters.py:274 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) отредактировал поле «{field}» на профиле участника " -"[{target}]({target_url}). *({desc})*" - -#: src/rc_formatters.py:281 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) отредактировал поле «{field}» на [своём собственном]" -"({target_url}) профиле. *({desc})*" - -#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 -#: src/rc_formatters.py:979 -msgid "none" -msgstr "ничего" - -#: src/rc_formatters.py:301 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) from {old_groups} to {new_groups}{comment}" -msgstr "" -"[{author}]({author_url}) изменил модель содержимого страницы [{target}]" -"({target_url}) с {old_groups} на {new_groups}{comment}" - -#: src/rc_formatters.py:303 -#, python-brace-format -msgid "" -"{author} autopromoted [{target}]({target_url}) from {old_groups} to " -"{new_groups}{comment}" -msgstr "" -"{author} изменил модель содержимого страницы [{target}]({target_url}) с " -"{old_groups} на {new_groups}{comment}" - -#: src/rc_formatters.py:304 src/rc_formatters.py:965 -msgid "System" -msgstr "Система" - -#: src/rc_formatters.py:309 -#, python-brace-format -msgid "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) защитил страницу [{article}]({article_url}) со " -"следующими настройками: {settings}{comment}" - -#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 -#: src/rc_formatters.py:993 -msgid " [cascading]" -msgstr " [каскадно]" - -#: src/rc_formatters.py:316 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) изменил настройки защиты страницы [{article}]" -"({article_url}) на: {settings}{comment}" - -#: src/rc_formatters.py:323 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) снял защиту со страницу [{article}]({article_url})" -"{comment}" - -#: src/rc_formatters.py:327 +#: extensions/base/mediawiki.py:383 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -613,7 +997,236 @@ msgstr[2] "" "[{author}]({author_url}) изменил видимость {amount} правок на странице " "[{article}]({article_url}){comment}" -#: src/rc_formatters.py:340 +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "Перенаправление не было сделано" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "Было сделано перенаправление" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "Переименовал страницу {redirect}{article} в {target}" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "без перенаправления" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "с перенаправлением" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) переименовал страницу {redirect}*{article}* в " +"[{target}]({target_url}) {made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" +"Переименовал страницу {redirect}{article} в {title} поверх перенаправления" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) переименовал страницу {redirect}*{article}* поверх " +"перенаправления в [{target}]({target_url}) {made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "Перенёс параметры защиты с «{redirect}{article}» на «{title}»" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) перенёс параметры защиты со страницы {redirect}" +"*{article}* на страницу [{target}]({target_url}){comment}" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "Защитил страницу «{target}»" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr " [каскадно]" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) защитил страницу [{article}]({article_url}) со " +"следующими настройками: {settings}{comment}" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "Изменил уровень защиты для страницы «{article}»" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) изменил настройки защиты страницы [{article}]" +"({article_url}) на: {settings}{comment}" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "Убрал защиту со страницы «{article}»" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) снял защиту со страницу [{article}]({article_url})" +"{comment}" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "до бесконечности и дальше" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:610 +msgid "Blocked from editing the following pages: " +msgstr "Заблокирован от редактирования в следующих страницах: " + +#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr " и в пространствах имён: " + +#: extensions/base/mediawiki.py:619 +msgid "Blocked from editing pages on following namespaces: " +msgstr "" +"Заблокирован от редактирования на страницах в следующих пространствах имён: " + +#: extensions/base/mediawiki.py:630 +msgid "Partial block details" +msgstr "Частичные детали блокировки" + +#: extensions/base/mediawiki.py:633 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:635 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "Заблокировал участника {blocked_user} {time}" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr " на страницах: " + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr " в пространствах имён: " + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) заблокировал участника [{user}]({user_url}) на срок " +"«{time}»{restriction_desc}{comment}" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "Изменил параметры блокировки для {blocked_user}" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) изменил параметры блокировки для участника " +"[{blocked_user}]({user_url}){comment}" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "Разблокировал участника {blocked_user}" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) разблокировал участника [{blocked_user}]({user_url})" +"{comment}" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "Действие было скрыто администрацией" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "Действие было скрыто администрацией." + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "Импортировал страницу «{article}» с {count} правкой" +msgstr[1] "Импортировал страницу «{article}» с {count} правками" +msgstr[2] "Импортировал страницу «{article}» с {count} правками" + +#: extensions/base/mediawiki.py:772 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -631,19 +1244,17 @@ msgstr[2] "" "[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " "{count} правками{comment}" -#: src/rc_formatters.py:345 +#: extensions/base/mediawiki.py:788 #, python-brace-format -msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) восстановил страницу [{article}]({article_url})" -"{comment}" +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "Импортировал страницу «{article}» с {count} правкой из \"{source}\"" +msgstr[1] "" +"Импортировал страницу «{article}» с {count} правками из \"{source}\"" +msgstr[2] "" +"Импортировал страницу «{article}» с {count} правками из \"{source}\"" -#: src/rc_formatters.py:347 -#, python-brace-format -msgid "[{author}]({author_url}) changed visibility of log events{comment}" -msgstr "[{author}]({author_url}) изменил видимость событий журнала{comment}" - -#: src/rc_formatters.py:359 +#: extensions/base/mediawiki.py:803 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -661,23 +1272,57 @@ msgstr[2] "" "[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " "{count} версиями [{source}]({source_url}){comment}" -#: src/rc_formatters.py:364 +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:836 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "Изменил членство в группах для участника {target}" + +#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +msgid "System" +msgstr "Система" + +#: extensions/base/mediawiki.py:840 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "Участник {target} был автоматически повышен до новой группы участников" + +#: extensions/base/mediawiki.py:846 #, python-brace-format msgid "" -"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +"{reason}\n" +"{added}{linebreak}{removed}" msgstr "" -"[{author}]({author_url}) отредактировал фильтр злоупотреблений [под номером " -"{number}]({filter_url})" -#: src/rc_formatters.py:368 -#, python-brace-format +#: extensions/base/mediawiki.py:860 +#, fuzzy, python-brace-format msgid "" -"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) {added}{comma} {removed}{comment}" msgstr "" -"[{author}]({author_url}) создал фильтр злоупотреблений [под номером {number}]" -"({filter_url})" +"[{author}]({author_url}) изменил модель содержимого страницы [{target}]" +"({target_url}) с {old_groups} на {new_groups}{comment}" -#: src/rc_formatters.py:372 +#: extensions/base/mediawiki.py:864 +#, fuzzy, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"{comment}" +msgstr "" +"{author} изменил модель содержимого страницы [{target}]({target_url}) с " +"{old_groups} на {new_groups}{comment}" + +#: extensions/base/mediawiki.py:877 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" +"Объединил историю правок страницы «{article}» с историей правок «{dest}»" + +#: extensions/base/mediawiki.py:891 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -686,17 +1331,30 @@ msgstr "" "[{author}]({author_url}) объединил истории версий [{article}]({article_url}) " "с [{dest}]({dest_url}){comment}" -#: src/rc_formatters.py:375 +#: extensions/base/mediawiki.py:905 +msgid "Created account automatically" +msgstr "Учетная запись была создана автоматически" + +#: extensions/base/mediawiki.py:912 #, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "Учётная запись [{author}]({author_url}) была автоматически создана" -#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +msgid "Created account" +msgstr "Создана учётная запись" + +#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 #, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "Учётная запись [{author}]({author_url}) была создана" -#: src/rc_formatters.py:380 +#: extensions/base/mediawiki.py:944 +#, python-brace-format +msgid "Created account {article}" +msgstr "Создана учетная запись {article}" + +#: extensions/base/mediawiki.py:953 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" @@ -705,7 +1363,13 @@ msgstr "" "Учётная запись [{article}]({article_url}) была создана [{author}]" "({author_url}){comment}" -#: src/rc_formatters.py:383 +#: extensions/base/mediawiki.py:966 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" +"Создана учетная запись {article} и пароль был отправлен на электронную почту" + +#: extensions/base/mediawiki.py:977 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " @@ -714,7 +1378,16 @@ msgstr "" "Учётная запись [{article}]({article_url}) была создана [{author}]" "({author_url}) и пароль был отправлен на электронную почту{comment}" -#: src/rc_formatters.py:388 +#: extensions/base/mediawiki.py:1009 +msgid "Added an entry to the interwiki table" +msgstr "Добавил запись в таблицу префиксов интервики" + +#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Префикс: {prefix}, сайт: {website} | {desc}" + +#: extensions/base/mediawiki.py:1022 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -723,7 +1396,11 @@ msgstr "" "[{author}]({author_url}) добавил запись в [таблицу интервики]({table_url}), " "указывающая на {website} с префиксом {prefix}" -#: src/rc_formatters.py:394 +#: extensions/base/mediawiki.py:1036 +msgid "Edited an entry in interwiki table" +msgstr "Отредактировал запись в таблице префиксов интервики" + +#: extensions/base/mediawiki.py:1049 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -732,14 +1409,34 @@ msgstr "" "[{author}]({author_url}) отредактировал запись в [таблице интервики]" "({table_url}), указывающая на {website} с префиксом {prefix}" -#: src/rc_formatters.py:400 +#: extensions/base/mediawiki.py:1063 +msgid "Deleted an entry in interwiki table" +msgstr "Удалил запись из таблицы префиксов интервики" + +#: extensions/base/mediawiki.py:1064 #, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Префикс: {prefix} | {desc}" + +#: extensions/base/mediawiki.py:1074 +#, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" msgstr "" "[{author}]({author_url}) удалил запись из [таблицы интервики]({table_url})" -#: src/rc_formatters.py:403 +#: extensions/base/mediawiki.py:1091 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "Изменил модель содержимого для страницы «{article}»" + +#: extensions/base/mediawiki.py:1093 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "Модель изменена с «{old}» на «{new}»: {reason}" + +#: extensions/base/mediawiki.py:1105 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -748,7 +1445,18 @@ msgstr "" "[{author}]({author_url}) изменил модель содержимого страницы [{article}]" "({article_url}) с {old} на {new}{comment}" -#: src/rc_formatters.py:407 +#: extensions/base/mediawiki.py:1120 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" +"Создал страницу {article} с использованием нестандартной модели содержимого" + +#: extensions/base/mediawiki.py:1122 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "Создал с использованием модели содержимого {new}: {reason}" + +#: extensions/base/mediawiki.py:1133 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " @@ -757,63 +1465,41 @@ msgstr "" "[{author}]({author_url}) создал страницу [{article}]({article_url}) с " "использованием нестандартной модели содержимого {new}{comment}" -#: src/rc_formatters.py:410 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" -msgstr "" -"[{author}]({author_url}) отредактировал спрайт для [{article}]({article_url})" +#: extensions/base/mediawiki.py:1148 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "Создал метку «{tag}»" -#: src/rc_formatters.py:413 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" -msgstr "" -"[{author}]({author_url}) создал таблицу спрайтов для [{article}]" -"({article_url})" - -#: src/rc_formatters.py:416 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the slice for [{article}]({article_url})" -msgstr "" -"[{author}]({author_url}) отредактировал фрагмент для [{article}]" -"({article_url})" - -#: src/rc_formatters.py:421 -#, python-brace-format -msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) создал таблицу Cargo \"{table}\"" - -#: src/rc_formatters.py:423 -#, python-brace-format -msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) удалил таблицу Cargo \"{table}\"" - -#: src/rc_formatters.py:428 -#, python-brace-format -msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) воссоздал таблицу Cargo \"{table}\"" - -#: src/rc_formatters.py:433 -#, python-brace-format -msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) заменил таблицу Cargo \"{table}\"" - -#: src/rc_formatters.py:436 +#: extensions/base/mediawiki.py:1158 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) создал [метку]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:441 +#: extensions/base/mediawiki.py:1180 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "Удалил метку «{tag}»" + +#: extensions/base/mediawiki.py:1182 +#, fuzzy +msgid "Removed from" +msgstr "Удалено" + +#: extensions/base/mediawiki.py:1182 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: extensions/base/mediawiki.py:1194 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:443 +#: extensions/base/mediawiki.py:1204 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -831,255 +1517,45 @@ msgstr[2] "" "[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " "{count} правками{comment}" -#: src/rc_formatters.py:449 +#: extensions/base/mediawiki.py:1221 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "Активировал метку «{tag}»" + +#: extensions/base/mediawiki.py:1230 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) активировал [метку]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:452 +#: extensions/base/mediawiki.py:1249 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "Деактивировал метку «{tag}»" + +#: extensions/base/mediawiki.py:1258 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) деактивировал [метку]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:454 +#: extensions/base/mediawiki.py:1278 #, python-brace-format -msgid "[{author}]({author_url}) changed wiki settings{reason}" -msgstr "[{author}]({author_url}) изменил настройки вики{reason}" +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +"Переименовал участника \"{old_name}\" с {edits} правкой в \"{new_name}\"" +msgstr[1] "" +"Переименовал участника \"{old_name}\" с {edits} правками в \"{new_name}\"" +msgstr[2] "" +"Переименовал участника \"{old_name}\" с {edits} правками в \"{new_name}\"" -#: src/rc_formatters.py:456 +#: extensions/base/mediawiki.py:1283 #, python-brace-format -msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) удалил вики *{wiki_name}*{comment}" +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "Переименовал участника \"{old_name}\" в \"{new_name}\"" -#: src/rc_formatters.py:459 -#, python-brace-format -msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) заблокировал вики *{wiki_name}*{comment}" - -#: src/rc_formatters.py:462 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) modified namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) изменил пространство имён *{namespace_name}* на " -"вики *{wiki_name}*{comment}" - -#: src/rc_formatters.py:467 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) удалил пространство имён *{namespace_name}* на вики " -"*{wiki_name}*{comment}" - -#: src/rc_formatters.py:473 -#, python-brace-format -msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "" -"[{author}]({author_url}) изменил группу пользователей *{group_name}*{comment}" - -#: src/rc_formatters.py:477 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) удалил вики *{wiki_name}*{comment}" - -#: src/rc_formatters.py:481 -#, python-brace-format -msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) разблокировал вики *{wiki_name}*{comment}" - -#: src/rc_formatters.py:486 -#, python-brace-format -msgid "[{author}]({author_url}) generated *{file}* dump{comment}" -msgstr "[{author}]({author_url}) сгенерировал дамп *{file}*{comment}" - -#: src/rc_formatters.py:491 -#, python-brace-format -msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" -msgstr "[{author}]({author_url}) удалил дамп *{file}*{comment}" - -#: src/rc_formatters.py:502 -#, python-brace-format -msgid "" -"[{author}]({author_url}) marked [{article}]({article_url}) for " -"translation{comment}" -msgstr "" -"[{author}]({author_url}) пометил страницу [{article}]({article_url}) как " -"доступную для перевода{comment}" - -#: src/rc_formatters.py:509 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed [{article}]({article_url}) from the " -"translation system{comment}" -msgstr "" -"[{author}]({author_url}) удалил [{article}]({article_url}) из системы " -"перевода{comment}" - -#: src/rc_formatters.py:516 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed moving translation pages from *{article}* " -"to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) переименовал доступную для перевода страницу " -"*{article}* в [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:524 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encountered a problem while moving [{article}]" -"({article_url}) to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) столкнулся с проблемой при попытке переименования " -"[{article}]({article_url}) в [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:532 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translatable page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) удалил доступную для перевода страницу [{article}]" -"({article_url}){comment}" - -#: src/rc_formatters.py:540 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translatable page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) не смог удалить [{article}]({article_url}), " -"относящуюся к доступной для перевода странице [{target}]({target_url})" -"{comment}" - -#: src/rc_formatters.py:548 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translation page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) удалил страницу перевода [{article}]({article_url})" -"{comment}" - -#: src/rc_formatters.py:556 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translation page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) не смог удалить [{article}]({article_url}), " -"относящуюся к странице перевода [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:564 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) повысил приоритет перевода страницы [{article}]" -"({article_url}){comment}" - -#: src/rc_formatters.py:571 -#, python-brace-format -msgid "" -"[{author}]({author_url}) discouraged translation of [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) понизил приоритет перевода страницы [{article}]" -"({article_url}){comment}" - -#: src/rc_formatters.py:581 -#, python-brace-format -msgid "" -"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " -"`{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) ограничил для страницы [{article}]({article_url}) " -"список языков: `{languages}`{comment}" - -#: src/rc_formatters.py:587 -#, python-brace-format -msgid "" -"[{author}]({author_url}) set the priority languages for [{article}]" -"({article_url}) to `{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) задал для страницы [{article}]({article_url}) " -"следующий список приоритетных языков: `{languages}`{comment}" - -#: src/rc_formatters.py:593 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed priority languages from [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) удалил приоритетные языки со страницы [{article}]" -"({article_url}){comment}" - -#: src/rc_formatters.py:600 -#, python-brace-format -msgid "" -"[{author}]({author_url}) added translatable page [{article}]({article_url}) " -"to aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) добавил доступную для перевода страницу [{article}]" -"({article_url}) в агрегированную группу \"{group}\"{comment}" - -#: src/rc_formatters.py:607 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed translatable page [{article}]" -"({article_url}) from aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) удалил доступную для перевода страницу [{article}]" -"({article_url}) из агрегированной группы \"{group}\"{comment}" - -#: src/rc_formatters.py:619 -#, python-brace-format -msgid "" -"[{author}]({author_url}) reviewed translation [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) проверил перевод [{article}]({article_url}){comment}" - -#: src/rc_formatters.py:627 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) изменил состояние переводов страницы [{article}]" -"({article_url}) на `{language}` язык с `{old_state}` на `{new_state}" -"`{comment}" - -#: src/rc_formatters.py:634 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) изменил состояние переводов страницы [{article}]" -"({article_url}) на `{language}` язык на `{new_state}`{comment}" - -#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 -#: src/rc_formatters.py:1241 -msgid "(default)" -msgstr "(по умолчанию)" - -#: src/rc_formatters.py:647 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the language of [{article}]({article_url}) " -"from {old_lang} to {new_lang}{comment}" -msgstr "" -"[{author}]({author_url}) изменил язык страницы [{article}]({article_url}) с " -"{old_lang} на {new_lang}{comment}" - -#: src/rc_formatters.py:656 +#: extensions/base/mediawiki.py:1298 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " @@ -1097,7 +1573,7 @@ msgstr[2] "" "[{author}]({author_url}) переименовал участника *{old_name}* с {edits} " "правками в [{new_name}]({link}){comment}" -#: src/rc_formatters.py:661 +#: extensions/base/mediawiki.py:1306 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" @@ -1106,651 +1582,233 @@ msgstr "" "[{author}]({author_url}) переименовал участника *{old_name}* в [{new_name}]" "({link}){comment}" -#: src/rc_formatters.py:665 -msgid "An action has been hidden by administration." -msgstr "Действие было скрыто администрацией." - -#: src/rc_formatters.py:681 -#, python-brace-format -msgid "{user} triggered \"{abuse_filter}\"" -msgstr "{user} вызвал срабатывание фильтра \"{abuse_filter}\"" - -#: src/rc_formatters.py:682 -msgid "Performed" -msgstr "Выполнил" - -#: src/rc_formatters.py:683 -msgid "Action taken" -msgstr "Предпринятые меры" - -#: src/rc_formatters.py:684 -msgid "Title" -msgstr "Заголовок" - -#: src/rc_formatters.py:693 src/rc_formatters.py:980 -msgid "No description provided" -msgstr "Нет описания правки" - -#: src/rc_formatters.py:717 -msgid "(N!) " -msgstr "(Н!) " - -#: src/rc_formatters.py:718 -msgid "m" -msgstr "м" - -#: src/rc_formatters.py:718 -msgid "b" -msgstr "б" - -#: src/rc_formatters.py:735 src/rc_formatters.py:740 -msgid "__Only whitespace__" -msgstr "__Только пробел__" - -#: src/rc_formatters.py:745 -msgid "Removed" -msgstr "Удалено" - -#: src/rc_formatters.py:747 -msgid "Added" -msgstr "Добавлено" - -#: src/rc_formatters.py:781 src/rc_formatters.py:820 -msgid "Options" -msgstr "Настройки" - -#: src/rc_formatters.py:781 -#, python-brace-format -msgid "([preview]({link}) | [undo]({undolink}))" -msgstr "([просмотр]({link}) | [отмена]({undolink}))" - -#: src/rc_formatters.py:786 -#, python-brace-format -msgid "Uploaded a new version of {name}" -msgstr "Загрузил новую версию {name}" - -#: src/rc_formatters.py:788 -#, python-brace-format -msgid "Reverted a version of {name}" -msgstr "Возвратил версию {name}" - -#: src/rc_formatters.py:790 -#, python-brace-format -msgid "Uploaded {name}" -msgstr "Загрузил {name}" - -#: src/rc_formatters.py:806 -msgid "**No license!**" -msgstr "**Отсутствует лицензия!**" - -#: src/rc_formatters.py:818 -msgid "" -"\n" -"License: {}" -msgstr "" -"\n" -"Лицензия: {}" - -#: src/rc_formatters.py:820 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "([просмотр]({link}))" - -#: src/rc_formatters.py:825 -#, python-brace-format -msgid "Deleted page {article}" -msgstr "Удалил страницу «{article}»" - -#: src/rc_formatters.py:830 -#, python-brace-format -msgid "Deleted redirect {article} by overwriting" -msgstr "Удалил перенаправление «{article}» с помощью перезаписи" - -#: src/rc_formatters.py:836 -msgid "No redirect has been made" -msgstr "Перенаправление не было сделано" - -#: src/rc_formatters.py:837 -msgid "A redirect has been made" -msgstr "Было сделано перенаправление" - -#: src/rc_formatters.py:838 -#, python-brace-format -msgid "Moved {redirect}{article} to {target}" -msgstr "Переименовал страницу {redirect}{article} в {target}" - -#: src/rc_formatters.py:841 -#, python-brace-format -msgid "Moved {redirect}{article} to {title} over redirect" -msgstr "" -"Переименовал страницу {redirect}{article} в {title} поверх перенаправления" - -#: src/rc_formatters.py:845 -#, python-brace-format -msgid "Moved protection settings from {redirect}{article} to {title}" -msgstr "Перенёс параметры защиты с «{redirect}{article}» на «{title}»" - -#: src/rc_formatters.py:869 -msgid "unknown expiry time" -msgstr "неизвестный период" - -#: src/rc_formatters.py:874 -msgid "Blocked from editing the following pages: " -msgstr "Заблокирован от редактирования в следующих страницах: " - -#: src/rc_formatters.py:883 -msgid "Blocked from editing pages on following namespaces: " -msgstr "" -"Заблокирован от редактирования на страницах в следующих пространствах имён: " - -#: src/rc_formatters.py:894 -msgid "Partial block details" -msgstr "Частичные детали блокировки" - -#: src/rc_formatters.py:895 -#, python-brace-format -msgid "Blocked {blocked_user} {time}" -msgstr "Заблокировал участника {blocked_user} {time}" - -#: src/rc_formatters.py:899 -#, python-brace-format -msgid "Changed block settings for {blocked_user}" -msgstr "Изменил параметры блокировки для {blocked_user}" - -#: src/rc_formatters.py:903 -#, python-brace-format -msgid "Unblocked {blocked_user}" -msgstr "Разблокировал участника {blocked_user}" - -#: src/rc_formatters.py:910 -#, python-brace-format -msgid "Left a comment on {target}'s profile" -msgstr "Оставил комментарий на профиле участника {target}" - -#: src/rc_formatters.py:912 -msgid "Left a comment on their own profile" -msgstr "Оставил комментарий на своём профиле" - -#: src/rc_formatters.py:919 -#, python-brace-format -msgid "Replied to a comment on {target}'s profile" -msgstr "Ответил на комментарий на профиле участника {target}" - -#: src/rc_formatters.py:921 -msgid "Replied to a comment on their own profile" -msgstr "Ответил на комментарий на своём профиле" - -#: src/rc_formatters.py:928 -#, python-brace-format -msgid "Edited a comment on {target}'s profile" -msgstr "Отредактировал комментарий на профиле участника {target}" - -#: src/rc_formatters.py:930 -msgid "Edited a comment on their own profile" -msgstr "Отредактировал комментарий на своём профиле" - -#: src/rc_formatters.py:935 -#, python-brace-format -msgid "Edited {target}'s profile" -msgstr "Отредактировал профиль участника {target}" - -#: src/rc_formatters.py:937 -msgid "Edited their own profile" -msgstr "Отредактировал свой профиль" - -#: src/rc_formatters.py:939 -#, python-brace-format -msgid "Cleared the {field} field" -msgstr "Очистил поле «{field}»" - -#: src/rc_formatters.py:941 -#, python-brace-format -msgid "{field} field changed to: {desc}" -msgstr "Поле «{field}» изменено на: {desc}" - -#: src/rc_formatters.py:946 -#, python-brace-format -msgid "Purged a comment on {target}'s profile" -msgstr "Удалил комментарий в профиле {target}" - -#: src/rc_formatters.py:948 -msgid "Purged a comment on their own profile" -msgstr "Удалил комментарий на своём профиле" - -#: src/rc_formatters.py:956 -#, python-brace-format -msgid "Deleted a comment on {target}'s profile" -msgstr "Удалил комментарий на профиле участника {target}" - -#: src/rc_formatters.py:958 -msgid "Deleted a comment on their own profile" -msgstr "Удалил комментарий на своём профиле" - -#: src/rc_formatters.py:962 -#, python-brace-format -msgid "Changed group membership for {target}" -msgstr "Изменил членство в группах для участника {target}" - -#: src/rc_formatters.py:966 -#, python-brace-format -msgid "{target} got autopromoted to a new usergroup" -msgstr "Участник {target} был автоматически повышен до новой группы участников" - -#: src/rc_formatters.py:981 -#, python-brace-format -msgid "Groups changed from {old_groups} to {new_groups}{reason}" -msgstr "Группы изменены с {old_groups} на {new_groups}{reason}" - -#: src/rc_formatters.py:985 -#, python-brace-format -msgid "Protected {target}" -msgstr "Защитил страницу «{target}»" - -#: src/rc_formatters.py:991 -#, python-brace-format -msgid "Changed protection level for {article}" -msgstr "Изменил уровень защиты для страницы «{article}»" - -#: src/rc_formatters.py:997 -#, python-brace-format -msgid "Removed protection from {article}" -msgstr "Убрал защиту со страницы «{article}»" - -#: src/rc_formatters.py:1001 -#, python-brace-format -msgid "Changed visibility of revision on page {article} " -msgid_plural "Changed visibility of {amount} revisions on page {article} " -msgstr[0] "Изменил видимость правки на странице «{article}» " -msgstr[1] "Изменил видимость {amount} правок на странице «{article}» " -msgstr[2] "Изменил видимость {amount} правок на странице «{article}» " - -#: src/rc_formatters.py:1013 -#, python-brace-format -msgid "Imported {article} with {count} revision" -msgid_plural "Imported {article} with {count} revisions" -msgstr[0] "Импортировал страницу «{article}» с {count} правкой" -msgstr[1] "Импортировал страницу «{article}» с {count} правками" -msgstr[2] "Импортировал страницу «{article}» с {count} правками" - -#: src/rc_formatters.py:1018 -#, python-brace-format -msgid "Restored {article}" -msgstr "Восстановил страницу «{article}»" - -#: src/rc_formatters.py:1021 -msgid "Changed visibility of log events" -msgstr "Изменил видимость событий в журнале" - -#: src/rc_formatters.py:1031 -#, python-brace-format -msgid "Imported {article} with {count} revision from \"{source}\"" -msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "Импортировал страницу «{article}» с {count} правкой из \"{source}\"" -msgstr[1] "" -"Импортировал страницу «{article}» с {count} правками из \"{source}\"" -msgstr[2] "" -"Импортировал страницу «{article}» с {count} правками из \"{source}\"" - -#: src/rc_formatters.py:1036 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "Отредактировал фильтр злоупотреблений под номером {number}" - -#: src/rc_formatters.py:1039 -#, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "Создал фильтр злоупотреблений под номером {number}" - -#: src/rc_formatters.py:1042 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "" -"Объединил историю правок страницы «{article}» с историей правок «{dest}»" - -#: src/rc_formatters.py:1046 -msgid "Created account automatically" -msgstr "Учетная запись была создана автоматически" - -#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 -msgid "Created account" -msgstr "Создана учётная запись" - -#: src/rc_formatters.py:1052 -#, python-brace-format -msgid "Created account {article}" -msgstr "Создана учетная запись {article}" - -#: src/rc_formatters.py:1055 -#, python-brace-format -msgid "Created account {article} and password was sent by email" -msgstr "" -"Создана учетная запись {article} и пароль был отправлен на электронную почту" - -#: src/rc_formatters.py:1061 -msgid "Added an entry to the interwiki table" -msgstr "Добавил запись в таблицу префиксов интервики" - -#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "Префикс: {prefix}, сайт: {website} | {desc}" - -#: src/rc_formatters.py:1067 -msgid "Edited an entry in interwiki table" -msgstr "Отредактировал запись в таблице префиксов интервики" - -#: src/rc_formatters.py:1073 -msgid "Deleted an entry in interwiki table" -msgstr "Удалил запись из таблицы префиксов интервики" - -#: src/rc_formatters.py:1074 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "Префикс: {prefix} | {desc}" - -#: src/rc_formatters.py:1077 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "Изменил модель содержимого для страницы «{article}»" - -#: src/rc_formatters.py:1078 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "Модель изменена с «{old}» на «{new}»: {reason}" - -#: src/rc_formatters.py:1083 -#, python-brace-format -msgid "Created the page {article} using a non-default content model" -msgstr "" -"Создал страницу {article} с использованием нестандартной модели содержимого" - -#: src/rc_formatters.py:1084 -#, python-brace-format -msgid "Created with model {new}: {reason}" -msgstr "Создал с использованием модели содержимого {new}: {reason}" - -#: src/rc_formatters.py:1087 +#: extensions/base/sprite.py:37 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Отредактировал спрайт для страницы «{article}»" -#: src/rc_formatters.py:1090 +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) отредактировал спрайт для [{article}]({article_url})" + +#: extensions/base/sprite.py:60 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Создал таблицу спрайтов для страницы «{article}»" -#: src/rc_formatters.py:1093 +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) создал таблицу спрайтов для [{article}]" +"({article_url})" + +#: extensions/base/sprite.py:79 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Отредактировал срез для страницы «{article}»" -#: src/rc_formatters.py:1099 +#: extensions/base/sprite.py:86 #, python-brace-format -msgid "Created the Cargo table \"{table}\"" -msgstr "Создал Cargo таблицу \"{table}\"" +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) отредактировал фрагмент для [{article}]" +"({article_url})" -#: src/rc_formatters.py:1103 #, python-brace-format -msgid "Deleted the Cargo table \"{table}\"" -msgstr "Удалил Cargo таблицу \"{table}\"" +#~ msgid "" +#~ "Unknown event `{event}` by [{author}]({author_url}), report it on the " +#~ "[support server](<{support}>)." +#~ msgstr "" +#~ "Неизвестное событие `{event}`, выполненное участником [{author}]" +#~ "({author_url}), сообщите об этом на [сервере поддержки](<{support}>)." -#: src/rc_formatters.py:1110 #, python-brace-format -msgid "Recreated the Cargo table \"{table}\"" -msgstr "Воссоздал Cargo таблицу \"{table}\"" +#~ msgid "Unknown event `{event}`" +#~ msgstr "Неизвестное событие `{event}`" -#: src/rc_formatters.py:1117 -#, python-brace-format -msgid "Replaced the Cargo table \"{table}\"" -msgstr "Заменил Cargo таблицу \"{table}\"" - -#: src/rc_formatters.py:1121 -#, fuzzy, python-brace-format -msgid "Created the tag \"{tag}\"" -msgstr "Создал метку «{tag}»" - -#: src/rc_formatters.py:1125 -#, fuzzy, python-brace-format -msgid "Deleted the tag \"{tag}\"" -msgstr "Удалил метку «{tag}»" - -#: src/rc_formatters.py:1127 #, fuzzy -msgid "Removed from" -msgstr "Удалено" +#~ msgid "Report this on the support server" +#~ msgstr "" +#~ "#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" +#~ "Сообщите об этом на сервере поддержки\n" +#~ "#-#-#-#-# rc_formatters.po #-#-#-#-#\n" +#~ "Сообщить об этом на сервер поддержки" -#: src/rc_formatters.py:1127 -msgid "{} revision or log entry" -msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: src/rc_formatters.py:1131 -#, fuzzy, python-brace-format -msgid "Activated the tag \"{tag}\"" -msgstr "Активировал метку «{tag}»" - -#: src/rc_formatters.py:1134 -#, fuzzy, python-brace-format -msgid "Deactivated the tag \"{tag}\"" -msgstr "Деактивировал метку «{tag}»" - -#: src/rc_formatters.py:1137 -msgid "Changed wiki settings" -msgstr "Изменил настройки вики" - -#: src/rc_formatters.py:1141 #, python-brace-format -msgid "Deleted a \"{wiki}\" wiki" -msgstr "Удалил вики \"{wiki}\"" +#~ msgid "for {num} {translated_length}" +#~ msgstr "на {num}{translated_length}" + +#~ msgid "until {}" +#~ msgstr "до {}" -#: src/rc_formatters.py:1144 #, python-brace-format -msgid "Locked a \"{wiki}\" wiki" -msgstr "Заблокировал вики \"{wiki}\"" +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) оставил [комментарий]({comment}) на профиле " +#~ "участника {target}" -#: src/rc_formatters.py:1147 -#, fuzzy, python-brace-format -msgid "Modified \"{namespace_name}\" namespace" -msgstr "Изменил пространство имён \"{namespace_name}\"" - -#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 -msgid "Wiki" -msgstr "Вики" - -#: src/rc_formatters.py:1151 #, python-brace-format -msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "Удалил пространство имён \"{namespace_name}\"" +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) оставил [комментарий]({comment}) на своём " +#~ "собственном профиле" -#: src/rc_formatters.py:1157 #, python-brace-format -msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "Изменил группу \"{usergroup_name}\"" +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) ответил на [комментарий]({comment}) на профиле " +#~ "участника {target}" -#: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format -msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Удалил вики \"{wiki}\"" - -#: src/rc_formatters.py:1163 #, python-brace-format -msgid "Unlocked a \"{wiki}\" wiki" -msgstr "Разблокировал вики \"{wiki}\"" +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) ответил на [комментарий]({comment}) на своём " +#~ "собственном профиле" -#: src/rc_formatters.py:1166 #, python-brace-format -msgid "Generated {file} dump" -msgstr "Сгенерировал дамп {file}" +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) отредактировал [комментарий]({comment}) на " +#~ "профиле участника {target}" -#: src/rc_formatters.py:1169 #, python-brace-format -msgid "Deleted {file} dump" -msgstr "Удалил дамп {file}" +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) отредактировал [комментарий]({comment}) на своём " +#~ "собственном профиле" -#: src/rc_formatters.py:1177 #, python-brace-format -msgid "Marked \"{article}\" for translation" -msgstr "Пометил страницу \"{article}\" как доступную для перевода" +#~ msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +#~ msgstr "[{author}]({author_url}) удалил комментарий на профиле {target}" -#: src/rc_formatters.py:1180 #, python-brace-format -msgid "Removed \"{article}\" from the translation system" -msgstr "Удалил \"{article}\" из системы перевода" +#~ msgid "[{author}]({author_url}) purged a comment on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) удалил комментарий на своём собственном профиле" -#: src/rc_formatters.py:1183 #, python-brace-format -msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" -"Переименовал доступную для перевода страницу \"{article}\" в \"{target}\"" +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) удалил [комментарий]({comment}) на профиле " +#~ "участника {target}" -#: src/rc_formatters.py:1186 #, python-brace-format -msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "" -"Столкнулся с проблемой при попытке переименования \"{article}\" в " -"\"{target}\"" +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) удалил [комментарий]({comment}) на своём " +#~ "собственном профиле" -#: src/rc_formatters.py:1189 #, python-brace-format -msgid "Completed deletion of translatable page \"{article}\"" -msgstr "Удалил доступную для перевода страницу \"{article}\"" +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) отредактировал поле «{field}» на профиле " +#~ "участника [{target}]({target_url}). *({desc})*" -#: src/rc_formatters.py:1192 #, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translatable page " -"\"{target}\"" -msgstr "" -"Не смог удалить \"{article}\", относящуюся к доступной для перевода странице " -"\"{target}\"" +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) отредактировал поле «{field}» на [своём " +#~ "собственном]({target_url}) профиле. *({desc})*" + +#~ msgid "none" +#~ msgstr "ничего" -#: src/rc_formatters.py:1195 #, python-brace-format -msgid "Completed deletion of translation page \"{article}\"" -msgstr "Удалил страницу перевода \"{article}\"" +#~ msgid "" +#~ "[{author}]({author_url}) completed deletion of translatable page " +#~ "[{article}]({article_url}){comment}" +#~ msgstr "" +#~ "[{author}]({author_url}) удалил доступную для перевода страницу " +#~ "[{article}]({article_url}){comment}" + +#~ msgid "No description provided" +#~ msgstr "Нет описания правки" + +#~ msgid "unknown expiry time" +#~ msgstr "неизвестный период" -#: src/rc_formatters.py:1198 #, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" -msgstr "" -"Не смог удалить \"{article}\", относящуюся к странице перевода \"{target}\"" +#~ msgid "Left a comment on {target}'s profile" +#~ msgstr "Оставил комментарий на профиле участника {target}" + +#~ msgid "Left a comment on their own profile" +#~ msgstr "Оставил комментарий на своём профиле" -#: src/rc_formatters.py:1201 #, python-brace-format -msgid "Encouraged translation of \"{article}\"" -msgstr "Повысил приоритет перевода страницы \"{article}\"" +#~ msgid "Replied to a comment on {target}'s profile" +#~ msgstr "Ответил на комментарий на профиле участника {target}" + +#~ msgid "Replied to a comment on their own profile" +#~ msgstr "Ответил на комментарий на своём профиле" -#: src/rc_formatters.py:1204 #, python-brace-format -msgid "Discouraged translation of \"{article}\"" -msgstr "Понизил приоритет перевода страницы \"{article}\"" +#~ msgid "Edited a comment on {target}'s profile" +#~ msgstr "Отредактировал комментарий на профиле участника {target}" + +#~ msgid "Edited a comment on their own profile" +#~ msgstr "Отредактировал комментарий на своём профиле" -#: src/rc_formatters.py:1210 #, python-brace-format -msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "Ограничил для страницы \"{article}\" список языков: `{languages}`" +#~ msgid "Edited {target}'s profile" +#~ msgstr "Отредактировал профиль участника {target}" + +#~ msgid "Edited their own profile" +#~ msgstr "Отредактировал свой профиль" -#: src/rc_formatters.py:1212 #, python-brace-format -msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "" -"Задал для страницы \"{article}\" следующий список приоритетных языков: " -"`{languages}`" +#~ msgid "Cleared the {field} field" +#~ msgstr "Очистил поле «{field}»" -#: src/rc_formatters.py:1214 #, python-brace-format -msgid "Removed priority languages from \"{article}\"" -msgstr "Удалил приоритетные языки со страницы \"{article}\"" +#~ msgid "{field} field changed to: {desc}" +#~ msgstr "Поле «{field}» изменено на: {desc}" -#: src/rc_formatters.py:1217 #, python-brace-format -msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" -msgstr "" -"Добавил доступную для перевода страницу \"{article}\" в агрегированную " -"группу \"{group}\"" +#~ msgid "Purged a comment on {target}'s profile" +#~ msgstr "Удалил комментарий в профиле {target}" + +#~ msgid "Purged a comment on their own profile" +#~ msgstr "Удалил комментарий на своём профиле" -#: src/rc_formatters.py:1220 #, python-brace-format -msgid "" -"Removed translatable page \"{article}\" from aggregate group \"{group}\"" -msgstr "" -"Удалил доступную для перевода страницу \"{article}\" из агрегированной " -"группы \"{group}\"" +#~ msgid "Deleted a comment on {target}'s profile" +#~ msgstr "Удалил комментарий на профиле участника {target}" + +#~ msgid "Deleted a comment on their own profile" +#~ msgstr "Удалил комментарий на своём профиле" -#: src/rc_formatters.py:1227 #, python-brace-format -msgid "Reviewed translation \"{article}\"" -msgstr "Проверил перевод \"{article}\"" +#~ msgid "Groups changed from {old_groups} to {new_groups}{reason}" +#~ msgstr "Группы изменены с {old_groups} на {new_groups}{reason}" -#: src/rc_formatters.py:1230 #, python-brace-format -msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "" -"Изменил состояние переводов страницы \"{article}\" на `{language}` язык" - -#: src/rc_formatters.py:1232 -msgid "Old state" -msgstr "Старое состояние" - -#: src/rc_formatters.py:1233 -msgid "New state" -msgstr "Новое состояние" - -#: src/rc_formatters.py:1242 -#, python-brace-format -msgid "Changed the language of \"{article}\"" -msgstr "Изменил язык страницы «{article}»" - -#: src/rc_formatters.py:1243 -msgid "Old language" -msgstr "Старый язык" - -#: src/rc_formatters.py:1244 -msgid "New language" -msgstr "Новый язык" - -#: src/rc_formatters.py:1248 -#, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -"Переименовал участника \"{old_name}\" с {edits} правкой в \"{new_name}\"" -msgstr[1] "" -"Переименовал участника \"{old_name}\" с {edits} правками в \"{new_name}\"" -msgstr[2] "" -"Переименовал участника \"{old_name}\" с {edits} правками в \"{new_name}\"" - -#: src/rc_formatters.py:1250 -#, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "Переименовал участника \"{old_name}\" в \"{new_name}\"" - -#: src/rc_formatters.py:1254 -msgid "Action has been hidden by administration" -msgstr "Действие было скрыто администрацией" - -#: src/rc_formatters.py:1288 -msgid "**Added**: " -msgstr "**Добавлено**: " - -#: src/rc_formatters.py:1288 -msgid " and {} more\n" -msgstr " и ещё {}\n" - -#: src/rc_formatters.py:1289 -msgid "**Removed**: " -msgstr "**Удалено**: " - -#: src/rc_formatters.py:1289 -msgid " and {} more" -msgstr " и ещё {}" - -#: src/rc_formatters.py:1290 -msgid "Changed categories" -msgstr "Изменены категории" +#~ msgid "Completed deletion of translatable page \"{article}\"" +#~ msgstr "Удалил доступную для перевода страницу \"{article}\"" #, python-brace-format #~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" diff --git a/locale/ru/LC_MESSAGES/misc.po b/locale/ru/LC_MESSAGES/misc.po index f93ef26..7adbca4 100644 --- a/locale/ru/LC_MESSAGES/misc.po +++ b/locale/ru/LC_MESSAGES/misc.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-28 23:45+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-03-18 13:59+0100\n" "Last-Translator: BabylonAS\n" "Language-Team: \n" @@ -19,59 +19,59 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 2.3\n" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Location" msgstr "Местоположение" -#: src/misc.py:45 +#: src/misc.py:44 msgid "About me" msgstr "О себе" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Google link" msgstr "Ссылка на учётную запись Google" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Facebook link" msgstr "Ссылка на учётную запись Facebook" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitter link" msgstr "Ссылка на учётную запись Twitter" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Reddit link" msgstr "Ссылка на учётную запись Reddit" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitch link" msgstr "Ссылка на учётную запись Twitch" -#: src/misc.py:45 +#: src/misc.py:44 msgid "PSN link" msgstr "Ссылка на учётную запись PSN" -#: src/misc.py:45 +#: src/misc.py:44 msgid "VK link" msgstr "Ссылка на учётную запись ВКонтакте" -#: src/misc.py:45 +#: src/misc.py:44 msgid "XBL link" msgstr "Ссылка на учётную запись XBL" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Steam link" msgstr "Ссылка на учётную запись Steam" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Discord handle" msgstr "Ссылка на учётную запись Discord" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Battle.net handle" msgstr "Ссылка на учётную запись Battle.net" -#: src/misc.py:119 +#: src/misc.py:138 msgid "" "\n" "__And more__" @@ -79,10 +79,10 @@ msgstr "" "\n" "__И ещё__" -#: src/misc.py:276 +#: src/misc.py:322 msgid "Unknown" msgstr "Неизвестно" -#: src/misc.py:278 +#: src/misc.py:324 msgid "unknown" msgstr "неизвестно" diff --git a/locale/ru/LC_MESSAGES/rcgcdw.po b/locale/ru/LC_MESSAGES/rcgcdw.po index 808e0da..81c17fe 100644 --- a/locale/ru/LC_MESSAGES/rcgcdw.po +++ b/locale/ru/LC_MESSAGES/rcgcdw.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-09-03 13:14+0200\n" "Last-Translator: BabylonAS\n" "Language-Team: \n" @@ -19,200 +19,191 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 2.4.1\n" -#: src/rcgcdw.py:115 src/rcgcdw.py:117 src/rcgcdw.py:119 src/rcgcdw.py:121 -#: src/rcgcdw.py:123 src/rcgcdw.py:125 src/rcgcdw.py:127 +#: src/rcgcdw.py:116 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "{value} (ср. {avg})" -#: src/rcgcdw.py:147 +#: src/rcgcdw.py:135 msgid "Daily overview" msgstr "Ежедневный обзор" -#: src/rcgcdw.py:154 +#: src/rcgcdw.py:142 msgid "No activity" msgstr "Нет активности" -#: src/rcgcdw.py:178 +#: src/rcgcdw.py:166 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} действие)" msgstr[1] " ({} действия)" msgstr[2] " ({} действий)" -#: src/rcgcdw.py:180 +#: src/rcgcdw.py:168 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} правка)" msgstr[1] " ({} правки)" msgstr[2] " ({} правок)" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:173 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} действие)" msgstr[1] " UTC ({} действия)" msgstr[2] " UTC ({} действий)" -#: src/rcgcdw.py:187 src/rcgcdw.py:188 src/rcgcdw.py:192 +#: src/rcgcdw.py:175 src/rcgcdw.py:178 msgid "But nobody came" msgstr "Но никто не пришёл" -#: src/rcgcdw.py:195 +#: src/rcgcdw.py:182 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Самый активный участник" msgstr[1] "Самые активные участники" msgstr[2] "Самые активные участники" -#: src/rcgcdw.py:196 +#: src/rcgcdw.py:183 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "Самая редактируемая статья" msgstr[1] "Самые редактируемые статьи" msgstr[2] "Самые редактируемые статьи" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:184 msgid "Edits made" msgstr "Сделано правок" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:184 msgid "New files" msgstr "Новых файлов" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:185 msgid "Admin actions" msgstr "Административных действий" -#: src/rcgcdw.py:198 +#: src/rcgcdw.py:185 msgid "Bytes changed" msgstr "Изменено байтов" -#: src/rcgcdw.py:198 +#: src/rcgcdw.py:186 msgid "New articles" msgstr "Новых статей" -#: src/rcgcdw.py:199 +#: src/rcgcdw.py:186 msgid "Unique contributors" msgstr "Уникальных редакторов" -#: src/rcgcdw.py:200 +#: src/rcgcdw.py:187 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Самый активный час" msgstr[1] "Самые активные часы" msgstr[2] "Самые активные часы" -#: src/rcgcdw.py:201 +#: src/rcgcdw.py:188 msgid "Day score" msgstr "Очков за день" -#: src/rcgcdw.py:243 -msgid "director" -msgstr "директор" +#: src/rcgcdw.py:214 +msgid "~~hidden~~" +msgstr "" -#: src/rcgcdw.py:243 -msgid "bot" -msgstr "бот" +#: src/rcgcdw.py:216 +msgid "No description provided" +msgstr "" -#: src/rcgcdw.py:243 -msgid "editor" -msgstr "досматривающий" +#: src/rcgcdw.py:219 +msgid "hidden" +msgstr "" -#: src/rcgcdw.py:243 -msgid "directors" -msgstr "директора" +#~ msgid "director" +#~ msgstr "директор" -#: src/rcgcdw.py:243 -msgid "sysop" -msgstr "администратор" +#~ msgid "bot" +#~ msgstr "бот" -#: src/rcgcdw.py:243 -msgid "bureaucrat" -msgstr "бюрократ" +#~ msgid "editor" +#~ msgstr "досматривающий" -#: src/rcgcdw.py:243 -msgid "reviewer" -msgstr "выверяющий" +#~ msgid "directors" +#~ msgstr "директора" -#: src/rcgcdw.py:244 -msgid "autoreview" -msgstr "автодосматриваемый" +#~ msgid "sysop" +#~ msgstr "администратор" -#: src/rcgcdw.py:244 -msgid "autopatrol" -msgstr "автопатрулируемый" +#~ msgid "bureaucrat" +#~ msgstr "бюрократ" -#: src/rcgcdw.py:244 -msgid "wiki_guardian" -msgstr "смотритель вики" +#~ msgid "reviewer" +#~ msgstr "выверяющий" -#: src/rcgcdw.py:244 -msgid "second" -msgid_plural "seconds" -msgstr[0] "секунда" -msgstr[1] "секунды" -msgstr[2] "секунд" +#~ msgid "autoreview" +#~ msgstr "автодосматриваемый" -#: src/rcgcdw.py:244 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "минута" -msgstr[1] "минуты" -msgstr[2] "минут" +#~ msgid "autopatrol" +#~ msgstr "автопатрулируемый" -#: src/rcgcdw.py:244 -msgid "hour" -msgid_plural "hours" -msgstr[0] "час" -msgstr[1] "часа" -msgstr[2] "часов" +#~ msgid "wiki_guardian" +#~ msgstr "смотритель вики" -#: src/rcgcdw.py:244 -msgid "day" -msgid_plural "days" -msgstr[0] "день" -msgstr[1] "дня" -msgstr[2] "дней" +#~ msgid "second" +#~ msgid_plural "seconds" +#~ msgstr[0] "секунда" +#~ msgstr[1] "секунды" +#~ msgstr[2] "секунд" -#: src/rcgcdw.py:244 -msgid "week" -msgid_plural "weeks" -msgstr[0] "неделя" -msgstr[1] "недели" -msgstr[2] "недель" +#~ msgid "minute" +#~ msgid_plural "minutes" +#~ msgstr[0] "минута" +#~ msgstr[1] "минуты" +#~ msgstr[2] "минут" -#: src/rcgcdw.py:244 -msgid "month" -msgid_plural "months" -msgstr[0] "месяц" -msgstr[1] "месяца" -msgstr[2] "месяцев" +#~ msgid "hour" +#~ msgid_plural "hours" +#~ msgstr[0] "час" +#~ msgstr[1] "часа" +#~ msgstr[2] "часов" -#: src/rcgcdw.py:244 -msgid "year" -msgid_plural "years" -msgstr[0] "год" -msgstr[1] "года" -msgstr[2] "лет" +#~ msgid "day" +#~ msgid_plural "days" +#~ msgstr[0] "день" +#~ msgstr[1] "дня" +#~ msgstr[2] "дней" -#: src/rcgcdw.py:244 -msgid "millennium" -msgid_plural "millennia" -msgstr[0] "тысячелетие" -msgstr[1] "тысячелетия" -msgstr[2] "тысячелетий" +#~ msgid "week" +#~ msgid_plural "weeks" +#~ msgstr[0] "неделя" +#~ msgstr[1] "недели" +#~ msgstr[2] "недель" -#: src/rcgcdw.py:244 -msgid "decade" -msgid_plural "decades" -msgstr[0] "десятилетие" -msgstr[1] "десятилетия" -msgstr[2] "десятилетий" +#~ msgid "month" +#~ msgid_plural "months" +#~ msgstr[0] "месяц" +#~ msgstr[1] "месяца" +#~ msgstr[2] "месяцев" -#: src/rcgcdw.py:244 -msgid "century" -msgid_plural "centuries" -msgstr[0] "век" -msgstr[1] "века" -msgstr[2] "веков" +#~ msgid "year" +#~ msgid_plural "years" +#~ msgstr[0] "год" +#~ msgstr[1] "года" +#~ msgstr[2] "лет" + +#~ msgid "millennium" +#~ msgid_plural "millennia" +#~ msgstr[0] "тысячелетие" +#~ msgstr[1] "тысячелетия" +#~ msgstr[2] "тысячелетий" + +#~ msgid "decade" +#~ msgid_plural "decades" +#~ msgstr[0] "десятилетие" +#~ msgstr[1] "десятилетия" +#~ msgstr[2] "десятилетий" + +#~ msgid "century" +#~ msgid_plural "centuries" +#~ msgstr[0] "век" +#~ msgstr[1] "века" +#~ msgstr[2] "веков" diff --git a/locale/ru/LC_MESSAGES/redaction.po b/locale/ru/LC_MESSAGES/redaction.po index c6ded93..60cc32a 100644 --- a/locale/ru/LC_MESSAGES/redaction.po +++ b/locale/ru/LC_MESSAGES/redaction.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"POT-Creation-Date: 2021-05-18 13:48+0200\n" "PO-Revision-Date: 2020-12-22 00:13+0000\n" "Last-Translator: Philo04 \n" "Language-Team: Russian =20) ? 1 : 2;\n" "X-Generator: Weblate 4.2.1\n" -#: src/discord/redaction.py:62 src/discord/redaction.py:65 -#: src/discord/redaction.py:70 +#: src/discord/redaction.py:77 src/discord/redaction.py:80 +#: src/discord/redaction.py:85 msgid "Removed" msgstr "Удалено" diff --git a/locale/templates/formatters.pot b/locale/templates/formatters.pot index 425854c..69da6b4 100644 --- a/locale/templates/formatters.pot +++ b/locale/templates/formatters.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-10 01:44+0200\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,6 +18,49 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" +msgstr "" + +#: src/api/util.py:71 +msgid "Removed" +msgstr "" + +#: src/api/util.py:73 +msgid "Added" +msgstr "" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 +msgid "Unregistered user" +msgstr "" + +#: src/api/util.py:160 extensions/base/discussions.py:193 +#: extensions/base/discussions.py:195 +msgid "Tags" +msgstr "" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "" + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr "" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "" + +#: src/api/util.py:166 +msgid " and {} more" +msgstr "" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "" + #: extensions/base/cargo.py:37 #, python-brace-format msgid "Created the Cargo table \"{table}\"" @@ -297,7 +340,6 @@ msgstr "" #: extensions/base/discussions.py:245 extensions/base/discussions.py:261 #: extensions/base/discussions.py:284 extensions/base/discussions.py:306 #: extensions/base/discussions.py:334 extensions/base/discussions.py:354 -#: src/misc.py:301 msgid "unknown" msgstr "" @@ -325,11 +367,6 @@ msgstr "" msgid "Created a quiz \"{title}\"" msgstr "" -#: extensions/base/discussions.py:193 extensions/base/discussions.py:195 -#: src/rc_formatters.py:542 src/api/util.py:150 -msgid "Tags" -msgstr "" - #: extensions/base/discussions.py:193 msgid "{} tags" msgstr "" @@ -367,14 +404,6 @@ msgid "" "to [{title}](<{url}f/p/{threadId}>) in {forumName}" msgstr "" -#: extensions/base/discussions.py:247 extensions/base/discussions.py:264 -#: extensions/base/abusefilter.py:45 src/rc_formatters.py:63 -#: src/rc_formatters.py:70 src/rc_formatters.py:77 src/rc_formatters.py:89 -#: src/api/util.py:85 src/api/util.py:117 src/api/util.py:124 -#: src/api/util.py:132 -msgid "Unregistered user" -msgstr "" - #: extensions/base/discussions.py:292 #, python-brace-format msgid "Created \"{title}\" on {user}'s Message Wall" @@ -427,104 +456,114 @@ msgid "" "[{article}](<{url}>)" msgstr "" -#: extensions/base/managewiki.py:35 +#: extensions/base/managewiki.py:34 msgid "Changed wiki settings" msgstr "" -#: extensions/base/managewiki.py:45 +#: extensions/base/managewiki.py:44 #, python-brace-format msgid "[{author}]({author_url}) changed wiki settings{reason}" msgstr "" -#: extensions/base/managewiki.py:56 +#: extensions/base/managewiki.py:55 #, python-brace-format msgid "Deleted a \"{wiki}\" wiki" msgstr "" -#: extensions/base/managewiki.py:56 extensions/base/managewiki.py:68 -#: extensions/base/managewiki.py:80 extensions/base/managewiki.py:89 -#: extensions/base/managewiki.py:102 extensions/base/managewiki.py:103 -#: extensions/base/managewiki.py:112 extensions/base/managewiki.py:113 +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 #: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 -#: extensions/base/managewiki.py:137 extensions/base/managewiki.py:138 -#: extensions/base/managewiki.py:172 extensions/base/managewiki.py:181 -#: extensions/base/managewiki.py:194 extensions/base/managewiki.py:203 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 #: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 #: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 #: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 -#: extensions/base/mediawiki.py:740 src/misc.py:299 +#: extensions/base/mediawiki.py:744 msgid "Unknown" msgstr "" -#: extensions/base/managewiki.py:64 +#: extensions/base/managewiki.py:63 #, python-brace-format msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" msgstr "" #: extensions/base/managewiki.py:80 #, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "" + +#: extensions/base/managewiki.py:89 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:103 +#, python-brace-format msgid "Locked a \"{wiki}\" wiki" msgstr "" -#: extensions/base/managewiki.py:88 +#: extensions/base/managewiki.py:111 #, python-brace-format msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" msgstr "" -#: extensions/base/managewiki.py:101 +#: extensions/base/managewiki.py:124 #, python-brace-format msgid "Modified \"{namespace_name}\" namespace" msgstr "" -#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 msgid "Wiki" msgstr "" -#: extensions/base/managewiki.py:111 +#: extensions/base/managewiki.py:134 #, python-brace-format msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" msgstr "" -#: extensions/base/managewiki.py:124 +#: extensions/base/managewiki.py:147 #, python-brace-format msgid "Deleted a \"{namespace_name}\" namespace" msgstr "" -#: extensions/base/managewiki.py:135 +#: extensions/base/managewiki.py:158 #, python-brace-format msgid "" "[{author}]({author_url}) deleted a namespace *{namespace_name}* on " "*{wiki_name}*{comment}" msgstr "" -#: extensions/base/managewiki.py:150 +#: extensions/base/managewiki.py:173 #, python-brace-format msgid "Modified \"{usergroup_name}\" usergroup" msgstr "" -#: extensions/base/managewiki.py:159 +#: extensions/base/managewiki.py:182 #, python-brace-format msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" msgstr "" -#: extensions/base/managewiki.py:172 +#: extensions/base/managewiki.py:195 #, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" msgstr "" -#: extensions/base/managewiki.py:180 +#: extensions/base/managewiki.py:203 #, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" msgstr "" -#: extensions/base/managewiki.py:194 +#: extensions/base/managewiki.py:217 #, python-brace-format msgid "Unlocked a \"{wiki}\" wiki" msgstr "" -#: extensions/base/managewiki.py:202 +#: extensions/base/managewiki.py:225 #, python-brace-format msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" msgstr "" @@ -841,64 +880,64 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:433 +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 msgid "No redirect has been made" msgstr "" -#: extensions/base/mediawiki.py:402 extensions/base/mediawiki.py:436 +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 msgid "A redirect has been made" msgstr "" -#: extensions/base/mediawiki.py:403 +#: extensions/base/mediawiki.py:401 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "" -#: extensions/base/mediawiki.py:414 extensions/base/mediawiki.py:447 +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 msgid "without making a redirect" msgstr "" -#: extensions/base/mediawiki.py:415 extensions/base/mediawiki.py:448 +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 msgid "with a redirect" msgstr "" -#: extensions/base/mediawiki.py:417 +#: extensions/base/mediawiki.py:416 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" "({target_url}) {made_a_redirect}{comment}" msgstr "" -#: extensions/base/mediawiki.py:437 +#: extensions/base/mediawiki.py:434 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "" -#: extensions/base/mediawiki.py:450 +#: extensions/base/mediawiki.py:448 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " "[{target}]({target_url}) {made_a_redirect}{comment}" msgstr "" -#: extensions/base/mediawiki.py:466 +#: extensions/base/mediawiki.py:464 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "" -#: extensions/base/mediawiki.py:478 +#: extensions/base/mediawiki.py:477 #, python-brace-format msgid "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" "* to [{target}]({target_url}){comment}" msgstr "" -#: extensions/base/mediawiki.py:493 +#: extensions/base/mediawiki.py:492 #, python-brace-format msgid "Protected {target}" msgstr "" -#: extensions/base/mediawiki.py:496 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 #: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 msgid " [cascading]" msgstr "" @@ -927,129 +966,129 @@ msgstr "" msgid "Removed protection from {article}" msgstr "" -#: extensions/base/mediawiki.py:562 +#: extensions/base/mediawiki.py:563 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" "{comment}" msgstr "" -#: extensions/base/mediawiki.py:571 +#: extensions/base/mediawiki.py:572 msgid "for infinity and beyond" msgstr "" -#: extensions/base/mediawiki.py:581 -msgid "less than a minute" +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" msgstr "" -#: extensions/base/mediawiki.py:583 +#: extensions/base/mediawiki.py:584 msgid "year" msgid_plural "years" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:583 +#: extensions/base/mediawiki.py:584 msgid "day" msgid_plural "days" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:583 +#: extensions/base/mediawiki.py:584 msgid "hour" msgid_plural "hours" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:584 +#: extensions/base/mediawiki.py:585 msgid "minute" msgid_plural "minutes" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:589 +#: extensions/base/mediawiki.py:590 #, python-brace-format -msgid "{time_unit} {time_number}" +msgid "for {time_number} {time_unit}" msgstr "" -#: extensions/base/mediawiki.py:609 +#: extensions/base/mediawiki.py:610 msgid "Blocked from editing the following pages: " msgstr "" -#: extensions/base/mediawiki.py:616 extensions/base/mediawiki.py:660 +#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 msgid " and namespaces: " msgstr "" -#: extensions/base/mediawiki.py:618 +#: extensions/base/mediawiki.py:619 msgid "Blocked from editing pages on following namespaces: " msgstr "" -#: extensions/base/mediawiki.py:629 +#: extensions/base/mediawiki.py:630 msgid "Partial block details" msgstr "" -#: extensions/base/mediawiki.py:632 +#: extensions/base/mediawiki.py:633 msgid "Block flags" msgstr "" -#: extensions/base/mediawiki.py:634 +#: extensions/base/mediawiki.py:635 #, python-brace-format msgid "Blocked {blocked_user} {time}" msgstr "" -#: extensions/base/mediawiki.py:652 +#: extensions/base/mediawiki.py:654 msgid " on pages: " msgstr "" -#: extensions/base/mediawiki.py:662 +#: extensions/base/mediawiki.py:664 msgid " on namespaces: " msgstr "" -#: extensions/base/mediawiki.py:674 +#: extensions/base/mediawiki.py:676 #, python-brace-format msgid "" "[{author}]({author_url}) blocked [{user}]({user_url}) {time}" "{restriction_desc}{comment}" msgstr "" -#: extensions/base/mediawiki.py:692 +#: extensions/base/mediawiki.py:694 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "" -#: extensions/base/mediawiki.py:701 +#: extensions/base/mediawiki.py:704 #, python-brace-format msgid "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" "({user_url}){comment}" msgstr "" -#: extensions/base/mediawiki.py:714 +#: extensions/base/mediawiki.py:717 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "" -#: extensions/base/mediawiki.py:723 +#: extensions/base/mediawiki.py:727 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" msgstr "" -#: extensions/base/mediawiki.py:739 +#: extensions/base/mediawiki.py:743 msgid "Action has been hidden by administration" msgstr "" -#: extensions/base/mediawiki.py:746 +#: extensions/base/mediawiki.py:750 msgid "An action has been hidden by administration." msgstr "" -#: extensions/base/mediawiki.py:757 +#: extensions/base/mediawiki.py:761 #, python-brace-format msgid "Imported {article} with {count} revision" msgid_plural "Imported {article} with {count} revisions" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:768 +#: extensions/base/mediawiki.py:772 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -1060,14 +1099,14 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:784 +#: extensions/base/mediawiki.py:788 #, python-brace-format msgid "Imported {article} with {count} revision from \"{source}\"" msgid_plural "Imported {article} with {count} revisions from \"{source}\"" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:799 +#: extensions/base/mediawiki.py:803 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -1078,204 +1117,210 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:826 +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:836 #, python-brace-format msgid "Changed group membership for {target}" msgstr "" -#: extensions/base/mediawiki.py:829 extensions/base/mediawiki.py:855 +#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 msgid "System" msgstr "" -#: extensions/base/mediawiki.py:830 +#: extensions/base/mediawiki.py:840 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "" -#: extensions/base/mediawiki.py:836 +#: extensions/base/mediawiki.py:846 #, python-brace-format msgid "" "{reason}\n" "{added}{linebreak}{removed}" msgstr "" -#: extensions/base/mediawiki.py:850 +#: extensions/base/mediawiki.py:860 #, python-brace-format msgid "" "[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) {added} {removed}{comment}" +"({target_url}) {added}{comma} {removed}{comment}" msgstr "" -#: extensions/base/mediawiki.py:854 +#: extensions/base/mediawiki.py:864 #, python-brace-format msgid "" -"{author} autopromoted [{target}]({target_url}) {added} {removed}{comment}" +"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"{comment}" msgstr "" -#: extensions/base/mediawiki.py:867 +#: extensions/base/mediawiki.py:877 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "" -#: extensions/base/mediawiki.py:881 +#: extensions/base/mediawiki.py:891 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" "({article_url}) into [{dest}]({dest_url}){comment}" msgstr "" -#: extensions/base/mediawiki.py:895 +#: extensions/base/mediawiki.py:905 msgid "Created account automatically" msgstr "" -#: extensions/base/mediawiki.py:902 +#: extensions/base/mediawiki.py:912 #, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "" -#: extensions/base/mediawiki.py:915 extensions/base/mediawiki.py:980 +#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 msgid "Created account" msgstr "" -#: extensions/base/mediawiki.py:922 extensions/base/mediawiki.py:987 +#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 #, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "" -#: extensions/base/mediawiki.py:934 +#: extensions/base/mediawiki.py:944 #, python-brace-format msgid "Created account {article}" msgstr "" -#: extensions/base/mediawiki.py:943 +#: extensions/base/mediawiki.py:953 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" "{comment}" msgstr "" -#: extensions/base/mediawiki.py:956 +#: extensions/base/mediawiki.py:966 #, python-brace-format msgid "Created account {article} and password was sent by email" msgstr "" -#: extensions/base/mediawiki.py:967 +#: extensions/base/mediawiki.py:977 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " "and password was sent by email{comment}" msgstr "" -#: extensions/base/mediawiki.py:999 +#: extensions/base/mediawiki.py:1009 msgid "Added an entry to the interwiki table" msgstr "" -#: extensions/base/mediawiki.py:1000 extensions/base/mediawiki.py:1027 +#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "" -#: extensions/base/mediawiki.py:1012 +#: extensions/base/mediawiki.py:1022 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" "({table_url}) pointing to {website} with {prefix} prefix" msgstr "" -#: extensions/base/mediawiki.py:1026 +#: extensions/base/mediawiki.py:1036 msgid "Edited an entry in interwiki table" msgstr "" -#: extensions/base/mediawiki.py:1039 +#: extensions/base/mediawiki.py:1049 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " "pointing to {website} with {prefix} prefix" msgstr "" -#: extensions/base/mediawiki.py:1053 +#: extensions/base/mediawiki.py:1063 msgid "Deleted an entry in interwiki table" msgstr "" -#: extensions/base/mediawiki.py:1054 +#: extensions/base/mediawiki.py:1064 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "" -#: extensions/base/mediawiki.py:1064 +#: extensions/base/mediawiki.py:1074 #, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" "{desc}" msgstr "" -#: extensions/base/mediawiki.py:1081 +#: extensions/base/mediawiki.py:1091 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "" -#: extensions/base/mediawiki.py:1083 +#: extensions/base/mediawiki.py:1093 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "" -#: extensions/base/mediawiki.py:1095 +#: extensions/base/mediawiki.py:1105 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "" -#: extensions/base/mediawiki.py:1110 +#: extensions/base/mediawiki.py:1120 #, python-brace-format msgid "Created the page {article} using a non-default content model" msgstr "" -#: extensions/base/mediawiki.py:1112 +#: extensions/base/mediawiki.py:1122 #, python-brace-format msgid "Created with model {new}: {reason}" msgstr "" -#: extensions/base/mediawiki.py:1123 +#: extensions/base/mediawiki.py:1133 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " "non-default content model {new}{comment}" msgstr "" -#: extensions/base/mediawiki.py:1138 +#: extensions/base/mediawiki.py:1148 #, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1147 +#: extensions/base/mediawiki.py:1158 #, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1169 +#: extensions/base/mediawiki.py:1180 #, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1171 +#: extensions/base/mediawiki.py:1182 msgid "Removed from" msgstr "" -#: extensions/base/mediawiki.py:1171 +#: extensions/base/mediawiki.py:1182 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:1182 +#: extensions/base/mediawiki.py:1194 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1192 +#: extensions/base/mediawiki.py:1204 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -1286,41 +1331,41 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:1209 +#: extensions/base/mediawiki.py:1221 #, python-brace-format msgid "Activated the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1217 +#: extensions/base/mediawiki.py:1230 #, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1236 +#: extensions/base/mediawiki.py:1249 #, python-brace-format msgid "Deactivated the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1244 +#: extensions/base/mediawiki.py:1258 #, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1264 +#: extensions/base/mediawiki.py:1278 #, python-brace-format msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:1269 +#: extensions/base/mediawiki.py:1283 #, python-brace-format msgid "Renamed user \"{old_name}\" to \"{new_name}\"" msgstr "" -#: extensions/base/mediawiki.py:1284 +#: extensions/base/mediawiki.py:1298 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " @@ -1331,7 +1376,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:1292 +#: extensions/base/mediawiki.py:1306 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" @@ -1371,361 +1416,3 @@ msgstr "" msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" - -#: src/rcgcdw.py:134 src/rcgcdw.py:136 src/rcgcdw.py:138 src/rcgcdw.py:140 -#: src/rcgcdw.py:142 src/rcgcdw.py:144 src/rcgcdw.py:146 -#, python-brace-format -msgid "{value} (avg. {avg})" -msgstr "" - -#: src/rcgcdw.py:167 -msgid "Daily overview" -msgstr "" - -#: src/rcgcdw.py:174 -msgid "No activity" -msgstr "" - -#: src/rcgcdw.py:198 -msgid " ({} action)" -msgid_plural " ({} actions)" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:200 -msgid " ({} edit)" -msgid_plural " ({} edits)" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:205 -msgid " UTC ({} action)" -msgid_plural " UTC ({} actions)" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:207 src/rcgcdw.py:208 src/rcgcdw.py:212 -msgid "But nobody came" -msgstr "" - -#: src/rcgcdw.py:215 -msgid "Most active user" -msgid_plural "Most active users" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:216 -msgid "Most edited article" -msgid_plural "Most edited articles" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:217 -msgid "Edits made" -msgstr "" - -#: src/rcgcdw.py:217 -msgid "New files" -msgstr "" - -#: src/rcgcdw.py:217 -msgid "Admin actions" -msgstr "" - -#: src/rcgcdw.py:218 -msgid "Bytes changed" -msgstr "" - -#: src/rcgcdw.py:218 -msgid "New articles" -msgstr "" - -#: src/rcgcdw.py:219 -msgid "Unique contributors" -msgstr "" - -#: src/rcgcdw.py:220 -msgid "Most active hour" -msgid_plural "Most active hours" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:221 -msgid "Day score" -msgstr "" - -#: src/rcgcdw.py:249 -msgid "~~hidden~~" -msgstr "" - -#: src/rcgcdw.py:251 src/rc_formatters.py:315 -msgid "No description provided" -msgstr "" - -#: src/rcgcdw.py:254 -msgid "hidden" -msgstr "" - -#: src/rc_formatters.py:121 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:123 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:129 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -"profile" -msgstr "" - -#: src/rc_formatters.py:135 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on their own " -"profile" -msgstr "" - -#: src/rc_formatters.py:143 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:149 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:155 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:157 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:165 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:167 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:172 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -"profile. *({desc})*" -msgstr "" - -#: src/rc_formatters.py:179 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -"profile. *({desc})*" -msgstr "" - -#: src/rc_formatters.py:305 src/discussion_formatters.py:38 -#, python-brace-format -msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." -msgstr "" - -#: src/rc_formatters.py:345 -#, python-brace-format -msgid "Left a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:347 -msgid "Left a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:354 -#, python-brace-format -msgid "Replied to a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:356 -msgid "Replied to a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:363 -#, python-brace-format -msgid "Edited a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:365 -msgid "Edited a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:370 -#, python-brace-format -msgid "Edited {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:372 -msgid "Edited their own profile" -msgstr "" - -#: src/rc_formatters.py:374 -#, python-brace-format -msgid "Cleared the {field} field" -msgstr "" - -#: src/rc_formatters.py:376 -#, python-brace-format -msgid "{field} field changed to: {desc}" -msgstr "" - -#: src/rc_formatters.py:381 -#, python-brace-format -msgid "Purged a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:383 -msgid "Purged a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:391 -#, python-brace-format -msgid "Deleted a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:393 -msgid "Deleted a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:518 src/discussion_formatters.py:57 -#, python-brace-format -msgid "Unknown event `{event}`" -msgstr "" - -#: src/rc_formatters.py:524 src/rc_formatters.py:526 -#: src/discussion_formatters.py:63 src/discussion_formatters.py:65 -msgid "Report this on the support server" -msgstr "" - -#: src/rc_formatters.py:547 src/api/util.py:152 -msgid "**Added**: " -msgstr "" - -#: src/rc_formatters.py:547 src/api/util.py:153 -msgid " and {} more\n" -msgstr "" - -#: src/rc_formatters.py:548 src/api/util.py:155 -msgid "**Removed**: " -msgstr "" - -#: src/rc_formatters.py:548 src/api/util.py:156 -msgid " and {} more" -msgstr "" - -#: src/rc_formatters.py:549 src/api/util.py:158 -msgid "Changed categories" -msgstr "" - -#: src/wiki.py:381 -#, python-brace-format -msgid "{wiki} seems to be down or unreachable." -msgstr "" - -#: src/wiki.py:382 src/wiki.py:394 -msgid "Connection status" -msgstr "" - -#: src/wiki.py:392 -#, python-brace-format -msgid "Connection to {wiki} seems to be stable now." -msgstr "" - -#: src/misc.py:44 -msgid "Location" -msgstr "" - -#: src/misc.py:44 -msgid "About me" -msgstr "" - -#: src/misc.py:44 -msgid "Google link" -msgstr "" - -#: src/misc.py:44 -msgid "Facebook link" -msgstr "" - -#: src/misc.py:44 -msgid "Twitter link" -msgstr "" - -#: src/misc.py:44 -msgid "Reddit link" -msgstr "" - -#: src/misc.py:44 -msgid "Twitch link" -msgstr "" - -#: src/misc.py:44 -msgid "PSN link" -msgstr "" - -#: src/misc.py:44 -msgid "VK link" -msgstr "" - -#: src/misc.py:44 -msgid "XBL link" -msgstr "" - -#: src/misc.py:44 -msgid "Steam link" -msgstr "" - -#: src/misc.py:44 -msgid "Discord handle" -msgstr "" - -#: src/misc.py:44 -msgid "Battle.net handle" -msgstr "" - -#: src/misc.py:128 -msgid "" -"\n" -"__And more__" -msgstr "" - -#: src/api/util.py:59 src/api/util.py:64 -msgid "__Only whitespace__" -msgstr "" - -#: src/api/util.py:69 src/discord/redaction.py:77 src/discord/redaction.py:80 -#: src/discord/redaction.py:85 -msgid "Removed" -msgstr "" - -#: src/api/util.py:71 -msgid "Added" -msgstr "" - -#: venv/lib/python3.9/site-packages/isort/main.py:159 -msgid "show this help message and exit" -msgstr "" diff --git a/locale/templates/misc.pot b/locale/templates/misc.pot index 9d2716c..0bb0e31 100644 --- a/locale/templates/misc.pot +++ b/locale/templates/misc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,68 +17,68 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Location" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "About me" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Google link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Facebook link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitter link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Reddit link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitch link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "PSN link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "VK link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "XBL link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Steam link" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Discord handle" msgstr "" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Battle.net handle" msgstr "" -#: src/misc.py:119 +#: src/misc.py:138 msgid "" "\n" "__And more__" msgstr "" -#: src/misc.py:276 +#: src/misc.py:322 msgid "Unknown" msgstr "" -#: src/misc.py:278 +#: src/misc.py:324 msgid "unknown" msgstr "" diff --git a/locale/templates/rcgcdw.pot b/locale/templates/rcgcdw.pot index f883bcd..533e1b8 100644 --- a/locale/templates/rcgcdw.pot +++ b/locale/templates/rcgcdw.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,184 +18,95 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: src/rcgcdw.py:115 src/rcgcdw.py:117 src/rcgcdw.py:119 src/rcgcdw.py:121 -#: src/rcgcdw.py:123 src/rcgcdw.py:125 src/rcgcdw.py:127 +#: src/rcgcdw.py:116 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "" -#: src/rcgcdw.py:147 +#: src/rcgcdw.py:135 msgid "Daily overview" msgstr "" -#: src/rcgcdw.py:154 +#: src/rcgcdw.py:142 msgid "No activity" msgstr "" -#: src/rcgcdw.py:178 +#: src/rcgcdw.py:166 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] "" msgstr[1] "" -#: src/rcgcdw.py:180 +#: src/rcgcdw.py:168 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] "" msgstr[1] "" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:173 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] "" msgstr[1] "" -#: src/rcgcdw.py:187 src/rcgcdw.py:188 src/rcgcdw.py:192 +#: src/rcgcdw.py:175 src/rcgcdw.py:178 msgid "But nobody came" msgstr "" -#: src/rcgcdw.py:195 +#: src/rcgcdw.py:182 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "" msgstr[1] "" -#: src/rcgcdw.py:196 +#: src/rcgcdw.py:183 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "" msgstr[1] "" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:184 msgid "Edits made" msgstr "" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:184 msgid "New files" msgstr "" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:185 msgid "Admin actions" msgstr "" -#: src/rcgcdw.py:198 +#: src/rcgcdw.py:185 msgid "Bytes changed" msgstr "" -#: src/rcgcdw.py:198 +#: src/rcgcdw.py:186 msgid "New articles" msgstr "" -#: src/rcgcdw.py:199 +#: src/rcgcdw.py:186 msgid "Unique contributors" msgstr "" -#: src/rcgcdw.py:200 +#: src/rcgcdw.py:187 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "" msgstr[1] "" -#: src/rcgcdw.py:201 +#: src/rcgcdw.py:188 msgid "Day score" msgstr "" -#: src/rcgcdw.py:243 -msgid "director" +#: src/rcgcdw.py:214 +msgid "~~hidden~~" msgstr "" -#: src/rcgcdw.py:243 -msgid "bot" +#: src/rcgcdw.py:216 +msgid "No description provided" msgstr "" -#: src/rcgcdw.py:243 -msgid "editor" +#: src/rcgcdw.py:219 +msgid "hidden" msgstr "" - -#: src/rcgcdw.py:243 -msgid "directors" -msgstr "" - -#: src/rcgcdw.py:243 -msgid "sysop" -msgstr "" - -#: src/rcgcdw.py:243 -msgid "bureaucrat" -msgstr "" - -#: src/rcgcdw.py:243 -msgid "reviewer" -msgstr "" - -#: src/rcgcdw.py:244 -msgid "autoreview" -msgstr "" - -#: src/rcgcdw.py:244 -msgid "autopatrol" -msgstr "" - -#: src/rcgcdw.py:244 -msgid "wiki_guardian" -msgstr "" - -#: src/rcgcdw.py:244 -msgid "second" -msgid_plural "seconds" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:244 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:244 -msgid "hour" -msgid_plural "hours" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:244 -msgid "day" -msgid_plural "days" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:244 -msgid "week" -msgid_plural "weeks" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:244 -msgid "month" -msgid_plural "months" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:244 -msgid "year" -msgid_plural "years" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:244 -msgid "millennium" -msgid_plural "millennia" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:244 -msgid "decade" -msgid_plural "decades" -msgstr[0] "" -msgstr[1] "" - -#: src/rcgcdw.py:244 -msgid "century" -msgid_plural "centuries" -msgstr[0] "" -msgstr[1] "" diff --git a/locale/templates/redaction.pot b/locale/templates/redaction.pot index 3af7f59..e931d07 100644 --- a/locale/templates/redaction.pot +++ b/locale/templates/redaction.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"POT-Creation-Date: 2021-05-18 13:48+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/discord/redaction.py:62 src/discord/redaction.py:65 -#: src/discord/redaction.py:70 +#: src/discord/redaction.py:77 src/discord/redaction.py:80 +#: src/discord/redaction.py:85 msgid "Removed" msgstr "" diff --git a/locale/uk/LC_MESSAGES/formatters.po b/locale/uk/LC_MESSAGES/formatters.po index e9e9417..06067ad 100644 --- a/locale/uk/LC_MESSAGES/formatters.po +++ b/locale/uk/LC_MESSAGES/formatters.po @@ -12,23 +12,9 @@ #, fuzzy msgid "" msgstr "" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" -"PO-Revision-Date: 2020-04-23 23:32+0200\n" -"Last-Translator: Frisk <>\n" -"Language-Team: \n" -"Language: en_US\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 19.12.3\n" -"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-11-18 07:47+0000\n" "Last-Translator: MakandIv <>\n" "Language-Team: Ukrainian =2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.2.1\n" -#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 -#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 -#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 -msgid "unknown" -msgstr "" +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" +msgstr "__Тільки пробіли__" -#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 -#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 -#: src/rc_formatters.py:75 src/rc_formatters.py:96 +#: src/api/util.py:71 +msgid "Removed" +msgstr "Видалено" + +#: src/api/util.py:73 +msgid "Added" +msgstr "Додано" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 msgid "Unregistered user" msgstr "" -#: src/discussion_formatters.py:39 +#: src/api/util.py:160 extensions/base/discussions.py:193 +#: extensions/base/discussions.py:195 +msgid "Tags" +msgstr "Теги" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "**Додано**: " + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr " та ще {}\n" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "**Видалено**: " + +#: src/api/util.py:166 +msgid " and {} more" +msgstr " та ще {}" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "Змінені категорії" + +#: extensions/base/cargo.py:37 +#, fuzzy, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "Створив тег \"{tag}\"" + +#: extensions/base/cargo.py:45 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" + +#: extensions/base/cargo.py:60 +#, fuzzy, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "Створив тег \"{tag}\"" + +#: extensions/base/cargo.py:68 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" + +#: extensions/base/cargo.py:83 +#, fuzzy, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "Вилучив тег \"{tag}\"" + +#: extensions/base/cargo.py:91 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" + +#: extensions/base/cargo.py:105 +#, fuzzy, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "Вилучив тег \"{tag}\"" + +#: extensions/base/cargo.py:112 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) вилучив [тег]({tag_url}) \"{tag}\"" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: extensions/base/translate.py:55 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: extensions/base/translate.py:80 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версією{comment}" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:106 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) переніс налаштування захисту з {redirect}*{article}" +"* на [{target}]({target_url}){comment}" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:133 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) об'єднав історії версій [{article}]({article_url}) " +"з [{dest}]({dest_url}){comment}" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: extensions/base/translate.py:161 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версією{comment}" + +#: extensions/base/translate.py:177 +#, fuzzy, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "Змінив видимість {amount} версії сторінки {article} " + +#: extensions/base/translate.py:188 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) змінив видимість {amount} версії сторінки " +"[{article}]({article_url}){comment}" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:215 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " +"версією{comment}" + +#: extensions/base/translate.py:231 +#, fuzzy, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "Зняв захист з {article}" + +#: extensions/base/translate.py:240 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:264 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:288 +#, fuzzy, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "Зняв захист з {article}" + +#: extensions/base/translate.py:301 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) змінив налаштування захисту [{article}]" +"({article_url}) на: {settings}{comment}" + +#: extensions/base/translate.py:308 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) змінив налаштування захисту [{article}]" +"({article_url}) на: {settings}{comment}" + +#: extensions/base/translate.py:315 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:342 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:368 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" + +#: extensions/base/translate.py:387 +#, fuzzy, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "Зняв захист з {article}" + +#: extensions/base/translate.py:401 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "" + +#: extensions/base/translate.py:431 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" + +#: extensions/base/translate.py:439 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "" + +#: extensions/base/translate.py:464 +#, fuzzy, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "Зняв захист з {article}" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "" + +#: extensions/base/translate.py:477 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:193 +msgid "{} tags" +msgstr "" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:214 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -#: src/discussion_formatters.py:42 +#: extensions/base/discussions.py:217 #, python-brace-format msgid "" "[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -#: src/discussion_formatters.py:45 +#: extensions/base/discussions.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -#: src/discussion_formatters.py:54 +#: extensions/base/discussions.py:234 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " "to [{title}](<{url}f/p/{threadId}>) in {forumName}" msgstr "" -#: src/discussion_formatters.py:61 +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:312 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" @@ -89,7 +462,7 @@ msgid "" "Message_Wall:{user_wall}>)" msgstr "" -#: src/discussion_formatters.py:64 +#: extensions/base/discussions.py:318 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" @@ -98,14 +471,24 @@ msgid "" "(<{url}wiki/Message_Wall:{user_wall}>)" msgstr "" -#: src/discussion_formatters.py:72 +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "" + +#: extensions/base/discussions.py:359 #, python-brace-format msgid "" "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " "on [{article}](<{url}>)" msgstr "" -#: src/discussion_formatters.py:78 +#: extensions/base/discussions.py:365 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" @@ -113,144 +496,222 @@ msgid "" "[{article}](<{url}>)" msgstr "" -#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "" + +#: extensions/base/managewiki.py:44 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) змінив видимість подій журналу{comment}" + +#: extensions/base/managewiki.py:55 +#, fuzzy, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "Вилучив тег \"{tag}\"" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "Невідомо" + +#: extensions/base/managewiki.py:63 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#: extensions/base/managewiki.py:80 #, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "" + +#: extensions/base/managewiki.py:89 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:111 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#: extensions/base/managewiki.py:124 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "" + +#: extensions/base/managewiki.py:134 +#, fuzzy, python-brace-format msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" msgstr "" +"[{author}]({author_url}) завантажив нову версію [{file}]({file_link})" +"{comment}" -#: src/discussion_formatters.py:123 +#: extensions/base/managewiki.py:147 #, python-brace-format -msgid "Created \"{title}\"" +msgid "Deleted a \"{namespace_name}\" namespace" msgstr "" -#: src/discussion_formatters.py:127 +#: extensions/base/managewiki.py:158 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) вилучив [{page}]({page_link}){comment}" + +#: extensions/base/managewiki.py:173 #, python-brace-format -msgid "Created a poll \"{title}\"" +msgid "Modified \"{usergroup_name}\" usergroup" msgstr "" -#: src/discussion_formatters.py:134 -msgid "Option {}" -msgstr "" +#: extensions/base/managewiki.py:182 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" -#: src/discussion_formatters.py:135 +#: extensions/base/managewiki.py:195 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "Вилучив тег \"{tag}\"" + +#: extensions/base/managewiki.py:203 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#: extensions/base/managewiki.py:217 #, python-brace-format -msgid "__[View image]({image_url})__" +msgid "Unlocked a \"{wiki}\" wiki" msgstr "" -#: src/discussion_formatters.py:139 +#: extensions/base/managewiki.py:225 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" + +#: extensions/base/datadump.py:36 #, python-brace-format -msgid "Created a quiz \"{title}\"" +msgid "Generated {file} dump" msgstr "" -#: src/rc_formatters.py:1283 -msgid "Tags" -msgstr "Теги" +#: extensions/base/datadump.py:45 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" -#: src/discussion_formatters.py:155 -msgid "{} tags" -msgstr "" +#: extensions/base/datadump.py:58 +#, fuzzy, python-brace-format +msgid "Deleted {file} dump" +msgstr "Вилучив сторінку {article}" -#: src/discussion_formatters.py:160 -#, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "" +#: extensions/base/datadump.py:67 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" -#: src/discussion_formatters.py:169 -#, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "" - -#: src/discussion_formatters.py:173 -#, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "" - -#: src/discussion_formatters.py:180 -#, python-brace-format -msgid "Commented on {article}" -msgstr "" - -#: src/discussion_formatters.py:184 -#, python-brace-format -msgid "Replied to a comment on {article}" -msgstr "" - -#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 -#, python-brace-format -msgid "Unknown event `{event}`" -msgstr "" - -#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 -msgid "Report this on the support server" -msgstr "Повідомити про це на сервер підтримки" - -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "None" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Warning issued" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Blocked user**" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Tagged the edit" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Disallowed the action" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**IP range blocked**" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Throttled actions" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Removed autoconfirmed group" msgstr "" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Removed from privileged groups**" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Edit" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Upload" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Move" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Stash upload" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Deletion" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Account creation" msgstr "" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Auto account creation" msgstr "" -#: src/rc_formatters.py:83 +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "" + +#: extensions/base/abusefilter.py:66 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " @@ -259,19 +720,85 @@ msgstr "" "[{author}]({author_url}) перейменував {redirect}*{article}* поверх " "перенаправлення в [{target}]({target_url}) {made_a_redirect}{comment}" -#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 -#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 -#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 -#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 -#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 -#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 -#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 -#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 -#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 -msgid "Unknown" -msgstr "Невідомо" +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "Відредагував фільтр зловживань під номером {number}" -#: src/rc_formatters.py:116 +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) відредагував фільтр зловживань [під номером " +"{number}]({filter_url})" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "Створив фільтр зловживань під номером {number}" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) створив фільтр зловживань [під номером {number}]" +"({filter_url})" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "(Н!) " + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "м" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "б" + +#: extensions/base/mediawiki.py:112 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" @@ -280,7 +807,7 @@ msgstr "" "[{author}]({author_url}) відредагував [{article}]({edit_link}){comment} " "({sign}{edit_size})" -#: src/rc_formatters.py:118 +#: extensions/base/mediawiki.py:117 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" @@ -289,19 +816,55 @@ msgstr "" "[{author}]({author_url}) створив [{article}]({edit_link}){comment} ({sign}" "{edit_size})" -#: src/rc_formatters.py:121 -#, python-brace-format -msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" -msgstr "[{author}]({author_url}) завантажив [{file}]({file_link}){comment}" +#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +msgid "Options" +msgstr "Параметри" -#: src/rc_formatters.py:128 +#: extensions/base/mediawiki.py:191 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([перегляд]({link}) | [скасувати]({undolink}))" + +#: extensions/base/mediawiki.py:196 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "Завантажив нову версію {name}" + +#: extensions/base/mediawiki.py:198 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "Повернув версію {name}" + +#: extensions/base/mediawiki.py:200 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "Загрузил {name}" + +#: extensions/base/mediawiki.py:209 +msgid "**No license!**" +msgstr "**Немає ліцензії!**" + +#: extensions/base/mediawiki.py:224 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"Ліцензія: {}" + +#: extensions/base/mediawiki.py:226 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([перегляд]({link}))" + +#: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" msgstr "" "[{author}] ({author_url}) повернув версію [{file}] ({file_link}) {comment}" -#: src/rc_formatters.py:132 +#: extensions/base/mediawiki.py:248 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -310,12 +873,27 @@ msgstr "" "[{author}]({author_url}) завантажив нову версію [{file}]({file_link})" "{comment}" -#: src/rc_formatters.py:135 +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) завантажив [{file}]({file_link}){comment}" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "Вилучив сторінку {article}" + +#: extensions/base/mediawiki.py:283 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) вилучив [{page}]({page_link}){comment}" -#: src/rc_formatters.py:141 +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "Вилучив перенаправлення {article} by overwriting" + +#: extensions/base/mediawiki.py:308 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -324,241 +902,34 @@ msgstr "" "[{author}]({author_url}) вилучив перенаправлення за допомогою перезапису " "[{page}]({page_link}){comment}" -#: src/rc_formatters.py:147 src/rc_formatters.py:152 -msgid "without making a redirect" -msgstr "не залишивши перенаправлення" - -#: src/rc_formatters.py:147 src/rc_formatters.py:153 -msgid "with a redirect" -msgstr "з перенаправленням" - -#: src/rc_formatters.py:148 +#: extensions/base/mediawiki.py:322 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" -msgstr "" -"[{author}]({author_url}) перейменував {redirect}*{article}* в [{target}]" -"({target_url}) {made_a_redirect}{comment}" +msgid "Restored {article}" +msgstr "Відновив {article}" -#: src/rc_formatters.py:154 +#: extensions/base/mediawiki.py:331 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -"[{target}]({target_url}) {made_a_redirect}{comment}" -msgstr "" -"[{author}]({author_url}) перейменував {redirect}*{article}* поверх " -"перенаправлення в [{target}]({target_url}) {made_a_redirect}{comment}" +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" -#: src/rc_formatters.py:159 +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "Змінив видимість подій журналу" + +#: extensions/base/mediawiki.py:356 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) переніс налаштування захисту з {redirect}*{article}" -"* на [{target}]({target_url}){comment}" +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "[{author}]({author_url}) змінив видимість подій журналу{comment}" -#: src/rc_formatters.py:170 src/rc_formatters.py:855 -#, fuzzy -msgid "for infinity and beyond" -msgstr "навіки і назавжди" - -#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#: extensions/base/mediawiki.py:370 #, python-brace-format -msgid "for {num} {translated_length}" -msgstr "на {num}{translated_length}" +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "Змінив видимість {amount} версії сторінки {article} " +msgstr[1] "Змінив видимість {amount} версій сторінки {article} " +msgstr[2] "Змінив видимість {amount} версій сторінки {article} " -#: src/rc_formatters.py:185 src/rc_formatters.py:867 -msgid "until {}" -msgstr "" - -#: src/rc_formatters.py:189 -msgid " on pages: " -msgstr " на сторінках: " - -#: src/rc_formatters.py:196 src/rc_formatters.py:881 -msgid " and namespaces: " -msgstr " і в простору імен: " - -#: src/rc_formatters.py:198 -msgid " on namespaces: " -msgstr " в просторах імен: " - -#: src/rc_formatters.py:210 -#, python-brace-format -msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" -msgstr "" -"[{author}]({author_url}) заблокував [{user}]({user_url}) на {time}" -"{restriction_desc}{comment}" - -#: src/rc_formatters.py:214 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) змінив блокування для [{blocked_user}]({user_url})" -"{comment}" - -#: src/rc_formatters.py:218 -#, python-brace-format -msgid "" -"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) розблокував [{blocked_user}]({user_url}){comment}" - -#: src/rc_formatters.py:223 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) залишив [коментар]({comment}) на профілі {target}" - -#: src/rc_formatters.py:225 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) залишив [коментар]({comment}) на профілі {target}" - -#: src/rc_formatters.py:231 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -"profile" -msgstr "" -"[{author}]({author_url}) відповів на [коментар]({comment}) на профілі " -"{target}" - -#: src/rc_formatters.py:237 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on their own " -"profile" -msgstr "" -"[{author}]({author_url}) відповів на [коментар]({comment}) на профілі " -"{target}" - -#: src/rc_formatters.py:245 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " -"{target}" - -#: src/rc_formatters.py:251 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " -"{target}" - -#: src/rc_formatters.py:257 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "[{author}] ({author_url}) вилучив коментар в профілі {target}" - -#: src/rc_formatters.py:259 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "[{author}] ({author_url}) вилучив коментар в профілі {target}" - -#: src/rc_formatters.py:267 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " -"{target}" - -#: src/rc_formatters.py:269 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" -msgstr "" -"[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " -"{target}" - -#: src/rc_formatters.py:274 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) відредагував {field} на профілі {target}. *({desc})*" - -#: src/rc_formatters.py:281 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) відредагував {field} на профілі {target}. *({desc})*" - -#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 -#: src/rc_formatters.py:979 -msgid "none" -msgstr "нічого" - -#: src/rc_formatters.py:301 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) from {old_groups} to {new_groups}{comment}" -msgstr "" -"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" -"({article_url}) з {old} на {new}{comment}" - -#: src/rc_formatters.py:303 -#, fuzzy, python-brace-format -msgid "" -"{author} autopromoted [{target}]({target_url}) from {old_groups} to " -"{new_groups}{comment}" -msgstr "" -"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" -"({article_url}) з {old} на {new}{comment}" - -#: src/rc_formatters.py:304 src/rc_formatters.py:965 -msgid "System" -msgstr "Система" - -#: src/rc_formatters.py:309 -#, python-brace-format -msgid "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) захистив [{article}]({article_url}) з наступними " -"налаштуваннями: {settings}{comment}" - -#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 -#: src/rc_formatters.py:993 -msgid " [cascading]" -msgstr " [каскадний]" - -#: src/rc_formatters.py:316 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) змінив налаштування захисту [{article}]" -"({article_url}) на: {settings}{comment}" - -#: src/rc_formatters.py:323 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" - -#: src/rc_formatters.py:327 +#: extensions/base/mediawiki.py:383 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -576,7 +947,235 @@ msgstr[2] "" "[{author}]({author_url}) змінив видимість {amount} версій сторінки " "[{article}]({article_url}){comment}" -#: src/rc_formatters.py:340 +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "Перенаправлення не зроблено" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "Перенаправлення було зроблено" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "Перейменував сторінку {redirect}{article} to {target}" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "не залишивши перенаправлення" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "з перенаправленням" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) перейменував {redirect}*{article}* в [{target}]" +"({target_url}) {made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" +"Перейменував сторінку {redirect}{article} to {title} поверх перенаправлення" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) перейменував {redirect}*{article}* поверх " +"перенаправлення в [{target}]({target_url}) {made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "Переніс налаштування захисту з {redirect}{article} на {title}" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) переніс налаштування захисту з {redirect}*{article}" +"* на [{target}]({target_url}){comment}" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "Захистив {target}" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr " [каскадний]" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) захистив [{article}]({article_url}) з наступними " +"налаштуваннями: {settings}{comment}" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "Змінив рівень захисту для {article}" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) змінив налаштування захисту [{article}]" +"({article_url}) на: {settings}{comment}" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "Зняв захист з {article}" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" + +#: extensions/base/mediawiki.py:572 +#, fuzzy +msgid "for infinity and beyond" +msgstr "навіки і назавжди" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:610 +msgid "Blocked from editing the following pages: " +msgstr "Заблокований від редагування в наступних сторінках: " + +#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr " і в простору імен: " + +#: extensions/base/mediawiki.py:619 +msgid "Blocked from editing pages on following namespaces: " +msgstr "Заблокований від редагування на сторінках в наступних просторах назв: " + +#: extensions/base/mediawiki.py:630 +msgid "Partial block details" +msgstr "Часткові деталі блокування" + +#: extensions/base/mediawiki.py:633 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:635 +#, fuzzy, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "Заблокував {blocked_user} на {time}" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr " на сторінках: " + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr " в просторах імен: " + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) заблокував [{user}]({user_url}) на {time}" +"{restriction_desc}{comment}" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "Змінив блокування для {blocked_user}" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) змінив блокування для [{blocked_user}]({user_url})" +"{comment}" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "Розблокував {blocked_user}" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) розблокував [{blocked_user}]({user_url}){comment}" + +#: extensions/base/mediawiki.py:743 +#, fuzzy +msgid "Action has been hidden by administration" +msgstr "Дія була прихована адміністрацією." + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "Дія була прихована адміністрацією." + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "Імпортував {article} з {count} версією" +msgstr[1] "Імпортував {article} з {count} версіями" +msgstr[2] "Імпортував {article} з {count} версіями" + +#: extensions/base/mediawiki.py:772 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -594,17 +1193,15 @@ msgstr[2] "" "[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " "версіями{comment}" -#: src/rc_formatters.py:345 -#, python-brace-format -msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" +#: extensions/base/mediawiki.py:788 +#, fuzzy, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "Імпортував {article} з {count} версією" +msgstr[1] "Імпортував {article} з {count} версіями" +msgstr[2] "Імпортував {article} з {count} версіями" -#: src/rc_formatters.py:347 -#, python-brace-format -msgid "[{author}]({author_url}) changed visibility of log events{comment}" -msgstr "[{author}]({author_url}) змінив видимість подій журналу{comment}" - -#: src/rc_formatters.py:359 +#: extensions/base/mediawiki.py:803 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -622,23 +1219,56 @@ msgstr[2] "" "[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " "версіями{comment}" -#: src/rc_formatters.py:364 +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:836 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "Змінено членство в групі для {target}" + +#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +msgid "System" +msgstr "Система" + +#: extensions/base/mediawiki.py:840 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} автоматично переведений в нову групу користувачів" + +#: extensions/base/mediawiki.py:846 #, python-brace-format msgid "" -"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +"{reason}\n" +"{added}{linebreak}{removed}" msgstr "" -"[{author}]({author_url}) відредагував фільтр зловживань [під номером " -"{number}]({filter_url})" -#: src/rc_formatters.py:368 -#, python-brace-format +#: extensions/base/mediawiki.py:860 +#, fuzzy, python-brace-format msgid "" -"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) {added}{comma} {removed}{comment}" msgstr "" -"[{author}]({author_url}) створив фільтр зловживань [під номером {number}]" -"({filter_url})" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" -#: src/rc_formatters.py:372 +#: extensions/base/mediawiki.py:864 +#, fuzzy, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"{comment}" +msgstr "" +"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" +"({article_url}) з {old} на {new}{comment}" + +#: extensions/base/mediawiki.py:877 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "Об'єднав історії версій {article} з {dest}" + +#: extensions/base/mediawiki.py:891 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -647,17 +1277,30 @@ msgstr "" "[{author}]({author_url}) об'єднав історії версій [{article}]({article_url}) " "з [{dest}]({dest_url}){comment}" -#: src/rc_formatters.py:375 +#: extensions/base/mediawiki.py:905 +msgid "Created account automatically" +msgstr "Обліковий запис був створений автоматично" + +#: extensions/base/mediawiki.py:912 #, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "Обліковий запис [{author}]({author_url}) був автоматично створений" -#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +msgid "Created account" +msgstr "Створено обліковий запис" + +#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 #, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "Обліковий запис [{author}]({author_url}) був створений" -#: src/rc_formatters.py:380 +#: extensions/base/mediawiki.py:944 +#, python-brace-format +msgid "Created account {article}" +msgstr "Створено обліковий запис {article}" + +#: extensions/base/mediawiki.py:953 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" @@ -666,7 +1309,14 @@ msgstr "" "Обліковий запис [{article}]({article_url}) був створений [{author}]" "({author_url}){comment}" -#: src/rc_formatters.py:383 +#: extensions/base/mediawiki.py:966 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" +"Створено обліковий запис {article} і і пароль був відправлений на електронну " +"пошту" + +#: extensions/base/mediawiki.py:977 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " @@ -675,7 +1325,16 @@ msgstr "" "Обліковий запис [{article}]({article_url}) був створений [{author}]" "({author_url}) і пароль був відправлений на електронну пошту{comment}" -#: src/rc_formatters.py:388 +#: extensions/base/mediawiki.py:1009 +msgid "Added an entry to the interwiki table" +msgstr "Додав запис в таблицю інтервікі" + +#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Префікс: {prefix}, веб-сайт: {website} | {desc}" + +#: extensions/base/mediawiki.py:1022 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -684,7 +1343,11 @@ msgstr "" "[{author}]({author_url}) додав запис в [таблицю інтервікі]({table_url}), яка " "вказує на {website} з префіксом {prefix}" -#: src/rc_formatters.py:394 +#: extensions/base/mediawiki.py:1036 +msgid "Edited an entry in interwiki table" +msgstr "Відредагував запис в таблиці інтервікі" + +#: extensions/base/mediawiki.py:1049 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -693,14 +1356,34 @@ msgstr "" "[{author}]({author_url}) відредагував запис в [таблиці інтервікі]" "({table_url}), яка вказує на {website} з префіксом {prefix}" -#: src/rc_formatters.py:400 +#: extensions/base/mediawiki.py:1063 +msgid "Deleted an entry in interwiki table" +msgstr "Вилучив запис в таблиці інтервікі" + +#: extensions/base/mediawiki.py:1064 #, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Префікс: {prefix} | {desc}" + +#: extensions/base/mediawiki.py:1074 +#, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" msgstr "" "[{author}]({author_url}) вилучив запис в [таблиці інтервікі]({table_url})" -#: src/rc_formatters.py:403 +#: extensions/base/mediawiki.py:1091 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "Змінив модель вмісту сторінки {article}" + +#: extensions/base/mediawiki.py:1093 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "Модель змінена з {old} на {new}: {reason}" + +#: extensions/base/mediawiki.py:1105 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -709,7 +1392,17 @@ msgstr "" "[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" "({article_url}) з {old} на {new}{comment}" -#: src/rc_formatters.py:407 +#: extensions/base/mediawiki.py:1120 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: extensions/base/mediawiki.py:1122 +#, fuzzy, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "Модель змінена з {old} на {new}: {reason}" + +#: extensions/base/mediawiki.py:1133 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " @@ -718,62 +1411,41 @@ msgstr "" "[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" "({article_url}) з {old} на {new}{comment}" -#: src/rc_formatters.py:410 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" -msgstr "" -"[{author}]({author_url}) відредагував спрайт для [{article}]({article_url})" - -#: src/rc_formatters.py:413 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" -msgstr "" -"[{author}]({author_url}) створив таблицю спрайтів для [{article}]" -"({article_url})" - -#: src/rc_formatters.py:416 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the slice for [{article}]({article_url})" -msgstr "" -"[{author}]({author_url}) відредагував фрагмент для [{article}]({article_url})" - -#: src/rc_formatters.py:421 +#: extensions/base/mediawiki.py:1148 #, fuzzy, python-brace-format -msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" +msgid "Created the tag \"{tag}\"" +msgstr "Створив тег \"{tag}\"" -#: src/rc_formatters.py:423 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) вилучив [тег]({tag_url}) \"{tag}\"" - -#: src/rc_formatters.py:428 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" - -#: src/rc_formatters.py:433 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" - -#: src/rc_formatters.py:436 +#: extensions/base/mediawiki.py:1158 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) створив [тег]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:441 +#: extensions/base/mediawiki.py:1180 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "Вилучив тег \"{tag}\"" + +#: extensions/base/mediawiki.py:1182 +#, fuzzy +msgid "Removed from" +msgstr "Видалено" + +#: extensions/base/mediawiki.py:1182 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: extensions/base/mediawiki.py:1194 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) вилучив [тег]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:443 +#: extensions/base/mediawiki.py:1204 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -791,241 +1463,42 @@ msgstr[2] "" "[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " "версіями{comment}" -#: src/rc_formatters.py:449 +#: extensions/base/mediawiki.py:1221 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "Активував тег \"{tag}\"" + +#: extensions/base/mediawiki.py:1230 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) активував [тег]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:452 +#: extensions/base/mediawiki.py:1249 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "Деактивував тег \"{tag}\"" + +#: extensions/base/mediawiki.py:1258 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) деактивував [тег]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:454 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) changed wiki settings{reason}" -msgstr "[{author}]({author_url}) змінив видимість подій журналу{comment}" +#: extensions/base/mediawiki.py:1278 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: src/rc_formatters.py:456 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" - -#: src/rc_formatters.py:459 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" - -#: src/rc_formatters.py:462 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) modified namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) завантажив нову версію [{file}]({file_link})" -"{comment}" - -#: src/rc_formatters.py:467 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) вилучив [{page}]({page_link}){comment}" - -#: src/rc_formatters.py:473 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" - -#: src/rc_formatters.py:477 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" - -#: src/rc_formatters.py:481 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" - -#: src/rc_formatters.py:486 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) generated *{file}* dump{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" - -#: src/rc_formatters.py:491 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" -msgstr "[{author}]({author_url}) імпортував інтервікі{comment}" - -#: src/rc_formatters.py:502 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) marked [{article}]({article_url}) for " -"translation{comment}" -msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" - -#: src/rc_formatters.py:509 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) removed [{article}]({article_url}) from the " -"translation system{comment}" -msgstr "" -"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " -"версією{comment}" - -#: src/rc_formatters.py:516 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) completed moving translation pages from *{article}* " -"to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) переніс налаштування захисту з {redirect}*{article}" -"* на [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:524 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) encountered a problem while moving [{article}]" -"({article_url}) to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) об'єднав історії версій [{article}]({article_url}) " -"з [{dest}]({dest_url}){comment}" - -#: src/rc_formatters.py:532 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translatable page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" - -#: src/rc_formatters.py:540 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translatable page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " -"версією{comment}" - -#: src/rc_formatters.py:548 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translation page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) змінив видимість {amount} версії сторінки " -"[{article}]({article_url}){comment}" - -#: src/rc_formatters.py:556 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translation page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) імпортував [{article}]({article_url}) з {count} " -"версією{comment}" - -#: src/rc_formatters.py:564 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" - -#: src/rc_formatters.py:571 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) discouraged translation of [{article}]" -"({article_url}){comment}" -msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" - -#: src/rc_formatters.py:581 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " -"`{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) змінив налаштування захисту [{article}]" -"({article_url}) на: {settings}{comment}" - -#: src/rc_formatters.py:587 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) set the priority languages for [{article}]" -"({article_url}) to `{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) змінив налаштування захисту [{article}]" -"({article_url}) на: {settings}{comment}" - -#: src/rc_formatters.py:593 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) removed priority languages from [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" - -#: src/rc_formatters.py:600 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) added translatable page [{article}]({article_url}) " -"to aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" -"({article_url}) з {old} на {new}{comment}" - -#: src/rc_formatters.py:607 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) removed translatable page [{article}]" -"({article_url}) from aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" - -#: src/rc_formatters.py:619 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) reviewed translation [{article}]({article_url})" -"{comment}" -msgstr "[{author}]({author_url}) відновив [{article}]({article_url}){comment}" - -#: src/rc_formatters.py:627 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" -"({article_url}) з {old} на {new}{comment}" - -#: src/rc_formatters.py:634 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" -"({article_url}) з {old} на {new}{comment}" - -#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 -#: src/rc_formatters.py:1241 -msgid "(default)" +#: extensions/base/mediawiki.py:1283 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" msgstr "" -#: src/rc_formatters.py:647 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) changed the language of [{article}]({article_url}) " -"from {old_lang} to {new_lang}{comment}" -msgstr "" -"[{author}]({author_url}) змінив модель вмісту сторінки [{article}]" -"({article_url}) з {old} на {new}{comment}" - -#: src/rc_formatters.py:656 +#: extensions/base/mediawiki.py:1298 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " @@ -1037,641 +1510,210 @@ msgstr[0] "[{author}]({author_url}) вилучив [{page}]({page_link}){comment msgstr[1] "[{author}]({author_url}) вилучив [{page}]({page_link}){comment}" msgstr[2] "[{author}]({author_url}) вилучив [{page}]({page_link}){comment}" -#: src/rc_formatters.py:661 +#: extensions/base/mediawiki.py:1306 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" "{comment}" msgstr "[{author}]({author_url}) вилучив [{page}]({page_link}){comment}" -#: src/rc_formatters.py:665 -msgid "An action has been hidden by administration." -msgstr "Дія була прихована адміністрацією." - -#: src/rc_formatters.py:681 -#, python-brace-format -msgid "{user} triggered \"{abuse_filter}\"" -msgstr "" - -#: src/rc_formatters.py:682 -msgid "Performed" -msgstr "" - -#: src/rc_formatters.py:683 -msgid "Action taken" -msgstr "" - -#: src/rc_formatters.py:684 -msgid "Title" -msgstr "" - -#: src/rc_formatters.py:693 src/rc_formatters.py:980 -msgid "No description provided" -msgstr "Немає опису редагування" - -#: src/rc_formatters.py:717 -msgid "(N!) " -msgstr "(Н!) " - -#: src/rc_formatters.py:718 -msgid "m" -msgstr "м" - -#: src/rc_formatters.py:718 -msgid "b" -msgstr "б" - -#: src/rc_formatters.py:735 src/rc_formatters.py:740 -msgid "__Only whitespace__" -msgstr "__Тільки пробіли__" - -#: src/rc_formatters.py:745 -msgid "Removed" -msgstr "Видалено" - -#: src/rc_formatters.py:747 -msgid "Added" -msgstr "Додано" - -#: src/rc_formatters.py:781 src/rc_formatters.py:820 -msgid "Options" -msgstr "Параметри" - -#: src/rc_formatters.py:781 -#, python-brace-format -msgid "([preview]({link}) | [undo]({undolink}))" -msgstr "([перегляд]({link}) | [скасувати]({undolink}))" - -#: src/rc_formatters.py:786 -#, python-brace-format -msgid "Uploaded a new version of {name}" -msgstr "Завантажив нову версію {name}" - -#: src/rc_formatters.py:788 -#, python-brace-format -msgid "Reverted a version of {name}" -msgstr "Повернув версію {name}" - -#: src/rc_formatters.py:790 -#, python-brace-format -msgid "Uploaded {name}" -msgstr "Загрузил {name}" - -#: src/rc_formatters.py:806 -msgid "**No license!**" -msgstr "**Немає ліцензії!**" - -#: src/rc_formatters.py:818 -msgid "" -"\n" -"License: {}" -msgstr "" -"\n" -"Ліцензія: {}" - -#: src/rc_formatters.py:820 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "([перегляд]({link}))" - -#: src/rc_formatters.py:825 -#, python-brace-format -msgid "Deleted page {article}" -msgstr "Вилучив сторінку {article}" - -#: src/rc_formatters.py:830 -#, python-brace-format -msgid "Deleted redirect {article} by overwriting" -msgstr "Вилучив перенаправлення {article} by overwriting" - -#: src/rc_formatters.py:836 -msgid "No redirect has been made" -msgstr "Перенаправлення не зроблено" - -#: src/rc_formatters.py:837 -msgid "A redirect has been made" -msgstr "Перенаправлення було зроблено" - -#: src/rc_formatters.py:838 -#, python-brace-format -msgid "Moved {redirect}{article} to {target}" -msgstr "Перейменував сторінку {redirect}{article} to {target}" - -#: src/rc_formatters.py:841 -#, python-brace-format -msgid "Moved {redirect}{article} to {title} over redirect" -msgstr "" -"Перейменував сторінку {redirect}{article} to {title} поверх перенаправлення" - -#: src/rc_formatters.py:845 -#, python-brace-format -msgid "Moved protection settings from {redirect}{article} to {title}" -msgstr "Переніс налаштування захисту з {redirect}{article} на {title}" - -#: src/rc_formatters.py:869 -msgid "unknown expiry time" -msgstr "" - -#: src/rc_formatters.py:874 -msgid "Blocked from editing the following pages: " -msgstr "Заблокований від редагування в наступних сторінках: " - -#: src/rc_formatters.py:883 -msgid "Blocked from editing pages on following namespaces: " -msgstr "Заблокований від редагування на сторінках в наступних просторах назв: " - -#: src/rc_formatters.py:894 -msgid "Partial block details" -msgstr "Часткові деталі блокування" - -#: src/rc_formatters.py:895 -#, fuzzy, python-brace-format -msgid "Blocked {blocked_user} {time}" -msgstr "Заблокував {blocked_user} на {time}" - -#: src/rc_formatters.py:899 -#, python-brace-format -msgid "Changed block settings for {blocked_user}" -msgstr "Змінив блокування для {blocked_user}" - -#: src/rc_formatters.py:903 -#, python-brace-format -msgid "Unblocked {blocked_user}" -msgstr "Розблокував {blocked_user}" - -#: src/rc_formatters.py:910 -#, python-brace-format -msgid "Left a comment on {target}'s profile" -msgstr "Залишив коментар на профілі {target}" - -#: src/rc_formatters.py:912 -msgid "Left a comment on their own profile" -msgstr "Залишив коментар на своєму профілі" - -#: src/rc_formatters.py:919 -#, python-brace-format -msgid "Replied to a comment on {target}'s profile" -msgstr "Відповів на коментар на профілі {target}" - -#: src/rc_formatters.py:921 -msgid "Replied to a comment on their own profile" -msgstr "Відповів на коментар на своєму профілі" - -#: src/rc_formatters.py:928 -#, python-brace-format -msgid "Edited a comment on {target}'s profile" -msgstr "Відредагував коментар на профілі {target}" - -#: src/rc_formatters.py:930 -msgid "Edited a comment on their own profile" -msgstr "Відредагував коментар на своєму профілі" - -#: src/rc_formatters.py:935 -#, python-brace-format -msgid "Edited {target}'s profile" -msgstr "Відредагував профіль {target}" - -#: src/rc_formatters.py:937 -msgid "Edited their own profile" -msgstr "Відредагував свій профіль" - -#: src/rc_formatters.py:939 -#, python-brace-format -msgid "Cleared the {field} field" -msgstr "Очистив поле {field}" - -#: src/rc_formatters.py:941 -#, python-brace-format -msgid "{field} field changed to: {desc}" -msgstr "Поле {field} змінено на: {desc}" - -#: src/rc_formatters.py:946 -#, python-brace-format -msgid "Purged a comment on {target}'s profile" -msgstr "Вилучив коментар в профілі {target}" - -#: src/rc_formatters.py:948 -#, fuzzy -msgid "Purged a comment on their own profile" -msgstr "Відредагував коментар на своєму профілі" - -#: src/rc_formatters.py:956 -#, python-brace-format -msgid "Deleted a comment on {target}'s profile" -msgstr "Вилучив коментар на профілі {target}" - -#: src/rc_formatters.py:958 -#, fuzzy -msgid "Deleted a comment on their own profile" -msgstr "Відредагував коментар на своєму профілі" - -#: src/rc_formatters.py:962 -#, python-brace-format -msgid "Changed group membership for {target}" -msgstr "Змінено членство в групі для {target}" - -#: src/rc_formatters.py:966 -#, python-brace-format -msgid "{target} got autopromoted to a new usergroup" -msgstr "{target} автоматично переведений в нову групу користувачів" - -#: src/rc_formatters.py:981 -#, python-brace-format -msgid "Groups changed from {old_groups} to {new_groups}{reason}" -msgstr "Групи змінені з {old_groups} на {new_groups}{reason}" - -#: src/rc_formatters.py:985 -#, python-brace-format -msgid "Protected {target}" -msgstr "Захистив {target}" - -#: src/rc_formatters.py:991 -#, python-brace-format -msgid "Changed protection level for {article}" -msgstr "Змінив рівень захисту для {article}" - -#: src/rc_formatters.py:997 -#, python-brace-format -msgid "Removed protection from {article}" -msgstr "Зняв захист з {article}" - -#: src/rc_formatters.py:1001 -#, python-brace-format -msgid "Changed visibility of revision on page {article} " -msgid_plural "Changed visibility of {amount} revisions on page {article} " -msgstr[0] "Змінив видимість {amount} версії сторінки {article} " -msgstr[1] "Змінив видимість {amount} версій сторінки {article} " -msgstr[2] "Змінив видимість {amount} версій сторінки {article} " - -#: src/rc_formatters.py:1013 -#, python-brace-format -msgid "Imported {article} with {count} revision" -msgid_plural "Imported {article} with {count} revisions" -msgstr[0] "Імпортував {article} з {count} версією" -msgstr[1] "Імпортував {article} з {count} версіями" -msgstr[2] "Імпортував {article} з {count} версіями" - -#: src/rc_formatters.py:1018 -#, python-brace-format -msgid "Restored {article}" -msgstr "Відновив {article}" - -#: src/rc_formatters.py:1021 -msgid "Changed visibility of log events" -msgstr "Змінив видимість подій журналу" - -#: src/rc_formatters.py:1031 -#, fuzzy, python-brace-format -msgid "Imported {article} with {count} revision from \"{source}\"" -msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "Імпортував {article} з {count} версією" -msgstr[1] "Імпортував {article} з {count} версіями" -msgstr[2] "Імпортував {article} з {count} версіями" - -#: src/rc_formatters.py:1036 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "Відредагував фільтр зловживань під номером {number}" - -#: src/rc_formatters.py:1039 -#, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "Створив фільтр зловживань під номером {number}" - -#: src/rc_formatters.py:1042 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "Об'єднав історії версій {article} з {dest}" - -#: src/rc_formatters.py:1046 -msgid "Created account automatically" -msgstr "Обліковий запис був створений автоматично" - -#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 -msgid "Created account" -msgstr "Створено обліковий запис" - -#: src/rc_formatters.py:1052 -#, python-brace-format -msgid "Created account {article}" -msgstr "Створено обліковий запис {article}" - -#: src/rc_formatters.py:1055 -#, python-brace-format -msgid "Created account {article} and password was sent by email" -msgstr "" -"Створено обліковий запис {article} і і пароль був відправлений на електронну " -"пошту" - -#: src/rc_formatters.py:1061 -msgid "Added an entry to the interwiki table" -msgstr "Додав запис в таблицю інтервікі" - -#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "Префікс: {prefix}, веб-сайт: {website} | {desc}" - -#: src/rc_formatters.py:1067 -msgid "Edited an entry in interwiki table" -msgstr "Відредагував запис в таблиці інтервікі" - -#: src/rc_formatters.py:1073 -msgid "Deleted an entry in interwiki table" -msgstr "Вилучив запис в таблиці інтервікі" - -#: src/rc_formatters.py:1074 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "Префікс: {prefix} | {desc}" - -#: src/rc_formatters.py:1077 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "Змінив модель вмісту сторінки {article}" - -#: src/rc_formatters.py:1078 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "Модель змінена з {old} на {new}: {reason}" - -#: src/rc_formatters.py:1083 -#, python-brace-format -msgid "Created the page {article} using a non-default content model" -msgstr "" - -#: src/rc_formatters.py:1084 -#, fuzzy, python-brace-format -msgid "Created with model {new}: {reason}" -msgstr "Модель змінена з {old} на {new}: {reason}" - -#: src/rc_formatters.py:1087 +#: extensions/base/sprite.py:37 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Відредагував спрайт для {article}" -#: src/rc_formatters.py:1090 +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) відредагував спрайт для [{article}]({article_url})" + +#: extensions/base/sprite.py:60 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Створив таблицю спрайтів для {article}" -#: src/rc_formatters.py:1093 +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) створив таблицю спрайтів для [{article}]" +"({article_url})" + +#: extensions/base/sprite.py:79 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Відредагував фрагмент для {article}" -#: src/rc_formatters.py:1099 -#, fuzzy, python-brace-format -msgid "Created the Cargo table \"{table}\"" -msgstr "Створив тег \"{tag}\"" +#: extensions/base/sprite.py:86 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) відредагував фрагмент для [{article}]({article_url})" -#: src/rc_formatters.py:1103 -#, fuzzy, python-brace-format -msgid "Deleted the Cargo table \"{table}\"" -msgstr "Вилучив тег \"{tag}\"" +#~ msgid "Report this on the support server" +#~ msgstr "Повідомити про це на сервер підтримки" -#: src/rc_formatters.py:1110 -#, fuzzy, python-brace-format -msgid "Recreated the Cargo table \"{table}\"" -msgstr "Створив тег \"{tag}\"" +#, python-brace-format +#~ msgid "for {num} {translated_length}" +#~ msgstr "на {num}{translated_length}" -#: src/rc_formatters.py:1117 #, fuzzy, python-brace-format -msgid "Replaced the Cargo table \"{table}\"" -msgstr "Вилучив тег \"{tag}\"" +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) залишив [коментар]({comment}) на профілі {target}" -#: src/rc_formatters.py:1121 #, fuzzy, python-brace-format -msgid "Created the tag \"{tag}\"" -msgstr "Створив тег \"{tag}\"" +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) залишив [коментар]({comment}) на профілі {target}" -#: src/rc_formatters.py:1125 #, fuzzy, python-brace-format -msgid "Deleted the tag \"{tag}\"" -msgstr "Вилучив тег \"{tag}\"" +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) відповів на [коментар]({comment}) на профілі " +#~ "{target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) відповів на [коментар]({comment}) на профілі " +#~ "{target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " +#~ "{target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " +#~ "{target}" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +#~ msgstr "[{author}] ({author_url}) вилучив коментар в профілі {target}" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) purged a comment on their own profile" +#~ msgstr "[{author}] ({author_url}) вилучив коментар в профілі {target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " +#~ "{target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) відредагував [коментар]({comment}) на профілі " +#~ "{target}" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) відредагував {field} на профілі {target}. " +#~ "*({desc})*" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) відредагував {field} на профілі {target}. " +#~ "*({desc})*" + +#~ msgid "none" +#~ msgstr "нічого" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) completed deletion of translatable page " +#~ "[{article}]({article_url}){comment}" +#~ msgstr "" +#~ "[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" + +#~ msgid "No description provided" +#~ msgstr "Немає опису редагування" + +#, python-brace-format +#~ msgid "Left a comment on {target}'s profile" +#~ msgstr "Залишив коментар на профілі {target}" + +#~ msgid "Left a comment on their own profile" +#~ msgstr "Залишив коментар на своєму профілі" + +#, python-brace-format +#~ msgid "Replied to a comment on {target}'s profile" +#~ msgstr "Відповів на коментар на профілі {target}" + +#~ msgid "Replied to a comment on their own profile" +#~ msgstr "Відповів на коментар на своєму профілі" + +#, python-brace-format +#~ msgid "Edited a comment on {target}'s profile" +#~ msgstr "Відредагував коментар на профілі {target}" + +#~ msgid "Edited a comment on their own profile" +#~ msgstr "Відредагував коментар на своєму профілі" + +#, python-brace-format +#~ msgid "Edited {target}'s profile" +#~ msgstr "Відредагував профіль {target}" + +#~ msgid "Edited their own profile" +#~ msgstr "Відредагував свій профіль" + +#, python-brace-format +#~ msgid "Cleared the {field} field" +#~ msgstr "Очистив поле {field}" + +#, python-brace-format +#~ msgid "{field} field changed to: {desc}" +#~ msgstr "Поле {field} змінено на: {desc}" + +#, python-brace-format +#~ msgid "Purged a comment on {target}'s profile" +#~ msgstr "Вилучив коментар в профілі {target}" -#: src/rc_formatters.py:1127 #, fuzzy -msgid "Removed from" -msgstr "Видалено" +#~ msgid "Purged a comment on their own profile" +#~ msgstr "Відредагував коментар на своєму профілі" -#: src/rc_formatters.py:1127 -msgid "{} revision or log entry" -msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: src/rc_formatters.py:1131 -#, fuzzy, python-brace-format -msgid "Activated the tag \"{tag}\"" -msgstr "Активував тег \"{tag}\"" - -#: src/rc_formatters.py:1134 -#, fuzzy, python-brace-format -msgid "Deactivated the tag \"{tag}\"" -msgstr "Деактивував тег \"{tag}\"" - -#: src/rc_formatters.py:1137 -msgid "Changed wiki settings" -msgstr "" - -#: src/rc_formatters.py:1141 -#, fuzzy, python-brace-format -msgid "Deleted a \"{wiki}\" wiki" -msgstr "Вилучив тег \"{tag}\"" - -#: src/rc_formatters.py:1144 #, python-brace-format -msgid "Locked a \"{wiki}\" wiki" -msgstr "" +#~ msgid "Deleted a comment on {target}'s profile" +#~ msgstr "Вилучив коментар на профілі {target}" -#: src/rc_formatters.py:1147 -#, python-brace-format -msgid "Modified \"{namespace_name}\" namespace" -msgstr "" - -#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 -msgid "Wiki" -msgstr "" - -#: src/rc_formatters.py:1151 -#, python-brace-format -msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "" - -#: src/rc_formatters.py:1157 -#, python-brace-format -msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "" - -#: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format -msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Вилучив тег \"{tag}\"" - -#: src/rc_formatters.py:1163 -#, python-brace-format -msgid "Unlocked a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1166 -#, python-brace-format -msgid "Generated {file} dump" -msgstr "" - -#: src/rc_formatters.py:1169 -#, fuzzy, python-brace-format -msgid "Deleted {file} dump" -msgstr "Вилучив сторінку {article}" - -#: src/rc_formatters.py:1177 -#, python-brace-format -msgid "Marked \"{article}\" for translation" -msgstr "" - -#: src/rc_formatters.py:1180 -#, python-brace-format -msgid "Removed \"{article}\" from the translation system" -msgstr "" - -#: src/rc_formatters.py:1183 -#, python-brace-format -msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1186 -#, python-brace-format -msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1189 -#, python-brace-format -msgid "Completed deletion of translatable page \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1192 -#, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translatable page " -"\"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1195 -#, fuzzy, python-brace-format -msgid "Completed deletion of translation page \"{article}\"" -msgstr "Змінив видимість {amount} версії сторінки {article} " - -#: src/rc_formatters.py:1198 -#, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1201 -#, fuzzy, python-brace-format -msgid "Encouraged translation of \"{article}\"" -msgstr "Зняв захист з {article}" - -#: src/rc_formatters.py:1204 -#, python-brace-format -msgid "Discouraged translation of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1210 -#, python-brace-format -msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1212 -#, python-brace-format -msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1214 -#, fuzzy, python-brace-format -msgid "Removed priority languages from \"{article}\"" -msgstr "Зняв захист з {article}" - -#: src/rc_formatters.py:1217 -#, python-brace-format -msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1220 -#, python-brace-format -msgid "" -"Removed translatable page \"{article}\" from aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1227 -#, fuzzy, python-brace-format -msgid "Reviewed translation \"{article}\"" -msgstr "Зняв захист з {article}" - -#: src/rc_formatters.py:1230 -#, python-brace-format -msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1232 -msgid "Old state" -msgstr "" - -#: src/rc_formatters.py:1233 -msgid "New state" -msgstr "" - -#: src/rc_formatters.py:1242 -#, fuzzy, python-brace-format -msgid "Changed the language of \"{article}\"" -msgstr "Зняв захист з {article}" - -#: src/rc_formatters.py:1243 -msgid "Old language" -msgstr "" - -#: src/rc_formatters.py:1244 -msgid "New language" -msgstr "" - -#: src/rc_formatters.py:1248 -#, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: src/rc_formatters.py:1250 -#, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "" - -#: src/rc_formatters.py:1254 #, fuzzy -msgid "Action has been hidden by administration" -msgstr "Дія була прихована адміністрацією." +#~ msgid "Deleted a comment on their own profile" +#~ msgstr "Відредагував коментар на своєму профілі" -#: src/rc_formatters.py:1288 -msgid "**Added**: " -msgstr "**Додано**: " - -#: src/rc_formatters.py:1288 -msgid " and {} more\n" -msgstr " та ще {}\n" - -#: src/rc_formatters.py:1289 -msgid "**Removed**: " -msgstr "**Видалено**: " - -#: src/rc_formatters.py:1289 -msgid " and {} more" -msgstr " та ще {}" - -#: src/rc_formatters.py:1290 -msgid "Changed categories" -msgstr "Змінені категорії" +#, python-brace-format +#~ msgid "Groups changed from {old_groups} to {new_groups}{reason}" +#~ msgstr "Групи змінені з {old_groups} на {new_groups}{reason}" #, fuzzy, python-brace-format #~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" diff --git a/locale/uk/LC_MESSAGES/misc.po b/locale/uk/LC_MESSAGES/misc.po index e586903..c4a4eb6 100644 --- a/locale/uk/LC_MESSAGES/misc.po +++ b/locale/uk/LC_MESSAGES/misc.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-28 23:45+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-07-12 12:17+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -19,60 +19,60 @@ msgstr "" "%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "X-Generator: Poedit 2.3\n" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Location" msgstr "Місцезнаходження" -#: src/misc.py:45 +#: src/misc.py:44 msgid "About me" msgstr "Про мене" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Google link" msgstr "Посилання на Google" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Facebook link" msgstr "Посилання на Facebook" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitter link" msgstr "Посилання на Twitter" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Reddit link" msgstr "Посилання на Reddit" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitch link" msgstr "Посилання на Twitch" -#: src/misc.py:45 +#: src/misc.py:44 msgid "PSN link" msgstr "Посилання на PSN" -#: src/misc.py:45 +#: src/misc.py:44 msgid "VK link" msgstr "Посилання на VK" -#: src/misc.py:45 +#: src/misc.py:44 #, fuzzy msgid "XBL link" msgstr "Посилання на XVL" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Steam link" msgstr "Посилання на Steam" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Discord handle" msgstr "Посилання на Discord" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Battle.net handle" msgstr "Посилання на Battle.net" -#: src/misc.py:119 +#: src/misc.py:138 msgid "" "\n" "__And more__" @@ -80,10 +80,10 @@ msgstr "" "\n" "__І більше__" -#: src/misc.py:276 +#: src/misc.py:322 msgid "Unknown" msgstr "Невідомо" -#: src/misc.py:278 +#: src/misc.py:324 msgid "unknown" msgstr "невідомо" diff --git a/locale/uk/LC_MESSAGES/rcgcdw.po b/locale/uk/LC_MESSAGES/rcgcdw.po index 64d4932..21da254 100644 --- a/locale/uk/LC_MESSAGES/rcgcdw.po +++ b/locale/uk/LC_MESSAGES/rcgcdw.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-09-03 13:14+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -19,200 +19,191 @@ msgstr "" "%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "X-Generator: Poedit 2.4.1\n" -#: src/rcgcdw.py:115 src/rcgcdw.py:117 src/rcgcdw.py:119 src/rcgcdw.py:121 -#: src/rcgcdw.py:123 src/rcgcdw.py:125 src/rcgcdw.py:127 +#: src/rcgcdw.py:116 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "{value} (сер. {avg})" -#: src/rcgcdw.py:147 +#: src/rcgcdw.py:135 msgid "Daily overview" msgstr "Щоденний огляд" -#: src/rcgcdw.py:154 +#: src/rcgcdw.py:142 msgid "No activity" msgstr "Немає активності" -#: src/rcgcdw.py:178 +#: src/rcgcdw.py:166 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} дія)" msgstr[1] " ({} дії)" msgstr[2] " ({} дій)" -#: src/rcgcdw.py:180 +#: src/rcgcdw.py:168 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} редагування)" msgstr[1] " ({} редагування)" msgstr[2] " ({} редагувань)" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:173 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} дія)" msgstr[1] " UTC ({} дії)" msgstr[2] " UTC ({} дій)" -#: src/rcgcdw.py:187 src/rcgcdw.py:188 src/rcgcdw.py:192 +#: src/rcgcdw.py:175 src/rcgcdw.py:178 msgid "But nobody came" msgstr "Але ніхто не прийшов" -#: src/rcgcdw.py:195 +#: src/rcgcdw.py:182 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Найактивніший користувач" msgstr[1] "Найактивніші користувачі" msgstr[2] "Найактивніші користувачі" -#: src/rcgcdw.py:196 +#: src/rcgcdw.py:183 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "Найредаговішана стаття" msgstr[1] "Найредаговішані статті" msgstr[2] "Найредаговішані статті" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:184 msgid "Edits made" msgstr "Зроблено редагувань" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:184 msgid "New files" msgstr "Нових файлів" -#: src/rcgcdw.py:197 +#: src/rcgcdw.py:185 msgid "Admin actions" msgstr "Адміністративних дій" -#: src/rcgcdw.py:198 +#: src/rcgcdw.py:185 msgid "Bytes changed" msgstr "Змінено байтів" -#: src/rcgcdw.py:198 +#: src/rcgcdw.py:186 msgid "New articles" msgstr "Нових статей" -#: src/rcgcdw.py:199 +#: src/rcgcdw.py:186 msgid "Unique contributors" msgstr "Унікальних редакторів" -#: src/rcgcdw.py:200 +#: src/rcgcdw.py:187 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Найактивніша година" msgstr[1] "Найактивніший час" msgstr[2] "Найактивніший час" -#: src/rcgcdw.py:201 +#: src/rcgcdw.py:188 msgid "Day score" msgstr "Очок за день" -#: src/rcgcdw.py:243 -msgid "director" -msgstr "директор" +#: src/rcgcdw.py:214 +msgid "~~hidden~~" +msgstr "" -#: src/rcgcdw.py:243 -msgid "bot" -msgstr "бот" +#: src/rcgcdw.py:216 +msgid "No description provided" +msgstr "" -#: src/rcgcdw.py:243 -msgid "editor" -msgstr "редактор" +#: src/rcgcdw.py:219 +msgid "hidden" +msgstr "" -#: src/rcgcdw.py:243 -msgid "directors" -msgstr "директора" +#~ msgid "director" +#~ msgstr "директор" -#: src/rcgcdw.py:243 -msgid "sysop" -msgstr "администратор" +#~ msgid "bot" +#~ msgstr "бот" -#: src/rcgcdw.py:243 -msgid "bureaucrat" -msgstr "бюрократ" +#~ msgid "editor" +#~ msgstr "редактор" -#: src/rcgcdw.py:243 -msgid "reviewer" -msgstr "оглядач" +#~ msgid "directors" +#~ msgstr "директора" -#: src/rcgcdw.py:244 -msgid "autoreview" -msgstr "автоперегляд" +#~ msgid "sysop" +#~ msgstr "администратор" -#: src/rcgcdw.py:244 -msgid "autopatrol" -msgstr "автопатрульний" +#~ msgid "bureaucrat" +#~ msgstr "бюрократ" -#: src/rcgcdw.py:244 -msgid "wiki_guardian" -msgstr "зберігач_вікі" +#~ msgid "reviewer" +#~ msgstr "оглядач" -#: src/rcgcdw.py:244 -msgid "second" -msgid_plural "seconds" -msgstr[0] "секунда" -msgstr[1] "секунди" -msgstr[2] "секунд" +#~ msgid "autoreview" +#~ msgstr "автоперегляд" -#: src/rcgcdw.py:244 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "хвилина" -msgstr[1] "хвилини" -msgstr[2] "хвилин" +#~ msgid "autopatrol" +#~ msgstr "автопатрульний" -#: src/rcgcdw.py:244 -msgid "hour" -msgid_plural "hours" -msgstr[0] "година" -msgstr[1] "години" -msgstr[2] "годин" +#~ msgid "wiki_guardian" +#~ msgstr "зберігач_вікі" -#: src/rcgcdw.py:244 -msgid "day" -msgid_plural "days" -msgstr[0] "день" -msgstr[1] "дня" -msgstr[2] "днів" +#~ msgid "second" +#~ msgid_plural "seconds" +#~ msgstr[0] "секунда" +#~ msgstr[1] "секунди" +#~ msgstr[2] "секунд" -#: src/rcgcdw.py:244 -msgid "week" -msgid_plural "weeks" -msgstr[0] "тиждень" -msgstr[1] "тижні" -msgstr[2] "тижнів" +#~ msgid "minute" +#~ msgid_plural "minutes" +#~ msgstr[0] "хвилина" +#~ msgstr[1] "хвилини" +#~ msgstr[2] "хвилин" -#: src/rcgcdw.py:244 -msgid "month" -msgid_plural "months" -msgstr[0] "місяць" -msgstr[1] "місяці" -msgstr[2] "місяців" +#~ msgid "hour" +#~ msgid_plural "hours" +#~ msgstr[0] "година" +#~ msgstr[1] "години" +#~ msgstr[2] "годин" -#: src/rcgcdw.py:244 -msgid "year" -msgid_plural "years" -msgstr[0] "рік" -msgstr[1] "роки" -msgstr[2] "років" +#~ msgid "day" +#~ msgid_plural "days" +#~ msgstr[0] "день" +#~ msgstr[1] "дня" +#~ msgstr[2] "днів" -#: src/rcgcdw.py:244 -msgid "millennium" -msgid_plural "millennia" -msgstr[0] "тисячоліття" -msgstr[1] "тисячоліття" -msgstr[2] "тисячоліть" +#~ msgid "week" +#~ msgid_plural "weeks" +#~ msgstr[0] "тиждень" +#~ msgstr[1] "тижні" +#~ msgstr[2] "тижнів" -#: src/rcgcdw.py:244 -msgid "decade" -msgid_plural "decades" -msgstr[0] "десятиліття" -msgstr[1] "десятиліття" -msgstr[2] "десятиліть" +#~ msgid "month" +#~ msgid_plural "months" +#~ msgstr[0] "місяць" +#~ msgstr[1] "місяці" +#~ msgstr[2] "місяців" -#: src/rcgcdw.py:244 -msgid "century" -msgid_plural "centuries" -msgstr[0] "століття" -msgstr[1] "століття" -msgstr[2] "століть" +#~ msgid "year" +#~ msgid_plural "years" +#~ msgstr[0] "рік" +#~ msgstr[1] "роки" +#~ msgstr[2] "років" + +#~ msgid "millennium" +#~ msgid_plural "millennia" +#~ msgstr[0] "тисячоліття" +#~ msgstr[1] "тисячоліття" +#~ msgstr[2] "тисячоліть" + +#~ msgid "decade" +#~ msgid_plural "decades" +#~ msgstr[0] "десятиліття" +#~ msgstr[1] "десятиліття" +#~ msgstr[2] "десятиліть" + +#~ msgid "century" +#~ msgid_plural "centuries" +#~ msgstr[0] "століття" +#~ msgstr[1] "століття" +#~ msgstr[2] "століть" diff --git a/locale/uk/LC_MESSAGES/redaction.po b/locale/uk/LC_MESSAGES/redaction.po index 95f2d42..c3c2671 100644 --- a/locale/uk/LC_MESSAGES/redaction.po +++ b/locale/uk/LC_MESSAGES/redaction.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" +"POT-Creation-Date: 2021-05-18 13:48+0200\n" "PO-Revision-Date: 2020-11-18 15:19+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -#: src/discord/redaction.py:62 src/discord/redaction.py:65 -#: src/discord/redaction.py:70 +#: src/discord/redaction.py:77 src/discord/redaction.py:80 +#: src/discord/redaction.py:85 msgid "Removed" msgstr "" diff --git a/locale/zh-hans/LC_MESSAGES/formatters.po b/locale/zh-hans/LC_MESSAGES/formatters.po index f0e7d73..854016d 100644 --- a/locale/zh-hans/LC_MESSAGES/formatters.po +++ b/locale/zh-hans/LC_MESSAGES/formatters.po @@ -6,24 +6,9 @@ #, fuzzy msgid "" msgstr "" -"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" -"PO-Revision-Date: 2020-12-22 00:13+0000\n" -"Last-Translator: lakejason0 \n" -"Language-Team: Chinese (Simplified) \n" -"Language: zh-hans\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -"Project-Id-Version: RcGcDw\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-12-29 15:21+0000\n" "Last-Translator: lakejason0 \n" "Language-Team: Chinese (Simplified) ) in " @@ -56,7 +423,7 @@ msgstr "" "[{author}]({author_url}) 创建了 [{title}](<{url}f/p/{threadId}>) 于 " "{forumName}" -#: src/discussion_formatters.py:42 +#: extensions/base/discussions.py:217 #, python-brace-format msgid "" "[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " @@ -65,7 +432,7 @@ msgstr "" "[{author}]({author_url}) 创建了一个投票 [{title}](<{url}f/p/{threadId}>) 于 " "{forumName}" -#: src/discussion_formatters.py:45 +#: extensions/base/discussions.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " @@ -74,7 +441,7 @@ msgstr "" "[{author}]({author_url}) 创建了一份问卷 [{title}](<{url}f/p/{threadId}>) 于 " "{forumName}" -#: src/discussion_formatters.py:54 +#: extensions/base/discussions.py:234 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " @@ -83,7 +450,17 @@ msgstr "" "[{author}]({author_url}) 创建了一条[回复](<{url}f/p/{threadId}/r/{postId}>) " "至 [{title}](<{url}f/p/{threadId}>) 于 {forumName}" -#: src/discussion_formatters.py:61 +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "创建了 \"{title}\" 于 {user} 的信息墙" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "回复至 \"{title}\" 于 {user} 的信息墙" + +#: extensions/base/discussions.py:312 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" @@ -94,7 +471,7 @@ msgstr "" "{user_wall}?threadId={threadId}>) 于 [{user}的信息墙](<{url}wiki/" "Message_Wall:{user_wall}>)" -#: src/discussion_formatters.py:64 +#: extensions/base/discussions.py:318 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" @@ -107,7 +484,17 @@ msgstr "" "Message_Wall:{user_wall}?threadId={threadId}>) 于 [{user}的信息墙](<{url}" "wiki/Message_Wall:{user_wall}>)" -#: src/discussion_formatters.py:72 +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "评论于 {article}" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "回复至一条评论于 {article}" + +#: extensions/base/discussions.py:359 #, python-brace-format msgid "" "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " @@ -116,7 +503,7 @@ msgstr "" "[{author}]({author_url}) 创建了一条[评论](<{url}?commentId={commentId}>) 于 " "[{article}](<{url}>)" -#: src/discussion_formatters.py:78 +#: extensions/base/discussions.py:365 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" @@ -127,157 +514,224 @@ msgstr "" "&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) 于 " "[{article}](<{url}>)" -#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "更改了wiki设置" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) 更改了wiki设置{reason}" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "删除了wiki \"{wiki}\"" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "未知" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) 删除了wiki *{wiki_name}* {comment}" + +#: extensions/base/managewiki.py:80 +#, fuzzy, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "修改了用户组 \"{usergroup_name}\"" + +#: extensions/base/managewiki.py:89 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "[{author}]({author_url}) 修改了用户组 *{group_name}*{comment}" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "锁定了wiki \"{wiki}\"" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) 锁定了wiki *{wiki_name}* {comment}" + +#: extensions/base/managewiki.py:124 +#, fuzzy, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "修改了命名空间 \"{namespace_name}\"" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "Wiki" + +#: extensions/base/managewiki.py:134 #, fuzzy, python-brace-format msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" msgstr "" -"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" -"未知事件 `{event}` 由 [{author}]({author_url}) 发出,请在[支持服务器]" -"(<{support}>)中报告。\n" -"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -"未知事件 `{event}`,作者为 [{author}]({author_url}),请在[支持服务器]" -"(<{support}>)上报告。" +"[{author}]({author_url}) 修改了命名空间 *{namespace_name}* 于 *{wiki_name}* " +"{comment}" -#: src/discussion_formatters.py:123 +#: extensions/base/managewiki.py:147 #, python-brace-format -msgid "Created \"{title}\"" -msgstr "创建了 \"{title}\"" +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "删除了命名空间 \"{namespace_name}\"" -#: src/discussion_formatters.py:127 +#: extensions/base/managewiki.py:158 #, python-brace-format -msgid "Created a poll \"{title}\"" -msgstr "创建了投票 \"{title}\"" - -#: src/discussion_formatters.py:134 -msgid "Option {}" -msgstr "选项 {}" - -#: src/discussion_formatters.py:135 -#, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "__[查看图片]({image_url})__" - -#: src/discussion_formatters.py:139 -#, python-brace-format -msgid "Created a quiz \"{title}\"" -msgstr "创建了问卷 \"{title}\"" - -#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 -#: src/rc_formatters.py:1283 -msgid "Tags" -msgstr "标签" - -#: src/discussion_formatters.py:155 -msgid "{} tags" -msgstr "{} 个标签" - -#: src/discussion_formatters.py:160 -#, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "回复至 \"{title}\"" - -#: src/discussion_formatters.py:169 -#, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "创建了 \"{title}\" 于 {user} 的信息墙" - -#: src/discussion_formatters.py:173 -#, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "回复至 \"{title}\" 于 {user} 的信息墙" - -#: src/discussion_formatters.py:180 -#, python-brace-format -msgid "Commented on {article}" -msgstr "评论于 {article}" - -#: src/discussion_formatters.py:184 -#, python-brace-format -msgid "Replied to a comment on {article}" -msgstr "回复至一条评论于 {article}" - -#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 -#, python-brace-format -msgid "Unknown event `{event}`" -msgstr "未知事件 `{event}`" - -#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 -#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 -#, fuzzy -msgid "Report this on the support server" +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" msgstr "" -"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" -"在支持服务器上报告\n" -"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -"在支持服务器上报告此错误" +"[{author}]({author_url}) 删除了命名空间 *{namespace_name}* 于 *{wiki_name}* " +"{comment}" -#: src/rc_formatters.py:28 +#: extensions/base/managewiki.py:173 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "修改了用户组 \"{usergroup_name}\"" + +#: extensions/base/managewiki.py:182 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "[{author}]({author_url}) 修改了用户组 *{group_name}*{comment}" + +#: extensions/base/managewiki.py:195 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "删除了wiki \"{wiki}\"" + +#: extensions/base/managewiki.py:203 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) 删除了wiki *{wiki_name}* {comment}" + +#: extensions/base/managewiki.py:217 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "解锁了wiki \"{wiki}\"" + +#: extensions/base/managewiki.py:225 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) 解锁了wiki *{wiki_name}* {comment}" + +#: extensions/base/datadump.py:36 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "生成了转储 {file}" + +#: extensions/base/datadump.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "[{author}]({author_url}) 生成了 *{file}* 转储{comment}" + +#: extensions/base/datadump.py:58 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "删除了转储 {file}" + +#: extensions/base/datadump.py:67 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "[{author}]({author_url}) 删除了 *{file}* 转储{comment}" + +#: extensions/base/abusefilter.py:29 msgid "None" msgstr "无" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Warning issued" msgstr "已发出警告" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Blocked user**" msgstr "**已封禁用户**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Tagged the edit" msgstr "已标记编辑" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Disallowed the action" msgstr "已阻止操作" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**IP range blocked**" msgstr "**已封禁IP区段**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Throttled actions" msgstr "已对操作进行频率控制" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Removed autoconfirmed group" msgstr "已撤销自动确认用户组" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Removed from privileged groups**" msgstr "**已移除用户组**" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Edit" msgstr "编辑" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Upload" msgstr "上传" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Move" msgstr "移动" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Stash upload" msgstr "隐藏上传" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Deletion" msgstr "删除" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Account creation" msgstr "账户创建" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Auto account creation" msgstr "自动账户创建" -#: src/rc_formatters.py:83 +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "{user} 触发了 \"{abuse_filter}\"" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "执行了" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "采取的操作" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "标题" + +#: extensions/base/abusefilter.py:66 #, python-brace-format msgid "" "[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " @@ -286,19 +740,83 @@ msgstr "" "[{author}]({author_url}) 触发了 *{abuse_filter}*,执行操作 \"{action}\" 于 " "*[{target}]({target_url})* - 已采取的行动: {result}。" -#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 -#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 -#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 -#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 -#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 -#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 -#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 -#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 -#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 -msgid "Unknown" -msgstr "未知" +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "编辑了滥用过滤器{number}" -#: src/rc_formatters.py:116 +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) 更改了滥用过滤器[number {number}]({filter_url})" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "创建了滥用过滤器{number}" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) 创建了滥用过滤器[number {number}]({filter_url})" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "(新!) " + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "小" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "机" + +#: extensions/base/mediawiki.py:112 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" @@ -307,7 +825,7 @@ msgstr "" "[{author}]({author_url}) 编辑了 [{article}]({edit_link}){comment}{bold}" "({sign}{edit_size}){bold}" -#: src/rc_formatters.py:118 +#: extensions/base/mediawiki.py:117 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" @@ -316,19 +834,55 @@ msgstr "" "[{author}]({author_url}) 创建了 [{article}]({edit_link}){comment}{bold}" "({sign}{edit_size}){bold}" -#: src/rc_formatters.py:121 -#, python-brace-format -msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" -msgstr "[{author}]({author_url}) 上传了 [{file}]({file_link}){comment}" +#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +msgid "Options" +msgstr "选项" -#: src/rc_formatters.py:128 +#: extensions/base/mediawiki.py:191 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([预览]({link}) | [撤销]({undolink}))" + +#: extensions/base/mediawiki.py:196 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "上传了 {name} 的新版本" + +#: extensions/base/mediawiki.py:198 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "回退了 {name} 的一个版本" + +#: extensions/base/mediawiki.py:200 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "上传了 {name}" + +#: extensions/base/mediawiki.py:209 +msgid "**No license!**" +msgstr "**没有许可协议!**" + +#: extensions/base/mediawiki.py:224 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"许可协议:{}" + +#: extensions/base/mediawiki.py:226 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([预览]({link}))" + +#: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" msgstr "" "[{author}]({author_url}) 回退了 [{file}]({file_link}) 的一个版本 {comment}" -#: src/rc_formatters.py:132 +#: extensions/base/mediawiki.py:248 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -336,12 +890,27 @@ msgid "" msgstr "" "[{author}]({author_url}) 上传了 [{file}]({file_link}) 的一个新版本 {comment}" -#: src/rc_formatters.py:135 +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) 上传了 [{file}]({file_link}){comment}" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "删除了页面 {article}" + +#: extensions/base/mediawiki.py:283 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) 删除了 [{page}]({page_link}){comment}" -#: src/rc_formatters.py:141 +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "通过覆盖删除了重定向 {article}" + +#: extensions/base/mediawiki.py:308 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -349,231 +918,32 @@ msgid "" msgstr "" "[{author}]({author_url}) 通过覆盖 [{page}]({page_link}) 删除重定向 {comment}" -#: src/rc_formatters.py:147 src/rc_formatters.py:152 -msgid "without making a redirect" -msgstr "不留重定向" - -#: src/rc_formatters.py:147 src/rc_formatters.py:153 -msgid "with a redirect" -msgstr "创建重定向" - -#: src/rc_formatters.py:148 +#: extensions/base/mediawiki.py:322 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" -msgstr "" -"[{author}]({author_url}) 移动 {redirect}*{article}* 至 [{target}]" -"({target_url}),{made_a_redirect}{comment}" +msgid "Restored {article}" +msgstr "还原了 {article}" -#: src/rc_formatters.py:154 +#: extensions/base/mediawiki.py:331 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -"[{target}]({target_url}) {made_a_redirect}{comment}" -msgstr "" -"[{author}]({author_url}) 移动 {redirect}*{article}* 至 [{target}]" -"({target_url}) 覆盖重定向,{made_a_redirect}{comment}" +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "[{author}]({author_url}) 还原了 [{article}]({article_url}){comment}" -#: src/rc_formatters.py:159 +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "更改了日志事件的可见性" + +#: extensions/base/mediawiki.py:356 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) 将保护设置从 {redirect}*{article}* 移动到了 " -"[{target}]({target_url}){comment}" +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "[{author}]({author_url}) 更改了日志事件的可视性{comment}" -#: src/rc_formatters.py:170 src/rc_formatters.py:855 -msgid "for infinity and beyond" -msgstr "时长为无限期" - -#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#: extensions/base/mediawiki.py:370 #, python-brace-format -msgid "for {num} {translated_length}" -msgstr "时长为{num}{translated_length}" +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "更改了页面 {article} 的 {amount} 个修订版本的可见性 " -#: src/rc_formatters.py:185 src/rc_formatters.py:867 -msgid "until {}" -msgstr "直到{}" - -#: src/rc_formatters.py:189 -msgid " on pages: " -msgstr " 于页面: " - -#: src/rc_formatters.py:196 src/rc_formatters.py:881 -msgid " and namespaces: " -msgstr " 和命名空间: " - -#: src/rc_formatters.py:198 -msgid " on namespaces: " -msgstr " 于命名空间: " - -#: src/rc_formatters.py:210 -#, python-brace-format -msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" -msgstr "" -"[{author}]({author_url}) 封禁了 [{user}]({user_url}),{time}" -"{restriction_desc}{comment}" - -#: src/rc_formatters.py:214 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) 更改了 [{blocked_user}]({user_url}) 的封禁设置 " -"{comment}" - -#: src/rc_formatters.py:218 -#, python-brace-format -msgid "" -"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" -msgstr "[{author}]({author_url}) 解封了 [{blocked_user}]({user_url}){comment}" - -#: src/rc_formatters.py:223 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) 在 {target} 的资料页上留下了一条[评论]({comment})" - -#: src/rc_formatters.py:225 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on their own profile" -msgstr "[{author}]({author_url}) 在自己的资料页上留下了一条[评论]({comment})" - -#: src/rc_formatters.py:231 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -"profile" -msgstr "" -"[{author}]({author_url}) 在 {target} 的资料页上回复了一条[评论]({comment})" - -#: src/rc_formatters.py:237 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on their own " -"profile" -msgstr "[{author}]({author_url}) 在自己的资料页上回复了一条[评论]({comment})" - -#: src/rc_formatters.py:245 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) 在 {target} 的资料页上编辑了一条[评论]({comment})" - -#: src/rc_formatters.py:251 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" -msgstr "[{author}]({author_url}) 在自己的资料页上编辑了一条[评论]({comment})" - -#: src/rc_formatters.py:257 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "[{author}]({author_url}) 在 {target} 的资料页上永久删除了一条评论" - -#: src/rc_formatters.py:259 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "[{author}]({author_url}) 在自己的资料页上永久删除了一条评论" - -#: src/rc_formatters.py:267 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" -msgstr "" -"[{author}]({author_url}) 在 {target} 的资料页上删除了一条[评论]({comment})" - -#: src/rc_formatters.py:269 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" -msgstr "[{author}]({author_url}) 在自己的资料页上删除了一条[评论]({comment})" - -#: src/rc_formatters.py:274 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) 在 [{target}]({target_url}) 的资料页上编辑了 " -"{field} 栏位。*({desc})*" - -#: src/rc_formatters.py:281 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -"profile. *({desc})*" -msgstr "" -"[{author}]({author_url}) 在[自己]({target_url})的资料页上编辑了 {field} 栏" -"位。*({desc})*" - -#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 -#: src/rc_formatters.py:979 -msgid "none" -msgstr "无" - -#: src/rc_formatters.py:301 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) from {old_groups} to {new_groups}{comment}" -msgstr "" -"[{author}]({author_url}) 已将 [{target}]({target_url}) 的用户组从 " -"{old_groups} 更改为 {new_groups}{comment}" - -#: src/rc_formatters.py:303 -#, python-brace-format -msgid "" -"{author} autopromoted [{target}]({target_url}) from {old_groups} to " -"{new_groups}{comment}" -msgstr "" -"{author} 自动提升了 [{target}]({target_url}) 的用户组,从 {old_groups} 更改" -"为 {new_groups}{comment}" - -#: src/rc_formatters.py:304 src/rc_formatters.py:965 -msgid "System" -msgstr "系统" - -#: src/rc_formatters.py:309 -#, python-brace-format -msgid "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) 保护了 [{article}]({article_url}),设置为:" -"{settings}{comment}" - -#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 -#: src/rc_formatters.py:993 -msgid " [cascading]" -msgstr " [级联]" - -#: src/rc_formatters.py:316 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) 将 [{article}]({article_url}) 的保护设置更改为:" -"{settings}{comment}" - -#: src/rc_formatters.py:323 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) 移除了 [{article}]({article_url}) 的保护 {comment}" - -#: src/rc_formatters.py:327 +#: extensions/base/mediawiki.py:383 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -585,7 +955,225 @@ msgstr[0] "" "[{author}]({author_url}) 更改了[{article}]({article_url}) 的 {amount} 个版本" "的可见性{comment}" -#: src/rc_formatters.py:340 +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "未创建重定向" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "创建了重定向" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "将 {redirect}{article} 移动到了 {target}" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "不留重定向" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "创建重定向" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) 移动 {redirect}*{article}* 至 [{target}]" +"({target_url}),{made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "将 {redirect}{article} 移动到了 {title},不留重定向" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) 移动 {redirect}*{article}* 至 [{target}]" +"({target_url}) 覆盖重定向,{made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "将保护设置从 {redirect}{article} 移动到了 {title}" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) 将保护设置从 {redirect}*{article}* 移动到了 " +"[{target}]({target_url}){comment}" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "保护了 {target}" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr " [级联]" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) 保护了 [{article}]({article_url}),设置为:" +"{settings}{comment}" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "更改了 {article} 的保护等级" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) 将 [{article}]({article_url}) 的保护设置更改为:" +"{settings}{comment}" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "移除了 {article} 的保护" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"[{author}]({author_url}) 移除了 [{article}]({article_url}) 的保护 {comment}" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "时长为无限期" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:610 +msgid "Blocked from editing the following pages: " +msgstr "被阻止编辑下列页面: " + +#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr " 和命名空间: " + +#: extensions/base/mediawiki.py:619 +msgid "Blocked from editing pages on following namespaces: " +msgstr "被阻止编辑下列命名空间的页面: " + +#: extensions/base/mediawiki.py:630 +msgid "Partial block details" +msgstr "部分封禁详情" + +#: extensions/base/mediawiki.py:633 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:635 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "封禁 {blocked_user} {time}" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr " 于页面: " + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr " 于命名空间: " + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) 封禁了 [{user}]({user_url}),{time}" +"{restriction_desc}{comment}" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "更改了 {blocked_user} 的封禁设置" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) 更改了 [{blocked_user}]({user_url}) 的封禁设置 " +"{comment}" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "解封 {blocked_user}" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "[{author}]({author_url}) 解封了 [{blocked_user}]({user_url}){comment}" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "操作已被管理员隐藏" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "一项操作已被管理员隐藏。" + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "导入了含有 {count} 个修订版本的 {article}" + +#: extensions/base/mediawiki.py:772 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -597,17 +1185,13 @@ msgstr[0] "" "[{author}]({author_url}) 导入了 [{article}]({article_url}) 的 {count} 个修订" "版本{comment}" -#: src/rc_formatters.py:345 +#: extensions/base/mediawiki.py:788 #, python-brace-format -msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "[{author}]({author_url}) 还原了 [{article}]({article_url}){comment}" +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "导入了来自 \"{source}\" 的含有 {count} 个修订版本的 {article}" -#: src/rc_formatters.py:347 -#, python-brace-format -msgid "[{author}]({author_url}) changed visibility of log events{comment}" -msgstr "[{author}]({author_url}) 更改了日志事件的可视性{comment}" - -#: src/rc_formatters.py:359 +#: extensions/base/mediawiki.py:803 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -619,21 +1203,56 @@ msgstr[0] "" "[{author}]({author_url}) 从 [{source}]({source_url}) 导入了 [{article}]" "({article_url}) 的 {count} 个修订版本{comment}" -#: src/rc_formatters.py:364 +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:836 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "更改了 {target} 的用户组" + +#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +msgid "System" +msgstr "系统" + +#: extensions/base/mediawiki.py:840 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} 被自动地提升到新用户组" + +#: extensions/base/mediawiki.py:846 #, python-brace-format msgid "" -"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +"{reason}\n" +"{added}{linebreak}{removed}" msgstr "" -"[{author}]({author_url}) 更改了滥用过滤器[number {number}]({filter_url})" -#: src/rc_formatters.py:368 -#, python-brace-format +#: extensions/base/mediawiki.py:860 +#, fuzzy, python-brace-format msgid "" -"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) {added}{comma} {removed}{comment}" msgstr "" -"[{author}]({author_url}) 创建了滥用过滤器[number {number}]({filter_url})" +"[{author}]({author_url}) 已将 [{target}]({target_url}) 的用户组从 " +"{old_groups} 更改为 {new_groups}{comment}" -#: src/rc_formatters.py:372 +#: extensions/base/mediawiki.py:864 +#, fuzzy, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"{comment}" +msgstr "" +"{author} 自动提升了 [{target}]({target_url}) 的用户组,从 {old_groups} 更改" +"为 {new_groups}{comment}" + +#: extensions/base/mediawiki.py:877 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "将 {article} 的修订版本历史合并到了 {dest}" + +#: extensions/base/mediawiki.py:891 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -642,17 +1261,30 @@ msgstr "" "[{author}]({author_url}) 将 [{article}]({article_url}) 的修订版本历史合并到 " "[{dest}]({dest_url}){comment}" -#: src/rc_formatters.py:375 +#: extensions/base/mediawiki.py:905 +msgid "Created account automatically" +msgstr "自动创建账户" + +#: extensions/base/mediawiki.py:912 #, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "用户账户 [{author}]({author_url}) 被自动创建" -#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +msgid "Created account" +msgstr "创建了账户" + +#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 #, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "用户账户 [{author}]({author_url}) 被创建" -#: src/rc_formatters.py:380 +#: extensions/base/mediawiki.py:944 +#, python-brace-format +msgid "Created account {article}" +msgstr "创建了账户 {article}" + +#: extensions/base/mediawiki.py:953 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" @@ -660,7 +1292,12 @@ msgid "" msgstr "" "用户账户 [{article}]({article_url}) 被 [{author}]({author_url}) 创建{comment}" -#: src/rc_formatters.py:383 +#: extensions/base/mediawiki.py:966 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "创建了账户 {article} 且密码已通过电子邮件发送" + +#: extensions/base/mediawiki.py:977 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " @@ -669,7 +1306,16 @@ msgstr "" "用户账户 [{article}]({article_url}) 被 [{author}]({author_url}) 创建,密码已" "通过电子邮件发送{comment}" -#: src/rc_formatters.py:388 +#: extensions/base/mediawiki.py:1009 +msgid "Added an entry to the interwiki table" +msgstr "向跨wiki表添加了跨wiki前缀" + +#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "前缀:{prefix},网站:{website} | {desc}" + +#: extensions/base/mediawiki.py:1022 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -678,7 +1324,11 @@ msgstr "" "[{author}]({author_url}) 向[跨wiki表]({table_url})中加入了指向 {website} 的," "前缀为 {prefix} 的跨wiki前缀" -#: src/rc_formatters.py:394 +#: extensions/base/mediawiki.py:1036 +msgid "Edited an entry in interwiki table" +msgstr "编辑了跨wiki表的跨wiki前缀" + +#: extensions/base/mediawiki.py:1049 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -687,14 +1337,34 @@ msgstr "" "[{author}]({author_url})修改了[跨wiki表]({table_url}) 中指向 {website} 的,前" "缀为 {prefix} 的跨wiki前缀" -#: src/rc_formatters.py:400 +#: extensions/base/mediawiki.py:1063 +msgid "Deleted an entry in interwiki table" +msgstr "删除了跨wiki表的跨wiki前缀" + +#: extensions/base/mediawiki.py:1064 #, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "前缀:{prefix} | {desc}" + +#: extensions/base/mediawiki.py:1074 +#, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" msgstr "" "[{author}]({author_url})删除了[跨wiki表]({table_url})中的一个跨wiki前缀" -#: src/rc_formatters.py:403 +#: extensions/base/mediawiki.py:1091 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "更改了页面 {article} 的内容模型" + +#: extensions/base/mediawiki.py:1093 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "内容模型从 {old} 更改为 {new}:{reason}" + +#: extensions/base/mediawiki.py:1105 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -703,7 +1373,17 @@ msgstr "" "[{author}]({author_url}) 将页面 [{article}]({article_url}) 的内容模型从 " "{old} 更改为 {new}{comment}" -#: src/rc_formatters.py:407 +#: extensions/base/mediawiki.py:1120 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "使用非默认内容模型创建了页面 {article}" + +#: extensions/base/mediawiki.py:1122 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "使用内容模型 {new} 创建:{reason}" + +#: extensions/base/mediawiki.py:1133 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " @@ -712,60 +1392,39 @@ msgstr "" "[{author}]({author_url}) 创建了页面 [{article}]({article_url}),使用了非默认" "的内容模型 {new}{comment}" -#: src/rc_formatters.py:410 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" -msgstr "" -"[{author}]({author_url}) 编辑了 [{article}]({article_url}) 的 Sprite 图" +#: extensions/base/mediawiki.py:1148 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "创建了标签 \"{tag}\"" -#: src/rc_formatters.py:413 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" -msgstr "" -"[{author}]({author_url}) 创建了 [{article}]({article_url}) 的 Sprite 表" - -#: src/rc_formatters.py:416 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the slice for [{article}]({article_url})" -msgstr "[{author}]({author_url}) 编辑了 [{article}]({article_url}) 的 Slice" - -#: src/rc_formatters.py:421 -#, python-brace-format -msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) 创建了 Cargo 表 \"{table}\"" - -#: src/rc_formatters.py:423 -#, python-brace-format -msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) 删除了 Cargo 表 \"{table}\"" - -#: src/rc_formatters.py:428 -#, python-brace-format -msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) 重新创建了 Cargo 表 \"{table}\"" - -#: src/rc_formatters.py:433 -#, python-brace-format -msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) 替换了 Cargo 表 \"{table}\"" - -#: src/rc_formatters.py:436 +#: extensions/base/mediawiki.py:1158 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) 创建了一个[标签]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:441 +#: extensions/base/mediawiki.py:1180 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "删除了标签 \"{tag}\"" + +#: extensions/base/mediawiki.py:1182 +#, fuzzy +msgid "Removed from" +msgstr "移除了" + +#: extensions/base/mediawiki.py:1182 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" + +#: extensions/base/mediawiki.py:1194 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) 删除了一个[标签]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:443 +#: extensions/base/mediawiki.py:1204 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -777,249 +1436,40 @@ msgstr[0] "" "[{author}]({author_url}) 导入了 [{article}]({article_url}) 的 {count} 个修订" "版本{comment}" -#: src/rc_formatters.py:449 +#: extensions/base/mediawiki.py:1221 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "激活了标签 \"{tag}\"" + +#: extensions/base/mediawiki.py:1230 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) 激活了一个[标签]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:452 +#: extensions/base/mediawiki.py:1249 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "取消激活了标签 \"{tag}\"" + +#: extensions/base/mediawiki.py:1258 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) 取消激活了一个[标签]({tag_url}) \"{tag}\"" -#: src/rc_formatters.py:454 +#: extensions/base/mediawiki.py:1278 #, python-brace-format -msgid "[{author}]({author_url}) changed wiki settings{reason}" -msgstr "[{author}]({author_url}) 更改了wiki设置{reason}" +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "将有 {edits} 次编辑的用户 \"{old_name}\" 重命名为 \"{new_name}\"" -#: src/rc_formatters.py:456 +#: extensions/base/mediawiki.py:1283 #, python-brace-format -msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) 删除了wiki *{wiki_name}* {comment}" +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "将用户 \"{old_name}\" 重命名为 \"{new_name}\"" -#: src/rc_formatters.py:459 -#, python-brace-format -msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) 锁定了wiki *{wiki_name}* {comment}" - -#: src/rc_formatters.py:462 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) modified namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) 修改了命名空间 *{namespace_name}* 于 *{wiki_name}* " -"{comment}" - -#: src/rc_formatters.py:467 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" -"[{author}]({author_url}) 删除了命名空间 *{namespace_name}* 于 *{wiki_name}* " -"{comment}" - -#: src/rc_formatters.py:473 -#, python-brace-format -msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "[{author}]({author_url}) 修改了用户组 *{group_name}*{comment}" - -#: src/rc_formatters.py:477 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) 删除了wiki *{wiki_name}* {comment}" - -#: src/rc_formatters.py:481 -#, python-brace-format -msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) 解锁了wiki *{wiki_name}* {comment}" - -#: src/rc_formatters.py:486 -#, python-brace-format -msgid "[{author}]({author_url}) generated *{file}* dump{comment}" -msgstr "[{author}]({author_url}) 生成了 *{file}* 转储{comment}" - -#: src/rc_formatters.py:491 -#, python-brace-format -msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" -msgstr "[{author}]({author_url}) 删除了 *{file}* 转储{comment}" - -#: src/rc_formatters.py:502 -#, python-brace-format -msgid "" -"[{author}]({author_url}) marked [{article}]({article_url}) for " -"translation{comment}" -msgstr "" -"[{author}]({author_url}) 标记了 [{article}]({article_url}) 进行翻译 {comment}" - -#: src/rc_formatters.py:509 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed [{article}]({article_url}) from the " -"translation system{comment}" -msgstr "" -"[{author}]({author_url}) 从翻译系统中移除了 [{article}]({article_url})" -"{comment}" - -#: src/rc_formatters.py:516 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed moving translation pages from *{article}* " -"to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) 已完成将翻译页面 *{article}* 移动到 [{target}]" -"({target_url}){comment}" - -#: src/rc_formatters.py:524 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encountered a problem while moving [{article}]" -"({article_url}) to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) 在移动 [{article}]({article_url}) 至 [{target}]" -"({target_url}) 时遇到了问题{comment}" - -#: src/rc_formatters.py:532 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translatable page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) 完成了对可翻译页面 [{article}]({article_url}) 的删除" -"{comment}" - -#: src/rc_formatters.py:540 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translatable page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) 无法删除 [{article}]({article_url}),其属于可翻译页" -"面 [{target}]({target_url}){comment}" - -#: src/rc_formatters.py:548 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translation page [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) 已完成删除翻译页面 [{article}]({article_url})" -"{comment}" - -#: src/rc_formatters.py:556 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translation page [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) 无法删除 [{article}]({article_url}),其属于翻译页面 " -"[{target}]({target_url}){comment}" - -#: src/rc_formatters.py:564 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) 支持了 [{article}]({article_url}) 的翻译 {comment}" - -#: src/rc_formatters.py:571 -#, python-brace-format -msgid "" -"[{author}]({author_url}) discouraged translation of [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) 不支持 [{article}]({article_url}) 的翻译{comment}" - -#: src/rc_formatters.py:581 -#, python-brace-format -msgid "" -"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " -"`{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) 将 [{article}]({article_url}) 的语言限制为 " -"`{languages}`{comment}" - -#: src/rc_formatters.py:587 -#, python-brace-format -msgid "" -"[{author}]({author_url}) set the priority languages for [{article}]" -"({article_url}) to `{languages}`{comment}" -msgstr "" -"[{author}]({author_url}) 将 [{article}]({article_url}) 的优先语言设置为 " -"`{languages}`{comment}" - -#: src/rc_formatters.py:593 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed priority languages from [{article}]" -"({article_url}){comment}" -msgstr "" -"[{author}]({author_url}) 移除了 [{article}]({article_url}) 的优先语言 " -"{comment}" - -#: src/rc_formatters.py:600 -#, python-brace-format -msgid "" -"[{author}]({author_url}) added translatable page [{article}]({article_url}) " -"to aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) 将可翻译页面 [{article}]({article_url}) 加入了聚合消" -"息组 \"{group}\"{comment}" - -#: src/rc_formatters.py:607 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed translatable page [{article}]" -"({article_url}) from aggregate group \"{group}\"{comment}" -msgstr "" -"[{author}]({author_url}) 将可翻译页面 [{article}]({article_url}) 从聚合消息" -"组 \"{group}\" 中移除{comment}" - -#: src/rc_formatters.py:619 -#, python-brace-format -msgid "" -"[{author}]({author_url}) reviewed translation [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) 复核了翻译 [{article}]({article_url}){comment}" - -#: src/rc_formatters.py:627 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) 将 [{article}]({article_url}) 的 `{language}` 翻译的" -"状态从 `{old_state}` 更改为 `{new_state}`{comment}" - -#: src/rc_formatters.py:634 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) to `{new_state}`{comment}" -msgstr "" -"[{author}]({author_url}) 更改了 [{article}]({article_url}) 的 `{language}` 翻" -"译的状态为 `{new_state}`{comment}" - -#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 -#: src/rc_formatters.py:1241 -msgid "(default)" -msgstr "(默认)" - -#: src/rc_formatters.py:647 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the language of [{article}]({article_url}) " -"from {old_lang} to {new_lang}{comment}" -msgstr "" -"[{author}]({author_url}) 更改了 [{article}]({article_url}) 的语言,从 " -"{old_lang} 更改为 {new_lang}{comment}" - -#: src/rc_formatters.py:656 +#: extensions/base/mediawiki.py:1298 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " @@ -1031,7 +1481,7 @@ msgstr[0] "" "[{author}]({author_url}) 将编辑数为 {edits} 的用户 *{old_name}* 重命名为 " "[{new_name}]({link}) {comment}" -#: src/rc_formatters.py:661 +#: extensions/base/mediawiki.py:1306 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" @@ -1040,618 +1490,225 @@ msgstr "" "[{author}]({author_url}) 将用户 *{old_name}* 重命名为 [{new_name}]({link})" "{comment}" -#: src/rc_formatters.py:665 -msgid "An action has been hidden by administration." -msgstr "一项操作已被管理员隐藏。" - -#: src/rc_formatters.py:681 -#, python-brace-format -msgid "{user} triggered \"{abuse_filter}\"" -msgstr "{user} 触发了 \"{abuse_filter}\"" - -#: src/rc_formatters.py:682 -msgid "Performed" -msgstr "执行了" - -#: src/rc_formatters.py:683 -msgid "Action taken" -msgstr "采取的操作" - -#: src/rc_formatters.py:684 -msgid "Title" -msgstr "标题" - -#: src/rc_formatters.py:693 src/rc_formatters.py:980 -msgid "No description provided" -msgstr "没有提供描述" - -#: src/rc_formatters.py:717 -msgid "(N!) " -msgstr "(新!) " - -#: src/rc_formatters.py:718 -msgid "m" -msgstr "小" - -#: src/rc_formatters.py:718 -msgid "b" -msgstr "机" - -#: src/rc_formatters.py:735 src/rc_formatters.py:740 -msgid "__Only whitespace__" -msgstr "__仅空格__" - -#: src/rc_formatters.py:745 -msgid "Removed" -msgstr "移除了" - -#: src/rc_formatters.py:747 -msgid "Added" -msgstr "添加了" - -#: src/rc_formatters.py:781 src/rc_formatters.py:820 -msgid "Options" -msgstr "选项" - -#: src/rc_formatters.py:781 -#, python-brace-format -msgid "([preview]({link}) | [undo]({undolink}))" -msgstr "([预览]({link}) | [撤销]({undolink}))" - -#: src/rc_formatters.py:786 -#, python-brace-format -msgid "Uploaded a new version of {name}" -msgstr "上传了 {name} 的新版本" - -#: src/rc_formatters.py:788 -#, python-brace-format -msgid "Reverted a version of {name}" -msgstr "回退了 {name} 的一个版本" - -#: src/rc_formatters.py:790 -#, python-brace-format -msgid "Uploaded {name}" -msgstr "上传了 {name}" - -#: src/rc_formatters.py:806 -msgid "**No license!**" -msgstr "**没有许可协议!**" - -#: src/rc_formatters.py:818 -msgid "" -"\n" -"License: {}" -msgstr "" -"\n" -"许可协议:{}" - -#: src/rc_formatters.py:820 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "([预览]({link}))" - -#: src/rc_formatters.py:825 -#, python-brace-format -msgid "Deleted page {article}" -msgstr "删除了页面 {article}" - -#: src/rc_formatters.py:830 -#, python-brace-format -msgid "Deleted redirect {article} by overwriting" -msgstr "通过覆盖删除了重定向 {article}" - -#: src/rc_formatters.py:836 -msgid "No redirect has been made" -msgstr "未创建重定向" - -#: src/rc_formatters.py:837 -msgid "A redirect has been made" -msgstr "创建了重定向" - -#: src/rc_formatters.py:838 -#, python-brace-format -msgid "Moved {redirect}{article} to {target}" -msgstr "将 {redirect}{article} 移动到了 {target}" - -#: src/rc_formatters.py:841 -#, python-brace-format -msgid "Moved {redirect}{article} to {title} over redirect" -msgstr "将 {redirect}{article} 移动到了 {title},不留重定向" - -#: src/rc_formatters.py:845 -#, python-brace-format -msgid "Moved protection settings from {redirect}{article} to {title}" -msgstr "将保护设置从 {redirect}{article} 移动到了 {title}" - -#: src/rc_formatters.py:869 -msgid "unknown expiry time" -msgstr "未知的过期时间" - -#: src/rc_formatters.py:874 -msgid "Blocked from editing the following pages: " -msgstr "被阻止编辑下列页面: " - -#: src/rc_formatters.py:883 -msgid "Blocked from editing pages on following namespaces: " -msgstr "被阻止编辑下列命名空间的页面: " - -#: src/rc_formatters.py:894 -msgid "Partial block details" -msgstr "部分封禁详情" - -#: src/rc_formatters.py:895 -#, python-brace-format -msgid "Blocked {blocked_user} {time}" -msgstr "封禁 {blocked_user} {time}" - -#: src/rc_formatters.py:899 -#, python-brace-format -msgid "Changed block settings for {blocked_user}" -msgstr "更改了 {blocked_user} 的封禁设置" - -#: src/rc_formatters.py:903 -#, python-brace-format -msgid "Unblocked {blocked_user}" -msgstr "解封 {blocked_user}" - -#: src/rc_formatters.py:910 -#, python-brace-format -msgid "Left a comment on {target}'s profile" -msgstr "在 {target} 的资料页上留下留言" - -#: src/rc_formatters.py:912 -msgid "Left a comment on their own profile" -msgstr "在自己的资料页上留下留言" - -#: src/rc_formatters.py:919 -#, python-brace-format -msgid "Replied to a comment on {target}'s profile" -msgstr "在 {target} 的资料页上回复留言" - -#: src/rc_formatters.py:921 -msgid "Replied to a comment on their own profile" -msgstr "在自己的资料页上回复留言" - -#: src/rc_formatters.py:928 -#, python-brace-format -msgid "Edited a comment on {target}'s profile" -msgstr "编辑了 {target} 的资料页上的一条留言" - -#: src/rc_formatters.py:930 -msgid "Edited a comment on their own profile" -msgstr "编辑了自己的资料页上的一条留言" - -#: src/rc_formatters.py:935 -#, python-brace-format -msgid "Edited {target}'s profile" -msgstr "编辑了 {target} 的资料页" - -#: src/rc_formatters.py:937 -msgid "Edited their own profile" -msgstr "编辑了自己的资料页" - -#: src/rc_formatters.py:939 -#, python-brace-format -msgid "Cleared the {field} field" -msgstr "清空了 {field} 栏位" - -#: src/rc_formatters.py:941 -#, python-brace-format -msgid "{field} field changed to: {desc}" -msgstr "{field} 栏位改为:{desc}" - -#: src/rc_formatters.py:946 -#, python-brace-format -msgid "Purged a comment on {target}'s profile" -msgstr "永久删除了 {target} 的资料页上的一条留言" - -#: src/rc_formatters.py:948 -msgid "Purged a comment on their own profile" -msgstr "永久删除了自己的资料页上的一条评论" - -#: src/rc_formatters.py:956 -#, python-brace-format -msgid "Deleted a comment on {target}'s profile" -msgstr "删除了 {target} 的资料页上的一条留言" - -#: src/rc_formatters.py:958 -msgid "Deleted a comment on their own profile" -msgstr "删除了自己的资料页上的一条评论" - -#: src/rc_formatters.py:962 -#, python-brace-format -msgid "Changed group membership for {target}" -msgstr "更改了 {target} 的用户组" - -#: src/rc_formatters.py:966 -#, python-brace-format -msgid "{target} got autopromoted to a new usergroup" -msgstr "{target} 被自动地提升到新用户组" - -#: src/rc_formatters.py:981 -#, python-brace-format -msgid "Groups changed from {old_groups} to {new_groups}{reason}" -msgstr "用户组从 {old_groups} 更改为 {new_groups}{reason}" - -#: src/rc_formatters.py:985 -#, python-brace-format -msgid "Protected {target}" -msgstr "保护了 {target}" - -#: src/rc_formatters.py:991 -#, python-brace-format -msgid "Changed protection level for {article}" -msgstr "更改了 {article} 的保护等级" - -#: src/rc_formatters.py:997 -#, python-brace-format -msgid "Removed protection from {article}" -msgstr "移除了 {article} 的保护" - -#: src/rc_formatters.py:1001 -#, python-brace-format -msgid "Changed visibility of revision on page {article} " -msgid_plural "Changed visibility of {amount} revisions on page {article} " -msgstr[0] "更改了页面 {article} 的 {amount} 个修订版本的可见性 " - -#: src/rc_formatters.py:1013 -#, python-brace-format -msgid "Imported {article} with {count} revision" -msgid_plural "Imported {article} with {count} revisions" -msgstr[0] "导入了含有 {count} 个修订版本的 {article}" - -#: src/rc_formatters.py:1018 -#, python-brace-format -msgid "Restored {article}" -msgstr "还原了 {article}" - -#: src/rc_formatters.py:1021 -msgid "Changed visibility of log events" -msgstr "更改了日志事件的可见性" - -#: src/rc_formatters.py:1031 -#, python-brace-format -msgid "Imported {article} with {count} revision from \"{source}\"" -msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "导入了来自 \"{source}\" 的含有 {count} 个修订版本的 {article}" - -#: src/rc_formatters.py:1036 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "编辑了滥用过滤器{number}" - -#: src/rc_formatters.py:1039 -#, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "创建了滥用过滤器{number}" - -#: src/rc_formatters.py:1042 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "将 {article} 的修订版本历史合并到了 {dest}" - -#: src/rc_formatters.py:1046 -msgid "Created account automatically" -msgstr "自动创建账户" - -#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 -msgid "Created account" -msgstr "创建了账户" - -#: src/rc_formatters.py:1052 -#, python-brace-format -msgid "Created account {article}" -msgstr "创建了账户 {article}" - -#: src/rc_formatters.py:1055 -#, python-brace-format -msgid "Created account {article} and password was sent by email" -msgstr "创建了账户 {article} 且密码已通过电子邮件发送" - -#: src/rc_formatters.py:1061 -msgid "Added an entry to the interwiki table" -msgstr "向跨wiki表添加了跨wiki前缀" - -#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "前缀:{prefix},网站:{website} | {desc}" - -#: src/rc_formatters.py:1067 -msgid "Edited an entry in interwiki table" -msgstr "编辑了跨wiki表的跨wiki前缀" - -#: src/rc_formatters.py:1073 -msgid "Deleted an entry in interwiki table" -msgstr "删除了跨wiki表的跨wiki前缀" - -#: src/rc_formatters.py:1074 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "前缀:{prefix} | {desc}" - -#: src/rc_formatters.py:1077 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "更改了页面 {article} 的内容模型" - -#: src/rc_formatters.py:1078 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "内容模型从 {old} 更改为 {new}:{reason}" - -#: src/rc_formatters.py:1083 -#, python-brace-format -msgid "Created the page {article} using a non-default content model" -msgstr "使用非默认内容模型创建了页面 {article}" - -#: src/rc_formatters.py:1084 -#, python-brace-format -msgid "Created with model {new}: {reason}" -msgstr "使用内容模型 {new} 创建:{reason}" - -#: src/rc_formatters.py:1087 +#: extensions/base/sprite.py:37 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "编辑了 {article} 的 Sprite 图" -#: src/rc_formatters.py:1090 +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" +"[{author}]({author_url}) 编辑了 [{article}]({article_url}) 的 Sprite 图" + +#: extensions/base/sprite.py:60 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "创建了 {article} 的 Sprite 表" -#: src/rc_formatters.py:1093 +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) 创建了 [{article}]({article_url}) 的 Sprite 表" + +#: extensions/base/sprite.py:79 #, python-brace-format msgid "Edited the slice for {article}" msgstr "编辑了 {article} 的 Slice" -#: src/rc_formatters.py:1099 +#: extensions/base/sprite.py:86 #, python-brace-format -msgid "Created the Cargo table \"{table}\"" -msgstr "创建了 Cargo 表 \"{table}\"" +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "[{author}]({author_url}) 编辑了 [{article}]({article_url}) 的 Slice" -#: src/rc_formatters.py:1103 -#, python-brace-format -msgid "Deleted the Cargo table \"{table}\"" -msgstr "删除了 Cargo 表 \"{table}\"" - -#: src/rc_formatters.py:1110 -#, python-brace-format -msgid "Recreated the Cargo table \"{table}\"" -msgstr "重新创建了 Cargo 表 \"{table}\"" - -#: src/rc_formatters.py:1117 -#, python-brace-format -msgid "Replaced the Cargo table \"{table}\"" -msgstr "替换了 Cargo 表 \"{table}\"" - -#: src/rc_formatters.py:1121 #, fuzzy, python-brace-format -msgid "Created the tag \"{tag}\"" -msgstr "创建了标签 \"{tag}\"" +#~ msgid "" +#~ "Unknown event `{event}` by [{author}]({author_url}), report it on the " +#~ "[support server](<{support}>)." +#~ msgstr "" +#~ "#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" +#~ "未知事件 `{event}` 由 [{author}]({author_url}) 发出,请在[支持服务器]" +#~ "(<{support}>)中报告。\n" +#~ "#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +#~ "未知事件 `{event}`,作者为 [{author}]({author_url}),请在[支持服务器]" +#~ "(<{support}>)上报告。" -#: src/rc_formatters.py:1125 -#, fuzzy, python-brace-format -msgid "Deleted the tag \"{tag}\"" -msgstr "删除了标签 \"{tag}\"" +#, python-brace-format +#~ msgid "Unknown event `{event}`" +#~ msgstr "未知事件 `{event}`" -#: src/rc_formatters.py:1127 #, fuzzy -msgid "Removed from" -msgstr "移除了" +#~ msgid "Report this on the support server" +#~ msgstr "" +#~ "#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" +#~ "在支持服务器上报告\n" +#~ "#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +#~ "在支持服务器上报告此错误" -#: src/rc_formatters.py:1127 -msgid "{} revision or log entry" -msgid_plural "{} revisions and/or log entries" -msgstr[0] "" - -#: src/rc_formatters.py:1131 -#, fuzzy, python-brace-format -msgid "Activated the tag \"{tag}\"" -msgstr "激活了标签 \"{tag}\"" - -#: src/rc_formatters.py:1134 -#, fuzzy, python-brace-format -msgid "Deactivated the tag \"{tag}\"" -msgstr "取消激活了标签 \"{tag}\"" - -#: src/rc_formatters.py:1137 -msgid "Changed wiki settings" -msgstr "更改了wiki设置" - -#: src/rc_formatters.py:1141 #, python-brace-format -msgid "Deleted a \"{wiki}\" wiki" -msgstr "删除了wiki \"{wiki}\"" +#~ msgid "for {num} {translated_length}" +#~ msgstr "时长为{num}{translated_length}" + +#~ msgid "until {}" +#~ msgstr "直到{}" -#: src/rc_formatters.py:1144 #, python-brace-format -msgid "Locked a \"{wiki}\" wiki" -msgstr "锁定了wiki \"{wiki}\"" +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) 在 {target} 的资料页上留下了一条[评论]({comment})" -#: src/rc_formatters.py:1147 -#, fuzzy, python-brace-format -msgid "Modified \"{namespace_name}\" namespace" -msgstr "修改了命名空间 \"{namespace_name}\"" - -#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 -msgid "Wiki" -msgstr "Wiki" - -#: src/rc_formatters.py:1151 #, python-brace-format -msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "删除了命名空间 \"{namespace_name}\"" +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) 在自己的资料页上留下了一条[评论]({comment})" -#: src/rc_formatters.py:1157 #, python-brace-format -msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "修改了用户组 \"{usergroup_name}\"" +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) 在 {target} 的资料页上回复了一条[评论]({comment})" -#: src/rc_formatters.py:1160 -#, fuzzy, python-brace-format -msgid "Undeleted a \"{wiki}\" wiki" -msgstr "删除了wiki \"{wiki}\"" - -#: src/rc_formatters.py:1163 #, python-brace-format -msgid "Unlocked a \"{wiki}\" wiki" -msgstr "解锁了wiki \"{wiki}\"" +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) 在自己的资料页上回复了一条[评论]({comment})" -#: src/rc_formatters.py:1166 #, python-brace-format -msgid "Generated {file} dump" -msgstr "生成了转储 {file}" +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) 在 {target} 的资料页上编辑了一条[评论]({comment})" -#: src/rc_formatters.py:1169 #, python-brace-format -msgid "Deleted {file} dump" -msgstr "删除了转储 {file}" +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) 在自己的资料页上编辑了一条[评论]({comment})" -#: src/rc_formatters.py:1177 #, python-brace-format -msgid "Marked \"{article}\" for translation" -msgstr "将 \"{article}\" 标记为进行翻译" +#~ msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +#~ msgstr "[{author}]({author_url}) 在 {target} 的资料页上永久删除了一条评论" -#: src/rc_formatters.py:1180 #, python-brace-format -msgid "Removed \"{article}\" from the translation system" -msgstr "将 \"{article}\" 从翻译系统中移除" +#~ msgid "[{author}]({author_url}) purged a comment on their own profile" +#~ msgstr "[{author}]({author_url}) 在自己的资料页上永久删除了一条评论" -#: src/rc_formatters.py:1183 #, python-brace-format -msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "已完成将翻译页面从 \"{article}\" 移动到 \"{target}\"" +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) 在 {target} 的资料页上删除了一条[评论]({comment})" -#: src/rc_formatters.py:1186 #, python-brace-format -msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "在移动 \"{article}\" 到 \"{target}\" 时遇到问题" +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) 在自己的资料页上删除了一条[评论]({comment})" -#: src/rc_formatters.py:1189 #, python-brace-format -msgid "Completed deletion of translatable page \"{article}\"" -msgstr "已完成删除可翻译页面 \"{article}\"" +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) 在 [{target}]({target_url}) 的资料页上编辑了 " +#~ "{field} 栏位。*({desc})*" -#: src/rc_formatters.py:1192 #, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translatable page " -"\"{target}\"" -msgstr "无法删除 \"{article}\",其属于可翻译页面 \"{target}\"" +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) 在[自己]({target_url})的资料页上编辑了 {field} 栏" +#~ "位。*({desc})*" + +#~ msgid "none" +#~ msgstr "无" -#: src/rc_formatters.py:1195 #, python-brace-format -msgid "Completed deletion of translation page \"{article}\"" -msgstr "已完成删除翻译页面 \"{article}\"" +#~ msgid "" +#~ "[{author}]({author_url}) completed deletion of translatable page " +#~ "[{article}]({article_url}){comment}" +#~ msgstr "" +#~ "[{author}]({author_url}) 完成了对可翻译页面 [{article}]({article_url}) 的" +#~ "删除{comment}" + +#~ msgid "No description provided" +#~ msgstr "没有提供描述" + +#~ msgid "unknown expiry time" +#~ msgstr "未知的过期时间" -#: src/rc_formatters.py:1198 #, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" -msgstr "无法删除 \"{article}\",其属于翻译页面 \"{target}\"" +#~ msgid "Left a comment on {target}'s profile" +#~ msgstr "在 {target} 的资料页上留下留言" + +#~ msgid "Left a comment on their own profile" +#~ msgstr "在自己的资料页上留下留言" -#: src/rc_formatters.py:1201 #, python-brace-format -msgid "Encouraged translation of \"{article}\"" -msgstr "支持了 \"{article}\" 的翻译" +#~ msgid "Replied to a comment on {target}'s profile" +#~ msgstr "在 {target} 的资料页上回复留言" + +#~ msgid "Replied to a comment on their own profile" +#~ msgstr "在自己的资料页上回复留言" -#: src/rc_formatters.py:1204 #, python-brace-format -msgid "Discouraged translation of \"{article}\"" -msgstr "不支持了 \"{article}\" 的翻译" +#~ msgid "Edited a comment on {target}'s profile" +#~ msgstr "编辑了 {target} 的资料页上的一条留言" + +#~ msgid "Edited a comment on their own profile" +#~ msgstr "编辑了自己的资料页上的一条留言" -#: src/rc_formatters.py:1210 #, python-brace-format -msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "将 \"{article}\" 的语言限制为 `{languages}`" +#~ msgid "Edited {target}'s profile" +#~ msgstr "编辑了 {target} 的资料页" + +#~ msgid "Edited their own profile" +#~ msgstr "编辑了自己的资料页" -#: src/rc_formatters.py:1212 #, python-brace-format -msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "将 \"{article}\" 的优先语言设为 `{languages}`" +#~ msgid "Cleared the {field} field" +#~ msgstr "清空了 {field} 栏位" -#: src/rc_formatters.py:1214 #, python-brace-format -msgid "Removed priority languages from \"{article}\"" -msgstr "从 \"{article}\" 移除了优先语言" +#~ msgid "{field} field changed to: {desc}" +#~ msgstr "{field} 栏位改为:{desc}" -#: src/rc_formatters.py:1217 #, python-brace-format -msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" -msgstr "将可翻译页面 \"{article}\" 加入聚合信息组 \"{group}\"" +#~ msgid "Purged a comment on {target}'s profile" +#~ msgstr "永久删除了 {target} 的资料页上的一条留言" + +#~ msgid "Purged a comment on their own profile" +#~ msgstr "永久删除了自己的资料页上的一条评论" -#: src/rc_formatters.py:1220 #, python-brace-format -msgid "" -"Removed translatable page \"{article}\" from aggregate group \"{group}\"" -msgstr "将可翻译页面 \"{article}\" 从聚合信息组 \"{group}\" 中移除" +#~ msgid "Deleted a comment on {target}'s profile" +#~ msgstr "删除了 {target} 的资料页上的一条留言" + +#~ msgid "Deleted a comment on their own profile" +#~ msgstr "删除了自己的资料页上的一条评论" -#: src/rc_formatters.py:1227 #, python-brace-format -msgid "Reviewed translation \"{article}\"" -msgstr "复核了翻译 \"{article}\"" +#~ msgid "Groups changed from {old_groups} to {new_groups}{reason}" +#~ msgstr "用户组从 {old_groups} 更改为 {new_groups}{reason}" -#: src/rc_formatters.py:1230 #, python-brace-format -msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "更改了 \"{article}\" 的 `{language}` 翻译的状态" - -#: src/rc_formatters.py:1232 -msgid "Old state" -msgstr "旧状态" - -#: src/rc_formatters.py:1233 -msgid "New state" -msgstr "新状态" - -#: src/rc_formatters.py:1242 -#, python-brace-format -msgid "Changed the language of \"{article}\"" -msgstr "更改了 \"{article}\" 的语言" - -#: src/rc_formatters.py:1243 -msgid "Old language" -msgstr "旧语言" - -#: src/rc_formatters.py:1244 -msgid "New language" -msgstr "新语言" - -#: src/rc_formatters.py:1248 -#, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "将有 {edits} 次编辑的用户 \"{old_name}\" 重命名为 \"{new_name}\"" - -#: src/rc_formatters.py:1250 -#, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "将用户 \"{old_name}\" 重命名为 \"{new_name}\"" - -#: src/rc_formatters.py:1254 -msgid "Action has been hidden by administration" -msgstr "操作已被管理员隐藏" - -#: src/rc_formatters.py:1288 -msgid "**Added**: " -msgstr "**添加了**: " - -#: src/rc_formatters.py:1288 -msgid " and {} more\n" -msgstr " 还有{}更多\n" - -#: src/rc_formatters.py:1289 -msgid "**Removed**: " -msgstr "**移除了**: " - -#: src/rc_formatters.py:1289 -msgid " and {} more" -msgstr " 还有{}更多" - -#: src/rc_formatters.py:1290 -msgid "Changed categories" -msgstr "更改了分类" +#~ msgid "Completed deletion of translatable page \"{article}\"" +#~ msgstr "已完成删除可翻译页面 \"{article}\"" #, python-brace-format #~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" diff --git a/locale/zh-hans/LC_MESSAGES/misc.po b/locale/zh-hans/LC_MESSAGES/misc.po index 7b0e507..96d4ce7 100644 --- a/locale/zh-hans/LC_MESSAGES/misc.po +++ b/locale/zh-hans/LC_MESSAGES/misc.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-28 23:45+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-12-06 14:17+0000\n" "Last-Translator: lakejason0 \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: Chinese (Traditional) ) in " "{forumName}" msgstr "" -#: src/discussion_formatters.py:42 +#: extensions/base/discussions.py:217 #, python-brace-format msgid "" "[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -#: src/discussion_formatters.py:45 +#: extensions/base/discussions.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -#: src/discussion_formatters.py:54 +#: extensions/base/discussions.py:234 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " "to [{title}](<{url}f/p/{threadId}>) in {forumName}" msgstr "" -#: src/discussion_formatters.py:61 +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:312 #, python-brace-format msgid "" "[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" @@ -79,7 +426,7 @@ msgid "" "Message_Wall:{user_wall}>)" msgstr "" -#: src/discussion_formatters.py:64 +#: extensions/base/discussions.py:318 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" @@ -88,14 +435,24 @@ msgid "" "(<{url}wiki/Message_Wall:{user_wall}>)" msgstr "" -#: src/discussion_formatters.py:72 +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "" + +#: extensions/base/discussions.py:359 #, python-brace-format msgid "" "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " "on [{article}](<{url}>)" msgstr "" -#: src/discussion_formatters.py:78 +#: extensions/base/discussions.py:365 #, python-brace-format msgid "" "[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" @@ -103,146 +460,220 @@ msgid "" "[{article}](<{url}>)" msgstr "" -#: src/discussion_formatters.py:86 src/rc_formatters.py:672 +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "未知" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:80 +#, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "" + +#: extensions/base/managewiki.py:89 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:124 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "" + +#: extensions/base/managewiki.py:134 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" + +#: extensions/base/managewiki.py:147 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:158 #, python-brace-format msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" msgstr "" -#: src/discussion_formatters.py:123 +#: extensions/base/managewiki.py:173 #, python-brace-format -msgid "Created \"{title}\"" +msgid "Modified \"{usergroup_name}\" usergroup" msgstr "" -#: src/discussion_formatters.py:127 +#: extensions/base/managewiki.py:182 #, python-brace-format -msgid "Created a poll \"{title}\"" +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" msgstr "" -#: src/discussion_formatters.py:134 -msgid "Option {}" -msgstr "" - -#: src/discussion_formatters.py:135 +#: extensions/base/managewiki.py:195 #, python-brace-format -msgid "__[View image]({image_url})__" +msgid "Undeleted a \"{wiki}\" wiki" msgstr "" -#: src/discussion_formatters.py:139 +#: extensions/base/managewiki.py:203 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" + +#: extensions/base/managewiki.py:217 #, python-brace-format -msgid "Created a quiz \"{title}\"" +msgid "Unlocked a \"{wiki}\" wiki" msgstr "" -#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 -#: src/rc_formatters.py:1283 -msgid "Tags" -msgstr "" - -#: src/discussion_formatters.py:155 -msgid "{} tags" -msgstr "" - -#: src/discussion_formatters.py:160 +#: extensions/base/managewiki.py:225 #, python-brace-format -msgid "Replied to \"{title}\"" +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" msgstr "" -#: src/discussion_formatters.py:169 +#: extensions/base/datadump.py:36 #, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" +msgid "Generated {file} dump" msgstr "" -#: src/discussion_formatters.py:173 +#: extensions/base/datadump.py:45 #, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" msgstr "" -#: src/discussion_formatters.py:180 +#: extensions/base/datadump.py:58 #, python-brace-format -msgid "Commented on {article}" +msgid "Deleted {file} dump" msgstr "" -#: src/discussion_formatters.py:184 +#: extensions/base/datadump.py:67 #, python-brace-format -msgid "Replied to a comment on {article}" +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" msgstr "" -#: src/discussion_formatters.py:188 src/rc_formatters.py:1259 -#, python-brace-format -msgid "Unknown event `{event}`" -msgstr "" - -#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 -#: src/rc_formatters.py:1265 src/rc_formatters.py:1267 -msgid "Report this on the support server" -msgstr "" - -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "None" msgstr "無" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Warning issued" msgstr "已發出警告" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Blocked user**" msgstr "**已封鎖使用者**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Tagged the edit" msgstr "已標記編輯" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Disallowed the action" msgstr "已阻止操作" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**IP range blocked**" msgstr "**已封鎖IP段**" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Throttled actions" msgstr "已壓制操作" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "Removed autoconfirmed group" msgstr "已移除自動確認使用者群組" -#: src/rc_formatters.py:28 +#: extensions/base/abusefilter.py:29 msgid "**Removed from privileged groups**" msgstr "**已移除特有使用者群組**" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Edit" msgstr "編輯" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Upload" msgstr "上傳" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Move" msgstr "移動" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Stash upload" msgstr "隱藏上傳" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Deletion" msgstr "刪除" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Account creation" msgstr "建立帳號" -#: src/rc_formatters.py:29 +#: extensions/base/abusefilter.py:30 msgid "Auto account creation" msgstr "自動建立帳號" -#: src/rc_formatters.py:83 +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "" + +#: extensions/base/abusefilter.py:66 #, python-brace-format msgid "" "[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " @@ -251,19 +682,81 @@ msgstr "" "[{author}]({author_url}) 觸發了 *{abuse_filter}* ,於 *[{target}]" "({target_url})* 執行操作「{action}」 - 已採取的操作:{result}。" -#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 -#: src/rc_formatters.py:457 src/rc_formatters.py:460 src/rc_formatters.py:463 -#: src/rc_formatters.py:464 src/rc_formatters.py:469 src/rc_formatters.py:470 -#: src/rc_formatters.py:478 src/rc_formatters.py:482 src/rc_formatters.py:682 -#: src/rc_formatters.py:683 src/rc_formatters.py:684 src/rc_formatters.py:1141 -#: src/rc_formatters.py:1144 src/rc_formatters.py:1147 -#: src/rc_formatters.py:1149 src/rc_formatters.py:1152 -#: src/rc_formatters.py:1154 src/rc_formatters.py:1160 -#: src/rc_formatters.py:1163 src/rc_formatters.py:1255 -msgid "Unknown" -msgstr "未知" +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "" -#: src/rc_formatters.py:116 +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "" + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "" + +#: extensions/base/mediawiki.py:112 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" @@ -272,7 +765,7 @@ msgstr "" "[{author}]({author_url}) 編輯了 [{article}]({edit_link}) {comment} {bold}" "({sign}{edit_size}){bold}" -#: src/rc_formatters.py:118 +#: extensions/base/mediawiki.py:117 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" @@ -281,18 +774,52 @@ msgstr "" "[{author}]({author_url}) 建立了 [{article}]({edit_link}) {comment} {bold}" "({sign}{edit_size}){bold}" -#: src/rc_formatters.py:121 -#, python-brace-format -msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" -msgstr "[{author}]({author_url}) 上傳了 [{file}]({file_link}) {comment}" +#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +msgid "Options" +msgstr "" -#: src/rc_formatters.py:128 +#: extensions/base/mediawiki.py:191 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "" + +#: extensions/base/mediawiki.py:196 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:198 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:200 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "" + +#: extensions/base/mediawiki.py:209 +msgid "**No license!**" +msgstr "" + +#: extensions/base/mediawiki.py:224 +msgid "" +"\n" +"License: {}" +msgstr "" + +#: extensions/base/mediawiki.py:226 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "" + +#: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" msgstr "[{author}]({author_url}) 回退了 [{file}]({file_link}) 的版本 {comment}" -#: src/rc_formatters.py:132 +#: extensions/base/mediawiki.py:248 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -300,12 +827,27 @@ msgid "" msgstr "" "[{author}]({author_url}) 上傳了 [{file}]({file_link}) 的新版本 {comment}" -#: src/rc_formatters.py:135 +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) 上傳了 [{file}]({file_link}) {comment}" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:283 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" -#: src/rc_formatters.py:141 +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" + +#: extensions/base/mediawiki.py:308 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -314,214 +856,32 @@ msgstr "" "[{author}]({author_url}) 透過覆蓋 [{page}]({page_link}) 刪除了重新導向 " "{comment}" -#: src/rc_formatters.py:147 src/rc_formatters.py:152 -msgid "without making a redirect" -msgstr "不留重新導向" - -#: src/rc_formatters.py:147 src/rc_formatters.py:153 -msgid "with a redirect" -msgstr "保留重新導向" - -#: src/rc_formatters.py:148 +#: extensions/base/mediawiki.py:322 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" +msgid "Restored {article}" msgstr "" -"[{author}]({author_url}) 已將 {redirect}*{article}* 移動至 [{target}]" -"({target_url}) {made_a_redirect} {comment}" -#: src/rc_formatters.py:154 +#: extensions/base/mediawiki.py:331 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -"[{target}]({target_url}) {made_a_redirect}{comment}" +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" -"[{author}]({author_url}) 已透過重新導向將 {redirect}*{article}* 移動至 " -"[{target}]({target_url}) {made_a_redirect} {comment}" -#: src/rc_formatters.py:159 +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "" + +#: extensions/base/mediawiki.py:356 #, python-brace-format -msgid "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" +msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "" -"[{author}]({author_url}) 已將 {redirect}*{article}* 的保護設定移動至 " -"[{target}]({target_url}) {comment}" -#: src/rc_formatters.py:170 src/rc_formatters.py:855 -msgid "for infinity and beyond" -msgstr "時長為無線期" - -#: src/rc_formatters.py:179 src/rc_formatters.py:863 +#: extensions/base/mediawiki.py:370 #, python-brace-format -msgid "for {num} {translated_length}" -msgstr "時長為{num} {translated_length}" +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "" -#: src/rc_formatters.py:185 src/rc_formatters.py:867 -msgid "until {}" -msgstr "直到{}" - -#: src/rc_formatters.py:189 -msgid " on pages: " -msgstr " 於頁面: " - -#: src/rc_formatters.py:196 src/rc_formatters.py:881 -msgid " and namespaces: " -msgstr " 及命名空間: " - -#: src/rc_formatters.py:198 -msgid " on namespaces: " -msgstr " 於命名空間: " - -#: src/rc_formatters.py:210 -#, python-brace-format -msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" -msgstr "" -"[{author}]({author_url}) 封鎖了 [{user}]({user_url}) {time}{restriction_desc}" -"{comment}" - -#: src/rc_formatters.py:214 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) 變更了 [{blocked_user}]({user_url}) 的封鎖設定 " -"{comment}" - -#: src/rc_formatters.py:218 -#, python-brace-format -msgid "" -"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" -msgstr "[{author}]({author_url}) 解封了 [{blocked_user}]({user_url}) {comment}" - -#: src/rc_formatters.py:223 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:225 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:231 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -"profile" -msgstr "" - -#: src/rc_formatters.py:237 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on their own " -"profile" -msgstr "" - -#: src/rc_formatters.py:245 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:251 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:257 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:259 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:267 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:269 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:274 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -"profile. *({desc})*" -msgstr "" - -#: src/rc_formatters.py:281 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -"profile. *({desc})*" -msgstr "" - -#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:977 -#: src/rc_formatters.py:979 -msgid "none" -msgstr "" - -#: src/rc_formatters.py:301 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) from {old_groups} to {new_groups}{comment}" -msgstr "" - -#: src/rc_formatters.py:303 -#, python-brace-format -msgid "" -"{author} autopromoted [{target}]({target_url}) from {old_groups} to " -"{new_groups}{comment}" -msgstr "" - -#: src/rc_formatters.py:304 src/rc_formatters.py:965 -msgid "System" -msgstr "" - -#: src/rc_formatters.py:309 -#, python-brace-format -msgid "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" -msgstr "" - -#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:987 -#: src/rc_formatters.py:993 -msgid " [cascading]" -msgstr "" - -#: src/rc_formatters.py:316 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" -msgstr "" - -#: src/rc_formatters.py:323 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:327 +#: extensions/base/mediawiki.py:383 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -531,7 +891,220 @@ msgid_plural "" "[{article}]({article_url}){comment}" msgstr[0] "" -#: src/rc_formatters.py:340 +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "不留重新導向" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "保留重新導向" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) 已將 {redirect}*{article}* 移動至 [{target}]" +"({target_url}) {made_a_redirect} {comment}" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) 已透過重新導向將 {redirect}*{article}* 移動至 " +"[{target}]({target_url}) {made_a_redirect} {comment}" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) 已將 {redirect}*{article}* 的保護設定移動至 " +"[{target}]({target_url}) {comment}" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr "" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "時長為無線期" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:610 +msgid "Blocked from editing the following pages: " +msgstr "" + +#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr " 及命名空間: " + +#: extensions/base/mediawiki.py:619 +msgid "Blocked from editing pages on following namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:630 +msgid "Partial block details" +msgstr "" + +#: extensions/base/mediawiki.py:633 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:635 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr " 於頁面: " + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr " 於命名空間: " + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) 封鎖了 [{user}]({user_url}) {time}{restriction_desc}" +"{comment}" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) 變更了 [{blocked_user}]({user_url}) 的封鎖設定 " +"{comment}" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "[{author}]({author_url}) 解封了 [{blocked_user}]({user_url}) {comment}" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "" + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "" + +#: extensions/base/mediawiki.py:772 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -541,17 +1114,13 @@ msgid_plural "" "revisions{comment}" msgstr[0] "" -#: src/rc_formatters.py:345 +#: extensions/base/mediawiki.py:788 #, python-brace-format -msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "" +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "" -#: src/rc_formatters.py:347 -#, python-brace-format -msgid "[{author}]({author_url}) changed visibility of log events{comment}" -msgstr "" - -#: src/rc_formatters.py:359 +#: extensions/base/mediawiki.py:803 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -561,135 +1130,213 @@ msgid_plural "" "revisions from [{source}]({source_url}){comment}" msgstr[0] "" -#: src/rc_formatters.py:364 +#: extensions/base/mediawiki.py:818 #, python-brace-format -msgid "" -"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgid " (until {date_and_time})" msgstr "" -#: src/rc_formatters.py:368 +#: extensions/base/mediawiki.py:836 #, python-brace-format -msgid "" -"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgid "Changed group membership for {target}" msgstr "" -#: src/rc_formatters.py:372 +#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +msgid "System" +msgstr "" + +#: extensions/base/mediawiki.py:840 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "" + +#: extensions/base/mediawiki.py:846 +#, python-brace-format +msgid "" +"{reason}\n" +"{added}{linebreak}{removed}" +msgstr "" + +#: extensions/base/mediawiki.py:860 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) {added}{comma} {removed}{comment}" +msgstr "" +"[{author}]({author_url}) 已將 {redirect}*{article}* 移動至 [{target}]" +"({target_url}) {made_a_redirect} {comment}" + +#: extensions/base/mediawiki.py:864 +#, fuzzy, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"{comment}" +msgstr "" +"[{author}]({author_url}) 已將 {redirect}*{article}* 移動至 [{target}]" +"({target_url}) {made_a_redirect} {comment}" + +#: extensions/base/mediawiki.py:877 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" + +#: extensions/base/mediawiki.py:891 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" "({article_url}) into [{dest}]({dest_url}){comment}" msgstr "" -#: src/rc_formatters.py:375 +#: extensions/base/mediawiki.py:905 +msgid "Created account automatically" +msgstr "" + +#: extensions/base/mediawiki.py:912 #, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "" -#: src/rc_formatters.py:377 src/rc_formatters.py:385 +#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +msgid "Created account" +msgstr "" + +#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 #, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "" -#: src/rc_formatters.py:380 +#: extensions/base/mediawiki.py:944 +#, python-brace-format +msgid "Created account {article}" +msgstr "" + +#: extensions/base/mediawiki.py:953 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" "{comment}" msgstr "" -#: src/rc_formatters.py:383 +#: extensions/base/mediawiki.py:966 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" + +#: extensions/base/mediawiki.py:977 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " "and password was sent by email{comment}" msgstr "" -#: src/rc_formatters.py:388 +#: extensions/base/mediawiki.py:1009 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: extensions/base/mediawiki.py:1022 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" "({table_url}) pointing to {website} with {prefix} prefix" msgstr "" -#: src/rc_formatters.py:394 +#: extensions/base/mediawiki.py:1036 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: extensions/base/mediawiki.py:1049 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " "pointing to {website} with {prefix} prefix" msgstr "" -#: src/rc_formatters.py:400 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +#: extensions/base/mediawiki.py:1063 +msgid "Deleted an entry in interwiki table" msgstr "" -#: src/rc_formatters.py:403 +#: extensions/base/mediawiki.py:1064 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: extensions/base/mediawiki.py:1074 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" +msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" + +#: extensions/base/mediawiki.py:1091 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:1093 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1105 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "" -#: src/rc_formatters.py:407 +#: extensions/base/mediawiki.py:1120 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: extensions/base/mediawiki.py:1122 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1133 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " "non-default content model {new}{comment}" msgstr "" -#: src/rc_formatters.py:410 +#: extensions/base/mediawiki.py:1148 #, python-brace-format -msgid "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgid "Created the tag \"{tag}\"" msgstr "" -#: src/rc_formatters.py:413 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" -msgstr "" - -#: src/rc_formatters.py:416 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the slice for [{article}]({article_url})" -msgstr "" - -#: src/rc_formatters.py:421 -#, python-brace-format -msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:423 -#, python-brace-format -msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:428 -#, python-brace-format -msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:433 -#, python-brace-format -msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:436 +#: extensions/base/mediawiki.py:1158 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" -#: src/rc_formatters.py:441 +#: extensions/base/mediawiki.py:1180 +#, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1182 +msgid "Removed from" +msgstr "" + +#: extensions/base/mediawiki.py:1182 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" + +#: extensions/base/mediawiki.py:1194 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" -#: src/rc_formatters.py:443 +#: extensions/base/mediawiki.py:1204 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -701,211 +1348,40 @@ msgstr[0] "" "[{author}]({author_url}) 已將 {redirect}*{article}* 移動至 [{target}]" "({target_url}) {made_a_redirect} {comment}" -#: src/rc_formatters.py:449 +#: extensions/base/mediawiki.py:1221 +#, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1230 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" -#: src/rc_formatters.py:452 +#: extensions/base/mediawiki.py:1249 +#, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1258 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" -#: src/rc_formatters.py:454 +#: extensions/base/mediawiki.py:1278 #, python-brace-format -msgid "[{author}]({author_url}) changed wiki settings{reason}" -msgstr "" +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" -#: src/rc_formatters.py:456 +#: extensions/base/mediawiki.py:1283 #, python-brace-format -msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" msgstr "" -#: src/rc_formatters.py:459 -#, python-brace-format -msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:462 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) modified namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" - -#: src/rc_formatters.py:467 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:473 -#, python-brace-format -msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:477 -#, fuzzy, python-brace-format -msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) 刪除了 [{page}]({page_link}) {comment}" - -#: src/rc_formatters.py:481 -#, python-brace-format -msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:486 -#, python-brace-format -msgid "[{author}]({author_url}) generated *{file}* dump{comment}" -msgstr "" - -#: src/rc_formatters.py:491 -#, python-brace-format -msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" -msgstr "" - -#: src/rc_formatters.py:502 -#, python-brace-format -msgid "" -"[{author}]({author_url}) marked [{article}]({article_url}) for " -"translation{comment}" -msgstr "" - -#: src/rc_formatters.py:509 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed [{article}]({article_url}) from the " -"translation system{comment}" -msgstr "" - -#: src/rc_formatters.py:516 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed moving translation pages from *{article}* " -"to [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:524 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encountered a problem while moving [{article}]" -"({article_url}) to [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:532 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translatable page [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:540 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translatable page [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:548 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translation page [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:556 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translation page [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:564 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:571 -#, python-brace-format -msgid "" -"[{author}]({author_url}) discouraged translation of [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:581 -#, python-brace-format -msgid "" -"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " -"`{languages}`{comment}" -msgstr "" - -#: src/rc_formatters.py:587 -#, python-brace-format -msgid "" -"[{author}]({author_url}) set the priority languages for [{article}]" -"({article_url}) to `{languages}`{comment}" -msgstr "" - -#: src/rc_formatters.py:593 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed priority languages from [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:600 -#, python-brace-format -msgid "" -"[{author}]({author_url}) added translatable page [{article}]({article_url}) " -"to aggregate group \"{group}\"{comment}" -msgstr "" - -#: src/rc_formatters.py:607 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed translatable page [{article}]" -"({article_url}) from aggregate group \"{group}\"{comment}" -msgstr "" - -#: src/rc_formatters.py:619 -#, python-brace-format -msgid "" -"[{author}]({author_url}) reviewed translation [{article}]({article_url})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:627 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" -msgstr "" - -#: src/rc_formatters.py:634 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) to `{new_state}`{comment}" -msgstr "" - -#: src/rc_formatters.py:643 src/rc_formatters.py:646 src/rc_formatters.py:1238 -#: src/rc_formatters.py:1241 -msgid "(default)" -msgstr "" - -#: src/rc_formatters.py:647 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the language of [{article}]({article_url}) " -"from {old_lang} to {new_lang}{comment}" -msgstr "" - -#: src/rc_formatters.py:656 +#: extensions/base/mediawiki.py:1298 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " @@ -915,619 +1391,50 @@ msgid_plural "" "[{new_name}]({link}){comment}" msgstr[0] "" -#: src/rc_formatters.py:661 +#: extensions/base/mediawiki.py:1306 #, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" "{comment}" msgstr "" -#: src/rc_formatters.py:665 -msgid "An action has been hidden by administration." -msgstr "" - -#: src/rc_formatters.py:681 -#, python-brace-format -msgid "{user} triggered \"{abuse_filter}\"" -msgstr "" - -#: src/rc_formatters.py:682 -msgid "Performed" -msgstr "" - -#: src/rc_formatters.py:683 -msgid "Action taken" -msgstr "" - -#: src/rc_formatters.py:684 -msgid "Title" -msgstr "" - -#: src/rc_formatters.py:693 src/rc_formatters.py:980 -msgid "No description provided" -msgstr "" - -#: src/rc_formatters.py:717 -msgid "(N!) " -msgstr "" - -#: src/rc_formatters.py:718 -msgid "m" -msgstr "" - -#: src/rc_formatters.py:718 -msgid "b" -msgstr "" - -#: src/rc_formatters.py:735 src/rc_formatters.py:740 -msgid "__Only whitespace__" -msgstr "" - -#: src/rc_formatters.py:745 -msgid "Removed" -msgstr "" - -#: src/rc_formatters.py:747 -msgid "Added" -msgstr "" - -#: src/rc_formatters.py:781 src/rc_formatters.py:820 -msgid "Options" -msgstr "" - -#: src/rc_formatters.py:781 -#, python-brace-format -msgid "([preview]({link}) | [undo]({undolink}))" -msgstr "" - -#: src/rc_formatters.py:786 -#, python-brace-format -msgid "Uploaded a new version of {name}" -msgstr "" - -#: src/rc_formatters.py:788 -#, python-brace-format -msgid "Reverted a version of {name}" -msgstr "" - -#: src/rc_formatters.py:790 -#, python-brace-format -msgid "Uploaded {name}" -msgstr "" - -#: src/rc_formatters.py:806 -msgid "**No license!**" -msgstr "" - -#: src/rc_formatters.py:818 -msgid "" -"\n" -"License: {}" -msgstr "" - -#: src/rc_formatters.py:820 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "" - -#: src/rc_formatters.py:825 -#, python-brace-format -msgid "Deleted page {article}" -msgstr "" - -#: src/rc_formatters.py:830 -#, python-brace-format -msgid "Deleted redirect {article} by overwriting" -msgstr "" - -#: src/rc_formatters.py:836 -msgid "No redirect has been made" -msgstr "" - -#: src/rc_formatters.py:837 -msgid "A redirect has been made" -msgstr "" - -#: src/rc_formatters.py:838 -#, python-brace-format -msgid "Moved {redirect}{article} to {target}" -msgstr "" - -#: src/rc_formatters.py:841 -#, python-brace-format -msgid "Moved {redirect}{article} to {title} over redirect" -msgstr "" - -#: src/rc_formatters.py:845 -#, python-brace-format -msgid "Moved protection settings from {redirect}{article} to {title}" -msgstr "" - -#: src/rc_formatters.py:869 -msgid "unknown expiry time" -msgstr "" - -#: src/rc_formatters.py:874 -msgid "Blocked from editing the following pages: " -msgstr "" - -#: src/rc_formatters.py:883 -msgid "Blocked from editing pages on following namespaces: " -msgstr "" - -#: src/rc_formatters.py:894 -msgid "Partial block details" -msgstr "" - -#: src/rc_formatters.py:895 -#, python-brace-format -msgid "Blocked {blocked_user} {time}" -msgstr "" - -#: src/rc_formatters.py:899 -#, python-brace-format -msgid "Changed block settings for {blocked_user}" -msgstr "" - -#: src/rc_formatters.py:903 -#, python-brace-format -msgid "Unblocked {blocked_user}" -msgstr "" - -#: src/rc_formatters.py:910 -#, python-brace-format -msgid "Left a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:912 -msgid "Left a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:919 -#, python-brace-format -msgid "Replied to a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:921 -msgid "Replied to a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:928 -#, python-brace-format -msgid "Edited a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:930 -msgid "Edited a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:935 -#, python-brace-format -msgid "Edited {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:937 -msgid "Edited their own profile" -msgstr "" - -#: src/rc_formatters.py:939 -#, python-brace-format -msgid "Cleared the {field} field" -msgstr "" - -#: src/rc_formatters.py:941 -#, python-brace-format -msgid "{field} field changed to: {desc}" -msgstr "" - -#: src/rc_formatters.py:946 -#, python-brace-format -msgid "Purged a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:948 -msgid "Purged a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:956 -#, python-brace-format -msgid "Deleted a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:958 -msgid "Deleted a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:962 -#, python-brace-format -msgid "Changed group membership for {target}" -msgstr "" - -#: src/rc_formatters.py:966 -#, python-brace-format -msgid "{target} got autopromoted to a new usergroup" -msgstr "" - -#: src/rc_formatters.py:981 -#, python-brace-format -msgid "Groups changed from {old_groups} to {new_groups}{reason}" -msgstr "" - -#: src/rc_formatters.py:985 -#, python-brace-format -msgid "Protected {target}" -msgstr "" - -#: src/rc_formatters.py:991 -#, python-brace-format -msgid "Changed protection level for {article}" -msgstr "" - -#: src/rc_formatters.py:997 -#, python-brace-format -msgid "Removed protection from {article}" -msgstr "" - -#: src/rc_formatters.py:1001 -#, python-brace-format -msgid "Changed visibility of revision on page {article} " -msgid_plural "Changed visibility of {amount} revisions on page {article} " -msgstr[0] "" - -#: src/rc_formatters.py:1013 -#, python-brace-format -msgid "Imported {article} with {count} revision" -msgid_plural "Imported {article} with {count} revisions" -msgstr[0] "" - -#: src/rc_formatters.py:1018 -#, python-brace-format -msgid "Restored {article}" -msgstr "" - -#: src/rc_formatters.py:1021 -msgid "Changed visibility of log events" -msgstr "" - -#: src/rc_formatters.py:1031 -#, python-brace-format -msgid "Imported {article} with {count} revision from \"{source}\"" -msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "" - -#: src/rc_formatters.py:1036 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "" - -#: src/rc_formatters.py:1039 -#, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "" - -#: src/rc_formatters.py:1042 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "" - -#: src/rc_formatters.py:1046 -msgid "Created account automatically" -msgstr "" - -#: src/rc_formatters.py:1049 src/rc_formatters.py:1058 -msgid "Created account" -msgstr "" - -#: src/rc_formatters.py:1052 -#, python-brace-format -msgid "Created account {article}" -msgstr "" - -#: src/rc_formatters.py:1055 -#, python-brace-format -msgid "Created account {article} and password was sent by email" -msgstr "" - -#: src/rc_formatters.py:1061 -msgid "Added an entry to the interwiki table" -msgstr "" - -#: src/rc_formatters.py:1062 src/rc_formatters.py:1068 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "" - -#: src/rc_formatters.py:1067 -msgid "Edited an entry in interwiki table" -msgstr "" - -#: src/rc_formatters.py:1073 -msgid "Deleted an entry in interwiki table" -msgstr "" - -#: src/rc_formatters.py:1074 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "" - -#: src/rc_formatters.py:1077 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "" - -#: src/rc_formatters.py:1078 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "" - -#: src/rc_formatters.py:1083 -#, python-brace-format -msgid "Created the page {article} using a non-default content model" -msgstr "" - -#: src/rc_formatters.py:1084 -#, python-brace-format -msgid "Created with model {new}: {reason}" -msgstr "" - -#: src/rc_formatters.py:1087 +#: extensions/base/sprite.py:37 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "" -#: src/rc_formatters.py:1090 +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" + +#: extensions/base/sprite.py:60 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "" -#: src/rc_formatters.py:1093 +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" + +#: extensions/base/sprite.py:79 #, python-brace-format msgid "Edited the slice for {article}" msgstr "" -#: src/rc_formatters.py:1099 -#, python-brace-format -msgid "Created the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1103 -#, python-brace-format -msgid "Deleted the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1110 -#, python-brace-format -msgid "Recreated the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1117 -#, python-brace-format -msgid "Replaced the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1121 -#, python-brace-format -msgid "Created the tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1125 -#, python-brace-format -msgid "Deleted the tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1127 -msgid "Removed from" -msgstr "" - -#: src/rc_formatters.py:1127 -msgid "{} revision or log entry" -msgid_plural "{} revisions and/or log entries" -msgstr[0] "" - -#: src/rc_formatters.py:1131 -#, python-brace-format -msgid "Activated the tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1134 -#, python-brace-format -msgid "Deactivated the tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1137 -msgid "Changed wiki settings" -msgstr "" - -#: src/rc_formatters.py:1141 -#, python-brace-format -msgid "Deleted a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1144 -#, python-brace-format -msgid "Locked a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1147 -#, python-brace-format -msgid "Modified \"{namespace_name}\" namespace" -msgstr "" - -#: src/rc_formatters.py:1149 src/rc_formatters.py:1154 -msgid "Wiki" -msgstr "" - -#: src/rc_formatters.py:1151 -#, python-brace-format -msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "" - -#: src/rc_formatters.py:1157 -#, python-brace-format -msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "" - -#: src/rc_formatters.py:1160 -#, python-brace-format -msgid "Undeleted a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1163 -#, python-brace-format -msgid "Unlocked a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1166 -#, python-brace-format -msgid "Generated {file} dump" -msgstr "" - -#: src/rc_formatters.py:1169 -#, python-brace-format -msgid "Deleted {file} dump" -msgstr "" - -#: src/rc_formatters.py:1177 -#, python-brace-format -msgid "Marked \"{article}\" for translation" -msgstr "" - -#: src/rc_formatters.py:1180 -#, python-brace-format -msgid "Removed \"{article}\" from the translation system" -msgstr "" - -#: src/rc_formatters.py:1183 -#, python-brace-format -msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1186 -#, python-brace-format -msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1189 -#, python-brace-format -msgid "Completed deletion of translatable page \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1192 +#: extensions/base/sprite.py:86 #, python-brace-format msgid "" -"Failed to delete \"{article}\" which belongs to translatable page " -"\"{target}\"" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" -#: src/rc_formatters.py:1195 #, python-brace-format -msgid "Completed deletion of translation page \"{article}\"" -msgstr "" +#~ msgid "for {num} {translated_length}" +#~ msgstr "時長為{num} {translated_length}" -#: src/rc_formatters.py:1198 -#, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1201 -#, python-brace-format -msgid "Encouraged translation of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1204 -#, python-brace-format -msgid "Discouraged translation of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1210 -#, python-brace-format -msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1212 -#, python-brace-format -msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1214 -#, python-brace-format -msgid "Removed priority languages from \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1217 -#, python-brace-format -msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1220 -#, python-brace-format -msgid "" -"Removed translatable page \"{article}\" from aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1227 -#, python-brace-format -msgid "Reviewed translation \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1230 -#, python-brace-format -msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1232 -msgid "Old state" -msgstr "" - -#: src/rc_formatters.py:1233 -msgid "New state" -msgstr "" - -#: src/rc_formatters.py:1242 -#, python-brace-format -msgid "Changed the language of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1243 -msgid "Old language" -msgstr "" - -#: src/rc_formatters.py:1244 -msgid "New language" -msgstr "" - -#: src/rc_formatters.py:1248 -#, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" - -#: src/rc_formatters.py:1250 -#, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "" - -#: src/rc_formatters.py:1254 -msgid "Action has been hidden by administration" -msgstr "" - -#: src/rc_formatters.py:1288 -msgid "**Added**: " -msgstr "" - -#: src/rc_formatters.py:1288 -msgid " and {} more\n" -msgstr "" - -#: src/rc_formatters.py:1289 -msgid "**Removed**: " -msgstr "" - -#: src/rc_formatters.py:1289 -msgid " and {} more" -msgstr "" - -#: src/rc_formatters.py:1290 -msgid "Changed categories" -msgstr "" +#~ msgid "until {}" +#~ msgstr "直到{}" diff --git a/locale/zh-hant/LC_MESSAGES/misc.po b/locale/zh-hant/LC_MESSAGES/misc.po index 21dcb90..a536b7f 100644 --- a/locale/zh-hant/LC_MESSAGES/misc.po +++ b/locale/zh-hant/LC_MESSAGES/misc.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-28 23:45+0100\n" +"POT-Creation-Date: 2021-05-18 13:47+0200\n" "PO-Revision-Date: 2020-08-16 19:13+0000\n" "Last-Translator: Winston Sung <>\n" "Language-Team: Chinese (Traditional) \n" "Language-Team: Chinese (Traditional) \n" "Language-Team: Chinese (Traditional) Date: Tue, 18 May 2021 13:59:57 +0200 Subject: [PATCH 098/173] Updated translation files with some more imported strings from rcgcdw.py --- locale/de/LC_MESSAGES/formatters.po | 146 ++++++-- locale/fr/LC_MESSAGES/formatters.po | 147 ++++++-- locale/hi/LC_MESSAGES/formatters.po | 444 ++++++++++++++++++----- locale/lol/LC_MESSAGES/formatters.po | 75 +++- locale/pl/LC_MESSAGES/formatters.po | 170 +++++++-- locale/pt-br/LC_MESSAGES/formatters.po | 149 ++++++-- locale/ru/LC_MESSAGES/formatters.po | 166 +++++++-- locale/templates/formatters.pot | 2 +- locale/templates/misc.pot | 2 +- locale/templates/rcgcdw.pot | 2 +- locale/templates/redaction.pot | 2 +- locale/uk/LC_MESSAGES/formatters.po | 166 +++++++-- locale/zh-hans/LC_MESSAGES/formatters.po | 122 ++++++- locale/zh-hant/LC_MESSAGES/formatters.po | 116 +++++- 14 files changed, 1437 insertions(+), 272 deletions(-) diff --git a/locale/de/LC_MESSAGES/formatters.po b/locale/de/LC_MESSAGES/formatters.po index e8634d9..6244079 100644 --- a/locale/de/LC_MESSAGES/formatters.po +++ b/locale/de/LC_MESSAGES/formatters.po @@ -1,3 +1,4 @@ +# #-#-#-#-# formatters.po #-#-#-#-# # #-#-#-#-# discussion_formatters.po #-#-#-#-# # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER @@ -9,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"POT-Creation-Date: 2021-05-18 13:59+0200\n" "PO-Revision-Date: 2020-12-29 15:21+0000\n" "Last-Translator: MarkusRost \n" "Language-Team: German \n" "Language-Team: \n" @@ -22,6 +28,13 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# rcgcdw.po #-#-#-#-#\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.2.1\n" +"Generated-By: pygettext.py 1.5\n" +"X-Poedit-Basepath: ../../..\n" +"X-Poedit-SearchPath-0: rcgcdw.pot\n" +"#-#-#-#-# formatters.po #-#-#-#-#\n" "#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" "X-Generator: Poedit 2.3\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -735,43 +748,43 @@ msgstr "Édition de la règle {number} du filtre anti-abus" #: extensions/base/mediawiki.py:37 msgid "director" -msgstr "" +msgstr "Directeur" #: extensions/base/mediawiki.py:37 msgid "bot" -msgstr "" +msgstr "Robot" #: extensions/base/mediawiki.py:37 msgid "editor" -msgstr "" +msgstr "editor" #: extensions/base/mediawiki.py:37 msgid "directors" -msgstr "" +msgstr "Directeur" #: extensions/base/mediawiki.py:37 msgid "sysop" -msgstr "" +msgstr "Administrateur" #: extensions/base/mediawiki.py:37 msgid "bureaucrat" -msgstr "" +msgstr "Bureaucrate" #: extensions/base/mediawiki.py:37 msgid "reviewer" -msgstr "" +msgstr "reviewer" #: extensions/base/mediawiki.py:38 msgid "autoreview" -msgstr "" +msgstr "autoreview" #: extensions/base/mediawiki.py:38 msgid "autopatrol" -msgstr "" +msgstr "autopatrol" #: extensions/base/mediawiki.py:38 msgid "wiki_guardian" -msgstr "" +msgstr "Gardien du wiki" #: extensions/base/mediawiki.py:71 msgid "(N!) " @@ -1032,26 +1045,26 @@ msgstr "" #: extensions/base/mediawiki.py:584 msgid "year" msgid_plural "years" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "année" +msgstr[1] "années" #: extensions/base/mediawiki.py:584 msgid "day" msgid_plural "days" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "jour" +msgstr[1] "jours" #: extensions/base/mediawiki.py:584 msgid "hour" msgid_plural "hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "heure" +msgstr[1] "heures" #: extensions/base/mediawiki.py:585 msgid "minute" msgid_plural "minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "minute" +msgstr[1] "minutes" #: extensions/base/mediawiki.py:590 #, python-brace-format @@ -1469,6 +1482,99 @@ msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "Création d'une feuille de sprite pour {article}" +#~ msgid "Daily overview" +#~ msgstr "Résumé de la journée" + +#~ msgid "No activity" +#~ msgstr "Aucune activité" + +#~ msgid " ({} action)" +#~ msgid_plural " ({} actions)" +#~ msgstr[0] " ({} action)" +#~ msgstr[1] " ({} actions)" + +#~ msgid " ({} edit)" +#~ msgid_plural " ({} edits)" +#~ msgstr[0] " ({} modification)" +#~ msgstr[1] " ({} modifications)" + +#~ msgid " UTC ({} action)" +#~ msgid_plural " UTC ({} actions)" +#~ msgstr[0] " UTC ({} action)" +#~ msgstr[1] " UTC ({} actions)" + +#~ msgid "But nobody came" +#~ msgstr "Aucune activité" + +#~ msgid "Most active user" +#~ msgid_plural "Most active users" +#~ msgstr[0] "Membre le plus actif" +#~ msgstr[1] "Membres les plus actifs" + +#~ msgid "Most edited article" +#~ msgid_plural "Most edited articles" +#~ msgstr[0] "Article le plus modifié" +#~ msgstr[1] "Articles les plus modifiés" + +#~ msgid "Edits made" +#~ msgstr "Modifications effectuées" + +#~ msgid "New files" +#~ msgstr "Nouveaux fichiers" + +#~ msgid "Admin actions" +#~ msgstr "Actions d'administrateur" + +#~ msgid "Bytes changed" +#~ msgstr "Octets modifiés" + +#~ msgid "New articles" +#~ msgstr "Nouveaux articles" + +#~ msgid "Unique contributors" +#~ msgstr "Contributeurs uniques" + +#~ msgid "Most active hour" +#~ msgid_plural "Most active hours" +#~ msgstr[0] "Heure la plus active" +#~ msgstr[1] "Heures les plus actives" + +#~ msgid "Day score" +#~ msgstr "Score du jour" + +#~ msgid "No description provided" +#~ msgstr "Aucune description" + +#~ msgid "second" +#~ msgid_plural "seconds" +#~ msgstr[0] "seconde" +#~ msgstr[1] "secondes" + +#~ msgid "week" +#~ msgid_plural "weeks" +#~ msgstr[0] "semaine" +#~ msgstr[1] "semaines" + +#~ msgid "month" +#~ msgid_plural "months" +#~ msgstr[0] "mois" +#~ msgstr[1] "mois" + +#~ msgid "millennium" +#~ msgid_plural "millennia" +#~ msgstr[0] "millénaire" +#~ msgstr[1] "millénaires" + +#~ msgid "decade" +#~ msgid_plural "decades" +#~ msgstr[0] "décennie" +#~ msgstr[1] "décennies" + +#~ msgid "century" +#~ msgid_plural "centuries" +#~ msgstr[0] "centenaire" +#~ msgstr[1] "centenaires" + #, fuzzy, python-brace-format #~ msgid "" #~ "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" @@ -1548,9 +1654,6 @@ msgstr "Création d'une feuille de sprite pour {article}" #~ "[{article}]({article_url}){comment}" #~ msgstr "Création d'une feuille de sprite pour {article}" -#~ msgid "No description provided" -#~ msgstr "Aucune description" - #, python-brace-format #~ msgid "Left a comment on {target}'s profile" #~ msgstr "Ajout d'un commentaire sur le profil de {target}" diff --git a/locale/hi/LC_MESSAGES/formatters.po b/locale/hi/LC_MESSAGES/formatters.po index fe177f0..3f02dd7 100644 --- a/locale/hi/LC_MESSAGES/formatters.po +++ b/locale/hi/LC_MESSAGES/formatters.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"POT-Creation-Date: 2021-05-18 13:59+0200\n" "PO-Revision-Date: 2020-12-30 13:26+0000\n" "Last-Translator: Creeper \n" "Language-Team: Hindi 1;\n" +"X-Generator: Weblate 4.2.1\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" "#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.2.1\n" @@ -667,8 +671,13 @@ msgid "Warning issued" msgstr "सूचना दे दी गई है" #: extensions/base/abusefilter.py:29 +#, fuzzy msgid "**Blocked user**" -msgstr "**ब्लॉक्ड सदस्य**" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"**सदस्य को ब्लॉक कर दिया गया है**\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"**ब्लॉक्ड सदस्य**" #: extensions/base/abusefilter.py:29 msgid "Tagged the edit" @@ -775,43 +784,43 @@ msgstr "" #: extensions/base/mediawiki.py:37 msgid "director" -msgstr "" +msgstr "निर्देशक" #: extensions/base/mediawiki.py:37 msgid "bot" -msgstr "" +msgstr "बॉट" #: extensions/base/mediawiki.py:37 msgid "editor" -msgstr "" +msgstr "सम्पादक" #: extensions/base/mediawiki.py:37 msgid "directors" -msgstr "" +msgstr "निर्देशक" #: extensions/base/mediawiki.py:37 msgid "sysop" -msgstr "" +msgstr "साइसॉप" #: extensions/base/mediawiki.py:37 msgid "bureaucrat" -msgstr "" +msgstr "ब्यूरोक्रैट" #: extensions/base/mediawiki.py:37 msgid "reviewer" -msgstr "" +msgstr "रिव्युअर" #: extensions/base/mediawiki.py:38 msgid "autoreview" -msgstr "" +msgstr "ऑटोरिव्यु" #: extensions/base/mediawiki.py:38 msgid "autopatrol" -msgstr "" +msgstr "ऑटोपैट्रॉल" #: extensions/base/mediawiki.py:38 msgid "wiki_guardian" -msgstr "" +msgstr "विकी_संरक्षक" #: extensions/base/mediawiki.py:71 msgid "(N!) " @@ -924,11 +933,15 @@ msgid "Deleted redirect {article} by overwriting" msgstr "ओवर्राइट करके रेडिरेक्ट {article} को डिलीट किया" #: extensions/base/mediawiki.py:308 -#, python-brace-format +#, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" "({page_link}){comment}" msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url} ने [{page}]({page_link}){comment} को ओवर्राइट करके " +"रेडिरेक्ट को डिलीट किया\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" "[{author}]({author_url}) ने [{page}]({page_link}){comment} को ओवर्राइट करके " "रेडिरेक्ट को डिलीट किया" @@ -960,7 +973,7 @@ msgstr[0] "पृष्ठ {article} पर रिवीशन के दृश msgstr[1] "पृष्ठ {article} पर {amount} रिवीशनों के दृश्यता को बदला " #: extensions/base/mediawiki.py:383 -#, python-brace-format +#, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" "({article_url}){comment}" @@ -968,9 +981,17 @@ msgid_plural "" "[{author}]({author_url}) changed visibility of {amount} revisions on page " "[{article}]({article_url}){comment}" msgstr[0] "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url} ने [{article}]({article_url}) पर रिवीशन के दृश्यता को " +"बदल दिया{comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" "[{author}]({author_url}) ने [{article}]({article_url}) पर रिवीशन के दृश्यता को " "बदल दिया{comment}" msgstr[1] "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url} ने [{article}]({article_url}) पर {amount} रिवीशनों के " +"दृश्यता को बदल दिया{comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" "[{author}]({author_url}) ने [{article}]({article_url}) पर {amount} रिवीशनों के " "दृश्यता को बदल दिया{comment}" @@ -1010,11 +1031,15 @@ msgid "Moved {redirect}{article} to {title} over redirect" msgstr "{redirect}{article} को रेडिरेक्ट के साथ {title} पर ले जाया गया है" #: extensions/base/mediawiki.py:448 -#, python-brace-format +#, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " "[{target}]({target_url}) {made_a_redirect}{comment}" msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) ने {redirect}*{article}* को रेडिरेक्ट के साथ [{target}]" +"({target_url}) {made_a_redirect} पर मूव किया{comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" "[{author}]({author_url}) ने {redirect}*{article}* को रेडिरेक्ट के साथ [{target}]" "({target_url}) {made_a_redirect}{comment} पर मूव किया" @@ -1090,26 +1115,26 @@ msgstr "" #: extensions/base/mediawiki.py:584 msgid "year" msgid_plural "years" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "साल" +msgstr[1] "साल" #: extensions/base/mediawiki.py:584 msgid "day" msgid_plural "days" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "दिन" +msgstr[1] "दिन" #: extensions/base/mediawiki.py:584 msgid "hour" msgid_plural "hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "घंटा" +msgstr[1] "घंटे" #: extensions/base/mediawiki.py:585 msgid "minute" msgid_plural "minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "मिनट" +msgstr[1] "मिनट" #: extensions/base/mediawiki.py:590 #, python-brace-format @@ -1574,24 +1599,118 @@ msgid "" msgstr "" "[{author}]({author_url}) ने [{article}]({article_url}) के स्लाइस को सम्पादित किया" -#, fuzzy, python-brace-format -#~ msgid "" -#~ "Unknown event `{event}` by [{author}]({author_url}), report it on the " -#~ "[support server](<{support}>)." -#~ msgstr "" -#~ "#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" -#~ "[{author}]({author_url}) द्वारा अनजान घटना `{event}`, [सहायता सर्वर]" -#~ "(<{support}>) पर रिपोर्ट करें।\n" -#~ "#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -#~ "[{author}]({author_url}) द्वारा अनजान घटना `{event}`, इसे [सहायता सर्वर]" -#~ "(<{support}>) पर रिपोर्ट करें।" +#, python-brace-format +#~ msgid "{value} (avg. {avg})" +#~ msgstr "{value} (औसत {avg})" + +#~ msgid "Daily overview" +#~ msgstr "दैनिक अवलोकन" + +#~ msgid "No activity" +#~ msgstr "कोई ऐक्टिविटी नहीं थी" + +#~ msgid " ({} action)" +#~ msgid_plural " ({} actions)" +#~ msgstr[0] " ({} एक्शन)" +#~ msgstr[1] " ({} एक्शन)" + +#~ msgid " ({} edit)" +#~ msgid_plural " ({} edits)" +#~ msgstr[0] " ({} सम्पादना)" +#~ msgstr[1] " ({} सम्पादनाएँ)" + +#~ msgid " UTC ({} action)" +#~ msgid_plural " UTC ({} actions)" +#~ msgstr[0] " UTC ({} एक्शन)" +#~ msgstr[1] " UTC ({} एक्शन)" + +#~ msgid "But nobody came" +#~ msgstr "पर कोई नहीं आया" + +#~ msgid "Most active user" +#~ msgid_plural "Most active users" +#~ msgstr[0] "सबसे सक्रीय सदस्य" +#~ msgstr[1] "सबसे सक्रीय सदस्य" + +#~ msgid "Most edited article" +#~ msgid_plural "Most edited articles" +#~ msgstr[0] "सबसे ज़्यादा सम्पादित किया गया आर्टिकल" +#~ msgstr[1] "सबसे ज़्यादा सम्पादित किए गए आर्टिकल" + +#~ msgid "Edits made" +#~ msgstr "दिए गए सम्पादनाएँ" + +#~ msgid "New files" +#~ msgstr "नए चित्र" + +#~ msgid "Admin actions" +#~ msgstr "एडमिन एक्शन" + +#~ msgid "Bytes changed" +#~ msgstr "बदले गए बाइट" + +#~ msgid "New articles" +#~ msgstr "नए आर्टिकल" + +#~ msgid "Unique contributors" +#~ msgstr "विशेष सदस्य" + +#~ msgid "Most active hour" +#~ msgid_plural "Most active hours" +#~ msgstr[0] "सबसे सक्रीय घंटा" +#~ msgstr[1] "सबसे सक्रीय घंटे" + +#~ msgid "Day score" +#~ msgstr "दिन का स्कोर" + +#~ msgid "No description provided" +#~ msgstr "कोई विवरण नहीं दिया गया" + +#~ msgid "second" +#~ msgid_plural "seconds" +#~ msgstr[0] "सेकंड" +#~ msgstr[1] "सेकंड" + +#~ msgid "week" +#~ msgid_plural "weeks" +#~ msgstr[0] "हफ्ता" +#~ msgstr[1] "हफ्तें" + +#~ msgid "month" +#~ msgid_plural "months" +#~ msgstr[0] "महीना" +#~ msgstr[1] "महीनें" + +#~ msgid "millennium" +#~ msgid_plural "millennia" +#~ msgstr[0] "सहस्त्राब्द" +#~ msgstr[1] "सहस्त्राब्द" + +#~ msgid "decade" +#~ msgid_plural "decades" +#~ msgstr[0] "दशक" +#~ msgstr[1] "दशक" + +#~ msgid "century" +#~ msgid_plural "centuries" +#~ msgstr[0] "शताब्दी" +#~ msgstr[1] "शताब्दियाँ" #, python-brace-format -#~ msgid "Unknown event `{event}`" -#~ msgstr "अनजान घटना `{event}`" +#~ msgid "" +#~ "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({bold}" +#~ "{sign}{edit_size}{bold})" +#~ msgstr "" +#~ "[{author}]({author_url}) ने [{article}]({edit_link}){comment} ({bold}{sign}" +#~ "{edit_size}{bold}) को सम्पादित किया" -#~ msgid "Report this on the support server" -#~ msgstr "इसे सहायता सर्वर पर रिपोर्ट करें" +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({bold}" +#~ "{sign}{edit_size}{bold})" +#~ msgstr "" +#~ "[{author}]({author_url}) ने [{article}]({edit_link}){comment} ({bold}{sign}" +#~ "{edit_size}{bold}) बनाया" #, python-brace-format #~ msgid "for {num} {translated_length}" @@ -1619,11 +1738,15 @@ msgstr "" #~ "[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) पर " #~ "जवाब दिया" -#, python-brace-format +#, fuzzy, python-brace-format #~ msgid "" #~ "[{author}]({author_url}) replied to a [comment]({comment}) on their own " #~ "profile" #~ msgstr "" +#~ "#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +#~ "[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट] ({comment}) पर जवाब " +#~ "दिया\n" +#~ "#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" #~ "[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) पर जवाब दिया" #, python-brace-format @@ -1651,49 +1774,135 @@ msgstr "" #~ msgstr "[{author}]({author_url}) ने अपने प्रॉफाइल के एक कमेंट को पर्ज किया" #, python-brace-format -#~ msgid "" -#~ "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " -#~ "profile" +#~ msgid "[{author}]({author_url}) deleted a comment on {target}'s profile" #~ msgstr "" -#~ "[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) को " -#~ "डिलीट किया" +#~ "[{author}]({author_url}) ने {target} के प्रॉफाइल के एक कमेंट को डिलीट किया" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on their own profile" +#~ msgstr "[{author}]({author_url}) ने अपने प्रॉफाइल पर एक कमेंट को डिलीट किया" #, python-brace-format #~ msgid "" -#~ "[{author}]({author_url}) deleted a [comment]({comment}) on their own " -#~ "profile" +#~ "[{author}]({author_url}) edited the {field} on {target}'s profile. " +#~ "*({desc})*" #~ msgstr "" -#~ "[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) को डिलीट किया" +#~ "[{author}]({author_url}) ने {target} के प्रॉफाइल पर {field} को सम्पादित किया। " +#~ "*({desc})*" #, python-brace-format #~ msgid "" -#~ "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -#~ "profile. *({desc})*" +#~ "[{author}]({author_url}) edited the {field} on their own profile. " +#~ "*({desc})*" #~ msgstr "" -#~ "[{author}]({author_url}) ने [{target}]({target_url}) के प्रॉफाइल पर {field} " -#~ "को सम्पादित किया। *({desc})*" - -#, python-brace-format -#~ msgid "" -#~ "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -#~ "profile. *({desc})*" -#~ msgstr "" -#~ "[{author}]({author_url}) ने [अपने]({target_url}) प्रॉफाइल पर {field} को " -#~ "सम्पादित किया। *({desc})*" +#~ "[{author}]({author_url}) ने अपने प्रॉफाइल पर {field} को सम्पादित किया। " +#~ "*({desc})*" #~ msgid "none" #~ msgstr "कुछ नहीं" #, python-brace-format #~ msgid "" -#~ "[{author}]({author_url}) completed deletion of translatable page " -#~ "[{article}]({article_url}){comment}" +#~ "[{author}]({author_url}) changed group membership for [{target}]" +#~ "({target_url}) from {old_groups} to {new_groups}{comment}" #~ msgstr "" -#~ "[{author}]({author_url}) ने अनुवाद लायक पृष्ठ [{article}]({article_url}) के " -#~ "डिलीशन को पूरा किया{comment}" +#~ "[{author}]({author_url}) ने [{target}]({target_url}) के लिए ग्रुप " +#~ "{old_groups} से {new_groups} में बदला{comment}" -#~ msgid "No description provided" -#~ msgstr "कोई विवरण नहीं दिया गया" +#, python-brace-format +#~ msgid "" +#~ "{author} autopromoted [{target}]({target_url}) from {old_groups} to " +#~ "{new_groups}{comment}" +#~ msgstr "" +#~ "{author} ने [{target}]({target_url}) को {old_groups} से {new_groups} में " +#~ "ऑटोप्रमोट किया{comment}" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) imported interwiki{comment}" +#~ msgstr "[{author}]({author_url}) ने इंटरविकी इम्पोर्ट किया{comment}" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) deleted an entry in [interwiki table]" +#~ "({table_url})" +#~ msgstr "" +#~ "[{author}]({author_url}) ने [इंटरविकी टेबल]({table_url}) पर एक एंट्री को डिलीट " +#~ "किया" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" +#~ msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" बनाया" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" +#~ msgstr "" +#~ "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिलीट किया" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" +#~ msgstr "" +#~ "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को ऐक्टिवेट किया" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" +#~ msgstr "" +#~ "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिऐक्टिवेट किया" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) changed wiki settings ({reason})" +#~ msgstr "[{author}]({author_url}) ने विकी सेटिंग्स को बदला ({reason})" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}* ({comment})" +#~ msgstr "" +#~ "[{author}]({author_url}) ने विकी *{wiki_name}* को डिलीट किया ({comment})" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}* ({comment})" +#~ msgstr "" +#~ "[{author}]({author_url}) ने विकी *{wiki_name}* ({comment}) के लॉक किया" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) modified a namespace *{namespace_name}* on " +#~ "*{wiki_name}* ({comment})" +#~ msgstr "" +#~ "[{author}]({author_url}) ने *{wiki_name}* पर एक नेमस्पेस *{namespace_name}* " +#~ "को मॉडिफाइ किया ({comment})" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +#~ "*{wiki_name}* ({comment})" +#~ msgstr "" +#~ "[{author}]({author_url}) ने *{wiki_name}* पर नेमस्पेस *{namespace_name}* को " +#~ "डिलीट किया ({comment})" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) modified user group *{group_name}* ({comment})" +#~ msgstr "" +#~ "[{author}]({author_url}) ने यूज़र ग्रुप *{group_name}* को मॉडिफाइ किया " +#~ "({comment})" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}* ({comment})" +#~ msgstr "" +#~ "[{author}]({author_url}) ने एक विकी *{wiki_name}* को रिस्टोर किया " +#~ "({comment})" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}* ({comment})" +#~ msgstr "" +#~ "[{author}]({author_url}) ने एक विकी *{wiki_name}* को अनलॉक किया ({comment})" + +#, python-brace-format +#~ msgid "" +#~ "Unknown event `{event}` by [{author}]({author_url}), report it on the " +#~ "[support server](<{support}>)." +#~ msgstr "" +#~ "[{author}]({author_url}) द्वारा अनजान घटना `{event}`, इसे [सहायता सर्वर]" +#~ "(<{support}>) पर रिपोर्ट करें।" #~ msgid "unknown expiry time" #~ msgstr "अनजान समय सीमा" @@ -1738,20 +1947,93 @@ msgstr "" #~ msgid "Purged a comment on {target}'s profile" #~ msgstr "{target} के प्रॉफाइल के एक कमेंट को पर्ज किया" -#~ msgid "Purged a comment on their own profile" -#~ msgstr "अपने प्रॉफाइल के एक कमेंट को पर्ज किया" - #, python-brace-format #~ msgid "Deleted a comment on {target}'s profile" #~ msgstr "{target} के प्रॉफाइल के एक कमेंट को सम्पादित किया" -#~ msgid "Deleted a comment on their own profile" -#~ msgstr "अपने प्रॉफाइल के एक कमेंट को डिलीट किया" - #, python-brace-format #~ msgid "Groups changed from {old_groups} to {new_groups}{reason}" #~ msgstr "ग्रुपों को {old_groups} से {new_groups} में बदला गया{reason}" +#~ msgid "Imported interwiki" +#~ msgstr "इंटरविकी इम्पोर्ट किया गया" + +#, python-brace-format +#~ msgid "Created a tag \"{tag}\"" +#~ msgstr "टैग \"{tag}\" बनाया गया" + +#, python-brace-format +#~ msgid "Deleted a tag \"{tag}\"" +#~ msgstr "टैग \"{tag}\" को डिलीट किया गया" + +#, python-brace-format +#~ msgid "Activated a tag \"{tag}\"" +#~ msgstr "टैग \"{tag}\" को ऐक्टिवेट किया गया" + +#, python-brace-format +#~ msgid "Deactivated a tag \"{tag}\"" +#~ msgstr "टैग \"{tag}\" को डिऐक्टिवेट किया गया" + +#, python-brace-format +#~ msgid "Modified a \"{namespace_name}\" namespace" +#~ msgstr "\"{namespace_name}\" नेमस्पेस को मॉडिफाइ किया गया" + +#, python-brace-format +#~ msgid "Restored a \"{wiki}\" wiki" +#~ msgstr "\"{wiki}\" विकी को रिस्टोर किया गया" + +#, python-brace-format +#~ msgid "Unknown event `{event}`" +#~ msgstr "अनजान घटना `{event}`" + +#~ msgid "Report this on the support server" +#~ msgstr "इसे सहायता सर्वर पर रिपोर्ट करें" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) को " +#~ "डिलीट किया" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) deleted a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) को डिलीट किया" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) ने [{target}]({target_url}) के प्रॉफाइल पर {field} " +#~ "को सम्पादित किया। *({desc})*" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +#~ "profile. *({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) ने [अपने]({target_url}) प्रॉफाइल पर {field} को " +#~ "सम्पादित किया। *({desc})*" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) completed deletion of translatable page " +#~ "[{article}]({article_url}){comment}" +#~ msgstr "" +#~ "[{author}]({author_url}) ने अनुवाद लायक पृष्ठ [{article}]({article_url}) के " +#~ "डिलीशन को पूरा किया{comment}" + +#~ msgid "Purged a comment on their own profile" +#~ msgstr "अपने प्रॉफाइल के एक कमेंट को पर्ज किया" + +#~ msgid "Deleted a comment on their own profile" +#~ msgstr "अपने प्रॉफाइल के एक कमेंट को डिलीट किया" + #, python-brace-format #~ msgid "Completed deletion of translatable page \"{article}\"" #~ msgstr "अनुवाद-लायक पृष्ठ \"{article}\" के डिलीशन पृष्ठ को पूरा किया" @@ -1760,23 +2042,3 @@ msgstr "" #~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" #~ msgstr "" #~ "[{author}]({author_url}) ने एक विकी *{wiki_name}* को रिस्टोर किया{comment}" - -#, python-brace-format -#~ msgid "Restored a \"{wiki}\" wiki" -#~ msgstr "\"{wiki}\" विकी को रिस्टोर किया गया" - -#, python-brace-format -#~ msgid "[{author}]({author_url}) deleted a comment on {target}'s profile" -#~ msgstr "" -#~ "[{author}]({author_url}) ने {target} के प्रॉफाइल के एक कमेंट को डिलीट किया" - -#, python-brace-format -#~ msgid "[{author}]({author_url}) deleted a comment on their own profile" -#~ msgstr "[{author}]({author_url}) ने अपने प्रॉफाइल पर एक कमेंट को डिलीट किया" - -#, python-brace-format -#~ msgid "[{author}]({author_url}) imported interwiki{comment}" -#~ msgstr "[{author}]({author_url}) ने इंटरविकी इम्पोर्ट किया{comment}" - -#~ msgid "Imported interwiki" -#~ msgstr "इंटरविकी इम्पोर्ट किया गया" diff --git a/locale/lol/LC_MESSAGES/formatters.po b/locale/lol/LC_MESSAGES/formatters.po index c1b85ae..8190fb1 100644 --- a/locale/lol/LC_MESSAGES/formatters.po +++ b/locale/lol/LC_MESSAGES/formatters.po @@ -1,3 +1,10 @@ +# #-#-#-#-# rcgcdw.po (PACKAGE VERSION) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# formatters.po (RcGcDw) #-#-#-#-# # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the RcGcDw package. @@ -8,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"POT-Creation-Date: 2021-05-18 13:59+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -16,6 +23,10 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# rcgcdw.po (PACKAGE VERSION) #-#-#-#-#\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.1.1\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" "#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" "#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" @@ -706,31 +717,31 @@ msgstr "" #: extensions/base/mediawiki.py:37 msgid "bot" -msgstr "" +msgstr "robut" #: extensions/base/mediawiki.py:37 msgid "editor" -msgstr "" +msgstr "editur" #: extensions/base/mediawiki.py:37 msgid "directors" -msgstr "" +msgstr "directurs" #: extensions/base/mediawiki.py:37 msgid "sysop" -msgstr "" +msgstr "admen" #: extensions/base/mediawiki.py:37 msgid "bureaucrat" -msgstr "" +msgstr "burocrat" #: extensions/base/mediawiki.py:37 msgid "reviewer" -msgstr "" +msgstr "reviver" #: extensions/base/mediawiki.py:38 msgid "autoreview" -msgstr "" +msgstr "autureviver" #: extensions/base/mediawiki.py:38 msgid "autopatrol" @@ -1418,3 +1429,51 @@ msgstr "" msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" + +#, python-brace-format +#~ msgid "{value} (avg. {avg})" +#~ msgstr "{value} (mor or less. {avg})" + +#~ msgid "Daily overview" +#~ msgstr "Morn' newz" + +#~ msgid "No activity" +#~ msgstr "No food" + +#~ msgid " ({} action)" +#~ msgid_plural " ({} actions)" +#~ msgstr[0] " ({} action)" +#~ msgstr[1] " ({} actionz)" + +#~ msgid " UTC ({} action)" +#~ msgid_plural " UTC ({} actions)" +#~ msgstr[0] " UTC ({} action)" +#~ msgstr[1] " UTC ({} actionz)" + +#~ msgid "But nobody came" +#~ msgstr "No one brot food 😾" + +#~ msgid "Most active user" +#~ msgid_plural "Most active users" +#~ msgstr[0] "Most skilld cat" +#~ msgstr[1] "Most skilld cats" + +#~ msgid "Edits made" +#~ msgstr "edtz did" + +#~ msgid "New files" +#~ msgstr "new picturz" + +#~ msgid "Location" +#~ msgstr "Der place" + +#~ msgid "About me" +#~ msgstr "Abot me" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" +#~ "{edit_size})" +#~ msgstr "" +#~ "[{author}]({author_url}) rearranged lettwers of [{article}]({edit_link})" +#~ "{comment} ({sign}{edit_size})" diff --git a/locale/pl/LC_MESSAGES/formatters.po b/locale/pl/LC_MESSAGES/formatters.po index e922654..d0b8ff8 100644 --- a/locale/pl/LC_MESSAGES/formatters.po +++ b/locale/pl/LC_MESSAGES/formatters.po @@ -1,3 +1,9 @@ +# #-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# formatters.po (RcGcDw) #-#-#-#-# # #-#-#-#-# discussion_formatters.po #-#-#-#-# # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER @@ -14,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"POT-Creation-Date: 2021-05-18 13:59+0200\n" "PO-Revision-Date: 2021-04-14 14:22+0000\n" "Last-Translator: Frisk The Evil Goat Overlord \n" "Language-Team: Polish =2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.2.1\n" +"Generated-By: pygettext.py 1.5\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" "#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" @@ -790,43 +802,43 @@ msgstr "" #: extensions/base/mediawiki.py:37 msgid "director" -msgstr "" +msgstr "Dyrektor" #: extensions/base/mediawiki.py:37 msgid "bot" -msgstr "" +msgstr "Bot" #: extensions/base/mediawiki.py:37 msgid "editor" -msgstr "" +msgstr "Redaktor" #: extensions/base/mediawiki.py:37 msgid "directors" -msgstr "" +msgstr "Dyrektorzy" #: extensions/base/mediawiki.py:37 msgid "sysop" -msgstr "" +msgstr "Administrator" #: extensions/base/mediawiki.py:37 msgid "bureaucrat" -msgstr "" +msgstr "Biurokrata" #: extensions/base/mediawiki.py:37 msgid "reviewer" -msgstr "" +msgstr "Przeglądający" #: extensions/base/mediawiki.py:38 msgid "autoreview" -msgstr "" +msgstr "Automatycznie przeglądający" #: extensions/base/mediawiki.py:38 msgid "autopatrol" -msgstr "" +msgstr "Automatycznie zatwierdzający" #: extensions/base/mediawiki.py:38 msgid "wiki_guardian" -msgstr "" +msgstr "Strażnik wiki" #: extensions/base/mediawiki.py:71 msgid "(N!) " @@ -1108,30 +1120,30 @@ msgstr "" #: extensions/base/mediawiki.py:584 msgid "year" msgid_plural "years" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "rok" +msgstr[1] "lata" +msgstr[2] "lat" #: extensions/base/mediawiki.py:584 msgid "day" msgid_plural "days" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "dzień" +msgstr[1] "dni" +msgstr[2] "dni" #: extensions/base/mediawiki.py:584 msgid "hour" msgid_plural "hours" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "godzina" +msgstr[1] "godziny" +msgstr[2] "godzin" #: extensions/base/mediawiki.py:585 msgid "minute" msgid_plural "minutes" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "minuta" +msgstr[1] "minuty" +msgstr[2] "minut" #: extensions/base/mediawiki.py:590 #, python-brace-format @@ -1599,6 +1611,115 @@ msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "[{author}]({author_url}) edytował(a) slice [{article}]({article_url})" +#, python-brace-format +#~ msgid "{value} (avg. {avg})" +#~ msgstr "{value} (średnio {avg})" + +#~ msgid "Daily overview" +#~ msgstr "Podsumowanie dnia" + +#~ msgid "No activity" +#~ msgstr "Brak aktywności" + +#~ msgid " ({} action)" +#~ msgid_plural " ({} actions)" +#~ msgstr[0] " ({} akcja)" +#~ msgstr[1] " ({} akcje)" +#~ msgstr[2] " ({} akcji)" + +#~ msgid " ({} edit)" +#~ msgid_plural " ({} edits)" +#~ msgstr[0] " ({} edycja)" +#~ msgstr[1] " ({} edycje)" +#~ msgstr[2] " ({} edycji)" + +#~ msgid " UTC ({} action)" +#~ msgid_plural " UTC ({} actions)" +#~ msgstr[0] " UTC ({} akcja)" +#~ msgstr[1] " UTC ({} akcje)" +#~ msgstr[2] " UTC ({} akcji)" + +#~ msgid "But nobody came" +#~ msgstr "Ale nikt nie przyszedł" + +#~ msgid "Most active user" +#~ msgid_plural "Most active users" +#~ msgstr[0] "Najbardziej aktywny użytkownik" +#~ msgstr[1] "Najbardziej aktywni użytkownicy" +#~ msgstr[2] "Najbardziej aktywni użytkownicy" + +#~ msgid "Most edited article" +#~ msgid_plural "Most edited articles" +#~ msgstr[0] "Najczęściej edytowany artykuł" +#~ msgstr[1] "Najczęściej edytowane artykuły" +#~ msgstr[2] "Najczęściej edytowane artykuły" + +#~ msgid "Edits made" +#~ msgstr "Wykonanych edycji" + +#~ msgid "New files" +#~ msgstr "Nowych plików" + +#~ msgid "Admin actions" +#~ msgstr "Akcji administratorskich" + +#~ msgid "Bytes changed" +#~ msgstr "Zmienionych bajtów" + +#~ msgid "New articles" +#~ msgstr "Nowych artykułów" + +#~ msgid "Unique contributors" +#~ msgstr "Unikalnych edytujących" + +#~ msgid "Most active hour" +#~ msgid_plural "Most active hours" +#~ msgstr[0] "Najbardziej aktywna godzina" +#~ msgstr[1] "Najbardziej aktywne godziny" +#~ msgstr[2] "Najbardziej aktywne godziny" + +#~ msgid "Day score" +#~ msgstr "Wynik dnia" + +#~ msgid "No description provided" +#~ msgstr "Nie podano opisu zmian" + +#~ msgid "second" +#~ msgid_plural "seconds" +#~ msgstr[0] "sekunda" +#~ msgstr[1] "sekundy" +#~ msgstr[2] "sekund" + +#~ msgid "week" +#~ msgid_plural "weeks" +#~ msgstr[0] "tydzień" +#~ msgstr[1] "tygodnie" +#~ msgstr[2] "tygodni" + +#~ msgid "month" +#~ msgid_plural "months" +#~ msgstr[0] "miesiąc" +#~ msgstr[1] "miesiące" +#~ msgstr[2] "miesięcy" + +#~ msgid "millennium" +#~ msgid_plural "millennia" +#~ msgstr[0] "tysiąclecie" +#~ msgstr[1] "tysiąclecia" +#~ msgstr[2] "tysiącleci" + +#~ msgid "decade" +#~ msgid_plural "decades" +#~ msgstr[0] "dekada" +#~ msgstr[1] "dekady" +#~ msgstr[2] "dekad" + +#~ msgid "century" +#~ msgid_plural "centuries" +#~ msgstr[0] "stulecie" +#~ msgstr[1] "stulecia" +#~ msgstr[2] "stuleci" + #, python-brace-format #~ msgid "" #~ "Unknown event `{event}` by [{author}]({author_url}), report it on the " @@ -1722,9 +1843,6 @@ msgstr "[{author}]({author_url}) edytował(a) slice [{article}]({article_url})" #~ "[{author}]({author_url}) zakończył(a) usuwanie tłumaczonej strony " #~ "[{article}]({article_url}){comment}" -#~ msgid "No description provided" -#~ msgstr "Nie podano opisu zmian" - #~ msgid "unknown expiry time" #~ msgstr "nieznany czas zakończenia" diff --git a/locale/pt-br/LC_MESSAGES/formatters.po b/locale/pt-br/LC_MESSAGES/formatters.po index 7c1e17a..07b979e 100644 --- a/locale/pt-br/LC_MESSAGES/formatters.po +++ b/locale/pt-br/LC_MESSAGES/formatters.po @@ -1,3 +1,10 @@ +# #-#-#-#-# rcgcdw.po #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# formatters.po #-#-#-#-# # #-#-#-#-# discussion_formatters.po #-#-#-#-# # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. @@ -14,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"POT-Creation-Date: 2021-05-18 13:59+0200\n" "PO-Revision-Date: 2020-12-29 15:21+0000\n" "Last-Translator: Eduaddad \n" "Language-Team: Portuguese (Brazil) 1;\n" +"X-Generator: Weblate 4.2.1\n" +"#-#-#-#-# formatters.po #-#-#-#-#\n" "#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 4.2.1\n" @@ -786,43 +797,43 @@ msgstr "" #: extensions/base/mediawiki.py:37 msgid "director" -msgstr "" +msgstr "diretor" #: extensions/base/mediawiki.py:37 msgid "bot" -msgstr "" +msgstr "robô" #: extensions/base/mediawiki.py:37 msgid "editor" -msgstr "" +msgstr "editor" #: extensions/base/mediawiki.py:37 msgid "directors" -msgstr "" +msgstr "diretores" #: extensions/base/mediawiki.py:37 msgid "sysop" -msgstr "" +msgstr "administrador" #: extensions/base/mediawiki.py:37 msgid "bureaucrat" -msgstr "" +msgstr "burocrata" #: extensions/base/mediawiki.py:37 msgid "reviewer" -msgstr "" +msgstr "revisor" #: extensions/base/mediawiki.py:38 msgid "autoreview" -msgstr "" +msgstr "revisor automático" #: extensions/base/mediawiki.py:38 msgid "autopatrol" -msgstr "" +msgstr "patrulheiro automático" #: extensions/base/mediawiki.py:38 msgid "wiki_guardian" -msgstr "" +msgstr "guardião da wiki" #: extensions/base/mediawiki.py:71 msgid "(N!) " @@ -1100,26 +1111,26 @@ msgstr "" #: extensions/base/mediawiki.py:584 msgid "year" msgid_plural "years" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "ano" +msgstr[1] "anos" #: extensions/base/mediawiki.py:584 msgid "day" msgid_plural "days" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "dia" +msgstr[1] "dias" #: extensions/base/mediawiki.py:584 msgid "hour" msgid_plural "hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "hora" +msgstr[1] "horas" #: extensions/base/mediawiki.py:585 msgid "minute" msgid_plural "minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "minuto" +msgstr[1] "minutos" #: extensions/base/mediawiki.py:590 #, python-brace-format @@ -1582,6 +1593,103 @@ msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "[{author}]({author_url}) editou a peça para [{article}]({article_url})" +#, python-brace-format +#~ msgid "{value} (avg. {avg})" +#~ msgstr "{value} (med. {avg})" + +#~ msgid "Daily overview" +#~ msgstr "Visão geral diária" + +#~ msgid "No activity" +#~ msgstr "Sem atividade" + +#~ msgid " ({} action)" +#~ msgid_plural " ({} actions)" +#~ msgstr[0] " ({} ação)" +#~ msgstr[1] " ({} ações)" + +#~ msgid " ({} edit)" +#~ msgid_plural " ({} edits)" +#~ msgstr[0] " ({} edição)" +#~ msgstr[1] " ({} edições)" + +#~ msgid " UTC ({} action)" +#~ msgid_plural " UTC ({} actions)" +#~ msgstr[0] " UTC ({} ação)" +#~ msgstr[1] " UTC ({} ações)" + +#~ msgid "But nobody came" +#~ msgstr "Ninguém apareceu por aqui" + +#~ msgid "Most active user" +#~ msgid_plural "Most active users" +#~ msgstr[0] "Usuário mais ativo" +#~ msgstr[1] "Usuários mais ativos" + +#~ msgid "Most edited article" +#~ msgid_plural "Most edited articles" +#~ msgstr[0] "Artigo mais editado" +#~ msgstr[1] "Artigos mais editados" + +#~ msgid "Edits made" +#~ msgstr "Edições feitas" + +#~ msgid "New files" +#~ msgstr "Novos arquivos" + +#~ msgid "Admin actions" +#~ msgstr "Ações de administração" + +#~ msgid "Bytes changed" +#~ msgstr "Bytes alterados" + +#~ msgid "New articles" +#~ msgstr "Novos artigos" + +#~ msgid "Unique contributors" +#~ msgstr "Contribuidores exclusivos" + +#~ msgid "Most active hour" +#~ msgid_plural "Most active hours" +#~ msgstr[0] "Hora mais ativa" +#~ msgstr[1] "Horas mais ativas" + +#~ msgid "Day score" +#~ msgstr "Pontuação do dia" + +#~ msgid "No description provided" +#~ msgstr "Nenhuma descrição fornecida" + +#~ msgid "second" +#~ msgid_plural "seconds" +#~ msgstr[0] "segundo" +#~ msgstr[1] "segundos" + +#~ msgid "week" +#~ msgid_plural "weeks" +#~ msgstr[0] "semana" +#~ msgstr[1] "semanas" + +#~ msgid "month" +#~ msgid_plural "months" +#~ msgstr[0] "mês" +#~ msgstr[1] "meses" + +#~ msgid "millennium" +#~ msgid_plural "millennia" +#~ msgstr[0] "milênio" +#~ msgstr[1] "milênios" + +#~ msgid "decade" +#~ msgid_plural "decades" +#~ msgstr[0] "década" +#~ msgstr[1] "décadas" + +#~ msgid "century" +#~ msgid_plural "centuries" +#~ msgstr[0] "século" +#~ msgstr[1] "séculos" + #, python-brace-format #~ msgid "" #~ "Unknown event `{event}` by [{author}]({author_url}), report it on the " @@ -1705,9 +1813,6 @@ msgstr "[{author}]({author_url}) editou a peça para [{article}]({article_url})" #~ "[{author}]({author_url}) completou a exclusão da página traduzível " #~ "[{article}]({article_url}){comment}" -#~ msgid "No description provided" -#~ msgstr "Nenhuma descrição fornecida" - #~ msgid "unknown expiry time" #~ msgstr "tempo de expiração desconhecido" diff --git a/locale/ru/LC_MESSAGES/formatters.po b/locale/ru/LC_MESSAGES/formatters.po index d7331d3..29fafcb 100644 --- a/locale/ru/LC_MESSAGES/formatters.po +++ b/locale/ru/LC_MESSAGES/formatters.po @@ -1,3 +1,10 @@ +# #-#-#-#-# rcgcdw.po #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# formatters.po #-#-#-#-# # #-#-#-#-# discussion_formatters.po #-#-#-#-# # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. @@ -14,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"POT-Creation-Date: 2021-05-18 13:59+0200\n" "PO-Revision-Date: 2020-12-30 13:26+0000\n" "Last-Translator: Philo04 \n" "Language-Team: Russian =2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 2.4.1\n" +"#-#-#-#-# formatters.po #-#-#-#-#\n" "#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 4.2.1\n" @@ -796,43 +808,43 @@ msgstr "" #: extensions/base/mediawiki.py:37 msgid "director" -msgstr "" +msgstr "директор" #: extensions/base/mediawiki.py:37 msgid "bot" -msgstr "" +msgstr "бот" #: extensions/base/mediawiki.py:37 msgid "editor" -msgstr "" +msgstr "досматривающий" #: extensions/base/mediawiki.py:37 msgid "directors" -msgstr "" +msgstr "директора" #: extensions/base/mediawiki.py:37 msgid "sysop" -msgstr "" +msgstr "администратор" #: extensions/base/mediawiki.py:37 msgid "bureaucrat" -msgstr "" +msgstr "бюрократ" #: extensions/base/mediawiki.py:37 msgid "reviewer" -msgstr "" +msgstr "выверяющий" #: extensions/base/mediawiki.py:38 msgid "autoreview" -msgstr "" +msgstr "автодосматриваемый" #: extensions/base/mediawiki.py:38 msgid "autopatrol" -msgstr "" +msgstr "автопатрулируемый" #: extensions/base/mediawiki.py:38 msgid "wiki_guardian" -msgstr "" +msgstr "смотритель вики" #: extensions/base/mediawiki.py:71 msgid "(N!) " @@ -1114,26 +1126,30 @@ msgstr "" #: extensions/base/mediawiki.py:584 msgid "year" msgid_plural "years" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "год" +msgstr[1] "года" +msgstr[2] "лет" #: extensions/base/mediawiki.py:584 msgid "day" msgid_plural "days" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "день" +msgstr[1] "дня" +msgstr[2] "дней" #: extensions/base/mediawiki.py:584 msgid "hour" msgid_plural "hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "час" +msgstr[1] "часа" +msgstr[2] "часов" #: extensions/base/mediawiki.py:585 msgid "minute" msgid_plural "minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "минута" +msgstr[1] "минуты" +msgstr[2] "минут" #: extensions/base/mediawiki.py:590 #, python-brace-format @@ -1621,6 +1637,115 @@ msgstr "" "[{author}]({author_url}) отредактировал фрагмент для [{article}]" "({article_url})" +#, python-brace-format +#~ msgid "{value} (avg. {avg})" +#~ msgstr "{value} (ср. {avg})" + +#~ msgid "Daily overview" +#~ msgstr "Ежедневный обзор" + +#~ msgid "No activity" +#~ msgstr "Нет активности" + +#~ msgid " ({} action)" +#~ msgid_plural " ({} actions)" +#~ msgstr[0] " ({} действие)" +#~ msgstr[1] " ({} действия)" +#~ msgstr[2] " ({} действий)" + +#~ msgid " ({} edit)" +#~ msgid_plural " ({} edits)" +#~ msgstr[0] " ({} правка)" +#~ msgstr[1] " ({} правки)" +#~ msgstr[2] " ({} правок)" + +#~ msgid " UTC ({} action)" +#~ msgid_plural " UTC ({} actions)" +#~ msgstr[0] " UTC ({} действие)" +#~ msgstr[1] " UTC ({} действия)" +#~ msgstr[2] " UTC ({} действий)" + +#~ msgid "But nobody came" +#~ msgstr "Но никто не пришёл" + +#~ msgid "Most active user" +#~ msgid_plural "Most active users" +#~ msgstr[0] "Самый активный участник" +#~ msgstr[1] "Самые активные участники" +#~ msgstr[2] "Самые активные участники" + +#~ msgid "Most edited article" +#~ msgid_plural "Most edited articles" +#~ msgstr[0] "Самая редактируемая статья" +#~ msgstr[1] "Самые редактируемые статьи" +#~ msgstr[2] "Самые редактируемые статьи" + +#~ msgid "Edits made" +#~ msgstr "Сделано правок" + +#~ msgid "New files" +#~ msgstr "Новых файлов" + +#~ msgid "Admin actions" +#~ msgstr "Административных действий" + +#~ msgid "Bytes changed" +#~ msgstr "Изменено байтов" + +#~ msgid "New articles" +#~ msgstr "Новых статей" + +#~ msgid "Unique contributors" +#~ msgstr "Уникальных редакторов" + +#~ msgid "Most active hour" +#~ msgid_plural "Most active hours" +#~ msgstr[0] "Самый активный час" +#~ msgstr[1] "Самые активные часы" +#~ msgstr[2] "Самые активные часы" + +#~ msgid "Day score" +#~ msgstr "Очков за день" + +#~ msgid "No description provided" +#~ msgstr "Нет описания правки" + +#~ msgid "second" +#~ msgid_plural "seconds" +#~ msgstr[0] "секунда" +#~ msgstr[1] "секунды" +#~ msgstr[2] "секунд" + +#~ msgid "week" +#~ msgid_plural "weeks" +#~ msgstr[0] "неделя" +#~ msgstr[1] "недели" +#~ msgstr[2] "недель" + +#~ msgid "month" +#~ msgid_plural "months" +#~ msgstr[0] "месяц" +#~ msgstr[1] "месяца" +#~ msgstr[2] "месяцев" + +#~ msgid "millennium" +#~ msgid_plural "millennia" +#~ msgstr[0] "тысячелетие" +#~ msgstr[1] "тысячелетия" +#~ msgstr[2] "тысячелетий" + +#~ msgid "decade" +#~ msgid_plural "decades" +#~ msgstr[0] "десятилетие" +#~ msgstr[1] "десятилетия" +#~ msgstr[2] "десятилетий" + +#~ msgid "century" +#~ msgid_plural "centuries" +#~ msgstr[0] "век" +#~ msgstr[1] "века" +#~ msgstr[2] "веков" + #, python-brace-format #~ msgid "" #~ "Unknown event `{event}` by [{author}]({author_url}), report it on the " @@ -1746,9 +1871,6 @@ msgstr "" #~ "[{author}]({author_url}) удалил доступную для перевода страницу " #~ "[{article}]({article_url}){comment}" -#~ msgid "No description provided" -#~ msgstr "Нет описания правки" - #~ msgid "unknown expiry time" #~ msgstr "неизвестный период" diff --git a/locale/templates/formatters.pot b/locale/templates/formatters.pot index 69da6b4..36b3683 100644 --- a/locale/templates/formatters.pot +++ b/locale/templates/formatters.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"POT-Creation-Date: 2021-05-18 13:59+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/templates/misc.pot b/locale/templates/misc.pot index 0bb0e31..442ad27 100644 --- a/locale/templates/misc.pot +++ b/locale/templates/misc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"POT-Creation-Date: 2021-05-18 13:59+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/templates/rcgcdw.pot b/locale/templates/rcgcdw.pot index 533e1b8..fc1170f 100644 --- a/locale/templates/rcgcdw.pot +++ b/locale/templates/rcgcdw.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"POT-Creation-Date: 2021-05-18 13:59+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/templates/redaction.pot b/locale/templates/redaction.pot index e931d07..ad966a1 100644 --- a/locale/templates/redaction.pot +++ b/locale/templates/redaction.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:48+0200\n" +"POT-Creation-Date: 2021-05-18 13:59+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/uk/LC_MESSAGES/formatters.po b/locale/uk/LC_MESSAGES/formatters.po index 06067ad..bb6d21a 100644 --- a/locale/uk/LC_MESSAGES/formatters.po +++ b/locale/uk/LC_MESSAGES/formatters.po @@ -1,3 +1,10 @@ +# #-#-#-#-# rcgcdw.po #-#-#-#-# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +# #-#-#-#-# formatters.po #-#-#-#-# # #-#-#-#-# discussion_formatters.po #-#-#-#-# # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. @@ -14,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"POT-Creation-Date: 2021-05-18 13:59+0200\n" "PO-Revision-Date: 2020-11-18 07:47+0000\n" "Last-Translator: MakandIv <>\n" "Language-Team: Ukrainian =2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"X-Generator: Poedit 2.4.1\n" +"#-#-#-#-# formatters.po #-#-#-#-#\n" "#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 19.12.3\n" @@ -748,43 +760,43 @@ msgstr "" #: extensions/base/mediawiki.py:37 msgid "director" -msgstr "" +msgstr "директор" #: extensions/base/mediawiki.py:37 msgid "bot" -msgstr "" +msgstr "бот" #: extensions/base/mediawiki.py:37 msgid "editor" -msgstr "" +msgstr "редактор" #: extensions/base/mediawiki.py:37 msgid "directors" -msgstr "" +msgstr "директора" #: extensions/base/mediawiki.py:37 msgid "sysop" -msgstr "" +msgstr "администратор" #: extensions/base/mediawiki.py:37 msgid "bureaucrat" -msgstr "" +msgstr "бюрократ" #: extensions/base/mediawiki.py:37 msgid "reviewer" -msgstr "" +msgstr "оглядач" #: extensions/base/mediawiki.py:38 msgid "autoreview" -msgstr "" +msgstr "автоперегляд" #: extensions/base/mediawiki.py:38 msgid "autopatrol" -msgstr "" +msgstr "автопатрульний" #: extensions/base/mediawiki.py:38 msgid "wiki_guardian" -msgstr "" +msgstr "зберігач_вікі" #: extensions/base/mediawiki.py:71 msgid "(N!) " @@ -1064,26 +1076,30 @@ msgstr "" #: extensions/base/mediawiki.py:584 msgid "year" msgid_plural "years" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "рік" +msgstr[1] "роки" +msgstr[2] "років" #: extensions/base/mediawiki.py:584 msgid "day" msgid_plural "days" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "день" +msgstr[1] "дня" +msgstr[2] "днів" #: extensions/base/mediawiki.py:584 msgid "hour" msgid_plural "hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "година" +msgstr[1] "години" +msgstr[2] "годин" #: extensions/base/mediawiki.py:585 msgid "minute" msgid_plural "minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "хвилина" +msgstr[1] "хвилини" +msgstr[2] "хвилин" #: extensions/base/mediawiki.py:590 #, python-brace-format @@ -1555,6 +1571,115 @@ msgid "" msgstr "" "[{author}]({author_url}) відредагував фрагмент для [{article}]({article_url})" +#, python-brace-format +#~ msgid "{value} (avg. {avg})" +#~ msgstr "{value} (сер. {avg})" + +#~ msgid "Daily overview" +#~ msgstr "Щоденний огляд" + +#~ msgid "No activity" +#~ msgstr "Немає активності" + +#~ msgid " ({} action)" +#~ msgid_plural " ({} actions)" +#~ msgstr[0] " ({} дія)" +#~ msgstr[1] " ({} дії)" +#~ msgstr[2] " ({} дій)" + +#~ msgid " ({} edit)" +#~ msgid_plural " ({} edits)" +#~ msgstr[0] " ({} редагування)" +#~ msgstr[1] " ({} редагування)" +#~ msgstr[2] " ({} редагувань)" + +#~ msgid " UTC ({} action)" +#~ msgid_plural " UTC ({} actions)" +#~ msgstr[0] " UTC ({} дія)" +#~ msgstr[1] " UTC ({} дії)" +#~ msgstr[2] " UTC ({} дій)" + +#~ msgid "But nobody came" +#~ msgstr "Але ніхто не прийшов" + +#~ msgid "Most active user" +#~ msgid_plural "Most active users" +#~ msgstr[0] "Найактивніший користувач" +#~ msgstr[1] "Найактивніші користувачі" +#~ msgstr[2] "Найактивніші користувачі" + +#~ msgid "Most edited article" +#~ msgid_plural "Most edited articles" +#~ msgstr[0] "Найредаговішана стаття" +#~ msgstr[1] "Найредаговішані статті" +#~ msgstr[2] "Найредаговішані статті" + +#~ msgid "Edits made" +#~ msgstr "Зроблено редагувань" + +#~ msgid "New files" +#~ msgstr "Нових файлів" + +#~ msgid "Admin actions" +#~ msgstr "Адміністративних дій" + +#~ msgid "Bytes changed" +#~ msgstr "Змінено байтів" + +#~ msgid "New articles" +#~ msgstr "Нових статей" + +#~ msgid "Unique contributors" +#~ msgstr "Унікальних редакторів" + +#~ msgid "Most active hour" +#~ msgid_plural "Most active hours" +#~ msgstr[0] "Найактивніша година" +#~ msgstr[1] "Найактивніший час" +#~ msgstr[2] "Найактивніший час" + +#~ msgid "Day score" +#~ msgstr "Очок за день" + +#~ msgid "No description provided" +#~ msgstr "Немає опису редагування" + +#~ msgid "second" +#~ msgid_plural "seconds" +#~ msgstr[0] "секунда" +#~ msgstr[1] "секунди" +#~ msgstr[2] "секунд" + +#~ msgid "week" +#~ msgid_plural "weeks" +#~ msgstr[0] "тиждень" +#~ msgstr[1] "тижні" +#~ msgstr[2] "тижнів" + +#~ msgid "month" +#~ msgid_plural "months" +#~ msgstr[0] "місяць" +#~ msgstr[1] "місяці" +#~ msgstr[2] "місяців" + +#~ msgid "millennium" +#~ msgid_plural "millennia" +#~ msgstr[0] "тисячоліття" +#~ msgstr[1] "тисячоліття" +#~ msgstr[2] "тисячоліть" + +#~ msgid "decade" +#~ msgid_plural "decades" +#~ msgstr[0] "десятиліття" +#~ msgstr[1] "десятиліття" +#~ msgstr[2] "десятиліть" + +#~ msgid "century" +#~ msgid_plural "centuries" +#~ msgstr[0] "століття" +#~ msgstr[1] "століття" +#~ msgstr[2] "століть" + #~ msgid "Report this on the support server" #~ msgstr "Повідомити про це на сервер підтримки" @@ -1656,9 +1781,6 @@ msgstr "" #~ msgstr "" #~ "[{author}]({author_url}) зняв захист з [{article}]({article_url}){comment}" -#~ msgid "No description provided" -#~ msgstr "Немає опису редагування" - #, python-brace-format #~ msgid "Left a comment on {target}'s profile" #~ msgstr "Залишив коментар на профілі {target}" diff --git a/locale/zh-hans/LC_MESSAGES/formatters.po b/locale/zh-hans/LC_MESSAGES/formatters.po index 854016d..b0cd7fb 100644 --- a/locale/zh-hans/LC_MESSAGES/formatters.po +++ b/locale/zh-hans/LC_MESSAGES/formatters.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"POT-Creation-Date: 2021-05-18 13:59+0200\n" "PO-Revision-Date: 2020-12-29 15:21+0000\n" "Last-Translator: lakejason0 \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: Chinese (Traditional) Date: Tue, 18 May 2021 14:38:37 +0200 Subject: [PATCH 099/173] Removed old translation files, updated translation script, added Spanish to supported languages, updated README with new credits --- README.md | 3 +- .../bn/LC_MESSAGES/discussion_formatters.mo | Bin 5012 -> 0 bytes .../bn/LC_MESSAGES/discussion_formatters.po | 184 -- locale/bn/LC_MESSAGES/rc_formatters.mo | Bin 3269 -> 0 bytes locale/bn/LC_MESSAGES/rc_formatters.po | 1307 ------------ .../de/LC_MESSAGES/discussion_formatters.mo | Bin 4296 -> 0 bytes .../de/LC_MESSAGES/discussion_formatters.po | 185 -- locale/de/LC_MESSAGES/rc_formatters.mo | Bin 34674 -> 0 bytes .../es/LC_MESSAGES/discussion_formatters.mo | Bin 4212 -> 0 bytes locale/es/LC_MESSAGES/misc.po | 38 +- locale/es/LC_MESSAGES/rc.po | 16 +- locale/es/LC_MESSAGES/rc_formatters.mo | Bin 23972 -> 0 bytes locale/es/LC_MESSAGES/rcgcdw.po | 1807 ++++++++--------- locale/es/LC_MESSAGES/redaction.po | 6 +- .../fr/LC_MESSAGES/discussion_formatters.mo | Bin 745 -> 0 bytes .../fr/LC_MESSAGES/discussion_formatters.po | 178 -- locale/fr/LC_MESSAGES/rc_formatters.mo | Bin 8433 -> 0 bytes .../hi/LC_MESSAGES/discussion_formatters.mo | Bin 4790 -> 0 bytes .../hi/LC_MESSAGES/discussion_formatters.po | 185 -- locale/hi/LC_MESSAGES/rc_formatters.mo | Bin 45387 -> 0 bytes .../it/LC_MESSAGES/discussion_formatters.mo | Bin 511 -> 0 bytes .../it/LC_MESSAGES/discussion_formatters.po | 159 -- locale/it/LC_MESSAGES/rc_formatters.mo | Bin 501 -> 0 bytes .../ja/LC_MESSAGES/discussion_formatters.mo | Bin 508 -> 0 bytes .../ja/LC_MESSAGES/discussion_formatters.po | 159 -- locale/ja/LC_MESSAGES/rc_formatters.mo | Bin 498 -> 0 bytes locale/ja/LC_MESSAGES/rc_formatters.po | 1291 ------------ .../ko/LC_MESSAGES/discussion_formatters.mo | Bin 633 -> 0 bytes .../ko/LC_MESSAGES/discussion_formatters.po | 162 -- locale/ko/LC_MESSAGES/rc_formatters.mo | Bin 722 -> 0 bytes locale/ko/LC_MESSAGES/rc_formatters.po | 1022 ---------- .../lol/LC_MESSAGES/discussion_formatters.mo | Bin 313 -> 0 bytes .../lol/LC_MESSAGES/discussion_formatters.po | 160 -- locale/lol/LC_MESSAGES/rc_formatters.mo | Bin 354 -> 0 bytes locale/lol/LC_MESSAGES/rc_formatters.po | 1386 ------------- .../pl/LC_MESSAGES/discussion_formatters.mo | Bin 4377 -> 0 bytes .../pl/LC_MESSAGES/discussion_formatters.po | 186 -- locale/pl/LC_MESSAGES/rc_formatters.mo | Bin 27394 -> 0 bytes .../LC_MESSAGES/discussion_formatters.mo | Bin 4223 -> 0 bytes .../LC_MESSAGES/discussion_formatters.po | 184 -- locale/pt-br/LC_MESSAGES/rc_formatters.mo | Bin 33865 -> 0 bytes .../ru/LC_MESSAGES/discussion_formatters.mo | Bin 4755 -> 0 bytes .../ru/LC_MESSAGES/discussion_formatters.po | 184 -- locale/ru/LC_MESSAGES/rc_formatters.mo | Bin 42334 -> 0 bytes locale/templates/formatters.pot | 2 +- locale/templates/misc.pot | 2 +- locale/templates/rcgcdw.pot | 2 +- locale/templates/redaction.pot | 2 +- .../tr/LC_MESSAGES/discussion_formatters.mo | Bin 510 -> 0 bytes .../tr/LC_MESSAGES/discussion_formatters.po | 159 -- locale/tr/LC_MESSAGES/rc_formatters.mo | Bin 500 -> 0 bytes locale/tr/LC_MESSAGES/rc_formatters.po | 1024 ---------- .../uk/LC_MESSAGES/discussion_formatters.mo | Bin 363 -> 0 bytes .../uk/LC_MESSAGES/discussion_formatters.po | 161 -- locale/uk/LC_MESSAGES/rc_formatters.mo | Bin 18501 -> 0 bytes .../LC_MESSAGES/discussion_formatters.mo | Bin 4196 -> 0 bytes .../LC_MESSAGES/discussion_formatters.po | 185 -- locale/zh-hans/LC_MESSAGES/rc_formatters.mo | Bin 32406 -> 0 bytes .../LC_MESSAGES/discussion_formatters.mo | Bin 317 -> 0 bytes .../LC_MESSAGES/discussion_formatters.po | 160 -- locale/zh-hant/LC_MESSAGES/rc_formatters.mo | Bin 4896 -> 0 bytes scripts/generate-translations.sh | 4 +- 62 files changed, 894 insertions(+), 9609 deletions(-) delete mode 100644 locale/bn/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/bn/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/bn/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/bn/LC_MESSAGES/rc_formatters.po delete mode 100644 locale/de/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/de/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/de/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/es/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/es/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/fr/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/fr/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/fr/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/hi/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/hi/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/hi/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/it/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/it/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/it/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/ja/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/ja/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/ja/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/ja/LC_MESSAGES/rc_formatters.po delete mode 100644 locale/ko/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/ko/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/ko/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/ko/LC_MESSAGES/rc_formatters.po delete mode 100644 locale/lol/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/lol/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/lol/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/lol/LC_MESSAGES/rc_formatters.po delete mode 100644 locale/pl/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/pl/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/pl/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/pt-br/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/pt-br/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/pt-br/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/ru/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/ru/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/ru/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/tr/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/tr/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/tr/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/tr/LC_MESSAGES/rc_formatters.po delete mode 100644 locale/uk/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/uk/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/uk/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/zh-hans/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/zh-hans/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/zh-hans/LC_MESSAGES/rc_formatters.mo delete mode 100644 locale/zh-hant/LC_MESSAGES/discussion_formatters.mo delete mode 100644 locale/zh-hant/LC_MESSAGES/discussion_formatters.po delete mode 100644 locale/zh-hant/LC_MESSAGES/rc_formatters.mo diff --git a/README.md b/README.md index 551f275..7768d48 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,9 @@ * MarkusRost – German translation * JSBM – French translation * [Eduaddad](https://eduardoaddad.com.br) – Brazilian Portuguese translation -* BabylonAS and Russian Minecraft Wiki community – Russian translation +* BabylonAS, Philo and Russian Minecraft Wiki community – Russian translation * Mak_and_Iv – Ukrainian translation +* Tamara Carvallo – Spanish translation Thank you! diff --git a/locale/bn/LC_MESSAGES/discussion_formatters.mo b/locale/bn/LC_MESSAGES/discussion_formatters.mo deleted file mode 100644 index 58a9365d60f0c2e80f8aee945e22fa7a8bc28e79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5012 zcmc&$U5pb|6uv6{)nD-6V7#ItE6jGc7(xoWu&`a&WV^d83#gTp+4jD% z{|I~(_$yEW-UL1eeBllchk(m4&I6wS7JymcQJ|3j8*m)>H}EVliNzVdi0{($l5gM_>f zT!~FT0Z#+J0KW4u_=0`Uf`n;|lPd^$7kCvI18#i8(=!beyqAGkPT-E@U2qPQQm?&e1kP))oEEJf* zS(cgxEvpvSGCHe}?G{tTQk51>U2h>n zrEitA!wnzCid+-=D`bKdbq$KS+3>m5@lVdbH}OT zpfMFzxqr>(vOiPl@9KsUi{&(%GYf18n#n@4X~qv$$`6(hCA1!l7NcdJ$Jgv|7DA~8 ziVvDrsW7S*5af;p&S=wG)DLx9ggRapmZfL#TGI>-vzbUz@IZXm97Zuvyb!#hC zn)0I@h}`0jhqHa<+N&Ty8WSXWu)0kh2%tV2>}joGwOk{#`Y%E!GWq|oFdY1-6)hJ{ zn|pZxlm7KwfsY}E77c5wTzS5Uv}OxC78u04RgDVbxTw(f5<}LwW@E$bFX8C2zwZ#%8EiKs81UlIWG7befdBf=0>}%0+=2x6C(LhAYEaWiPXAl;Aks#*Cb*Yjn*- zW=CdlrYkZb3zw3#b6Qr}R?6ARq#37?@v%uob_wiK2GK0yG}aUAQF>#_`X1W5J|5e! zwg(RuDiiFGCZzl8UP}y2D9JHpaDeU{izkQIzCJdZh>WN=0l}V-+>Lzc_b6&LL(J1$&ux=6GDU)|+S+wXm zYe%h2E|Z;!W;HugvV~b`)Wm|yQEKhzlo74VkJBk5k{nJZ>h$z>_e8dvXqX0!oh`y^ z&fezHqONMjCYs5smd$wIp2;C)V||@4=OD9`gpo0`nvsjsjZ+$rjO!&!)s-P=x8u|( z%AwsC+eE$BK7;nt-c6BLl^x7rmdDCIHU)kdeWg3r-5VjbmhCzpQP(-{I$ycfIoCPo zRzGx|Q{L1i*SUtbtFCj|tsWz_rjEG__#{?)|J7p+%e<-$xvp~w)1KTbQu;}ZKX$99 z9LT$iYCzJ?D4Qe2N4wBl|6m+Q?|4lrEe!G+f|h($3wwl?S}Rj_Ym}fq|u;<9}f#{*A4cdyAg^ zHhZZ!Y0d3y(e~Twl7LRS6mNpV6qwrIC9IL|1+@ifg4a;-3|6`7BD%Y*PqTa>mm z!po3`v%Lg6TKN*HGmAUY^42O&T)Wv4O3C>_ZoUioY1_~(n@UeU7VU6z|#7B0=TTS&OK{R3~sM#=yH diff --git a/locale/bn/LC_MESSAGES/discussion_formatters.po b/locale/bn/LC_MESSAGES/discussion_formatters.po deleted file mode 100644 index a0ce3aa..0000000 --- a/locale/bn/LC_MESSAGES/discussion_formatters.po +++ /dev/null @@ -1,184 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the RcGcDw package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: RcGcDw\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-30 11:58+0100\n" -"PO-Revision-Date: 2020-12-30 13:26+0000\n" -"Last-Translator: Creeper \n" -"Language-Team: Bengali \n" -"Language: bn\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.2.1\n" - -#: src/discussion_formatters.py:25 src/discussion_formatters.py:81 -msgid "Unregistered user" -msgstr "রেজিস্টার না করা ব্যাবহারকারি" - -#: src/discussion_formatters.py:34 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " -"{forumName}" -msgstr "" -"[{author}]({author_url}) {forumName}তে [{title}](<{url}f/p/{threadId}>) " -"বানিয়েছে" - -#: src/discussion_formatters.py:36 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " -"{forumName}" -msgstr "" -"[{author}]({author_url}) {forumName}এ পোল [{title}](<{url}f/p/{threadId}>) " -"বানিয়েছে" - -#: src/discussion_formatters.py:38 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " -"{forumName}" -msgstr "" -"[{author}]({author_url}) {forumName}তে একটি কুইজ [{title}](<{url}f/p/" -"{threadId}>) বানিয়েছে" - -#: src/discussion_formatters.py:43 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " -"to [{title}](<{url}f/p/{threadId}>) in {forumName}" -msgstr "" -"[{author}]({author_url}) {forumName}এ [{title}](<{url}f/p/{threadId}>)তে একটি" -" [উত্তর](<{url}f/p/{threadId}/r/{postId}>) দিয়েছে" - -#: src/discussion_formatters.py:45 src/discussion_formatters.py:54 -#: src/discussion_formatters.py:137 src/discussion_formatters.py:150 -msgid "unknown" -msgstr "অজানা" - -#: src/discussion_formatters.py:49 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" -"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" -"Message_Wall:{user_wall}>)" -msgstr "" -"[{author}]({author_url}) [{user}এর মেসেজ ওয়ালে](<{url}wiki/" -"Message_Wall:{user_wall}>)এ [{title}](<{url}wiki/" -"Message_Wall:{user_wall}?threadId={threadId}>) বানিয়েছে" - -#: src/discussion_formatters.py:51 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" -"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" -"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" -"(<{url}wiki/Message_Wall:{user_wall}>)" -msgstr "" -"[{author}]({author_url}) [{user}এর মেসেজ ওয়ালে](<{url}wiki/" -"Message_Wall:{user_wall}>) [{title}](<{url}wiki/" -"Message_Wall:{user_wall}?threadId={threadId}>)তে একটি [উত্তর](<{url}wiki/" -"Message_Wall:{user_wall}?threadId={threadId}#{replyId}>) দিয়েছে" - -#: src/discussion_formatters.py:57 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " -"on [{article}](<{url}>)" -msgstr "" -"[{author}]({author_url}) [{article}](<{url}>)এ একটি " -"[কমেন্ট](<{url}?commentId={commentId}>) লিখেছে" - -#: src/discussion_formatters.py:62 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" -"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " -"[{article}](<{url}>)" -msgstr "" -"[{author}]({author_url}) [{article}](<{url}>)এর একটি " -"[কমেন্ট](<{url}?commentId={commentId}>)এ একটি " -"[উত্তর](<{url}?commentId={commentId}&replyId={replyId}>) দিয়েছে" - -#: src/discussion_formatters.py:70 -#, python-brace-format -msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." -msgstr "" -"[{author}]({author_url})দ্বারা অজানা ঘটনা `{event}` , [সাহায্য " -"সার্ভারে](<{support}>) রিপোর্ট করুন।" - -#: src/discussion_formatters.py:98 -#, python-brace-format -msgid "Created \"{title}\"" -msgstr "\"{title}\" বানানো হলো" - -#: src/discussion_formatters.py:102 -#, python-brace-format -msgid "Created a poll \"{title}\"" -msgstr "পোল \"{title}\" বানানো হলো" - -#: src/discussion_formatters.py:109 -msgid "Option {}" -msgstr "বিকল্প {}" - -#: src/discussion_formatters.py:110 -#, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "__[চিত্র দেখুন]({image_url})__" - -#: src/discussion_formatters.py:114 -#, python-brace-format -msgid "Created a quiz \"{title}\"" -msgstr "একটি কুইজ \"{title}\" বানানো হলো" - -#: src/discussion_formatters.py:129 src/discussion_formatters.py:131 -msgid "Tags" -msgstr "ট্যাগ" - -#: src/discussion_formatters.py:129 -msgid "{} tags" -msgstr "{}টি ট্যাগ" - -#: src/discussion_formatters.py:134 -#, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "\"{title}\"এ উত্তর দেওয়া হলো" - -#: src/discussion_formatters.py:143 -#, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "{user}এর মেসেজ ওয়ালে \"{title}\" বানানো হলো" - -#: src/discussion_formatters.py:147 -#, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "{user}এর মেসেজ ওয়ালের \"{title}\"তে উত্তর দেওয়া হলো" - -#: src/discussion_formatters.py:154 -#, python-brace-format -msgid "Commented on {article}" -msgstr "{article}এ কমেন্ট করা হলো" - -#: src/discussion_formatters.py:158 -#, python-brace-format -msgid "Replied to a comment on {article}" -msgstr "{article}এর একটি কমেন্টে উত্তর দেওয়া হলো" - -#: src/discussion_formatters.py:162 -#, python-brace-format -msgid "Unknown event `{event}`" -msgstr "অজানা ঘটনা `{event}`" - -#: src/discussion_formatters.py:168 src/discussion_formatters.py:170 -msgid "Report this on the support server" -msgstr "এটিকে সাহায্য সার্ভারে রিপোর্ট করুন" diff --git a/locale/bn/LC_MESSAGES/rc_formatters.mo b/locale/bn/LC_MESSAGES/rc_formatters.mo deleted file mode 100644 index 55f93c76b2630d2c256ec719f2d2a53f3eb7ac08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3269 zcmb7_TWl0n7{`x_x8)@T>_u&2DPvG-l45q=QcQCdD+yT++ zJK-MiQS?R9uYz}@zYn|@d@t#L0#ck);9cOC;CBUJ5U!DJfm0I8nMAjRDYt^r5E zb>PP!%_EQLLU`pXh8ebAd9o6ui*%4@yxUbwNjIEEltLr0O_pNuLtT45ZkEs zpMwwK2fNfcAy4QcFX;S0jyjK2JMAl5)%(n9&RSZwxV|+eY+epU(9*&>Ez2)^lJA~0 z%d+4H)z?=gtz0>9tE+j%47n8uQwsZkP3DN_7ftC{rt3~%sdRjgOLI(ktkbp;En_>9 zW&Lr%dVOw-&affE~`kr8YYA|H|A{h09B8CS<5vy!AD9y0I%O%%0(U}OP zD6%0lpNBeG5L{6FAxFA`4eL1?xNUMzRQR|ELMqB1<&&OS6jip%3_Qonb0-YTNHDJ{ zMKd4|aX)}SS18wXGqDY&av7Lj=)wZuo3#95QFyXCf6PFuS} zeV#kPD+Nc2uw+^ymt!N0>T$eL$8+QaH$9t=hzZ}b)%c`WE>`(uJ*cpAuJH1*P-R8t z(H7u)18HQ#yki?%%K6Y3^3y!k-)9VnafkNC=)%EE^H(#S14g#b=<4J<`qJ6% zHLvycW>P(7D2<`SWIssrZNoi1ytgx(;TtpA&hDOnvZy?YoJKgEJ1G?5n%JnVn^JMHHJEz|6W@s=h(=MdjFD2#3M2hV&t=esV9Mb5c2USye`-1jW^hsXv^gz40Ad;9VZlD#A_KG`, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: RcGcDw\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-30 11:58+0100\n" -"PO-Revision-Date: 2021-04-14 14:22+0000\n" -"Last-Translator: R4356th \n" -"Language-Team: Bengali \n" -"Language: bn\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.4.2\n" - -#: src/rc_formatters.py:28 -msgid "None" -msgstr "কিছুই না" - -#: src/rc_formatters.py:28 -msgid "Warning issued" -msgstr "সতর্কতা জারি করা হয়েছে" - -#: src/rc_formatters.py:28 -msgid "**Blocked user**" -msgstr "**অবরুদ্ধ ব্যবহারকারী**" - -#: src/rc_formatters.py:28 -msgid "Tagged the edit" -msgstr "সম্পাদনা ট্যাগ করা হয়েছিল" - -#: src/rc_formatters.py:28 -msgid "Disallowed the action" -msgstr "" - -#: src/rc_formatters.py:28 -msgid "**IP range blocked**" -msgstr "" - -#: src/rc_formatters.py:28 -msgid "Throttled actions" -msgstr "" - -#: src/rc_formatters.py:28 -msgid "Removed autoconfirmed group" -msgstr "" - -#: src/rc_formatters.py:28 -msgid "**Removed from privileged groups**" -msgstr "" - -#: src/rc_formatters.py:29 -msgid "Edit" -msgstr "সম্পাদনা" - -#: src/rc_formatters.py:29 -msgid "Upload" -msgstr "আপলোড" - -#: src/rc_formatters.py:29 -msgid "Move" -msgstr "সরানো" - -#: src/rc_formatters.py:29 -msgid "Stash upload" -msgstr "স্ট্যাশ আপলোড" - -#: src/rc_formatters.py:29 -msgid "Deletion" -msgstr "" - -#: src/rc_formatters.py:29 -msgid "Account creation" -msgstr "" - -#: src/rc_formatters.py:29 -msgid "Auto account creation" -msgstr "" - -#: src/rc_formatters.py:46 src/rc_formatters.py:53 src/rc_formatters.py:60 -#: src/rc_formatters.py:75 src/rc_formatters.py:96 -msgid "Unregistered user" -msgstr "" - -#: src/rc_formatters.py:83 -#, python-brace-format -msgid "" -"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " -"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." -msgstr "" - -#: src/rc_formatters.py:85 src/rc_formatters.py:86 src/rc_formatters.py:87 -#: src/rc_formatters.py:449 src/rc_formatters.py:452 src/rc_formatters.py:455 -#: src/rc_formatters.py:456 src/rc_formatters.py:461 src/rc_formatters.py:462 -#: src/rc_formatters.py:470 src/rc_formatters.py:474 src/rc_formatters.py:650 -#: src/rc_formatters.py:651 src/rc_formatters.py:652 src/rc_formatters.py:1103 -#: src/rc_formatters.py:1106 src/rc_formatters.py:1109 -#: src/rc_formatters.py:1111 src/rc_formatters.py:1114 -#: src/rc_formatters.py:1116 src/rc_formatters.py:1122 -#: src/rc_formatters.py:1125 src/rc_formatters.py:1200 -msgid "Unknown" -msgstr "" - -#: src/rc_formatters.py:116 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" -"({sign}{edit_size}){bold}" -msgstr "" - -#: src/rc_formatters.py:118 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" -"({sign}{edit_size}){bold}" -msgstr "" - -#: src/rc_formatters.py:121 -#, python-brace-format -msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" -msgstr "" - -#: src/rc_formatters.py:128 -#, python-brace-format -msgid "" -"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" -msgstr "" - -#: src/rc_formatters.py:132 -#, python-brace-format -msgid "" -"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:135 -#, python-brace-format -msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" -msgstr "" - -#: src/rc_formatters.py:141 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted redirect by overwriting [{page}]" -"({page_link}){comment}" -msgstr "" - -#: src/rc_formatters.py:147 src/rc_formatters.py:152 -msgid "without making a redirect" -msgstr "পুনঃনির্দেশ না করে" - -#: src/rc_formatters.py:147 src/rc_formatters.py:153 -msgid "with a redirect" -msgstr "পুনঃনির্দেশ করে" - -#: src/rc_formatters.py:148 -#, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" -msgstr "" - -#: src/rc_formatters.py:154 -#, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -"[{target}]({target_url}) {made_a_redirect}{comment}" -msgstr "" - -#: src/rc_formatters.py:159 -#, python-brace-format -msgid "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:170 src/rc_formatters.py:823 -msgid "for infinity and beyond" -msgstr "অনন্ত এবং এর বাইরেও" - -#: src/rc_formatters.py:179 src/rc_formatters.py:831 -#, python-brace-format -msgid "for {num} {translated_length}" -msgstr "{num} {translated_length} -এর জন্য" - -#: src/rc_formatters.py:185 src/rc_formatters.py:835 -msgid "until {}" -msgstr "{} অবধি" - -#: src/rc_formatters.py:189 -msgid " on pages: " -msgstr "" - -#: src/rc_formatters.py:196 src/rc_formatters.py:849 -msgid " and namespaces: " -msgstr "" - -#: src/rc_formatters.py:198 -msgid " on namespaces: " -msgstr "" - -#: src/rc_formatters.py:210 -#, python-brace-format -msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" -"{restriction_desc}{comment}" -msgstr "" - -#: src/rc_formatters.py:214 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:218 -#, python-brace-format -msgid "" -"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:223 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:225 -#, python-brace-format -msgid "" -"[{author}]({author_url}) left a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:231 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -"profile" -msgstr "" - -#: src/rc_formatters.py:237 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on their own " -"profile" -msgstr "" - -#: src/rc_formatters.py:245 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:251 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:257 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:259 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:267 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:269 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile" -msgstr "" - -#: src/rc_formatters.py:274 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -"profile. *({desc})*" -msgstr "" - -#: src/rc_formatters.py:281 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -"profile. *({desc})*" -msgstr "" - -#: src/rc_formatters.py:296 src/rc_formatters.py:298 src/rc_formatters.py:945 -#: src/rc_formatters.py:947 -msgid "none" -msgstr "কিছুই না" - -#: src/rc_formatters.py:301 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) from {old_groups} to {new_groups}{comment}" -msgstr "" -"[{author}]({author_url}) [{target}] ({target_url})-এর দলীয় সদস্যপদ " -"{old_groups} থেকে {new_groups} -এ পরিবর্তন করেছেন {comment}" - -#: src/rc_formatters.py:303 -#, python-brace-format -msgid "" -"{author} autopromoted [{target}]({target_url}) from {old_groups} to " -"{new_groups}{comment}" -msgstr "" - -#: src/rc_formatters.py:304 src/rc_formatters.py:933 -msgid "System" -msgstr "পদ্ধতি" - -#: src/rc_formatters.py:309 -#, python-brace-format -msgid "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" -msgstr "" - -#: src/rc_formatters.py:311 src/rc_formatters.py:319 src/rc_formatters.py:955 -#: src/rc_formatters.py:961 -msgid " [cascading]" -msgstr "" - -#: src/rc_formatters.py:316 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" -msgstr "" - -#: src/rc_formatters.py:323 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:327 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed visibility of revision on page [{article}]" -"({article_url}){comment}" -msgid_plural "" -"[{author}]({author_url}) changed visibility of {amount} revisions on page " -"[{article}]({article_url}){comment}" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:340 -#, python-brace-format -msgid "" -"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " -"revision{comment}" -msgid_plural "" -"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " -"revisions{comment}" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:345 -#, python-brace-format -msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:347 -#, python-brace-format -msgid "[{author}]({author_url}) changed visibility of log events{comment}" -msgstr "" - -#: src/rc_formatters.py:359 -#, python-brace-format -msgid "" -"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " -"revision from [{source}]({source_url}){comment}" -msgid_plural "" -"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " -"revisions from [{source}]({source_url}){comment}" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:364 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" -msgstr "" - -#: src/rc_formatters.py:368 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" -msgstr "" - -#: src/rc_formatters.py:372 -#, python-brace-format -msgid "" -"[{author}]({author_url}) merged revision histories of [{article}]" -"({article_url}) into [{dest}]({dest_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:375 -#, python-brace-format -msgid "Account [{author}]({author_url}) was created automatically" -msgstr "[{author}]({author_url}) অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে তৈরি হয়েছে" - -#: src/rc_formatters.py:377 src/rc_formatters.py:385 -#, python-brace-format -msgid "Account [{author}]({author_url}) was created" -msgstr "ব্যবহারকারী অ্যাকাউন্ট [{author}]({author_url}) তৈরি করা হয়েছে" - -#: src/rc_formatters.py:380 -#, python-brace-format -msgid "" -"Account [{article}]({article_url}) was created by [{author}]({author_url})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:383 -#, python-brace-format -msgid "" -"Account [{article}]({article_url}) was created by [{author}]({author_url}) " -"and password was sent by email{comment}" -msgstr "" - -#: src/rc_formatters.py:388 -#, python-brace-format -msgid "" -"[{author}]({author_url}) added an entry to the [interwiki table]" -"({table_url}) pointing to {website} with {prefix} prefix" -msgstr "" - -#: src/rc_formatters.py:394 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " -"pointing to {website} with {prefix} prefix" -msgstr "" - -#: src/rc_formatters.py:400 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" -msgstr "" - -#: src/rc_formatters.py:403 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the content model of the page [{article}]" -"({article_url}) from {old} to {new}{comment}" -msgstr "" - -#: src/rc_formatters.py:407 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" -msgstr "" - -#: src/rc_formatters.py:410 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" -msgstr "" - -#: src/rc_formatters.py:413 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited the slice for [{article}]({article_url})" -msgstr "" - -#: src/rc_formatters.py:418 -#, python-brace-format -msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:420 -#, python-brace-format -msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:425 -#, python-brace-format -msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:430 -#, python-brace-format -msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:433 -#, python-brace-format -msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:437 -#, python-brace-format -msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:441 -#, python-brace-format -msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:444 -#, python-brace-format -msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:446 -#, python-brace-format -msgid "[{author}]({author_url}) changed wiki settings{reason}" -msgstr "" - -#: src/rc_formatters.py:448 -#, python-brace-format -msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:451 -#, python-brace-format -msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:454 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified a namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:459 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " -"*{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:465 -#, python-brace-format -msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:469 -#, python-brace-format -msgid "[{author}]({author_url}) restored a wiki *{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:473 -#, python-brace-format -msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "" - -#: src/rc_formatters.py:484 -#, python-brace-format -msgid "" -"[{author}]({author_url}) marked [{article}]({article_url}) for " -"translation{comment}" -msgstr "" -"[{author}]({author_url}) [{article}]({article_url}) অনুবাদের জন্য চিহ্নিত " -"করেছেন {comment}" - -#: src/rc_formatters.py:491 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed [{article}]({article_url}) from the " -"translation system{comment}" -msgstr "" -"[{author}]({author_url}) অনুবাদের পাতা [{article}]({article_url}) অপসারণ " -"করেছেন {comment}" - -#: src/rc_formatters.py:498 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed moving translation pages from *{article}* " -"to [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:506 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encountered a problem while moving [{article}]" -"({article_url}) to [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:514 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translatable page [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:522 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translatable page [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:530 -#, python-brace-format -msgid "" -"[{author}]({author_url}) completed deletion of translation page [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:538 -#, python-brace-format -msgid "" -"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " -"belongs to translation page [{target}]({target_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:546 -#, python-brace-format -msgid "" -"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:553 -#, python-brace-format -msgid "" -"[{author}]({author_url}) discouraged translation of [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:563 -#, python-brace-format -msgid "" -"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " -"`{languages}`{comment}" -msgstr "" - -#: src/rc_formatters.py:569 -#, python-brace-format -msgid "" -"[{author}]({author_url}) set the priority languages for [{article}]" -"({article_url}) to `{languages}`{comment}" -msgstr "" - -#: src/rc_formatters.py:575 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed priority languages from [{article}]" -"({article_url}){comment}" -msgstr "" - -#: src/rc_formatters.py:582 -#, python-brace-format -msgid "" -"[{author}]({author_url}) added translatable page [{article}]({article_url}) " -"to aggregate group \"{group}\"{comment}" -msgstr "" - -#: src/rc_formatters.py:589 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed translatable page [{article}]" -"({article_url}) from aggregate group \"{group}\"{comment}" -msgstr "" - -#: src/rc_formatters.py:601 -#, python-brace-format -msgid "" -"[{author}]({author_url}) reviewed translation [{article}]({article_url})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:609 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" -msgstr "" - -#: src/rc_formatters.py:616 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the state of `{language}` translations of " -"[{article}]({article_url}) to `{new_state}`{comment}" -msgstr "" - -#: src/rc_formatters.py:625 -#, python-brace-format -msgid "" -"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " -"[{new_name}]({link}){comment}" -msgid_plural "" -"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " -"[{new_name}]({link}){comment}" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:630 -#, python-brace-format -msgid "" -"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" -"{comment}" -msgstr "" - -#: src/rc_formatters.py:634 -msgid "An action has been hidden by administration." -msgstr "" - -#: src/rc_formatters.py:641 -#, python-brace-format -msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." -msgstr "" - -#: src/rc_formatters.py:649 -#, python-brace-format -msgid "{user} triggered \"{abuse_filter}\"" -msgstr "" - -#: src/rc_formatters.py:650 -msgid "Performed" -msgstr "সম্পাদিত" - -#: src/rc_formatters.py:651 -msgid "Action taken" -msgstr "ব্যবস্থা নেওয়া হয়েছে" - -#: src/rc_formatters.py:652 -msgid "Title" -msgstr "শিরোনাম" - -#: src/rc_formatters.py:661 src/rc_formatters.py:948 -msgid "No description provided" -msgstr "কোনও বিবরণ সরবরাহ করা হয়নি" - -#: src/rc_formatters.py:685 -msgid "(N!) " -msgstr "(N!) " - -#: src/rc_formatters.py:686 -msgid "m" -msgstr "m" - -#: src/rc_formatters.py:686 -msgid "b" -msgstr "b" - -#: src/rc_formatters.py:703 src/rc_formatters.py:708 -msgid "__Only whitespace__" -msgstr "__Only whitespace__" - -#: src/rc_formatters.py:713 -msgid "Removed" -msgstr "সরানো হয়েছে" - -#: src/rc_formatters.py:715 -msgid "Added" -msgstr "যুক্ত হয়েছে" - -#: src/rc_formatters.py:749 src/rc_formatters.py:788 -msgid "Options" -msgstr "বিকল্পগুলি" - -#: src/rc_formatters.py:749 -#, python-brace-format -msgid "([preview]({link}) | [undo]({undolink}))" -msgstr "" - -#: src/rc_formatters.py:754 -#, python-brace-format -msgid "Uploaded a new version of {name}" -msgstr "{name} -এর একটি নতুন সংস্করণ আপলোড হয়েছে" - -#: src/rc_formatters.py:756 -#, python-brace-format -msgid "Reverted a version of {name}" -msgstr "" - -#: src/rc_formatters.py:758 -#, python-brace-format -msgid "Uploaded {name}" -msgstr "" - -#: src/rc_formatters.py:774 -msgid "**No license!**" -msgstr "" - -#: src/rc_formatters.py:786 -msgid "" -"\n" -"License: {}" -msgstr "" - -#: src/rc_formatters.py:788 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "" - -#: src/rc_formatters.py:793 -#, python-brace-format -msgid "Deleted page {article}" -msgstr "" - -#: src/rc_formatters.py:798 -#, python-brace-format -msgid "Deleted redirect {article} by overwriting" -msgstr "" - -#: src/rc_formatters.py:804 -msgid "No redirect has been made" -msgstr "" - -#: src/rc_formatters.py:805 -msgid "A redirect has been made" -msgstr "" - -#: src/rc_formatters.py:806 -#, python-brace-format -msgid "Moved {redirect}{article} to {target}" -msgstr "" - -#: src/rc_formatters.py:809 -#, python-brace-format -msgid "Moved {redirect}{article} to {title} over redirect" -msgstr "" - -#: src/rc_formatters.py:813 -#, python-brace-format -msgid "Moved protection settings from {redirect}{article} to {title}" -msgstr "" - -#: src/rc_formatters.py:837 -msgid "unknown expiry time" -msgstr "" - -#: src/rc_formatters.py:842 -msgid "Blocked from editing the following pages: " -msgstr "" - -#: src/rc_formatters.py:851 -msgid "Blocked from editing pages on following namespaces: " -msgstr "" - -#: src/rc_formatters.py:862 -msgid "Partial block details" -msgstr "" - -#: src/rc_formatters.py:863 -#, python-brace-format -msgid "Blocked {blocked_user} {time}" -msgstr "" - -#: src/rc_formatters.py:867 -#, python-brace-format -msgid "Changed block settings for {blocked_user}" -msgstr "" - -#: src/rc_formatters.py:871 -#, python-brace-format -msgid "Unblocked {blocked_user}" -msgstr "" - -#: src/rc_formatters.py:878 -#, python-brace-format -msgid "Left a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:880 -msgid "Left a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:887 -#, python-brace-format -msgid "Replied to a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:889 -msgid "Replied to a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:896 -#, python-brace-format -msgid "Edited a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:898 -msgid "Edited a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:903 -#, python-brace-format -msgid "Edited {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:905 -msgid "Edited their own profile" -msgstr "" - -#: src/rc_formatters.py:907 -#, python-brace-format -msgid "Cleared the {field} field" -msgstr "" - -#: src/rc_formatters.py:909 -#, python-brace-format -msgid "{field} field changed to: {desc}" -msgstr "" - -#: src/rc_formatters.py:914 -#, python-brace-format -msgid "Purged a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:916 -msgid "Purged a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:924 -#, python-brace-format -msgid "Deleted a comment on {target}'s profile" -msgstr "" - -#: src/rc_formatters.py:926 -msgid "Deleted a comment on their own profile" -msgstr "" - -#: src/rc_formatters.py:930 -#, python-brace-format -msgid "Changed group membership for {target}" -msgstr "" - -#: src/rc_formatters.py:934 -#, python-brace-format -msgid "{target} got autopromoted to a new usergroup" -msgstr "" - -#: src/rc_formatters.py:949 -#, python-brace-format -msgid "Groups changed from {old_groups} to {new_groups}{reason}" -msgstr "" - -#: src/rc_formatters.py:953 -#, python-brace-format -msgid "Protected {target}" -msgstr "" - -#: src/rc_formatters.py:959 -#, python-brace-format -msgid "Changed protection level for {article}" -msgstr "" - -#: src/rc_formatters.py:965 -#, python-brace-format -msgid "Removed protection from {article}" -msgstr "" - -#: src/rc_formatters.py:969 -#, python-brace-format -msgid "Changed visibility of revision on page {article} " -msgid_plural "Changed visibility of {amount} revisions on page {article} " -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:981 -#, python-brace-format -msgid "Imported {article} with {count} revision" -msgid_plural "Imported {article} with {count} revisions" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:986 -#, python-brace-format -msgid "Restored {article}" -msgstr "" - -#: src/rc_formatters.py:989 -msgid "Changed visibility of log events" -msgstr "" - -#: src/rc_formatters.py:999 -#, python-brace-format -msgid "Imported {article} with {count} revision from \"{source}\"" -msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1004 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "" - -#: src/rc_formatters.py:1007 -#, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "" - -#: src/rc_formatters.py:1010 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "" - -#: src/rc_formatters.py:1014 -msgid "Created account automatically" -msgstr "" - -#: src/rc_formatters.py:1017 src/rc_formatters.py:1026 -msgid "Created account" -msgstr "" - -#: src/rc_formatters.py:1020 -#, python-brace-format -msgid "Created account {article}" -msgstr "" - -#: src/rc_formatters.py:1023 -#, python-brace-format -msgid "Created account {article} and password was sent by email" -msgstr "" - -#: src/rc_formatters.py:1029 -msgid "Added an entry to the interwiki table" -msgstr "" - -#: src/rc_formatters.py:1030 src/rc_formatters.py:1036 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "" - -#: src/rc_formatters.py:1035 -msgid "Edited an entry in interwiki table" -msgstr "" - -#: src/rc_formatters.py:1041 -msgid "Deleted an entry in interwiki table" -msgstr "" - -#: src/rc_formatters.py:1042 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "" - -#: src/rc_formatters.py:1045 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "" - -#: src/rc_formatters.py:1046 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "" - -#: src/rc_formatters.py:1051 -#, python-brace-format -msgid "Edited the sprite for {article}" -msgstr "" - -#: src/rc_formatters.py:1054 -#, python-brace-format -msgid "Created the sprite sheet for {article}" -msgstr "" - -#: src/rc_formatters.py:1057 -#, python-brace-format -msgid "Edited the slice for {article}" -msgstr "" - -#: src/rc_formatters.py:1063 -#, python-brace-format -msgid "Created the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1067 -#, python-brace-format -msgid "Deleted the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1074 -#, python-brace-format -msgid "Recreated the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1081 -#, python-brace-format -msgid "Replaced the Cargo table \"{table}\"" -msgstr "" - -#: src/rc_formatters.py:1085 -#, python-brace-format -msgid "Created a tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1089 -#, python-brace-format -msgid "Deleted a tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1093 -#, python-brace-format -msgid "Activated a tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1096 -#, python-brace-format -msgid "Deactivated a tag \"{tag}\"" -msgstr "" - -#: src/rc_formatters.py:1099 -msgid "Changed wiki settings" -msgstr "" - -#: src/rc_formatters.py:1103 -#, python-brace-format -msgid "Deleted a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1106 -#, python-brace-format -msgid "Locked a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1109 -#, python-brace-format -msgid "Modified a \"{namespace_name}\" namespace" -msgstr "" - -#: src/rc_formatters.py:1111 src/rc_formatters.py:1116 -msgid "Wiki" -msgstr "" - -#: src/rc_formatters.py:1113 -#, python-brace-format -msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "" - -#: src/rc_formatters.py:1119 -#, python-brace-format -msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "" - -#: src/rc_formatters.py:1122 -#, python-brace-format -msgid "Restored a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1125 -#, python-brace-format -msgid "Unlocked a \"{wiki}\" wiki" -msgstr "" - -#: src/rc_formatters.py:1133 -#, python-brace-format -msgid "Marked \"{article}\" for translation" -msgstr "" - -#: src/rc_formatters.py:1136 -#, python-brace-format -msgid "Removed \"{article}\" from the translation system" -msgstr "" - -#: src/rc_formatters.py:1139 -#, python-brace-format -msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1142 -#, python-brace-format -msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1145 -#, python-brace-format -msgid "Completed deletion of translatable page \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1148 -#, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translatable page " -"\"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1151 -#, python-brace-format -msgid "Completed deletion of translation page \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1154 -#, python-brace-format -msgid "" -"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" -msgstr "" - -#: src/rc_formatters.py:1157 -#, python-brace-format -msgid "Encouraged translation of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1160 -#, python-brace-format -msgid "Discouraged translation of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1166 -#, python-brace-format -msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1168 -#, python-brace-format -msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "" - -#: src/rc_formatters.py:1170 -#, python-brace-format -msgid "Removed priority languages from \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1173 -#, python-brace-format -msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1176 -#, python-brace-format -msgid "" -"Removed translatable page \"{article}\" from aggregate group \"{group}\"" -msgstr "" - -#: src/rc_formatters.py:1183 -#, python-brace-format -msgid "Reviewed translation \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1186 -#, python-brace-format -msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "" - -#: src/rc_formatters.py:1188 -msgid "Old state" -msgstr "" - -#: src/rc_formatters.py:1189 -msgid "New state" -msgstr "" - -#: src/rc_formatters.py:1193 -#, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -msgstr[1] "" - -#: src/rc_formatters.py:1195 -#, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "" - -#: src/rc_formatters.py:1199 -msgid "Action has been hidden by administration" -msgstr "" - -#: src/rc_formatters.py:1204 -#, python-brace-format -msgid "Unknown event `{event}`" -msgstr "" - -#: src/rc_formatters.py:1210 src/rc_formatters.py:1212 -msgid "Report this on the support server" -msgstr "" - -#: src/rc_formatters.py:1229 -msgid "Tags" -msgstr "" - -#: src/rc_formatters.py:1234 -msgid "**Added**: " -msgstr "" - -#: src/rc_formatters.py:1234 -msgid " and {} more\n" -msgstr "" - -#: src/rc_formatters.py:1235 -msgid "**Removed**: " -msgstr "" - -#: src/rc_formatters.py:1235 -msgid " and {} more" -msgstr "" - -#: src/rc_formatters.py:1236 -msgid "Changed categories" -msgstr "" diff --git a/locale/de/LC_MESSAGES/discussion_formatters.mo b/locale/de/LC_MESSAGES/discussion_formatters.mo deleted file mode 100644 index e393df6c22cfe2b52798e84247973e29e8e4a137..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4296 zcmc(i&u<$=6vqcBzs!$9`Ta}0mI4Xw#&Oz1JtA(EDj{*;JNqNay0%+GrH-`u?99A< z@6DU%HxC%6Fq18#x^2piy4@GEfTZpJ-S&`Y}_02NALyo=|0Br$|fVufS0kRIq*e{?@5LB$G~y)-vIZ67eNBQ2Gx3g0##go z0gr=M!8CaIfl!YL!Zr30_#F5NXn~tifA@oo712KcehYp8s`<=AjC})s4qgQF55pe( z`xz{w|J!cHN?`Vp(9UO|^5+t$*7XAjafamt<0|HGEodsPolSl71Rl5*_zN?^{s9c3 zWRKy2%B=>sf`;u28p0gp$TJ|85Hz?LF${BHrU(z4r!f?aDBmr}hOV%)J=1nLi3n8w!!mrQib!_s$3Y*q>D;;fh zS#5Q;r93M)@!CEXTbfANM0`tuRA-vRUiMWwIecR;bt*->9IHGQ_4DRLYwJ}7AaEv5 z@>u#NZD0fK_4u3a7G4Qtl-1}(*+eGa4iA%?pBCv>!}VmC2XN_@=L*)Ch)~~c?UpMq zbp)-`!+{mX``xWZ#rxP->CGiZP~$qCO-BDe{Pdy{IjG)pxpckbVSjZ?;Sb2wED>XugUs+Osp@T;D- z4?CRLhKMnM0I0oINypU=$64T9L0=N_iyrc5bSu73Q_+ zDSCZATgV@HXMQf1n$-8;UPb zEt7`mwt*~}JXOdSa@*m_jEtsEx;QW$c)Q-fvL%0CrW>|yIpbv1bm4J1vAi^+9od#s z4pq3&a*pAemQ&5rkyT5k7HnVWwl)L%UY49j(Df$9#wmQAaA@xYWyVu)X{WfuMHrVA zzKRHOIy^Eql1Z^Q!voIZ0%IFKUAge()-itN!WS$jaE916Ce=)Mn)ewe-LGKPg64Fi zCM=_dm3rL5=WFVK4t`5JbaKn#v|O(Ub@=x(03kZ94*aCR_Mt!J$R-YC4lBxhQmo(P zO?lg)KzS1dO&8rFR^YbDiF=XqIxU8G18p&JH(2H8bq9&yQSQ3?LC?7$ioMR=gH-P{ zT}s+kWozdpVNPuj;pf1EFOkD^f;+z4=yzQ}qDL7qXm#o3IQ3T9x4?Eg22d;G6fE`0 z!T(*rw_R2VQQFFgSaJ6g9^T+T)PPE-)p%_I2N>R++7nE?O* diff --git a/locale/de/LC_MESSAGES/discussion_formatters.po b/locale/de/LC_MESSAGES/discussion_formatters.po deleted file mode 100644 index ab647c4..0000000 --- a/locale/de/LC_MESSAGES/discussion_formatters.po +++ /dev/null @@ -1,185 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" -"PO-Revision-Date: 2020-12-13 14:30+0000\n" -"Last-Translator: Frisk The Evil Goat Overlord \n" -"Language-Team: German \n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.2.1\n" - -#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 -#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 -#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 -msgid "unknown" -msgstr "Unbekannt" - -#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 -msgid "Unregistered user" -msgstr "Nicht angemeldeter Benutzer" - -#: src/discussion_formatters.py:39 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " -"{forumName}" -msgstr "" -"[{author}]({author_url}) erstellte [{title}](<{url}f/p/{threadId}>) in " -"{forumName}" - -#: src/discussion_formatters.py:42 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " -"{forumName}" -msgstr "" -"[{author}]({author_url}) erstellte eine Umfrage [{title}](<{url}f/p/" -"{threadId}>) in {forumName}" - -#: src/discussion_formatters.py:45 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " -"{forumName}" -msgstr "" -"[{author}]({author_url}) erstellte ein Quiz [{title}](<{url}f/p/{threadId}>) " -"in {forumName}" - -#: src/discussion_formatters.py:54 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " -"to [{title}](<{url}f/p/{threadId}>) in {forumName}" -msgstr "" -"[{author}]({author_url}) erstellte eine [Antwort](<{url}f/p/{threadId}/r/" -"{postId}>) zu [{title}](<{url}f/p/{threadId}>) in {forumName}" - -#: src/discussion_formatters.py:61 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" -"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" -"Message_Wall:{user_wall}>)" -msgstr "" -"[{author}]({author_url}) erstellte [{title}](<{url}wiki/Message_Wall:" -"{user_wall}?threadId={threadId}>) auf der [Nachrichtenseite von {user}]" -"(<{url}wiki/Message_Wall:{user_wall}>)" - -#: src/discussion_formatters.py:64 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" -"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" -"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" -"(<{url}wiki/Message_Wall:{user_wall}>)" -msgstr "" -"[{author}]({author_url}) erstellte eine [Antwort](<{url}wiki/Message_Wall:" -"{user_wall}?threadId={threadId}#{replyId}>) auf [{title}](<{url}wiki/" -"Message_Wall:{user_wall}?threadId={threadId}>) auf der [Nachrichtenseite von " -"{user}](<{url}wiki/Message_Wall:{user_wall}>)" - -#: src/discussion_formatters.py:72 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " -"on [{article}](<{url}>)" -msgstr "" -"[{author}]({author_url}) erstellte ein [Kommentar](<{url}?" -"commentId={commentId}>) zu [{article}](<{url}>)" - -#: src/discussion_formatters.py:78 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" -"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " -"[{article}](<{url}>)" -msgstr "" -"[{author}]({author_url}) erstellte eine [Antwort](<{url}?" -"commentId={commentId}&replyId={replyId}>) auf ein [Kommentar](<{url}?" -"commentId={commentId}>) zu [{article}](<{url}>)" - -#: src/discussion_formatters.py:86 -#, python-brace-format -msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." -msgstr "" -"Unbekanntes Event `{event}` von [{author}]({author_url}), melde es auf dem " -"[Support-Server](<{support}>)." - -#: src/discussion_formatters.py:123 -#, python-brace-format -msgid "Created \"{title}\"" -msgstr "Erstellte „{title}“" - -#: src/discussion_formatters.py:127 -#, python-brace-format -msgid "Created a poll \"{title}\"" -msgstr "Erstellte eine Umfrage „{title}“" - -#: src/discussion_formatters.py:134 -msgid "Option {}" -msgstr "Option {}" - -#: src/discussion_formatters.py:135 -#, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "__[Bild öffnen]({image_url})__" - -#: src/discussion_formatters.py:139 -#, python-brace-format -msgid "Created a quiz \"{title}\"" -msgstr "Erstellte ein Quiz „{title}“" - -#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 -msgid "Tags" -msgstr "Tags" - -#: src/discussion_formatters.py:155 -msgid "{} tags" -msgstr "{} Tags" - -#: src/discussion_formatters.py:160 -#, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "Antwortete auf „{title}“" - -#: src/discussion_formatters.py:169 -#, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "Erstellte „{title}“ auf der Nachrichtenseite von {user}" - -#: src/discussion_formatters.py:173 -#, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "Antwortete auf „{title}“ auf der Nachrichtenseite von {user}" - -#: src/discussion_formatters.py:180 -#, python-brace-format -msgid "Commented on {article}" -msgstr "Kommentierte zu „{article}“" - -#: src/discussion_formatters.py:184 -#, python-brace-format -msgid "Replied to a comment on {article}" -msgstr "Antwortete auf ein Kommentar zu „{article}“" - -#: src/discussion_formatters.py:188 -#, python-brace-format -msgid "Unknown event `{event}`" -msgstr "Unbekanntes Event `{event}`" - -#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 -msgid "Report this on the support server" -msgstr "Melde es auf dem Support-Server" diff --git a/locale/de/LC_MESSAGES/rc_formatters.mo b/locale/de/LC_MESSAGES/rc_formatters.mo deleted file mode 100644 index 9f257045471236868a6c35bd0ed73994219280b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34674 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 Ku#F;l>i+;!vXRvQ diff --git a/locale/es/LC_MESSAGES/discussion_formatters.mo b/locale/es/LC_MESSAGES/discussion_formatters.mo deleted file mode 100644 index 8a62e2165373e8fff80c0a9dc3ab7e61930e9b5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4212 zcmc(hTW=dh6vu~BZsuOfRUoDX+NNb=#~@L;bxLTQ5-CnnH*El`xRc$fy{)~wotbT# zS{70f5?_E1fKa8r=e6RcLPC52-YW5i5HAR+5)wlE&+a<$I<8ZrqK>lp?at1g>-e0x zy=&(;4C6IiujBe1*E_gwK7@Z5i#r&52|Nit4>rJq;8pMy@Or}U!6)$iGq@Z41+>6B z;2!YphhxrwJMr8AUj|#C1AYaP{NKPu@Ne)sSjJ)-{1f~ZTz-VHFTlURJK)-*m;-~y zV*UuefoJ|WW4L9L31`3`;L|+#BIb8z7<(2x2vw2bP~=OoD%aH^Akm8M_9uXRrqN60CyP zVBF{6ZIJvaKF1hDuqud8SskPl!JSAy#hmP=L2>OL6brJ4WKjH}Cdwbc5K8s}E{NP1 zFe@5JUo;TrXpg)Kl71Q#KZ?yRT$DScjIrZ>t0g@n9qxO)EtGNXrtGleN(!3X+cvJj z#NMql(FdWHsI9P4T-rgS2{)o4}!HtAY9ROsZ`_ErjBO|sk-c`SLJb&BncTM9sAOm~xaSKp%! zB(S;G{bsO+ebE}yn%t01?BoYwVLJI)m2C&UHt{}yN%wuPz{gaChNgAUUU{o8X#EzB zEU=sJK{cwI$Du;+ZDT|=uHV>n^#8+8FDa3u%B|I^XI#0;-4?1bYEZ`K$`30U? zTv)QAE`hJCX*7!h&*$UdcrJ6?N6YkJ?pgr9jl5#AK~uQi5pFkx($W-9FU?qoH`kFt=cTer zp6xrXS1<6xE3U~bHbW(v)(rIP0{4RGQ5W+^czj#*_?{x4IFk9qIw3u&;=nA+6@*Cg z_s8?&6B%mZu;tb|mwg=^Q>p&l`%H^vlea?Ub4PMW(BgvBbRSo1>f-ny^aPgLq0~lf zkrsM9dV?4W<@R>$g}`=ittTB_2fpXv5p{6Wo{Ahay}enf@5q42`$&Dt|9IQNc#Uco zJ4?OYb$mrmYM8FtqJ^zKw-FEq~ZcoN^TE>5#^MYh4-9?3z&> zU&036%y)HvF%p@M;vKwqpz z-aDz&z*ZwimKP@<6))M2yqr|Na#H!aSsf~Qn-f8@RW|D7eGhHA+>R=q4hK@jX9I7` P;h?AR(E&kj6vlr6o9l1` diff --git a/locale/es/LC_MESSAGES/misc.po b/locale/es/LC_MESSAGES/misc.po index 0651905..2436a69 100644 --- a/locale/es/LC_MESSAGES/misc.po +++ b/locale/es/LC_MESSAGES/misc.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 14:13+0100\n" +"POT-Creation-Date: 2021-05-18 14:13+0200\n" "PO-Revision-Date: 2020-11-28 22:44+0000\n" "Last-Translator: Tamara Carvallo \n" -"Language-Team: Spanish " -"\n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,59 +19,59 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.2.1\n" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Location" msgstr "Ubicación" -#: src/misc.py:45 +#: src/misc.py:44 msgid "About me" msgstr "Sobre mí" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Google link" msgstr "Enlace de Google" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Facebook link" msgstr "Enlace de Facebook" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitter link" msgstr "Enlace de Twitter" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Reddit link" msgstr "Enlace de Reddit" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Twitch link" msgstr "Enlace de Twitch" -#: src/misc.py:45 +#: src/misc.py:44 msgid "PSN link" msgstr "Enlace de PSN" -#: src/misc.py:45 +#: src/misc.py:44 msgid "VK link" msgstr "Enlace de VK" -#: src/misc.py:45 +#: src/misc.py:44 msgid "XBL link" msgstr "Enlace de XBL" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Steam link" msgstr "Enlace de Steam" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Discord handle" msgstr "ID de Discord" -#: src/misc.py:45 +#: src/misc.py:44 msgid "Battle.net handle" msgstr "Cuenta en Battle.net" -#: src/misc.py:114 +#: src/misc.py:138 msgid "" "\n" "__And more__" @@ -79,10 +79,10 @@ msgstr "" "\n" "__Y más__" -#: src/misc.py:271 +#: src/misc.py:322 msgid "Unknown" msgstr "Desconocido" -#: src/misc.py:273 +#: src/misc.py:324 msgid "unknown" msgstr "desconocido" diff --git a/locale/es/LC_MESSAGES/rc.po b/locale/es/LC_MESSAGES/rc.po index ebfdcb9..b52ab93 100644 --- a/locale/es/LC_MESSAGES/rc.po +++ b/locale/es/LC_MESSAGES/rc.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-18 14:13+0100\n" +"POT-Creation-Date: 2021-04-14 16:24+0200\n" "PO-Revision-Date: 2020-12-06 14:17+0000\n" "Last-Translator: Tamara Carvallo \n" -"Language-Team: Spanish " -"\n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,24 +19,24 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.2.1\n" -#: src/rc.py:319 +#: src/rc.py:322 #, python-brace-format msgid "{wiki} seems to be down or unreachable." msgstr "{wiki} parece estar caído o no alcanzable." -#: src/rc.py:320 src/rc.py:332 +#: src/rc.py:323 src/rc.py:335 msgid "Connection status" msgstr "Estado de la conexión" -#: src/rc.py:330 +#: src/rc.py:333 #, python-brace-format msgid "Connection to {wiki} seems to be stable now." msgstr "La conexión a {wiki} parece estar estable ahora." -#: src/rc.py:401 +#: src/rc.py:404 msgid "~~hidden~~" msgstr "~~oculto~~" -#: src/rc.py:405 +#: src/rc.py:408 msgid "hidden" msgstr "oculto" diff --git a/locale/es/LC_MESSAGES/rc_formatters.mo b/locale/es/LC_MESSAGES/rc_formatters.mo deleted file mode 100644 index d25e423569ae16ee773d6d189053d6cc6c6e1940..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23972 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\n" "Language-Team: Spanish

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 diff --git a/locale/zh-hant/LC_MESSAGES/discussion_formatters.mo b/locale/zh-hant/LC_MESSAGES/discussion_formatters.mo deleted file mode 100644 index f7a2c1b47dba616cc1822471ffaa67b8c624518c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmYL@Jx{|h5QdA&B+yEPR8c^J1sUgXjZ!;uF3|En_H__(Vf6Z{QhY?}AsdGWRC?78Q0O z5){344crX2hdL-J79~{powlkfm}~s$zcpT0Z9DLH7i8)V^;ug{WjY zP*`blMz`%oTJ#usy, YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: RcGcDw\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-23 00:28+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: zh_Hant\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: src/discussion_formatters.py:21 src/discussion_formatters.py:56 -#: src/discussion_formatters.py:67 src/discussion_formatters.py:95 -#: src/discussion_formatters.py:163 src/discussion_formatters.py:176 -msgid "unknown" -msgstr "" - -#: src/discussion_formatters.py:27 src/discussion_formatters.py:102 -msgid "Unregistered user" -msgstr "" - -#: src/discussion_formatters.py:39 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " -"{forumName}" -msgstr "" - -#: src/discussion_formatters.py:42 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " -"{forumName}" -msgstr "" - -#: src/discussion_formatters.py:45 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " -"{forumName}" -msgstr "" - -#: src/discussion_formatters.py:54 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " -"to [{title}](<{url}f/p/{threadId}>) in {forumName}" -msgstr "" - -#: src/discussion_formatters.py:61 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" -"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" -"Message_Wall:{user_wall}>)" -msgstr "" - -#: src/discussion_formatters.py:64 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" -"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" -"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" -"(<{url}wiki/Message_Wall:{user_wall}>)" -msgstr "" - -#: src/discussion_formatters.py:72 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " -"on [{article}](<{url}>)" -msgstr "" - -#: src/discussion_formatters.py:78 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" -"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " -"[{article}](<{url}>)" -msgstr "" - -#: src/discussion_formatters.py:86 -#, python-brace-format -msgid "" -"Unknown event `{event}` by [{author}]({author_url}), report it on the " -"[support server](<{support}>)." -msgstr "" - -#: src/discussion_formatters.py:123 -#, python-brace-format -msgid "Created \"{title}\"" -msgstr "" - -#: src/discussion_formatters.py:127 -#, python-brace-format -msgid "Created a poll \"{title}\"" -msgstr "" - -#: src/discussion_formatters.py:134 -msgid "Option {}" -msgstr "" - -#: src/discussion_formatters.py:135 -#, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "" - -#: src/discussion_formatters.py:139 -#, python-brace-format -msgid "Created a quiz \"{title}\"" -msgstr "" - -#: src/discussion_formatters.py:155 src/discussion_formatters.py:157 -msgid "Tags" -msgstr "" - -#: src/discussion_formatters.py:155 -msgid "{} tags" -msgstr "" - -#: src/discussion_formatters.py:160 -#, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "" - -#: src/discussion_formatters.py:169 -#, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "" - -#: src/discussion_formatters.py:173 -#, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "" - -#: src/discussion_formatters.py:180 -#, python-brace-format -msgid "Commented on {article}" -msgstr "" - -#: src/discussion_formatters.py:184 -#, python-brace-format -msgid "Replied to a comment on {article}" -msgstr "" - -#: src/discussion_formatters.py:188 -#, python-brace-format -msgid "Unknown event `{event}`" -msgstr "" - -#: src/discussion_formatters.py:194 src/discussion_formatters.py:196 -msgid "Report this on the support server" -msgstr "" diff --git a/locale/zh-hant/LC_MESSAGES/rc_formatters.mo b/locale/zh-hant/LC_MESSAGES/rc_formatters.mo deleted file mode 100644 index d6cbc030612d2e45c3e70d20906fab65d90a1437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4896 zcmc(hZ%`a(9mk*4YW1|XjeqN(_A#~!rwgriG+r7TQb>ct1tdg_(K+|-9`3g6?Vh{O z1?kPr5GDpf0yKl6flx7NY%pz7Vp>Uo*f+j#?C1;MIgXvtu=nSMR^Rx-8E5?dcJ~e> z93t9rhvjq6v(NtiKfit6*n0bEhN~9$$8g8DFt!7H@izR!b>?l1-2+a5cY`m0?*7NGg z0I&MvSHX8+{5tqv@Hb#5_y_PH_@%cq76r$^$H2dV^!y8WNd-qh3;YY%3&tS48~i;O z2Ag5@F!&6(7kuztjO_vq@T=fU;D^910meQK-V2hSUj)hSUEsZ78+Z*deG;TN-3RB0 zp9jhAz2FDIPH-z|fE33gApY0|fBq^+{{9>!`LFxq-}(F_h|seV_yG7P5Pxjzo!`_~}F@vr{;-+kWsKFG%WgSZh&_Z`5!?!*5Y z+*Cj08(mb(6jzEd$)k(nhB9#T#X*YGZMg5pz4EH{2b5o``H%Qxsz16Yt{=t?lNic? zeFAs+`ZRu!A9Q^RH{5mi3+1MK(Y`2OR3o4C2UHgbx4S z%uL$Gl7?8!%ovi#ETKxxG+0AMnp|By+bDG5K5o=(RoBfP$dE~ah3;%qT$3yeO>CcO z2v*jrLRQQ)x-=_Q*2(ru)lTwES~t}=>rfM94M`Ftq9bXUQtFuU1l#O@(QTML255cp^Gg%g~Gj*K9i@;_OfsN|UCQ`&NzrE0VGFTx~fj{7{zOrpHA8VODA> zk;_`bmX_wa6p0HvmdnP>R7w~!S6yx_NkNZ$^0_Ufgf%wrGA*d`QxUmUXn8s!GFQTHn{M_UD@;CYk_R-zx|*cpei zQneC7QmnjRUI|r_Q9W3m%C#j^(0EzrdU|*^rN%`>jg%K}q(;}%ypB(s(q##_LdjD( ze%KURvkPJCLg%5N5jS37*pBEB@RcJEQEa0K-bWM21wYHv!on^~QJpQfBEBu_wT|32 zYM{Yt`3iEy?=f7e-NFb_%I%CUb9L1-m@)hf4S)Wtt?jixx576Umx=(D8=~hwh&1&j z4ISCgWUu?piHcs+h%=hc8ktm%XC*!(woa`lq6;G-lR1Vjgr@Usj`e6ViOiOZ&mEf? z$x~`KHp_exTT5w~PeEs@L+G_Sh4##-7?hyGWas zRKj*biz~Y`30vtfLp;#dsTBv108#m?aS-P$u40jO-9U&Bk&=< zJ*vq-o1U>$UD*RWaDp(>?$F-(@DA?%-1*Rsz}J;0gdr?dQiM81loHJ!se7dEa{3vrDxB(Yl1;%?kCRdkgCdPZcgMlqN0|j=!3pI$l{{_}PWRD@U=!S(q=paKgEMtvE5wiUXIN z6Q}=W${Dlzuxak8)@ybyC?8{581&X3PJ zvm?&ar#2$ntBkii2(+CBsvJX*x~12iEnc4UQs-5Cao`$UUHfpd5x;0VxnWxwkacWu zx7qqiSD#ciXvY6R>DeEY`ue<_uJJvly;3+nn4fxaBOVklUPlWcVXKcU{LRIaXr}8O zN}TDr;<=Mvx4GGOvV4}g**A>y3U#NEbI#~E?D3YM`Ie6@H~adlZ;0Z>=djs52iNHd z8|VREpQ|3K|A7edZhZEZfafRrOQ+`w{qtz;g}KT6)HJJ1RX@2D&c5sn&f?^P9aA_x Nv9h?)vxiqt{S(SS?*#w= diff --git a/scripts/generate-translations.sh b/scripts/generate-translations.sh index 33ac46a..40a845a 100644 --- a/scripts/generate-translations.sh +++ b/scripts/generate-translations.sh @@ -5,7 +5,7 @@ for file in ${StringArray[@]}; do done # Get all translatable files for formatters find extensions/ -name '*.py' -print | xargs xgettext -L Python --package-name=RcGcDw -o "locale/templates/formatters.pot" src/api/util.py -for language in de fr lol pl pt-br ru uk zh-hans zh-hant hi +for language in de fr lol pl pt-br ru uk zh-hans zh-hant hi es do for file in ${StringArray[@]}; do msgmerge -U locale/$language/LC_MESSAGES/$file.po locale/templates/$file.pot @@ -13,7 +13,7 @@ do done # Exceptions xgettext -L Python --package-name=RcGcDw -o "locale/templates/redaction.pot" src/discord/redaction.py -for language in de fr lol pl pt-br ru uk zh-hans zh-hant hi +for language in de fr lol pl pt-br ru uk zh-hans zh-hant hi es do msgmerge -U locale/$language/LC_MESSAGES/redaction.po locale/templates/redaction.pot msgmerge -U locale/$language/LC_MESSAGES/formatters.po locale/templates/formatters.pot From 18946c2681753419c1a9902e5dabf1408dbcd1d6 Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 18 May 2021 15:04:12 +0200 Subject: [PATCH 100/173] Updated .gilab-ci.yml --- .gitlab-ci.yml | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4ef757c..7978a2a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,6 +3,21 @@ image: python:3.7-alpine include: - template: Code-Quality.gitlab-ci.yml +stages: + - test + - pytest + +test: + script: + - apk add libxml2-dev libxslt-dev libxml2 gcc musl-dev linux-headers + - pip3.7 install -r requirements.txt + - sed -i -e "s/111111111111111111/$DISCORD1/g" settings.json.example + - sed -i -e "s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/$DISCORD2/g" settings.json.example + - mv settings.json.example settings.json + - python3.7 start.py --test + only: + - testing + pytest: stage: test script: @@ -14,17 +29,4 @@ pytest: junit: report.xml only: - testing - - merge_requests -test: - type: test - script: - - apk add libxml2-dev libxslt-dev libxml2 gcc musl-dev linux-headers - - pip3.7 install -r requirements.txt - - sed -i -e "s/111111111111111111/$DISCORD1/g" settings.json.example - - sed -i -e "s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/$DISCORD2/g" settings.json.example - - mv settings.json.example settings.json - - python3.7 start.py --test - only: - - testing - - merge_requests From 8852cac7a3c884ab47b1430e1d8cfd861dd74103 Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 18 May 2021 16:54:53 +0200 Subject: [PATCH 101/173] Added credit to Lakejason0 for translation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7768d48..a3de044 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ * BabylonAS, Philo and Russian Minecraft Wiki community – Russian translation * Mak_and_Iv – Ukrainian translation * Tamara Carvallo – Spanish translation +* Lakejason0 - Simplified Chinese translation Thank you! From 348d28fb45d2cb5d5b2b93dc2d5d4e88dc15210e Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Wed, 19 May 2021 12:47:26 +0000 Subject: [PATCH 102/173] Done? --- extensions/base/curseprofile.py | 225 +++++++++++++++++++++++++++----- 1 file changed, 194 insertions(+), 31 deletions(-) diff --git a/extensions/base/curseprofile.py b/extensions/base/curseprofile.py index 8eb81ca..5afd6c7 100644 --- a/extensions/base/curseprofile.py +++ b/extensions/base/curseprofile.py @@ -20,51 +20,214 @@ from src.api import formatter from src.i18n import rc_formatters from src.api.context import Context from src.api.util import embed_helper, clean_link, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url +from src.misc import profile_field_name _ = rc_formatters.gettext ngettext = rc_formatters.ngettext # CurseProfile - https://help.fandom.com/wiki/Extension:CurseProfile -# renameuser/renameuser - Renaming a user +# curseprofile/profile-edited - Editing user profile -@formatter.embed(event="renameuser/renameuser") +@formatter.embed(event="curseprofile/profile-edited") def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) - edits = change["logparams"]["edits"] - if edits > 0: - embed["title"] = ngettext("Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"", - "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"", edits).format( - old_name=sanitize_to_markdown(change["logparams"]["olduser"]), edits=edits, - new_name=sanitize_to_markdown(change["logparams"]["newuser"])) - else: - embed["title"] = _("Renamed user \"{old_name}\" to \"{new_name}\"").format( - old_name=sanitize_to_markdown(change["logparams"]["olduser"]), - new_name=sanitize_to_markdown(change["logparams"]["newuser"])) - embed["url"] = create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"])) + target_user = change["title"].split(':', 1)[1] + if target_user != change["user"]: + embed["title"] = _("Edited {target}'s profile").format(target=sanitize_to_markdown(target_user)) + else: + embed["title"] = _("Edited their own profile") + if ctx.parsedcomment is None: # If the field is empty + embed["description"] = _("Cleared the {field} field").format(field=profile_field_name(change["logparams"]['4:section'], True)) + else: + embed["description"] = _("{field} field changed to: {desc}").format(field=profile_field_name(change["logparams"]['4:section'], True), desc=ctx.parsedcomment) + embed["url"] = create_article_path("UserProfile:" + sanitize_to_url(target_user)) return embed -@formatter.compact(event="renameuser/renameuser") +@formatter.compact(event="curseprofile/profile-edited") def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: author, author_url = compact_author(ctx, change) - link = clean_link(create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"]))) - edits = change["logparams"]["edits"] - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - if edits > 0: - content = ngettext( - "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to [{new_name}]({link}){comment}", - "[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to [{new_name}]({link}){comment}", - edits).format( - author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), - edits=edits, - new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment - ) - else: - content = _("[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link}){comment}").format( - author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]), - new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment - ) + target_user = change["title"].split(':', 1)[1] + link = clean_link(create_article_path("UserProfile:" + sanitize_to_url(target_user))) + if target_user != author: + if ctx.parsedcomment is None: # If the field is empty + edit_clear_message = _("[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s profile.") + else: + edit_clear_message = _("[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s profile. *({desc})*") + content = edit_clear_message.format(author=author, author_url=author_url, target=sanitize_to_markdown(target_user), target_url=link, + field=profile_field_name(change["logparams"]['4:section'], False), desc=ctx.parsedcomment) + else: + if ctx.parsedcomment is None: # If the field is empty + edit_clear_message = _("[{author}]({author_url}) cleared the {field} on [their own]({target_url}) profile.") + else: + edit_clear_message = _("[{author}]({author_url}) edited the {field} on [their own]({target_url}) profile. *({desc})*") + content = edit_clear_message.format(author=author, author_url=author_url, target_url=link, + field=profile_field_name(change["logparams"]['4:section'], False), desc=ctx.parsedcomment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# curseprofile/comment-created - Creating comment on user profile + + +@formatter.embed(event="curseprofile/comment-created") +def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + target_user = change["title"].split(':', 1)[1] + if target_user != change["user"]: + embed["title"] = _("Left a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) + else: + embed["title"] = _("Left a comment on their own profile") + if settings["appearance"]["embed"]["show_edit_changes"]: + embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"]) + embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) + return embed + + +@formatter.compact(event="curseprofile/comment-created") +def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + target_user = change["title"].split(':', 1)[1] + link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) + if target_user != author: + content = _("[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile.").format( + author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user)) + else: + content = _("[{author}]({author_url}) left a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# curseprofile/comment-edited - Editing comment on user profile + + +@formatter.embed(event="curseprofile/comment-edited") +def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + target_user = change["title"].split(':', 1)[1] + if target_user != change["user"]: + embed["title"] = _("Edited a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) + else: + embed["title"] = _("Edited a comment on their own profile") + if settings["appearance"]["embed"]["show_edit_changes"]: + embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"]) + embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) + return embed + + +@formatter.compact(event="curseprofile/comment-edited") +def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + target_user = change["title"].split(':', 1)[1] + link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) + if target_user != author: + content = _("[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile.").format( + author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user)) + else: + content = _("[{author}]({author_url}) edited a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# curseprofile/comment-replied - Replying to comment on user profile + + +@formatter.embed(event="curseprofile/comment-replied") +def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + target_user = change["title"].split(':', 1)[1] + if target_user != change["user"]: + embed["title"] = _("Replied to a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) + else: + embed["title"] = _("Replied to a comment on their own profile") + if settings["appearance"]["embed"]["show_edit_changes"]: + embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"]) + embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) + return embed + + +@formatter.compact(event="curseprofile/comment-replied") +def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + target_user = change["title"].split(':', 1)[1] + link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) + if target_user != author: + content = _("[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s profile.").format( + author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user)) + else: + content = _("[{author}]({author_url}) replied to a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# curseprofile/comment-deleted - Deleting comment on user profile + + +@formatter.embed(event="curseprofile/comment-deleted") +def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + target_user = change["title"].split(':', 1)[1] + if target_user != change["user"]: + embed["title"] = _("Deleted a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) + else: + embed["title"] = _("Deleted a comment on their own profile") + if ctx.parsedcomment is not None: + embed["description"] = ctx.parsedcomment + if "4:comment_id" in change["logparams"]: + embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) + else: + embed["url"] = create_article_path("UserProfile:" + sanitize_to_url(target_user)) + return embed + + +@formatter.compact(event="curseprofile/comment-deleted") +def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + target_user = change["title"].split(':', 1)[1] + if "4:comment_id" in change["logparams"]: + link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) + else: + link = clean_link(create_article_path("UserProfile:" + sanitize_to_url(target_user))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + if target_user != author: + content = _("[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile.{reason}").format( + author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user), reason=parsed_comment) + else: + content = _("[{author}]({author_url}) deleted a [comment]({comment}) on their own profile.{reason}").format( + author=author, author_url=author_url, comment=link, reason=parsed_comment) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) + + +# curseprofile/comment-purged - Purging comment on user profile + + +@formatter.embed(event="curseprofile/comment-purged") +def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) + embed_helper(ctx, embed, change) + target_user = change["title"].split(':', 1)[1] + if target_user != change["user"]: + embed["title"] = _("Purged a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) + else: + embed["title"] = _("Purged a comment on their own profile") + if ctx.parsedcomment is not None: + embed["description"] = ctx.parsedcomment + embed["url"] = create_article_path("UserProfile:" + sanitize_to_url(target_user)) + return embed + + +@formatter.compact(event="curseprofile/comment-purged") +def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: + author, author_url = compact_author(ctx, change) + target_user = change["title"].split(':', 1)[1] + link = clean_link(create_article_path("UserProfile:" + sanitize_to_url(target_user))) + parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + if target_user != author: + content = _("[{author}]({author_url}) purged a comment on [{target}]({link})'s profile.{reason}").format( + author=author, author_url=author_url, link=link, target=sanitize_to_markdown(target_user), reason=parsed_comment) + else: + content = _("[{author}]({author_url}) purged a comment on [their own]({link}) profile.{reason}").format(author=author, author_url=author_url, link=link) + return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content, reason=parsed_comment) From 0a9c86cbef8de24dee6d5c87c11b9ac263a0126c Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 19 May 2021 16:27:01 +0200 Subject: [PATCH 103/173] added #210 --- docs/API spec.md | 6 ++++++ extensions/__init__.py | 3 ++- extensions/hooks/__init__.py | 16 ++++++++++++++++ extensions/hooks/example_hook.py | 28 ++++++++++++++++++++++++++++ src/rcgcdw.py | 1 + 5 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 extensions/hooks/__init__.py create mode 100644 extensions/hooks/example_hook.py diff --git a/docs/API spec.md b/docs/API spec.md index b240e7c..308a732 100644 --- a/docs/API spec.md +++ b/docs/API spec.md @@ -143,3 +143,9 @@ DiscordMessage consists of the following: ### Language support RcGcDw implements i18n with gettext and already exposes Translations instance with its `src.i18` module. formatters_i18n variable is used for instance of all formatters inside base directory. + +### Pre/post hooks +**Path**: `src.api.hook` +There are two decorator functions available in the module: `pre_hook` and `post_hook`. They don't take arguments and simply register the function as a hook. +Pre-hook functions take the following arguments: `context` ([Context object](#Context)) and `change` (dict object with change). +Post-hook functions take the following arguments: `message` ([Discord message object](#DiscordMessage)), `metadata` ([Discord message metadata](#DiscordMessageMetadata)) and `context` ([Context object](#Context)) \ No newline at end of file diff --git a/extensions/__init__.py b/extensions/__init__.py index fd83a9a..c2cc1c1 100644 --- a/extensions/__init__.py +++ b/extensions/__init__.py @@ -13,4 +13,5 @@ # You should have received a copy of the GNU General Public License # along with RcGcDw. If not, see . -import extensions.base \ No newline at end of file +import extensions.base +import extensions.hooks \ No newline at end of file diff --git a/extensions/hooks/__init__.py b/extensions/hooks/__init__.py new file mode 100644 index 0000000..669ca03 --- /dev/null +++ b/extensions/hooks/__init__.py @@ -0,0 +1,16 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +import extensions.hooks.example_hook \ No newline at end of file diff --git a/extensions/hooks/example_hook.py b/extensions/hooks/example_hook.py new file mode 100644 index 0000000..425cccc --- /dev/null +++ b/extensions/hooks/example_hook.py @@ -0,0 +1,28 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +from src.api.hook import pre_hook, post_hook + + +@pre_hook +def example_pre_hook(context, change): + if context.event == "edit": + print("I'm an edit with {} bytes changed!".format(change.get("newlen", 0) - change.get("oldlen", 0))) + + +@post_hook +def example_post_hook(message, metadata, context): + print("Our Discord message looks as follows: ") + print(message) diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 9ce4afe..a4c28c7 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -58,6 +58,7 @@ def load_extensions(): importlib.import_module(settings.get('extensions_dir', 'extensions'), 'extensions') except ImportError: logger.critical("No extensions module found. What's going on?") + logger.exception("Error:") sys.exit(1) storage = datafile From fc4044c2a6334d455cb9be6bbaa7839af183c7b2 Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 19 May 2021 16:34:35 +0200 Subject: [PATCH 104/173] Added spanish translation file, not sure why it was missing --- locale/es/LC_MESSAGES/formatters.po | 1957 +++++++++++++++++++++++++++ 1 file changed, 1957 insertions(+) create mode 100644 locale/es/LC_MESSAGES/formatters.po diff --git a/locale/es/LC_MESSAGES/formatters.po b/locale/es/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..281368c --- /dev/null +++ b/locale/es/LC_MESSAGES/formatters.po @@ -0,0 +1,1957 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDw package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-18 14:13+0200\n" +"PO-Revision-Date: 2021-01-22 13:58+0000\n" +"Last-Translator: Tamara Carvallo \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.2.1\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.2.1\n" +"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.2.1\n" + +#: src/api/util.py:61 src/api/util.py:66 +#, fuzzy +msgid "__Only whitespace__" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"__Sólo espacios en blanco__\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"__Solo espacios en blanco__" + +#: src/api/util.py:71 +msgid "Removed" +msgstr "Eliminado" + +#: src/api/util.py:73 +msgid "Added" +msgstr "Agregado" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 +msgid "Unregistered user" +msgstr "Usuario no registrado" + +#: src/api/util.py:160 extensions/base/discussions.py:193 +#: extensions/base/discussions.py:195 +msgid "Tags" +msgstr "Etiquetas" + +#: src/api/util.py:162 +#, fuzzy +msgid "**Added**: " +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"**Añadió**: \n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"**Agregó**: " + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr " y {} más\n" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "**Eliminó**: " + +#: src/api/util.py:166 +msgid " and {} more" +msgstr " y {} más" + +#: src/api/util.py:168 +#, fuzzy +msgid "Changed categories" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Cambió de categorías\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Cambio las categorías" + +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "Creó la tabla Cargo \"{table}\"" + +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) creó la tabla Cargo \"{table}\"" + +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "Recreó la tabla Cargo \"{table}\"" + +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) recreó la tabla Cargo \"{table}\"" + +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "Reemplazó la tabla Cargo \"{table}\"" + +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) reemplazó la tabla Cargo \"{table}\"" + +#: extensions/base/cargo.py:105 +#, fuzzy, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Eliminó la tabla Cargo \"{table}\"\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Eliminó la tabla Cargo\"{table}\"" + +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "[{author}]({author_url}) eliminó la tabla Cargo \"{table}\"" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: extensions/base/translate.py:55 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "[{author}]({author_url}) restauró [{article}]({article_url}){comment}" + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: extensions/base/translate.py:80 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" +"[{author}]({author_url}) importó [{article}]({article_url}) con {count} " +"revisión{comment}" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:106 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) movió la configuración de protección de {redirect}" +"*{article}* a [{target}]({target_url}){comment}" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:133 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) fusionó los historiales de revisión de [{article}]" +"({article_url}) con [{dest}]({dest_url}){comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) fusionó los historiales de revisión de [{article}]" +"({article_url}) en [{dest}]({dest_url}){comment}" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: extensions/base/translate.py:161 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) fusionó los historiales de revisión de [{article}]" +"({article_url}) con [{dest}]({dest_url}){comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) fusionó los historiales de revisión de [{article}]" +"({article_url}) en [{dest}]({dest_url}){comment}" + +#: extensions/base/translate.py:177 +#, fuzzy, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "Modificó la visibilidad de la revisión en la página {article} " + +#: extensions/base/translate.py:188 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) cambió la visibilidad de la revisión en la página " +"[{article}]({article_url}){comment}" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:215 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) fusionó los historiales de revisión de [{article}]" +"({article_url}) con [{dest}]({dest_url}){comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) fusionó los historiales de revisión de [{article}]" +"({article_url}) en [{dest}]({dest_url}){comment}" + +#: extensions/base/translate.py:231 +#, fuzzy, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Quitó la protección de {article}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Eliminó la protección de {article}" + +#: extensions/base/translate.py:240 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) eliminó la protección de [{article}]({article_url})" +"{comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) quitó la protección de [{article}]({article_url})" +"{comment}" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:264 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "[{author}]({author_url}) restauró [{article}]({article_url}){comment}" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:288 +#, fuzzy, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Quitó la protección de {article}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Eliminó la protección de {article}" + +#: extensions/base/translate.py:301 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) modificó la configuración de protección de " +"[{article}]({article_url}) a: {settings}{comment}" + +#: extensions/base/translate.py:308 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" +"[{author}]({author_url}) modificó la configuración de protección de " +"[{article}]({article_url}) a: {settings}{comment}" + +#: extensions/base/translate.py:315 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) eliminó la protección de [{article}]({article_url})" +"{comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) quitó la protección de [{article}]({article_url})" +"{comment}" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:342 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" +"[{author}]({author_url}) cambió el modelo de contenido de la página " +"[{article}]({article_url}) de {old} a {new}{comment}" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:368 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) eliminó la protección de [{article}]({article_url})" +"{comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) quitó la protección de [{article}]({article_url})" +"{comment}" + +#: extensions/base/translate.py:387 +#, fuzzy, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "Respondió a un comentario en {article}" + +#: extensions/base/translate.py:401 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "[{author}]({author_url}) restauró [{article}]({article_url}){comment}" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "" + +#: extensions/base/translate.py:431 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) cambió el modelo de contenido de la página " +"[{article}]({article_url}) de {old} a {new}{comment}" + +#: extensions/base/translate.py:439 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" +"[{author}]({author_url}) cambió el modelo de contenido de la página " +"[{article}]({article_url}) de {old} a {new}{comment}" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "" + +#: extensions/base/translate.py:464 +#, fuzzy, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Cambió el nivel de protección de {article}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Modificó el nivel de protección de {article}" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "" + +#: extensions/base/translate.py:477 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" +"[{author}]({author_url}) cambió el modelo de contenido de la página " +"[{article}]({article_url}) de {old} a {new}{comment}" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "desconocido" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "Creó \"{title}\"" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "Creó una encuesta \"{title}\"" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "Opción {}" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[Ver imagen]({image_url})__" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "Creó un cuestionario \"{title}\"" + +#: extensions/base/discussions.py:193 +msgid "{} tags" +msgstr "{} etiquetas" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "Respondió a \"{title}\"" + +#: extensions/base/discussions.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) creó [{title}](<{url}f/p/{threadId}>) en {forumName}" + +#: extensions/base/discussions.py:217 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) creó una encuesta [{title}](<{url}f/p/{threadId}>) " +"en {forumName}" + +#: extensions/base/discussions.py:220 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" +"[{author}]({author_url}) creó un cuestionario [{title}](<{url}f/p/{threadId}" +">) en {forumName}" + +#: extensions/base/discussions.py:234 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" +"[{author}]({author_url}) creó una [respuesta](<{url}f/p/{threadId}/r/{postId}" +">) a [{title}](<{url}f/p/{threadId}>) en {forumName}" + +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "Creó \"{title}\" en el muro de mensajes de {user}" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "Respondió a \"{title}\" en el muro de mensajes de {user}" + +#: extensions/base/discussions.py:312 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) creó [{title}](<{url}wiki/Message_Wall:{user_wall}?" +"threadId={threadId}>) en [{user}'s Message Wall](<{url}wiki/Message_Wall:" +"{user_wall}>)" + +#: extensions/base/discussions.py:318 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) creó una [respuesta](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) a [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) en el [{user} Muro de " +"Mensajes](<{url}wiki/Message_Wall:{user_wall}>)" + +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "Comentó en {article}" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "Respondió a un comentario en {article}" + +#: extensions/base/discussions.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) creó un [comentario](<{url}?commentId={commentId}>) " +"en [{article}](<{url}>)" + +#: extensions/base/discussions.py:365 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" +"[{author}]({author_url}) creó una [respuesta](<{url}?commentId={commentId}" +"&replyId={replyId}>) a un [comentario](<{url}?commentId={commentId}>) en " +"[{article}](<{url}>)" + +#: extensions/base/managewiki.py:34 +#, fuzzy +msgid "Changed wiki settings" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Cambió la configuración del wiki\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Modificó la configuración del wiki" + +#: extensions/base/managewiki.py:44 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "[{author}]({author_url}) cambió la configuración del wiki ({reason})" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "Eliminó un wiki \"{wiki}\"" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "Desconocido" + +#: extensions/base/managewiki.py:63 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) eliminó un wiki *{wiki_name}* ({comment})" + +#: extensions/base/managewiki.py:80 +#, fuzzy, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "Modificó el grupo de usuarios \"{usergroup_name}\"" + +#: extensions/base/managewiki.py:89 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" +"[{author}]({author_url}) modificó el grupo de usuarios *{group_name}* " +"({comment})" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "Protegió un wiki \"{wiki}\"" + +#: extensions/base/managewiki.py:111 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) protegió un wiki *{wiki_name}* ({comment})" + +#: extensions/base/managewiki.py:124 +#, fuzzy, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "Modificó un espacio de nombres \"{namespace_name}\"" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "Wiki" + +#: extensions/base/managewiki.py:134 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) modificó un espacio de nombres *{namespace_name}* " +"en *{wiki_name}* ({comment})" + +#: extensions/base/managewiki.py:147 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "Eliminó un espacio de nombres \"{namespace_name}\"" + +#: extensions/base/managewiki.py:158 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) eliminó un espacio de nombres *{namespace_name}* en " +"*{wiki_name}* ({comment})" + +#: extensions/base/managewiki.py:173 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "Modificó el grupo de usuarios \"{usergroup_name}\"" + +#: extensions/base/managewiki.py:182 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" +"[{author}]({author_url}) modificó el grupo de usuarios *{group_name}* " +"({comment})" + +#: extensions/base/managewiki.py:195 +#, fuzzy, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "Eliminó un wiki \"{wiki}\"" + +#: extensions/base/managewiki.py:203 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) eliminó un wiki *{wiki_name}* ({comment})" + +#: extensions/base/managewiki.py:217 +#, fuzzy, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Desbloqueó un wiki \"{wiki}\"\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Desprotegió un wiki \"{wiki}\"" + +#: extensions/base/managewiki.py:225 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) desprotegió un wiki *{wiki_name}* ({comment})" + +#: extensions/base/datadump.py:36 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "" + +#: extensions/base/datadump.py:45 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "[{author}]({author_url}) eliminó un wiki *{wiki_name}* ({comment})" + +#: extensions/base/datadump.py:58 +#, fuzzy, python-brace-format +msgid "Deleted {file} dump" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Eliminó la página {article}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Página eliminada {article}" + +#: extensions/base/datadump.py:67 +#, fuzzy, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "[{author}]({author_url}) eliminó un wiki *{wiki_name}* ({comment})" + +#: extensions/base/abusefilter.py:29 +#, fuzzy +msgid "None" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Ninguno\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Ninguna" + +#: extensions/base/abusefilter.py:29 +msgid "Warning issued" +msgstr "Advertencia emitida" + +#: extensions/base/abusefilter.py:29 +msgid "**Blocked user**" +msgstr "**Usuario bloqueado**" + +#: extensions/base/abusefilter.py:29 +#, fuzzy +msgid "Tagged the edit" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Etiqueto la edición\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Etiquetó la edición" + +#: extensions/base/abusefilter.py:29 +msgid "Disallowed the action" +msgstr "Anuló la acción" + +#: extensions/base/abusefilter.py:29 +msgid "**IP range blocked**" +msgstr "**Rango de IP bloqueado**" + +#: extensions/base/abusefilter.py:29 +msgid "Throttled actions" +msgstr "Limitó acciones" + +#: extensions/base/abusefilter.py:29 +#, fuzzy +msgid "Removed autoconfirmed group" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Eliminó el grupo autoconfirmado\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Eliminó grupo autoconfirmado" + +#: extensions/base/abusefilter.py:29 +#, fuzzy +msgid "**Removed from privileged groups**" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"**Eliminado de los grupos privilegiados**\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"** Eliminado de los grupos privilegiados **" + +#: extensions/base/abusefilter.py:30 +msgid "Edit" +msgstr "Edición" + +#: extensions/base/abusefilter.py:30 +msgid "Upload" +msgstr "Carga" + +#: extensions/base/abusefilter.py:30 +msgid "Move" +msgstr "Traslado" + +#: extensions/base/abusefilter.py:30 +msgid "Stash upload" +msgstr "Carga de archivos" + +#: extensions/base/abusefilter.py:30 +#, fuzzy +msgid "Deletion" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Borrado\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Eliminación" + +#: extensions/base/abusefilter.py:30 +msgid "Account creation" +msgstr "Creación de cuenta" + +#: extensions/base/abusefilter.py:30 +msgid "Auto account creation" +msgstr "Creación de cuenta automática" + +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "{user} activó \"{abuse_filter}\"" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "Realizó" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "Acción tomada" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "Título" + +#: extensions/base/abusefilter.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" +"[{author}]({author_url}) activó *{abuse_filter}*, realizando la acción " +"\"{action}\" en *[{target}]({target_url})* - acción tomada: {result}." + +#: extensions/base/abusefilter.py:83 +#, fuzzy, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Editó el número de filtro de abuso {number}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Editó el número del filtro de abuso {number}" + +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) editó el filtro de abuso [número {number}]" +"({filter_url})" + +#: extensions/base/abusefilter.py:111 +#, fuzzy, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Creó el filtro de abuso número {number}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Creó el número de filtro de abuso {number}" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" +"[{author}]({author_url}) creó el filtro de abuso [número {number}]" +"({filter_url})" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "(N!) " + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "m" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "b" + +#: extensions/base/mediawiki.py:112 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) editó [{article}]({edit_link}){comment} ({bold}" +"{sign}{edit_size}{bold})" + +#: extensions/base/mediawiki.py:117 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" +"[{author}]({author_url}) creó [{article}]({edit_link}){comment} ({bold}{sign}" +"{edit_size}{bold})" + +#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +msgid "Options" +msgstr "Opciones" + +#: extensions/base/mediawiki.py:191 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "([vista previa]({link}) | [deshacer]({undolink}))" + +#: extensions/base/mediawiki.py:196 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "Subió una nueva versión de {name}" + +#: extensions/base/mediawiki.py:198 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "Revirtió una versión de {name}" + +#: extensions/base/mediawiki.py:200 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "Subió {name}" + +#: extensions/base/mediawiki.py:209 +msgid "**No license!**" +msgstr "**¡Sin licencia!**" + +#: extensions/base/mediawiki.py:224 +msgid "" +"\n" +"License: {}" +msgstr "" +"\n" +"Licencia: {}" + +#: extensions/base/mediawiki.py:226 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([vista previa]({link}))" + +#: extensions/base/mediawiki.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" +"[{author}]({author_url}) revirtió una versión de [{file}]({file_link})" +"{comment}" + +#: extensions/base/mediawiki.py:248 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" +"[{author}]({author_url}) subió una nueva versión de [{file}]({file_link})" +"{comment}" + +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "[{author}]({author_url}) subió [{file}]({file_link}){comment}" + +#: extensions/base/mediawiki.py:274 +#, fuzzy, python-brace-format +msgid "Deleted page {article}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Eliminó la página {article}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Página eliminada {article}" + +#: extensions/base/mediawiki.py:283 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "[{author}]({author_url}) eliminó [{page}]({page_link}){comment}" + +#: extensions/base/mediawiki.py:298 +#, fuzzy, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Eliminó la redirección {article} sobrescribiendola\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Eliminó la redirección {article} sobrescribiéndola" + +#: extensions/base/mediawiki.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" +"[{author}]({author_url}) eliminó la redirección al sobrescribir [{page}]" +"({page_link}){comment}" + +#: extensions/base/mediawiki.py:322 +#, python-brace-format +msgid "Restored {article}" +msgstr "Restauró {article}" + +#: extensions/base/mediawiki.py:331 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "[{author}]({author_url}) restauró [{article}]({article_url}){comment}" + +#: extensions/base/mediawiki.py:348 +#, fuzzy +msgid "Changed visibility of log events" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Cambió la visibilidad del registro de eventos\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Modificó la visibilidad del registro de eventos" + +#: extensions/base/mediawiki.py:356 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "" +"[{author}]({author_url}) cambió la visibilidad del registro de " +"eventos{comment}" + +#: extensions/base/mediawiki.py:370 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "Modificó la visibilidad de la revisión en la página {article} " +msgstr[1] "" +"Modificó la visibilidad de {amount} revisiones en la página {article} " + +#: extensions/base/mediawiki.py:383 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) cambió la visibilidad de la revisión en la página " +"[{article}]({article_url}){comment}" +msgstr[1] "" +"[{author}]({author_url}) cambió la visibilidad de {amount} revisiones en la " +"página [{article}]({article_url}){comment}" + +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "No se ha creado una redirección" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +#, fuzzy +msgid "A redirect has been made" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Se ha creado una redirección\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Se creó una redirección" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "Movió {redirect}{article} a {target}" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "sin crear una redirección" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "con una redirección" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) movió {redirect}*{article}* a [{target}]" +"({target_url}) {made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "Movió {redirect}{article} a {title} sobre la redirección" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) movió {redirect}*{article}* sobre la redirección a " +"[{target}]({target_url}) {made_a_redirect}{comment}" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "Movió la configuración de protección de {redirect}{article} a {title}" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" +"[{author}]({author_url}) movió la configuración de protección de {redirect}" +"*{article}* a [{target}]({target_url}){comment}" + +#: extensions/base/mediawiki.py:492 +#, fuzzy, python-brace-format +msgid "Protected {target}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Protegió a {target}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Protegió {target}" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr " [en cascada]" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) protegió [{article}]({article_url}) con la " +"siguiente configuración: {settings}{comment}" + +#: extensions/base/mediawiki.py:523 +#, fuzzy, python-brace-format +msgid "Changed protection level for {article}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Cambió el nivel de protección de {article}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Modificó el nivel de protección de {article}" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" +"[{author}]({author_url}) modificó la configuración de protección de " +"[{article}]({article_url}) a: {settings}{comment}" + +#: extensions/base/mediawiki.py:554 +#, fuzzy, python-brace-format +msgid "Removed protection from {article}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Quitó la protección de {article}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Eliminó la protección de {article}" + +#: extensions/base/mediawiki.py:563 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) eliminó la protección de [{article}]({article_url})" +"{comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) quitó la protección de [{article}]({article_url})" +"{comment}" + +#: extensions/base/mediawiki.py:572 +#, fuzzy +msgid "for infinity and beyond" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"hasta el fin de nuestros días\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"por toda la eternidad" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:610 +msgid "Blocked from editing the following pages: " +msgstr "Bloqueado de editar las siguientes páginas: " + +#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +#, fuzzy +msgid " and namespaces: " +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +" y los espacios de nombres: \n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +" y espacios de nombres: " + +#: extensions/base/mediawiki.py:619 +msgid "Blocked from editing pages on following namespaces: " +msgstr "Bloqueado de editar páginas en los siguientes espacios de nombres: " + +#: extensions/base/mediawiki.py:630 +msgid "Partial block details" +msgstr "Detalles del bloqueo parcial" + +#: extensions/base/mediawiki.py:633 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:635 +#, fuzzy, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Bloqueó a {blocked_user} {time}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Bloqueado {blocked_user}{time}" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr " en las páginas: " + +#: extensions/base/mediawiki.py:664 +#, fuzzy +msgid " on namespaces: " +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +" en los espacios de nombres: \n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +" en espacios de nombres: " + +#: extensions/base/mediawiki.py:676 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) bloqueó [{user}]({user_url}) {time}" +"{restriction_desc}{comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) bloqueó a [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" + +#: extensions/base/mediawiki.py:694 +#, fuzzy, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Modificó la configuración de bloqueo de {blocked_user}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Se modificó la configuración de bloqueo de {blocked_user}" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" +"[{author}]({author_url}) cambió la configuración de bloqueo de " +"[{blocked_user}]({user_url}){comment}" + +#: extensions/base/mediawiki.py:717 +#, fuzzy, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Desbloqueó a {blocked_user}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Desbloqueado {blocked_user}" + +#: extensions/base/mediawiki.py:727 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) desbloqueó [{blocked_user}]({user_url}){comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) desbloqueó a [{blocked_user}]({user_url}){comment}" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "La administración ha ocultado la acción" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "La administración ha ocultado una acción." + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "Importó {article} con {count} revisión" +msgstr[1] "Importó {article} con {count} revisiones" + +#: extensions/base/mediawiki.py:772 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" +"[{author}]({author_url}) importó [{article}]({article_url}) con {count} " +"revisión{comment}" +msgstr[1] "" +"[{author}]({author_url}) importó [{article}]({article_url}) con {count} " +"revisiones{comment}" + +#: extensions/base/mediawiki.py:788 +#, fuzzy, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "Importó {article} con {count} revisión" +msgstr[1] "Importó {article} con {count} revisiones" + +#: extensions/base/mediawiki.py:803 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" +"[{author}]({author_url}) importó [{article}]({article_url}) con {count} " +"revisión{comment}" +msgstr[1] "" +"[{author}]({author_url}) importó [{article}]({article_url}) con {count} " +"revisiones{comment}" + +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:836 +#, fuzzy, python-brace-format +msgid "Changed group membership for {target}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Cambió la membresía del grupo para {target}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Modificó el grupo de {target}" + +#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +msgid "System" +msgstr "Sistema" + +#: extensions/base/mediawiki.py:840 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "{target} obtuvo una promoción automática a un nuevo grupo de usuarios" + +#: extensions/base/mediawiki.py:846 +#, python-brace-format +msgid "" +"{reason}\n" +"{added}{linebreak}{removed}" +msgstr "" + +#: extensions/base/mediawiki.py:860 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}) {added}{comma} {removed}{comment}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) cambió la pertenencia al grupo de [{target}]" +"({target_url}) de {old_groups} a {new_groups}{comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) cambió el grupo de [{target}]({target_url}) de " +"{old_groups} a {new_groups}{comment}" + +#: extensions/base/mediawiki.py:864 +#, fuzzy, python-brace-format +msgid "" +"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"{comment}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"{author} promovió automáticamente a [{target}]({target_url}) de {old_groups} " +"a {new_groups}{comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"{author} promovió automáticamente [{target}]({target_url}) de {old_groups} a " +"{new_groups}{comment}" + +#: extensions/base/mediawiki.py:877 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "Fusionó los historiales de revisión de {article} en {dest}" + +#: extensions/base/mediawiki.py:891 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) fusionó los historiales de revisión de [{article}]" +"({article_url}) con [{dest}]({dest_url}){comment}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"[{author}]({author_url}) fusionó los historiales de revisión de [{article}]" +"({article_url}) en [{dest}]({dest_url}){comment}" + +#: extensions/base/mediawiki.py:905 +#, fuzzy +msgid "Created account automatically" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Creó la cuenta automáticamente\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Creó una cuenta automáticamente" + +#: extensions/base/mediawiki.py:912 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "La cuenta [{author}]({author_url}) se creó automáticamente" + +#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +#, fuzzy +msgid "Created account" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Creó la cuenta\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Creó una cuenta" + +#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "Se creó la cuenta [{author}]({author_url})" + +#: extensions/base/mediawiki.py:944 +#, python-brace-format +msgid "Created account {article}" +msgstr "Creó la cuenta {article}" + +#: extensions/base/mediawiki.py:953 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" +"La cuenta [{article}]({article_url}) fue creada por [{author}]({author_url})" +"{comment}" + +#: extensions/base/mediawiki.py:966 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" +"Creó la cuenta {article} y la contraseña se envió por correo electrónico" + +#: extensions/base/mediawiki.py:977 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" +"La cuenta [{article}]({article_url}) fue creada por [{author}]({author_url}) " +"y la contraseña se envió por correo electrónico{comment}" + +#: extensions/base/mediawiki.py:1009 +msgid "Added an entry to the interwiki table" +msgstr "Agregó una entrada a la tabla interwiki" + +#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Prefijo: {prefix}, sitio web: {website} | {desc}" + +#: extensions/base/mediawiki.py:1022 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) agregó una entrada a la [tabla interwiki]" +"({table_url}) que apunta a {website} con el prefijo {prefix}" + +#: extensions/base/mediawiki.py:1036 +#, fuzzy +msgid "Edited an entry in interwiki table" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Editó una entrada en la tabla de interwiki\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Editó una entrada en la tabla interwiki" + +#: extensions/base/mediawiki.py:1049 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" +"[{author}]({author_url}) editó una entrada en la [tabla interwiki]" +"({table_url}) que apunta a {website} con el prefijo {prefix}" + +#: extensions/base/mediawiki.py:1063 +msgid "Deleted an entry in interwiki table" +msgstr "Eliminó una entrada en la tabla interwiki" + +#: extensions/base/mediawiki.py:1064 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Prefijo: {prefix} | {desc}" + +#: extensions/base/mediawiki.py:1074 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" +msgstr "" +"[{author}]({author_url}) eliminó una entrada en la [tabla interwiki]" +"({table_url})" + +#: extensions/base/mediawiki.py:1091 +#, fuzzy, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "" +"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +"Modificó el modelo de contenido de la página {article}\n" +"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +"Cambió el modelo de contenido de la página {article}" + +#: extensions/base/mediawiki.py:1093 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "El modelo cambió de {old} a {new}: {reason}" + +#: extensions/base/mediawiki.py:1105 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" +"[{author}]({author_url}) cambió el modelo de contenido de la página " +"[{article}]({article_url}) de {old} a {new}{comment}" + +#: extensions/base/mediawiki.py:1120 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: extensions/base/mediawiki.py:1122 +#, fuzzy, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "El modelo cambió de {old} a {new}: {reason}" + +#: extensions/base/mediawiki.py:1133 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" +"[{author}]({author_url}) cambió el modelo de contenido de la página " +"[{article}]({article_url}) de {old} a {new}{comment}" + +#: extensions/base/mediawiki.py:1148 +#, fuzzy, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "Creó una etiqueta \"{tag}\"" + +#: extensions/base/mediawiki.py:1158 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) creó una [etiqueta]({tag_url}) \"{tag}\"" + +#: extensions/base/mediawiki.py:1180 +#, fuzzy, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "Eliminó una etiqueta \"{tag}\"" + +#: extensions/base/mediawiki.py:1182 +#, fuzzy +msgid "Removed from" +msgstr "Eliminado" + +#: extensions/base/mediawiki.py:1182 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1194 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) eliminó una [etiqueta]({tag_url}) \"{tag}\"" + +#: extensions/base/mediawiki.py:1204 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +"[{author}]({author_url}) importó [{article}]({article_url}) con {count} " +"revisión{comment}" +msgstr[1] "" +"[{author}]({author_url}) importó [{article}]({article_url}) con {count} " +"revisiones{comment}" + +#: extensions/base/mediawiki.py:1221 +#, fuzzy, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "Activó una etiqueta \"{tag}\"" + +#: extensions/base/mediawiki.py:1230 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) activó una [etiqueta]({tag_url}) \"{tag}\"" + +#: extensions/base/mediawiki.py:1249 +#, fuzzy, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "Desactivó una etiqueta \"{tag}\"" + +#: extensions/base/mediawiki.py:1258 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "[{author}]({author_url}) desactivó una [etiqueta]({tag_url}) \"{tag}\"" + +#: extensions/base/mediawiki.py:1278 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1283 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1298 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "[{author}]({author_url}) eliminó [{page}]({page_link}){comment}" +msgstr[1] "[{author}]({author_url}) eliminó [{page}]({page_link}){comment}" + +#: extensions/base/mediawiki.py:1306 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "[{author}]({author_url}) eliminó [{page}]({page_link}){comment}" + +#: extensions/base/sprite.py:37 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "Editó el sprite de {article}" + +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "[{author}]({author_url}) editó el sprite de [{article}]({article_url})" + +#: extensions/base/sprite.py:60 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "Creó la hoja de sprites de {article}" + +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) creó la hoja de sprites de [{article}]" +"({article_url})" + +#: extensions/base/sprite.py:79 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "Editó el sector de {article}" + +#: extensions/base/sprite.py:86 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "[{author}]({author_url}) editó el sector de [{article}]({article_url})" + +#, python-brace-format +#~ msgid "for {num} {translated_length}" +#~ msgstr "por {num}{translated_length}" + +#~ msgid "until {}" +#~ msgstr "hasta {}" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) dejó un [comentario]({comment}) en el perfil de " +#~ "{target}" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) left a [comment]({comment}) on their own profile" +#~ msgstr "" +#~ "[{author}]({author_url}) dejó un [comentario]({comment}) en su propio " +#~ "perfil" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) respondió a un [comentario]({comment}) en el " +#~ "perfil de {target}" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) replied to a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) respondió a un [comentario]({comment}) en su " +#~ "propio perfil" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) editó un [comentario]({comment}) en el perfil de " +#~ "{target}" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited a [comment]({comment}) on their own " +#~ "profile" +#~ msgstr "" +#~ "[{author}]({author_url}) editó un [comentario]({comment}) en su propio " +#~ "perfil" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) purged a comment on {target}'s profile" +#~ msgstr "" +#~ "#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +#~ "[{author}]({author_url}) borró un comentario en el perfil de {target}\n" +#~ "#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +#~ "[{author}]({author_url}) eliminó un comentario en el perfil de {target}" + +#, fuzzy, python-brace-format +#~ msgid "[{author}]({author_url}) purged a comment on their own profile" +#~ msgstr "" +#~ "#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +#~ "[{author}]({author_url}) borró un comentario en su propio perfil\n" +#~ "#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +#~ "[{author}]({author_url}) eliminó un comentario en su propio perfil" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on {target}'s profile" +#~ msgstr "" +#~ "[{author}]({author_url}) eliminó un comentario en el perfil de {target}" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) deleted a comment on their own profile" +#~ msgstr "[{author}]({author_url}) eliminó un comentario en su propio perfil" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on {target}'s profile. " +#~ "*({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) editó el {field} en el perfil de {target}. " +#~ "*({desc})*" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) edited the {field} on their own profile. " +#~ "*({desc})*" +#~ msgstr "" +#~ "[{author}]({author_url}) editó el {field} en su propio perfil. *({desc})*" + +#~ msgid "none" +#~ msgstr "ninguno" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) imported interwiki{comment}" +#~ msgstr "[{author}]({author_url}) importó interwiki{comment}" + +#, python-brace-format +#~ msgid "[{author}]({author_url}) restored a wiki *{wiki_name}* ({comment})" +#~ msgstr "[{author}]({author_url}) restauró un wiki *{wiki_name}* ({comment})" + +#, python-brace-format +#~ msgid "" +#~ "Unknown event `{event}` by [{author}]({author_url}), report it on the " +#~ "[support server](<{support}>)." +#~ msgstr "" +#~ "Evento desconocido `{event}` por [{author}]({author_url}), repórtalo en " +#~ "el [servidor de soporte](<{support}>)." + +#, fuzzy +#~ msgid "No description provided" +#~ msgstr "" +#~ "#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +#~ "No se proporcionó descripción\n" +#~ "#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +#~ "No se proporcionó una descripción" + +#~ msgid "unknown expiry time" +#~ msgstr "tiempo de caducidad desconocido" + +#, python-brace-format +#~ msgid "Left a comment on {target}'s profile" +#~ msgstr "Dejó un comentario en el perfil de {target}" + +#~ msgid "Left a comment on their own profile" +#~ msgstr "Dejó un comentario en su propio perfil" + +#, python-brace-format +#~ msgid "Replied to a comment on {target}'s profile" +#~ msgstr "Respondió a un comentario en el perfil de {target}" + +#~ msgid "Replied to a comment on their own profile" +#~ msgstr "Respondió a un comentario en su propio perfil" + +#, python-brace-format +#~ msgid "Edited a comment on {target}'s profile" +#~ msgstr "Editó un comentario en el perfil de {target}" + +#~ msgid "Edited a comment on their own profile" +#~ msgstr "Editó un comentario en su propio perfil" + +#, python-brace-format +#~ msgid "Edited {target}'s profile" +#~ msgstr "Editó el perfil de {target}" + +#~ msgid "Edited their own profile" +#~ msgstr "Editó su propio perfil" + +#, python-brace-format +#~ msgid "Cleared the {field} field" +#~ msgstr "Borró el campo {field}" + +#, python-brace-format +#~ msgid "{field} field changed to: {desc}" +#~ msgstr "El campo {field} cambió a: {desc}" + +#, python-brace-format +#~ msgid "Purged a comment on {target}'s profile" +#~ msgstr "Borró un comentario en el perfil de {target}" + +#, python-brace-format +#~ msgid "Deleted a comment on {target}'s profile" +#~ msgstr "Eliminó un comentario en el perfil de {target}" + +#, python-brace-format +#~ msgid "Groups changed from {old_groups} to {new_groups}{reason}" +#~ msgstr "Los grupos cambiaron de {old_groups} a {new_groups}{reason}" + +#~ msgid "Imported interwiki" +#~ msgstr "Importó interwiki" + +#, python-brace-format +#~ msgid "Restored a \"{wiki}\" wiki" +#~ msgstr "Restauró un wiki \"{wiki}\"" + +#, python-brace-format +#~ msgid "Unknown event `{event}`" +#~ msgstr "Evento desconocido `{event}`" + +#, fuzzy +#~ msgid "Report this on the support server" +#~ msgstr "" +#~ "#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" +#~ "Reportar esto en el servidor de soporte\n" +#~ "#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" +#~ "Reporta esto en el servidor de soporte" From 7ed9aba59630babbbdc027298f2d046ccfd79ea5 Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Wed, 19 May 2021 14:47:29 +0000 Subject: [PATCH 105/173] requested fixes --- extensions/base/curseprofile.py | 195 ++++++++++++++++---------------- 1 file changed, 98 insertions(+), 97 deletions(-) diff --git a/extensions/base/curseprofile.py b/extensions/base/curseprofile.py index 5afd6c7..24c7138 100644 --- a/extensions/base/curseprofile.py +++ b/extensions/base/curseprofile.py @@ -15,6 +15,7 @@ import logging +from src.configloader import settings from src.discord.message import DiscordMessage from src.api import formatter from src.i18n import rc_formatters @@ -31,40 +32,40 @@ ngettext = rc_formatters.ngettext @formatter.embed(event="curseprofile/profile-edited") -def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: +def embed_curseprofile_profile_edited(ctx: Context, change: dict) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) - target_user = change["title"].split(':', 1)[1] - if target_user != change["user"]: - embed["title"] = _("Edited {target}'s profile").format(target=sanitize_to_markdown(target_user)) - else: - embed["title"] = _("Edited their own profile") - if ctx.parsedcomment is None: # If the field is empty - embed["description"] = _("Cleared the {field} field").format(field=profile_field_name(change["logparams"]['4:section'], True)) - else: - embed["description"] = _("{field} field changed to: {desc}").format(field=profile_field_name(change["logparams"]['4:section'], True), desc=ctx.parsedcomment) + target_user = change["title"].split(':', 1)[1] + if target_user != change["user"]: + embed["title"] = _("Edited {target}'s profile").format(target=sanitize_to_markdown(target_user)) + else: + embed["title"] = _("Edited their own profile") + if ctx.parsedcomment is None: # If the field is empty + embed["description"] = _("Cleared the {field} field").format(field=profile_field_name(change["logparams"]['4:section'], True)) + else: + embed["description"] = _("{field} field changed to: {desc}").format(field=profile_field_name(change["logparams"]['4:section'], True), desc=ctx.parsedcomment) embed["url"] = create_article_path("UserProfile:" + sanitize_to_url(target_user)) return embed @formatter.compact(event="curseprofile/profile-edited") -def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: +def compact_curseprofile_profile_edited(ctx: Context, change: dict) -> DiscordMessage: author, author_url = compact_author(ctx, change) - target_user = change["title"].split(':', 1)[1] + target_user = change["title"].split(':', 1)[1] link = clean_link(create_article_path("UserProfile:" + sanitize_to_url(target_user))) - if target_user != author: - if ctx.parsedcomment is None: # If the field is empty + if target_user != author: + if ctx.parsedcomment is None: # If the field is empty edit_clear_message = _("[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s profile.") else: edit_clear_message = _("[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s profile. *({desc})*") - content = edit_clear_message.format(author=author, author_url=author_url, target=sanitize_to_markdown(target_user), target_url=link, + content = edit_clear_message.format(author=author, author_url=author_url, target=sanitize_to_markdown(target_user), target_url=link, field=profile_field_name(change["logparams"]['4:section'], False), desc=ctx.parsedcomment) - else: - if ctx.parsedcomment is None: # If the field is empty + else: + if ctx.parsedcomment is None: # If the field is empty edit_clear_message = _("[{author}]({author_url}) cleared the {field} on [their own]({target_url}) profile.") else: edit_clear_message = _("[{author}]({author_url}) edited the {field} on [their own]({target_url}) profile. *({desc})*") - content = edit_clear_message.format(author=author, author_url=author_url, target_url=link, + content = edit_clear_message.format(author=author, author_url=author_url, target_url=link, field=profile_field_name(change["logparams"]['4:section'], False), desc=ctx.parsedcomment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -73,30 +74,30 @@ def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: @formatter.embed(event="curseprofile/comment-created") -def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: +def embed_curseprofile_comment_created(ctx: Context, change: dict) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) - target_user = change["title"].split(':', 1)[1] - if target_user != change["user"]: - embed["title"] = _("Left a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) - else: - embed["title"] = _("Left a comment on their own profile") - if settings["appearance"]["embed"]["show_edit_changes"]: - embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"]) + target_user = change["title"].split(':', 1)[1] + if target_user != change["user"]: + embed["title"] = _("Left a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) + else: + embed["title"] = _("Left a comment on their own profile") + if settings["appearance"]["embed"]["show_edit_changes"]: + embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"]) embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) return embed @formatter.compact(event="curseprofile/comment-created") -def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: +def compact_curseprofile_comment_created(ctx: Context, change: dict) -> DiscordMessage: author, author_url = compact_author(ctx, change) - target_user = change["title"].split(':', 1)[1] - link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) - if target_user != author: - content = _("[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile.").format( + target_user = change["title"].split(':', 1)[1] + link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) + if target_user != author: + content = _("[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile.").format( author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user)) - else: - content = _("[{author}]({author_url}) left a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link) + else: + content = _("[{author}]({author_url}) left a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -104,30 +105,30 @@ def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: @formatter.embed(event="curseprofile/comment-edited") -def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: +def embed_curseprofile_comment_edited(ctx: Context, change: dict) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) - target_user = change["title"].split(':', 1)[1] - if target_user != change["user"]: - embed["title"] = _("Edited a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) - else: - embed["title"] = _("Edited a comment on their own profile") - if settings["appearance"]["embed"]["show_edit_changes"]: - embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"]) + target_user = change["title"].split(':', 1)[1] + if target_user != change["user"]: + embed["title"] = _("Edited a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) + else: + embed["title"] = _("Edited a comment on their own profile") + if settings["appearance"]["embed"]["show_edit_changes"]: + embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"]) embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) return embed @formatter.compact(event="curseprofile/comment-edited") -def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: +def compact_curseprofile_comment_edited(ctx: Context, change: dict) -> DiscordMessage: author, author_url = compact_author(ctx, change) - target_user = change["title"].split(':', 1)[1] - link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) - if target_user != author: - content = _("[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile.").format( + target_user = change["title"].split(':', 1)[1] + link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) + if target_user != author: + content = _("[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile.").format( author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user)) - else: - content = _("[{author}]({author_url}) edited a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link) + else: + content = _("[{author}]({author_url}) edited a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -135,30 +136,30 @@ def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: @formatter.embed(event="curseprofile/comment-replied") -def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: +def embed_curseprofile_comment_replied(ctx: Context, change: dict) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) - target_user = change["title"].split(':', 1)[1] - if target_user != change["user"]: - embed["title"] = _("Replied to a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) - else: - embed["title"] = _("Replied to a comment on their own profile") - if settings["appearance"]["embed"]["show_edit_changes"]: - embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"]) + target_user = change["title"].split(':', 1)[1] + if target_user != change["user"]: + embed["title"] = _("Replied to a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) + else: + embed["title"] = _("Replied to a comment on their own profile") + if settings["appearance"]["embed"]["show_edit_changes"]: + embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"]) embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) return embed @formatter.compact(event="curseprofile/comment-replied") -def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: +def compact_curseprofile_comment_replied(ctx: Context, change: dict) -> DiscordMessage: author, author_url = compact_author(ctx, change) - target_user = change["title"].split(':', 1)[1] - link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) - if target_user != author: - content = _("[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s profile.").format( + target_user = change["title"].split(':', 1)[1] + link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) + if target_user != author: + content = _("[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s profile.").format( author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user)) - else: - content = _("[{author}]({author_url}) replied to a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link) + else: + content = _("[{author}]({author_url}) replied to a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -166,17 +167,17 @@ def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: @formatter.embed(event="curseprofile/comment-deleted") -def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: +def embed_curseprofile_comment_deleted(ctx: Context, change: dict) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) - target_user = change["title"].split(':', 1)[1] - if target_user != change["user"]: - embed["title"] = _("Deleted a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) - else: - embed["title"] = _("Deleted a comment on their own profile") - if ctx.parsedcomment is not None: - embed["description"] = ctx.parsedcomment - if "4:comment_id" in change["logparams"]: + target_user = change["title"].split(':', 1)[1] + if target_user != change["user"]: + embed["title"] = _("Deleted a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) + else: + embed["title"] = _("Deleted a comment on their own profile") + if ctx.parsedcomment is not None: + embed["description"] = ctx.parsedcomment + if "4:comment_id" in change["logparams"]: embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])) else: embed["url"] = create_article_path("UserProfile:" + sanitize_to_url(target_user)) @@ -184,20 +185,20 @@ def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: @formatter.compact(event="curseprofile/comment-deleted") -def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: +def compact_curseprofile_comment_deleted(ctx: Context, change: dict) -> DiscordMessage: author, author_url = compact_author(ctx, change) - target_user = change["title"].split(':', 1)[1] - if "4:comment_id" in change["logparams"]: - link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) + target_user = change["title"].split(':', 1)[1] + if "4:comment_id" in change["logparams"]: + link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))) else: link = clean_link(create_article_path("UserProfile:" + sanitize_to_url(target_user))) parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - if target_user != author: - content = _("[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile.{reason}").format( + if target_user != author: + content = _("[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile.{reason}").format( author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user), reason=parsed_comment) - else: - content = _("[{author}]({author_url}) deleted a [comment]({comment}) on their own profile.{reason}").format( - author=author, author_url=author_url, comment=link, reason=parsed_comment) + else: + content = _("[{author}]({author_url}) deleted a [comment]({comment}) on their own profile.{reason}").format( + author=author, author_url=author_url, comment=link, reason=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -205,29 +206,29 @@ def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: @formatter.embed(event="curseprofile/comment-purged") -def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: +def embed_curseprofile_comment_purged(ctx: Context, change: dict) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) - target_user = change["title"].split(':', 1)[1] - if target_user != change["user"]: - embed["title"] = _("Purged a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) - else: - embed["title"] = _("Purged a comment on their own profile") - if ctx.parsedcomment is not None: - embed["description"] = ctx.parsedcomment - embed["url"] = create_article_path("UserProfile:" + sanitize_to_url(target_user)) + target_user = change["title"].split(':', 1)[1] + if target_user != change["user"]: + embed["title"] = _("Purged a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user)) + else: + embed["title"] = _("Purged a comment on their own profile") + if ctx.parsedcomment is not None: + embed["description"] = ctx.parsedcomment + embed["url"] = create_article_path("UserProfile:" + sanitize_to_url(target_user)) return embed @formatter.compact(event="curseprofile/comment-purged") -def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: +def compact_curseprofile_comment_purged(ctx: Context, change: dict) -> DiscordMessage: author, author_url = compact_author(ctx, change) - target_user = change["title"].split(':', 1)[1] - link = clean_link(create_article_path("UserProfile:" + sanitize_to_url(target_user))) + target_user = change["title"].split(':', 1)[1] + link = clean_link(create_article_path("UserProfile:" + sanitize_to_url(target_user))) parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" - if target_user != author: - content = _("[{author}]({author_url}) purged a comment on [{target}]({link})'s profile.{reason}").format( + if target_user != author: + content = _("[{author}]({author_url}) purged a comment on [{target}]({link})'s profile.{reason}").format( author=author, author_url=author_url, link=link, target=sanitize_to_markdown(target_user), reason=parsed_comment) - else: - content = _("[{author}]({author_url}) purged a comment on [their own]({link}) profile.{reason}").format(author=author, author_url=author_url, link=link) + else: + content = _("[{author}]({author_url}) purged a comment on [their own]({link}) profile.{reason}").format(author=author, author_url=author_url, link=link) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content, reason=parsed_comment) From cdce17ab44db5c2bddd9aa358d45a20f2e84b753 Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 19 May 2021 17:00:48 +0200 Subject: [PATCH 106/173] Some small fixes and tweaks to make it work --- extensions/base/__init__.py | 5 ++++- extensions/base/curseprofile.py | 6 +++--- extensions/base/interwiki.py | 14 +++++++------- extensions/base/renameuser.py | 10 +++++----- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/extensions/base/__init__.py b/extensions/base/__init__.py index 9624133..e6ffd54 100644 --- a/extensions/base/__init__.py +++ b/extensions/base/__init__.py @@ -20,4 +20,7 @@ import extensions.base.cargo import extensions.base.datadump import extensions.base.sprite import extensions.base.translate -import extensions.base.discussions \ No newline at end of file +import extensions.base.discussions +import extensions.base.curseprofile +import extensions.base.interwiki +import extensions.base.renameuser \ No newline at end of file diff --git a/extensions/base/curseprofile.py b/extensions/base/curseprofile.py index 24c7138..3582a79 100644 --- a/extensions/base/curseprofile.py +++ b/extensions/base/curseprofile.py @@ -18,13 +18,13 @@ import logging from src.configloader import settings from src.discord.message import DiscordMessage from src.api import formatter -from src.i18n import rc_formatters +from src.i18n import formatters_i18n from src.api.context import Context from src.api.util import embed_helper, clean_link, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url from src.misc import profile_field_name -_ = rc_formatters.gettext -ngettext = rc_formatters.ngettext +_ = formatters_i18n.gettext +ngettext = formatters_i18n.ngettext # CurseProfile - https://help.fandom.com/wiki/Extension:CurseProfile diff --git a/extensions/base/interwiki.py b/extensions/base/interwiki.py index 99477b9..a9dffd2 100644 --- a/extensions/base/interwiki.py +++ b/extensions/base/interwiki.py @@ -17,12 +17,12 @@ import logging from src.discord.message import DiscordMessage from src.api import formatter -from src.i18n import rc_formatters +from src.i18n import formatters_i18n from src.api.context import Context -from src.api.util import embed_helper, clean_link, compact_author, create_article_path, sanitize_to_url +from src.api.util import embed_helper, clean_link, compact_author, create_article_path, sanitize_to_url, compact_summary -_ = rc_formatters.gettext -ngettext = rc_formatters.ngettext +_ = formatters_i18n.gettext +ngettext = formatters_i18n.ngettext # Interwiki - https://www.mediawiki.org/wiki/Extension:Interwiki @@ -45,7 +45,7 @@ def embed_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage: def compact_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage: author, author_url = compact_author(ctx, change) link = clean_link(create_article_path("Special:Interwiki")) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _( "[{author}]({author_url}) added an entry to the [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], @@ -72,7 +72,7 @@ def embed_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage: def compact_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage: author, author_url = compact_author(ctx, change) link = clean_link(create_article_path("Special:Interwiki")) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _( "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format( author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'], @@ -98,7 +98,7 @@ def embed_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage: def compact_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage: author, author_url = compact_author(ctx, change) link = clean_link(create_article_path("Special:Interwiki")) - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) content = _("[{author}]({author_url}) deleted an entry in [interwiki table]({table_url}){desc}").format( author=author, author_url=author_url, diff --git a/extensions/base/renameuser.py b/extensions/base/renameuser.py index fa2aad4..bdffbb4 100644 --- a/extensions/base/renameuser.py +++ b/extensions/base/renameuser.py @@ -17,12 +17,12 @@ import logging from src.discord.message import DiscordMessage from src.api import formatter -from src.i18n import rc_formatters +from src.i18n import formatters_i18n from src.api.context import Context -from src.api.util import embed_helper, clean_link, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url +from src.api.util import embed_helper, compact_summary, clean_link, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url -_ = rc_formatters.gettext -ngettext = rc_formatters.ngettext +_ = formatters_i18n.gettext +ngettext = formatters_i18n.ngettext # Renameuser - https://www.mediawiki.org/wiki/Extension:Renameuser @@ -52,7 +52,7 @@ def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage: author, author_url = compact_author(ctx, change) link = clean_link(create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"]))) edits = change["logparams"]["edits"] - parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*" + parsed_comment = compact_summary(ctx) if edits > 0: content = ngettext( "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to [{new_name}]({link}){comment}", From 843fc0c7bc4296e96db651aa0ecde2426672444b Mon Sep 17 00:00:00 2001 From: Frisk Date: Fri, 21 May 2021 20:18:39 +0200 Subject: [PATCH 107/173] Some small fixes and tweaks to make translation better --- extensions/base/discussions.py | 4 ++-- extensions/base/mediawiki.py | 2 +- src/api/util.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/extensions/base/discussions.py b/extensions/base/discussions.py index 9a778b8..db609e5 100644 --- a/extensions/base/discussions.py +++ b/extensions/base/discussions.py @@ -190,9 +190,9 @@ def embed_discussion_forum(ctx: Context, post: dict): tag_displayname.append("[{title}]({url})".format(title=tag["articleTitle"], url=create_article_path( quote_plus(tag["articleTitle"].replace(" ", "_"), "/:?=&")))) if len(", ".join(tag_displayname)) > 1000: - embed.add_field(_("Tags"), _("{} tags").format(len(post["_embedded"]["thread"][0]["tags"]))) + embed.add_field(formatters_i18n.pgettext("Fandom discussions Tags/Forums", "Tags"), formatters_i18n.pgettext("Fandom discussions amount of Tags/Forums", "{} tags").format(len(post["_embedded"]["thread"][0]["tags"]))) else: - embed.add_field(_("Tags"), ", ".join(tag_displayname)) + embed.add_field(formatters_i18n.pgettext("Fandom discussions Tags/Forums", "Tags"), ", ".join(tag_displayname)) else: embed.event_type = "discussion/forum/reply" embed["title"] = _("Replied to \"{title}\"").format(title=post["_embedded"]["thread"][0]["title"]) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 3f1218e..905221b 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -863,7 +863,7 @@ def compact_rights_rights(ctx, change): else: content = _("{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}{comment}").format( author=_("System"), author_url=author_url, target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link, - added=added, comma="," if added and removed else "",removed=removed, comment=parsed_comment) + added=added, comma=_(",") if added and removed else "",removed=removed, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) diff --git a/src/api/util.py b/src/api/util.py index 5e02c74..e50e954 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -157,7 +157,7 @@ def embed_helper(ctx: Context, message: DiscordMessage, change: dict, set_user=T tag_displayname.append(ctx.client.tags[tag]) else: tag_displayname.append(tag) - message.add_field(_("Tags"), ", ".join(tag_displayname)) + message.add_field(formatters_i18n.pgettext("recent changes Tags", "Tags"), ", ".join(tag_displayname)) if ctx.categories is not None and not (len(ctx.categories["new"]) == 0 and len(ctx.categories["removed"]) == 0): new_cat = (_("**Added**: ") + ", ".join(list(ctx.categories["new"])[0:16]) + ( "\n" if len(ctx.categories["new"]) <= 15 else _(" and {} more\n").format( From 5c4a2f0cbb8c836eddbdf675fdc2be8508e2ee56 Mon Sep 17 00:00:00 2001 From: MarkusRost Date: Thu, 20 May 2021 23:40:44 +0000 Subject: [PATCH 108/173] Translated using Weblate (German) Currently translated at 100.0% (20 of 20 strings) Translation: RcGcDw/rcgcdw Translate-URL: https://translate.wikibot.de/projects/rcgcdw/main/de/ --- locale/de/LC_MESSAGES/rcgcdw.mo | Bin 2550 -> 1722 bytes locale/de/LC_MESSAGES/rcgcdw.po | 16 ++++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/locale/de/LC_MESSAGES/rcgcdw.mo b/locale/de/LC_MESSAGES/rcgcdw.mo index c8e8b5b3be0f5b9b9af1dadc56978ae515cfb6b0..3befaa266864ab59a631eae2714d0a4013c6c91b 100644 GIT binary patch delta 809 zcmX}pzi-n(6bJB2f21V+1x+akfw-0;r9zHCR2@PESh6Wm;sm8FRVs!$_K}(-=hSvm zL8vo<#K06GHfE66Dv)4iWM@O=Phfzl1K(!?PkR2`8MMg%uR*i|2dBO2hP`!4*&oF literal 2550 zcmZXV%Wqpn6o&_Bp_o@G&+?oWidvy-Cuu5*+aO|+RxM32O-ey5qVc^a_SDyN&CFb< z?qgLX_ya&fqUz7G5mWIKNaS^pm(`|B@|_1^#=1zA8>YzO)Lok4yf@MVzwbp&L)>mcu24)Ph0 z?RXD_>EZ*B?YIQ8{a=LnZ-e|3$aeh#@_E-lxU0~y4aBn)`+1J{v(Fw!W!>uw#{|bA z$H>!RLV|op_BR*4_d}>pp>phUY;Q-!(-bkt_j&|%RA7n-;VyQd&+)`}=E6SW?}Fc8 zec`)|O5slk{O&^TK6gQ?*z3&fSueOCQKJ32E)SnvdS&CTjRRORn{>1ZTAirnUYe|t zC4CvI4vAXdlap~vnIEg_in8(RZc2q)QA#=V^*CW}=a(mN& z+c1(l+PH)V!V@YOWru*MEyYkg?l{4QVxVvV zH%@ePnvyX(?~J<&J(GJ1z#16Y8n#Xht%83X!T2P=3DfEX#9fFYFO@o1KQW(UBy21HMKyRb}Y}bu;Uu1=rL`RLh$# zTFNk7e=Rxz-|(VnPI;=zsfnqHXyV0aVy~RsTb-PK9`Z!#m~uW^vdXwr;o4QXplmyL zCpZ`mzJzH5^O_Vbk?K_CVX_@%;#wac!nVybk9R=SFfn{l#Q z=_qX~302mVRb@h@g(C~|YuA`8Pn2GP3-NH#QojpxJ)QBDZi>wZIE<|$KXY>FP_%z- z9b3IZHkvnamT1$g%KZ)POZ7CjDvb_hw&SYObPLhVOdXKJ?u?N;X5{37(wos?GK7HP zd)G65csW&`E>B|SSQcl|BA!1c?yD3gCA2&@UkZB&-tJdrx8EeswwAknIa%H}+FECe zp*Dq{OP=V`kwZK%RZ!sCJiq0QC=(!E;myhw@3~yH8{5776$R~Zk4BNh|C6Q51YscR@-x) z-s12^ztj+1;sA}03-wZcj*C%#J;gn+Z zEVayVzUYydLoR7^>KJ!IDhX~H!W5gmLb^m|VD+JoJUL7$Ll|UR17nJo@a+$-AlAhq swF{pI!q@ya08bWSEKX&3!(nU0DP$LUc$8iEsNy_Y%PzfUI?gWt0nx^c9smFU diff --git a/locale/de/LC_MESSAGES/rcgcdw.po b/locale/de/LC_MESSAGES/rcgcdw.po index b84a9cc..27a1ecd 100644 --- a/locale/de/LC_MESSAGES/rcgcdw.po +++ b/locale/de/LC_MESSAGES/rcgcdw.po @@ -3,16 +3,16 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-18 13:47+0200\n" -"PO-Revision-Date: 2020-09-03 13:14+0200\n" -"Last-Translator: MarkusRost <>\n" -"Language-Team: German \n" +"PO-Revision-Date: 2021-05-21 18:18+0000\n" +"Last-Translator: MarkusRost \n" +"Language-Team: German " +"\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Poedit 2.4.1\n" +"X-Generator: Weblate 4.6\n" "X-Loco-Source-Locale: de_DE\n" "Generated-By: pygettext.py 1.5\n" "X-Loco-Parser: loco_parse_po\n" @@ -100,15 +100,15 @@ msgstr "Tageswert" #: src/rcgcdw.py:214 msgid "~~hidden~~" -msgstr "" +msgstr "~~versteckt~~" #: src/rcgcdw.py:216 msgid "No description provided" -msgstr "" +msgstr "Keine Zusammenfassung angegeben" #: src/rcgcdw.py:219 msgid "hidden" -msgstr "" +msgstr "versteckt" #~ msgid "director" #~ msgstr "Direktor" From 70302b2d308556abb3aa8ff6e2b74a4b50f8d109 Mon Sep 17 00:00:00 2001 From: Eduaddad Date: Fri, 21 May 2021 02:35:56 +0000 Subject: [PATCH 109/173] Translated using Weblate (Portuguese (Brazil) (pt-br)) Currently translated at 100.0% (20 of 20 strings) Translation: RcGcDw/rcgcdw Translate-URL: https://translate.wikibot.de/projects/rcgcdw/main/pt-br/ --- locale/pt-br/LC_MESSAGES/rcgcdw.mo | Bin 2589 -> 1772 bytes locale/pt-br/LC_MESSAGES/rcgcdw.po | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/locale/pt-br/LC_MESSAGES/rcgcdw.mo b/locale/pt-br/LC_MESSAGES/rcgcdw.mo index 78e4730ce8689d5db63d8b780f737fec07525186..b75e1b9024ed19cd2bcd5acdcee9204cfd055678 100644 GIT binary patch delta 685 zcmYk(ze^lJ6u|Mf{*J%mkBd=B!saSP5Gx6!j8!BSA%S#yw>!omcRT0q?I9fQbz+k$ zgjA^v1hKq7!30wH9|#hA+jJIw-@0NR_vSOR!|i)B`@M8E*14GK`zpjE@(KBid`i|l z2I4Qy<0a1EHI{L@M`R3F@gc4i>vuTLx{42Q7l*NpWjrW6#s!g%oG}??;~(lDdU{1h za1cf4^bOF!V>kR%VdfNe{cfN z@i|`MB92p4eSv!7D(VRv#kzxfW1n#jPmrJdX3$2@P#e8O`pk<%z9(Bu^z?nCzEp#Y z$Q#nz(39VV7T3^Er9pprA#Hky{>Q7 zp}ddmZfg9%Ma|e&)253P*|A}0B5AiOwbbnU3zgQ#Wxvh1zbILDyPIWSzV)wnM+QE4 z-fDMyu;XoRm}n=hSBg5PKTnUGzwP441U9V5tD=GpU2GEH>;<(nu`QQ~3({KC-IuGI L@V|1myICeTqGxJz literal 2589 zcmZvcO>7%Q6vv0sLUH*h<)f6(;iD)~wQ-ylwQ|}Dr*_()I0>m!D3@xyJ8`C6@3=Fw zPE1;H=ml}&g2Vw11&OLvPpE*z1tEjP4Fm@+sDcBhiW}mBMESq<*l`3S&-~^+zkT!G z+u3(>*VgwK#*3IwV$R;d*h}DrEm$xX?quw7@Kx|pFb1CkFM;=gpMVd5H@y4}ct7MH z!F#~pz#MoBr04$f+_ROj5y*$ZdqD}3y#aTC7r=+Ww?TUT1J5fUT(D2Q{5kj_ua-@vjwiaVqYe*6Q?jX!la_}oB5BBom4%8sT(_lZE4d1>!)>UIWEGrjc~eA^ zRkd}QySC&jIyL`M*iD+$%FQOE@FtXxjJPmPg|YX%S!datT=>~t>%Z#N4FMyVCM#tIK$Sk3{cC4NnDbmmg$3mI7)O0)*+(x296B`*)vOPdl zMuu=a*jPq^LXnk#7R#C{j%AXlv^m%c?2^<;57;2cmELMuFDlf>N(3KySY|s`x7ezb z=d#7JRdr6CX{5qLN+hf!g~=An*4rXZS%6Jw(xgQwG9;oQ)$BnHC^Pnh51@=48@}R7?g#R zMLsb;F&-2O!Nfsc*k2q!xNjT-hQT5VOecA})0NUbkuFinteLk2Y|n*SgE;T7jvwwTX5 z?@^9Xo$!vwBAIXXieU35Y=qHjzA03aZ@Hju@*CcZJk#W=Gu6sQtqNn~xnp=wxE(>Q z(?Z%#uDN_GhKou1R*aSI$Wm=OIJ99$F)T|HRFY6fDrpq?p}KOpg*Y`L4yLtf+9FR{ znP`tpO!D6LNWzcu!es9C;J8dAE+v)aHCac2BtI}VF;>X=PSCy5{aE+g0))@xP+J)O z6Bl#v_n;f}4Tcq&hf>d$N0JNb6w0EUnKhe38fo`xlZ%$X^_MBfHR0lXs(jlJu|vp_ zw(OL$h>kZP#vJEgHcGGs)G+P&;*o}0P#^KwWNI{hg=I@N zC3kv5sRz0tO9W9uA8B|y`Z^Jr*Lgdyr0&tyI5D%|kdPSE?4(4-2u4NJ0q7!7S5XoA zpyhHcj8mK0QF}?_6{!q*5!y|&dl`L9XJ56YLJjM5y?cXNkEX^WnC)H-(^&UO4Mxz! z2LFf%LXW-H)9*YWniQpxbsi(oeheN$=jmQclpbtIg}y@y0>th$EcpC;T?g@@+ceSy pCGtei9K3(z3UyN?h%|#`z3xLVITD<{GbR#EbEpY5Wi)6){{rSxs-pk^ diff --git a/locale/pt-br/LC_MESSAGES/rcgcdw.po b/locale/pt-br/LC_MESSAGES/rcgcdw.po index e87355a..aeedb2e 100644 --- a/locale/pt-br/LC_MESSAGES/rcgcdw.po +++ b/locale/pt-br/LC_MESSAGES/rcgcdw.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-18 13:47+0200\n" -"PO-Revision-Date: 2020-11-27 13:07+0000\n" -"Last-Translator: dr03ramos \n" +"PO-Revision-Date: 2021-05-21 18:18+0000\n" +"Last-Translator: Eduaddad \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt-br\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6\n" #: src/rcgcdw.py:116 #, python-brace-format @@ -102,15 +102,15 @@ msgstr "Pontuação do dia" #: src/rcgcdw.py:214 msgid "~~hidden~~" -msgstr "" +msgstr "~~oculto~~" #: src/rcgcdw.py:216 msgid "No description provided" -msgstr "" +msgstr "Nenhuma descrição fornecida" #: src/rcgcdw.py:219 msgid "hidden" -msgstr "" +msgstr "oculto" #~ msgid "director" #~ msgstr "diretor" From dd7a56e7841d973040ae9e6fa11bc15d9e6e0c20 Mon Sep 17 00:00:00 2001 From: Philo04 Date: Fri, 21 May 2021 17:15:25 +0000 Subject: [PATCH 110/173] Translated using Weblate (Russian) Currently translated at 95.0% (19 of 20 strings) Translation: RcGcDw/rcgcdw Translate-URL: https://translate.wikibot.de/projects/rcgcdw/main/ru/ --- locale/ru/LC_MESSAGES/rcgcdw.mo | Bin 3393 -> 2278 bytes locale/ru/LC_MESSAGES/rcgcdw.po | 19 ++++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/locale/ru/LC_MESSAGES/rcgcdw.mo b/locale/ru/LC_MESSAGES/rcgcdw.mo index f013f954c7112d576e58cb0d95f20b2de9b63b4d..d980e6492aad5f18f56c0f296f09f468d45c3490 100644 GIT binary patch delta 805 zcmYk&&rj1}7zgkd2LtC11O>^2SRo;srfW8Ee|_U-dLUz5Ma+TX_qUlYUy z+Cn1FixCv)rqvuh3DZ&jF32-hP=o*$PZkAyr?@+#d=~0&)^y?!w$R-f50nn5{K}{ z7T{&L3a9XY(!k9nJa`3b@I8D1r-li60}tRum>Y?#K)$~Q)9^Xu4Sa+X@C!T#zd_U& zP6vd|aQWUrB%e}PDHY*$FpMl~bs;JTY8tyc85)goo5{)8Exm^Z~$=D1efmId8+U5na6N;eh_ zwVCdG7`obiq$#>sEQzWj+$+h&{I#{xl9nh?*ApuawcQ%^>W(bjT`3fVC8ekdIjyMV z3%3eOhH=h0(44PjVZcx9!T3NrnWnXAt=GMb$)xS5JXe}=jH+Qa zr7ddNlH*JL^JKyCJM;0Uor8Eec{A})Tx2$LqG}$nb=1X#Z05${=@o07@L|vfp8==A`@t{32f(tPe+RC? z{73K}@Ha34UI%I44b6?K80)}%2Y4SSK=Sv%d%;QYLGTPn`#;va2qFYq)bmT=I?TTX z?*@MY>HMGd{5nW+{{Zg<{{kuA>eY;G0M~-#zZs-FdO(V^Q`=ty@yFi5gZ3Q+sqVvi zeiWoQ)8J8PHxKT{eBE7)^@0b$3^)g-z+b^l;CdYLB-jH!4Gw~jf*$xdI0M??MeqY~ z1B#djKLsBFdyxz=1CswJ*a@BjN$0P?=fDW0x^IAM!9PKIpKBm8o!1FczWpGrp9a^1 z^C0!Zmmv9n50c;SAjR!~SkyBEAk`m$&x2<{@-OT4A3&<}21xz00pdLbZUrHi(wxp) zg`3W&SfuY}+*B9jYPqN5QjvQ!bR}M%;KcN*mIHw5wm# zAG+PuyPxpLy`naEkeiXoYYhjz8@ zYBj)RXRcs5I;zk5!+<;Ph?^_&tXUAOzZeLgXGcvZFLG?RY1u{Yjtg(x5)+sfxu11C z!S>)}pBK!WU<0lnsBq(gkGi3Ei@|TPguZBXA%k|IdPI(!USMTy9l6!!v)9E$-65VF zvTT8o8|PpJMKw3`zoe_^e>rws0IPEHs8DMot(A4fr6*(fH}J zI4kJm3nZV@@R?uq-7z*H#1ZxI*@Sh(I+zblFK3w!D+<$751$C_HUcv9<&X}6|>22G2JWO{un^VbjI>ona;WSKcN~co% z6`tg9$Nc4VcYSF`x`&2pM{-9h$tNe{E$~TpVowTtx;wWg-ZowpjzIg63K^H$fOmKG zbfpsUCo9XcB5To!=%iefRawy=Y^yn%YipLZy7^i(B})jfBulrNsyCai$|acUpML96 zDueb*DvS0@l!^QZkuIZ#E3!)UP)ew(inOjoGtqnerh{rsUXWKgxyvOus$qpos-+s8 ziO$JoCgsb zp9IyW=xmZXZg3ok1r#zzr63zr30B&g<88Nks~{+Y4yW?yD=AZ5O#>y~gSq~_4^u>%y@HE0T6KrQjg6+&CtNIOzrjZ^pX-w#oYD{Pt7x(^(VeGH%$N;|( z=o^w4?`^JGzzJ3CG+F^o&hY9;3^m0eE2s2|+x?~~+2|*U-qbQ_-I!35H759}QH_BP jfWlQ&MDDX3Dd9JdT)#%Ml{F}RC0g_UG{l^0{G\n" +"Language-Team: Russian \n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 2.4.1\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.6\n" #: src/rcgcdw.py:116 #, python-brace-format @@ -108,7 +109,7 @@ msgstr "Очков за день" #: src/rcgcdw.py:214 msgid "~~hidden~~" -msgstr "" +msgstr "~~скрыто~~" #: src/rcgcdw.py:216 msgid "No description provided" @@ -116,7 +117,7 @@ msgstr "" #: src/rcgcdw.py:219 msgid "hidden" -msgstr "" +msgstr "скрыто" #~ msgid "director" #~ msgstr "директор" From 5fb25b900c8bef35cba241197a145820c51bfb08 Mon Sep 17 00:00:00 2001 From: lakejason0 Date: Fri, 21 May 2021 15:40:34 +0000 Subject: [PATCH 111/173] Translated using Weblate (Chinese (Simplified) (zh-hans)) Currently translated at 100.0% (20 of 20 strings) Translation: RcGcDw/rcgcdw Translate-URL: https://translate.wikibot.de/projects/rcgcdw/main/zh-hans/ --- locale/zh-hans/LC_MESSAGES/rcgcdw.mo | Bin 2348 -> 1629 bytes locale/zh-hans/LC_MESSAGES/rcgcdw.po | 10 +++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/locale/zh-hans/LC_MESSAGES/rcgcdw.mo b/locale/zh-hans/LC_MESSAGES/rcgcdw.mo index 2bdec79a81bbd8f583378539a2768e4732002531..ee0972aa6e70a576fb1a79ae06280c0e1db006b5 100644 GIT binary patch delta 634 zcmXxg%_{_P7{Kx0df8p9xAAVN$w6GiMdIq_rHF$Q%S=qR9ro?AnaxGHShY#v;-bVs z92FNw`45QFhBM_L`98Dbspt2Z-^_33dFDCS9z)qDt!z&bO=JgoM|P4?9}Dq}?f8Pt z_=8>8P@+^d4q`2idixoyVZVqKxQ>;W!7kkLJjEWRvg)3T5D&gkUMMM5stQBcg00wq z{piP0Y{W5?4=>;eO|7Dw)5?o>qcl8>(%=+o7(uC*bj>QY>D|~tIe6%KhVsHShVcQV z!4J<*&tH^tLAsMEhEW6aO+W+N;UJn1?gVFpJ}?`s2d9D8!5LtWiXVZ~5kCi0!S~=4@Ds>+ z-xcR26Xg*FX+1h=m=GW*7~oX!5SR&uKrV1W@dk(*bWg>-;7r61!O7qYkPq-i#h*Z~ z`xTrB{sg&RN(xaH_NR1oI3Wk*gRBO*&;~WW6~vGBq2a_LkZ)e5;)7ro;(G8I)H?_A z!OJEkcm!nST0vH-1Iz#iz%=YnPq+iVR*ZtY@Qb1Yr{RQ5Z~>SL@{KksZd2R?&cgTs zkn^iR&TCZj=M}Gjti)|F$Wr#Gfqund#m9i|_!r2^ zIk1T9Ob6$I8L7}8iX{RNpN7)mEGIukHoh^0_|I70CGa_FlyAEfz8KC*vfR88tFa8u z511b~8@|rCu>#q&OGNzFZ%Qk8hbzzcMt6@h+cr>q2K&TtS zgED_RCJC?31Em2w(U?@B`+UOh*X;@l{^@HN_1l(Ez@mWPDowN|C5|NwGKDAL_bQlV z)|i1xsurSryfLX-FV~AoY|ZfMnxATfW{fu`)mCXfTO4-gX;mc!&RVpGSI`clt-`S- zcX$3KT-DM8{`}3FCDuCKF1IVc(4FsgJ6*1|g{xM&VBOu0{YegYL19~Z%8y`d=uG@U zOZ;fV*icBGy#KK&JT`QUWM6yq(zW>AI@u7$9L1YDkDZD{LwyvzFeuMQ zMh6Ee-hLu_YFM_MqtX5|vB6G~S35|C>*PQW$>tV$XXp=jGgOP7?ZtdO&u^EZMwAL6 shih|@*o{_-b+yNu8#$6K5!wqeWLHRrZxZJy3HZPR-ST2nLIpndZ|?Ug5dZ)H diff --git a/locale/zh-hans/LC_MESSAGES/rcgcdw.po b/locale/zh-hans/LC_MESSAGES/rcgcdw.po index c83dcec..c9534a5 100644 --- a/locale/zh-hans/LC_MESSAGES/rcgcdw.po +++ b/locale/zh-hans/LC_MESSAGES/rcgcdw.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-18 13:47+0200\n" -"PO-Revision-Date: 2020-12-22 00:13+0000\n" +"PO-Revision-Date: 2021-05-21 18:18+0000\n" "Last-Translator: lakejason0 \n" "Language-Team: Chinese (Simplified) \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6\n" #: src/rcgcdw.py:116 #, python-brace-format @@ -96,15 +96,15 @@ msgstr "每日分数" #: src/rcgcdw.py:214 msgid "~~hidden~~" -msgstr "" +msgstr "~~隐藏~~" #: src/rcgcdw.py:216 msgid "No description provided" -msgstr "" +msgstr "没有提供描述" #: src/rcgcdw.py:219 msgid "hidden" -msgstr "" +msgstr "隐藏" #~ msgid "director" #~ msgstr "向导" From f1e4d8963c672cbc02b87a5a5c49b11f9a210608 Mon Sep 17 00:00:00 2001 From: lakejason0 Date: Fri, 21 May 2021 15:43:30 +0000 Subject: [PATCH 112/173] Translated using Weblate (Chinese (Traditional) (zh-hant)) Currently translated at 100.0% (20 of 20 strings) Translation: RcGcDw/rcgcdw Translate-URL: https://translate.wikibot.de/projects/rcgcdw/main/zh-hant/ --- locale/zh-hant/LC_MESSAGES/rcgcdw.mo | Bin 2353 -> 1622 bytes locale/zh-hant/LC_MESSAGES/rcgcdw.po | 10 +++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/locale/zh-hant/LC_MESSAGES/rcgcdw.mo b/locale/zh-hant/LC_MESSAGES/rcgcdw.mo index 027100785341a3dff996980a294f5931436822fc..3e23e822576efd452e7990e23a652af2d3f9ace8 100644 GIT binary patch delta 665 zcmXxgIZPWt6oBDp?!yEykb^^7Q5lLTG&E4sfhiJbQUTsoSc1G@Y!_H8X~Iz%amW%! zmx5G*7>Pu(k|q^OoiYkiSWHC`MM{x^|E-rNz4>M|J8$03Y2-(E^=G7NPlyh(oBT%h zknj>}>Z_b#7ha$?>IMEmZCI;DpaFHi2lb+Uh9@|H+UO|Kr{4_tKOs|0^iUP4&!)jc z_yx7N{?UEtb8Bc*8r<(+)Pi*+58z**d0?#Z5|=KXF~T0~kecmH+?% literal 2353 zcmZ{kYiv|S6vsye#T6An#kV7hX+v(eZ6Lwr5tnwsYM0is74QqWdw1Ag*u8hXkCqik zilwEBRU<9RE3if$qA92aN}(YbKlsfAKAHH4N$=eyknqLu!5HKJ>>Vf@b<&yNoU>=n zoO9;f{yKBY5W{#8^C`^cI~ZF4Zn+Z+M(bUSJpsNBJ_=^QIbaWXKX?Ru5FC;6_uvDN zFM;=hzk?z0DoE#UNIpJ=u`0-m!Rep?$=(9*1Gj*)zNW^coxTJqj&oA}4y1c8N&Y7F*ChV}AHna_5!9359FXjn zO1=hCeru$h1j*i%?3KUolROO4{U<=G<7p|6NnVuv0VKaaf@JrT)c+#o3CR*jcGskQ zL&|?jc?y1{x=jPg&n)n9a5ji?mG?72JPVtFNwuUtq(S*2{fa@geHL@J)KX2K!+Zvl z>O!@qd#DD_V^Z%@Z_~ijln3Qcy?ApVl!`&`OFi)zCemOW^94-#NtFAOa-zPY@igY# z@(v5H+PsyknxmUW_3eT!C6Usd+qR@`Pc&4Xs#L%vn#$^i^lGzZuEPy8X{PdAQ?r6C z%R9p6T8C<+MT#}5dM3}!PGNQGq6=c4+nQ+!7Q@Xp&#EcG;->AC-E|7yVY=486n2Hi zwMC@~DWnPIBT`(o99_#u&y_lxtrT514FX}ko)OrYK@7T+XYGdmmMges8jhtWUB`rf z709WMWoF7-OOz8znhs04mQY>IQXQrV!*Q*=qz<8p;58{AnKOT;P}?YW)vtC zP&wY-Z@oo16K{XgtOj$KuhZ=9i<5jcu`2tCqslK*njIB!rs%zXTR{I8M%vgu{;X zDQc)zc;}jw2BzVgy#79aXq4efZ^u}1@Alv-=I`(JN6wYT2K+tm_`|0rWtdEiUnmY9 zD|Pp>z?gy_8pR3k^S$`_%Asvn4t&P^-6y?sV-mAq;e3tY${{Sciz4rhB diff --git a/locale/zh-hant/LC_MESSAGES/rcgcdw.po b/locale/zh-hant/LC_MESSAGES/rcgcdw.po index 0a174d9..798659c 100644 --- a/locale/zh-hant/LC_MESSAGES/rcgcdw.po +++ b/locale/zh-hant/LC_MESSAGES/rcgcdw.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-18 13:47+0200\n" -"PO-Revision-Date: 2020-12-29 15:21+0000\n" +"PO-Revision-Date: 2021-05-21 18:19+0000\n" "Last-Translator: lakejason0 \n" "Language-Team: Chinese (Traditional) \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6\n" #: src/rcgcdw.py:116 #, python-brace-format @@ -96,15 +96,15 @@ msgstr "每日分數" #: src/rcgcdw.py:214 msgid "~~hidden~~" -msgstr "" +msgstr "~~隱藏~~" #: src/rcgcdw.py:216 msgid "No description provided" -msgstr "" +msgstr "沒有提供描述" #: src/rcgcdw.py:219 msgid "hidden" -msgstr "" +msgstr "隱藏" #~ msgid "director" #~ msgstr "嚮導" From 5bd2455ffbe28dbe5fd609c73ef487c0f9be2b9c Mon Sep 17 00:00:00 2001 From: magiczocker Date: Fri, 21 May 2021 18:02:09 +0000 Subject: [PATCH 113/173] Translated using Weblate (German) Currently translated at 100.0% (258 of 258 strings) Translation: RcGcDw/formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/de/ --- locale/de/LC_MESSAGES/formatters.mo | Bin 0 -> 34983 bytes locale/de/LC_MESSAGES/formatters.po | 119 +++++++++++++--------------- 2 files changed, 54 insertions(+), 65 deletions(-) create mode 100644 locale/de/LC_MESSAGES/formatters.mo diff --git a/locale/de/LC_MESSAGES/formatters.mo b/locale/de/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..1ba01596e616aefb72577e8050efb3fdf0369800 GIT binary patch literal 34983 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 F{C`b<2Q&Zx literal 0 HcmV?d00001 diff --git a/locale/de/LC_MESSAGES/formatters.po b/locale/de/LC_MESSAGES/formatters.po index 6244079..fb80198 100644 --- a/locale/de/LC_MESSAGES/formatters.po +++ b/locale/de/LC_MESSAGES/formatters.po @@ -5,33 +5,21 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-18 13:59+0200\n" -"PO-Revision-Date: 2020-12-29 15:21+0000\n" -"Last-Translator: MarkusRost \n" +"PO-Revision-Date: 2021-05-21 18:19+0000\n" +"Last-Translator: magiczocker \n" "Language-Team: German \n" +"formatters/de/>\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# rcgcdw.po #-#-#-#-#\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Poedit 2.4.1\n" -"X-Loco-Source-Locale: de_DE\n" -"Generated-By: pygettext.py 1.5\n" -"X-Loco-Parser: loco_parse_po\n" -"#-#-#-#-# formatters.po #-#-#-#-#\n" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6\n" "X-Loco-Source-Locale: de_DE\n" "Generated-By: pygettext.py 1.5\n" "X-Loco-Parser: loco_parse_po\n" @@ -56,13 +44,8 @@ msgstr "Nicht angemeldeter Benutzer" #: src/api/util.py:160 extensions/base/discussions.py:193 #: extensions/base/discussions.py:195 -#, fuzzy msgid "Tags" -msgstr "" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" -"Tags\n" -"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" -"Markierungen" +msgstr "Markierungen" #: src/api/util.py:162 msgid "**Added**: " @@ -581,16 +564,14 @@ msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) löschte das Wiki *{wiki_name}*{comment}" #: extensions/base/managewiki.py:80 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted a \"{group}\" user group" -msgstr "Bearbeitete die Benutzergruppe „{usergroup_name}“" +msgstr "Löschte die Benutzergruppe „{group}“" #: extensions/base/managewiki.py:89 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" -msgstr "" -"[{author}]({author_url}) bearbeitete die Benutzergruppe *{group_name}" -"*{comment}" +msgstr "[{author}]({author_url}) löschte die Benutzergruppe *{group}*{comment}" #: extensions/base/managewiki.py:103 #, python-brace-format @@ -603,7 +584,7 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) sperrte das Wiki *{wiki_name}*{comment}" #: extensions/base/managewiki.py:124 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Modified \"{namespace_name}\" namespace" msgstr "Bearbeitete den Namensraum „{namespace_name}“" @@ -612,7 +593,7 @@ msgid "Wiki" msgstr "Wiki" #: extensions/base/managewiki.py:134 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" @@ -647,14 +628,15 @@ msgstr "" "*{comment}" #: extensions/base/managewiki.py:195 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" msgstr "Löschte das Wiki „{wiki}“" #: extensions/base/managewiki.py:203 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) löschte das Wiki *{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) wiederherstellte das Wiki *{wiki_name}*{comment}" #: extensions/base/managewiki.py:217 #, python-brace-format @@ -1115,7 +1097,7 @@ msgstr "für alle Ewigkeit" #: extensions/base/mediawiki.py:582 msgid "for less than a minute" -msgstr "" +msgstr "für weniger als eine Minute" #: extensions/base/mediawiki.py:584 msgid "year" @@ -1144,7 +1126,7 @@ msgstr[1] "Minuten" #: extensions/base/mediawiki.py:590 #, python-brace-format msgid "for {time_number} {time_unit}" -msgstr "" +msgstr "für {time_number} {time_unit}" #: extensions/base/mediawiki.py:610 msgid "Blocked from editing the following pages: " @@ -1164,7 +1146,7 @@ msgstr "Teilweise Sperre" #: extensions/base/mediawiki.py:633 msgid "Block flags" -msgstr "" +msgstr "Sperroptionen" #: extensions/base/mediawiki.py:635 #, python-brace-format @@ -1270,7 +1252,7 @@ msgstr[1] "" #: extensions/base/mediawiki.py:818 #, python-brace-format msgid " (until {date_and_time})" -msgstr "" +msgstr " (bis {date_and_time})" #: extensions/base/mediawiki.py:836 #, python-brace-format @@ -1292,24 +1274,26 @@ msgid "" "{reason}\n" "{added}{linebreak}{removed}" msgstr "" +"{reason}\n" +"{added}{linebreak}{removed}" #: extensions/base/mediawiki.py:860 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) changed group membership for [{target}]" "({target_url}) {added}{comma} {removed}{comment}" msgstr "" -"[{author}]({author_url}) änderte die Benutzergruppen für [{target}]" -"({target_url}) von {old_groups} zu {new_groups}{comment}" +"[{author}]({author_url}) änderte die Benutzergruppen für " +"[{target}]({target_url}) {added}{comma} {removed}{comment}" #: extensions/base/mediawiki.py:864 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" "{comment}" msgstr "" "{author} änderte die Benutzergruppen für [{target}]({target_url}) " -"automatisch von {old_groups} zu {new_groups}{comment}" +"automatisch {added}{comma} {removed}{comment}" #: extensions/base/mediawiki.py:877 #, python-brace-format @@ -1412,11 +1396,12 @@ msgid "Prefix: {prefix} | {desc}" msgstr "Präfix: {prefix} | {desc}" #: extensions/base/mediawiki.py:1074 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" "{desc}" -msgstr "[{author}]({author_url}) entfernte ein [Interwiki-Präfix]({table_url})" +msgstr "" +"[{author}]({author_url}) entfernte ein [Interwiki-Präfix]({table_url}){desc}" #: extensions/base/mediawiki.py:1091 #, python-brace-format @@ -1457,41 +1442,43 @@ msgstr "" "dem Inhaltsmodell {new}{comment}" #: extensions/base/mediawiki.py:1148 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "Erstellte die Markierung „{tag}“" #: extensions/base/mediawiki.py:1158 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -"[{author}]({author_url}) erstellte eine [Markierung]({tag_url}) „{tag}“" +"[{author}]({author_url}) erstellte eine [Markierung]({tag_url}) " +"„{tag}“{comment}" #: extensions/base/mediawiki.py:1180 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "Löschte die Markierung „{tag}“" #: extensions/base/mediawiki.py:1182 -#, fuzzy msgid "Removed from" -msgstr "Entfernt" +msgstr "Entfernt von" #: extensions/base/mediawiki.py:1182 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{} Revision oder Logeintrag" +msgstr[1] "{} Revisionen und/oder Logeinträge" #: extensions/base/mediawiki.py:1194 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) löschte eine [Markierung]({tag_url}) „{tag}“" +msgstr "" +"[{author}]({author_url}) löschte eine [Markierung]({tag_url}) " +"„{tag}“{comment}" #: extensions/base/mediawiki.py:1204 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revision or log entry{comment}" @@ -1499,35 +1486,37 @@ msgid_plural "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revisions and/or log entries{comment}" msgstr[0] "" -"[{author}]({author_url}) importierte [{article}]({article_url}) mit einer " -"Version{comment}" +"[{author}]({author_url}) löschte die [Markierung]({tag_url}) „{tag}“ und " +"entfernte diese von {count} Revision oder Logeintrag{comment}" msgstr[1] "" -"[{author}]({author_url}) importierte [{article}]({article_url}) mit {count} " -"Versionen{comment}" +"[{author}]({author_url}) löschte die [Markierung]({tag_url}) „{tag}“ und " +"entfernte diese von {count} Revisionen und/oder Logeinträge{comment}" #: extensions/base/mediawiki.py:1221 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Activated the tag \"{tag}\"" msgstr "Aktivierte die Markierung „{tag}“" #: extensions/base/mediawiki.py:1230 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -"[{author}]({author_url}) aktivierte eine [Markierung]({tag_url}) „{tag}“" +"[{author}]({author_url}) aktivierte die [Markierung]({tag_url}) " +"„{tag}“{comment}" #: extensions/base/mediawiki.py:1249 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deactivated the tag \"{tag}\"" msgstr "Deaktivierte die Markierung „{tag}“" #: extensions/base/mediawiki.py:1258 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -"[{author}]({author_url}) deaktivierte eine [Markierung]({tag_url}) „{tag}“" +"[{author}]({author_url}) deaktivierte die [Markierung]({tag_url}) " +"„{tag}“{comment}" #: extensions/base/mediawiki.py:1278 #, python-brace-format From 51a9f1b5ae1c19aa6869122b9c086aa61f06be25 Mon Sep 17 00:00:00 2001 From: Eduaddad Date: Fri, 21 May 2021 03:07:01 +0000 Subject: [PATCH 114/173] Translated using Weblate (Portuguese (Brazil) (pt-br)) Currently translated at 96.5% (249 of 258 strings) Translation: RcGcDw/formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/pt-br/ --- locale/pt-br/LC_MESSAGES/formatters.mo | Bin 0 -> 32846 bytes locale/pt-br/LC_MESSAGES/formatters.po | 81 ++++++++++++------------- 2 files changed, 38 insertions(+), 43 deletions(-) create mode 100644 locale/pt-br/LC_MESSAGES/formatters.mo diff --git a/locale/pt-br/LC_MESSAGES/formatters.mo b/locale/pt-br/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..4d49257933c76f2042e01615f03c054b85e7b45c GIT binary patch literal 32846 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 OZWpy6$(*w-QU3*LAA3pw literal 0 HcmV?d00001 diff --git a/locale/pt-br/LC_MESSAGES/formatters.po b/locale/pt-br/LC_MESSAGES/formatters.po index 07b979e..a695df1 100644 --- a/locale/pt-br/LC_MESSAGES/formatters.po +++ b/locale/pt-br/LC_MESSAGES/formatters.po @@ -16,30 +16,21 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-18 13:59+0200\n" -"PO-Revision-Date: 2020-12-29 15:21+0000\n" +"PO-Revision-Date: 2021-05-21 18:19+0000\n" "Last-Translator: Eduaddad \n" "Language-Team: Portuguese (Brazil) \n" +"rcgcdw/formatters/pt-br/>\n" "Language: pt-br\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# rcgcdw.po #-#-#-#-#\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# formatters.po #-#-#-#-#\n" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6\n" #: src/api/util.py:61 src/api/util.py:66 msgid "__Only whitespace__" @@ -576,15 +567,14 @@ msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) excluiu uma wiki *{wiki_name}*{comment}" #: extensions/base/managewiki.py:80 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted a \"{group}\" user group" -msgstr "Modificou o grupo de usuário \"{usergroup_name}\"" +msgstr "Excluiu um grupo de usuários \"{group}\"" #: extensions/base/managewiki.py:89 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" -msgstr "" -"[{author}]({author_url}) modificou o grupo de usuário *{group_name}*{comment}" +msgstr "[{author}]({author_url}) excluiu o grupo de usuário *{group}*{comment}" #: extensions/base/managewiki.py:103 #, python-brace-format @@ -606,13 +596,13 @@ msgid "Wiki" msgstr "Wiki" #: extensions/base/managewiki.py:134 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" msgstr "" -"[{author}]({author_url}) modificou o espaço nominal *{namespace_name}* " -"em*{wiki_name}*{comment}" +"[{author}]({author_url}) modificou o espaço nominal *{namespace_name}* em " +"*{wiki_name}*{comment}" #: extensions/base/managewiki.py:147 #, python-brace-format @@ -640,14 +630,16 @@ msgstr "" "[{author}]({author_url}) modificou o grupo de usuário *{group_name}*{comment}" #: extensions/base/managewiki.py:195 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Excluiu a wiki \"{wiki}\"" +msgstr "Recuperou a exclusão de uma wiki \"{wiki}\"" #: extensions/base/managewiki.py:203 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) excluiu uma wiki *{wiki_name}*{comment}" +msgstr "" +"[{author}]({author_url}) recuperou a exclusão de uma wiki " +"*{wiki_name}*{comment}" #: extensions/base/managewiki.py:217 #, python-brace-format @@ -1106,7 +1098,7 @@ msgstr "para o infinito e além" #: extensions/base/mediawiki.py:582 msgid "for less than a minute" -msgstr "" +msgstr "por menos de um minuto" #: extensions/base/mediawiki.py:584 msgid "year" @@ -1135,7 +1127,7 @@ msgstr[1] "minutos" #: extensions/base/mediawiki.py:590 #, python-brace-format msgid "for {time_number} {time_unit}" -msgstr "" +msgstr "por {time_number} {time_unit}" #: extensions/base/mediawiki.py:610 msgid "Blocked from editing the following pages: " @@ -1155,7 +1147,7 @@ msgstr "Detalhes do bloqueio parcial" #: extensions/base/mediawiki.py:633 msgid "Block flags" -msgstr "" +msgstr "Bloquear sinalizadores" #: extensions/base/mediawiki.py:635 #, python-brace-format @@ -1260,7 +1252,7 @@ msgstr[1] "" #: extensions/base/mediawiki.py:818 #, python-brace-format msgid " (until {date_and_time})" -msgstr "" +msgstr " (até {date_and_time})" #: extensions/base/mediawiki.py:836 #, python-brace-format @@ -1402,13 +1394,13 @@ msgid "Prefix: {prefix} | {desc}" msgstr "Prefixo: {prefix} | {desc}" #: extensions/base/mediawiki.py:1074 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" "{desc}" msgstr "" -"[{author}]({author_url}) excluiu uma entrada na [tabela de Interwiki]" -"({table_url})" +"[{author}]({author_url}) excluiu uma entrada na [tabela de " +"Interwiki]({table_url}){desc}" #: extensions/base/mediawiki.py:1091 #, python-brace-format @@ -1454,10 +1446,11 @@ msgid "Created the tag \"{tag}\"" msgstr "Criou uma etiqueta \"{tag}\"" #: extensions/base/mediawiki.py:1158 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) criou a [etiqueta]({tag_url}) \"{tag}\"" +msgstr "" +"[{author}]({author_url}) criou a [etiqueta]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1180 #, fuzzy, python-brace-format @@ -1465,21 +1458,21 @@ msgid "Deleted the tag \"{tag}\"" msgstr "Excluiu uma etiqueta \"{tag}\"" #: extensions/base/mediawiki.py:1182 -#, fuzzy msgid "Removed from" -msgstr "Removido" +msgstr "Removido de" #: extensions/base/mediawiki.py:1182 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{} revisão ou entrada de registro" +msgstr[1] "{} revisões e/ou entradas de registro" #: extensions/base/mediawiki.py:1194 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) excluiu a [etiqueta]({tag_url}) \"{tag}\"" +msgstr "" +"[{author}]({author_url}) excluiu a [etiqueta]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1204 #, fuzzy, python-brace-format @@ -1502,10 +1495,11 @@ msgid "Activated the tag \"{tag}\"" msgstr "Ativou uma etiqueta \"{tag}\"" #: extensions/base/mediawiki.py:1230 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) ativou a [etiqueta]({tag_url}) \"{tag}\"" +msgstr "" +"[{author}]({author_url}) ativou a [etiqueta]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1249 #, fuzzy, python-brace-format @@ -1513,10 +1507,11 @@ msgid "Deactivated the tag \"{tag}\"" msgstr "Desativou uma etiqueta \"{tag}\"" #: extensions/base/mediawiki.py:1258 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) desativou a [etiqueta]({tag_url}) \"{tag}\"" +msgstr "" +"[{author}]({author_url}) desativou a [etiqueta]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1278 #, python-brace-format From 3f83aefcfa58b1f9be331a5dd855bce556fb4bdc Mon Sep 17 00:00:00 2001 From: Philo04 Date: Fri, 21 May 2021 17:14:37 +0000 Subject: [PATCH 115/173] Translated using Weblate (Russian) Currently translated at 98.8% (255 of 258 strings) Translation: RcGcDw/formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/ru/ --- locale/ru/LC_MESSAGES/formatters.mo | Bin 0 -> 42046 bytes locale/ru/LC_MESSAGES/formatters.po | 103 +++++++++++++--------------- 2 files changed, 47 insertions(+), 56 deletions(-) create mode 100644 locale/ru/LC_MESSAGES/formatters.mo diff --git a/locale/ru/LC_MESSAGES/formatters.mo b/locale/ru/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..7b532e4b1ce238ff836a1aff99f562db71319f7d GIT binary patch literal 42046 zcmd^|3!EHPmH$fxfhdSPd>~3CDkKAw5ME*+KqNt;3CZSR#1ST)na)hhO!wH`lVKc2 z62d#kQw0&wi0(sO2_Z2r5`6Ejx^B(Of#VPLyf%G5((ZaU9_x88=j%=2 zYru~N*AIcOk)6(Vu}Y1AhY^48HVLo;MSGIe0X9CU_XQ7*xKMpvtv_ z$AEp{E5Pf(8Q@1i)xR4Q9p3Ujc$bnh@Sp8=i#wt%a^*MnDsv%veoqrg7_RnOz#iJ*6!=gk35 z0^bO(0q285pbzc=d%?#+wR7?7Jddt;mxHH){on%d4?*$y=b+mE4-nG4lNc=F1>l>& zOF{ALgP`cU6@(P;^WfRwH^AxO@4$1x>0}a}mxHj%yABke?+0nZ`x5vD@Ci`)ehVt! z3~s7F^FX5)6d(FQ)&B`l`MwNloWBnuQr^>``uPl~`d)s5=N$x|4ywMhLAC#0kSyNS zApg7v_#=7`fa33O!FPbuePjph0afo8!4=@QLCM7l5FP zo2vKn0Ivl_*Jr``;6uUvr$Nfc4+A>i8JemAK6n?Tif7wCicf~t2Pcm((@@F4JU@M7>uQ2m&R zQokSE3a$ZS>VMmqXWDe zRQ*2&*MX~Nd){(zH~1OwFa|;S9s;+5N1y8I-3dO!^_g=WU8kJp@LF&w_n!dgfi0)Q z6EF+*gP#Xg{|t)XNexUPV|2fhO0#fJ>2`uBkU4*m*M zJ5N)Yem~=E@_@I1OTb@(YX6+KI{rQkF6R0-;1IZw%H9Qj3A_n>^*Nq*Be)eLi`Rm3 z{tD~_cY~LrG~&xq5GVcF0ImdgfFMb(r<&^Af$R{E<%^U_wz^NunQF54u&~B z;2Q8l;MYLO*^0LZ^8qOSKM`CX&yOm18F)1K5Qu5?z6wqQe-z+T;ETBaH}ECkuY>!~ zf`@W_C`=Z<56KOcYv<~*MX{k5LCU_g3^!cLDlmS@L=!(@DT9R z;NjrsLFv<8@U`GKLDlmQAR_Pm6F40_9-%`Nyz@Yn9{~S`hOP#W<$4XmB6@m3_4_(d zBR@W(2To1km{3O^4?g7Q`pMs}=Ctc!s zu-;n*9s}M7BGTT&;FrOF1pC0xE_3qyI+Uo3>uylxD^w9D^x)6HTe&`(Oj+dv7l4N%bac^s2lz(tZjgW8KK{^@cjRg(=NVA+ z?ge|me*qC$?{bvtaQM3wY~lJLlvDkF9F+bZhmz#M)!?hZuYnZxegLW;b1!v#UI|jf z8wOR+UxBd1^WNk9mSx~|TwV*R-_zRQId~RG*S!6p>N^r;S__^AV$!_3K=tdZp!)k$ zP;xozGRLorLDhF3xEB1=;Cj~OuD;da@!TH(j|4vqs=m*F43+n1;LE|+w!85<5zKIX zEBH?EpF!n2cP({*w}84nh)g$wtH3_+NpL2(d>uLl4uZ2@gx%=Cm*o2XPREyLK}hsw zGKhoV_27k|x8C7Ga5k4Wf}(pD2+O?hfvAW#2cas1gP`R9m*DHc7k4}R;)5^c`n}+> zU&rmN?~lN_;1Tb0`gH*~pX+7d zx!{L_``-jLp5F&$?@qbG$#XY&G1t$4r@)u<5kl!%Pp_l@UXY>nc7u}pV-dPD!S{eC zg13VwgS)_sz#oH0fGq___glefT(^N5-}RvSc{3>b?gwXrkAug6FJaKsuh)PJz(wHe zz#G6h;Dg|+!S8~zz+Zreg2%q!>C+p)FK|5o9so})x_SmAo*kdw()(fJe~nB z;CkgXPVYYqQq=o7xE6dLomvEb3uH*VS6=J%Vk4;fUxw2E3_6yBmvBAr2G{;g;Eh~Q zk`W-jpQ-cqI8^QHk&{^=Op!)mpEzbUBK7{{7J6`~=2RAYZ zs`rpP+&p;?cq`XG2Q?0ZcjEJb&w>>3uD;9l`)~&9b6od>`@rcRapUwCdBf&0N1gMSaoF8l;M z5_}4L4ft$u{i>}_Urqv#=l(qK4d5Ek2RDFk1n&lq1NVWd_pd><^L_9b@IQm!kN%Xq zo(+n=3qh67fNut`12vy~4!jEd3b+J3|3P#GyoEo9gQtGl`5An*&tCq{2)+wCNv{pA z#ZT2)AoY>HM%qQv2XhmB{(x^9i?;=LG_F^YenL8x^zS5nzDjzE^cj+9o=cK!%qAgr zCQrkl#^qenBc$(>^m!NQbtIoOMAB!b1N*z2zt527k$z74Q_??@^!XE#WNDCeJxQN` zA{n2+&7?mj#w-DoTRaD4}LfbJdgBc(zB!y(pyRT{F?)_vHB_<|3Yw2 z@DkD)r2j?w4k`Ss;Y%sFKt)Zq5ha_`7lXee{fMN`ACbOp-<D^dNk=` z(r-xd&o8+6JJL5vcaZe?tpodea`62+a1-hMx_%Kp5HMfg`Rs7uT>w52eE;78{s5dt zY7MS$3h+|!QPM|ApCpB!`}p!0>Gw(R2ycQ*NE?IeYXUqQJcRTgq|<_XS#S$Uc4Y(U zUedv&FOkB}FZuE?X(4Gn=`7Nnq+>`QARR%vi?p4j&#|O~NdH$CeEynLwr|e9?hd}+ z07|bHk$y({AxWRVAze)xApHgDJ){++za$+-(q|v(anjSIYf1N$^f{mOanj$DGNgYd z$##8$6n>uM%cp~je*pKB`boEu-cHizA<{b1-|8axYy)3G`cKkNNpB>5k+hcdU6MZU zB)x_70O@p+KHnmpNIF33AbpUe&wCx%-wXMBBdM444bp2!uO_{eq|arfe<6LFbPwqq z()&pI98a1>+DiIY(vL~{+)dg^I!PD7rweQ&of%xO3h=l9Zw9|d`n9g7Ey;Cc^QG)O ze`whAXZGjIxgLM0GgHpCXY!rx!ec$Vk4b!18%na*6k>oU*h2S1)bDP^OAz!`--^@xt?qn*ImUze_tt{#hO{*7qgwY zVz#5~cV|lex@c`xfLAv->io(mL~Q~a$|T3o2*%9ZQ^2`h!Zeo zW}nU$dNZ&l)6+8;6*Ye33VCjnfhtqGa|~@>z0P#@=JL5xxk%w^#&YJ0tShy_7+UVm z`sGZQKVyi$!!taS4EGo5^3q3uB z0o_VyVa-D7VKslKcwyF|KpEPlCd2-ask?V!w-g1jl&1KlY+22hsHW&A3q(0P;6qoT zn9G);TgDB)H`}`|TP$_w`dsmHrr4E5TEiy#iiI-jqrvXUZpikyTp^>QZ0bcvfq_Ew zdkdZ9E3CJ{Q-}O$U=sOz=tRGMCTnc$5_w8x4ImlT4u#o=*G6LxRi%2RH{?pWb-A8g zc~Cie3SBTyq8NUyiSGB1+GXDGfb04Vn!#XPT*XMdrZa?2IDfEXN zB7Ff(f!?LBQ`RY!JI>H#J=I@qimY$7qXs3{7s4qlk!+9g4U92KIZ^`CU(!Hi{Cpwb z8q9u4EyE5E=NXrQIn1r{UO5+1`+oAx^b*Tg2Bp+ZmRu!cWvoyeP8pEDX7SeRHYO+IF-LOT@Q zpxq5w`-2-^bymWu*0B+@=#~M)RoX?Co2`PCcC53#}Th`NAEu{-rYFVFo1S|vHx01J9@|@`j{J_p^8J*;Aw#aby zW;?y*#q9drmCOpP-}o}jvQ2~4F+A#*Q~ZJKx)Sn5=HOc*caFiwlM4GXTK3?#20AH! z%iVa0YoTAcBHIz0)M`(y!6MHK7kddol`~^DJ?0ga2215^Z8y9Ap;pDLXnq);*ir|*RXeNpiN;+JfA^i!i zX|7&QXVj4Na%tEXXhbGj*35RQa9_SwO)b028^%OFl-byD+ zs~D=FtKua4id`jdRW|~SkIbZMOCs*b-St-IgJoKJ`L#OV8FQxMHh6XZihN-pPthO_ zk~Y$-^Q>O6x;BT)+Ig!Tfeu82k5u@h`x|8l`oAVq%*!Fol}h~>g*9^0>PIsYUSk_x zCxH?E2EmSCyFKq6TWT?HmE)WQ)%O+n-BvLe=g1B@xejfZ!v;O56CP*~ z>OoxVYGxB%4F|t%NaLgckud0zTe3525E99m)U=xkZld0BF0HZ5Z%eN86HShz=9)2p zw$NDH;AoW?b|oX$4qN>hf)Pa*jB__E##L7u!mh}2*N+o47@`{f#5nq?X2ZEl9!xV0 zwW~nny|}A!HrZVCVk~0T+H7ETDfXdBR?|Un zWNY4ScUucl6-=;NQ_LJH<+}32LzbnK`v6-Y?uYu*Lg;ovrG=<2n|bb#0{!df^vxM6 zcSAtu;?CjoX0fJW@mMJK_gw;R9_at z@~qjIRcv40Z?W~6eRpg77O7&3h3bME5GW5?xIk_R2fI5aGsc1dnvmK>iMdTBDaSN7IgxM#|YJRWwx5qI!lWw>q z^5(=^XD4`y+Ha9y~d!0#CFbvCxo!Frd5Sa)yc<0f>zBM zM_Wk=mNjXH;}ummohDS%*xOU}tDWRhBdfM+?rzm@vI$XKpWY6uUt2S~W4JVK*C7>y zdA=x#HrFOWNLREOH{RJc7jD=!Vq&cwJZE*=hJx)jnCHGZ52Fd@O}ORYn8gdx^mE#+ zCMxf#xiQ&b=q!X3hU3_$Y^IHHCv!qhO0V1SY(P?K|Fa2-dK>MKHfYJVOxxU^De|ek z)25}9lT~ipbgG@msNz~XsEy;L)yw^)$iiy7#wa)Jf zoyXy+i&42IS$_vR$?=+XG^M(w+aMO^4{4jXJ<}dl(~PL4HlE`xPjy=XOVeIe!bNbW zC*)964=#ohFiv6MXl`t&JI+;d=xsO9Hj@TX8sGbK+r>>VK5U@gK5_kq$5nZ9V|hv{ z4ZB<2i>_bo7+cd#bwvg#*t~A3Ze9mr;b`+3dzXsm)?YCf&LExB9!!;ky(8kNCE%iy!XXi)I(^{&= zvbBEQZbNK*-UK_b?CxWN33u4iuH8lShFebY``qan+k}Rm;Gj6i1#It@Lyn5k)bom4 z{MN99op{F@GJHJ!Fg&}yr1wXs2PV0z%cB_4X@d#*N&VHs2oo!BClqY%u+x>}mMeD# zg9=8SZ5TsR+uN7rdj_?#D!b@fd%M@(-u5n})X()2s)H0m=WFq+4hi*T%EdyDeRUGe z<3{TWWp7NCkegI%%D=qbF+S-7=0;uS`c$XzN0&t-yWP_4zBw1InKrD=NyNT zxZvps9u`@b9W3NK?S2nusX5KWDT$2FV-x-5tk=!z)c%xs4k@_jpyUN=SM->{3VmLG zaE3%<)y`4+VrMRs_sl$IB5%a53;i6+&s^amyrJvi4Q4Y%`&075<)+_NDBJ03{D5BO zB|FOF21D+eg%>?{%z-I2)FQM)5%W-sW_UbmRNb46g}mZF)Cx)IcMh9yhOJn5ACDch zF79l7mpjli&tK7BD$zlI=8BHDcPt#3HEl&!=Q>-Lmb!ACt#9k^Dz&b{8J)I#S?h}6 zNPg==4uj6~FI}`?MeEXKtqT|U7cZN)bn(gWS$4^yX-hJta_g$#Oi-aX&%bE(k|q8n z3zjbO&t0^1!Qv$sELga3#iErf&m*gQRH1cMHq%?BEfk}s$HEs`_yR{y2mM6R}J>j zg>v@F@*F0ST>c!N!xTmA<^0vFE^0lynom7hpDniP{H`7Zo9CasE?1tmyoYc{PwPdr z&ZA)YKD#WmMe{u#5+n&wTbe7v%I#P>*L_omD{M{XLq!4(A!NTo9!<{0I@qquJLItG0yJsy~=|O#uR%43e`cs;J)l{-eZsEZ5}ZS3T$cy)lvp@+VR^~UKc!yv#DvqtV< zbohDXHrLh1AYjwTEsdOx%EQ*0gaQ`rvR+9>>Uwb!J$P))-$&i90^bBfq8w4>ixPk2 zL&l1|CfX zz?db%wo#z6$E$q8q;7}F99c$gBf}Qeg&j~8Ugh=*<4bnhFu9OY?sLCi!%v(2uY8Vq zxoh|<`$SPn+2gm+n^*@VUE6(Xc1n*LQk9XhbL3i@+iNn5T8pY{Ogq#|m^P|Ttg>}X zniojm4(t$m5^B|U=t8Aox9h+0LJh_a*qWi;CKZM=Y3(+#jqe?v&H4w zB62`N5ZB%@rQ+^@qbW0LO6&)tz0HkjG@cR-*kwAMU=ad~S!0|wnWpcMevjNlZtgZU zw^b%VPR(YMLn!)~-|Doo&-8~pns#lLK?ag%Qk@e#>{af;KDxQj_0MR6L|S$xiO0&EcskX>^iG*daw?-l94aOD<^Ri*!jp(Y=XP zJaSuQ7j|cFT0_U6M4p4yx7{is+d3gq-`k2sq34Qf}5YDcKw2bP!?9UF@Q>!vy z0all>-7WKsx%wjGvr(F)@ob`sXtpd{Jj(3rDYOs@5E+MJD5(EKVxgQ+x6*j5=3 zCgW-3Nlow%D?8K`jj8Mh$iXdpygEUnsYBHTO8dU%mr+4YzqpPsCx58+REtfnawlxL zUhOeSn?NDF8gXIj9PK#i`+{?PuqEzWN#xu^;jwPk(2b~Ps10xr2d!CG|1sZsaq^4OMjknRGD|d20JzOuRuv0TqpQUc<-n z66VlpH3JhqaGSK2auXPHx4NX#T}dw;*FhAF?WMNQ;&FFGf<<}If)#aXCAFQ7Cg*dZOWOuoi!E+inHvM ziIfIOV>IXJ0%nsCU2%A~v%2K9P({d_n)reAC z%yAV?YEx;r8?}>^s^rSg+%{1-=E|>83ot~TBvR9yt!P|V)&4YFpC)DEU$C5c5)XM3 z3j-5R=_r^Wfq~GDD^w{9a&5ZjG5}obTvT2G$=YD9RGLia- zPfr3rN-kDh#!hizA*5G5MftQeRG;N)COjqAXE!L3a@Q7PnvQpE3P^z@3wcPp6w;Ns zaP}djAl~3smN3#tpTZht zk+6FI?dvpc&=fNxJPn8KntG}=H$MMuJYc~j7Yx6_DQ6wa6xVKZxa4+e%@(djx!680 zwoKJ~GwKFCYRvDl5puP)POahd#oO1EF-nD{+@T#zD-iPwzV^*FzgUz}6PSe>g9%I# zVf0DUk@YE|k!c^!OlGV!)dmJLERROnyF3)0xQ`mcc!b7Sos{~L6z!At=}Ek=K#}fn z$uSQu;||+BQL$+1b@4=z9B$c+;a;Wchypj}#zlLQkvCR*g{k>}XLb3xf8-A5-DsJR zh(yKXIIff7ZfW(+A+avIC8gL^yWJWBQ9VEwITf0A!VTD|sL7sLlQotng1xnnVqlsX zt4L&mb>qlwUgdt}B}}v@(u?38_g$D&<`=08fYgDMI07*$i%}tav>T=1Ld`7PE zDw@`{v`ID_+^yU2owm5so)yt+ZR=58D%jyw{=nTrS#BVkh26DG(z=bnMa_t#SGkjn zV%k2aL}2M7;t_dH2zK}ig6K6W^>UnohR_sCEJ{W1F{l>1n;&iR4>dnExg}gq)uo|| zLc|&+tsO&CW&@h=Y1L;&eJmU2LYB1+7YZH3J|*6FnlB>D>GrzDUI~YeeBgzLmofwi zo2co7-Z;C&+E)S8lpo<$w$dTnKdIWgZ9Y77;RcP_4#w7mUE!J$c7G*likc=@4YA9} zB#q*nBtD3mA}bK5eV@3m1C6mhsD+2kkYEd|24r)ck}x)0O^CB`#w4A)Ml(a2pwxbg zmYB09q4C5^YRqwt&iQGT6xf^H!Mq_;q}?q#m5#9| zDv}$gb2YrdCbCoJ#yQ{oxog7wx)-PsnFBYyN+`!#M6bV39qoZw5J- z_FSffElH}a*zWXTms~Ty@@a1D!PfE>hl)R@KW=11DR$vHQ*@gjX!j<06&Crn?qvUTU5GGB|Y}S&E_;@RSC^MS(H5*gh86BHz&HU`FM*lU`cft>i zTm54mwd0d*;qZ@a=J?M7O0{wjK1XO?qqRA)I& zkijfhJ;_pk7{%W7u5=yss`=I@v&txqqJew0IIE_3mPTj4t<71_BJC@vZU2P3?0n0BiBsJ!JDZ}#_X{NdsEc}Xn+@H z*rR2g3~@Y!$AmL30*$1aTmDo-kVUUG3}0jwP=$tnn%^D2MWgfIx*Anw#rs>qb(9QuCpxR z`@0%8-ROm2vGtFf)i$JEL2{e@giZruJ*XcpVg;Q+zz#``Q|{+eX8&wQ=JH zYQBdo;M@yKZ}PoZ$+wa@0;fvy>M*R~z>oP_vYI50yGo6}rm7cEjN^J~8jlofy9Fya zN==hvCgLZe{BA}-hO4K-o*OGOp0f#UwmRRT;c#1BTGUiem9emF?tN%+b|w$LYz|^x z+AnqosnGk{NBX6n^ zC%xh}H4H_M^$IpEnW(AO^9oZi2yySm9336{311r13>V@R)ELEyy)Z1{bcKo^ZUd+l zv^BPQS>ttXX23!(Z``j|OST^mWu&DJQuM%+_H)Pc>bGPAfipTuG81trZ9^m@Q*7>x z5t$n6^>9g|LtmAdB3k9RkgHCtOG%}m1OOTwVZ)YBfq*au@iU<=h~JDsi_7j9x&-qS zw~IELcJf>!{M=RRu(AGB&^MAQ zj7gJcU+a&l+$bc*9j%S_Rn6O+#On^9JIdHv;fO9nFyXgA{*R)~tr3I6(#=?gsTQd! z0d@xG{}B>6TxL@t9vB;-3Ui|Pw%?lce8$+&!*Ybj_`)qgOi21fax*-sw`D!y^{352 z#B5pFsC!AH$MM?+7Q>Df>=j3v+%agTgPeb8a2DDYH`=_!e(C|%2Gm*j&JH@`S&i!j zoYWlO#C-vR0%;0r>?$D$(X;5OL2D?CidJx3HGGp}Gw_>koY0#_ zqvj?``&82t$ug2QJ`;o)u-COH8dNh! zNM>>k#iMJ@Pe-*3LU?Gq_P7xIlRq$?)7DM!slGmrK1Q8*N2(cy=&&>-H~rq#2{)-# zLfw((!G^8d_+RQMHji}FE7#3;!2A= zG3kqBx4m@cuH=h*`7wO#OERrT19a+LXg*P8j~8XJ^(W0(M(USNM42A;APNEij=$SU zZ8fbM+U@4OUiyNV8gPe-Il4)nowgCq8I4gl^Z-bWM%}C3RDsmS4ujWxSFnDDNa~lL z%0IitFOpw@9r6Nmzf-|k-gW3+6=P4ANTKu+&dr{Cz$yUBxN8k1#Z^O))m0ak<3W?? z7tc(ATZ7zIrM=ec4(+Ilx;6Sy5y%b)c(*yMNCZa4sg8%c5Ls&VGK>O6ySJiMLZkPC zHd+LEddjb|BLH=ZDl~`>x{lMd1Zi*dh%HZlVhQm*LqQt-@<>{gv(j@V<*z_1pQa7bTc&w!*}kjAT&W2Gcc asZy#Uz16B0Fh`}vu|;d;T&##v-hTmY5oUG( literal 0 HcmV?d00001 diff --git a/locale/ru/LC_MESSAGES/formatters.po b/locale/ru/LC_MESSAGES/formatters.po index 29fafcb..9767a56 100644 --- a/locale/ru/LC_MESSAGES/formatters.po +++ b/locale/ru/LC_MESSAGES/formatters.po @@ -16,32 +16,22 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-18 13:59+0200\n" -"PO-Revision-Date: 2020-12-30 13:26+0000\n" +"PO-Revision-Date: 2021-05-21 18:19+0000\n" "Last-Translator: Philo04 \n" "Language-Team: Russian \n" +"formatters/ru/>\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# rcgcdw.po #-#-#-#-#\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 2.4.1\n" -"#-#-#-#-# formatters.po #-#-#-#-#\n" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# rc_formatters.po #-#-#-#-#\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6\n" #: src/api/util.py:61 src/api/util.py:66 msgid "__Only whitespace__" @@ -586,15 +576,14 @@ msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) удалил вики *{wiki_name}*{comment}" #: extensions/base/managewiki.py:80 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted a \"{group}\" user group" -msgstr "Изменил группу \"{usergroup_name}\"" +msgstr "Удалил группу \"{group}\"" #: extensions/base/managewiki.py:89 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" -msgstr "" -"[{author}]({author_url}) изменил группу пользователей *{group_name}*{comment}" +msgstr "[{author}]({author_url}) удалил группу пользователей *{group}*{comment}" #: extensions/base/managewiki.py:103 #, python-brace-format @@ -607,7 +596,7 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) заблокировал вики *{wiki_name}*{comment}" #: extensions/base/managewiki.py:124 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Modified \"{namespace_name}\" namespace" msgstr "Изменил пространство имён \"{namespace_name}\"" @@ -616,7 +605,7 @@ msgid "Wiki" msgstr "Вики" #: extensions/base/managewiki.py:134 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" @@ -650,14 +639,14 @@ msgstr "" "[{author}]({author_url}) изменил группу пользователей *{group_name}*{comment}" #: extensions/base/managewiki.py:195 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Удалил вики \"{wiki}\"" +msgstr "Восстановил вики \"{wiki}\"" #: extensions/base/managewiki.py:203 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) удалил вики *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) восстановил вики *{wiki_name}*{comment}" #: extensions/base/managewiki.py:217 #, python-brace-format @@ -1117,11 +1106,11 @@ msgstr "" #: extensions/base/mediawiki.py:572 msgid "for infinity and beyond" -msgstr "до бесконечности и дальше" +msgstr "навеки и навсегда" #: extensions/base/mediawiki.py:582 msgid "for less than a minute" -msgstr "" +msgstr "менее чем на минуту" #: extensions/base/mediawiki.py:584 msgid "year" @@ -1154,7 +1143,7 @@ msgstr[2] "минут" #: extensions/base/mediawiki.py:590 #, python-brace-format msgid "for {time_number} {time_unit}" -msgstr "" +msgstr "на {time_number} {time_unit}" #: extensions/base/mediawiki.py:610 msgid "Blocked from editing the following pages: " @@ -1291,7 +1280,7 @@ msgstr[2] "" #: extensions/base/mediawiki.py:818 #, python-brace-format msgid " (until {date_and_time})" -msgstr "" +msgstr " (до {date_and_time})" #: extensions/base/mediawiki.py:836 #, python-brace-format @@ -1315,13 +1304,13 @@ msgid "" msgstr "" #: extensions/base/mediawiki.py:860 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) changed group membership for [{target}]" "({target_url}) {added}{comma} {removed}{comment}" msgstr "" -"[{author}]({author_url}) изменил модель содержимого страницы [{target}]" -"({target_url}) с {old_groups} на {new_groups}{comment}" +"[{author}]({author_url}) изменил членство в группах для участника " +"[{target}]({target_url}) {added}{comma} {removed}{comment}" #: extensions/base/mediawiki.py:864 #, fuzzy, python-brace-format @@ -1435,12 +1424,13 @@ msgid "Prefix: {prefix} | {desc}" msgstr "Префикс: {prefix} | {desc}" #: extensions/base/mediawiki.py:1074 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" "{desc}" msgstr "" -"[{author}]({author_url}) удалил запись из [таблицы интервики]({table_url})" +"[{author}]({author_url}) удалил запись из [таблицы " +"интервики]({table_url}){desc}" #: extensions/base/mediawiki.py:1091 #, python-brace-format @@ -1482,41 +1472,40 @@ msgstr "" "использованием нестандартной модели содержимого {new}{comment}" #: extensions/base/mediawiki.py:1148 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "Создал метку «{tag}»" #: extensions/base/mediawiki.py:1158 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) создал [метку]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) создал [метку]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1180 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "Удалил метку «{tag}»" #: extensions/base/mediawiki.py:1182 -#, fuzzy msgid "Removed from" msgstr "Удалено" #: extensions/base/mediawiki.py:1182 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "{} правка или запись в журнале" +msgstr[1] "{} правки или записи в журнале" +msgstr[2] "{} правок или записей в журнале" #: extensions/base/mediawiki.py:1194 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1204 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revision or log entry{comment}" @@ -1524,36 +1513,38 @@ msgid_plural "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revisions and/or log entries{comment}" msgstr[0] "" -"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " -"{count} правкой{comment}" +"[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\" и убрал её из " +"{count} правки или записи в журнале{comment}" msgstr[1] "" -"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " -"{count} правками{comment}" +"[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\" и убрал её из " +"{count} правок или записей в журнале{comment}" msgstr[2] "" -"[{author}]({author_url}) импортировал страницу [{article}]({article_url}) с " -"{count} правками{comment}" +"[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\" и убрал её из " +"{count} правок или записей в журнале{comment}" #: extensions/base/mediawiki.py:1221 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Activated the tag \"{tag}\"" msgstr "Активировал метку «{tag}»" #: extensions/base/mediawiki.py:1230 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) активировал [метку]({tag_url}) \"{tag}\"" +msgstr "" +"[{author}]({author_url}) активировал [метку]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1249 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deactivated the tag \"{tag}\"" msgstr "Деактивировал метку «{tag}»" #: extensions/base/mediawiki.py:1258 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) деактивировал [метку]({tag_url}) \"{tag}\"" +msgstr "" +"[{author}]({author_url}) деактивировал [метку]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1278 #, python-brace-format From 16295218e8fa0f4a183061a7097a422aa9f31d2b Mon Sep 17 00:00:00 2001 From: lakejason0 Date: Fri, 21 May 2021 16:18:02 +0000 Subject: [PATCH 116/173] Translated using Weblate (Chinese (Simplified) (zh-hans)) Currently translated at 100.0% (258 of 258 strings) Translation: RcGcDw/formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/zh-hans/ --- locale/zh-hans/LC_MESSAGES/formatters.mo | Bin 0 -> 32551 bytes locale/zh-hans/LC_MESSAGES/formatters.po | 96 ++++++++++------------- 2 files changed, 43 insertions(+), 53 deletions(-) create mode 100644 locale/zh-hans/LC_MESSAGES/formatters.mo diff --git a/locale/zh-hans/LC_MESSAGES/formatters.mo b/locale/zh-hans/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..dd4770e4bc832558e8f265e3215e00d9d33c1fcc GIT binary patch literal 32551 zcmc(o3w&HvnZPfCAQc38$(u_NXoG2a3oWlgi*#*iZGoy0!X$H>%yu#pW+n|KMAJ&2 z^ocEf0&Q(+<&l<0Av7&TcUgDU^|7w9va9POGnvS`;0s+v-T!yaxv$C0WRe!WKTiI0 z?>+ZCzw@2%yvmPGIAV>(b@*YHbtb(0eU??j?@7nYQ_Jc)*|Ls-FTqpcKbiagh9Bhq zf6V=#;j!Gm{}juTPfvsIhgI;s@JcuWUIR~r4m=vpf#UD;P`+CMPlB7_ac~bD4qt^5 zejZ9X-i9f7+=nb{I-CbT0>2N(z{Bw*;avwM-YHP>aW6a#&WDn&$Kd&JJG=pY9ZERI z;E60*S3^nP6nHtTfmLuNJPUTik?;rb1bF!AI=oZh1>9c)N5gt}9{d8l7QP5=_*>Wn zPdP)!_W&eo)&_VfdKCN`7WTm0l?2@C=mj{}YP8 zKS8PQlh3g%M9UfprCcwC65cKF2$+NtUIt41>mZ+6-H`vR*ZCvq{R5Qx`lxMLe+Tb` z6X8xM;rwxOZcbqN1l&`7r_LSa5osf0wrBJcrARxJReCS z<+~|RGh+cn16^oCr^V zb0J==)lk0gf+AP1K&hv3xW9uRfJf1YCHzz1E$|E|`G~@M;1A&pIE74p3hsc-@Gu(7Y?y*6 z*ashipP`UG2j7G@!X%CUJMdX}C47LwsE6H9!arw}W!1q|a4P%_+zuyD3F7Y!xCKtR zScm&d_%`?VT%yy}c&X+qa5B$Ny-e$=neb-rx4;&dhZ6o>C>xRQT~OrU5Ab?;=@mME zDJb{ffY-reNc1P*$Dx$NBXA7-E&M&am_Q_+kyq*W%`n3KKf_6|>S`T-E0ps61)K=4 zB#<`P0q=nCz{PO-Sj$=je+cnv&7^Vu25yF3a1D({%H>uPC++81I32zP({MbA|0L{! zv)~7B&~n-irJlY5=fEq*>G!)}g8MV5ETXWMz`NmB;b-88n=I=#I3G$mz78e6sR;i! z;5JB7t$QX=XYgtMNIm=-O1X`raN_U_a2d2drpsYDyn)--pp^Hi6pq|~63Tb$;fe4K zh^n;y0*Aq~C_Lc^co@749uBWC&##8><9@v1WOy|9cfcdz-SBMK06zp5z*FF(P{Q2< zCEQow2jEwrg!dizUidmZ3jP=#3-eIg)7$VgcqGCl;n+~*?IQSLct4~GSX5o3EQBA zw;dh>yWj`mt5C}KHFz?714{Z2yH%IR8BqLP3g!Fp@Lo6riadN9(lo8}r%?9rb|~RL z2+x4);BoMIDCPW*Q1bC#@I07mZZ*%hK$@!cWhmwTdx!{Ir%%)QzsoQMFXZ_GDD9xrJbweC%B;UY zDW8iFe&GaY!&)fm=zu4{mFE2yq2zBrlzMyzUJg&E@P@-FP|76*tKbqS{`Nr0&v&8Z z^Vd-1^UT|I{w{+O{|qSa?}75&1}NcmLGk}>DDvJ5C4K)3CEh=q=jYy`(?0@AxlM!; zP7@S=55mh~CzSO33`%|upP}3PjqnuiKMTd*8aNSt4PFdSLJ7(H3GjUQ8F(d}2j%@s zP}2W%^Zvw7>GWO=MW5UNtKt1n;(Y>&{PY?A8cKQp2_6oQ|FnL8lHu8gBcPPSrBM7| zZJtkpr*nS?91ZV*m%%Mi{Cy8fx#Xe5drXZ^?GW*Ua-@K%4u+?$qsQIF$Bq9h7{097=soGxv2+(i1cH zi{Q!JuYhO5?dJJcpw!2|K>7a1=J{LjEbe~?kB2AUrQcrwkKq1FcrzRe+u%Hyf`5i& z&AO*n_nZF;|DO8`@21a(55d{+JrVK>=fHd65p}x#wZlg4zYIlws_J#WRSRR>cfkfY zJgWPfC2%|UKZ5ez0}i$+`~_SHAD(Ghe}rfA5lOL5$CL0rI2FDQMgA@#aLG>{l=OWG zPJ%Xx7dFAMa4#GO--Z;8b=52_hYuTm4LdnlL z34Om1N_qST{22TMg*FMUhmx)wL{(XLHd|IZ+y(E0)%WQ1?S!A>z6Vl-R+LJih^?=} z>)^<=*3*qJ!~K4UXjzwXLs3~P;7#ytNYK`p79HM`Q0ng@5+UWc5ncoT2x+R;Rju02 zSp_A1eNfUnmdr?bJPV1+I(CjOkGW9Fp$krfe}R(EX=Fyq<1x4r9))n-0@p!F*H572 z-oIK;2YPA<9uWe3=hs#4cT zLxIT7?{H&rZ{Yp~*N2nqpK&o9qM_P0u-?K^l-57s9>8_tXqxK!5`S0Ws&P-_Zp7Vz z+lG^CFD{9D5_d7~n>e{de%xz{`@?VzlzR9z?mOn0$gg|7pC3|R7r74#_*?F!{hWon z8z+~@)%Ccq$PJbHZ(xl4=K8&cvNh%B*KoVcGr{4wD{w!+eGBJapX3KkSX~eE_jueF zaUwf^hkFn4{1nRd1n!^IFUAk>J-9gTgE(okC*mgJ{)h`+|HI8sa9_tgWL~^uDENr^ zy#UU`rEoIu^?i69POd!~N~iwN{O&dUFE|W0%G@t8{50H;TZ`Lbo(Ueoy@K0;`#8?M zCi7#ix%s@|)$l0XpKzC%XEWha+*BOu%i4&0FYe1Y_j;2b&*CQF8gL)QeF1k8t_}AA z+-lr&IJr*79f5mWZn$2U<|YeY#?8j9#EIVh3vM^A z9{1lk_j-mO$Kej6KJ)OyxEFB|+`r@GnuNOw_ZaSSoLt|)U5Gn?i{d_qlj}|m^>;jf z7vmDRui{R{eF%3XPOiIfzry`1ZawZA+$@}2XX2`GTXDa^_2A@MhkF4xLT=2}2tR|n z(%j!}c)H<(@O!vF$o;TMv3e(wcE;Fk?Up^FC6S56?Y3wn@eb9dlam9MKk!C1$mcwC}fTS`yJD4+Q$*$RZwj7IkJuTH=|JR#nxwXw->TRgs{o zsvG0U`dLoYZb>_-swy5#oNA{ci3Z26({I$nTa$KN=l@)FKh0@M&gQF`sbrJgoQlnk z#hnK38&b)Z=5)}Die{Xha-y-6Q=hRLBWb(NaT0b@B>g$sfrCrk&No8X7ai^WE zn4h&RsW@3|<%9Z^LqSLFx;f&rCDWKpDUa%x@h64d97(5Jlc}isDD4n1UpP&XSiG%1 z+0?{?_CpwD(J+fAE|7^}0tWPKli6fbgrbSW<8!=ERe8jc2_9sCU#N{Ssx~3HjzpVc ziC8+5;$z=qCNj&>U(HqpnrU?GOr*gc-p1ed;g*sN{TJ!ADX`QWJCn4}F(Mf-MLmV&BseyRX=bIs&w3#^N+|JJBLiXt!x1eI`w&4Hn)PXsQC=!2%73 zG?|;EQxJ(Qb`*MBNovyyHc<5V8o_G5S$;$y#ah zssGy3U$ye9eYmgCLf%BWc`5LpyDB}F=%>!zD8dEjed=}KUel0X1|uNVN?B33p3l?fcJA{wM9*orqb*I%Iy9P>H9nR`s*|l0j(n$k40%ddkV5GFE=Z}0u-=+LH(<#h zDcW+hNz-tnM-Uog^^KTb@uc)i_;Iz8YD7kfc^YVFK?T&I7t+U^go6=6 zx`Nd^v8g$kQV-n}BB`_-Y^sm~w<`6RuGpumeACEJy{L_fqv-eLq*#*@Ew>-k{e7_1 zDQCZ%Ot;@{P15GJwDVvKog7Jt6(0Ol#K)~8X$X@YdWWdjwb_kWcglQ_&eW@DY1c^x zCQcfQVY2G>>y2rmI-Ry;JlZbRU#Ok%8=DzZX(*#%0=}g4QL4(-L*4`8o$aVUnB=~( z;&!#V7*UIQNYL)5U6Q4HEAw?pPsSvYh!Cu@K`ABW4M410omSheFLk5r8H*8)8;WmE zt1-&0$%JD~iAVjfqGv^7=aITAN^VARRbCVA?lsLm!QYE4Z!Gh_GC zD=?PhM>|6}sjT|;es4Zvw>ouc4Kc^&zF^+LhCs z`aq{vylXWBKFb~Wg#=ZM8Ku($R#AFRI^#5X{$(74F*-9QgA zrGQ`05Z1Eo>Jra~+kS#N&h<20%VFv9$uvhAf*u;vGHE!jq*JQHrTv(DqATT7D>WoN zlWw;KQX@nCR;lfRkDKGnE$FVXRLwQVrCF7?iW8hqPR~I!v=n4oXZFl$rKHTuZjh z3bN`}eodRylS~!~O_ubKonC|Kk(iR2TBU+32-odPiwyH?!sGl1rQLTL7 zSugr-kWp4PdofUA?pD2l3QOibq?48Iz&!YCC+Q&K56_?YQ!<0dLO2L_=0*AkHK-_E zltYfA%rws-iA{9AH-$%&(!+OxEH z$(DY%RxdMnLD0dve_S5q)Kja8&)t+iD&aMKgxqxf*Cw3ZKykq^QKcXghmV1WLS z3E%-Ht@R|1t12o`j1p_V$?cGaH%expf{Yf-WgkR|xWln3JwI5b=6@^5llxswo0OxN z_`<^8skAJ(-!o>TS5a&9c9j~Rso#2RUnNbkN=?<72ZKmiL`~sqgTBg4>sJlxd(j<3 zk3KM&U4D>fW}r&SzFSn@3|V;UpN{h2s$dAs(M^(kT1xoTijo--*-X9Y0ZYLQv&}TC zvU_E%dk~d#&=IF4d7}fdvl4uW;;$r_(hDf1^+5&UiuuPxNGOa$Yc-k}Ld!Wr?hxF- zDsCz)svi7&h>2BcV{a)bRAd#Z;b1`iqSKH<8hClCbg&0G)Nmy3qN`h_qpUy_XBIAp zl@6_v)iF#Oz3Naf2lLlTiMP0R5D97U7UKrn+s51lyK;qCYz0qi-I_MD+(zN)U)sW` zpzwwqv)N|xw}|>(%~l10$BQmZmZ>^5h2&1hu})b@9PUcykc^Zjz2I3UNd@bl6{M)C z+zM%#nADPKjb1ZFK4tB+V(DaOm0mVI)JCKiaIqEC^7EycBuj?wYHKA^!CqW4NpAM( z8H2TQtCxu>I{sp*)pnO_JhmUYIVv3`<8QN)91K~urua*`W#+={Hd*GajnsOEbcaWoG*V-=A+LSa%N`q^EdbzlQ zf_Eb*wN6|*;z0!-URXXPfx6lC*P=@YJHXO(MOhJrWEQWh{KacCE$l5`qwfmlb4!ny zQ^95KP?$xRxoi9-@^>i~wIDv^Xa-z5r+$jh_{++nTJA1ggB4X#u@&+fJq<#M$!@sH zr!!>XrQeeJL8VXaAEBKVYibNzONXr�F_nwY64lZOt7>sU2%# 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 YrC|met~vuW@NA77_>tLdwWZ$re?iphq5uE@ literal 0 HcmV?d00001 diff --git a/locale/zh-hans/LC_MESSAGES/formatters.po b/locale/zh-hans/LC_MESSAGES/formatters.po index b0cd7fb..af03b2c 100644 --- a/locale/zh-hans/LC_MESSAGES/formatters.po +++ b/locale/zh-hans/LC_MESSAGES/formatters.po @@ -3,30 +3,21 @@ # This file is distributed under the same license as the RcGcDw package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-18 13:59+0200\n" -"PO-Revision-Date: 2020-12-29 15:21+0000\n" +"PO-Revision-Date: 2021-05-21 18:19+0000\n" "Last-Translator: lakejason0 \n" "Language-Team: Chinese (Simplified) \n" +"rcgcdw/formatters/zh-hans/>\n" "Language: zh-hans\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6\n" #: src/api/util.py:61 src/api/util.py:66 msgid "__Only whitespace__" @@ -558,9 +549,9 @@ msgid "Deleted a \"{group}\" user group" msgstr "修改了用户组 \"{usergroup_name}\"" #: extensions/base/managewiki.py:89 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" -msgstr "[{author}]({author_url}) 修改了用户组 *{group_name}*{comment}" +msgstr "[{author}]({author_url}) 删除了用户组 *{group}*{comment}" #: extensions/base/managewiki.py:103 #, python-brace-format @@ -573,7 +564,7 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) 锁定了wiki *{wiki_name}* {comment}" #: extensions/base/managewiki.py:124 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Modified \"{namespace_name}\" namespace" msgstr "修改了命名空间 \"{namespace_name}\"" @@ -582,13 +573,12 @@ msgid "Wiki" msgstr "Wiki" #: extensions/base/managewiki.py:134 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" msgstr "" -"[{author}]({author_url}) 修改了命名空间 *{namespace_name}* 于 *{wiki_name}* " -"{comment}" +"[{author}]({author_url}) 修改了命名空间 *{namespace_name}* 于 *{wiki_name}*{comment}" #: extensions/base/managewiki.py:147 #, python-brace-format @@ -615,14 +605,14 @@ msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" msgstr "[{author}]({author_url}) 修改了用户组 *{group_name}*{comment}" #: extensions/base/managewiki.py:195 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" -msgstr "删除了wiki \"{wiki}\"" +msgstr "取消删除了wiki \"{wiki}\"" #: extensions/base/managewiki.py:203 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) 删除了wiki *{wiki_name}* {comment}" +msgstr "[{author}]({author_url}) 取消删除了wiki *{wiki_name}*{comment}" #: extensions/base/managewiki.py:217 #, python-brace-format @@ -1069,7 +1059,7 @@ msgstr "时长为无限期" #: extensions/base/mediawiki.py:582 msgid "for less than a minute" -msgstr "" +msgstr "时长小于一分钟" #: extensions/base/mediawiki.py:584 msgid "year" @@ -1094,7 +1084,7 @@ msgstr[0] "分" #: extensions/base/mediawiki.py:590 #, python-brace-format msgid "for {time_number} {time_unit}" -msgstr "" +msgstr "时长为 {time_number} {time_unit}" #: extensions/base/mediawiki.py:610 msgid "Blocked from editing the following pages: " @@ -1114,7 +1104,7 @@ msgstr "部分封禁详情" #: extensions/base/mediawiki.py:633 msgid "Block flags" -msgstr "" +msgstr "封禁标记" #: extensions/base/mediawiki.py:635 #, python-brace-format @@ -1210,7 +1200,7 @@ msgstr[0] "" #: extensions/base/mediawiki.py:818 #, python-brace-format msgid " (until {date_and_time})" -msgstr "" +msgstr " (直到 {date_and_time})" #: extensions/base/mediawiki.py:836 #, python-brace-format @@ -1232,24 +1222,26 @@ msgid "" "{reason}\n" "{added}{linebreak}{removed}" msgstr "" +"{reason}\n" +"{added}{linebreak}{removed}" #: extensions/base/mediawiki.py:860 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) changed group membership for [{target}]" "({target_url}) {added}{comma} {removed}{comment}" msgstr "" -"[{author}]({author_url}) 已将 [{target}]({target_url}) 的用户组从 " -"{old_groups} 更改为 {new_groups}{comment}" +"[{author}]({author_url}) 更改了 [{target}]({target_url}) 的用户组 {added}{comma} " +"{removed}{comment}" #: extensions/base/mediawiki.py:864 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" "{comment}" msgstr "" -"{author} 自动提升了 [{target}]({target_url}) 的用户组,从 {old_groups} 更改" -"为 {new_groups}{comment}" +"{author} 自动提升了 [{target}]({target_url}) 的用户组 {added}{comma} " +"{removed}{comment}" #: extensions/base/mediawiki.py:877 #, python-brace-format @@ -1351,12 +1343,11 @@ msgid "Prefix: {prefix} | {desc}" msgstr "前缀:{prefix} | {desc}" #: extensions/base/mediawiki.py:1074 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" "{desc}" -msgstr "" -"[{author}]({author_url})删除了[跨wiki表]({table_url})中的一个跨wiki前缀" +msgstr "[{author}]({author_url}) 删除了[跨wiki表]({table_url})中的一个跨wiki前缀{desc}" #: extensions/base/mediawiki.py:1091 #, python-brace-format @@ -1397,39 +1388,38 @@ msgstr "" "的内容模型 {new}{comment}" #: extensions/base/mediawiki.py:1148 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "创建了标签 \"{tag}\"" #: extensions/base/mediawiki.py:1158 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) 创建了一个[标签]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) 创建了[标签]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1180 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "删除了标签 \"{tag}\"" #: extensions/base/mediawiki.py:1182 -#, fuzzy msgid "Removed from" -msgstr "移除了" +msgstr "移除从" #: extensions/base/mediawiki.py:1182 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" -msgstr[0] "" +msgstr[0] "{} 个修订版本和/或日志条目" #: extensions/base/mediawiki.py:1194 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) 删除了一个[标签]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) 删除了[标签]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1204 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revision or log entry{comment}" @@ -1437,30 +1427,30 @@ msgid_plural "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revisions and/or log entries{comment}" msgstr[0] "" -"[{author}]({author_url}) 导入了 [{article}]({article_url}) 的 {count} 个修订" -"版本{comment}" +"[{author}]({author_url}) 删除了[标签]({tag_url}) \"{tag}\" 并从 {count} " +"个修订版本和/或日志条目中移除该标签{comment}" #: extensions/base/mediawiki.py:1221 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Activated the tag \"{tag}\"" msgstr "激活了标签 \"{tag}\"" #: extensions/base/mediawiki.py:1230 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) 激活了一个[标签]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) 激活了[标签]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1249 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deactivated the tag \"{tag}\"" msgstr "取消激活了标签 \"{tag}\"" #: extensions/base/mediawiki.py:1258 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) 取消激活了一个[标签]({tag_url}) \"{tag}\"" +msgstr "[{author}]({author_url}) 取消激活了[标签]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1278 #, python-brace-format From 2880796539cc9ad2d38ba3cbd9c5df37c3aed83d Mon Sep 17 00:00:00 2001 From: Dianliang233 Date: Fri, 21 May 2021 12:42:30 +0000 Subject: [PATCH 117/173] Translated using Weblate (Chinese (Simplified) (zh-hans)) Currently translated at 100.0% (258 of 258 strings) Translation: RcGcDw/formatters Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/zh-hans/ --- locale/zh-hans/LC_MESSAGES/formatters.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locale/zh-hans/LC_MESSAGES/formatters.po b/locale/zh-hans/LC_MESSAGES/formatters.po index af03b2c..703614e 100644 --- a/locale/zh-hans/LC_MESSAGES/formatters.po +++ b/locale/zh-hans/LC_MESSAGES/formatters.po @@ -9,7 +9,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-18 13:59+0200\n" "PO-Revision-Date: 2021-05-21 18:19+0000\n" -"Last-Translator: lakejason0 \n" +"Last-Translator: Dianliang233 \n" "Language-Team: Chinese (Simplified) \n" "Language: zh-hans\n" @@ -544,9 +544,9 @@ msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) 删除了wiki *{wiki_name}* {comment}" #: extensions/base/managewiki.py:80 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted a \"{group}\" user group" -msgstr "修改了用户组 \"{usergroup_name}\"" +msgstr "删除了用户组“{group}”" #: extensions/base/managewiki.py:89 #, python-brace-format From 540bd263be4b70cd1d06752c2269e95424832aeb Mon Sep 17 00:00:00 2001 From: Frisk Date: Fri, 21 May 2021 21:02:24 +0200 Subject: [PATCH 118/173] Replaced a string with system --- extensions/base/mediawiki.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 905221b..fb89d71 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -861,8 +861,8 @@ def compact_rights_rights(ctx, change): author=author, author_url=author_url, target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link, added=added, comma="," if added and removed else "", removed=removed, comment=parsed_comment) else: - content = _("{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}{comment}").format( - author=_("System"), author_url=author_url, target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link, + content = _("System autopromoted [{target}]({target_url}) {added}{comma} {removed}{comment}").format( + author_url=author_url, target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link, added=added, comma=_(",") if added and removed else "",removed=removed, comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) From e63188f411cb8ff71add2cf541cf8fbeba52e6dd Mon Sep 17 00:00:00 2001 From: Frisk Date: Fri, 21 May 2021 21:21:35 +0200 Subject: [PATCH 119/173] Updated translation files, added new keyword to xgettext script --- locale/de/LC_MESSAGES/formatters.po | 559 ++++++++++++---------- locale/de/LC_MESSAGES/rcgcdw.po | 46 +- locale/es/LC_MESSAGES/formatters.po | 531 ++++++++++++--------- locale/es/LC_MESSAGES/rcgcdw.po | 42 +- locale/fr/LC_MESSAGES/formatters.po | 480 ++++++++++--------- locale/fr/LC_MESSAGES/rcgcdw.po | 42 +- locale/hi/LC_MESSAGES/formatters.po | 543 ++++++++++++---------- locale/hi/LC_MESSAGES/rcgcdw.po | 42 +- locale/lol/LC_MESSAGES/formatters.po | 384 +++++++++++---- locale/lol/LC_MESSAGES/rcgcdw.po | 42 +- locale/pl/LC_MESSAGES/formatters.po | 552 ++++++++++++---------- locale/pl/LC_MESSAGES/rcgcdw.po | 42 +- locale/pt-br/LC_MESSAGES/formatters.po | 548 ++++++++++++---------- locale/pt-br/LC_MESSAGES/rcgcdw.po | 42 +- locale/ru/LC_MESSAGES/formatters.po | 566 +++++++++++++---------- locale/ru/LC_MESSAGES/rcgcdw.po | 42 +- locale/templates/formatters.pot | 356 ++++++++++---- locale/templates/misc.pot | 2 +- locale/templates/rc.pot | 40 -- locale/templates/rcgcdw.pot | 42 +- locale/templates/redaction.pot | 2 +- locale/uk/LC_MESSAGES/formatters.po | 528 +++++++++++---------- locale/uk/LC_MESSAGES/rcgcdw.po | 42 +- locale/zh-hans/LC_MESSAGES/formatters.po | 527 +++++++++++---------- locale/zh-hans/LC_MESSAGES/rcgcdw.po | 42 +- locale/zh-hant/LC_MESSAGES/formatters.po | 354 ++++++++++---- locale/zh-hant/LC_MESSAGES/rcgcdw.po | 42 +- scripts/generate-translations.sh | 8 +- 28 files changed, 3754 insertions(+), 2734 deletions(-) delete mode 100644 locale/templates/rc.pot diff --git a/locale/de/LC_MESSAGES/formatters.po b/locale/de/LC_MESSAGES/formatters.po index fb80198..83b8c61 100644 --- a/locale/de/LC_MESSAGES/formatters.po +++ b/locale/de/LC_MESSAGES/formatters.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:59+0200\n" +"POT-Creation-Date: 2021-05-21 21:20+0200\n" "PO-Revision-Date: 2021-05-21 18:19+0000\n" "Last-Translator: magiczocker \n" "Language-Team: German \n" -"Language-Team: German " -"\n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,96 +17,96 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" "X-Loco-Parser: loco_parse_po\n" -#: src/rcgcdw.py:116 +#: src/rcgcdw.py:117 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "{value} (vgl. {avg})" -#: src/rcgcdw.py:135 +#: src/rcgcdw.py:136 msgid "Daily overview" msgstr "Tägliche Übersicht" -#: src/rcgcdw.py:142 +#: src/rcgcdw.py:143 msgid "No activity" msgstr "Keine Aktivität" -#: src/rcgcdw.py:166 +#: src/rcgcdw.py:167 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " (eine Aktion)" msgstr[1] " ({} Aktionen)" -#: src/rcgcdw.py:168 +#: src/rcgcdw.py:169 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " (eine Änderung)" msgstr[1] " ({} Änderungen)" -#: src/rcgcdw.py:173 +#: src/rcgcdw.py:174 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC (eine Aktion)" msgstr[1] " UTC ({} Aktionen)" -#: src/rcgcdw.py:175 src/rcgcdw.py:178 +#: src/rcgcdw.py:176 src/rcgcdw.py:179 msgid "But nobody came" msgstr "Keine Aktivität" -#: src/rcgcdw.py:182 +#: src/rcgcdw.py:183 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Aktivster Benutzer" msgstr[1] "Aktivste Benutzer" -#: src/rcgcdw.py:183 +#: src/rcgcdw.py:184 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "Meist bearbeiteter Artikel" msgstr[1] "Meist bearbeitete Artikel" -#: src/rcgcdw.py:184 +#: src/rcgcdw.py:185 msgid "Edits made" msgstr "Bearbeitungen" -#: src/rcgcdw.py:184 +#: src/rcgcdw.py:185 msgid "New files" msgstr "Neue Dateien" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:186 msgid "Admin actions" msgstr "Admin-Aktionen" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:186 msgid "Bytes changed" msgstr "Bytes geändert" -#: src/rcgcdw.py:186 +#: src/rcgcdw.py:187 msgid "New articles" msgstr "Neue Artikel" -#: src/rcgcdw.py:186 +#: src/rcgcdw.py:187 msgid "Unique contributors" msgstr "Einzelne Autoren" -#: src/rcgcdw.py:187 +#: src/rcgcdw.py:188 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Aktivste Stunde" msgstr[1] "Aktivste Stunden" -#: src/rcgcdw.py:188 +#: src/rcgcdw.py:189 msgid "Day score" msgstr "Tageswert" -#: src/rcgcdw.py:214 +#: src/rcgcdw.py:215 msgid "~~hidden~~" msgstr "~~versteckt~~" -#: src/rcgcdw.py:216 +#: src/rcgcdw.py:217 msgid "No description provided" msgstr "Keine Zusammenfassung angegeben" -#: src/rcgcdw.py:219 +#: src/rcgcdw.py:220 msgid "hidden" msgstr "versteckt" diff --git a/locale/es/LC_MESSAGES/formatters.po b/locale/es/LC_MESSAGES/formatters.po index 281368c..c7c36c3 100644 --- a/locale/es/LC_MESSAGES/formatters.po +++ b/locale/es/LC_MESSAGES/formatters.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 14:13+0200\n" +"POT-Creation-Date: 2021-05-21 21:20+0200\n" "PO-Revision-Date: 2021-01-22 13:58+0000\n" "Last-Translator: Tamara Carvallo \n" "Language-Team: Spanish \n" "Language-Team: Spanish \n" "Language-Team: \n" @@ -63,8 +63,9 @@ msgstr "Ajoutés" msgid "Unregistered user" msgstr "" -#: src/api/util.py:160 extensions/base/discussions.py:193 -#: extensions/base/discussions.py:195 +#: src/api/util.py:160 +#, fuzzy +msgctxt "recent changes Tags" msgid "Tags" msgstr "Tags" @@ -398,7 +399,14 @@ msgstr "" msgid "Created a quiz \"{title}\"" msgstr "Création de {title}" +#: extensions/base/discussions.py:193 extensions/base/discussions.py:195 +#, fuzzy +msgctxt "Fandom discussions Tags/Forums" +msgid "Tags" +msgstr "Tags" + #: extensions/base/discussions.py:193 +msgctxt "Fandom discussions amount of Tags/Forums" msgid "{} tags" msgstr "" @@ -635,6 +643,241 @@ msgstr "Suppression de la page {article}" msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" msgstr "Modification de la visibilité d'évènements des journaux" +#: extensions/base/curseprofile.py:40 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "Modification du profil de {target}" + +#: extensions/base/curseprofile.py:42 +msgid "Edited their own profile" +msgstr "Modification de son propre profil" + +#: extensions/base/curseprofile.py:44 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "" + +#: extensions/base/curseprofile.py:46 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "{field} modifié pour: {desc}" + +#: extensions/base/curseprofile.py:58 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " +"profile." +msgstr "Retrait d'un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:60 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "Retrait d'un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:65 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " +"profile." +msgstr "Retrait d'un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:67 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "Retrait d'un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:82 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "Ajout d'un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:84 +msgid "Left a comment on their own profile" +msgstr "Ajout d'un commentaire sur son propre profil" + +#: extensions/base/curseprofile.py:97 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." +msgstr "Ajout d'un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:100 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile." +msgstr "Ajout d'un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:113 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "Édition d'un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:115 +msgid "Edited a comment on their own profile" +msgstr "Modification d'un commentaire sur son propre profil" + +#: extensions/base/curseprofile.py:128 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." +msgstr "Édition d'un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:131 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile." +msgstr "Édition d'un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:144 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "Réponse à un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:146 +msgid "Replied to a comment on their own profile" +msgstr "Réponse à un commentaire sur son propre profil" + +#: extensions/base/curseprofile.py:159 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile." +msgstr "Réponse à un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:162 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile." +msgstr "Réponse à un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:175 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "Retrait d'un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:177 +#, fuzzy +msgid "Deleted a comment on their own profile" +msgstr "Modification d'un commentaire sur son propre profil" + +#: extensions/base/curseprofile.py:197 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +"profile.{reason}" +msgstr "Édition d'un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:200 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." +"{reason}" +msgstr "Édition d'un commentaire sur le profil de {target}" + +#: extensions/base/curseprofile.py:214 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "Retrait d'un commentaire sur le profil de {target}." + +#: extensions/base/curseprofile.py:216 +#, fuzzy +msgid "Purged a comment on their own profile" +msgstr "Modification d'un commentaire sur son propre profil" + +#: extensions/base/curseprofile.py:230 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." +"{reason}" +msgstr "" +"[{author}]({author_url}) a retiré un commentaire sur le profil de {target}." + +#: extensions/base/curseprofile.py:233 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [their own]({link}) profile." +"{reason}" +msgstr "" +"[{author}]({author_url}) a retiré un commentaire sur le profil de {target}." + +#: extensions/base/renameuser.py:38 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/renameuser.py:43 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: extensions/base/renameuser.py:58 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" +msgstr[1] "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" + +#: extensions/base/renameuser.py:66 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" + +#: extensions/base/interwiki.py:37 +msgid "Added an entry to the interwiki table" +msgstr "Ajout d'une entrée à la table interwiki" + +#: extensions/base/interwiki.py:38 extensions/base/interwiki.py:65 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "Préfixe: {prefix}, site: {website} | {desc}" + +#: extensions/base/interwiki.py:50 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "Retrait d'une entrée de la table interwiki" + +#: extensions/base/interwiki.py:64 +msgid "Edited an entry in interwiki table" +msgstr "Modification d'une entrée de la table interwiki" + +#: extensions/base/interwiki.py:77 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "Retrait d'une entrée de la table interwiki" + +#: extensions/base/interwiki.py:91 +msgid "Deleted an entry in interwiki table" +msgstr "Retrait d'une entrée de la table interwiki" + +#: extensions/base/interwiki.py:92 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "Préfixe: {prefix} | {desc}" + +#: extensions/base/interwiki.py:102 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" +msgstr "Retrait d'une entrée de la table interwiki" + #: extensions/base/abusefilter.py:29 msgid "None" msgstr "" @@ -1190,7 +1433,7 @@ msgstr "" msgid "Changed group membership for {target}" msgstr "Modification des groupes pour {target}" -#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +#: extensions/base/mediawiki.py:839 msgid "System" msgstr "Système" @@ -1216,10 +1459,14 @@ msgstr "Modification de la visibilité d'une révision de la page {article} " #: extensions/base/mediawiki.py:864 #, fuzzy, python-brace-format msgid "" -"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"System autopromoted [{target}]({target_url}) {added}{comma} {removed}" "{comment}" msgstr "Modification de la visibilité d'une révision de la page {article} " +#: extensions/base/mediawiki.py:866 +msgid "," +msgstr "" + #: extensions/base/mediawiki.py:877 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" @@ -1276,116 +1523,73 @@ msgid "" msgstr "" #: extensions/base/mediawiki.py:1009 -msgid "Added an entry to the interwiki table" -msgstr "Ajout d'une entrée à la table interwiki" - -#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "Préfixe: {prefix}, site: {website} | {desc}" - -#: extensions/base/mediawiki.py:1022 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) added an entry to the [interwiki table]" -"({table_url}) pointing to {website} with {prefix} prefix" -msgstr "Retrait d'une entrée de la table interwiki" - -#: extensions/base/mediawiki.py:1036 -msgid "Edited an entry in interwiki table" -msgstr "Modification d'une entrée de la table interwiki" - -#: extensions/base/mediawiki.py:1049 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " -"pointing to {website} with {prefix} prefix" -msgstr "Retrait d'une entrée de la table interwiki" - -#: extensions/base/mediawiki.py:1063 -msgid "Deleted an entry in interwiki table" -msgstr "Retrait d'une entrée de la table interwiki" - -#: extensions/base/mediawiki.py:1064 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "Préfixe: {prefix} | {desc}" - -#: extensions/base/mediawiki.py:1074 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" -"{desc}" -msgstr "Retrait d'une entrée de la table interwiki" - -#: extensions/base/mediawiki.py:1091 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "Modification du modèle de contenu de l'article {article}" -#: extensions/base/mediawiki.py:1093 +#: extensions/base/mediawiki.py:1011 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Modèle changé de {old} à {new}: {reason}" -#: extensions/base/mediawiki.py:1105 +#: extensions/base/mediawiki.py:1023 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "Modification de la visibilité d'une révision de la page {article} " -#: extensions/base/mediawiki.py:1120 +#: extensions/base/mediawiki.py:1038 #, python-brace-format msgid "Created the page {article} using a non-default content model" msgstr "" -#: extensions/base/mediawiki.py:1122 +#: extensions/base/mediawiki.py:1040 #, fuzzy, python-brace-format msgid "Created with model {new}: {reason}" msgstr "Modèle changé de {old} à {new}: {reason}" -#: extensions/base/mediawiki.py:1133 +#: extensions/base/mediawiki.py:1051 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " "non-default content model {new}{comment}" msgstr "Modification de la visibilité d'une révision de la page {article} " -#: extensions/base/mediawiki.py:1148 +#: extensions/base/mediawiki.py:1066 #, fuzzy, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "Création du tag « {tag} »" -#: extensions/base/mediawiki.py:1158 +#: extensions/base/mediawiki.py:1076 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" -#: extensions/base/mediawiki.py:1180 +#: extensions/base/mediawiki.py:1098 #, fuzzy, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "Suppression du tag « {tag} »" -#: extensions/base/mediawiki.py:1182 +#: extensions/base/mediawiki.py:1100 #, fuzzy msgid "Removed from" msgstr "Retirés" -#: extensions/base/mediawiki.py:1182 +#: extensions/base/mediawiki.py:1100 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:1194 +#: extensions/base/mediawiki.py:1112 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" -#: extensions/base/mediawiki.py:1204 +#: extensions/base/mediawiki.py:1122 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -1396,58 +1600,28 @@ msgid_plural "" msgstr[0] "Modification des paramètres de blocage pour {blocked_user}" msgstr[1] "Modification des paramètres de blocage pour {blocked_user}" -#: extensions/base/mediawiki.py:1221 +#: extensions/base/mediawiki.py:1139 #, fuzzy, python-brace-format msgid "Activated the tag \"{tag}\"" msgstr "Activation du tag « {tag} »" -#: extensions/base/mediawiki.py:1230 +#: extensions/base/mediawiki.py:1148 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" -#: extensions/base/mediawiki.py:1249 +#: extensions/base/mediawiki.py:1167 #, fuzzy, python-brace-format msgid "Deactivated the tag \"{tag}\"" msgstr "Désactivation du tag « {tag} »" -#: extensions/base/mediawiki.py:1258 +#: extensions/base/mediawiki.py:1176 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) a recréé le tableau Cargo « {table} »" -#: extensions/base/mediawiki.py:1278 -#, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -msgstr[1] "" - -#: extensions/base/mediawiki.py:1283 -#, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "" - -#: extensions/base/mediawiki.py:1298 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " -"[{new_name}]({link}){comment}" -msgid_plural "" -"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " -"[{new_name}]({link}){comment}" -msgstr[0] "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" -msgstr[1] "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" - -#: extensions/base/mediawiki.py:1306 -#, fuzzy, python-brace-format -msgid "" -"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" -"{comment}" -msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" - #: extensions/base/sprite.py:37 #, python-brace-format msgid "Edited the sprite for {article}" @@ -1575,76 +1749,6 @@ msgstr "Création d'une feuille de sprite pour {article}" #~ msgstr[0] "centenaire" #~ msgstr[1] "centenaires" -#, fuzzy, python-brace-format -#~ msgid "" -#~ "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile" -#~ msgstr "Ajout d'un commentaire sur le profil de {target}" - -#, fuzzy, python-brace-format -#~ msgid "" -#~ "[{author}]({author_url}) left a [comment]({comment}) on their own profile" -#~ msgstr "Ajout d'un commentaire sur le profil de {target}" - -#, fuzzy, python-brace-format -#~ msgid "" -#~ "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " -#~ "profile" -#~ msgstr "Réponse à un commentaire sur le profil de {target}" - -#, fuzzy, python-brace-format -#~ msgid "" -#~ "[{author}]({author_url}) replied to a [comment]({comment}) on their own " -#~ "profile" -#~ msgstr "Réponse à un commentaire sur le profil de {target}" - -#, fuzzy, python-brace-format -#~ msgid "" -#~ "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s " -#~ "profile" -#~ msgstr "Édition d'un commentaire sur le profil de {target}" - -#, fuzzy, python-brace-format -#~ msgid "" -#~ "[{author}]({author_url}) edited a [comment]({comment}) on their own " -#~ "profile" -#~ msgstr "Édition d'un commentaire sur le profil de {target}" - -#, fuzzy, python-brace-format -#~ msgid "[{author}]({author_url}) purged a comment on {target}'s profile" -#~ msgstr "" -#~ "[{author}]({author_url}) a retiré un commentaire sur le profil de " -#~ "{target}." - -#, fuzzy, python-brace-format -#~ msgid "[{author}]({author_url}) purged a comment on their own profile" -#~ msgstr "" -#~ "[{author}]({author_url}) a retiré un commentaire sur le profil de " -#~ "{target}." - -#, fuzzy, python-brace-format -#~ msgid "" -#~ "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " -#~ "profile" -#~ msgstr "Édition d'un commentaire sur le profil de {target}" - -#, fuzzy, python-brace-format -#~ msgid "" -#~ "[{author}]({author_url}) deleted a [comment]({comment}) on their own " -#~ "profile" -#~ msgstr "Édition d'un commentaire sur le profil de {target}" - -#, fuzzy, python-brace-format -#~ msgid "" -#~ "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " -#~ "profile. *({desc})*" -#~ msgstr "Retrait d'un commentaire sur le profil de {target}" - -#, fuzzy, python-brace-format -#~ msgid "" -#~ "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " -#~ "profile. *({desc})*" -#~ msgstr "Retrait d'un commentaire sur le profil de {target}" - #~ msgid "none" #~ msgstr "aucun" @@ -1654,54 +1758,6 @@ msgstr "Création d'une feuille de sprite pour {article}" #~ "[{article}]({article_url}){comment}" #~ msgstr "Création d'une feuille de sprite pour {article}" -#, python-brace-format -#~ msgid "Left a comment on {target}'s profile" -#~ msgstr "Ajout d'un commentaire sur le profil de {target}" - -#~ msgid "Left a comment on their own profile" -#~ msgstr "Ajout d'un commentaire sur son propre profil" - -#, python-brace-format -#~ msgid "Replied to a comment on {target}'s profile" -#~ msgstr "Réponse à un commentaire sur le profil de {target}" - -#~ msgid "Replied to a comment on their own profile" -#~ msgstr "Réponse à un commentaire sur son propre profil" - -#, python-brace-format -#~ msgid "Edited a comment on {target}'s profile" -#~ msgstr "Édition d'un commentaire sur le profil de {target}" - -#~ msgid "Edited a comment on their own profile" -#~ msgstr "Modification d'un commentaire sur son propre profil" - -#, python-brace-format -#~ msgid "Edited {target}'s profile" -#~ msgstr "Modification du profil de {target}" - -#~ msgid "Edited their own profile" -#~ msgstr "Modification de son propre profil" - -#, python-brace-format -#~ msgid "{field} field changed to: {desc}" -#~ msgstr "{field} modifié pour: {desc}" - -#, python-brace-format -#~ msgid "Purged a comment on {target}'s profile" -#~ msgstr "Retrait d'un commentaire sur le profil de {target}." - -#, fuzzy -#~ msgid "Purged a comment on their own profile" -#~ msgstr "Modification d'un commentaire sur son propre profil" - -#, python-brace-format -#~ msgid "Deleted a comment on {target}'s profile" -#~ msgstr "Retrait d'un commentaire sur le profil de {target}" - -#, fuzzy -#~ msgid "Deleted a comment on their own profile" -#~ msgstr "Modification d'un commentaire sur son propre profil" - #, python-brace-format #~ msgid "Groups changed from {old_groups} to {new_groups}{reason}" #~ msgstr "Groupe modifié de {old_groups} vers {new_groups}{reason}" diff --git a/locale/fr/LC_MESSAGES/rcgcdw.po b/locale/fr/LC_MESSAGES/rcgcdw.po index 081759e..679d9b4 100644 --- a/locale/fr/LC_MESSAGES/rcgcdw.po +++ b/locale/fr/LC_MESSAGES/rcgcdw.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"POT-Creation-Date: 2021-05-21 21:04+0200\n" "PO-Revision-Date: 2020-12-13 14:30+0000\n" "Last-Translator: magiczocker \n" "Language-Team: French \n" "Language-Team: Hindi \n" "Language-Team: Hindi 1;\n" "X-Generator: Weblate 4.2.1\n" -#: src/rcgcdw.py:116 +#: src/rcgcdw.py:117 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "{value} (औसत {avg})" -#: src/rcgcdw.py:135 +#: src/rcgcdw.py:136 msgid "Daily overview" msgstr "दैनिक अवलोकन" -#: src/rcgcdw.py:142 +#: src/rcgcdw.py:143 msgid "No activity" msgstr "कोई ऐक्टिविटी नहीं थी" -#: src/rcgcdw.py:166 +#: src/rcgcdw.py:167 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} एक्शन)" msgstr[1] " ({} एक्शन)" -#: src/rcgcdw.py:168 +#: src/rcgcdw.py:169 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} सम्पादना)" msgstr[1] " ({} सम्पादनाएँ)" -#: src/rcgcdw.py:173 +#: src/rcgcdw.py:174 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} एक्शन)" msgstr[1] " UTC ({} एक्शन)" -#: src/rcgcdw.py:175 src/rcgcdw.py:178 +#: src/rcgcdw.py:176 src/rcgcdw.py:179 msgid "But nobody came" msgstr "पर कोई नहीं आया" -#: src/rcgcdw.py:182 +#: src/rcgcdw.py:183 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "सबसे सक्रीय सदस्य" msgstr[1] "सबसे सक्रीय सदस्य" -#: src/rcgcdw.py:183 +#: src/rcgcdw.py:184 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "सबसे ज़्यादा सम्पादित किया गया आर्टिकल" msgstr[1] "सबसे ज़्यादा सम्पादित किए गए आर्टिकल" -#: src/rcgcdw.py:184 +#: src/rcgcdw.py:185 msgid "Edits made" msgstr "दिए गए सम्पादनाएँ" -#: src/rcgcdw.py:184 +#: src/rcgcdw.py:185 msgid "New files" msgstr "नए चित्र" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:186 msgid "Admin actions" msgstr "एडमिन एक्शन" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:186 msgid "Bytes changed" msgstr "बदले गए बाइट" -#: src/rcgcdw.py:186 +#: src/rcgcdw.py:187 msgid "New articles" msgstr "नए आर्टिकल" -#: src/rcgcdw.py:186 +#: src/rcgcdw.py:187 msgid "Unique contributors" msgstr "विशेष सदस्य" -#: src/rcgcdw.py:187 +#: src/rcgcdw.py:188 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "सबसे सक्रीय घंटा" msgstr[1] "सबसे सक्रीय घंटे" -#: src/rcgcdw.py:188 +#: src/rcgcdw.py:189 msgid "Day score" msgstr "दिन का स्कोर" -#: src/rcgcdw.py:214 +#: src/rcgcdw.py:215 msgid "~~hidden~~" msgstr "" -#: src/rcgcdw.py:216 +#: src/rcgcdw.py:217 msgid "No description provided" msgstr "कोई विवरण नहीं दिया गया" -#: src/rcgcdw.py:219 +#: src/rcgcdw.py:220 msgid "hidden" msgstr "" diff --git a/locale/lol/LC_MESSAGES/formatters.po b/locale/lol/LC_MESSAGES/formatters.po index 8190fb1..0227e9f 100644 --- a/locale/lol/LC_MESSAGES/formatters.po +++ b/locale/lol/LC_MESSAGES/formatters.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:59+0200\n" +"POT-Creation-Date: 2021-05-21 21:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -49,8 +49,8 @@ msgstr "" msgid "Unregistered user" msgstr "" -#: src/api/util.py:160 extensions/base/discussions.py:193 -#: extensions/base/discussions.py:195 +#: src/api/util.py:160 +msgctxt "recent changes Tags" msgid "Tags" msgstr "" @@ -380,7 +380,13 @@ msgstr "" msgid "Created a quiz \"{title}\"" msgstr "" +#: extensions/base/discussions.py:193 extensions/base/discussions.py:195 +msgctxt "Fandom discussions Tags/Forums" +msgid "Tags" +msgstr "" + #: extensions/base/discussions.py:193 +msgctxt "Fandom discussions amount of Tags/Forums" msgid "{} tags" msgstr "" @@ -601,6 +607,257 @@ msgstr "" msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" msgstr "" +#: extensions/base/curseprofile.py:40 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:42 +msgid "Edited their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:44 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "" + +#: extensions/base/curseprofile.py:46 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "" + +#: extensions/base/curseprofile.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:60 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) rearranged lettwers of [{article}]({edit_link})" +"{comment} ({sign}{edit_size})" + +#: extensions/base/curseprofile.py:65 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:67 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" +"[{author}]({author_url}) rearranged lettwers of [{article}]({edit_link})" +"{comment} ({sign}{edit_size})" + +#: extensions/base/curseprofile.py:82 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:84 +msgid "Left a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:97 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." +msgstr "" +"[{author}]({author_url}) rearranged lettwers of [{article}]({edit_link})" +"{comment} ({sign}{edit_size})" + +#: extensions/base/curseprofile.py:100 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile." +msgstr "" +"[{author}]({author_url}) rearranged lettwers of [{article}]({edit_link})" +"{comment} ({sign}{edit_size})" + +#: extensions/base/curseprofile.py:113 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:115 +msgid "Edited a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:128 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." +msgstr "" +"[{author}]({author_url}) rearranged lettwers of [{article}]({edit_link})" +"{comment} ({sign}{edit_size})" + +#: extensions/base/curseprofile.py:131 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile." +msgstr "" +"[{author}]({author_url}) rearranged lettwers of [{article}]({edit_link})" +"{comment} ({sign}{edit_size})" + +#: extensions/base/curseprofile.py:144 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:146 +msgid "Replied to a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:159 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile." +msgstr "" +"[{author}]({author_url}) rearranged lettwers of [{article}]({edit_link})" +"{comment} ({sign}{edit_size})" + +#: extensions/base/curseprofile.py:162 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile." +msgstr "" +"[{author}]({author_url}) rearranged lettwers of [{article}]({edit_link})" +"{comment} ({sign}{edit_size})" + +#: extensions/base/curseprofile.py:175 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:177 +msgid "Deleted a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:197 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +"profile.{reason}" +msgstr "" +"[{author}]({author_url}) rearranged lettwers of [{article}]({edit_link})" +"{comment} ({sign}{edit_size})" + +#: extensions/base/curseprofile.py:200 +#, fuzzy, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." +"{reason}" +msgstr "" +"[{author}]({author_url}) rearranged lettwers of [{article}]({edit_link})" +"{comment} ({sign}{edit_size})" + +#: extensions/base/curseprofile.py:214 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:216 +msgid "Purged a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:230 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:233 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [their own]({link}) profile." +"{reason}" +msgstr "" + +#: extensions/base/renameuser.py:38 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/renameuser.py:43 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: extensions/base/renameuser.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/renameuser.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" + +#: extensions/base/interwiki.py:37 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:38 extensions/base/interwiki.py:65 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:50 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:64 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:77 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:91 +msgid "Deleted an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:92 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:102 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" +msgstr "" + #: extensions/base/abusefilter.py:29 msgid "None" msgstr "" @@ -1140,7 +1397,7 @@ msgstr "" msgid "Changed group membership for {target}" msgstr "" -#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +#: extensions/base/mediawiki.py:839 msgid "System" msgstr "" @@ -1166,10 +1423,14 @@ msgstr "" #: extensions/base/mediawiki.py:864 #, python-brace-format msgid "" -"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"System autopromoted [{target}]({target_url}) {added}{comma} {removed}" "{comment}" msgstr "" +#: extensions/base/mediawiki.py:866 +msgid "," +msgstr "" + #: extensions/base/mediawiki.py:877 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" @@ -1225,115 +1486,72 @@ msgid "" msgstr "" #: extensions/base/mediawiki.py:1009 -msgid "Added an entry to the interwiki table" -msgstr "" - -#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "" - -#: extensions/base/mediawiki.py:1022 -#, python-brace-format -msgid "" -"[{author}]({author_url}) added an entry to the [interwiki table]" -"({table_url}) pointing to {website} with {prefix} prefix" -msgstr "" - -#: extensions/base/mediawiki.py:1036 -msgid "Edited an entry in interwiki table" -msgstr "" - -#: extensions/base/mediawiki.py:1049 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " -"pointing to {website} with {prefix} prefix" -msgstr "" - -#: extensions/base/mediawiki.py:1063 -msgid "Deleted an entry in interwiki table" -msgstr "" - -#: extensions/base/mediawiki.py:1064 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "" - -#: extensions/base/mediawiki.py:1074 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" -"{desc}" -msgstr "" - -#: extensions/base/mediawiki.py:1091 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "" -#: extensions/base/mediawiki.py:1093 +#: extensions/base/mediawiki.py:1011 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "" -#: extensions/base/mediawiki.py:1105 +#: extensions/base/mediawiki.py:1023 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "" -#: extensions/base/mediawiki.py:1120 +#: extensions/base/mediawiki.py:1038 #, python-brace-format msgid "Created the page {article} using a non-default content model" msgstr "" -#: extensions/base/mediawiki.py:1122 +#: extensions/base/mediawiki.py:1040 #, python-brace-format msgid "Created with model {new}: {reason}" msgstr "" -#: extensions/base/mediawiki.py:1133 +#: extensions/base/mediawiki.py:1051 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " "non-default content model {new}{comment}" msgstr "" -#: extensions/base/mediawiki.py:1148 +#: extensions/base/mediawiki.py:1066 #, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1158 +#: extensions/base/mediawiki.py:1076 #, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1180 +#: extensions/base/mediawiki.py:1098 #, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1182 +#: extensions/base/mediawiki.py:1100 msgid "Removed from" msgstr "" -#: extensions/base/mediawiki.py:1182 +#: extensions/base/mediawiki.py:1100 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:1194 +#: extensions/base/mediawiki.py:1112 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1204 +#: extensions/base/mediawiki.py:1122 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -1344,58 +1562,28 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:1221 +#: extensions/base/mediawiki.py:1139 #, python-brace-format msgid "Activated the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1230 +#: extensions/base/mediawiki.py:1148 #, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1249 +#: extensions/base/mediawiki.py:1167 #, python-brace-format msgid "Deactivated the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1258 +#: extensions/base/mediawiki.py:1176 #, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1278 -#, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -msgstr[1] "" - -#: extensions/base/mediawiki.py:1283 -#, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "" - -#: extensions/base/mediawiki.py:1298 -#, python-brace-format -msgid "" -"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " -"[{new_name}]({link}){comment}" -msgid_plural "" -"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " -"[{new_name}]({link}){comment}" -msgstr[0] "" -msgstr[1] "" - -#: extensions/base/mediawiki.py:1306 -#, python-brace-format -msgid "" -"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" -"{comment}" -msgstr "" - #: extensions/base/sprite.py:37 #, python-brace-format msgid "Edited the sprite for {article}" @@ -1469,11 +1657,3 @@ msgstr "" #~ msgid "About me" #~ msgstr "Abot me" - -#, python-brace-format -#~ msgid "" -#~ "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" -#~ "{edit_size})" -#~ msgstr "" -#~ "[{author}]({author_url}) rearranged lettwers of [{article}]({edit_link})" -#~ "{comment} ({sign}{edit_size})" diff --git a/locale/lol/LC_MESSAGES/rcgcdw.po b/locale/lol/LC_MESSAGES/rcgcdw.po index a3a0fb4..71f8159 100644 --- a/locale/lol/LC_MESSAGES/rcgcdw.po +++ b/locale/lol/LC_MESSAGES/rcgcdw.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:47+0200\n" +"POT-Creation-Date: 2021-05-21 21:04+0200\n" "PO-Revision-Date: 2020-08-16 19:13+0000\n" "Last-Translator: Frisk The Evil Goat Overlord <>\n" "Language-Team: Lolcat \n" "Language-Team: Polish \n" "Language-Team: Polish \n" "Language-Team: Portuguese (Brazil) \n" "Language-Team: Portuguese (Brazil) 1;\n" "X-Generator: Weblate 4.6\n" -#: src/rcgcdw.py:116 +#: src/rcgcdw.py:117 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "{value} (med. {avg})" -#: src/rcgcdw.py:135 +#: src/rcgcdw.py:136 msgid "Daily overview" msgstr "Visão geral diária" -#: src/rcgcdw.py:142 +#: src/rcgcdw.py:143 msgid "No activity" msgstr "Sem atividade" -#: src/rcgcdw.py:166 +#: src/rcgcdw.py:167 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} ação)" msgstr[1] " ({} ações)" -#: src/rcgcdw.py:168 +#: src/rcgcdw.py:169 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} edição)" msgstr[1] " ({} edições)" -#: src/rcgcdw.py:173 +#: src/rcgcdw.py:174 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} ação)" msgstr[1] " UTC ({} ações)" -#: src/rcgcdw.py:175 src/rcgcdw.py:178 +#: src/rcgcdw.py:176 src/rcgcdw.py:179 msgid "But nobody came" msgstr "Ninguém apareceu por aqui" -#: src/rcgcdw.py:182 +#: src/rcgcdw.py:183 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Usuário mais ativo" msgstr[1] "Usuários mais ativos" -#: src/rcgcdw.py:183 +#: src/rcgcdw.py:184 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "Artigo mais editado" msgstr[1] "Artigos mais editados" -#: src/rcgcdw.py:184 +#: src/rcgcdw.py:185 msgid "Edits made" msgstr "Edições feitas" -#: src/rcgcdw.py:184 +#: src/rcgcdw.py:185 msgid "New files" msgstr "Novos arquivos" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:186 msgid "Admin actions" msgstr "Ações de administração" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:186 msgid "Bytes changed" msgstr "Bytes alterados" -#: src/rcgcdw.py:186 +#: src/rcgcdw.py:187 msgid "New articles" msgstr "Novos artigos" -#: src/rcgcdw.py:186 +#: src/rcgcdw.py:187 msgid "Unique contributors" msgstr "Contribuidores exclusivos" -#: src/rcgcdw.py:187 +#: src/rcgcdw.py:188 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Hora mais ativa" msgstr[1] "Horas mais ativas" -#: src/rcgcdw.py:188 +#: src/rcgcdw.py:189 msgid "Day score" msgstr "Pontuação do dia" -#: src/rcgcdw.py:214 +#: src/rcgcdw.py:215 msgid "~~hidden~~" msgstr "~~oculto~~" -#: src/rcgcdw.py:216 +#: src/rcgcdw.py:217 msgid "No description provided" msgstr "Nenhuma descrição fornecida" -#: src/rcgcdw.py:219 +#: src/rcgcdw.py:220 msgid "hidden" msgstr "oculto" diff --git a/locale/ru/LC_MESSAGES/formatters.po b/locale/ru/LC_MESSAGES/formatters.po index 9767a56..fdaebd6 100644 --- a/locale/ru/LC_MESSAGES/formatters.po +++ b/locale/ru/LC_MESSAGES/formatters.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:59+0200\n" +"POT-Creation-Date: 2021-05-21 21:20+0200\n" "PO-Revision-Date: 2021-05-21 18:19+0000\n" "Last-Translator: Philo04 \n" "Language-Team: Russian \n" "Language-Team: Russian =20) ? 1 : 2;\n" "X-Generator: Weblate 4.6\n" -#: src/rcgcdw.py:116 +#: src/rcgcdw.py:117 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "{value} (ср. {avg})" -#: src/rcgcdw.py:135 +#: src/rcgcdw.py:136 msgid "Daily overview" msgstr "Ежедневный обзор" -#: src/rcgcdw.py:142 +#: src/rcgcdw.py:143 msgid "No activity" msgstr "Нет активности" -#: src/rcgcdw.py:166 +#: src/rcgcdw.py:167 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} действие)" msgstr[1] " ({} действия)" msgstr[2] " ({} действий)" -#: src/rcgcdw.py:168 +#: src/rcgcdw.py:169 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} правка)" msgstr[1] " ({} правки)" msgstr[2] " ({} правок)" -#: src/rcgcdw.py:173 +#: src/rcgcdw.py:174 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} действие)" msgstr[1] " UTC ({} действия)" msgstr[2] " UTC ({} действий)" -#: src/rcgcdw.py:175 src/rcgcdw.py:178 +#: src/rcgcdw.py:176 src/rcgcdw.py:179 msgid "But nobody came" msgstr "Но никто не пришёл" -#: src/rcgcdw.py:182 +#: src/rcgcdw.py:183 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Самый активный участник" msgstr[1] "Самые активные участники" msgstr[2] "Самые активные участники" -#: src/rcgcdw.py:183 +#: src/rcgcdw.py:184 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "Самая редактируемая статья" msgstr[1] "Самые редактируемые статьи" msgstr[2] "Самые редактируемые статьи" -#: src/rcgcdw.py:184 +#: src/rcgcdw.py:185 msgid "Edits made" msgstr "Сделано правок" -#: src/rcgcdw.py:184 +#: src/rcgcdw.py:185 msgid "New files" msgstr "Новых файлов" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:186 msgid "Admin actions" msgstr "Административных действий" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:186 msgid "Bytes changed" msgstr "Изменено байтов" -#: src/rcgcdw.py:186 +#: src/rcgcdw.py:187 msgid "New articles" msgstr "Новых статей" -#: src/rcgcdw.py:186 +#: src/rcgcdw.py:187 msgid "Unique contributors" msgstr "Уникальных редакторов" -#: src/rcgcdw.py:187 +#: src/rcgcdw.py:188 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Самый активный час" msgstr[1] "Самые активные часы" msgstr[2] "Самые активные часы" -#: src/rcgcdw.py:188 +#: src/rcgcdw.py:189 msgid "Day score" msgstr "Очков за день" -#: src/rcgcdw.py:214 +#: src/rcgcdw.py:215 msgid "~~hidden~~" msgstr "~~скрыто~~" -#: src/rcgcdw.py:216 +#: src/rcgcdw.py:217 msgid "No description provided" msgstr "" -#: src/rcgcdw.py:219 +#: src/rcgcdw.py:220 msgid "hidden" msgstr "скрыто" diff --git a/locale/templates/formatters.pot b/locale/templates/formatters.pot index 4b8748e..917c35f 100644 --- a/locale/templates/formatters.pot +++ b/locale/templates/formatters.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 14:13+0200\n" +"POT-Creation-Date: 2021-05-21 21:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -36,8 +36,8 @@ msgstr "" msgid "Unregistered user" msgstr "" -#: src/api/util.py:160 extensions/base/discussions.py:193 -#: extensions/base/discussions.py:195 +#: src/api/util.py:160 +msgctxt "recent changes Tags" msgid "Tags" msgstr "" @@ -367,7 +367,13 @@ msgstr "" msgid "Created a quiz \"{title}\"" msgstr "" +#: extensions/base/discussions.py:193 extensions/base/discussions.py:195 +msgctxt "Fandom discussions Tags/Forums" +msgid "Tags" +msgstr "" + #: extensions/base/discussions.py:193 +msgctxt "Fandom discussions amount of Tags/Forums" msgid "{} tags" msgstr "" @@ -588,6 +594,237 @@ msgstr "" msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" msgstr "" +#: extensions/base/curseprofile.py:40 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:42 +msgid "Edited their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:44 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "" + +#: extensions/base/curseprofile.py:46 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "" + +#: extensions/base/curseprofile.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:60 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:65 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:67 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:82 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:84 +msgid "Left a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:97 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:100 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:113 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:115 +msgid "Edited a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:131 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:144 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:146 +msgid "Replied to a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:162 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:175 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:177 +msgid "Deleted a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:197 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +"profile.{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:200 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:214 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:216 +msgid "Purged a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:230 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:233 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [their own]({link}) profile." +"{reason}" +msgstr "" + +#: extensions/base/renameuser.py:38 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/renameuser.py:43 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: extensions/base/renameuser.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/renameuser.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" + +#: extensions/base/interwiki.py:37 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:38 extensions/base/interwiki.py:65 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:50 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:64 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:77 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:91 +msgid "Deleted an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:92 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:102 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" +msgstr "" + #: extensions/base/abusefilter.py:29 msgid "None" msgstr "" @@ -1127,7 +1364,7 @@ msgstr "" msgid "Changed group membership for {target}" msgstr "" -#: extensions/base/mediawiki.py:839 extensions/base/mediawiki.py:865 +#: extensions/base/mediawiki.py:839 msgid "System" msgstr "" @@ -1153,10 +1390,14 @@ msgstr "" #: extensions/base/mediawiki.py:864 #, python-brace-format msgid "" -"{author} autopromoted [{target}]({target_url}) {added}{comma} {removed}" +"System autopromoted [{target}]({target_url}) {added}{comma} {removed}" "{comment}" msgstr "" +#: extensions/base/mediawiki.py:866 +msgid "," +msgstr "" + #: extensions/base/mediawiki.py:877 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" @@ -1212,115 +1453,72 @@ msgid "" msgstr "" #: extensions/base/mediawiki.py:1009 -msgid "Added an entry to the interwiki table" -msgstr "" - -#: extensions/base/mediawiki.py:1010 extensions/base/mediawiki.py:1037 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "" - -#: extensions/base/mediawiki.py:1022 -#, python-brace-format -msgid "" -"[{author}]({author_url}) added an entry to the [interwiki table]" -"({table_url}) pointing to {website} with {prefix} prefix" -msgstr "" - -#: extensions/base/mediawiki.py:1036 -msgid "Edited an entry in interwiki table" -msgstr "" - -#: extensions/base/mediawiki.py:1049 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " -"pointing to {website} with {prefix} prefix" -msgstr "" - -#: extensions/base/mediawiki.py:1063 -msgid "Deleted an entry in interwiki table" -msgstr "" - -#: extensions/base/mediawiki.py:1064 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "" - -#: extensions/base/mediawiki.py:1074 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" -"{desc}" -msgstr "" - -#: extensions/base/mediawiki.py:1091 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "" -#: extensions/base/mediawiki.py:1093 +#: extensions/base/mediawiki.py:1011 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "" -#: extensions/base/mediawiki.py:1105 +#: extensions/base/mediawiki.py:1023 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "" -#: extensions/base/mediawiki.py:1120 +#: extensions/base/mediawiki.py:1038 #, python-brace-format msgid "Created the page {article} using a non-default content model" msgstr "" -#: extensions/base/mediawiki.py:1122 +#: extensions/base/mediawiki.py:1040 #, python-brace-format msgid "Created with model {new}: {reason}" msgstr "" -#: extensions/base/mediawiki.py:1133 +#: extensions/base/mediawiki.py:1051 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " "non-default content model {new}{comment}" msgstr "" -#: extensions/base/mediawiki.py:1148 +#: extensions/base/mediawiki.py:1066 #, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1158 +#: extensions/base/mediawiki.py:1076 #, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1180 +#: extensions/base/mediawiki.py:1098 #, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1182 +#: extensions/base/mediawiki.py:1100 msgid "Removed from" msgstr "" -#: extensions/base/mediawiki.py:1182 +#: extensions/base/mediawiki.py:1100 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:1194 +#: extensions/base/mediawiki.py:1112 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1204 +#: extensions/base/mediawiki.py:1122 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -1331,58 +1529,28 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:1221 +#: extensions/base/mediawiki.py:1139 #, python-brace-format msgid "Activated the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1230 +#: extensions/base/mediawiki.py:1148 #, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1249 +#: extensions/base/mediawiki.py:1167 #, python-brace-format msgid "Deactivated the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1258 +#: extensions/base/mediawiki.py:1176 #, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1278 -#, python-brace-format -msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" -msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -msgstr[1] "" - -#: extensions/base/mediawiki.py:1283 -#, python-brace-format -msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "" - -#: extensions/base/mediawiki.py:1298 -#, python-brace-format -msgid "" -"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " -"[{new_name}]({link}){comment}" -msgid_plural "" -"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " -"[{new_name}]({link}){comment}" -msgstr[0] "" -msgstr[1] "" - -#: extensions/base/mediawiki.py:1306 -#, python-brace-format -msgid "" -"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" -"{comment}" -msgstr "" - #: extensions/base/sprite.py:37 #, python-brace-format msgid "Edited the sprite for {article}" diff --git a/locale/templates/misc.pot b/locale/templates/misc.pot index afe2ee6..6567b1e 100644 --- a/locale/templates/misc.pot +++ b/locale/templates/misc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 14:13+0200\n" +"POT-Creation-Date: 2021-05-21 21:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/templates/rc.pot b/locale/templates/rc.pot deleted file mode 100644 index 4e205ec..0000000 --- a/locale/templates/rc.pot +++ /dev/null @@ -1,40 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the RcGcDw package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: RcGcDw\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 16:24+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: src/rc.py:322 -#, python-brace-format -msgid "{wiki} seems to be down or unreachable." -msgstr "" - -#: src/rc.py:323 src/rc.py:335 -msgid "Connection status" -msgstr "" - -#: src/rc.py:333 -#, python-brace-format -msgid "Connection to {wiki} seems to be stable now." -msgstr "" - -#: src/rc.py:404 -msgid "~~hidden~~" -msgstr "" - -#: src/rc.py:408 -msgid "hidden" -msgstr "" diff --git a/locale/templates/rcgcdw.pot b/locale/templates/rcgcdw.pot index 04481e5..5ad5433 100644 --- a/locale/templates/rcgcdw.pot +++ b/locale/templates/rcgcdw.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 14:13+0200\n" +"POT-Creation-Date: 2021-05-21 21:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,95 +18,95 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: src/rcgcdw.py:116 +#: src/rcgcdw.py:117 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "" -#: src/rcgcdw.py:135 +#: src/rcgcdw.py:136 msgid "Daily overview" msgstr "" -#: src/rcgcdw.py:142 +#: src/rcgcdw.py:143 msgid "No activity" msgstr "" -#: src/rcgcdw.py:166 +#: src/rcgcdw.py:167 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] "" msgstr[1] "" -#: src/rcgcdw.py:168 +#: src/rcgcdw.py:169 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] "" msgstr[1] "" -#: src/rcgcdw.py:173 +#: src/rcgcdw.py:174 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] "" msgstr[1] "" -#: src/rcgcdw.py:175 src/rcgcdw.py:178 +#: src/rcgcdw.py:176 src/rcgcdw.py:179 msgid "But nobody came" msgstr "" -#: src/rcgcdw.py:182 +#: src/rcgcdw.py:183 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "" msgstr[1] "" -#: src/rcgcdw.py:183 +#: src/rcgcdw.py:184 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "" msgstr[1] "" -#: src/rcgcdw.py:184 +#: src/rcgcdw.py:185 msgid "Edits made" msgstr "" -#: src/rcgcdw.py:184 +#: src/rcgcdw.py:185 msgid "New files" msgstr "" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:186 msgid "Admin actions" msgstr "" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:186 msgid "Bytes changed" msgstr "" -#: src/rcgcdw.py:186 +#: src/rcgcdw.py:187 msgid "New articles" msgstr "" -#: src/rcgcdw.py:186 +#: src/rcgcdw.py:187 msgid "Unique contributors" msgstr "" -#: src/rcgcdw.py:187 +#: src/rcgcdw.py:188 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "" msgstr[1] "" -#: src/rcgcdw.py:188 +#: src/rcgcdw.py:189 msgid "Day score" msgstr "" -#: src/rcgcdw.py:214 +#: src/rcgcdw.py:215 msgid "~~hidden~~" msgstr "" -#: src/rcgcdw.py:216 +#: src/rcgcdw.py:217 msgid "No description provided" msgstr "" -#: src/rcgcdw.py:219 +#: src/rcgcdw.py:220 msgid "hidden" msgstr "" diff --git a/locale/templates/redaction.pot b/locale/templates/redaction.pot index 79fabe7..8a86896 100644 --- a/locale/templates/redaction.pot +++ b/locale/templates/redaction.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 14:13+0200\n" +"POT-Creation-Date: 2021-05-21 21:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/uk/LC_MESSAGES/formatters.po b/locale/uk/LC_MESSAGES/formatters.po index bb6d21a..29c7e02 100644 --- a/locale/uk/LC_MESSAGES/formatters.po +++ b/locale/uk/LC_MESSAGES/formatters.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:59+0200\n" +"POT-Creation-Date: 2021-05-21 21:20+0200\n" "PO-Revision-Date: 2020-11-18 07:47+0000\n" "Last-Translator: MakandIv <>\n" "Language-Team: Ukrainian 14) ? 1 : 2);\n" "X-Generator: Poedit 2.4.1\n" -#: src/rcgcdw.py:116 +#: src/rcgcdw.py:117 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "{value} (сер. {avg})" -#: src/rcgcdw.py:135 +#: src/rcgcdw.py:136 msgid "Daily overview" msgstr "Щоденний огляд" -#: src/rcgcdw.py:142 +#: src/rcgcdw.py:143 msgid "No activity" msgstr "Немає активності" -#: src/rcgcdw.py:166 +#: src/rcgcdw.py:167 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} дія)" msgstr[1] " ({} дії)" msgstr[2] " ({} дій)" -#: src/rcgcdw.py:168 +#: src/rcgcdw.py:169 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} редагування)" msgstr[1] " ({} редагування)" msgstr[2] " ({} редагувань)" -#: src/rcgcdw.py:173 +#: src/rcgcdw.py:174 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} дія)" msgstr[1] " UTC ({} дії)" msgstr[2] " UTC ({} дій)" -#: src/rcgcdw.py:175 src/rcgcdw.py:178 +#: src/rcgcdw.py:176 src/rcgcdw.py:179 msgid "But nobody came" msgstr "Але ніхто не прийшов" -#: src/rcgcdw.py:182 +#: src/rcgcdw.py:183 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Найактивніший користувач" msgstr[1] "Найактивніші користувачі" msgstr[2] "Найактивніші користувачі" -#: src/rcgcdw.py:183 +#: src/rcgcdw.py:184 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "Найредаговішана стаття" msgstr[1] "Найредаговішані статті" msgstr[2] "Найредаговішані статті" -#: src/rcgcdw.py:184 +#: src/rcgcdw.py:185 msgid "Edits made" msgstr "Зроблено редагувань" -#: src/rcgcdw.py:184 +#: src/rcgcdw.py:185 msgid "New files" msgstr "Нових файлів" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:186 msgid "Admin actions" msgstr "Адміністративних дій" -#: src/rcgcdw.py:185 +#: src/rcgcdw.py:186 msgid "Bytes changed" msgstr "Змінено байтів" -#: src/rcgcdw.py:186 +#: src/rcgcdw.py:187 msgid "New articles" msgstr "Нових статей" -#: src/rcgcdw.py:186 +#: src/rcgcdw.py:187 msgid "Unique contributors" msgstr "Унікальних редакторів" -#: src/rcgcdw.py:187 +#: src/rcgcdw.py:188 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Найактивніша година" msgstr[1] "Найактивніший час" msgstr[2] "Найактивніший час" -#: src/rcgcdw.py:188 +#: src/rcgcdw.py:189 msgid "Day score" msgstr "Очок за день" -#: src/rcgcdw.py:214 +#: src/rcgcdw.py:215 msgid "~~hidden~~" msgstr "" -#: src/rcgcdw.py:216 +#: src/rcgcdw.py:217 msgid "No description provided" msgstr "" -#: src/rcgcdw.py:219 +#: src/rcgcdw.py:220 msgid "hidden" msgstr "" diff --git a/locale/zh-hans/LC_MESSAGES/formatters.po b/locale/zh-hans/LC_MESSAGES/formatters.po index 703614e..a60a7c8 100644 --- a/locale/zh-hans/LC_MESSAGES/formatters.po +++ b/locale/zh-hans/LC_MESSAGES/formatters.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-18 13:59+0200\n" +"POT-Creation-Date: 2021-05-21 21:20+0200\n" "PO-Revision-Date: 2021-05-21 18:19+0000\n" "Last-Translator: Dianliang233 \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: Chinese (Traditional) \n" "Language-Team: Chinese (Traditional) Date: Sat, 22 May 2021 13:48:01 +0200 Subject: [PATCH 120/173] Added additional argument to post-hooks containing main change body This was a suggestion by MarkusRost --- docs/API spec.md | 2 +- extensions/hooks/example_hook.py | 2 +- src/discussions.py | 2 +- src/rcgcdw.py | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/API spec.md b/docs/API spec.md index 308a732..4e331bb 100644 --- a/docs/API spec.md +++ b/docs/API spec.md @@ -148,4 +148,4 @@ RcGcDw implements i18n with gettext and already exposes Translations instance wi **Path**: `src.api.hook` There are two decorator functions available in the module: `pre_hook` and `post_hook`. They don't take arguments and simply register the function as a hook. Pre-hook functions take the following arguments: `context` ([Context object](#Context)) and `change` (dict object with change). -Post-hook functions take the following arguments: `message` ([Discord message object](#DiscordMessage)), `metadata` ([Discord message metadata](#DiscordMessageMetadata)) and `context` ([Context object](#Context)) \ No newline at end of file +Post-hook functions take the following arguments: `message` ([Discord message object](#DiscordMessage)), `metadata` ([Discord message metadata](#DiscordMessageMetadata)), `context` ([Context object](#Context)) and `change` (dictionary of main change body) \ No newline at end of file diff --git a/extensions/hooks/example_hook.py b/extensions/hooks/example_hook.py index 425cccc..ec7f889 100644 --- a/extensions/hooks/example_hook.py +++ b/extensions/hooks/example_hook.py @@ -23,6 +23,6 @@ def example_pre_hook(context, change): @post_hook -def example_post_hook(message, metadata, context): +def example_post_hook(message, metadata, context, change): print("Our Discord message looks as follows: ") print(message) diff --git a/src/discussions.py b/src/discussions.py index 0a3b589..ed63331 100644 --- a/src/discussions.py +++ b/src/discussions.py @@ -124,7 +124,7 @@ def parse_discussion_post(post, comment_pages): run_hooks(pre_hooks, context, post) discord_message = default_message(event_type, formatter_hooks)(context, post) metadata = DiscordMessageMetadata("POST") - run_hooks(post_hooks, discord_message, metadata, context) + run_hooks(post_hooks, discord_message, metadata, context, post) send_to_discord(discord_message, metadata) diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 3280850..c9cfdbc 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -256,7 +256,7 @@ def rc_processor(change, changed_categories): else: for revid in logparams.get("ids", []): delete_messages(dict(revid=revid)) - run_hooks(post_hooks, discord_message, metadata, context) + run_hooks(post_hooks, discord_message, metadata, context, change) send_to_discord(discord_message, metadata) @@ -269,7 +269,7 @@ def abuselog_processing(entry): context.event = action discord_message: Optional[DiscordMessage] = default_message(action, formatter_hooks)(context, entry) metadata = DiscordMessageMetadata("POST") - run_hooks(post_hooks, discord_message, metadata, context) + run_hooks(post_hooks, discord_message, metadata, context, entry) send_to_discord(discord_message, metadata) From 27bc6bf3d73f6bbbda3f74db8570f560bb2b0024 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 22 May 2021 14:08:28 +0200 Subject: [PATCH 121/173] Translated using Weblate (Russian) Currently translated at 100.0% (288 of 288 strings) Translated using Weblate (Polish) Currently translated at 74.3% (214 of 288 strings) Translated using Weblate (German) Currently translated at 100.0% (288 of 288 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (1 of 1 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (16 of 16 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (20 of 20 strings) Translated using Weblate (Russian) Currently translated at 100.0% (20 of 20 strings) Translated using Weblate (Polish) Currently translated at 100.0% (20 of 20 strings) Translated using Weblate (Russian) Currently translated at 100.0% (288 of 288 strings) Translated using Weblate (Russian) Currently translated at 100.0% (288 of 288 strings) Co-authored-by: Frisk The Evil Goat Overlord Co-authored-by: MakandIv Co-authored-by: Philo04 Co-authored-by: Weblate Co-authored-by: magiczocker Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/de/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/pl/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/ru/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/main/pl/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/main/ru/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/main/uk/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/misc/uk/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/redaction/uk/ Translation: RcGcDw/formatters Translation: RcGcDw/misc Translation: RcGcDw/rcgcdw Translation: RcGcDw/redaction --- locale/de/LC_MESSAGES/formatters.mo | Bin 34983 -> 39400 bytes locale/de/LC_MESSAGES/formatters.po | 71 +++++++++++++------------- locale/pl/LC_MESSAGES/formatters.mo | Bin 0 -> 27790 bytes locale/pl/LC_MESSAGES/formatters.po | 65 ++++++++---------------- locale/pl/LC_MESSAGES/rcgcdw.mo | Bin 2889 -> 1986 bytes locale/pl/LC_MESSAGES/rcgcdw.po | 16 +++--- locale/ru/LC_MESSAGES/formatters.mo | Bin 42046 -> 47881 bytes locale/ru/LC_MESSAGES/formatters.po | 76 ++++++++++++++-------------- locale/ru/LC_MESSAGES/rcgcdw.mo | Bin 2278 -> 2367 bytes locale/ru/LC_MESSAGES/rcgcdw.po | 4 +- locale/uk/LC_MESSAGES/misc.mo | Bin 1325 -> 1516 bytes locale/uk/LC_MESSAGES/misc.po | 16 +++--- locale/uk/LC_MESSAGES/rcgcdw.mo | Bin 3331 -> 2312 bytes locale/uk/LC_MESSAGES/rcgcdw.po | 19 +++---- locale/uk/LC_MESSAGES/redaction.mo | Bin 427 -> 581 bytes locale/uk/LC_MESSAGES/redaction.po | 15 +++--- 16 files changed, 130 insertions(+), 152 deletions(-) create mode 100644 locale/pl/LC_MESSAGES/formatters.mo diff --git a/locale/de/LC_MESSAGES/formatters.mo b/locale/de/LC_MESSAGES/formatters.mo index 1ba01596e616aefb72577e8050efb3fdf0369800..b51a2f138736d37564dea3cf08156463572a2e92 100644 GIT binary patch delta 9482 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 Uui>tqGRYgc?r;dh)n%Li0TiDpYXATM diff --git a/locale/de/LC_MESSAGES/formatters.po b/locale/de/LC_MESSAGES/formatters.po index 83b8c61..26f00c2 100644 --- a/locale/de/LC_MESSAGES/formatters.po +++ b/locale/de/LC_MESSAGES/formatters.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-21 21:20+0200\n" -"PO-Revision-Date: 2021-05-21 18:19+0000\n" +"PO-Revision-Date: 2021-05-22 12:08+0000\n" "Last-Translator: magiczocker \n" "Language-Team: German \n" @@ -43,7 +43,6 @@ msgid "Unregistered user" msgstr "Nicht angemeldeter Benutzer" #: src/api/util.py:160 -#, fuzzy msgctxt "recent changes Tags" msgid "Tags" msgstr "Markierungen" @@ -422,16 +421,14 @@ msgid "Created a quiz \"{title}\"" msgstr "Erstellte ein Quiz „{title}“" #: extensions/base/discussions.py:193 extensions/base/discussions.py:195 -#, fuzzy msgctxt "Fandom discussions Tags/Forums" msgid "Tags" msgstr "Markierungen" #: extensions/base/discussions.py:193 -#, fuzzy msgctxt "Fandom discussions amount of Tags/Forums" msgid "{} tags" -msgstr "{} Tags" +msgstr "{} Markierungen" #: extensions/base/discussions.py:198 #, python-brace-format @@ -697,13 +694,13 @@ msgid "{field} field changed to: {desc}" msgstr "{field} geändert zu: {desc}" #: extensions/base/curseprofile.py:58 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " "profile." msgstr "" -"[{author}]({author_url}) bearbeitete den {field} auf dem Profil von " -"[{target}]({target_url}). *({desc})*" +"[{author}]({author_url}) leerte das {field} auf dem Profil von " +"[{target}]({target_url})." #: extensions/base/curseprofile.py:60 #, python-brace-format @@ -715,13 +712,13 @@ msgstr "" "[{target}]({target_url}). *({desc})*" #: extensions/base/curseprofile.py:65 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " "profile." msgstr "" -"[{author}]({author_url}) bearbeitete den {field} auf dem [eigenen Profil]" -"({target_url}). *({desc})*" +"[{author}]({author_url}) leerte das {field} auf dem [eigenen " +"Profil]({target_url})." #: extensions/base/curseprofile.py:67 #, python-brace-format @@ -742,20 +739,20 @@ msgid "Left a comment on their own profile" msgstr "Hinterließ ein Kommentar auf dem eigenen Profil" #: extensions/base/curseprofile.py:97 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." msgstr "" "[{author}]({author_url}) hinterließ einen [Kommentar]({comment}) auf dem " -"Profil von {target}" +"Profil von {target}." #: extensions/base/curseprofile.py:100 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on their own profile." msgstr "" "[{author}]({author_url}) hinterließ einen [Kommentar]({comment}) auf dem " -"eigenen Profil" +"eigenen Profil." #: extensions/base/curseprofile.py:113 #, python-brace-format @@ -767,20 +764,20 @@ msgid "Edited a comment on their own profile" msgstr "Bearbeitete ein Kommentar auf dem eigenen Profil" #: extensions/base/curseprofile.py:128 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." msgstr "" "[{author}]({author_url}) bearbeitete einen [Kommentar]({comment}) auf dem " -"Profil von {target}" +"Profil von {target}." #: extensions/base/curseprofile.py:131 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on their own profile." msgstr "" "[{author}]({author_url}) bearbeitete einen [Kommentar]({comment}) auf dem " -"eigenen Profil" +"eigenen Profil." #: extensions/base/curseprofile.py:144 #, python-brace-format @@ -792,22 +789,22 @@ msgid "Replied to a comment on their own profile" msgstr "Antwortete auf ein Kommentar auf dem eigenen Profil" #: extensions/base/curseprofile.py:159 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " "profile." msgstr "" "[{author}]({author_url}) antwortete auf einen [Kommentar]({comment}) auf dem " -"Profil von {target}" +"Profil von {target}." #: extensions/base/curseprofile.py:162 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on their own " "profile." msgstr "" "[{author}]({author_url}) antwortete auf einen [Kommentar]({comment}) auf dem " -"eigenen Profil" +"eigenen Profil." #: extensions/base/curseprofile.py:175 #, python-brace-format @@ -819,22 +816,22 @@ msgid "Deleted a comment on their own profile" msgstr "Löschte ein Kommentar auf dem eigenen Profil" #: extensions/base/curseprofile.py:197 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " "profile.{reason}" msgstr "" "[{author}]({author_url}) löschte einen [Kommentar]({comment}) auf dem Profil " -"von {target}" +"von {target}.{reason}" #: extensions/base/curseprofile.py:200 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." "{reason}" msgstr "" "[{author}]({author_url}) löschte einen [Kommentar]({comment}) auf dem " -"eigenen Profil" +"eigenen Profil.{reason}" #: extensions/base/curseprofile.py:214 #, python-brace-format @@ -846,22 +843,22 @@ msgid "Purged a comment on their own profile" msgstr "Löschte ein Kommentar auf dem eigenen Profil dauerhaft" #: extensions/base/curseprofile.py:230 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." "{reason}" msgstr "" -"[{author}]({author_url}) löschte einen Kommentar auf dem Profil von {target} " -"dauerhaft" +"[{author}]({author_url}) löschte einen Kommentar auf dem Profil von " +"[{target}]({link}) dauerhaft.{reason}" #: extensions/base/curseprofile.py:233 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) purged a comment on [their own]({link}) profile." "{reason}" msgstr "" -"[{author}]({author_url}) löschte einen Kommentar auf dem eigenen Profil " -"dauerhaft" +"[{author}]({author_url}) löschte einen Kommentar auf dem [eigenen]({link}) " +"Profil dauerhaft.{reason}" #: extensions/base/renameuser.py:38 #, python-brace-format @@ -1568,17 +1565,17 @@ msgstr "" "({target_url}) {added}{comma} {removed}{comment}" #: extensions/base/mediawiki.py:864 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "System autopromoted [{target}]({target_url}) {added}{comma} {removed}" "{comment}" msgstr "" -"{author} änderte die Benutzergruppen für [{target}]({target_url}) " -"automatisch {added}{comma} {removed}{comment}" +"System änderte die Benutzergruppen für [{target}]({target_url}) automatisch " +"{added}{comma} {removed}{comment}" #: extensions/base/mediawiki.py:866 msgid "," -msgstr "" +msgstr "," #: extensions/base/mediawiki.py:877 #, python-brace-format diff --git a/locale/pl/LC_MESSAGES/formatters.mo b/locale/pl/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..efe9fc3ae4d6be52700dbd039046c5184522cbaf GIT binary patch literal 27790 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, YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-21 21:20+0200\n" -"PO-Revision-Date: 2021-04-14 14:22+0000\n" +"PO-Revision-Date: 2021-05-22 12:08+0000\n" "Last-Translator: Frisk The Evil Goat Overlord \n" "Language-Team: Polish \n" +"formatters/pl/>\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.2.1\n" -"Generated-By: pygettext.py 1.5\n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.4.2\n" +"X-Generator: Weblate 4.6\n" "Generated-By: pygettext.py 1.5\n" #: src/api/util.py:61 src/api/util.py:66 @@ -64,14 +52,9 @@ msgid "Unregistered user" msgstr "Niezarejestrowany użytkownik" #: src/api/util.py:160 -#, fuzzy msgctxt "recent changes Tags" msgid "Tags" -msgstr "" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" -"Fora\n" -"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -"Znaczniki" +msgstr "Tagi" #: src/api/util.py:162 msgid "**Added**: " @@ -136,7 +119,7 @@ msgstr "[{author}]({author_url}) usunął tabelę Cargo „{table}”" #: extensions/base/translate.py:41 #, python-brace-format msgid "Marked \"{article}\" for translation" -msgstr "" +msgstr "Oznaczono „{article}” do tłumaczenia" #: extensions/base/translate.py:55 #, python-brace-format @@ -150,7 +133,7 @@ msgstr "" #: extensions/base/translate.py:70 #, python-brace-format msgid "Removed \"{article}\" from the translation system" -msgstr "" +msgstr "Usunięto „{article}” z systemu tłumaczeń" #: extensions/base/translate.py:80 #, python-brace-format @@ -164,7 +147,7 @@ msgstr "" #: extensions/base/translate.py:95 #, python-brace-format msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" +msgstr "Zakończono przenoszenie stron tłumaczeń z „{article}” do „{target}”" #: extensions/base/translate.py:106 #, python-brace-format @@ -178,7 +161,7 @@ msgstr "" #: extensions/base/translate.py:121 #, python-brace-format msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "" +msgstr "Napotkano problem podczas przenoszenia „{article}” do „{target}”" #: extensions/base/translate.py:133 #, python-brace-format @@ -195,15 +178,17 @@ msgid "" "Failed to delete \"{article}\" which belongs to translatable page " "\"{target}\"" msgstr "" +"Usuwanie „{article}” należącego do tłumaczonej strony „{target}” nie " +"powiodło się" #: extensions/base/translate.py:161 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) failed to delete [{article}]({article_url}) which " "belongs to translatable page [{target}]({target_url}){comment}" msgstr "" -"[{author}]({author_url}) zaimportował(a) [{article}]({article_url}) z jedną " -"wersją{comment}" +"Usuwanie [{article}]({article_url}) należącego do [{target}]({target_url}) " +"przez [{author}]({author_url}) nie powiodło się{comment}" #: extensions/base/translate.py:177 #, fuzzy, python-brace-format @@ -434,20 +419,14 @@ msgid "Created a quiz \"{title}\"" msgstr "Stworzył(a) quiz „{title}”" #: extensions/base/discussions.py:193 extensions/base/discussions.py:195 -#, fuzzy msgctxt "Fandom discussions Tags/Forums" msgid "Tags" -msgstr "" -"#-#-#-#-# discussion_formatters.po #-#-#-#-#\n" -"Fora\n" -"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -"Znaczniki" +msgstr "Artykuły" #: extensions/base/discussions.py:193 -#, fuzzy msgctxt "Fandom discussions amount of Tags/Forums" msgid "{} tags" -msgstr "{} tagów" +msgstr "{} artykułów" #: extensions/base/discussions.py:198 #, python-brace-format @@ -589,16 +568,14 @@ msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) usunął/usunęła wiki *{wiki_name}*{comment}" #: extensions/base/managewiki.py:80 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted a \"{group}\" user group" -msgstr "Modyfikowano grupę użytkowników „{usergroup_name}”" +msgstr "Usunięto grupę użytkowników „{group}”" #: extensions/base/managewiki.py:89 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" -msgstr "" -"[{author}]({author_url}) zaimportował(a) grupę użytkownika *{group_name}" -"*{comment}" +msgstr "[{author}]({author_url}) usunął grupę użytkowników *{group}*{comment}" #: extensions/base/managewiki.py:103 #, python-brace-format @@ -611,9 +588,9 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) zablokował(a) wiki *{wiki_name}*{comment}" #: extensions/base/managewiki.py:124 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Modified \"{namespace_name}\" namespace" -msgstr "Modyfikowano przestrzeń nazw „{namespace_name}”" +msgstr "Zmodyfikowano przestrzeń nazw „{namespace_name}”" #: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 msgid "Wiki" diff --git a/locale/pl/LC_MESSAGES/rcgcdw.mo b/locale/pl/LC_MESSAGES/rcgcdw.mo index e5e0fba2ef89f35d72a12faaa5f941d49d66bae5..11ab174cbc5cb69e804d8fe0141e83d932ae2e0e 100644 GIT binary patch delta 791 zcmXxh&rcIU6bJBWfdVaxP({*cGGJm#$QCbfs3h2At2B07Qb40#*zQj3(7IFhM@eni zp7bARj5m)ao;i5%Kw`L&tvK7Mx@e^j?FSr2z!ey9_Gj<7Xz*(q|>OFWFbsbK_BbbCexC~#9`~b6z_1Rb4 z%;3QvNPmcrF_wZe@H$+CX?O=FpboFXhmaONfM?iL6W&6-I>Fd&ScPk_0~g_YNb8+J zTJJlYLx1)gH?+`2^aEp4=(3AC15M~a8-9cHaD8%k!fkj3^R zr1d{S>@%7chz`LHa6_jbN7C3RFo>uTO@ns&KWN+(^r4C7VhV`?M2%>A=oQ7> zsWEmp)~_gT3(s<8+n37WZC7=qEo`>$$fH1TOF6zP>w&Lak2R!i3y1YOW-AaUJZpBI z=Xej-lNA<*!>3`$c3gEREMF_x+9Tn5ST@ghR7-jdo~>CAEd6*TSrcvL`kFELG_kbx zq*$nFMpe@be7l-AN~=$+m144NdcL;jnvT~p(LT@b@0ZKGQZR~qvuG4b<$DEPuN8N9 z2h)kAv_E=LL2b+nD*v9Fz$*uT$MGD?lw&^IY+R_X7%NNpg=#)*f<#eqE c7k1YV4$og%C|J;RyS^B#r822792Pj(Kk9&rdjJ3c literal 2889 zcmb7_U2IfE6vsydmGuh|MO1VYX-dr9k6IG4w3wCx!O&Vu5j8Pn_TFJTy?5_j@67Eo zOL9}h%W5bZg!23W6l70%_3oe5XgYSW~{}ad0K$u|Ho%|*E5ah4Gd%*8N zI{!x}-vr6-AK+c!KOouLvW2l7;5Lx-_k!fdC`fiD-26)*{@Cm2Xx|x-;$C#}IgspJ z1Xqx|kH9^U-@LoX>Dyoh@-^@=@CR@w_!~&^ZN*{a|89`%SDai2PeMKc3h*izfSVA^ zcCZPO-(7GU_&!K>KL&S$*B!qBDPO;WWdC_E za4#5xr2hd(@8udu_rD5~-uEEo=NFL9`3t0TcHmMezk5K+Lls22@;QnJ*OJFUxupGc z))V-Urge?ZrgP|xJndFENHJ30sgXaA;Cl)myb0iEjgw<~p4>ig=E>ffX$XQ-Lr`e3`^b`u=tcoN?N#TPsmYs^# zTbbm35}Q;tGLyi*0NTQ&Nt6#$nFrKJ3~OYm6q%n2!+aT=EVYgbW&>gA!$A5JYypTW zl|Bsj2bz(in8;H=on|c+MKX?6*6I%hMsa4O19afzLeXnhc!m6E3FiX`&9v1?n{}iN z^G>sl3e}lrCelEOm{}>(ywmLbl87>Sfe(wNW|^Nye_m3igSCMPHraGVV zkNH!b(wuB3sqvtNFaEa#e?Bvhp-UCy{7c$rD)apY!WHGz{eJhY3q8W(vb~pkma+f(qUP* zg)b}Z!b@FA{iYvuDlMVnN;|5o8LRVlRGL0MePk_+TDe*}j1=PHym{M(qeh-H*oMsq z=^3Y5n(uTp`m;@Ha<$jVVbUv)vA1XIiDw;>OSnLVb93H(rex^8B07h z%GK#234F9XQm&QUg2Xjg1ZtboP$=cL<+bwulKc6G{-WrW0*vLrSoJG`T~m?)gq~I| zkXpYcICFzCDG$ofpMaX;g6f9SCih;4%3oj;k>s%oQ9+dC?X+ukR|c!^us2#t#&|o{ zU*HX~Xukfu!)B8}XRV|oNH>U;V5cqi_J&~+i(J2OlFf+42A+3U$we+gV>_|n%>;5R zHdvEx&Hm3d%d^!R)`Uq1u57SZ4Xpbc8NXe@@2*^4z2cMK2*psqmI{^)Gh_x~ZJ;3g z3i%oTrIB\n" -"Language-Team: Polish \n" +"PO-Revision-Date: 2021-05-22 12:08+0000\n" +"Last-Translator: Frisk The Evil Goat Overlord \n" +"Language-Team: Polish " +"\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6\n" "Generated-By: pygettext.py 1.5\n" #: src/rcgcdw.py:117 @@ -109,15 +109,15 @@ msgstr "Wynik dnia" #: src/rcgcdw.py:215 msgid "~~hidden~~" -msgstr "" +msgstr "~~ukryte~~" #: src/rcgcdw.py:217 msgid "No description provided" -msgstr "" +msgstr "Nie podano opisu zmian" #: src/rcgcdw.py:220 msgid "hidden" -msgstr "" +msgstr "ukryte" #~ msgid "director" #~ msgstr "Dyrektor" diff --git a/locale/ru/LC_MESSAGES/formatters.mo b/locale/ru/LC_MESSAGES/formatters.mo index 7b532e4b1ce238ff836a1aff99f562db71319f7d..ddb98e6de360b851e2c16a10dc6f0fedd823aec7 100644 GIT binary patch delta 10035 zcmb{030zfW-oWt(L{tP71Y{Aoh`WfH*eD7?DsF_PmYE_T_o5_l5pY4o>%OI>p3K}e zTi&s$$Sad8PU)DMGhKAv8b?#xe5cY%CvBRx`Tfs17zp-J-%kAR_j%6p?9aK^Dv!D^ zz3%Qf=jX9TaYVW))f(G2QEDOSXg@itRAP`)-k5~^sZ=vR5q-%QoB2iPLteucxDA`) zPHc#k*bxt7OT3I! z%)mHYfl}^Klm?te>5zM-aA_e^f`OQT_u|8tgiBDS z;5bS{&Z3M+qXMf-g*e7f9?U>lts1gj)K-+9>_B<$uzCHMdHp@p3)qP3pQCi(s(HRKTR@)o z!>;IvCh|8rm7YLcEBpsb7s@rHPmD0nF{LR29C4_u*U?!U)`r@`h{L zgO?1Zqf~eZCty$BO2hG4d;vd0x$mi-ypHi-DD|wN(CZk$ygQ_&-o1<#Tk%2i`!No^ zdMlNT18^!XN2$P_i$icE%G%kC_v3r`Fb4Kf>JiLE8G%D6*TdL*37Cct;l{qSM;h=Y zCwNvRvjzT*b5Sau$=!1OP0Yk#N=d;|l!hKP^MQ#*1G7-37(2aG!bpAU2luc-%;+Q`m$X&Y~w?M0uBA z##ZP}_X4pkN(FsT3QopmI0%DqG*YlCz=l|Y^5Sx!4=%>$xCZs_{})I|fd|oo$FVJb zfzjB4agM}z?1kz0J~cm!0ptrr3UKKUScO$Z@<6PvD!_V2tqs`ZK1Gzwa@= zL2*9HTTp#Lf`zYw#u_~xhh50eMnBwv42C*@vNn8KfwG#nAnR6rf)NUd4s@G0I5f(49rN z23e1)b+%EU9W%(U!ftpKqp%I*D?Lv}S;R~50elH%BtJJza7;2PSdAH6s5J8tIYtFT zQPxBrw!md56>LCutU8F^*!*#`VVFhUj?|$}A%ms*Og3Izn^2zn45g!v-i-4=68ShC z|A=x!OdgftY%IVgjH?&UL?2v;9Z|#Ya6fi(<9WNWHZJgxd>6Ev!j8dG?2KoSWuZI^ z^*5kHSxNNc#5vP8MO02c8>Q!KkoBo{;$ZYC<{uq6nva%v0>khE_Q9Xf6XSR-%Jxjc z2po;RI34|PDaOk8;YJcNv{fjJ3LA@puaR zqVEjjd@7D0pN7)Fa+F#j0QBAYxMjre2VkK=P~|UNL-kw)YCYJ@s=SE zSYW)l)?qpMvFyc6^j@UYS~nIe4khoogsq1o@Cp0`S=g#zDX(EXi;S`=WhL|SQ{SKq zQ@NR0QW48(;cFz;E~j!F$i#$E!BMo5zxX6yu{f0G%Jp5?AA7De-WN0RAo*h`+ifYW z8HZOe5mQ$iyWlCLZR%5`uPR?-=<$k!L8oW!=9yKqcN3y z(z8Z`R-zQ_yNqd)?pp^@Qb{ebq6&y$2)5*MJ7Jh(1 zWODI34wLg0#(TkugUB~x7&CAZ1INi`=STB%OZG`geQ*07B~Teu*l3W zM?dnLur-!rIQ|7KcnPD>XSeagqC2{iPr8I#j_0wj4tts{BU!Rg?L#S*bgnJoL{mmGNC4?M*H_$)tocm_u|U77$6qi$ouyfS5|iaf)cJr;P30 zf%H{k0^vn{dW#;y$B3=O3PO&JgzSQsh+RYov7h*gkTvo!Aw$n*(GO-!|1Q{O=7q*m z0SC)N-#OpmWjVponAk)(X7Z6twB+VxDDz)^>@^c7uqp8^QAS)Rs*iajzOK%gTCo+u z)>pHMM+sR^ax^l~w=Nsbp&D?)LYy%#2<)^Q$2w9+iF3q%2wy^u%?2tFKPLV_v?Wdx zj}vnE)2VR6mw1-^XZl&=2al0t{y#BK&c$FeEvzCuiF=4Ih<_2egdD96^jGn7q^pQv zD(PaLf7^5vK1r-3T5(;DG~yBwON^Ek>Bj}xUUHl_(7&xD$rqS@6qz>Q-bYBUH}n5Q zUTpfYoX==tzLC}cmu_#;O?jrFS-D(lPmCn~K{x`q;6XwT-nja^z8@CK363j74?Si4 zn2_Z6X8stunFZU;bJe($2<2L7^$DCz{6Negyop6J|7S^zC*;kM4kw8i;s6m!Y#`+L zUqaqua(r%}zfLEa>9y{sAM$y9W9jGl%;18qCX)=0I`s$Bs4;f3gR6}c%|fI+475Q zahB3DWpSwPoLrmgZ_Bk6^KfR(+e(Ww3n$u& z%Q_U*x=%}wuxR7MKN?i?-nvB&u;$!OiQJ~8wT{%rMPzAPBARr(sbOX*b(^9ci1=<) za%R5Oo@cS<6lF~%7 zOs3Pn!$Qwq^{g^h)YuzMN$Y6Vls>gEx2#k3%8Ah;V?zV#eOQ~_C%EY^YfQgW`>|^i z=W|`(Xw-SExo#=fOi^fkYdA*BEoq|->*>|yR*%#j0{t21u%3Tv(8Y4Ar*8DDW>-RD zWkmEzz14H|)fO2W;%wA=w43%$Z?9g}oAkDZ&(gVLsnu4LRo1C9BN?I{@7>hvmjYx6 z18WT7O?Nxf;@)j=kFj2F)!cfz>6;MR{nsC=r;kqGghxE?DX3@3*IFaFIr)=ot`6p| zd%X`;SHb)n&(!Fq%(!#n1MM30tg+_rpo0u#uR_~xJX_s}nsv)uE*s$E5x^U|*pf9V zGk>DZc>TzGN7DwU^{@FBHt&#)$=h6?N>y5D%Pg|zmwAQVxRhs~ z#yRcF!AqTvA@_Q?MLWw=tsae@ckOePyPVpYNx@G4k;gnNi(R{`=2p#f?RM?6xDL81 zxn5y;>t%CwytU7HdURRC+`U}b&wmxJ1Ke9)HHZ86SX>8O<(8_suAQ#Rs#UK2JkN#7 zss&P*t3tW9yLM68KBMekDWdjsn(uo5rqyFcAzJi;Fz3Xyvu-_Izf#66o1uM`9^U!a zo~&DYIy@9`2^aXGHkZRq1$*j#e#~8k*g7iay*Z#rZ_W5w}(wT@?)7 zUe|8LSA`5Exk}ew=dcOG-5vTAlrxa}G~7)$m22~D7gDpW%y!j$&40b`FU{R(Eo$i4 z#LVqvP%B(cnMH28&B?swL@3uCl-aKKBD<-@)$`-@c|6P`_HKqt^Uog`znLl6sZWGH z?6R8gY@yUxrmMBf8`^6>XZdJP<-hFqlGe3&RI=;!swY_fl@@(0WxDs%E%sW~Vrrc$ zi^0N-zhP`F*<9Sqd1FUbaGJ#yr_Cvj(t6vYoD=OGytMeG;g8j`O^v-cw#ML-tfT?5 zx9KBAQ@CsY&0ny!2R25l+7PNGEDh^$%PML=AbVAtR2<|Mqg`3p!MUMiY7;GGR&Y}3 zFWwQPn7^mtZ`1~3Fk0VvJIn{2$Cmue zYh!7+?Uuv&|DLg$U)FaydEPNK3%Rl|)Ol>#7*Fl~S?zy=dDPo9tHYhmBM)tlT;=It zN8a5_=(dK{{1s7qMa5Kqt*Wu5+VqlE<7EBbT_b82Y#Cd<|^lPE+>r964j()N@-+a#Q_Fsui BhK~RM delta 5872 zcmYk<30PG{AII@w7Zno$MI~9>Kylwe6Hp9SOfbWRKtOPzP(&lZLk1{rsmEO)sqF1F zlk8~X66KrPqWNOBNt&6JWm>kplok1Y|96hh<2?TEXXe~{=ggTibGVi_I@i7HY<$ti zb+eMEj`_aHKti(3>4oW`_ z*bP+&rTRd3?2OZJ1QuWr9>#3WuNtVxiQ+mc#l@&(?2maEjW3~0^>vg1{EduFb?1JG zQP>5OP-biy$^h3PV^Mo?D4xP#yo19rm=75;(qt;kmMTS=>PqAs>MiVq7g0X<7s}^C zI4D;XfsO&A%tRi_37$py+;Nn9eF0fk>L$vCHlp;`GLZRqr7|E;cQ_Pf05g%#C9qJ$SzoWx%@)`;DV0 z9h}5oco~PF7dN&I#v+H*BPbmdqAacwlv{NGWkB^P7jy}^Nae{@jmDlRwjYGYBJX1ZuI0n$meRX z8h!do$4VWrS~7KR%+CUxhHLQz%3_=Hp#8T2~{crduv76j?Kd>O&=f19MSEREGYz3wz;VlqtW4;n;nW zQp~LzWo?Z#kP0?`KtOHgRx(dp6UeTE2;>kpO2AA zQEIyWArp_KG)vHsD{nr7X~)6H#i=(?I&96JO2Pif!%dkeSN1l_6<~h31EJi=d@RFJsOD%#V{e)( zQAU0UnKkthvQbnYR@P$7N7)5G;{E8Hr5`jw=uUek`e7OdVm^A~c7uv6x|eYv)}c(z zuNaK3bM<2BhELO;g|dpTU_Wd%Pj9m*96>uChvQoN`1>fg^a9G0FMPgU)L9ru+i0W` z&eV)tptswCY<&egklU+jQC7bnD{l}^$8NYDd*UG+gIBQ?_IO+md>A&TJp<(y&q2A+ zRVV|j#8BD)4ODzN;KGfQEAz)_jKz+)0{h_e*bdKQ82*6G&~KsMR-JGk?WI_U-4^L9 z{RW?*otw)KQ*_~eZNlgAY1#in^Ynw`7{1CI%a-Ux*M}9hm6_Rq<2fG20%5XL9#-KM zd;*J~)PIg|V?FJJ0=+o96tabBS70$tC}L*m?*nB0sUMc{P~!Y*GB5Ih!zfc7L1Pjc z_$Ho3d4jEbO5c)3jG~>eT<`x)DE(Z=6r9IGiN({%T~Xd8dUq6~^xuNb|2+eljE0;j zVuc<+Ij*GLoR{@z;xX(}&PeeJrsKF({M5!8EXFyj*}8ZQ<%;*O(NDru9-rqp(LOB0 zV(x?V>#;%q)!ep$aj)aRbq+9CmA{eSf!Kt6M;WHRaxZS!%e3?GCu1|GXjuZexga!}cPX%7SXay#=Tt9SKIePtgaPg6CdLQnO2JV5&< zUc%=p_3wjX7C^ilM;`xb#It%kZNL=T4R}9B?$Wm^2}5Y_z%KX(I^$Oc6?s5>gRSuf z`eT#bZd&|hWpE8IUfA~q{lkN*qa5Ki#I6hJq`lpi8I?XCCpqKlJAI=cZe*gd{RcF{6rixg-?@L$Xp`jC9?m?VDitYAt+o1*( z5ArwZZy(IS)kGdJOUMr5M&2TK%a2s{lhI@j8B8`3U-BerMNIMW>O$^WE5`GhPc za(>67wpJ>X6~v3glJChSBIQ#eA6`oSOQw@4pOpJ9_ez)`m*auXX}^HVa}cfsf!lRO{!*NprR0XT9fY4WFIwW=+Vt>15rSH_pka z+6=CmY58VnI$4_@o8)X2EzEJV%%vS&%|8nInI(mn&5&gwo)z^6&n>S%QeSJuEDLLH z?%M2SZ7I+5wAyVt>}KAY7jF6QJnv)$R!w)e@^{~Hv)1lC?P?YsY-{c)^xn9kgLx~a evvumV8aK1J_Jmb&INPZegR4L0=(Vo?i26T6nnJe# diff --git a/locale/ru/LC_MESSAGES/formatters.po b/locale/ru/LC_MESSAGES/formatters.po index fdaebd6..92cb801 100644 --- a/locale/ru/LC_MESSAGES/formatters.po +++ b/locale/ru/LC_MESSAGES/formatters.po @@ -21,8 +21,8 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-21 21:20+0200\n" -"PO-Revision-Date: 2021-05-21 18:19+0000\n" -"Last-Translator: Philo04 \n" +"PO-Revision-Date: 2021-05-22 12:08+0000\n" +"Last-Translator: MakandIv \n" "Language-Team: Russian \n" "Language: ru\n" @@ -52,7 +52,6 @@ msgid "Unregistered user" msgstr "Незарегистрированный пользователь" #: src/api/util.py:160 -#, fuzzy msgctxt "recent changes Tags" msgid "Tags" msgstr "Метки" @@ -434,13 +433,11 @@ msgid "Created a quiz \"{title}\"" msgstr "Создал викторину \"{title}\"" #: extensions/base/discussions.py:193 extensions/base/discussions.py:195 -#, fuzzy msgctxt "Fandom discussions Tags/Forums" msgid "Tags" msgstr "Метки" #: extensions/base/discussions.py:193 -#, fuzzy msgctxt "Fandom discussions amount of Tags/Forums" msgid "{} tags" msgstr "{} меток" @@ -708,13 +705,13 @@ msgid "{field} field changed to: {desc}" msgstr "Поле «{field}» изменено на: {desc}" #: extensions/base/curseprofile.py:58 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " "profile." msgstr "" "[{author}]({author_url}) отредактировал поле «{field}» на профиле участника " -"[{target}]({target_url}). *({desc})*" +"[{target}]({target_url})." #: extensions/base/curseprofile.py:60 #, python-brace-format @@ -726,13 +723,13 @@ msgstr "" "[{target}]({target_url}). *({desc})*" #: extensions/base/curseprofile.py:65 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " "profile." msgstr "" -"[{author}]({author_url}) отредактировал поле «{field}» на [своём собственном]" -"({target_url}) профиле. *({desc})*" +"[{author}]({author_url}) отредактировал поле «{field}» на [своём " +"собственном]({target_url}) профиле." #: extensions/base/curseprofile.py:67 #, python-brace-format @@ -753,20 +750,20 @@ msgid "Left a comment on their own profile" msgstr "Оставил комментарий на своём профиле" #: extensions/base/curseprofile.py:97 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." msgstr "" "[{author}]({author_url}) оставил [комментарий]({comment}) на профиле " -"участника {target}" +"участника {target}." #: extensions/base/curseprofile.py:100 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on their own profile." msgstr "" "[{author}]({author_url}) оставил [комментарий]({comment}) на своём " -"собственном профиле" +"собственном профиле." #: extensions/base/curseprofile.py:113 #, python-brace-format @@ -778,20 +775,20 @@ msgid "Edited a comment on their own profile" msgstr "Отредактировал комментарий на своём профиле" #: extensions/base/curseprofile.py:128 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." msgstr "" "[{author}]({author_url}) отредактировал [комментарий]({comment}) на профиле " -"участника {target}" +"участника {target}." #: extensions/base/curseprofile.py:131 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on their own profile." msgstr "" "[{author}]({author_url}) отредактировал [комментарий]({comment}) на своём " -"собственном профиле" +"собственном профиле." #: extensions/base/curseprofile.py:144 #, python-brace-format @@ -803,22 +800,22 @@ msgid "Replied to a comment on their own profile" msgstr "Ответил на комментарий на своём профиле" #: extensions/base/curseprofile.py:159 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " "profile." msgstr "" "[{author}]({author_url}) ответил на [комментарий]({comment}) на профиле " -"участника {target}" +"участника {target}." #: extensions/base/curseprofile.py:162 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on their own " "profile." msgstr "" "[{author}]({author_url}) ответил на [комментарий]({comment}) на своём " -"собственном профиле" +"собственном профиле." #: extensions/base/curseprofile.py:175 #, python-brace-format @@ -830,46 +827,49 @@ msgid "Deleted a comment on their own profile" msgstr "Удалил комментарий на своём профиле" #: extensions/base/curseprofile.py:197 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " "profile.{reason}" msgstr "" "[{author}]({author_url}) удалил [комментарий]({comment}) на профиле " -"участника {target}" +"участника {target}.{reason}" #: extensions/base/curseprofile.py:200 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." "{reason}" msgstr "" "[{author}]({author_url}) удалил [комментарий]({comment}) на своём " -"собственном профиле" +"собственном профиле.{reason}" #: extensions/base/curseprofile.py:214 #, python-brace-format msgid "Purged a comment on {target}'s profile" -msgstr "Удалил комментарий в профиле {target}" +msgstr "Навсегда удалил комментарий на профиле {target}" #: extensions/base/curseprofile.py:216 msgid "Purged a comment on their own profile" -msgstr "Удалил комментарий на своём профиле" +msgstr "Навсегда удалил комментарий на своём профиле" #: extensions/base/curseprofile.py:230 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." "{reason}" -msgstr "[{author}]({author_url}) удалил комментарий на профиле {target}" +msgstr "" +"[{author}]({author_url}) навсегда удалил комментарий на профиле " +"[{target}]({link}).{reason}" #: extensions/base/curseprofile.py:233 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) purged a comment on [their own]({link}) profile." "{reason}" msgstr "" -"[{author}]({author_url}) удалил комментарий на своём собственном профиле" +"[{author}]({author_url}) навсегда удалил комментарий на [своём " +"собственном]({link}) профиле.{reason}" #: extensions/base/renameuser.py:38 #, python-brace-format @@ -1449,7 +1449,7 @@ msgstr "Частичные детали блокировки" #: extensions/base/mediawiki.py:633 msgid "Block flags" -msgstr "" +msgstr "Флаги блокировки" #: extensions/base/mediawiki.py:635 #, python-brace-format @@ -1587,6 +1587,8 @@ msgid "" "{reason}\n" "{added}{linebreak}{removed}" msgstr "" +"{reason}\n" +"{added}{linebreak}{removed}" #: extensions/base/mediawiki.py:860 #, python-brace-format @@ -1598,17 +1600,17 @@ msgstr "" "({target_url}) {added}{comma} {removed}{comment}" #: extensions/base/mediawiki.py:864 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "System autopromoted [{target}]({target_url}) {added}{comma} {removed}" "{comment}" msgstr "" -"{author} изменил модель содержимого страницы [{target}]({target_url}) с " -"{old_groups} на {new_groups}{comment}" +"Членство в группах для участника [{target}]({target_url}) было автоматически " +"изменено системой: {added}{comma} {removed}{comment}" #: extensions/base/mediawiki.py:866 msgid "," -msgstr "" +msgstr "," #: extensions/base/mediawiki.py:877 #, python-brace-format diff --git a/locale/ru/LC_MESSAGES/rcgcdw.mo b/locale/ru/LC_MESSAGES/rcgcdw.mo index d980e6492aad5f18f56c0f296f09f468d45c3490..e6e112a5a60bf17b40162ef21365bfad942cc55e 100644 GIT binary patch delta 514 zcmXZYze_?<6u|NGG}F?4sF_kp=2Qe_O9W9gxCPPBo|F!frCGETnGOZ57BmTsZIVfX zs7qS~_t74?^dGb}^u6YVb3gaI^X_~1+;4Zwll%1a+zP`-Ob{z1bZ=x zBe;(G!!a~D)E-93S8O6nSinuJ;{v+aJcX;M8;s#3|Ce(X0Unfa9G@|TA9#&xc9A=L zMSY;SMzPbTuIQofRu5nC z-k3Gqm3L#=@Nc9;@x;+?Hkmn2rVm1yZ2BY_PsA&BYr!^OQY}?8^Qx>Gs-~(TU}~8c Xs;Zt;)6AO%YLBW;-cZfrm1Fx4-9A#2 delta 442 zcmXZYze_?<6u|Lwdz!D*)R&t01Ia)N7lQ`DHvI!4q9Jl{*4b6uL=cCEkh5b`xeERZ zHZ;}{>D1)x;P==&aNg(K`|i8%p1W|?vF^9y8w(L9v*eu2kgLe8*g046UO&=giSog78bDMIl)VjuFNSyyjY=ru)!d1@f2-K1S5WD{+yf_Z$z6#thFMTUtHw(%7Qm2uWAE~z_?$88sF$!(n(HSrFZZ+cWn<*KYeVMA6m93uN H{jnQ6+tDYG diff --git a/locale/ru/LC_MESSAGES/rcgcdw.po b/locale/ru/LC_MESSAGES/rcgcdw.po index 2de4b52..e5e20a0 100644 --- a/locale/ru/LC_MESSAGES/rcgcdw.po +++ b/locale/ru/LC_MESSAGES/rcgcdw.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-21 21:04+0200\n" -"PO-Revision-Date: 2021-05-21 18:18+0000\n" +"PO-Revision-Date: 2021-05-22 12:08+0000\n" "Last-Translator: Philo04 \n" "Language-Team: Russian \n" @@ -113,7 +113,7 @@ msgstr "~~скрыто~~" #: src/rcgcdw.py:217 msgid "No description provided" -msgstr "" +msgstr "Описание не предоставлено" #: src/rcgcdw.py:220 msgid "hidden" diff --git a/locale/uk/LC_MESSAGES/misc.mo b/locale/uk/LC_MESSAGES/misc.mo index 0b488bb3711639304276b4cc07a43d5a6fe0d8c1..6abb579ae83bbc1815b9feba479b544c1b8cbb29 100644 GIT binary patch delta 635 zcmYMwO=}ZD7zgm#B)*XPl7>P=tq#S4sctr@63AMkYqQqErh&AfRlIDsLtJAwWp_g^ zf#5~#K@b)d1VO=r7eS+9t+nDOaC-1m^yJZgfZqDwcEEwz-}5~4?Ck8kjsNTG{z=B3 z5R87zlbEkDQ<&!^JTM-@!*CfMgwJ5u`w||3J+b}+_96cX!@f=7Us2zJan!d(9*Yoi zh>$KxAUJ@9LE$hAH;_f1hrjSr5e}d}5F_L$Ov52qfT!VYNMQ$_f-gkA22UXWE$Z8F z5c#ovVc$3*c?97GHJE@ccpN@}1^7zTHzCfkdm9LM|7Jf-1UYG3>JM7do9Ns%BS=Mt zlC_3w+Kz2H^la6duuAQ8P>76lZ|YiAE?4A|MsHNq^5nT&l_@=Ln4T}sxTfRXGySHk z((5(Dpi^2|r(=3qn>4O!rBYR&o-U%*skh8JlV_N@sM7zR8N1{AOP;DIzSxIl+IGX9 zZ~B=9rYyP5yUg;Fp5j_{YoVhJ-))fQ2v>}kVBPIdsMf{c3r delta 467 zcmXZYJxjwt7zgmXw!V;Btwm9^wTDo!N+h|8!3c^txHvd;=o)A!1x=xipit-};$-2_ z$w?f#I8^JV^#iz^AUNqRI5-Hd{?p#Uli%}lTypu2-fE4{MC5{C#Suxw6=EvLDIQoy zFb0p|Fg%6hun9-uwVJnK6!kL<_Pr?IRR05N=zppD7mg6pAS6V{5C$>jq%sA|*pz`2 zn4gCU8G|=)9(G_FzC#B8;2fNe^lJ;wqAtLo@52-ns&2zH$q^!v1h@ZzGms9bzX9?7 z-tCe0zJ3rAu|>COT%6FBSPdmbF|=rLgB!YG=_Y3;w@qsawV~}gHDAwH9j~_U_?4>7 z(D6!#PRZ5tu5(~Bkq)2H1{Z-i b*=Kw?cb|wfY5Yk($h+4|*^yoOD7)kz5WY%w diff --git a/locale/uk/LC_MESSAGES/misc.po b/locale/uk/LC_MESSAGES/misc.po index c4a4eb6..b336bc2 100644 --- a/locale/uk/LC_MESSAGES/misc.po +++ b/locale/uk/LC_MESSAGES/misc.po @@ -8,16 +8,17 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-18 13:47+0200\n" -"PO-Revision-Date: 2020-07-12 12:17+0200\n" -"Last-Translator: \n" -"Language-Team: \n" +"PO-Revision-Date: 2021-05-22 12:08+0000\n" +"Last-Translator: MakandIv \n" +"Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"X-Generator: Poedit 2.3\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.6\n" #: src/misc.py:44 msgid "Location" @@ -56,9 +57,8 @@ msgid "VK link" msgstr "Посилання на VK" #: src/misc.py:44 -#, fuzzy msgid "XBL link" -msgstr "Посилання на XVL" +msgstr "Посилання на обліковий запис XBL" #: src/misc.py:44 msgid "Steam link" diff --git a/locale/uk/LC_MESSAGES/rcgcdw.mo b/locale/uk/LC_MESSAGES/rcgcdw.mo index fe9660be6345c9fea7d888053615b09f0feac591..ef2edc1746ef59d6392ff763d23d2048d70f0691 100644 GIT binary patch delta 928 zcmZY6%TE(Q90%~>trdI}ABYksM3hFi+Y&=!!Rm%qY;3`l;)4_0-ATI^cFXRzJrr69 z(dfZ=Xp9%*-GhnYk$3?v#*>Hb!Gjm0|A8L7dGI^i8cF;mv!9vH^tZqH?Rx(cZ}qFU z{RKgsz&MNX0b>ATp#=}bH`ouq!;|ng9E82Cg!I5scmzh8>l8eUbs8RoOV9($a1cIj z`UVaYQYD`->Bhz{$p6sVM#v%94Nt*7*b4)&6Gq^1cpLJ>^YAl@%E1d*OC5xyU>1(R z9e5G`fJ3kkNzTBqYn6~WO!&=;kRNykHMj|%!+|bB*5O;o3kn`+7=!1qmLc!Z8uY2?dammu?)@Y}az@V4cVhb@wObZc--kJ_2VwdKor=p&?Y}rD}lyz%C#_L1$=4?Dpr=&!b zjz<$xEPg|ZM3T{&nJ|v(nSz{QLW;?Y`(HMmwe7qW5=Fb2hxtodPD>lMUu7aL%M0~d zqN!vQwInX0MzN3+!?m8yr?r=zSAzk%yiE0>U?32_HWKjB>oiD1bY#qPUzlV%GaHrN zV`ufZB{nyg^ QnzLPB-Pcv;zr*P8AF|TThyVZp literal 3331 zcmbuA+iw(A9LEm`s4FVq6%{=w#a1$Pcc}?1EQWG1HB>8EjQT>RyN6}y?#w!umJP)e zDnepoebB`R@dcwXzAU}5EwseMKj4f$YK*@4LVP1W8o$3YXKw)v>a;VT`JMASzuWnp z*|$=jQc6v2bMAR5;(dX4_pIxG4=%b2KXpg0G|cN!TZ6lzz4w@Eq@O_0Qm>- zUhp?C23`kg-JhE4S1{HIc_+9U6d>ul;C4U%hy4&djnhr{soe~l`9#07+eFAeg{Z#^nhe%w;q2L#6No*4_bE^q`Z%5`8Y^+ z#=#-f?lX{Tx#DidGT;_4366o!gVSIK_!IafxD3vS8$hb>c97-=KnolOC&6FAaj=AB z9s_S^u0~MLK;8s)fqOyPM;m+`{1BwPzXaES--2=Qs-FJ??1j7vMW^{ba2@!LmW$vf z$nSxqcM*I6{2lBB*P>`tzZ6L0eIWIV4^kZ_!S&#r9+x1+e;q`*RL#jBwnh1;T2g(f z22>Z6sqLbkpgO_5%9|!RZt98WaMMNo_z3Q&aZ@Z52gQJ`Q9VfYpcv{GO39XMVIxTW zL^;ugva5Ph4O%aht#MJE>DoXK-g)9AH?zLw*j=rHrzMfI{FYZ5K9t$hzN&oyD!X$< z%hpys)*JZTb_ShXnP<(SV7+BucszU5wDTgz_L^3q%$;H34qIXbVwrnc#}#ZJJbS!o z<^=0^JYSg`7W}9axHk=WZ6kpv+Er*kt57~7$4%F_vIT9qeavI8iIKWOBpk5{0&h+f zgXNdmA=`R45IpPHzH1Ezz61LvP%?ejDX3RhsDuU`pA81CFoUdX`YbDKKXA*M7R=_% zGTnF)SxPnnM9URf7;e0Hi~_}gDgiw_Rl{P0Mqkc&6SYP+rFiV1C^@cg^m}Yn&&W6!9(dh2h}w{nvDfrPiYMdAxDnrO z#JBRq)>NWr3*>n0fa&>0#x-rPU?Od-Jb;!7%)Br%!YsDPDIN^P`uqC#HJvBARbf?{sh^NyDzIijJ*Z9VCBEetgaSnCJyVA+})XsDdy{Z-Q zorxqL9gUXkO7wJLNdilfT{~iL8LtRipkpZU0f%;;C%b#P6S3%&%9*edPU@4Xg!3(e zoYz7)CTHc0tjg(dTuy@`nT6F7i+_5gas#dAnz-FOgE>JYl`1@*uu0(Bc0n=9z)+fAm%TPV) zKKQ;!J%$2R(Hj%UgPO1r3T-j!99gO&TZr9m%@)Q zj-JC4HDW6GC0MBFg8lOV+OE;1Gl&=kCa6Zo1Qt)KZfx2k{W}|0wreVCoi7=08$d&= zdHQ%XblTdzDb!f=ATSC_MM3AS8Qh%@Pq6R|?JLe?bgY3CB^x&?Yy2XDOI)tnpL(H!IL-F8}}l diff --git a/locale/uk/LC_MESSAGES/rcgcdw.po b/locale/uk/LC_MESSAGES/rcgcdw.po index 6063332..64da862 100644 --- a/locale/uk/LC_MESSAGES/rcgcdw.po +++ b/locale/uk/LC_MESSAGES/rcgcdw.po @@ -8,16 +8,17 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-21 21:04+0200\n" -"PO-Revision-Date: 2020-09-03 13:14+0200\n" -"Last-Translator: \n" -"Language-Team: \n" +"PO-Revision-Date: 2021-05-22 12:08+0000\n" +"Last-Translator: MakandIv \n" +"Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"X-Generator: Poedit 2.4.1\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.6\n" #: src/rcgcdw.py:117 #, python-brace-format @@ -108,15 +109,15 @@ msgstr "Очок за день" #: src/rcgcdw.py:215 msgid "~~hidden~~" -msgstr "" +msgstr "~~приховано~~" #: src/rcgcdw.py:217 msgid "No description provided" -msgstr "" +msgstr "Опис не надано" #: src/rcgcdw.py:220 msgid "hidden" -msgstr "" +msgstr "приховано" #~ msgid "director" #~ msgstr "директор" diff --git a/locale/uk/LC_MESSAGES/redaction.mo b/locale/uk/LC_MESSAGES/redaction.mo index 71699c7f32cb640ee52cd4d6413e19b24ea7ad68..d2d153765423a6447fb34a0291c85eaf54b4d480 100644 GIT binary patch delta 380 zcmZ3@e3YgBo)F7a1|VPpVi_RT0b*7lwgF-g2moSsAPxlLTZ{}0kw97ih)sYRfLyRX zAcX)ysk!-OsVNKrMfq8&$tAj;DY{{)Ma7xLXnpgLHlUbzK}4Jp8SEJ+-6!{am?x5{pZ8Ly8jfigOZ6@{6n#+(LbP6#N{0T@`Fx zeH}f092{L-f?R`x?SM-2(n}N5Q*}d96LXPmvB@YYDJZtm*DryZld4yqnVp%GU!s?i zs$T$cp-QoSQF3~6O1XYfYD!{q3DBkbrP=xjW33cQvnMW!o~+5JIN6)g(#1fbrbZ!8 z)zHAe&eq64Q^8)rP{B&U$eJrc*F7~awFu(e@YE!r!&4PZ^vt*zE=;;3;P%V?DlKI delta 227 zcmX@gvYI*go)F7a1|VPrVi_P-0b*t#)&XJ=umIvhprj>`2C0FAfTH}Y)Z`Lf&lKIT z)S}|d{5&g#pk()Cm-31ATB=3{Mh3cuhPs9p3WlauhL+j}h6V;)K8bnhrHSdOx*@5F zxmF63eHf#)BXr$U^HPfvOY)1X6aw;7Q!+~wjPy+O41ubPOLRku67!04AhMH}F)A@? pOg_PAscxiDQ=^cl3N+Nt&_q+gUcpeoO2J6e8g7M^LTNS^0{|dhH2MGl diff --git a/locale/uk/LC_MESSAGES/redaction.po b/locale/uk/LC_MESSAGES/redaction.po index c3c2671..8779773 100644 --- a/locale/uk/LC_MESSAGES/redaction.po +++ b/locale/uk/LC_MESSAGES/redaction.po @@ -8,18 +8,19 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-18 13:48+0200\n" -"PO-Revision-Date: 2020-11-18 15:19+0100\n" -"Last-Translator: \n" -"Language-Team: \n" +"PO-Revision-Date: 2021-05-22 12:08+0000\n" +"Last-Translator: MakandIv \n" +"Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.1\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.6\n" #: src/discord/redaction.py:77 src/discord/redaction.py:80 #: src/discord/redaction.py:85 msgid "Removed" -msgstr "" +msgstr "Видалено" From 6215cb81bfa5d9fc0faf3c3182dff17673527c7c Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 14:22:23 +0200 Subject: [PATCH 122/173] Some typing methods seem not to be supported by Python 3.7, removed them --- src/api/formatter.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/api/formatter.py b/src/api/formatter.py index b808c79..c9946a1 100644 --- a/src/api/formatter.py +++ b/src/api/formatter.py @@ -21,8 +21,7 @@ from typing import Optional, Callable logger = logging.getLogger("src.api.formatter") -def _register_formatter(func: Callable[[dict], DiscordMessage], kwargs: dict[str, str], formatter_type: str, - action_type: Optional[str]=None): +def _register_formatter(func, kwargs, formatter_type: str, action_type=None): """ Registers a formatter inside of src.rcgcdw.formatter_hooks """ From ad953368c17ab71cc8b70113682ce952a127c763 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 14:23:49 +0200 Subject: [PATCH 123/173] Fixed gitlab-ci.yml --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7978a2a..5bd1490 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,6 +8,7 @@ stages: - pytest test: + stage: test script: - apk add libxml2-dev libxslt-dev libxml2 gcc musl-dev linux-headers - pip3.7 install -r requirements.txt @@ -19,7 +20,7 @@ test: - testing pytest: - stage: test + stage: pytest script: - pip3.7 install -U pytest - pytest --junitxml=report.xml From 87e70d977907e9dd9703ddc63c0469e5232556f9 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 14:48:26 +0200 Subject: [PATCH 124/173] Fixed URL in util --- src/api/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/util.py b/src/api/util.py index e50e954..669dd4c 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -117,7 +117,7 @@ def embed_helper(ctx: Context, message: DiscordMessage, change: dict, set_user=T if change["user"] not in list(ip_mapper.keys()): try: contibs = ctx.client.make_api_request( - "{wiki}?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format( + "?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format( wiki=ctx.client.WIKI_API_PATH, user=sanitize_to_url(change["user"]), timestamp=change["timestamp"]), "query", "usercontribs") except (ServerError, MediaWikiError): From 586aaf5a50231c0d733d2ed3fe2568b0ba1512cb Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 15:54:58 +0200 Subject: [PATCH 125/173] Fix GitLab pipeline crashes due to discussions not being initialized --- src/api/util.py | 2 +- src/rcgcdw.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/util.py b/src/api/util.py index 669dd4c..dabdd22 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -118,7 +118,7 @@ def embed_helper(ctx: Context, message: DiscordMessage, change: dict, set_user=T try: contibs = ctx.client.make_api_request( "?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format( - wiki=ctx.client.WIKI_API_PATH, user=sanitize_to_url(change["user"]), timestamp=change["timestamp"]), "query", + user=sanitize_to_url(change["user"]), timestamp=change["timestamp"]), "query", "usercontribs") except (ServerError, MediaWikiError): logger.warning("WARNING: Something went wrong when checking amount of contributions for given IP address") diff --git a/src/rcgcdw.py b/src/rcgcdw.py index c9cfdbc..987d383 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -277,7 +277,7 @@ load_extensions() # Log in and download wiki information wiki = Wiki(rc_processor, abuselog_processing) client = src.api.client.Client(formatter_hooks, wiki) -if settings["fandom_discussions"]["enabled"]: +if settings["fandom_discussions"]["enabled"] or TESTING: import src.discussions src.discussions.inject_client(client) # Not the prettiest but gets the job done try: From 938f2432ba409eb481c988b4ffcddd20df4b9dd4 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 15:55:25 +0200 Subject: [PATCH 126/173] Update Python requirements --- requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index b540ae3..dd33b8e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ -beautifulsoup4 >= 4.6.0; python_version >= '3.6' +beautifulsoup4 >= 4.6.0; +python_version >= '3.7' requests >= 2.18.4 schedule >= 0.5.0 lxml >= 4.2.1 \ No newline at end of file From 5ca438372d385af993731d0535a30c9c65c7ee66 Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Sat, 22 May 2021 13:59:36 +0000 Subject: [PATCH 127/173] Fix fields and rights changes --- extensions/base/mediawiki.py | 55 ++++++++++++++++++++---------------- src/api/client.py | 2 +- src/api/context.py | 2 +- 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index fb89d71..5fd519f 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -126,7 +126,6 @@ def embed_upload_upload(ctx, change) -> DiscordMessage: license = None embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) action = ctx.event - embed_helper(ctx, embed, change) # Requesting more information on the image request_for_image_data = None try: @@ -226,6 +225,7 @@ def embed_upload_upload(ctx, change) -> DiscordMessage: embed.add_field(_("Options"), _("([preview]({link}))").format(link=image_direct_url)) if settings["appearance"]["embed"]["embed_images"]: embed["image"]["url"] = image_direct_url + embed_helper(ctx, embed, change) return embed @@ -596,7 +596,6 @@ def block_expiry(change: dict) -> str: @formatter.embed(event="block/block", mode="embed") def embed_block_block(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) user = change["title"].split(':', 1)[1] try: ipaddress.ip_address(user) @@ -633,6 +632,7 @@ def embed_block_block(ctx, change): embed.add_field(_("Block flags"), ", ".join( block_flags)) # TODO Translate flags into MW messages, this requires making additional request in init_request since we want to get all messages with prefix (amprefix) block-log-flags- and that parameter is exclusive with ammessages embed["title"] = _("Blocked {blocked_user} {time}").format(blocked_user=user, time=block_expiry(change)) + embed_helper(ctx, embed, change) return embed @@ -811,7 +811,7 @@ def compact_import_interwiki(ctx, change): # rights/rights - Assigning rights groups -def get_changed_groups(change: dict, separator: str) -> [str, str]: +def get_changed_groups(change: dict) -> [[str], [str]]: """Creates strings comparing the changes between the user groups for the user""" def expiry_parse_time(passed_time): try: @@ -819,51 +819,56 @@ def get_changed_groups(change: dict, separator: str) -> [str, str]: except ValueError: return "" new_group_meta = {_(t["group"]): expiry_parse_time(t.get("expiry", "infinity")) for t in change["logparams"].get("newmetadata", [])} - old_groups = {_(x) for x in change["logparams"]["oldgroups"]} # translate all groups and pull them into a set + # translate all groups and pull them into a set + old_groups = {_(x) for x in change["logparams"]["oldgroups"]} new_groups = {_(x) for x in change["logparams"]["newgroups"]} - added = separator.join( - ["+ " + x + new_group_meta.get(x, "") for x in new_groups - old_groups]) # add + before every string and join them with separator - removed = separator.join(["- " + x for x in old_groups - new_groups]) + added = [x + new_group_meta.get(x, "") for x in new_groups - old_groups] + removed = [x for x in old_groups - new_groups] return added, removed @formatter.embed(event="rights/rights", aliases=["rights/autopromote"]) def embed_rights_rights(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change, set_desc=False) embed["url"] = create_article_path(sanitize_to_url("User:{}".format(change["title"].split(":")[1]))) if ctx.event == "rights/rights": embed["title"] = _("Changed group membership for {target}").format(target=sanitize_to_markdown(change["title"].split(":")[1])) else: - author_url = "" - embed.set_author(_("System"), author_url) + embed.set_author(_("System"), "") embed["title"] = _("{target} got autopromoted to a new usergroup").format( target=sanitize_to_markdown(change["title"].split(":")[1])) # if len(change["logparams"]["oldgroups"]) < len(change["logparams"]["newgroups"]): - # embed["thumbnail"]["url"] = "https://i.imgur.com/WnGhF5g.gif" - added, removed = get_changed_groups(change, "\n") - reason = ": {desc}".format(desc=ctx.parsedcomment) if change.get("parsedcomment", None) else "" - embed["description"] = _("{reason}\n{added}{linebreak}{removed}").format(added=added, removed=removed, - reason=reason, - linebreak="\n" if added else "") + # embed["thumbnail"]["url"] = "https://i.imgur.com/WnGhF5g.gif" + added, removed = get_changed_groups(change) + if added: + embed.add_field(ngettext("Added groups", "Added group", len(added)), "\n".join(added), inline=True) + if removed: + embed.add_field(ngettext("Removed groups", "Removed group", len(removed)), "\n".join(removed), inline=True) + embed_helper(ctx, embed, change) return embed @formatter.compact(event="rights/rights", aliases=["rights/autopromote"]) def compact_rights_rights(ctx, change): link = clean_link(create_article_path(sanitize_to_url("User:{user}".format(user=change["title"].split(":")[1])))) - added, removed = get_changed_groups(change, ", ") + added, removed = get_changed_groups(change) author, author_url = compact_author(ctx, change) parsed_comment = compact_summary(ctx) if ctx.event == "rights/rights": - content = _( - "[{author}]({author_url}) changed group membership for [{target}]({target_url}) {added}{comma} {removed}{comment}").format( - author=author, author_url=author_url, target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link, - added=added, comma="," if added and removed else "", removed=removed, comment=parsed_comment) + if added and removed: + group_changes = _("Added to {added} and removed from {removed}.").format( + added=_(", ").join(added), removed=_(", ").join(removed)) + elif added: + group_changes = _("Added to {added}.").format(added=_(", ").join(added)) + elif removed: + group_changes = _("Removed from {removed}.").format(removed=_(", ").join(removed)) + content = _("[{author}]({author_url}) changed group membership for [{target}]({target_url}): {group_changes}{comment}").format( + author=author, author_url=author_url, target=sanitize_to_markdown(change["title"].split(":")[1]), + target_url=link, group_changes=group_changes, comment=parsed_comment) else: - content = _("System autopromoted [{target}]({target_url}) {added}{comma} {removed}{comment}").format( - author_url=author_url, target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link, - added=added, comma=_(",") if added and removed else "",removed=removed, comment=parsed_comment) + content = _("The system autopromoted [{target}]({target_url}) to {added}.{comment}").format( + target=sanitize_to_markdown(change["title"].split(":")[1]), target_url=link, + added=_(", ").join(added), comment=parsed_comment) return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content) @@ -1092,13 +1097,13 @@ def compact_managetags_create(ctx, change): @formatter.embed(event="managetags/delete", mode="embed") def embed_managetags_delete(ctx, change): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) ctx.client.refresh_internal_data() embed["url"] = create_article_path(sanitize_to_url(change["title"])) embed["title"] = _("Deleted the tag \"{tag}\"").format(tag=sanitize_to_markdown(change["logparams"]["tag"])) if change["logparams"]["count"] > 0: embed.add_field(_('Removed from'), ngettext("{} revision or log entry", "{} revisions and/or log entries", change["logparams"]["count"]).format(change["logparams"]["count"])) + embed_helper(ctx, embed, change) return embed diff --git a/src/api/client.py b/src/api/client.py index f9b7645..f107168 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -86,4 +86,4 @@ class Client: def get_ipmapper(self) -> dict: """Returns a dict mapping IPs with amount of their edits""" - return self.__recent_changes.map_ips \ No newline at end of file + return self.__recent_changes.map_ips diff --git a/src/api/context.py b/src/api/context.py index ffb3470..5c8bb66 100644 --- a/src/api/context.py +++ b/src/api/context.py @@ -37,4 +37,4 @@ class Context: self.parsedcomment = parsedcomment def set_comment_page(self, page): - self.comment_page = page \ No newline at end of file + self.comment_page = page From 0109f7e165a497e4ba28ec29b88ed3233c7a03b6 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 16:07:08 +0200 Subject: [PATCH 128/173] Create backwards compatibility with Python 3.7 for formatters_i18n --- src/i18n.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/i18n.py b/src/i18n.py index c8dad74..6e16512 100644 --- a/src/i18n.py +++ b/src/i18n.py @@ -19,6 +19,11 @@ logger = logging.getLogger("rcgcdw.i18n") # Setup translation + +def python37_pgettext_backward_compatibility(context: str, string: str): + """Creates backward compatibility with Python 3.7 as pgettext has been introduced only in Python 3.8""" + return formatters_i18n.gettext(string) + try: if settings["lang"] != "en": rcgcdw = gettext.translation('rcgcdw', localedir='locale', languages=[settings["lang"]]) @@ -28,6 +33,7 @@ try: redaction = gettext.translation('redaction', localedir='locale', languages=[settings["lang"]]) else: rcgcdw, discussion_formatters, rc, formatters_i18n, misc, redaction = gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations() + formatters_i18n.pgettext = python37_pgettext_backward_compatibility except FileNotFoundError: logger.critical("No language files have been found. Make sure locale folder is located in the directory.") sys.exit(1) From eab022c51a8a4a580e58969cd04b7fe4825a65ba Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Sat, 22 May 2021 14:08:49 +0000 Subject: [PATCH 129/173] Update extensions/base/mediawiki.py --- extensions/base/mediawiki.py | 1 + 1 file changed, 1 insertion(+) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 5fd519f..9040b2f 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -855,6 +855,7 @@ def compact_rights_rights(ctx, change): author, author_url = compact_author(ctx, change) parsed_comment = compact_summary(ctx) if ctx.event == "rights/rights": + group_changes = "Unknown group changes." # Because I don't know if it can handle time extensions correctly if added and removed: group_changes = _("Added to {added} and removed from {removed}.").format( added=_(", ").join(added), removed=_(", ").join(removed)) From b485a9f1f1085aa24593abb72ba09849f44b418d Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Sat, 22 May 2021 14:20:41 +0000 Subject: [PATCH 130/173] fix image license --- extensions/base/mediawiki.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 9040b2f..e2b1dd8 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -219,13 +219,13 @@ def embed_upload_upload(ctx, change) -> DiscordMessage: except KeyError: logger.exception( "Unknown error when retriefing the image data for a license, full content: {}".format(image_data)) - if license is not None: - embed["description"] += _("\nLicense: {}").format(license) if image_direct_url: embed.add_field(_("Options"), _("([preview]({link}))").format(link=image_direct_url)) if settings["appearance"]["embed"]["embed_images"]: embed["image"]["url"] = image_direct_url embed_helper(ctx, embed, change) + if license is not None: + embed["description"] += _("\nLicense: {}").format(license) return embed From fd03d58a0c4650c0f6557ee847ec42a6e5d15237 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 16:53:32 +0200 Subject: [PATCH 131/173] Fixed bad image info fetching --- extensions/base/mediawiki.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index e2b1dd8..9a19b76 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -138,8 +138,8 @@ def embed_upload_upload(ctx, change) -> DiscordMessage: params["rvslots"] = "main" else: params["prop"] = "imageinfo" - params["title"] = sanitize_to_url(change["title"]) - params["iiprop"] = "timestamp%7Curl%7Carchivename" + params["titles"] = sanitize_to_url(change["title"]) + params["iiprop"] = "timestamp|url|archivename" params["iilimit"] = "5" request_for_image_data = ctx.client.make_api_request(params, "query", "pages") except (ServerError, MediaWikiError): From 28e8c918712543b26e41736cb127e6f9e84ba4b2 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 16:54:14 +0200 Subject: [PATCH 132/173] Transformed the main RC fetching function to use new API requesting function --- src/wiki.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/wiki.py b/src/wiki.py index 9d0d5a6..3114487 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -119,17 +119,14 @@ class Wiki(object): """Make a typical MW request for rc/abuselog If succeeds return the .json() of request and if not raises ConnectionError""" - request = self._safe_request(WIKI_API_PATH, params=self.construct_params(amount)) - if request is not None: - try: - request = request.json() - except ValueError: - logger.warning("ValueError in fetching changes") - logger.warning("Changes URL:" + request.url) - self.downtime_controller(True) - raise ConnectionError - return request - raise ConnectionError + try: + request = self.api_request(self.construct_params(amount)) + except (ServerError, MediaWikiError): + raise ConnectionError + except (ClientError, KeyError, BadRequest): + raise + return request + def construct_params(self, amount): """Constructs GET parameters for recentchanges/abuselog fetching feature""" From 01f6a5552958672e729df3ac2207cac145bf38cb Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 22 May 2021 18:00:14 +0200 Subject: [PATCH 133/173] Translated using Weblate (Russian) Currently translated at 100.0% (288 of 288 strings) Translated using Weblate (German) Currently translated at 100.0% (288 of 288 strings) Co-authored-by: Alex Great Co-authored-by: MarkusRost Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/de/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/ru/ Translation: RcGcDw/formatters --- locale/de/LC_MESSAGES/formatters.mo | Bin 39400 -> 39410 bytes locale/de/LC_MESSAGES/formatters.po | 24 +-- locale/ru/LC_MESSAGES/formatters.mo | Bin 47881 -> 48172 bytes locale/ru/LC_MESSAGES/formatters.po | 308 ++++++++++++++-------------- 4 files changed, 163 insertions(+), 169 deletions(-) diff --git a/locale/de/LC_MESSAGES/formatters.mo b/locale/de/LC_MESSAGES/formatters.mo index b51a2f138736d37564dea3cf08156463572a2e92..8c2890ef8ee2d2719cc529a817b4fd140032cf05 100644 GIT binary patch delta 1807 zcmajfU2Kz87{KvoWm{KPP-bI>z$^%p4HOVzM3l6$Nr+pNmCesEw)NfH$#^T>D##e! za0nZSY-Mw5Mxp_~Kr`$OqA?3x8eAZd{J{;tC951YgH*a4s%1L>8clPhdYz!Bbd(S8+BzP$%*b zK8y2kGwQqn%*H>l1V`#5A%!#+nIdIai(WkB_$}(h?=SJ_Hjq=Fo_vF1R1{!{2ZgUPnF32iJ<^VFl{WnlOsZ zs5?1__uwe%N#$4~GcXsmfF!6`K9%!={O5Y;FFGM2v0{(!SsDSO4;&!aY6HZ*zZuhriE&W5tdzJ-TMRwp` ztinQ$<9+PJcQJn(=l>XuK^m9wI(~&0x7&$7?XVM%=@j8XOAQ9_d(=B0&+5E4slysP zjs_O(WY^e_oVJ|DJs5dQgl8fDA$Kp%-y7^dNmI0jFk{_IX-77jc9?RX_YBa?wq)CDv8 z?BDYYoJ_n3$72QR!eJ+_Loab0-M9tEVJB+BJ}3SV{lo(}9fwd0{s(pascF0f9mvA~ zF2#IoN4<&zse+tI<=&OmW}`H>_|??v@C8pssL5z(NM15>v;FJqjj$2(M~qmi!8(%Z zGOXmxcsZmt#aps{l}437e4p8J@& zmGbV{4t>;5MK8|85jYRi za1mzXYpCnQu@n#EDEy<=7MV`L6Be0;#i*Ib(Tg9TCU63^-xbsZ{VPRgU?Jw=a;(Ny zoQc=)Bg|VRQh?u~ANw$fBkDLMEVn64rqGHy;Yrkvy*L5W>z#zA<0Hfd>dq3_fLl;^ zavLASEXz5mJj^F9KppoS`mi1Y7{?s6_qYw8<5()b#F2Orhv9V`f`8(R*pJI_A**l2 zZhQ%6ydkmzJ1~ZSVI!_w&9&lB_%T*SME0Rpmb1R>r*Mh*choERmQj^Blv!TJD&#Qa zGu()|YeaaDas(^T8>bClMQ%s3ns}Jlgzw;ZUa)Tvb*PDdv5vktX1%^S?mtT5Nh;2w z?r_MP&Vp5_iF}QVF}vBhqSY8AK88#22I|fiyye6va6WM+bI-*^ScbcicPv-k`mzmd z#wN3E6m+3aTAYanzb(QSA|_U059&e%Y`+xSFoZw2@w9|fzY#T&^T-32Ct7(QcmS7S zA;+;FH{)K+Z{z%nDV(OzhyUOy?A_!n+_l+R*z+#;NPP%{cnGnt)tCk8IZ@6o_% zJdEe@edM&|ChkP@JrSOT{EOVZ)VFi~I^cA>vq1hfelo-zs1sg9Z7=TN81WD?R{Bv- zAhF#^{2Ip#iy_f zgLo4c=R#GUv6p2XpJ1_$AJ9E=yxhd-kJPkwg2?t06nkVeC8)CoO%obNdg z{lrC>g%zk1hunAtW)Mek7}}VLZKw-&y755_5Ff{J*n^sIAL{&%-f\n" +"PO-Revision-Date: 2021-05-22 16:00+0000\n" +"Last-Translator: MarkusRost \n" "Language-Team: German \n" "Language: de\n" @@ -423,12 +423,12 @@ msgstr "Erstellte ein Quiz „{title}“" #: extensions/base/discussions.py:193 extensions/base/discussions.py:195 msgctxt "Fandom discussions Tags/Forums" msgid "Tags" -msgstr "Markierungen" +msgstr "Tags" #: extensions/base/discussions.py:193 msgctxt "Fandom discussions amount of Tags/Forums" msgid "{} tags" -msgstr "{} Markierungen" +msgstr "{} Tags" #: extensions/base/discussions.py:198 #, python-brace-format @@ -636,13 +636,13 @@ msgstr "" #: extensions/base/managewiki.py:195 #, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Löschte das Wiki „{wiki}“" +msgstr "Stellte das Wiki „{wiki}“ wieder her" #: extensions/base/managewiki.py:203 #, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" msgstr "" -"[{author}]({author_url}) wiederherstellte das Wiki *{wiki_name}*{comment}" +"[{author}]({author_url}) stellte das Wiki *{wiki_name}* wieder her{comment}" #: extensions/base/managewiki.py:217 #, python-brace-format @@ -699,7 +699,7 @@ msgid "" "[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " "profile." msgstr "" -"[{author}]({author_url}) leerte das {field} auf dem Profil von " +"[{author}]({author_url}) leerte den {field} auf dem Profil von " "[{target}]({target_url})." #: extensions/base/curseprofile.py:60 @@ -717,7 +717,7 @@ msgid "" "[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " "profile." msgstr "" -"[{author}]({author_url}) leerte das {field} auf dem [eigenen " +"[{author}]({author_url}) leerte den {field} auf dem [eigenen " "Profil]({target_url})." #: extensions/base/curseprofile.py:67 @@ -1700,8 +1700,8 @@ msgstr "Entfernt von" #: extensions/base/mediawiki.py:1100 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" -msgstr[0] "{} Revision oder Logeintrag" -msgstr[1] "{} Revisionen und/oder Logeinträge" +msgstr[0] "{} Version oder Logbucheintrag" +msgstr[1] "{} Versionen und/oder Logbucheinträgen" #: extensions/base/mediawiki.py:1112 #, python-brace-format @@ -1721,10 +1721,10 @@ msgid_plural "" "it from {count} revisions and/or log entries{comment}" msgstr[0] "" "[{author}]({author_url}) löschte die [Markierung]({tag_url}) „{tag}“ und " -"entfernte diese von {count} Revision oder Logeintrag{comment}" +"entfernte diese von {count} Version oder Logbucheintrag{comment}" msgstr[1] "" "[{author}]({author_url}) löschte die [Markierung]({tag_url}) „{tag}“ und " -"entfernte diese von {count} Revisionen und/oder Logeinträge{comment}" +"entfernte diese von {count} Versionen und/oder Logbucheinträgen{comment}" #: extensions/base/mediawiki.py:1139 #, python-brace-format diff --git a/locale/ru/LC_MESSAGES/formatters.mo b/locale/ru/LC_MESSAGES/formatters.mo index ddb98e6de360b851e2c16a10dc6f0fedd823aec7..0f101f2a1113a0301e35f9159c86494a09fc52be 100644 GIT binary patch delta 4755 zcmbW(3sBWn9>DQ)amN%zxC%i$FQKF)3BI8tGZPYWpWw}ywF$-((0P22i zE0pTQ3e=f!jAlXnx!8#TxF4rrFMfl6!3h?nJ}5QUYVTfciRj1ru)Jy# zR$&Xy!Qm^Fx(6S?BovIqSMgECS08dQj~gj=rT9-Z@@EYG2cs}>l~OY>5r<+ShF}@S zU?W=b5RS%^I2B(ihfgA?!mP;0;W>73bjH_!ip8TzIuvLo-+h9dI$SLDXiP%lPUuF7Cz2Yt8La zgVShV#CY_tRcacpY`X?_&Z+Fjz3A;cb|Sj#*qZ zaS?&%QCIt?7>Z$atUV^-Fnkmr!908(&)}cv z!4c&DIJ(x8{~RtF8-Sykt86W+rg>Q7z3LwHw{`TP^K(_XxpY~e-Z z6ZKrPQm^1-qS}pLVl4f)Y}FMbU6NW~O#J3z$y37GK8msJB~l8(Rs# zLLFd+DD_L+i#o6`u@3W?uAb?~xCEC!X%@E&OK3;zAlul4X&B;YSL$y>mW6uYw5OCJ zOX^9~GYQ|N6m_Wfqi#nq9b#1n@C;7dqf`O@1NDHJd(D}>g2bTi?l5cQ9n}5qWL^G@ zQBN!NTXd*>=27}PbP-7GGb{&wxu31Z3)KhtA3sLj;bQWyXZ{tE40YdObHMjdFICR7 zW-WY<3u#w9r&JfdhNp4$5wk`nbCWqb)BqP0u*&K-e`NlM^Jy0zH9J0mI;D3$Z_ac8 zU!{HPG4nU!G9Dq|ydHBGjp{Q~{V?jaK8HFpX@*(6U06>0XU91!^c$J(sP#aGh38M$*$=*7v1ZB;aKb4M>hWf-216?)CDoR(C z)ef9CIMzkC9PLDY~1b z&ORIW?Ku_8^6hk^oco+-oi8|#JA0g`-A@Yb%k!`Gz~+3(*<*9nyBeJRT=v`ezL(}Y z=Lvezw@$iRB(@+#n)0G`#CA`Q(wi4M%B#)La-rqt5?O3BrY)Iek<4u&!S2{{eIt-q zd#G_df1^cz{oVYPbH9w-o_IUAN^(}@uPn>S%U`Uo+_CRBC*(ZIq?~>5qVuGl-I~JU zLh}WQ?T)kb$%SR9{7pW1tNfxMN$Lu^<@OyR?x=IjDCEAvJFN6}+SQ^vSX$_gO*R!) zll(vlDw^f)B~r?Yrh0mMv*?g??6w+viYqNqeB)jO_h-c7lYL2CagVzj$BIZvE{m4r zl1MqynKF{E2A4=`SMb37aHj8rs*;o+2rZ{{f#F~JUyCQM`0{v9T-D_hb-_q)`TPLy zTy#p-p=ezk#^j1vOAwEIGAfrB2TSv_0s6tJmH8F!70{`cVfIL)du5-WyVt_ir#vIh zS~JZvV(Xe<>FoB+=L3~dRA{tZ=^iIRmD}b0N~;)^4elDBRW(Uht$PF+ZjYAK>d|2} zrOTI?E34C2QI?E%b*S~M^VE-d(dK`>u56)K-%!qWcE}mCzGY8$ zn1eX&o*Gfk4t7JIv!B22iqktpKOfvn*M9z^wv^4a&b7hW_X8 z-@s|9ufNUv+>wm+V~uy~YrJ16e`15z2esJ|lDK}0?;Ycd^~d~1^w~09^(5-7t5pUz zmbl}Jlg`>ODcN+N*9VLt=|{r!p%pUFl`uG+gaN&sNv+h+4%5MvHyzcVMQ^t0R_cb( zK<2fyv|`nYbn_?>*Y=3EmJvhrH#4@*8LvCgt3w>uKfq3HO_P5g7%$n)HwU`k?{PJ_ znmO|5tZsU+9@27Wxb!qPT|cayJdNQ{G7rUgeUn@DS6!) zKFe&~Fr_Ud1~ z3(LZVx{ybEr@O#z&SPNV?u}LH*&^SdyX>L9%F3jIr=U%n*IPFUen-$G?5#vj^ji-KR<{{{ty* BZ@d5i delta 4724 zcmb8w32@Za9l-IoK_XB>NVsCo%_g9Pa0G#JqzD8#3IYWjP>yUaAc5S$APH{5Y2--Y zM}!as0}2`;Y_j3Tq*}(&DXss-qoZOcqOGmPVx3CcX|?^n{V%YoC~+o}&wFqG`~JW8 zd%ySg=s*1`uKPKAcXP~BO1-j3sqGlFSgFZ)0H@=p7==TYD76D;VFrGL6ESJ2QZsQA z#^5EKkJoVy&PY~jAwGkn@M~O!@ph#qVU1lmRDeaP%M8RZ@Og?kQJ++$9-u!4$KvCd zgU#3%W73p*7{_8XR^dQw!UcF4^?W1J2^y1e1UBF%`~(MKW`;wl%`~c6)?5rv)u@$>xV3s#9OrxKRyhFW>BukB3Nt*Fl)ZhCv>XnWm&r>l6i}57t&xd65E_?#> z(9xB=cB8Qt18@`Ghl2mY^Ei+#I+<(MMjPMKsqddpTCoJ<@I$05lz#!+h3S}tzxQe@ z!S1Z*ACt?&Xz#uHfV64Cq z_zddIx>48271Tv|*JDa;z;PJQ`&BEAc??{|U*H7tm4Lgj2VTIR;oF#qL2JzMSvZ&e z64U`YQJ=%=DyVe}Jb4JDz@#Bxl;wWzoB6!yk8jK{ChF_DIiD8euuhhiD_ zLnjWzH?RwSg$wcD*nsoP%m6x-n=5|}D;b}&o;w8Fa5t8bZ=Lc!8G5!rF;H+KdDX2tZ zQ-44ft8zq_G|!YtcD9MmRb#5`TkMyoxax zaGKR(0_urpqJGhA?1n|y8y%>h+wJWiM;+(|)bm`y{^)uj#d#qV_T{n(Xfzi6@Slbu<8Woc<(*PCCI+|*$`eCAQc0ohsKPhL+= zbodNgjV7zDq$s6ec}CGXn={S;Hw6Y1Zz(lgrGiNY?0mo2xCY))JjWNV!(N z4%8oRy=_P^H5hH9RIVss0g?TAy8Oge(mvG2j z6(O8s(Vj?7GhuP&%1qD4GOReJ6AO}r{BXIxJl50Rxj#n6uNZxsZ7N#PFz`+>-h8D5 zEg#TBC-uD1YAsoo$r5B+=GqXSjbMK$1t*c|4CQBy^2QP=tFwmt#L`XP&3gX3@wkdt zZnfOwGhh3Sm8k3oealAjvm@K}k7Y0HcB>A)^YKGD<9$EglauK0UB-mG*{=I@zp;43 zozyPWy8O6yZ+Z3bK)Lo~bUZGNd57-9vRphRcqEFDKt_6ZcY_=grd6+vswa zQEjb8tEV?vh^8e2T4@tko& z-YAZk($Ou})!x#+$b2?KCagKr+o!J|Y}DH=A2-B`eO-_&%M6sK%g3|}^X22iI40hc zZ=T-}x%PN)l&vIpRl0YP=04|S6t`Qn=Q+N7>p7X&*spJkapp%nZw+J%Ix?|!Z2JfI zcq-j<0kBIyoI*(`?Q`qw>t4dmo1mi?j9e<2?A^>r8Ce>9+xsw~ba1=ce7CgJH`}h< zbr&tSit<6n*qa?!g=31Je0wlV{#rg*tPjOYWpiiOto6lyGGn7n{<6`5VUlkTl|!4h z-)OrsHy`(l)n&Dao4tv;+G(7(dMx|XNa(wDzY`Qqk8NVxs)EV!F7u zjF+nV5PfHhj`0ud=7_WIDihmjYy0^?i58nMY2768r11!0&r@{)%9k_w+ZO z6(rZh%V&GzT)*CPuP%yEv2Tf$N=fElrY=lqih{Cf|%Jv@Trg?gAvc=}xO(!4*! zQ)XA{Y(6`Xcj!^q?t}Mt>floB|F?uGygEWI9A4?~lkT)5R(+;i2aj~M{P4yc*xXaT zNa-c_zO+RSRENo*rX@&aeOK4jms&fRlaogaZ+F4ZJhs%kdp+dJBVjUWO^gg{$nqrW z%SkcvVMCMW*dIMU)I9d}q5A%n7o7pFNzSf*o-gM$jp<-ohDu?R`LlkbCYKxz7rW~t m^Po4|beddmH@8`Q^Yq!tSf8%zfm5?P$*1$;T`gyGEdK*o0E9RI diff --git a/locale/ru/LC_MESSAGES/formatters.po b/locale/ru/LC_MESSAGES/formatters.po index 92cb801..d2ac0d6 100644 --- a/locale/ru/LC_MESSAGES/formatters.po +++ b/locale/ru/LC_MESSAGES/formatters.po @@ -21,8 +21,8 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-21 21:20+0200\n" -"PO-Revision-Date: 2021-05-22 12:08+0000\n" -"Last-Translator: MakandIv \n" +"PO-Revision-Date: 2021-05-22 16:00+0000\n" +"Last-Translator: Alex Great \n" "Language-Team: Russian \n" "Language: ru\n" @@ -79,47 +79,47 @@ msgstr "Изменены категории" #: extensions/base/cargo.py:37 #, python-brace-format msgid "Created the Cargo table \"{table}\"" -msgstr "Создал Cargo таблицу \"{table}\"" +msgstr "Создал таблицу Cargo «{table}»" #: extensions/base/cargo.py:45 #, python-brace-format msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) создал таблицу Cargo \"{table}\"" +msgstr "[{author}]({author_url}) создал таблицу Cargo «{table}»" #: extensions/base/cargo.py:60 #, python-brace-format msgid "Recreated the Cargo table \"{table}\"" -msgstr "Воссоздал Cargo таблицу \"{table}\"" +msgstr "Воссоздал таблицу Cargo «{table}»" #: extensions/base/cargo.py:68 #, python-brace-format msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) воссоздал таблицу Cargo \"{table}\"" +msgstr "[{author}]({author_url}) воссоздал таблицу Cargo «{table}»" #: extensions/base/cargo.py:83 #, python-brace-format msgid "Replaced the Cargo table \"{table}\"" -msgstr "Заменил Cargo таблицу \"{table}\"" +msgstr "Заменил таблицу Cargo «{table}»" #: extensions/base/cargo.py:91 #, python-brace-format msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) заменил таблицу Cargo \"{table}\"" +msgstr "[{author}]({author_url}) заменил таблицу Cargo «{table}»" #: extensions/base/cargo.py:105 #, python-brace-format msgid "Deleted the Cargo table \"{table}\"" -msgstr "Удалил Cargo таблицу \"{table}\"" +msgstr "Удалил таблицу Cargo «{table}»" #: extensions/base/cargo.py:112 #, python-brace-format msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) удалил таблицу Cargo \"{table}\"" +msgstr "[{author}]({author_url}) удалил таблицу Cargo «{table}»" #: extensions/base/translate.py:41 #, python-brace-format msgid "Marked \"{article}\" for translation" -msgstr "Пометил страницу \"{article}\" как доступную для перевода" +msgstr "Пометил страницу «{article}» как доступную для перевода" #: extensions/base/translate.py:55 #, python-brace-format @@ -127,13 +127,13 @@ msgid "" "[{author}]({author_url}) marked [{article}]({article_url}) for " "translation{comment}" msgstr "" -"[{author}]({author_url}) пометил страницу [{article}]({article_url}) как " +"[{author}]({author_url}) пометил страницу «[{article}]({article_url})» как " "доступную для перевода{comment}" #: extensions/base/translate.py:70 #, python-brace-format msgid "Removed \"{article}\" from the translation system" -msgstr "Удалил \"{article}\" из системы перевода" +msgstr "Удалил страницу «{article}» из системы перевода" #: extensions/base/translate.py:80 #, python-brace-format @@ -141,14 +141,13 @@ msgid "" "[{author}]({author_url}) removed [{article}]({article_url}) from the " "translation system{comment}" msgstr "" -"[{author}]({author_url}) удалил [{article}]({article_url}) из системы " -"перевода{comment}" +"[{author}]({author_url}) удалил страницу «[{article}]({article_url})» из " +"системы перевода{comment}" #: extensions/base/translate.py:95 #, python-brace-format msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" -"Переименовал доступную для перевода страницу \"{article}\" в \"{target}\"" +msgstr "Переименовал доступную для перевода страницу «{article}» в «{target}»" #: extensions/base/translate.py:106 #, python-brace-format @@ -157,14 +156,13 @@ msgid "" "to [{target}]({target_url}){comment}" msgstr "" "[{author}]({author_url}) переименовал доступную для перевода страницу " -"*{article}* в [{target}]({target_url}){comment}" +"«*{article}*» в «[{target}]({target_url})»{comment}" #: extensions/base/translate.py:121 #, python-brace-format msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" msgstr "" -"Столкнулся с проблемой при попытке переименования \"{article}\" в " -"\"{target}\"" +"Столкнулся с проблемой при попытке переименования «{article}» в «{target}»" #: extensions/base/translate.py:133 #, python-brace-format @@ -173,7 +171,7 @@ msgid "" "({article_url}) to [{target}]({target_url}){comment}" msgstr "" "[{author}]({author_url}) столкнулся с проблемой при попытке переименования " -"[{article}]({article_url}) в [{target}]({target_url}){comment}" +"«[{article}]({article_url})» в «[{target}]({target_url})»{comment}" #: extensions/base/translate.py:149 #, python-brace-format @@ -181,8 +179,8 @@ msgid "" "Failed to delete \"{article}\" which belongs to translatable page " "\"{target}\"" msgstr "" -"Не смог удалить \"{article}\", относящуюся к доступной для перевода странице " -"\"{target}\"" +"Не смог удалить страницу «{article}», относящуюся к доступной для перевода " +"странице «{target}»" #: extensions/base/translate.py:161 #, python-brace-format @@ -190,14 +188,14 @@ msgid "" "[{author}]({author_url}) failed to delete [{article}]({article_url}) which " "belongs to translatable page [{target}]({target_url}){comment}" msgstr "" -"[{author}]({author_url}) не смог удалить [{article}]({article_url}), " -"относящуюся к доступной для перевода странице [{target}]({target_url})" -"{comment}" +"[{author}]({author_url}) не смог удалить страницу " +"«[{article}]({article_url})», относящуюся к доступной для перевода странице " +"«[{target}]({target_url})»{comment}" #: extensions/base/translate.py:177 #, python-brace-format msgid "Completed deletion of translation page \"{article}\"" -msgstr "Удалил страницу перевода \"{article}\"" +msgstr "Удалил страницу перевода «{article}»" #: extensions/base/translate.py:188 #, python-brace-format @@ -205,15 +203,16 @@ msgid "" "[{author}]({author_url}) completed deletion of translation page [{article}]" "({article_url}){comment}" msgstr "" -"[{author}]({author_url}) удалил страницу перевода [{article}]({article_url})" -"{comment}" +"[{author}]({author_url}) удалил страницу перевода " +"«[{article}]({article_url})»{comment}" #: extensions/base/translate.py:203 #, python-brace-format msgid "" "Failed to delete \"{article}\" which belongs to translation page \"{target}\"" msgstr "" -"Не смог удалить \"{article}\", относящуюся к странице перевода \"{target}\"" +"Не смог удалить страницу «{article}», относящуюся к странице перевода " +"«{target}»" #: extensions/base/translate.py:215 #, python-brace-format @@ -221,13 +220,14 @@ msgid "" "[{author}]({author_url}) failed to delete [{article}]({article_url}) which " "belongs to translation page [{target}]({target_url}){comment}" msgstr "" -"[{author}]({author_url}) не смог удалить [{article}]({article_url}), " -"относящуюся к странице перевода [{target}]({target_url}){comment}" +"[{author}]({author_url}) не смог удалить страницу " +"«[{article}]({article_url})», относящуюся к странице перевода " +"«[{target}]({target_url})»{comment}" #: extensions/base/translate.py:231 #, python-brace-format msgid "Encouraged translation of \"{article}\"" -msgstr "Повысил приоритет перевода страницы \"{article}\"" +msgstr "Повысил приоритет перевода страницы «{article}»" #: extensions/base/translate.py:240 #, python-brace-format @@ -235,13 +235,13 @@ msgid "" "[{author}]({author_url}) encouraged translation of [{article}]({article_url})" "{comment}" msgstr "" -"[{author}]({author_url}) повысил приоритет перевода страницы [{article}]" -"({article_url}){comment}" +"[{author}]({author_url}) повысил приоритет перевода страницы " +"«[{article}]({article_url})»{comment}" #: extensions/base/translate.py:255 #, python-brace-format msgid "Discouraged translation of \"{article}\"" -msgstr "Понизил приоритет перевода страницы \"{article}\"" +msgstr "Понизил приоритет перевода страницы «{article}»" #: extensions/base/translate.py:264 #, python-brace-format @@ -249,25 +249,25 @@ msgid "" "[{author}]({author_url}) discouraged translation of [{article}]" "({article_url}){comment}" msgstr "" -"[{author}]({author_url}) понизил приоритет перевода страницы [{article}]" -"({article_url}){comment}" +"[{author}]({author_url}) понизил приоритет перевода страницы " +"«[{article}]({article_url})»{comment}" #: extensions/base/translate.py:282 #, python-brace-format msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "Ограничил для страницы \"{article}\" список языков: `{languages}`" +msgstr "Ограничил для страницы «{article}» список языков: `{languages}`" #: extensions/base/translate.py:285 #, python-brace-format msgid "Priority languages for \"{article}\" set to `{languages}`" msgstr "" -"Задал для страницы \"{article}\" следующий список приоритетных языков: " +"Задал для страницы «{article}» следующий список приоритетных языков: " "`{languages}`" #: extensions/base/translate.py:288 #, python-brace-format msgid "Removed priority languages from \"{article}\"" -msgstr "Удалил приоритетные языки со страницы \"{article}\"" +msgstr "Удалил приоритетные языки со страницы «{article}»" #: extensions/base/translate.py:301 #, python-brace-format @@ -275,7 +275,7 @@ msgid "" "[{author}]({author_url}) limited languages for [{article}]({article_url}) to " "`{languages}`{comment}" msgstr "" -"[{author}]({author_url}) ограничил для страницы [{article}]({article_url}) " +"[{author}]({author_url}) ограничил для страницы «[{article}]({article_url})» " "список языков: `{languages}`{comment}" #: extensions/base/translate.py:308 @@ -284,7 +284,7 @@ msgid "" "[{author}]({author_url}) set the priority languages for [{article}]" "({article_url}) to `{languages}`{comment}" msgstr "" -"[{author}]({author_url}) задал для страницы [{article}]({article_url}) " +"[{author}]({author_url}) задал для страницы «[{article}]({article_url})» " "следующий список приоритетных языков: `{languages}`{comment}" #: extensions/base/translate.py:315 @@ -293,15 +293,15 @@ msgid "" "[{author}]({author_url}) removed priority languages from [{article}]" "({article_url}){comment}" msgstr "" -"[{author}]({author_url}) удалил приоритетные языки со страницы [{article}]" -"({article_url}){comment}" +"[{author}]({author_url}) удалил приоритетные языки со страницы " +"«[{article}]({article_url})»{comment}" #: extensions/base/translate.py:331 #, python-brace-format msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" msgstr "" -"Добавил доступную для перевода страницу \"{article}\" в агрегированную " -"группу \"{group}\"" +"Добавил доступную для перевода страницу «{article}» в агрегированную группу " +"«{group}»" #: extensions/base/translate.py:342 #, python-brace-format @@ -309,16 +309,16 @@ msgid "" "[{author}]({author_url}) added translatable page [{article}]({article_url}) " "to aggregate group \"{group}\"{comment}" msgstr "" -"[{author}]({author_url}) добавил доступную для перевода страницу [{article}]" -"({article_url}) в агрегированную группу \"{group}\"{comment}" +"[{author}]({author_url}) добавил доступную для перевода страницу " +"«[{article}]({article_url})» в агрегированную группу «{group}»{comment}" #: extensions/base/translate.py:357 #, python-brace-format msgid "" "Removed translatable page \"{article}\" from aggregate group \"{group}\"" msgstr "" -"Удалил доступную для перевода страницу \"{article}\" из агрегированной " -"группы \"{group}\"" +"Удалил доступную для перевода страницу «{article}» из агрегированной группы " +"«{group}»" #: extensions/base/translate.py:368 #, python-brace-format @@ -326,13 +326,13 @@ msgid "" "[{author}]({author_url}) removed translatable page [{article}]" "({article_url}) from aggregate group \"{group}\"{comment}" msgstr "" -"[{author}]({author_url}) удалил доступную для перевода страницу [{article}]" -"({article_url}) из агрегированной группы \"{group}\"{comment}" +"[{author}]({author_url}) удалил доступную для перевода страницу " +"«[{article}]({article_url})» из агрегированной группы «{group}»{comment}" #: extensions/base/translate.py:387 #, python-brace-format msgid "Reviewed translation \"{article}\"" -msgstr "Проверил перевод \"{article}\"" +msgstr "Проверил перевод страницы «{article}»" #: extensions/base/translate.py:401 #, python-brace-format @@ -340,13 +340,13 @@ msgid "" "[{author}]({author_url}) reviewed translation [{article}]({article_url})" "{comment}" msgstr "" -"[{author}]({author_url}) проверил перевод [{article}]({article_url}){comment}" +"[{author}]({author_url}) проверил перевод страницы " +"«[{article}]({article_url})»{comment}" #: extensions/base/translate.py:416 #, python-brace-format msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "" -"Изменил состояние переводов страницы \"{article}\" на `{language}` язык" +msgstr "Изменил состояние переводов страницы «{article}» на `{language}` язык" #: extensions/base/translate.py:419 msgid "Old state" @@ -362,9 +362,9 @@ msgid "" "[{author}]({author_url}) changed the state of `{language}` translations of " "[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" msgstr "" -"[{author}]({author_url}) изменил состояние переводов страницы [{article}]" -"({article_url}) на `{language}` язык с `{old_state}` на `{new_state}" -"`{comment}" +"[{author}]({author_url}) изменил состояние переводов страницы " +"«[{article}]({article_url})» на `{language}` язык с `{old_state}` на " +"`{new_state}`{comment}" #: extensions/base/translate.py:439 #, python-brace-format @@ -372,8 +372,8 @@ msgid "" "[{author}]({author_url}) changed the state of `{language}` translations of " "[{article}]({article_url}) to `{new_state}`{comment}" msgstr "" -"[{author}]({author_url}) изменил состояние переводов страницы [{article}]" -"({article_url}) на `{language}` язык на `{new_state}`{comment}" +"[{author}]({author_url}) изменил состояние переводов страницы " +"«[{article}]({article_url})» на `{language}` язык на `{new_state}`{comment}" #: extensions/base/translate.py:452 extensions/base/translate.py:455 msgid "(default)" @@ -398,8 +398,8 @@ msgid "" "[{author}]({author_url}) changed the language of [{article}]({article_url}) " "from {old_lang} to {new_lang}{comment}" msgstr "" -"[{author}]({author_url}) изменил язык страницы [{article}]({article_url}) с " -"{old_lang} на {new_lang}{comment}" +"[{author}]({author_url}) изменил язык страницы «[{article}]({article_url})» " +"с {old_lang} на {new_lang}{comment}" #: extensions/base/discussions.py:148 extensions/base/discussions.py:207 #: extensions/base/discussions.py:245 extensions/base/discussions.py:261 @@ -411,12 +411,12 @@ msgstr "неизвестно" #: extensions/base/discussions.py:157 #, python-brace-format msgid "Created \"{title}\"" -msgstr "Создал \"{title}\"" +msgstr "Создал «{title}»" #: extensions/base/discussions.py:161 #, python-brace-format msgid "Created a poll \"{title}\"" -msgstr "Создал опрос \"{title}\"" +msgstr "Создал опрос «{title}»" #: extensions/base/discussions.py:168 msgid "Option {}" @@ -430,7 +430,7 @@ msgstr "__[Просмотреть изображение]({image_url})__" #: extensions/base/discussions.py:174 #, python-brace-format msgid "Created a quiz \"{title}\"" -msgstr "Создал викторину \"{title}\"" +msgstr "Создал викторину «{title}»" #: extensions/base/discussions.py:193 extensions/base/discussions.py:195 msgctxt "Fandom discussions Tags/Forums" @@ -445,7 +445,7 @@ msgstr "{} меток" #: extensions/base/discussions.py:198 #, python-brace-format msgid "Replied to \"{title}\"" -msgstr "Ответил на \"{title}\"" +msgstr "Ответил на «{title}»" #: extensions/base/discussions.py:214 #, python-brace-format @@ -453,8 +453,8 @@ msgid "" "[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -"[{author}]({author_url}) создал(а) [{title}](<{url}f/p/{threadId}>) в " -"{forumName}" +"[{author}]({author_url}) создал(а) «[{title}](<{url}f/p/{threadId}>)» на " +"странице «{forumName}»" #: extensions/base/discussions.py:217 #, python-brace-format @@ -462,8 +462,8 @@ msgid "" "[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -"[{author}]({author_url}) создал(а) опрос [{title}](<{url}f/p/{threadId}>) в " -"{forumName}" +"[{author}]({author_url}) создал(а) опрос «[{title}](<{url}f/p/{threadId}>)» " +"на странице «{forumName}»" #: extensions/base/discussions.py:220 #, python-brace-format @@ -471,8 +471,8 @@ msgid "" "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " "{forumName}" msgstr "" -"[{author}]({author_url}) создал викторину [{title}](<{url}f/p/{threadId}>) в " -"{forumName}" +"[{author}]({author_url}) создал викторину «[{title}](<{url}f/p/{threadId}>)» " +"на странице «{forumName}»" #: extensions/base/discussions.py:234 #, python-brace-format @@ -481,17 +481,17 @@ msgid "" "to [{title}](<{url}f/p/{threadId}>) in {forumName}" msgstr "" "[{author}]({author_url}) [ответил](<{url}f/p/{threadId}/r/{postId}>) на " -"[{title}](<{url}f/p/{threadId}>) в {forumName}" +"«[{title}](<{url}f/p/{threadId}>)» на странице «{forumName}»" #: extensions/base/discussions.py:292 #, python-brace-format msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "Создал \"{title}\" на Стене Обсуждения Участника {user}" +msgstr "Создал «{title}» на стене обсуждения участника {user}" #: extensions/base/discussions.py:298 #, python-brace-format msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "Ответил на \"{title}\" на Стене Обсуждения Участника {user}" +msgstr "Ответил на «{title}» на стене обсуждения участника {user}" #: extensions/base/discussions.py:312 #, python-brace-format @@ -500,9 +500,9 @@ msgid "" "{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" "Message_Wall:{user_wall}>)" msgstr "" -"[{author}]({author_url}) создал [{title}](<{url}wiki/Message_Wall:" -"{user_wall}?threadId={threadId}>) на [Стене Обсуждения Участника {user}]" -"(<{url}wiki/Message_Wall:{user_wall}>)" +"[{author}]({author_url}) создал «[{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>)» на [стене обсуждения " +"участника {user}](<{url}wiki/Message_Wall:{user_wall}>)" #: extensions/base/discussions.py:318 #, python-brace-format @@ -512,20 +512,20 @@ msgid "" "Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" "(<{url}wiki/Message_Wall:{user_wall}>)" msgstr "" -"[{author}]({author_url}) [ответил](<{url}wiki/Message_Wall:{user_wall}?" -"threadId={threadId}#{replyId}>) на [{title}](<{url}wiki/Message_Wall:" -"{user_wall}?threadId={threadId}>) на [Стене Обсуждения Участника {user}]" -"(<{url}wiki/Message_Wall:{user_wall}>)" +"[{author}]({author_url}) [ответил](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}#{replyId}>) на «[{title}](<{url}" +"wiki/Message_Wall:{user_wall}?threadId={threadId}>)» на [стене обсуждения " +"участника {user}](<{url}wiki/Message_Wall:{user_wall}>)" #: extensions/base/discussions.py:338 #, python-brace-format msgid "Commented on {article}" -msgstr "Оставил Комментарий к статье {article}" +msgstr "Оставил комментарий к статье «{article}»" #: extensions/base/discussions.py:344 #, python-brace-format msgid "Replied to a comment on {article}" -msgstr "Ответил на Комментарий к статье {article}" +msgstr "Ответил на комментарий к статье «{article}»" #: extensions/base/discussions.py:359 #, python-brace-format @@ -533,8 +533,8 @@ msgid "" "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " "on [{article}](<{url}>)" msgstr "" -"[{author}]({author_url}) оставил [комментарий](<{url}?commentId={commentId}" -">) к [{article}](<{url}>)" +"[{author}]({author_url}) оставил [комментарий](<{url}?commentId={commentId}>)" +" к статье «[{article}](<{url}>)»" #: extensions/base/discussions.py:365 #, python-brace-format @@ -543,9 +543,9 @@ msgid "" "&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " "[{article}](<{url}>)" msgstr "" -"[{author}]({author_url}) [ответил](<{url}?commentId={commentId}" -"&replyId={replyId}>) на [комментарий](<{url}?commentId={commentId}>) к " -"[{article}](<{url}>)" +"[{author}]({author_url}) " +"[ответил](<{url}?commentId={commentId}&replyId={replyId}>) на " +"[комментарий](<{url}?commentId={commentId}>) к статье «[{article}](<{url}>)»" #: extensions/base/managewiki.py:34 msgid "Changed wiki settings" @@ -559,7 +559,7 @@ msgstr "[{author}]({author_url}) изменил настройки вики{reas #: extensions/base/managewiki.py:55 #, python-brace-format msgid "Deleted a \"{wiki}\" wiki" -msgstr "Удалил вики \"{wiki}\"" +msgstr "Удалил вики «{wiki}»" #: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 #: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 @@ -579,33 +579,33 @@ msgstr "Неизвестно" #: extensions/base/managewiki.py:63 #, python-brace-format msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) удалил вики *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) удалил вики «*{wiki_name}*»{comment}" #: extensions/base/managewiki.py:80 #, python-brace-format msgid "Deleted a \"{group}\" user group" -msgstr "Удалил группу \"{group}\"" +msgstr "Удалил группу «{group}»" #: extensions/base/managewiki.py:89 #, python-brace-format msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" msgstr "" -"[{author}]({author_url}) удалил группу пользователей *{group}*{comment}" +"[{author}]({author_url}) удалил группу пользователей «*{group}*»{comment}" #: extensions/base/managewiki.py:103 #, python-brace-format msgid "Locked a \"{wiki}\" wiki" -msgstr "Заблокировал вики \"{wiki}\"" +msgstr "Заблокировал вики «{wiki}»" #: extensions/base/managewiki.py:111 #, python-brace-format msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) заблокировал вики *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) заблокировал вики «*{wiki_name}*»{comment}" #: extensions/base/managewiki.py:124 #, python-brace-format msgid "Modified \"{namespace_name}\" namespace" -msgstr "Изменил пространство имён \"{namespace_name}\"" +msgstr "Изменил пространство имён «{namespace_name}»" #: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 msgid "Wiki" @@ -617,13 +617,13 @@ msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" msgstr "" -"[{author}]({author_url}) изменил пространство имён *{namespace_name}* на " -"вики *{wiki_name}*{comment}" +"[{author}]({author_url}) изменил пространство имён «*{namespace_name}*» на " +"вики «*{wiki_name}*»{comment}" #: extensions/base/managewiki.py:147 #, python-brace-format msgid "Deleted a \"{namespace_name}\" namespace" -msgstr "Удалил пространство имён \"{namespace_name}\"" +msgstr "Удалил пространство имён «{namespace_name}»" #: extensions/base/managewiki.py:158 #, python-brace-format @@ -631,59 +631,58 @@ msgid "" "[{author}]({author_url}) deleted a namespace *{namespace_name}* on " "*{wiki_name}*{comment}" msgstr "" -"[{author}]({author_url}) удалил пространство имён *{namespace_name}* на вики " -"*{wiki_name}*{comment}" +"[{author}]({author_url}) удалил пространство имён «*{namespace_name}*» на " +"вики «*{wiki_name}*»{comment}" #: extensions/base/managewiki.py:173 #, python-brace-format msgid "Modified \"{usergroup_name}\" usergroup" -msgstr "Изменил группу \"{usergroup_name}\"" +msgstr "Изменил группу «{usergroup_name}»" #: extensions/base/managewiki.py:182 #, python-brace-format msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" -msgstr "" -"[{author}]({author_url}) изменил группу пользователей *{group_name}*{comment}" +msgstr "[{author}]({author_url}) изменил группу «*{group_name}*»{comment}" #: extensions/base/managewiki.py:195 #, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" -msgstr "Восстановил вики \"{wiki}\"" +msgstr "Восстановил вики «{wiki}»" #: extensions/base/managewiki.py:203 #, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) восстановил вики *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) восстановил вики «*{wiki_name}*»{comment}" #: extensions/base/managewiki.py:217 #, python-brace-format msgid "Unlocked a \"{wiki}\" wiki" -msgstr "Разблокировал вики \"{wiki}\"" +msgstr "Разблокировал вики «{wiki}»" #: extensions/base/managewiki.py:225 #, python-brace-format msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) разблокировал вики *{wiki_name}*{comment}" +msgstr "[{author}]({author_url}) разблокировал вики «*{wiki_name}*»{comment}" #: extensions/base/datadump.py:36 #, python-brace-format msgid "Generated {file} dump" -msgstr "Сгенерировал дамп {file}" +msgstr "Сгенерировал дамп для «{file}»" #: extensions/base/datadump.py:45 #, python-brace-format msgid "[{author}]({author_url}) generated *{file}* dump{comment}" -msgstr "[{author}]({author_url}) сгенерировал дамп *{file}*{comment}" +msgstr "[{author}]({author_url}) сгенерировал дамп для «*{file}*»{comment}" #: extensions/base/datadump.py:58 #, python-brace-format msgid "Deleted {file} dump" -msgstr "Удалил дамп {file}" +msgstr "Удалил дамп для «{file}»" #: extensions/base/datadump.py:67 #, python-brace-format msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" -msgstr "[{author}]({author_url}) удалил дамп *{file}*{comment}" +msgstr "[{author}]({author_url}) удалил дамп для «*{file}*»{comment}" #: extensions/base/curseprofile.py:40 #, python-brace-format @@ -702,7 +701,7 @@ msgstr "Очистил поле «{field}»" #: extensions/base/curseprofile.py:46 #, python-brace-format msgid "{field} field changed to: {desc}" -msgstr "Поле «{field}» изменено на: {desc}" +msgstr "Поле «{field}» изменено на: «{desc}»" #: extensions/base/curseprofile.py:58 #, python-brace-format @@ -710,7 +709,7 @@ msgid "" "[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " "profile." msgstr "" -"[{author}]({author_url}) отредактировал поле «{field}» на профиле участника " +"[{author}]({author_url}) отредактировал поле «{field}» в профиле участника " "[{target}]({target_url})." #: extensions/base/curseprofile.py:60 @@ -719,7 +718,7 @@ msgid "" "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " "profile. *({desc})*" msgstr "" -"[{author}]({author_url}) отредактировал поле «{field}» на профиле участника " +"[{author}]({author_url}) отредактировал поле «{field}» в профиле участника " "[{target}]({target_url}). *({desc})*" #: extensions/base/curseprofile.py:65 @@ -728,8 +727,8 @@ msgid "" "[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " "profile." msgstr "" -"[{author}]({author_url}) отредактировал поле «{field}» на [своём " -"собственном]({target_url}) профиле." +"[{author}]({author_url}) отредактировал поле «{field}» в " +"[своём]({target_url}) профиле." #: extensions/base/curseprofile.py:67 #, python-brace-format @@ -737,24 +736,24 @@ msgid "" "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " "profile. *({desc})*" msgstr "" -"[{author}]({author_url}) отредактировал поле «{field}» на [своём собственном]" -"({target_url}) профиле. *({desc})*" +"[{author}]({author_url}) отредактировал поле «{field}» в " +"[своём]({target_url}) профиле. *({desc})*" #: extensions/base/curseprofile.py:82 #, python-brace-format msgid "Left a comment on {target}'s profile" -msgstr "Оставил комментарий на профиле участника {target}" +msgstr "Оставил комментарий в профиле участника {target}" #: extensions/base/curseprofile.py:84 msgid "Left a comment on their own profile" -msgstr "Оставил комментарий на своём профиле" +msgstr "Оставил комментарий в своём профиле" #: extensions/base/curseprofile.py:97 #, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." msgstr "" -"[{author}]({author_url}) оставил [комментарий]({comment}) на профиле " +"[{author}]({author_url}) оставил [комментарий]({comment}) в профиле " "участника {target}." #: extensions/base/curseprofile.py:100 @@ -762,24 +761,23 @@ msgstr "" msgid "" "[{author}]({author_url}) left a [comment]({comment}) on their own profile." msgstr "" -"[{author}]({author_url}) оставил [комментарий]({comment}) на своём " -"собственном профиле." +"[{author}]({author_url}) оставил [комментарий]({comment}) в своём профиле." #: extensions/base/curseprofile.py:113 #, python-brace-format msgid "Edited a comment on {target}'s profile" -msgstr "Отредактировал комментарий на профиле участника {target}" +msgstr "Отредактировал комментарий в профиле участника {target}" #: extensions/base/curseprofile.py:115 msgid "Edited a comment on their own profile" -msgstr "Отредактировал комментарий на своём профиле" +msgstr "Отредактировал комментарий в своём профиле" #: extensions/base/curseprofile.py:128 #, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." msgstr "" -"[{author}]({author_url}) отредактировал [комментарий]({comment}) на профиле " +"[{author}]({author_url}) отредактировал [комментарий]({comment}) в профиле " "участника {target}." #: extensions/base/curseprofile.py:131 @@ -787,17 +785,17 @@ msgstr "" msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on their own profile." msgstr "" -"[{author}]({author_url}) отредактировал [комментарий]({comment}) на своём " -"собственном профиле." +"[{author}]({author_url}) отредактировал [комментарий]({comment}) в своём " +"профиле." #: extensions/base/curseprofile.py:144 #, python-brace-format msgid "Replied to a comment on {target}'s profile" -msgstr "Ответил на комментарий на профиле участника {target}" +msgstr "Ответил на комментарий в профиле участника {target}" #: extensions/base/curseprofile.py:146 msgid "Replied to a comment on their own profile" -msgstr "Ответил на комментарий на своём профиле" +msgstr "Ответил на комментарий в своём профиле" #: extensions/base/curseprofile.py:159 #, python-brace-format @@ -805,7 +803,7 @@ msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " "profile." msgstr "" -"[{author}]({author_url}) ответил на [комментарий]({comment}) на профиле " +"[{author}]({author_url}) ответил на [комментарий]({comment}) в профиле " "участника {target}." #: extensions/base/curseprofile.py:162 @@ -814,17 +812,16 @@ msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on their own " "profile." msgstr "" -"[{author}]({author_url}) ответил на [комментарий]({comment}) на своём " -"собственном профиле." +"[{author}]({author_url}) ответил на [комментарий]({comment}) в своём профиле." #: extensions/base/curseprofile.py:175 #, python-brace-format msgid "Deleted a comment on {target}'s profile" -msgstr "Удалил комментарий на профиле участника {target}" +msgstr "Удалил комментарий в профиле участника {target}" #: extensions/base/curseprofile.py:177 msgid "Deleted a comment on their own profile" -msgstr "Удалил комментарий на своём профиле" +msgstr "Удалил комментарий в своём профиле" #: extensions/base/curseprofile.py:197 #, python-brace-format @@ -832,8 +829,8 @@ msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " "profile.{reason}" msgstr "" -"[{author}]({author_url}) удалил [комментарий]({comment}) на профиле " -"участника {target}.{reason}" +"[{author}]({author_url}) удалил [комментарий]({comment}) в профиле участника " +"{target}.{reason}" #: extensions/base/curseprofile.py:200 #, python-brace-format @@ -841,17 +838,17 @@ msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." "{reason}" msgstr "" -"[{author}]({author_url}) удалил [комментарий]({comment}) на своём " -"собственном профиле.{reason}" +"[{author}]({author_url}) удалил [комментарий]({comment}) в своём " +"профиле.{reason}" #: extensions/base/curseprofile.py:214 #, python-brace-format msgid "Purged a comment on {target}'s profile" -msgstr "Навсегда удалил комментарий на профиле {target}" +msgstr "Навсегда удалил комментарий в профиле участника {target}" #: extensions/base/curseprofile.py:216 msgid "Purged a comment on their own profile" -msgstr "Навсегда удалил комментарий на своём профиле" +msgstr "Навсегда удалил комментарий в своём профиле" #: extensions/base/curseprofile.py:230 #, python-brace-format @@ -859,7 +856,7 @@ msgid "" "[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." "{reason}" msgstr "" -"[{author}]({author_url}) навсегда удалил комментарий на профиле " +"[{author}]({author_url}) навсегда удалил комментарий в профиле участника " "[{target}]({link}).{reason}" #: extensions/base/curseprofile.py:233 @@ -868,24 +865,21 @@ msgid "" "[{author}]({author_url}) purged a comment on [their own]({link}) profile." "{reason}" msgstr "" -"[{author}]({author_url}) навсегда удалил комментарий на [своём " -"собственном]({link}) профиле.{reason}" +"[{author}]({author_url}) навсегда удалил комментарий в [своём]({link}) " +"профиле.{reason}" #: extensions/base/renameuser.py:38 #, python-brace-format msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" -msgstr[0] "" -"Переименовал участника \"{old_name}\" с {edits} правкой в \"{new_name}\"" -msgstr[1] "" -"Переименовал участника \"{old_name}\" с {edits} правками в \"{new_name}\"" -msgstr[2] "" -"Переименовал участника \"{old_name}\" с {edits} правками в \"{new_name}\"" +msgstr[0] "Переименовал участника {old_name} с {edits} правкой в {new_name}" +msgstr[1] "Переименовал участника {old_name} с {edits} правками в {new_name}" +msgstr[2] "Переименовал участника {old_name} с {edits} правками в {new_name}" #: extensions/base/renameuser.py:43 #, python-brace-format msgid "Renamed user \"{old_name}\" to \"{new_name}\"" -msgstr "Переименовал участника \"{old_name}\" в \"{new_name}\"" +msgstr "Переименовал участника {old_name} в {new_name}" #: extensions/base/renameuser.py:58 #, python-brace-format @@ -916,7 +910,7 @@ msgstr "" #: extensions/base/interwiki.py:37 msgid "Added an entry to the interwiki table" -msgstr "Добавил запись в таблицу префиксов интервики" +msgstr "Добавил запись в таблицу интервики" #: extensions/base/interwiki.py:38 extensions/base/interwiki.py:65 #, python-brace-format @@ -934,7 +928,7 @@ msgstr "" #: extensions/base/interwiki.py:64 msgid "Edited an entry in interwiki table" -msgstr "Отредактировал запись в таблице префиксов интервики" +msgstr "Отредактировал запись в таблице интервики" #: extensions/base/interwiki.py:77 #, python-brace-format @@ -947,7 +941,7 @@ msgstr "" #: extensions/base/interwiki.py:91 msgid "Deleted an entry in interwiki table" -msgstr "Удалил запись из таблицы префиксов интервики" +msgstr "Удалил запись из таблицы интервики" #: extensions/base/interwiki.py:92 #, python-brace-format From 0ed536aebc0a30bb6b84290b91aefc1e310b4649 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 18:08:54 +0200 Subject: [PATCH 134/173] Updating translation files with changes from new MR --- locale/de/LC_MESSAGES/formatters.po | 167 ++++++++------- locale/es/LC_MESSAGES/formatters.po | 146 ++++++++------ locale/fr/LC_MESSAGES/formatters.po | 146 ++++++++------ locale/hi/LC_MESSAGES/formatters.po | 162 ++++++++------- locale/lol/LC_MESSAGES/formatters.po | 145 +++++++------ locale/pl/LC_MESSAGES/formatters.po | 148 ++++++++------ locale/pt-br/LC_MESSAGES/formatters.po | 146 ++++++++------ locale/ru/LC_MESSAGES/formatters.po | 247 +++++++++++++---------- locale/templates/formatters.pot | 143 +++++++------ locale/templates/misc.pot | 2 +- locale/templates/rcgcdw.pot | 2 +- locale/templates/redaction.pot | 2 +- locale/uk/LC_MESSAGES/formatters.po | 148 ++++++++------ locale/zh-hans/LC_MESSAGES/formatters.po | 154 ++++++++------ locale/zh-hant/LC_MESSAGES/formatters.po | 144 +++++++------ 15 files changed, 1082 insertions(+), 820 deletions(-) diff --git a/locale/de/LC_MESSAGES/formatters.po b/locale/de/LC_MESSAGES/formatters.po index a3fdcc9..63cc6a8 100644 --- a/locale/de/LC_MESSAGES/formatters.po +++ b/locale/de/LC_MESSAGES/formatters.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-21 21:20+0200\n" +"POT-Creation-Date: 2021-05-22 18:03+0200\n" "PO-Revision-Date: 2021-05-22 16:00+0000\n" "Last-Translator: MarkusRost \n" "Language-Team: German \n" "Language-Team: Spanish \n" "Language-Team: \n" @@ -1055,35 +1055,40 @@ msgid "" "({sign}{edit_size}){bold}" msgstr "Création d'une feuille de sprite pour {article}" -#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +#: extensions/base/mediawiki.py:190 extensions/base/mediawiki.py:223 msgid "Options" msgstr "Options" -#: extensions/base/mediawiki.py:191 +#: extensions/base/mediawiki.py:190 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "([Aperçu]({link}) | [Annuler]({undolink}))" -#: extensions/base/mediawiki.py:196 +#: extensions/base/mediawiki.py:195 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "Téléversement d'une nouvelle version de {name}" -#: extensions/base/mediawiki.py:198 +#: extensions/base/mediawiki.py:197 #, python-brace-format msgid "Reverted a version of {name}" msgstr "Rétablissement d'une version de {name}" -#: extensions/base/mediawiki.py:200 +#: extensions/base/mediawiki.py:199 #, python-brace-format msgid "Uploaded {name}" msgstr "Téléversement de {name}" -#: extensions/base/mediawiki.py:209 +#: extensions/base/mediawiki.py:208 msgid "**No license!**" msgstr "**Aucune license!**" -#: extensions/base/mediawiki.py:224 +#: extensions/base/mediawiki.py:223 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([Aperçu]({link}))" + +#: extensions/base/mediawiki.py:228 msgid "" "\n" "License: {}" @@ -1091,11 +1096,6 @@ msgstr "" "\n" "License: {}" -#: extensions/base/mediawiki.py:226 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "([Aperçu]({link}))" - #: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" @@ -1314,27 +1314,27 @@ msgstr[1] "minutes" msgid "for {time_number} {time_unit}" msgstr "" -#: extensions/base/mediawiki.py:610 +#: extensions/base/mediawiki.py:609 msgid "Blocked from editing the following pages: " msgstr "Ne peut plus modifier les pages suivantes : " -#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +#: extensions/base/mediawiki.py:616 extensions/base/mediawiki.py:662 msgid " and namespaces: " msgstr " et ces espaces de noms: " -#: extensions/base/mediawiki.py:619 +#: extensions/base/mediawiki.py:618 msgid "Blocked from editing pages on following namespaces: " msgstr "Ne peut plus modifier les pages des espaces de noms suivants : " -#: extensions/base/mediawiki.py:630 +#: extensions/base/mediawiki.py:629 msgid "Partial block details" msgstr "Détails partiaux du blocage" -#: extensions/base/mediawiki.py:633 +#: extensions/base/mediawiki.py:632 msgid "Block flags" msgstr "" -#: extensions/base/mediawiki.py:635 +#: extensions/base/mediawiki.py:634 #, fuzzy, python-brace-format msgid "Blocked {blocked_user} {time}" msgstr "{blocked_user} a été bloqué pour {time}" @@ -1428,51 +1428,71 @@ msgstr[1] "Modification des paramètres de blocage pour {blocked_user}" msgid " (until {date_and_time})" msgstr "" -#: extensions/base/mediawiki.py:836 +#: extensions/base/mediawiki.py:835 #, python-brace-format msgid "Changed group membership for {target}" msgstr "Modification des groupes pour {target}" -#: extensions/base/mediawiki.py:839 +#: extensions/base/mediawiki.py:837 msgid "System" msgstr "Système" -#: extensions/base/mediawiki.py:840 +#: extensions/base/mediawiki.py:838 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "{target} a été auto-promu dans un nouveau groupe" +#: extensions/base/mediawiki.py:844 +msgid "Added groups" +msgid_plural "Added group" +msgstr[0] "" +msgstr[1] "" + #: extensions/base/mediawiki.py:846 -#, python-brace-format -msgid "" -"{reason}\n" -"{added}{linebreak}{removed}" -msgstr "" +#, fuzzy +msgid "Removed groups" +msgid_plural "Removed group" +msgstr[0] "Retirés" +msgstr[1] "Retirés" #: extensions/base/mediawiki.py:860 +#, python-brace-format +msgid "Added to {added} and removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 +#: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 +msgid ", " +msgstr "" + +#: extensions/base/mediawiki.py:863 +#, python-brace-format +msgid "Added to {added}." +msgstr "" + +#: extensions/base/mediawiki.py:865 +#, fuzzy, python-brace-format +msgid "Removed from {removed}." +msgstr "Retirés" + +#: extensions/base/mediawiki.py:866 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) {added}{comma} {removed}{comment}" +"({target_url}): {group_changes}{comment}" msgstr "Modification de la visibilité d'une révision de la page {article} " -#: extensions/base/mediawiki.py:864 +#: extensions/base/mediawiki.py:870 #, fuzzy, python-brace-format -msgid "" -"System autopromoted [{target}]({target_url}) {added}{comma} {removed}" -"{comment}" +msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" msgstr "Modification de la visibilité d'une révision de la page {article} " -#: extensions/base/mediawiki.py:866 -msgid "," -msgstr "" - -#: extensions/base/mediawiki.py:877 +#: extensions/base/mediawiki.py:883 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "Fusion de l'historique de {article} vers {dest}" -#: extensions/base/mediawiki.py:891 +#: extensions/base/mediawiki.py:897 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -1480,116 +1500,116 @@ msgid "" msgstr "" "Transfert des paramètres de protection de {redirect}{article} vers {title}" -#: extensions/base/mediawiki.py:905 +#: extensions/base/mediawiki.py:911 msgid "Created account automatically" msgstr "" -#: extensions/base/mediawiki.py:912 +#: extensions/base/mediawiki.py:918 #, fuzzy, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" -#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +#: extensions/base/mediawiki.py:931 extensions/base/mediawiki.py:996 msgid "Created account" msgstr "" -#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 +#: extensions/base/mediawiki.py:938 extensions/base/mediawiki.py:1003 #, fuzzy, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" -#: extensions/base/mediawiki.py:944 +#: extensions/base/mediawiki.py:950 #, fuzzy, python-brace-format msgid "Created account {article}" msgstr "Suppression de la page {article}" -#: extensions/base/mediawiki.py:953 +#: extensions/base/mediawiki.py:959 #, fuzzy, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" "{comment}" msgstr "Modification de la visibilité d'une révision de la page {article} " -#: extensions/base/mediawiki.py:966 +#: extensions/base/mediawiki.py:972 #, python-brace-format msgid "Created account {article} and password was sent by email" msgstr "" -#: extensions/base/mediawiki.py:977 +#: extensions/base/mediawiki.py:983 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " "and password was sent by email{comment}" msgstr "" -#: extensions/base/mediawiki.py:1009 +#: extensions/base/mediawiki.py:1015 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "Modification du modèle de contenu de l'article {article}" -#: extensions/base/mediawiki.py:1011 +#: extensions/base/mediawiki.py:1017 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Modèle changé de {old} à {new}: {reason}" -#: extensions/base/mediawiki.py:1023 +#: extensions/base/mediawiki.py:1029 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "Modification de la visibilité d'une révision de la page {article} " -#: extensions/base/mediawiki.py:1038 +#: extensions/base/mediawiki.py:1044 #, python-brace-format msgid "Created the page {article} using a non-default content model" msgstr "" -#: extensions/base/mediawiki.py:1040 +#: extensions/base/mediawiki.py:1046 #, fuzzy, python-brace-format msgid "Created with model {new}: {reason}" msgstr "Modèle changé de {old} à {new}: {reason}" -#: extensions/base/mediawiki.py:1051 +#: extensions/base/mediawiki.py:1057 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " "non-default content model {new}{comment}" msgstr "Modification de la visibilité d'une révision de la page {article} " -#: extensions/base/mediawiki.py:1066 +#: extensions/base/mediawiki.py:1072 #, fuzzy, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "Création du tag « {tag} »" -#: extensions/base/mediawiki.py:1076 +#: extensions/base/mediawiki.py:1082 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" -#: extensions/base/mediawiki.py:1098 +#: extensions/base/mediawiki.py:1103 #, fuzzy, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "Suppression du tag « {tag} »" -#: extensions/base/mediawiki.py:1100 +#: extensions/base/mediawiki.py:1105 #, fuzzy msgid "Removed from" msgstr "Retirés" -#: extensions/base/mediawiki.py:1100 +#: extensions/base/mediawiki.py:1105 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:1112 +#: extensions/base/mediawiki.py:1118 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) a supprimé le tableau Cargo « {table} »" -#: extensions/base/mediawiki.py:1122 +#: extensions/base/mediawiki.py:1128 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -1600,23 +1620,23 @@ msgid_plural "" msgstr[0] "Modification des paramètres de blocage pour {blocked_user}" msgstr[1] "Modification des paramètres de blocage pour {blocked_user}" -#: extensions/base/mediawiki.py:1139 +#: extensions/base/mediawiki.py:1145 #, fuzzy, python-brace-format msgid "Activated the tag \"{tag}\"" msgstr "Activation du tag « {tag} »" -#: extensions/base/mediawiki.py:1148 +#: extensions/base/mediawiki.py:1154 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) a créé le tableau Cargo « {table} »" -#: extensions/base/mediawiki.py:1167 +#: extensions/base/mediawiki.py:1173 #, fuzzy, python-brace-format msgid "Deactivated the tag \"{tag}\"" msgstr "Désactivation du tag « {tag} »" -#: extensions/base/mediawiki.py:1176 +#: extensions/base/mediawiki.py:1182 #, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" diff --git a/locale/hi/LC_MESSAGES/formatters.po b/locale/hi/LC_MESSAGES/formatters.po index 3b3049b..a46e43d 100644 --- a/locale/hi/LC_MESSAGES/formatters.po +++ b/locale/hi/LC_MESSAGES/formatters.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-21 21:20+0200\n" +"POT-Creation-Date: 2021-05-22 18:03+0200\n" "PO-Revision-Date: 2020-12-30 13:26+0000\n" "Last-Translator: Creeper \n" "Language-Team: Hindi \n" "Language-Team: Polish \n" "Language-Team: Portuguese (Brazil) \n" "Language-Team: Russian ) on [{user}'s Message Wall](<{url}wiki/" "Message_Wall:{user_wall}>)" msgstr "" -"[{author}]({author_url}) создал «[{title}](<{url}wiki/" -"Message_Wall:{user_wall}?threadId={threadId}>)» на [стене обсуждения " -"участника {user}](<{url}wiki/Message_Wall:{user_wall}>)" +"[{author}]({author_url}) создал «[{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>)» на [стене обсуждения участника {user}]" +"(<{url}wiki/Message_Wall:{user_wall}>)" #: extensions/base/discussions.py:318 #, python-brace-format @@ -512,10 +512,10 @@ msgid "" "Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" "(<{url}wiki/Message_Wall:{user_wall}>)" msgstr "" -"[{author}]({author_url}) [ответил](<{url}wiki/" -"Message_Wall:{user_wall}?threadId={threadId}#{replyId}>) на «[{title}](<{url}" -"wiki/Message_Wall:{user_wall}?threadId={threadId}>)» на [стене обсуждения " -"участника {user}](<{url}wiki/Message_Wall:{user_wall}>)" +"[{author}]({author_url}) [ответил](<{url}wiki/Message_Wall:{user_wall}?" +"threadId={threadId}#{replyId}>) на «[{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>)» на [стене обсуждения участника {user}]" +"(<{url}wiki/Message_Wall:{user_wall}>)" #: extensions/base/discussions.py:338 #, python-brace-format @@ -533,8 +533,8 @@ msgid "" "[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " "on [{article}](<{url}>)" msgstr "" -"[{author}]({author_url}) оставил [комментарий](<{url}?commentId={commentId}>)" -" к статье «[{article}](<{url}>)»" +"[{author}]({author_url}) оставил [комментарий](<{url}?commentId={commentId}" +">) к статье «[{article}](<{url}>)»" #: extensions/base/discussions.py:365 #, python-brace-format @@ -543,9 +543,9 @@ msgid "" "&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " "[{article}](<{url}>)" msgstr "" -"[{author}]({author_url}) " -"[ответил](<{url}?commentId={commentId}&replyId={replyId}>) на " -"[комментарий](<{url}?commentId={commentId}>) к статье «[{article}](<{url}>)»" +"[{author}]({author_url}) [ответил](<{url}?commentId={commentId}" +"&replyId={replyId}>) на [комментарий](<{url}?commentId={commentId}>) к " +"статье «[{article}](<{url}>)»" #: extensions/base/managewiki.py:34 msgid "Changed wiki settings" @@ -727,8 +727,8 @@ msgid "" "[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " "profile." msgstr "" -"[{author}]({author_url}) отредактировал поле «{field}» в " -"[своём]({target_url}) профиле." +"[{author}]({author_url}) отредактировал поле «{field}» в [своём]" +"({target_url}) профиле." #: extensions/base/curseprofile.py:67 #, python-brace-format @@ -736,8 +736,8 @@ msgid "" "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " "profile. *({desc})*" msgstr "" -"[{author}]({author_url}) отредактировал поле «{field}» в " -"[своём]({target_url}) профиле. *({desc})*" +"[{author}]({author_url}) отредактировал поле «{field}» в [своём]" +"({target_url}) профиле. *({desc})*" #: extensions/base/curseprofile.py:82 #, python-brace-format @@ -838,8 +838,8 @@ msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." "{reason}" msgstr "" -"[{author}]({author_url}) удалил [комментарий]({comment}) в своём " -"профиле.{reason}" +"[{author}]({author_url}) удалил [комментарий]({comment}) в своём профиле." +"{reason}" #: extensions/base/curseprofile.py:214 #, python-brace-format @@ -1144,35 +1144,40 @@ msgstr "" "[{author}]({author_url}) создал страницу [{article}]({edit_link}){comment} " "{bold}({sign}{edit_size}){bold}" -#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +#: extensions/base/mediawiki.py:190 extensions/base/mediawiki.py:223 msgid "Options" msgstr "Настройки" -#: extensions/base/mediawiki.py:191 +#: extensions/base/mediawiki.py:190 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "([просмотр]({link}) | [отмена]({undolink}))" -#: extensions/base/mediawiki.py:196 +#: extensions/base/mediawiki.py:195 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "Загрузил новую версию {name}" -#: extensions/base/mediawiki.py:198 +#: extensions/base/mediawiki.py:197 #, python-brace-format msgid "Reverted a version of {name}" msgstr "Возвратил версию {name}" -#: extensions/base/mediawiki.py:200 +#: extensions/base/mediawiki.py:199 #, python-brace-format msgid "Uploaded {name}" msgstr "Загрузил {name}" -#: extensions/base/mediawiki.py:209 +#: extensions/base/mediawiki.py:208 msgid "**No license!**" msgstr "**Отсутствует лицензия!**" -#: extensions/base/mediawiki.py:224 +#: extensions/base/mediawiki.py:223 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "([просмотр]({link}))" + +#: extensions/base/mediawiki.py:228 msgid "" "\n" "License: {}" @@ -1180,11 +1185,6 @@ msgstr "" "\n" "Лицензия: {}" -#: extensions/base/mediawiki.py:226 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "([просмотр]({link}))" - #: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" @@ -1424,28 +1424,28 @@ msgstr[2] "минут" msgid "for {time_number} {time_unit}" msgstr "на {time_number} {time_unit}" -#: extensions/base/mediawiki.py:610 +#: extensions/base/mediawiki.py:609 msgid "Blocked from editing the following pages: " msgstr "Заблокирован от редактирования в следующих страницах: " -#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +#: extensions/base/mediawiki.py:616 extensions/base/mediawiki.py:662 msgid " and namespaces: " msgstr " и в пространствах имён: " -#: extensions/base/mediawiki.py:619 +#: extensions/base/mediawiki.py:618 msgid "Blocked from editing pages on following namespaces: " msgstr "" "Заблокирован от редактирования на страницах в следующих пространствах имён: " -#: extensions/base/mediawiki.py:630 +#: extensions/base/mediawiki.py:629 msgid "Partial block details" msgstr "Частичные детали блокировки" -#: extensions/base/mediawiki.py:633 +#: extensions/base/mediawiki.py:632 msgid "Block flags" msgstr "Флаги блокировки" -#: extensions/base/mediawiki.py:635 +#: extensions/base/mediawiki.py:634 #, python-brace-format msgid "Blocked {blocked_user} {time}" msgstr "Заблокировал участника {blocked_user} {time}" @@ -1561,58 +1561,79 @@ msgstr[2] "" msgid " (until {date_and_time})" msgstr " (до {date_and_time})" -#: extensions/base/mediawiki.py:836 +#: extensions/base/mediawiki.py:835 #, python-brace-format msgid "Changed group membership for {target}" msgstr "Изменил членство в группах для участника {target}" -#: extensions/base/mediawiki.py:839 +#: extensions/base/mediawiki.py:837 msgid "System" msgstr "Система" -#: extensions/base/mediawiki.py:840 +#: extensions/base/mediawiki.py:838 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "Участник {target} был автоматически повышен до новой группы участников" +#: extensions/base/mediawiki.py:844 +msgid "Added groups" +msgid_plural "Added group" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + #: extensions/base/mediawiki.py:846 -#, python-brace-format -msgid "" -"{reason}\n" -"{added}{linebreak}{removed}" -msgstr "" -"{reason}\n" -"{added}{linebreak}{removed}" +#, fuzzy +msgid "Removed groups" +msgid_plural "Removed group" +msgstr[0] "Удалено" +msgstr[1] "Удалено" +msgstr[2] "Удалено" #: extensions/base/mediawiki.py:860 #, python-brace-format +msgid "Added to {added} and removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 +#: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 +#, fuzzy +msgid ", " +msgstr "," + +#: extensions/base/mediawiki.py:863 +#, python-brace-format +msgid "Added to {added}." +msgstr "" + +#: extensions/base/mediawiki.py:865 +#, fuzzy, python-brace-format +msgid "Removed from {removed}." +msgstr "Удалено" + +#: extensions/base/mediawiki.py:866 +#, fuzzy, python-brace-format msgid "" "[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) {added}{comma} {removed}{comment}" +"({target_url}): {group_changes}{comment}" msgstr "" "[{author}]({author_url}) изменил членство в группах для участника [{target}]" "({target_url}) {added}{comma} {removed}{comment}" -#: extensions/base/mediawiki.py:864 -#, python-brace-format -msgid "" -"System autopromoted [{target}]({target_url}) {added}{comma} {removed}" -"{comment}" +#: extensions/base/mediawiki.py:870 +#, fuzzy, python-brace-format +msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" msgstr "" "Членство в группах для участника [{target}]({target_url}) было автоматически " "изменено системой: {added}{comma} {removed}{comment}" -#: extensions/base/mediawiki.py:866 -msgid "," -msgstr "," - -#: extensions/base/mediawiki.py:877 +#: extensions/base/mediawiki.py:883 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "" "Объединил историю правок страницы «{article}» с историей правок «{dest}»" -#: extensions/base/mediawiki.py:891 +#: extensions/base/mediawiki.py:897 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -1621,30 +1642,30 @@ msgstr "" "[{author}]({author_url}) объединил истории версий [{article}]({article_url}) " "с [{dest}]({dest_url}){comment}" -#: extensions/base/mediawiki.py:905 +#: extensions/base/mediawiki.py:911 msgid "Created account automatically" msgstr "Учетная запись была создана автоматически" -#: extensions/base/mediawiki.py:912 +#: extensions/base/mediawiki.py:918 #, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "Учётная запись [{author}]({author_url}) была автоматически создана" -#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +#: extensions/base/mediawiki.py:931 extensions/base/mediawiki.py:996 msgid "Created account" msgstr "Создана учётная запись" -#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 +#: extensions/base/mediawiki.py:938 extensions/base/mediawiki.py:1003 #, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "Учётная запись [{author}]({author_url}) была создана" -#: extensions/base/mediawiki.py:944 +#: extensions/base/mediawiki.py:950 #, python-brace-format msgid "Created account {article}" msgstr "Создана учетная запись {article}" -#: extensions/base/mediawiki.py:953 +#: extensions/base/mediawiki.py:959 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" @@ -1653,13 +1674,13 @@ msgstr "" "Учётная запись [{article}]({article_url}) была создана [{author}]" "({author_url}){comment}" -#: extensions/base/mediawiki.py:966 +#: extensions/base/mediawiki.py:972 #, python-brace-format msgid "Created account {article} and password was sent by email" msgstr "" "Создана учетная запись {article} и пароль был отправлен на электронную почту" -#: extensions/base/mediawiki.py:977 +#: extensions/base/mediawiki.py:983 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " @@ -1668,17 +1689,17 @@ msgstr "" "Учётная запись [{article}]({article_url}) была создана [{author}]" "({author_url}) и пароль был отправлен на электронную почту{comment}" -#: extensions/base/mediawiki.py:1009 +#: extensions/base/mediawiki.py:1015 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "Изменил модель содержимого для страницы «{article}»" -#: extensions/base/mediawiki.py:1011 +#: extensions/base/mediawiki.py:1017 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Модель изменена с «{old}» на «{new}»: {reason}" -#: extensions/base/mediawiki.py:1023 +#: extensions/base/mediawiki.py:1029 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -1687,18 +1708,18 @@ msgstr "" "[{author}]({author_url}) изменил модель содержимого страницы [{article}]" "({article_url}) с {old} на {new}{comment}" -#: extensions/base/mediawiki.py:1038 +#: extensions/base/mediawiki.py:1044 #, python-brace-format msgid "Created the page {article} using a non-default content model" msgstr "" "Создал страницу {article} с использованием нестандартной модели содержимого" -#: extensions/base/mediawiki.py:1040 +#: extensions/base/mediawiki.py:1046 #, python-brace-format msgid "Created with model {new}: {reason}" msgstr "Создал с использованием модели содержимого {new}: {reason}" -#: extensions/base/mediawiki.py:1051 +#: extensions/base/mediawiki.py:1057 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " @@ -1707,40 +1728,40 @@ msgstr "" "[{author}]({author_url}) создал страницу [{article}]({article_url}) с " "использованием нестандартной модели содержимого {new}{comment}" -#: extensions/base/mediawiki.py:1066 +#: extensions/base/mediawiki.py:1072 #, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "Создал метку «{tag}»" -#: extensions/base/mediawiki.py:1076 +#: extensions/base/mediawiki.py:1082 #, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) создал [метку]({tag_url}) \"{tag}\"{comment}" -#: extensions/base/mediawiki.py:1098 +#: extensions/base/mediawiki.py:1103 #, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "Удалил метку «{tag}»" -#: extensions/base/mediawiki.py:1100 +#: extensions/base/mediawiki.py:1105 msgid "Removed from" msgstr "Удалено" -#: extensions/base/mediawiki.py:1100 +#: extensions/base/mediawiki.py:1105 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" msgstr[0] "{} правка или запись в журнале" msgstr[1] "{} правки или записи в журнале" msgstr[2] "{} правок или записей в журнале" -#: extensions/base/mediawiki.py:1112 +#: extensions/base/mediawiki.py:1118 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\"{comment}" -#: extensions/base/mediawiki.py:1122 +#: extensions/base/mediawiki.py:1128 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -1758,24 +1779,24 @@ msgstr[2] "" "[{author}]({author_url}) удалил [метку]({tag_url}) \"{tag}\" и убрал её из " "{count} правок или записей в журнале{comment}" -#: extensions/base/mediawiki.py:1139 +#: extensions/base/mediawiki.py:1145 #, python-brace-format msgid "Activated the tag \"{tag}\"" msgstr "Активировал метку «{tag}»" -#: extensions/base/mediawiki.py:1148 +#: extensions/base/mediawiki.py:1154 #, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" "[{author}]({author_url}) активировал [метку]({tag_url}) \"{tag}\"{comment}" -#: extensions/base/mediawiki.py:1167 +#: extensions/base/mediawiki.py:1173 #, python-brace-format msgid "Deactivated the tag \"{tag}\"" msgstr "Деактивировал метку «{tag}»" -#: extensions/base/mediawiki.py:1176 +#: extensions/base/mediawiki.py:1182 #, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" @@ -1821,6 +1842,14 @@ msgstr "" "[{author}]({author_url}) отредактировал фрагмент для [{article}]" "({article_url})" +#, python-brace-format +#~ msgid "" +#~ "{reason}\n" +#~ "{added}{linebreak}{removed}" +#~ msgstr "" +#~ "{reason}\n" +#~ "{added}{linebreak}{removed}" + #, python-brace-format #~ msgid "{value} (avg. {avg})" #~ msgstr "{value} (ср. {avg})" diff --git a/locale/templates/formatters.pot b/locale/templates/formatters.pot index 917c35f..ee8b0f3 100644 --- a/locale/templates/formatters.pot +++ b/locale/templates/formatters.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-21 21:20+0200\n" +"POT-Creation-Date: 2021-05-22 18:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1001,45 +1001,45 @@ msgid "" "({sign}{edit_size}){bold}" msgstr "" -#: extensions/base/mediawiki.py:191 extensions/base/mediawiki.py:226 +#: extensions/base/mediawiki.py:190 extensions/base/mediawiki.py:223 msgid "Options" msgstr "" -#: extensions/base/mediawiki.py:191 +#: extensions/base/mediawiki.py:190 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "" -#: extensions/base/mediawiki.py:196 +#: extensions/base/mediawiki.py:195 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "" -#: extensions/base/mediawiki.py:198 +#: extensions/base/mediawiki.py:197 #, python-brace-format msgid "Reverted a version of {name}" msgstr "" -#: extensions/base/mediawiki.py:200 +#: extensions/base/mediawiki.py:199 #, python-brace-format msgid "Uploaded {name}" msgstr "" -#: extensions/base/mediawiki.py:209 +#: extensions/base/mediawiki.py:208 msgid "**No license!**" msgstr "" -#: extensions/base/mediawiki.py:224 +#: extensions/base/mediawiki.py:223 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "" + +#: extensions/base/mediawiki.py:228 msgid "" "\n" "License: {}" msgstr "" -#: extensions/base/mediawiki.py:226 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "" - #: extensions/base/mediawiki.py:237 #, python-brace-format msgid "" @@ -1247,27 +1247,27 @@ msgstr[1] "" msgid "for {time_number} {time_unit}" msgstr "" -#: extensions/base/mediawiki.py:610 +#: extensions/base/mediawiki.py:609 msgid "Blocked from editing the following pages: " msgstr "" -#: extensions/base/mediawiki.py:617 extensions/base/mediawiki.py:662 +#: extensions/base/mediawiki.py:616 extensions/base/mediawiki.py:662 msgid " and namespaces: " msgstr "" -#: extensions/base/mediawiki.py:619 +#: extensions/base/mediawiki.py:618 msgid "Blocked from editing pages on following namespaces: " msgstr "" -#: extensions/base/mediawiki.py:630 +#: extensions/base/mediawiki.py:629 msgid "Partial block details" msgstr "" -#: extensions/base/mediawiki.py:633 +#: extensions/base/mediawiki.py:632 msgid "Block flags" msgstr "" -#: extensions/base/mediawiki.py:635 +#: extensions/base/mediawiki.py:634 #, python-brace-format msgid "Blocked {blocked_user} {time}" msgstr "" @@ -1359,166 +1359,185 @@ msgstr[1] "" msgid " (until {date_and_time})" msgstr "" -#: extensions/base/mediawiki.py:836 +#: extensions/base/mediawiki.py:835 #, python-brace-format msgid "Changed group membership for {target}" msgstr "" -#: extensions/base/mediawiki.py:839 +#: extensions/base/mediawiki.py:837 msgid "System" msgstr "" -#: extensions/base/mediawiki.py:840 +#: extensions/base/mediawiki.py:838 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "" +#: extensions/base/mediawiki.py:844 +msgid "Added groups" +msgid_plural "Added group" +msgstr[0] "" +msgstr[1] "" + #: extensions/base/mediawiki.py:846 -#, python-brace-format -msgid "" -"{reason}\n" -"{added}{linebreak}{removed}" -msgstr "" +msgid "Removed groups" +msgid_plural "Removed group" +msgstr[0] "" +msgstr[1] "" #: extensions/base/mediawiki.py:860 #, python-brace-format -msgid "" -"[{author}]({author_url}) changed group membership for [{target}]" -"({target_url}) {added}{comma} {removed}{comment}" +msgid "Added to {added} and removed from {removed}." msgstr "" -#: extensions/base/mediawiki.py:864 +#: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 +#: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 +msgid ", " +msgstr "" + +#: extensions/base/mediawiki.py:863 #, python-brace-format -msgid "" -"System autopromoted [{target}]({target_url}) {added}{comma} {removed}" -"{comment}" +msgid "Added to {added}." +msgstr "" + +#: extensions/base/mediawiki.py:865 +#, python-brace-format +msgid "Removed from {removed}." msgstr "" #: extensions/base/mediawiki.py:866 -msgid "," +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}): {group_changes}{comment}" msgstr "" -#: extensions/base/mediawiki.py:877 +#: extensions/base/mediawiki.py:870 +#, python-brace-format +msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:883 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "" -#: extensions/base/mediawiki.py:891 +#: extensions/base/mediawiki.py:897 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" "({article_url}) into [{dest}]({dest_url}){comment}" msgstr "" -#: extensions/base/mediawiki.py:905 +#: extensions/base/mediawiki.py:911 msgid "Created account automatically" msgstr "" -#: extensions/base/mediawiki.py:912 +#: extensions/base/mediawiki.py:918 #, python-brace-format msgid "Account [{author}]({author_url}) was created automatically" msgstr "" -#: extensions/base/mediawiki.py:925 extensions/base/mediawiki.py:990 +#: extensions/base/mediawiki.py:931 extensions/base/mediawiki.py:996 msgid "Created account" msgstr "" -#: extensions/base/mediawiki.py:932 extensions/base/mediawiki.py:997 +#: extensions/base/mediawiki.py:938 extensions/base/mediawiki.py:1003 #, python-brace-format msgid "Account [{author}]({author_url}) was created" msgstr "" -#: extensions/base/mediawiki.py:944 +#: extensions/base/mediawiki.py:950 #, python-brace-format msgid "Created account {article}" msgstr "" -#: extensions/base/mediawiki.py:953 +#: extensions/base/mediawiki.py:959 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url})" "{comment}" msgstr "" -#: extensions/base/mediawiki.py:966 +#: extensions/base/mediawiki.py:972 #, python-brace-format msgid "Created account {article} and password was sent by email" msgstr "" -#: extensions/base/mediawiki.py:977 +#: extensions/base/mediawiki.py:983 #, python-brace-format msgid "" "Account [{article}]({article_url}) was created by [{author}]({author_url}) " "and password was sent by email{comment}" msgstr "" -#: extensions/base/mediawiki.py:1009 +#: extensions/base/mediawiki.py:1015 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "" -#: extensions/base/mediawiki.py:1011 +#: extensions/base/mediawiki.py:1017 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "" -#: extensions/base/mediawiki.py:1023 +#: extensions/base/mediawiki.py:1029 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "" -#: extensions/base/mediawiki.py:1038 +#: extensions/base/mediawiki.py:1044 #, python-brace-format msgid "Created the page {article} using a non-default content model" msgstr "" -#: extensions/base/mediawiki.py:1040 +#: extensions/base/mediawiki.py:1046 #, python-brace-format msgid "Created with model {new}: {reason}" msgstr "" -#: extensions/base/mediawiki.py:1051 +#: extensions/base/mediawiki.py:1057 #, python-brace-format msgid "" "[{author}]({author_url}) created the page [{article}]({article_url}) using a " "non-default content model {new}{comment}" msgstr "" -#: extensions/base/mediawiki.py:1066 +#: extensions/base/mediawiki.py:1072 #, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1076 +#: extensions/base/mediawiki.py:1082 #, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1098 +#: extensions/base/mediawiki.py:1103 #, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1100 +#: extensions/base/mediawiki.py:1105 msgid "Removed from" msgstr "" -#: extensions/base/mediawiki.py:1100 +#: extensions/base/mediawiki.py:1105 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:1112 +#: extensions/base/mediawiki.py:1118 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1122 +#: extensions/base/mediawiki.py:1128 #, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " @@ -1529,23 +1548,23 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: extensions/base/mediawiki.py:1139 +#: extensions/base/mediawiki.py:1145 #, python-brace-format msgid "Activated the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1148 +#: extensions/base/mediawiki.py:1154 #, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -#: extensions/base/mediawiki.py:1167 +#: extensions/base/mediawiki.py:1173 #, python-brace-format msgid "Deactivated the tag \"{tag}\"" msgstr "" -#: extensions/base/mediawiki.py:1176 +#: extensions/base/mediawiki.py:1182 #, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" diff --git a/locale/templates/misc.pot b/locale/templates/misc.pot index 6567b1e..a1982e6 100644 --- a/locale/templates/misc.pot +++ b/locale/templates/misc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-21 21:20+0200\n" +"POT-Creation-Date: 2021-05-22 18:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/templates/rcgcdw.pot b/locale/templates/rcgcdw.pot index 5ad5433..f53b071 100644 --- a/locale/templates/rcgcdw.pot +++ b/locale/templates/rcgcdw.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-21 21:20+0200\n" +"POT-Creation-Date: 2021-05-22 18:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/templates/redaction.pot b/locale/templates/redaction.pot index 8a86896..fbb7821 100644 --- a/locale/templates/redaction.pot +++ b/locale/templates/redaction.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-21 21:20+0200\n" +"POT-Creation-Date: 2021-05-22 18:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/uk/LC_MESSAGES/formatters.po b/locale/uk/LC_MESSAGES/formatters.po index 29c7e02..9c2fde0 100644 --- a/locale/uk/LC_MESSAGES/formatters.po +++ b/locale/uk/LC_MESSAGES/formatters.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-21 21:20+0200\n" +"POT-Creation-Date: 2021-05-22 18:03+0200\n" "PO-Revision-Date: 2020-11-18 07:47+0000\n" "Last-Translator: MakandIv <>\n" "Language-Team: Ukrainian \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: Chinese (Traditional) Date: Sat, 22 May 2021 18:21:36 +0200 Subject: [PATCH 135/173] Fix order in ngettext --- extensions/base/mediawiki.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 9a19b76..ea3342c 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -841,9 +841,9 @@ def embed_rights_rights(ctx, change): # embed["thumbnail"]["url"] = "https://i.imgur.com/WnGhF5g.gif" added, removed = get_changed_groups(change) if added: - embed.add_field(ngettext("Added groups", "Added group", len(added)), "\n".join(added), inline=True) + embed.add_field(ngettext("Added group", "Added groups", len(added)), "\n".join(added), inline=True) if removed: - embed.add_field(ngettext("Removed groups", "Removed group", len(removed)), "\n".join(removed), inline=True) + embed.add_field(ngettext("Removed group", "Removed groups", len(removed)), "\n".join(removed), inline=True) embed_helper(ctx, embed, change) return embed From e9234f8fcdfe5120d69aca385ce4ab7b13d9aec5 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 18:32:42 +0200 Subject: [PATCH 136/173] Cache settings.json to preserve settings --- .gitlab-ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5bd1490..7a82cff 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,6 +7,10 @@ stages: - test - pytest +cache: + paths: + - settings.json + test: stage: test script: From 9ec52c52310ed78ba9551b386d5aed4b941a2f90 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 22 May 2021 18:45:40 +0200 Subject: [PATCH 137/173] Translated using Weblate (Polish) Currently translated at 73.6% (215 of 292 strings) Translated using Weblate (German) Currently translated at 100.0% (292 of 292 strings) Translated using Weblate (German) Currently translated at 100.0% (292 of 292 strings) Co-authored-by: Frisk The Evil Goat Overlord Co-authored-by: MarkusRost Co-authored-by: Weblate Co-authored-by: magiczocker Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/de/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/pl/ Translation: RcGcDw/formatters --- locale/de/LC_MESSAGES/formatters.mo | Bin 39410 -> 39694 bytes locale/de/LC_MESSAGES/formatters.po | 33 +++++++++++++--------------- locale/pl/LC_MESSAGES/formatters.mo | Bin 27790 -> 27864 bytes locale/pl/LC_MESSAGES/formatters.po | 6 ++--- 4 files changed, 18 insertions(+), 21 deletions(-) diff --git a/locale/de/LC_MESSAGES/formatters.mo b/locale/de/LC_MESSAGES/formatters.mo index 8c2890ef8ee2d2719cc529a817b4fd140032cf05..1d1f2ef06539ec861318eba5a25c06305d0d0b0e 100644 GIT binary patch delta 6931 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 delta 6613 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 lDJrQPFr{C$zZ`HyN\n" "Language-Team: German \n" @@ -1549,52 +1549,49 @@ msgstr "{target} wurde automatisch einer neuen Benutzergruppe zugeordnet" #: extensions/base/mediawiki.py:844 msgid "Added groups" msgid_plural "Added group" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Hinzugefügte Gruppe" +msgstr[1] "Hinzugefügte Gruppen" #: extensions/base/mediawiki.py:846 -#, fuzzy msgid "Removed groups" msgid_plural "Removed group" -msgstr[0] "Entfernt von" -msgstr[1] "Entfernt von" +msgstr[0] "Entfernte Gruppe" +msgstr[1] "Entfernte Gruppen" #: extensions/base/mediawiki.py:860 #, python-brace-format msgid "Added to {added} and removed from {removed}." -msgstr "" +msgstr "Hinzugefügt zu {added} und entfernt von {removed}." #: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 #: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 -#, fuzzy msgid ", " -msgstr "," +msgstr ", " #: extensions/base/mediawiki.py:863 #, python-brace-format msgid "Added to {added}." -msgstr "" +msgstr "Hinzugefügt zu {added}." #: extensions/base/mediawiki.py:865 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Removed from {removed}." -msgstr "Entfernt von" +msgstr "Entfernt von {removed}." #: extensions/base/mediawiki.py:866 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) changed group membership for [{target}]" "({target_url}): {group_changes}{comment}" msgstr "" -"[{author}]({author_url}) änderte die Benutzergruppen für [{target}]" -"({target_url}) {added}{comma} {removed}{comment}" +"[{author}]({author_url}) änderte die Benutzergruppen für " +"[{target}]({target_url}): {group_changes}{comment}" #: extensions/base/mediawiki.py:870 -#, fuzzy, python-brace-format +#, python-brace-format msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" msgstr "" -"System änderte die Benutzergruppen für [{target}]({target_url}) automatisch " -"{added}{comma} {removed}{comment}" +"[{target}]({target_url}) wurde automatisch zu {added} hinzugefügt.{comment}" #: extensions/base/mediawiki.py:883 #, python-brace-format diff --git a/locale/pl/LC_MESSAGES/formatters.mo b/locale/pl/LC_MESSAGES/formatters.mo index efe9fc3ae4d6be52700dbd039046c5184522cbaf..65c0c7a607881c48e1c180e550325598b6820aaa 100644 GIT binary patch delta 4754 zcmYk<2~-u=0mku*K>{eU8UA!^(aL%%VA6h&iXmp8mf#LymLuz2Cj_=H0n-m%;3~ z>Ctx6!+9&nbC=<0BjMz)UdF_E7_-+;XN?&YWK35aY&!}Asb|~u1*l6)FaT??3)W$0 z+=YFx0fX_J{e2s9z0-U_A%ri!Lx1$;su&DIHJpY$F&o!lA?D%@?2n23I0fgRI^aUx z@DQrwmoOARMRlkhC&zK&7&9nu%my_ePDBuu3~0ViQ?FUDUDv~pq)w&M(pV6pd4PUpofPy$GaS|~ zs6yRfE9$~`Q9rzmS|grRbmM`@!<#XvRlW$la0P0uRG_x$v#3?S3pEuDs1Ba6>&|8h zy6_sRfjj8HZ&3~T)4OgMg&L_ORL_%fHXg;N(UZro#)UWrui<6v$@~q&uW>a-Gfzv< zh10bE?^Ae<6IqO70p7z`aXL%YiT}a-Siz>&4NDjn`2pr&7{ii+#aM+0k%mnu3*#v) z!O?gC)zRB_J(ZWoDBWQr1vPjI)le|wpN~^;GQNRo_#sZfiX>wuVl&Q1FD7~c7T^YK z!8%N1MUTJ_u^l}IGo5%JwI~}|iMe{hdlV`#BbkMVZ(}A#^EO(8MYs-cqQ1`^YD_tv z!Bk9Qd>3OW&csh}Bu4Z2<8T4y;6dDu|3W>8b2!n^T%?eW-gI|5PQ+krKz592L|?pQ z+lC(0|BjF0KkV~gq23$qwhz&Vx);N$wH1Ipum`HWfhml?8cN}W7FjCx#B5YUh1eO( zP^-2A{crT)ah@9`p?=@auyw^wX^ej_3jR!p8cf6h z9EoapGOA-msE$;j8s2~*cm&nZ`>5^sF|r}d9n?1U9c8^AB2evTqB=AaU&LxBg?SXb znFrQ|DMU@lOMIv!*O3Kn?x3b5DBXIs#-oOGyj{;h7PcwF2;763<9AT)>MxFNJOtI= zOjLVLCxw9&T-XQCVjSK@cAg1hGathg)QEg(+i9%Tk#L;C`BV(U7m(#-4kPQ@e1=gN z#EMq?Lr^0z583HXQ%XS%@5FRGit4~UjK$z_)*Ep+>Pd=FQ??t~DCPue&3uXKfX8@i z|A%87^)l4jaG^$YKYC#!CTRbkq`=NHw@^I{&axUzMU6lnM&c$^NB3epocXf=)(a#Lwb<&BKAJy~#a=4KP?+w(0Ol3hha4oXF&2ChCH&E?(O|@Q7!=^Goy73xLXzuE4 z51|+JGZ=^$P*c!mpZ^|p{r^x;8amAy(iq!x)bAFeI=l)sf-cmmKY|*m=4p)oY6>l! z&>SXDx8D6bv6Ol{GAL&847Mdtcog-@y_;*jlKajyW*PN^$bY6w9t%s?V<862GUhl| z;Wmt&%?Itgi3=#c<(y;vRSJ08YM=x&_~Hycr)%e0@9r(g=$WgSiM@GgEXQJG8JH`W zg%R_)IW9%sLFNLggPzfYXoC)? zz=N1s_!!PXU!0HKa2a}IwSC@c*SFf=yHJbx0IHq$P>bvodg7nZAFrYxet~N5-`I`& zn+FsE(RYQ_vvBN6Jp~707N%eg#$prdMjgjq3L1%R_K9T7u*;)ucccFF9w0Xew{#!6 zzxxkD9ezwUl8fXV(V?Md2Ha~y^@Ai*1&*JRpAhEJd_tpiKb}-SxdT;Q{-3Vx8zNt<2QuO;QpuH zRGr{>*0`>83v#~$uUKc?e@fVU?qd(1dLj2AndC#lJ~L;Cju4Vhw48K2L&g$KntSGP z5@Ac3on$}xh;$q!R>3_7?qV&UOUMB03-{*)KG%^;_PJl+&+W1pO8VM$?eL$G>2}@6 zcC+nvTW!RSGX;@}Z&LU(8BcbRa&m#xley&4BZf*m39wJT&=e7Lyi?DD%H`Gh zl}ig9mBmXPmHEpYF&p^Y6w~xkNOEFSMrq}`wJX==m#=iJFV8PnU%tH5aeMQA_a(PC L?`wK6+SUL6xDg$A delta 4680 zcmYk<3AC4E9tZFz?oFGt@5^mpZ&E_HE4P%oN}DW&N@*0ODMB>+3sn&Fr+9YdTM&dlf6`_}Ou-}`x<_y7K%_u1a}pZ7ngvgCs*g^%kM ztxS&hq=oFOno@@eM-`%>J*>uW7$f+RMXcW}8+jAPjrubhn#x$JMT{G- zV{5)feMnzY6RD_qO66?DGkF2y`;Rm?|2-9UJ28g;%|94nC&moSVf1tr<3=0Ui*K_V zi%d%_NzdGK86BR_Q+ZQ<{zb<3_A@%vL~rA|Uaic3b%m3iIEDilBd=tfpUC*abe8fK z#$I@WF%vH{M)D=&`^Oo6?1{!SmNbMhvr`x|y@1zpBV$0F3nkg^AI7-BB*ukH7+>7N z*pweKZd~l7!KWsS-Q9;(IgqheDjAz=9AnpC&RB}sj1Df&>&qC|6&_cJ2DY+o}X=aWbb{uTgxR56AQ0(mYOa zVmsHcldW3dE*@m1hdFLoVOqj_coq+^jQvf|T+U-O{4bu&3LE4!Ud!m{mb_li!{1+h z49|-@EmeqyzTm}dZyknnA*12F9LmZb!ezXWAMqmgwcyut6&JC-9o?4?@Eg9zEqwii zY*Q|<6XON8oma+48~3(Oyn}=I9p|vzTWKCQGCuFp$IFQ;Sn zi&(-Hw2J9zw&7p+iaQmVmiYc|(^iY`vpM&doBwFA%Bk6pM_oq4Z5bUaXLMv3qv6qP zz#AA1EoTcpNDo5V%6LparTv`#&1k=w9Ty$y%B3963;1zC!M;dkwyOWq41ely9c|>a zm9ZqBGp6zfw&u|l*&DDOTdI#_tnExjd(SX#_&KAU8UwO+`tW%5N_J*poTdNWDV5G|!du27F1DiRDd)R^P&dByeC1WPXvMQ%C1~`Kr zsI-EeYRmYukdp49XM zV~Kisd350@#^=|uSA1cuLR|O``?BVl*(MuIeM;l$<(1aZY^FCDo38G#?A6?Z)zo{l znB^?t!2J9a#z1B;Ht|9>;wBa<6m~20V9nv#h{_n7WDwi(D#p^RqGeAnu((P}|6`1# z*oG)!DedPpg3;bxjCNjNyqNyMxN+x^+0vah(uBntj(4Ie=dv#6vlW-*=hri?dx|mA zHyKm49!Ddb zOz(=c_U!Cc{0T2rA2&98<-Wv?as4?dUBVsQz;5UI7c@U)($1ylWxo~E&d+{~cF}kHWdU)rrkKi{<09$80eNsei!fY~`(C`P1zj!o8ft<`-r^F7p{3e2#I0wio%4 z;WdoC^d;kay$pXE3)d;kQur%x=GhZdx{dELIx=CB^*4fbEMc3;*(Mw~B^${?#*}`_ zpL2|9FbQcpuVd4xDc#5wjO!ZyEW7b-G>}3%py0FAPq$;X)-X2N_l%MD)6H0tgZipG&@T^>JT*1xtw4JYccHe0e9yXWWo z%!DUrA2@KIIa202NjryM?}XN6eu?6?&dOZU7U z43TT)^{6(z4)-{H=@J})*|+IP|}$QM^LtOH+AP z;wY1Ta=FZq$(|wMV81o g`RUO{rGwPTPcGh6T5rQqo4##uLbpw4R4nWMf37|Pa{vGU diff --git a/locale/pl/LC_MESSAGES/formatters.po b/locale/pl/LC_MESSAGES/formatters.po index 820524a..8ec43f9 100644 --- a/locale/pl/LC_MESSAGES/formatters.po +++ b/locale/pl/LC_MESSAGES/formatters.po @@ -20,7 +20,7 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:03+0200\n" -"PO-Revision-Date: 2021-05-22 12:08+0000\n" +"PO-Revision-Date: 2021-05-22 16:45+0000\n" "Last-Translator: Frisk The Evil Goat Overlord \n" "Language-Team: Polish \n" @@ -1758,9 +1758,9 @@ msgstr[2] "" "{count} wersjami{comment}" #: extensions/base/mediawiki.py:1145 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Activated the tag \"{tag}\"" -msgstr "Aktywowano znaczni „{tag}”" +msgstr "Aktywowano znacznik „{tag}”" #: extensions/base/mediawiki.py:1154 #, fuzzy, python-brace-format From 8105e6578e2fb90114eaaf4688cf03687640a0b9 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 18:47:13 +0200 Subject: [PATCH 138/173] Update job dependencies --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7a82cff..52bc1dc 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,6 +25,7 @@ test: pytest: stage: pytest + needs: ['test'] script: - pip3.7 install -U pytest - pytest --junitxml=report.xml From 224ca73fef4c9c1f3582408449aec8c01200ddbd Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 18:51:55 +0200 Subject: [PATCH 139/173] Updated translation files --- locale/de/LC_MESSAGES/formatters.po | 16 +++++++++------- locale/es/LC_MESSAGES/formatters.po | 15 ++++++++------- locale/fr/LC_MESSAGES/formatters.po | 15 ++++++++------- locale/hi/LC_MESSAGES/formatters.po | 15 ++++++++------- locale/lol/LC_MESSAGES/formatters.po | 10 +++++----- locale/pl/LC_MESSAGES/formatters.po | 17 +++++++++-------- locale/pt-br/LC_MESSAGES/formatters.po | 15 ++++++++------- locale/ru/LC_MESSAGES/formatters.po | 17 +++++++++-------- locale/templates/formatters.pot | 10 +++++----- locale/templates/misc.pot | 2 +- locale/templates/rcgcdw.pot | 2 +- locale/templates/redaction.pot | 2 +- locale/uk/LC_MESSAGES/formatters.po | 17 +++++++++-------- locale/zh-hans/LC_MESSAGES/formatters.po | 13 +++++++------ locale/zh-hant/LC_MESSAGES/formatters.po | 13 +++++++------ 15 files changed, 95 insertions(+), 84 deletions(-) diff --git a/locale/de/LC_MESSAGES/formatters.po b/locale/de/LC_MESSAGES/formatters.po index 63d0624..65293dd 100644 --- a/locale/de/LC_MESSAGES/formatters.po +++ b/locale/de/LC_MESSAGES/formatters.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-22 18:03+0200\n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" "PO-Revision-Date: 2021-05-22 16:45+0000\n" "Last-Translator: MarkusRost \n" "Language-Team: German \n" "Language-Team: Spanish \n" "Language-Team: \n" @@ -1443,15 +1443,16 @@ msgid "{target} got autopromoted to a new usergroup" msgstr "{target} a été auto-promu dans un nouveau groupe" #: extensions/base/mediawiki.py:844 -msgid "Added groups" -msgid_plural "Added group" -msgstr[0] "" -msgstr[1] "" +#, fuzzy +msgid "Added group" +msgid_plural "Added groups" +msgstr[0] "Retirés" +msgstr[1] "Retirés" #: extensions/base/mediawiki.py:846 #, fuzzy -msgid "Removed groups" -msgid_plural "Removed group" +msgid "Removed group" +msgid_plural "Removed groups" msgstr[0] "Retirés" msgstr[1] "Retirés" diff --git a/locale/hi/LC_MESSAGES/formatters.po b/locale/hi/LC_MESSAGES/formatters.po index a46e43d..2e0678c 100644 --- a/locale/hi/LC_MESSAGES/formatters.po +++ b/locale/hi/LC_MESSAGES/formatters.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-22 18:03+0200\n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" "PO-Revision-Date: 2020-12-30 13:26+0000\n" "Last-Translator: Creeper \n" "Language-Team: Hindi \n" "Language-Team: Polish \n" "Language-Team: Portuguese (Brazil) \n" "Language-Team: Russian \n" "Language-Team: LANGUAGE \n" @@ -1374,14 +1374,14 @@ msgid "{target} got autopromoted to a new usergroup" msgstr "" #: extensions/base/mediawiki.py:844 -msgid "Added groups" -msgid_plural "Added group" +msgid "Added group" +msgid_plural "Added groups" msgstr[0] "" msgstr[1] "" #: extensions/base/mediawiki.py:846 -msgid "Removed groups" -msgid_plural "Removed group" +msgid "Removed group" +msgid_plural "Removed groups" msgstr[0] "" msgstr[1] "" diff --git a/locale/templates/misc.pot b/locale/templates/misc.pot index a1982e6..103aff5 100644 --- a/locale/templates/misc.pot +++ b/locale/templates/misc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-22 18:03+0200\n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/templates/rcgcdw.pot b/locale/templates/rcgcdw.pot index f53b071..a3118ed 100644 --- a/locale/templates/rcgcdw.pot +++ b/locale/templates/rcgcdw.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-22 18:03+0200\n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/templates/redaction.pot b/locale/templates/redaction.pot index fbb7821..e6aa12c 100644 --- a/locale/templates/redaction.pot +++ b/locale/templates/redaction.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-22 18:03+0200\n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/uk/LC_MESSAGES/formatters.po b/locale/uk/LC_MESSAGES/formatters.po index 9c2fde0..93b9752 100644 --- a/locale/uk/LC_MESSAGES/formatters.po +++ b/locale/uk/LC_MESSAGES/formatters.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-22 18:03+0200\n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" "PO-Revision-Date: 2020-11-18 07:47+0000\n" "Last-Translator: MakandIv <>\n" "Language-Team: Ukrainian \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: Chinese (Traditional) Date: Sat, 22 May 2021 21:42:09 +0200 Subject: [PATCH 140/173] Actually fix the context translation issue --- src/i18n.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/i18n.py b/src/i18n.py index 6e16512..b2a6e7c 100644 --- a/src/i18n.py +++ b/src/i18n.py @@ -22,7 +22,10 @@ logger = logging.getLogger("rcgcdw.i18n") def python37_pgettext_backward_compatibility(context: str, string: str): """Creates backward compatibility with Python 3.7 as pgettext has been introduced only in Python 3.8""" - return formatters_i18n.gettext(string) + translation = formatters_i18n.gettext("{}\x04{}".format(context, string)) + if "\x04" in translation: # gettext returned same message + return string + return translation try: if settings["lang"] != "en": From f8e69c7fa71c83eac7d950584961cf7afc869468 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 21:59:47 +0200 Subject: [PATCH 141/173] Trying to mitigate installation of packages anew for gitlab ci pipelines --- .gitlab-ci.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 52bc1dc..0edcec6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,6 +3,9 @@ image: python:3.7-alpine include: - template: Code-Quality.gitlab-ci.yml +variables: + PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" + stages: - test - pytest @@ -10,11 +13,16 @@ stages: cache: paths: - settings.json + - .cache/pip + - venv/ test: stage: test script: - apk add libxml2-dev libxslt-dev libxml2 gcc musl-dev linux-headers + - pip3.7 install virtualenv + - virtualenv venv + - source venv/bin/activate - pip3.7 install -r requirements.txt - sed -i -e "s/111111111111111111/$DISCORD1/g" settings.json.example - sed -i -e "s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/$DISCORD2/g" settings.json.example @@ -27,6 +35,7 @@ pytest: stage: pytest needs: ['test'] script: + - source venv/bin/activate - pip3.7 install -U pytest - pytest --junitxml=report.xml artifacts: From 1bb4ce2786e4d9fb66602944f57a9787032b04a9 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 22 May 2021 23:56:19 +0200 Subject: [PATCH 142/173] Fixes related to encoding and also preventing crashes when file no longer exists --- extensions/base/mediawiki.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index ea3342c..b9f862b 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -138,7 +138,7 @@ def embed_upload_upload(ctx, change) -> DiscordMessage: params["rvslots"] = "main" else: params["prop"] = "imageinfo" - params["titles"] = sanitize_to_url(change["title"]) + params["titles"] = change["title"] params["iiprop"] = "timestamp|url|archivename" params["iilimit"] = "5" request_for_image_data = ctx.client.make_api_request(params, "query", "pages") @@ -197,7 +197,7 @@ def embed_upload_upload(ctx, change) -> DiscordMessage: embed["title"] = _("Reverted a version of {name}").format(name=sanitize_to_markdown(change["title"])) else: embed["title"] = _("Uploaded {name}").format(name=sanitize_to_markdown(change["title"])) - if settings["license_detection"]: + if settings["license_detection"] and image_direct_url: try: content = image_data['revisions'][0]["slots"]["main"]['*'] matches = re.search(re.compile(settings["license_regex"], re.IGNORECASE), content) From 6b0701e5892cd3758617bf6f36b40919f1b87e9a Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Sat, 22 May 2021 23:16:18 +0000 Subject: [PATCH 143/173] * Add action icons back to embeds * Fix links in summaries * Add user (talk) page notifications --- extensions/hooks/usertalk.py | 34 ++++++++++++++++++++++++++++++++++ src/discord/message.py | 5 ++++- src/misc.py | 7 ++++--- src/rcgcdw.py | 5 +++-- 4 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 extensions/hooks/usertalk.py diff --git a/extensions/hooks/usertalk.py b/extensions/hooks/usertalk.py new file mode 100644 index 0000000..f93477a --- /dev/null +++ b/extensions/hooks/usertalk.py @@ -0,0 +1,34 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +from src.api.hook import post_hook +from src.configloader import settings + +# { +# "hooks": { +# "usertalk": { +# "USERNAME": "USERID" +# } +# } +# } +discord_users = settings.get("hooks", {}).get("usertalk", {}) + +@post_hook +def example_post_hook(message, metadata, context, change): + if discord_users and change["ns"] in [2, 3] and not "/" in change["title"]: + username = change["title"].split(':', 1)[1] + if discord_users.get(username, "") and username != change["user"]: + message.webhook_object["content"] = (content or "") + " <@{}>".format(discord_users[username]) + message.webhook_object["allowed_mentions"].get("users", []).append(discord_users[username]) diff --git a/src/discord/message.py b/src/discord/message.py index ceab2a5..57a572f 100644 --- a/src/discord/message.py +++ b/src/discord/message.py @@ -34,6 +34,7 @@ class DiscordMessage: content = settings["event_appearance"][event_type]["emoji"] + " " + content self.webhook_object["content"] = content + self.message_type = message_type self.event_type = event_type def __setitem__(self, key, value): @@ -63,6 +64,8 @@ class DiscordMessage: self.__setup_embed() def finish_embed(self): + if self.message_type != "embed": + return if self.embed["color"] is None: if settings["event_appearance"].get(self.event_type, {"color": None})["color"] is None: self.embed["color"] = random.randrange(1, 16777215) @@ -110,4 +113,4 @@ class DiscordMessageMetadata: self.new_data = new_data def dump_ids(self) -> (int, int, int): - return self.page_id, self.rev_id, self.log_id \ No newline at end of file + return self.page_id, self.rev_id, self.log_id diff --git a/src/misc.py b/src/misc.py index 11944cf..2e0093c 100644 --- a/src/misc.py +++ b/src/misc.py @@ -21,6 +21,7 @@ from urllib.parse import urlparse, urlunparse import requests from src.configloader import settings +from src.api.util import sanitize_to_markdown from src.discord.message import DiscordMessage, DiscordMessageMetadata from src.discord.queue import messagequeue, send_to_discord from src.exceptions import MediaWikiError @@ -344,13 +345,13 @@ class LinkParser(HTMLParser): def handle_data(self, data): if self.recent_href: - self.new_string = self.new_string + "[{}](<{}>)".format(data.replace("//", "/\\/"), self.recent_href) + self.new_string = self.new_string + "[{}](<{}>)".format(sanitize_to_markdown(data), self.recent_href) self.recent_href = "" else: - self.new_string = self.new_string + data.replace("//", "/\\/") + self.new_string = self.new_string + sanitize_to_markdown(data) def handle_comment(self, data): - self.new_string = self.new_string + data.replace("//", "/\\/") + self.new_string = self.new_string + sanitize_to_markdown(data) def handle_endtag(self, tag): misc_logger.debug(self.new_string) diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 987d383..26001f2 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -30,7 +30,7 @@ from src.api.context import Context from src.api.hooks import formatter_hooks, pre_hooks, post_hooks from src.configloader import settings from src.misc import add_to_dict, datafile, WIKI_API_PATH, LinkParser, run_hooks -from src.api.util import create_article_path, default_message, sanitize_to_markdown +from src.api.util import create_article_path, default_message from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata from src.exceptions import MWError, ServerError, MediaWikiError, BadRequest, ClientError @@ -210,7 +210,6 @@ def rc_processor(change, changed_categories): if "commenthidden" not in change: LinkParser.feed(change.get("parsedcomment", "")) parsed_comment = LinkParser.new_string - parsed_comment = sanitize_to_markdown(parsed_comment) else: parsed_comment = _("~~hidden~~") if not parsed_comment and context.message_type == "embed" and settings["appearance"].get("embed", {}).get("show_no_description_provided", True): @@ -257,6 +256,7 @@ def rc_processor(change, changed_categories): for revid in logparams.get("ids", []): delete_messages(dict(revid=revid)) run_hooks(post_hooks, discord_message, metadata, context, change) + discord_message.finish_embed() send_to_discord(discord_message, metadata) @@ -270,6 +270,7 @@ def abuselog_processing(entry): discord_message: Optional[DiscordMessage] = default_message(action, formatter_hooks)(context, entry) metadata = DiscordMessageMetadata("POST") run_hooks(post_hooks, discord_message, metadata, context, entry) + discord_message.finish_embed() send_to_discord(discord_message, metadata) From 22fb263989598c67c7b9ae7a6d87089075fa5eeb Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Sat, 22 May 2021 23:18:29 +0000 Subject: [PATCH 144/173] add userprofile --- extensions/hooks/usertalk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/hooks/usertalk.py b/extensions/hooks/usertalk.py index f93477a..9e49159 100644 --- a/extensions/hooks/usertalk.py +++ b/extensions/hooks/usertalk.py @@ -27,7 +27,7 @@ discord_users = settings.get("hooks", {}).get("usertalk", {}) @post_hook def example_post_hook(message, metadata, context, change): - if discord_users and change["ns"] in [2, 3] and not "/" in change["title"]: + if discord_users and change["ns"] in [2, 3, 202] and not "/" in change["title"]: username = change["title"].split(':', 1)[1] if discord_users.get(username, "") and username != change["user"]: message.webhook_object["content"] = (content or "") + " <@{}>".format(discord_users[username]) From f7fc4331ff4960d02d77cfba2db8450ee3a9468d Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Sat, 22 May 2021 23:48:01 +0000 Subject: [PATCH 145/173] fix allowed mentions --- extensions/hooks/usertalk.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/extensions/hooks/usertalk.py b/extensions/hooks/usertalk.py index 9e49159..de156bf 100644 --- a/extensions/hooks/usertalk.py +++ b/extensions/hooks/usertalk.py @@ -31,4 +31,7 @@ def example_post_hook(message, metadata, context, change): username = change["title"].split(':', 1)[1] if discord_users.get(username, "") and username != change["user"]: message.webhook_object["content"] = (content or "") + " <@{}>".format(discord_users[username]) - message.webhook_object["allowed_mentions"].get("users", []).append(discord_users[username]) + if message.webhook_object["allowed_mentions"].get("users", []): + message.webhook_object["allowed_mentions"]["users"].append(discord_users[username]) + else: + message.webhook_object["allowed_mentions"]["users"] = [discord_users[username]] From eb19fb5597aa4e023afdc7a2e8feaa1b44299120 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 23 May 2021 19:18:09 +0200 Subject: [PATCH 146/173] Translated using Weblate (Polish) Currently translated at 75.6% (221 of 292 strings) Translated using Weblate (German) Currently translated at 100.0% (292 of 292 strings) Added translation using Weblate (Japanese) Added translation using Weblate (Turkish) Added translation using Weblate (Korean) Added translation using Weblate (Italian) Added translation using Weblate (Bengali) Added translation using Weblate (Swedish) Added translation using Weblate (Swedish) Added translation using Weblate (Swedish) Added translation using Weblate (Swedish) Co-authored-by: Frisk The Evil Goat Overlord Co-authored-by: Spisen Co-authored-by: Weblate Co-authored-by: magiczocker Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/de/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/pl/ Translation: RcGcDw/formatters --- locale/bn/LC_MESSAGES/formatters.mo | Bin 0 -> 454 bytes locale/bn/LC_MESSAGES/formatters.po | 1604 +++++++++++++++++++++++++++ locale/de/LC_MESSAGES/formatters.mo | Bin 39694 -> 39694 bytes locale/de/LC_MESSAGES/formatters.po | 6 +- locale/it/LC_MESSAGES/formatters.mo | Bin 0 -> 455 bytes locale/it/LC_MESSAGES/formatters.po | 1604 +++++++++++++++++++++++++++ locale/ja/LC_MESSAGES/formatters.mo | Bin 0 -> 452 bytes locale/ja/LC_MESSAGES/formatters.po | 1588 ++++++++++++++++++++++++++ locale/ko/LC_MESSAGES/formatters.mo | Bin 0 -> 448 bytes locale/ko/LC_MESSAGES/formatters.po | 1588 ++++++++++++++++++++++++++ locale/pl/LC_MESSAGES/formatters.mo | Bin 27864 -> 28923 bytes locale/pl/LC_MESSAGES/formatters.po | 24 +- locale/sv/LC_MESSAGES/formatters.mo | Bin 0 -> 455 bytes locale/sv/LC_MESSAGES/formatters.po | 1604 +++++++++++++++++++++++++++ locale/sv/LC_MESSAGES/misc.mo | Bin 0 -> 449 bytes locale/sv/LC_MESSAGES/misc.po | 83 ++ locale/sv/LC_MESSAGES/rcgcdw.mo | Bin 0 -> 449 bytes locale/sv/LC_MESSAGES/rcgcdw.po | 111 ++ locale/sv/LC_MESSAGES/redaction.mo | Bin 0 -> 454 bytes locale/sv/LC_MESSAGES/redaction.po | 22 + locale/tr/LC_MESSAGES/formatters.mo | Bin 0 -> 455 bytes locale/tr/LC_MESSAGES/formatters.po | 1604 +++++++++++++++++++++++++++ 22 files changed, 9822 insertions(+), 16 deletions(-) create mode 100644 locale/bn/LC_MESSAGES/formatters.mo create mode 100644 locale/bn/LC_MESSAGES/formatters.po create mode 100644 locale/it/LC_MESSAGES/formatters.mo create mode 100644 locale/it/LC_MESSAGES/formatters.po create mode 100644 locale/ja/LC_MESSAGES/formatters.mo create mode 100644 locale/ja/LC_MESSAGES/formatters.po create mode 100644 locale/ko/LC_MESSAGES/formatters.mo create mode 100644 locale/ko/LC_MESSAGES/formatters.po create mode 100644 locale/sv/LC_MESSAGES/formatters.mo create mode 100644 locale/sv/LC_MESSAGES/formatters.po create mode 100644 locale/sv/LC_MESSAGES/misc.mo create mode 100644 locale/sv/LC_MESSAGES/misc.po create mode 100644 locale/sv/LC_MESSAGES/rcgcdw.mo create mode 100644 locale/sv/LC_MESSAGES/rcgcdw.po create mode 100644 locale/sv/LC_MESSAGES/redaction.mo create mode 100644 locale/sv/LC_MESSAGES/redaction.po create mode 100644 locale/tr/LC_MESSAGES/formatters.mo create mode 100644 locale/tr/LC_MESSAGES/formatters.po diff --git a/locale/bn/LC_MESSAGES/formatters.mo b/locale/bn/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..7c7f9ba64f05a1ae73208f58edf599829faaece1 GIT binary patch literal 454 zcmYL_y-ve06oo-BWn^aXzyJa#6d_dHACZ!@L`s?}P5IlL=c4WI0-hq|Z<5_Sh zqDT5m~f}GAKvpWnQeExsXe$wTa_o+}SoIDC1TXME*8v%RaYm1=qlh!;jiT z(D1IEx}uDCP`;p2f$q)HA#QK$8V_@j*yp(@7%vHGXG~j@Y9(ofhvs)h5U+oas&~;r dn{AJyK5BKWM?3-!ax;nt$jndxUD{XH&JV4)hhqQ$ literal 0 HcmV?d00001 diff --git a/locale/bn/LC_MESSAGES/formatters.po b/locale/bn/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..7e86532 --- /dev/null +++ b/locale/bn/LC_MESSAGES/formatters.po @@ -0,0 +1,1604 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDw package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: bn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" + +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" +msgstr "" + +#: src/api/util.py:71 +msgid "Removed" +msgstr "" + +#: src/api/util.py:73 +msgid "Added" +msgstr "" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 +msgid "Unregistered user" +msgstr "" + +#: src/api/util.py:160 +msgctxt "recent changes Tags" +msgid "Tags" +msgstr "" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "" + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr "" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "" + +#: src/api/util.py:166 +msgid " and {} more" +msgstr "" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "" + +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:105 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: extensions/base/translate.py:55 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: extensions/base/translate.py:80 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:106 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:133 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: extensions/base/translate.py:161 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:177 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:188 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:215 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:231 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:240 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:264 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:288 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:315 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:342 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:387 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:401 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "" + +#: extensions/base/translate.py:431 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:439 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "" + +#: extensions/base/translate.py:464 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "" + +#: extensions/base/translate.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:193 extensions/base/discussions.py:195 +msgctxt "Fandom discussions Tags/Forums" +msgid "Tags" +msgstr "" + +#: extensions/base/discussions.py:193 +msgctxt "Fandom discussions amount of Tags/Forums" +msgid "{} tags" +msgstr "" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:217 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:220 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:234 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" + +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:312 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:318 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "" + +#: extensions/base/discussions.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" + +#: extensions/base/discussions.py:365 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" + +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:80 +#, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "" + +#: extensions/base/managewiki.py:89 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:124 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "" + +#: extensions/base/managewiki.py:134 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:147 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:158 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:173 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "" + +#: extensions/base/managewiki.py:182 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:195 +#, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:203 +#, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:217 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:225 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/datadump.py:36 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "" + +#: extensions/base/datadump.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "" + +#: extensions/base/datadump.py:58 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "" + +#: extensions/base/datadump.py:67 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "" + +#: extensions/base/curseprofile.py:40 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:42 +msgid "Edited their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:44 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "" + +#: extensions/base/curseprofile.py:46 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "" + +#: extensions/base/curseprofile.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:60 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:65 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:67 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:82 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:84 +msgid "Left a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:97 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:100 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:113 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:115 +msgid "Edited a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:131 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:144 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:146 +msgid "Replied to a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:162 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:175 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:177 +msgid "Deleted a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:197 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +"profile.{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:200 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:214 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:216 +msgid "Purged a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:230 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:233 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [their own]({link}) profile." +"{reason}" +msgstr "" + +#: extensions/base/renameuser.py:38 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/renameuser.py:43 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: extensions/base/renameuser.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/renameuser.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" + +#: extensions/base/interwiki.py:37 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:38 extensions/base/interwiki.py:65 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:50 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:64 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:77 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:91 +msgid "Deleted an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:92 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:102 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "None" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Warning issued" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Blocked user**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Tagged the edit" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Disallowed the action" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**IP range blocked**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Throttled actions" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Removed autoconfirmed group" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Removed from privileged groups**" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Edit" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Move" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Stash upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Deletion" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Account creation" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Auto account creation" +msgstr "" + +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "" + +#: extensions/base/abusefilter.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" + +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "" + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "" + +#: extensions/base/mediawiki.py:112 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: extensions/base/mediawiki.py:117 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: extensions/base/mediawiki.py:190 extensions/base/mediawiki.py:223 +msgid "Options" +msgstr "" + +#: extensions/base/mediawiki.py:190 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "" + +#: extensions/base/mediawiki.py:195 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:197 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:199 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "" + +#: extensions/base/mediawiki.py:208 +msgid "**No license!**" +msgstr "" + +#: extensions/base/mediawiki.py:223 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "" + +#: extensions/base/mediawiki.py:228 +msgid "" +"\n" +"License: {}" +msgstr "" + +#: extensions/base/mediawiki.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:248 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:283 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" + +#: extensions/base/mediawiki.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:322 +#, python-brace-format +msgid "Restored {article}" +msgstr "" + +#: extensions/base/mediawiki.py:331 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "" + +#: extensions/base/mediawiki.py:356 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:370 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:383 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr "" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:609 +msgid "Blocked from editing the following pages: " +msgstr "" + +#: extensions/base/mediawiki.py:616 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:618 +msgid "Blocked from editing pages on following namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:629 +msgid "Partial block details" +msgstr "" + +#: extensions/base/mediawiki.py:632 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:634 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr "" + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "" + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:772 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:788 +#, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:803 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:835 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "" + +#: extensions/base/mediawiki.py:837 +msgid "System" +msgstr "" + +#: extensions/base/mediawiki.py:838 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "" + +#: extensions/base/mediawiki.py:844 +msgid "Added group" +msgid_plural "Added groups" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:846 +msgid "Removed group" +msgid_plural "Removed groups" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:860 +#, python-brace-format +msgid "Added to {added} and removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 +#: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 +msgid ", " +msgstr "" + +#: extensions/base/mediawiki.py:863 +#, python-brace-format +msgid "Added to {added}." +msgstr "" + +#: extensions/base/mediawiki.py:865 +#, python-brace-format +msgid "Removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:866 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}): {group_changes}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:870 +#, python-brace-format +msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:883 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" + +#: extensions/base/mediawiki.py:897 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:911 +msgid "Created account automatically" +msgstr "" + +#: extensions/base/mediawiki.py:918 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "" + +#: extensions/base/mediawiki.py:931 extensions/base/mediawiki.py:996 +msgid "Created account" +msgstr "" + +#: extensions/base/mediawiki.py:938 extensions/base/mediawiki.py:1003 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "" + +#: extensions/base/mediawiki.py:950 +#, python-brace-format +msgid "Created account {article}" +msgstr "" + +#: extensions/base/mediawiki.py:959 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:972 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" + +#: extensions/base/mediawiki.py:983 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1015 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:1017 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1029 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1044 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: extensions/base/mediawiki.py:1046 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1057 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1072 +#, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1082 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1103 +#, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1105 +msgid "Removed from" +msgstr "" + +#: extensions/base/mediawiki.py:1105 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1145 +#, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1173 +#, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1182 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/sprite.py:37 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "" + +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" + +#: extensions/base/sprite.py:60 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "" + +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" + +#: extensions/base/sprite.py:79 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "" + +#: extensions/base/sprite.py:86 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" diff --git a/locale/de/LC_MESSAGES/formatters.mo b/locale/de/LC_MESSAGES/formatters.mo index 1d1f2ef06539ec861318eba5a25c06305d0d0b0e..77027f8ce00194dfe5fc0b0d76197e33f223124a 100644 GIT binary patch delta 100 zcmeC%#?-fsX@i0=qrzlGVQI!)n{9>t85tQS_lndrc1`9LUCr1#d8cSKBg1A>v1mp{ x|H%`@^BI?IW|TO<%*)`Il9HODkY1EuT2Q?CoOC-MKSNMzZhjd;Fhy%s0RR_0AmIQ2 delta 96 zcmeC%#?-fsX@i0=Bg14xVQEH&&9=h+jEr5AdqwIQmrdpsUCrn}d8cSKWAA2Dv1mp{ xg~=1e^BH$-W|TO\n" +"PO-Revision-Date: 2021-05-23 17:18+0000\n" +"Last-Translator: magiczocker \n" "Language-Team: German \n" "Language: de\n" @@ -1547,14 +1547,12 @@ msgid "{target} got autopromoted to a new usergroup" msgstr "{target} wurde automatisch einer neuen Benutzergruppe zugeordnet" #: extensions/base/mediawiki.py:844 -#, fuzzy msgid "Added group" msgid_plural "Added groups" msgstr[0] "Hinzugefügte Gruppe" msgstr[1] "Hinzugefügte Gruppen" #: extensions/base/mediawiki.py:846 -#, fuzzy msgid "Removed group" msgid_plural "Removed groups" msgstr[0] "Entfernte Gruppe" diff --git a/locale/it/LC_MESSAGES/formatters.mo b/locale/it/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..e43986202931be3e8872e7a4d39e0d7a63952964 GIT binary patch literal 455 zcmYLF-A=+V7{%z-F1_}mCSGW?OpGyDm~py+OBf>q{JSgL$Ec2WX+K0C!b@MzXR(Np zlbp0oPfySJzIS)NY8G3TdzJ^5+mN-X?d7FiSDJqew0eOIX_V7@&_*c9NQAr; zT#~~y>t@07$Vs768fk0_k<*(+VdzLP;tUd+!kbtyjyD?=%pc6-NxT)HxpE|cnB1oI?qp}qc z-qEc}E@X>jGp-GwHy(9pbE8{jn1ZIE%v3I9!ANsrod@MY^OAP#?}ias{T_{X)*|bz cC&|7?8ZGCMc0qz(&*A|lb}B&5>laS#2WfAIz5oCK literal 0 HcmV?d00001 diff --git a/locale/it/LC_MESSAGES/formatters.po b/locale/it/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..c75a9ed --- /dev/null +++ b/locale/it/LC_MESSAGES/formatters.po @@ -0,0 +1,1604 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDw package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" +msgstr "" + +#: src/api/util.py:71 +msgid "Removed" +msgstr "" + +#: src/api/util.py:73 +msgid "Added" +msgstr "" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 +msgid "Unregistered user" +msgstr "" + +#: src/api/util.py:160 +msgctxt "recent changes Tags" +msgid "Tags" +msgstr "" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "" + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr "" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "" + +#: src/api/util.py:166 +msgid " and {} more" +msgstr "" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "" + +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:105 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: extensions/base/translate.py:55 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: extensions/base/translate.py:80 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:106 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:133 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: extensions/base/translate.py:161 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:177 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:188 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:215 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:231 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:240 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:264 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:288 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:315 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:342 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:387 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:401 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "" + +#: extensions/base/translate.py:431 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:439 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "" + +#: extensions/base/translate.py:464 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "" + +#: extensions/base/translate.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:193 extensions/base/discussions.py:195 +msgctxt "Fandom discussions Tags/Forums" +msgid "Tags" +msgstr "" + +#: extensions/base/discussions.py:193 +msgctxt "Fandom discussions amount of Tags/Forums" +msgid "{} tags" +msgstr "" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:217 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:220 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:234 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" + +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:312 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:318 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "" + +#: extensions/base/discussions.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" + +#: extensions/base/discussions.py:365 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" + +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:80 +#, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "" + +#: extensions/base/managewiki.py:89 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:124 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "" + +#: extensions/base/managewiki.py:134 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:147 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:158 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:173 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "" + +#: extensions/base/managewiki.py:182 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:195 +#, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:203 +#, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:217 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:225 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/datadump.py:36 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "" + +#: extensions/base/datadump.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "" + +#: extensions/base/datadump.py:58 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "" + +#: extensions/base/datadump.py:67 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "" + +#: extensions/base/curseprofile.py:40 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:42 +msgid "Edited their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:44 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "" + +#: extensions/base/curseprofile.py:46 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "" + +#: extensions/base/curseprofile.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:60 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:65 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:67 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:82 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:84 +msgid "Left a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:97 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:100 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:113 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:115 +msgid "Edited a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:131 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:144 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:146 +msgid "Replied to a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:162 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:175 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:177 +msgid "Deleted a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:197 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +"profile.{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:200 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:214 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:216 +msgid "Purged a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:230 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:233 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [their own]({link}) profile." +"{reason}" +msgstr "" + +#: extensions/base/renameuser.py:38 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/renameuser.py:43 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: extensions/base/renameuser.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/renameuser.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" + +#: extensions/base/interwiki.py:37 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:38 extensions/base/interwiki.py:65 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:50 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:64 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:77 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:91 +msgid "Deleted an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:92 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:102 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "None" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Warning issued" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Blocked user**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Tagged the edit" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Disallowed the action" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**IP range blocked**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Throttled actions" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Removed autoconfirmed group" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Removed from privileged groups**" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Edit" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Move" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Stash upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Deletion" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Account creation" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Auto account creation" +msgstr "" + +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "" + +#: extensions/base/abusefilter.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" + +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "" + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "" + +#: extensions/base/mediawiki.py:112 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: extensions/base/mediawiki.py:117 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: extensions/base/mediawiki.py:190 extensions/base/mediawiki.py:223 +msgid "Options" +msgstr "" + +#: extensions/base/mediawiki.py:190 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "" + +#: extensions/base/mediawiki.py:195 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:197 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:199 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "" + +#: extensions/base/mediawiki.py:208 +msgid "**No license!**" +msgstr "" + +#: extensions/base/mediawiki.py:223 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "" + +#: extensions/base/mediawiki.py:228 +msgid "" +"\n" +"License: {}" +msgstr "" + +#: extensions/base/mediawiki.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:248 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:283 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" + +#: extensions/base/mediawiki.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:322 +#, python-brace-format +msgid "Restored {article}" +msgstr "" + +#: extensions/base/mediawiki.py:331 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "" + +#: extensions/base/mediawiki.py:356 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:370 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:383 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr "" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:609 +msgid "Blocked from editing the following pages: " +msgstr "" + +#: extensions/base/mediawiki.py:616 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:618 +msgid "Blocked from editing pages on following namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:629 +msgid "Partial block details" +msgstr "" + +#: extensions/base/mediawiki.py:632 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:634 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr "" + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "" + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:772 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:788 +#, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:803 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:835 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "" + +#: extensions/base/mediawiki.py:837 +msgid "System" +msgstr "" + +#: extensions/base/mediawiki.py:838 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "" + +#: extensions/base/mediawiki.py:844 +msgid "Added group" +msgid_plural "Added groups" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:846 +msgid "Removed group" +msgid_plural "Removed groups" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:860 +#, python-brace-format +msgid "Added to {added} and removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 +#: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 +msgid ", " +msgstr "" + +#: extensions/base/mediawiki.py:863 +#, python-brace-format +msgid "Added to {added}." +msgstr "" + +#: extensions/base/mediawiki.py:865 +#, python-brace-format +msgid "Removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:866 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}): {group_changes}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:870 +#, python-brace-format +msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:883 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" + +#: extensions/base/mediawiki.py:897 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:911 +msgid "Created account automatically" +msgstr "" + +#: extensions/base/mediawiki.py:918 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "" + +#: extensions/base/mediawiki.py:931 extensions/base/mediawiki.py:996 +msgid "Created account" +msgstr "" + +#: extensions/base/mediawiki.py:938 extensions/base/mediawiki.py:1003 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "" + +#: extensions/base/mediawiki.py:950 +#, python-brace-format +msgid "Created account {article}" +msgstr "" + +#: extensions/base/mediawiki.py:959 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:972 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" + +#: extensions/base/mediawiki.py:983 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1015 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:1017 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1029 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1044 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: extensions/base/mediawiki.py:1046 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1057 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1072 +#, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1082 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1103 +#, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1105 +msgid "Removed from" +msgstr "" + +#: extensions/base/mediawiki.py:1105 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1145 +#, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1173 +#, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1182 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/sprite.py:37 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "" + +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" + +#: extensions/base/sprite.py:60 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "" + +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" + +#: extensions/base/sprite.py:79 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "" + +#: extensions/base/sprite.py:86 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" diff --git a/locale/ja/LC_MESSAGES/formatters.mo b/locale/ja/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..2a64407b30ded43ea1f33317a2042b5f5ee02ee7 GIT binary patch literal 452 zcmYk2Pfx-y7{)Pr>d~`@9z1BY8zjbH0poN7XEsL0@ZYU$FJm~`r7fag!Mk72&tfM= ze3D<UGObM@d%^5&SBe)5g?{L5!?vs@x)EFhHx}P3 zlR?9qwyTmAyo1v@lL~ZilJrS?TUUFSfg~PJMON^f;`X%AXjHBwD@ot{t|;c!&r$VS c9lY80njQ2=2EajX=I{VhGZDaN);Vf?1LSUpQvd(} literal 0 HcmV?d00001 diff --git a/locale/ja/LC_MESSAGES/formatters.po b/locale/ja/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..459e87d --- /dev/null +++ b/locale/ja/LC_MESSAGES/formatters.po @@ -0,0 +1,1588 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDw package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" +msgstr "" + +#: src/api/util.py:71 +msgid "Removed" +msgstr "" + +#: src/api/util.py:73 +msgid "Added" +msgstr "" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 +msgid "Unregistered user" +msgstr "" + +#: src/api/util.py:160 +msgctxt "recent changes Tags" +msgid "Tags" +msgstr "" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "" + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr "" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "" + +#: src/api/util.py:166 +msgid " and {} more" +msgstr "" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "" + +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:105 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: extensions/base/translate.py:55 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: extensions/base/translate.py:80 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:106 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:133 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: extensions/base/translate.py:161 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:177 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:188 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:215 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:231 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:240 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:264 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:288 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:315 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:342 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:387 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:401 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "" + +#: extensions/base/translate.py:431 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:439 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "" + +#: extensions/base/translate.py:464 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "" + +#: extensions/base/translate.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:193 extensions/base/discussions.py:195 +msgctxt "Fandom discussions Tags/Forums" +msgid "Tags" +msgstr "" + +#: extensions/base/discussions.py:193 +msgctxt "Fandom discussions amount of Tags/Forums" +msgid "{} tags" +msgstr "" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:217 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:220 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:234 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" + +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:312 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:318 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "" + +#: extensions/base/discussions.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" + +#: extensions/base/discussions.py:365 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" + +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:80 +#, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "" + +#: extensions/base/managewiki.py:89 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:124 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "" + +#: extensions/base/managewiki.py:134 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:147 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:158 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:173 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "" + +#: extensions/base/managewiki.py:182 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:195 +#, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:203 +#, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:217 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:225 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/datadump.py:36 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "" + +#: extensions/base/datadump.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "" + +#: extensions/base/datadump.py:58 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "" + +#: extensions/base/datadump.py:67 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "" + +#: extensions/base/curseprofile.py:40 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:42 +msgid "Edited their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:44 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "" + +#: extensions/base/curseprofile.py:46 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "" + +#: extensions/base/curseprofile.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:60 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:65 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:67 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:82 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:84 +msgid "Left a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:97 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:100 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:113 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:115 +msgid "Edited a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:131 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:144 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:146 +msgid "Replied to a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:162 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:175 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:177 +msgid "Deleted a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:197 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +"profile.{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:200 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:214 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:216 +msgid "Purged a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:230 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:233 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [their own]({link}) profile." +"{reason}" +msgstr "" + +#: extensions/base/renameuser.py:38 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" + +#: extensions/base/renameuser.py:43 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: extensions/base/renameuser.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" + +#: extensions/base/renameuser.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" + +#: extensions/base/interwiki.py:37 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:38 extensions/base/interwiki.py:65 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:50 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:64 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:77 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:91 +msgid "Deleted an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:92 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:102 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "None" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Warning issued" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Blocked user**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Tagged the edit" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Disallowed the action" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**IP range blocked**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Throttled actions" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Removed autoconfirmed group" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Removed from privileged groups**" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Edit" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Move" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Stash upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Deletion" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Account creation" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Auto account creation" +msgstr "" + +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "" + +#: extensions/base/abusefilter.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" + +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "" + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "" + +#: extensions/base/mediawiki.py:112 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: extensions/base/mediawiki.py:117 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: extensions/base/mediawiki.py:190 extensions/base/mediawiki.py:223 +msgid "Options" +msgstr "" + +#: extensions/base/mediawiki.py:190 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "" + +#: extensions/base/mediawiki.py:195 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:197 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:199 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "" + +#: extensions/base/mediawiki.py:208 +msgid "**No license!**" +msgstr "" + +#: extensions/base/mediawiki.py:223 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "" + +#: extensions/base/mediawiki.py:228 +msgid "" +"\n" +"License: {}" +msgstr "" + +#: extensions/base/mediawiki.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:248 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:283 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" + +#: extensions/base/mediawiki.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:322 +#, python-brace-format +msgid "Restored {article}" +msgstr "" + +#: extensions/base/mediawiki.py:331 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "" + +#: extensions/base/mediawiki.py:356 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:370 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "" + +#: extensions/base/mediawiki.py:383 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" + +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr "" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:609 +msgid "Blocked from editing the following pages: " +msgstr "" + +#: extensions/base/mediawiki.py:616 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:618 +msgid "Blocked from editing pages on following namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:629 +msgid "Partial block details" +msgstr "" + +#: extensions/base/mediawiki.py:632 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:634 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr "" + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "" + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "" + +#: extensions/base/mediawiki.py:772 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" + +#: extensions/base/mediawiki.py:788 +#, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "" + +#: extensions/base/mediawiki.py:803 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" + +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:835 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "" + +#: extensions/base/mediawiki.py:837 +msgid "System" +msgstr "" + +#: extensions/base/mediawiki.py:838 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "" + +#: extensions/base/mediawiki.py:844 +msgid "Added group" +msgid_plural "Added groups" +msgstr[0] "" + +#: extensions/base/mediawiki.py:846 +msgid "Removed group" +msgid_plural "Removed groups" +msgstr[0] "" + +#: extensions/base/mediawiki.py:860 +#, python-brace-format +msgid "Added to {added} and removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 +#: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 +msgid ", " +msgstr "" + +#: extensions/base/mediawiki.py:863 +#, python-brace-format +msgid "Added to {added}." +msgstr "" + +#: extensions/base/mediawiki.py:865 +#, python-brace-format +msgid "Removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:866 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}): {group_changes}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:870 +#, python-brace-format +msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:883 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" + +#: extensions/base/mediawiki.py:897 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:911 +msgid "Created account automatically" +msgstr "" + +#: extensions/base/mediawiki.py:918 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "" + +#: extensions/base/mediawiki.py:931 extensions/base/mediawiki.py:996 +msgid "Created account" +msgstr "" + +#: extensions/base/mediawiki.py:938 extensions/base/mediawiki.py:1003 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "" + +#: extensions/base/mediawiki.py:950 +#, python-brace-format +msgid "Created account {article}" +msgstr "" + +#: extensions/base/mediawiki.py:959 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:972 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" + +#: extensions/base/mediawiki.py:983 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1015 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:1017 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1029 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1044 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: extensions/base/mediawiki.py:1046 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1057 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1072 +#, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1082 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1103 +#, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1105 +msgid "Removed from" +msgstr "" + +#: extensions/base/mediawiki.py:1105 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" + +#: extensions/base/mediawiki.py:1118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" + +#: extensions/base/mediawiki.py:1145 +#, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1173 +#, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1182 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/sprite.py:37 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "" + +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" + +#: extensions/base/sprite.py:60 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "" + +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" + +#: extensions/base/sprite.py:79 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "" + +#: extensions/base/sprite.py:86 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" diff --git a/locale/ko/LC_MESSAGES/formatters.mo b/locale/ko/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..13c18662f562a84b8d25153cd010a7898b09ba01 GIT binary patch literal 448 zcmYL_-%i3X6vi=nwM(zP=!F*=?Fxx8Sim^lz{QP`G5mK|w!@f=c4>>~3-|`Up3h<@ z2EOE%w(05V_nn`^gYSmXp5e%FY}hxP8)~%;U*_`4taZ&+BPre>)!5JQBS=*UPSJyq zz&JXI(?RO4Ppud#AvF$FUS#-ol`EVGimXwDV|Xv>H`rwwD0=an7>5yd9dsYj&_8>P zhMpBLrEww|S0&RzQq-RW0UA1?hq_+q_`!|iy0JGNUz<{%uUHN^0k+&4>CUyT6eUFe zHvxNHEQ+bnb_S%{Bv3@Ad77=sOvokE+JqqsL3TYUS_mujLvI(fWjC!m!8LGW@Ut=r zG<;}Mm8{?$l+Kw{pnH>~kK4Pt+QSSa_IN6?g69;qr-imgLyec!l2p literal 0 HcmV?d00001 diff --git a/locale/ko/LC_MESSAGES/formatters.po b/locale/ko/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..7d396bd --- /dev/null +++ b/locale/ko/LC_MESSAGES/formatters.po @@ -0,0 +1,1588 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDw package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" +msgstr "" + +#: src/api/util.py:71 +msgid "Removed" +msgstr "" + +#: src/api/util.py:73 +msgid "Added" +msgstr "" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 +msgid "Unregistered user" +msgstr "" + +#: src/api/util.py:160 +msgctxt "recent changes Tags" +msgid "Tags" +msgstr "" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "" + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr "" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "" + +#: src/api/util.py:166 +msgid " and {} more" +msgstr "" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "" + +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:105 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: extensions/base/translate.py:55 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: extensions/base/translate.py:80 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:106 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:133 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: extensions/base/translate.py:161 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:177 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:188 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:215 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:231 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:240 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:264 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:288 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:315 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:342 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:387 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:401 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "" + +#: extensions/base/translate.py:431 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:439 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "" + +#: extensions/base/translate.py:464 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "" + +#: extensions/base/translate.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:193 extensions/base/discussions.py:195 +msgctxt "Fandom discussions Tags/Forums" +msgid "Tags" +msgstr "" + +#: extensions/base/discussions.py:193 +msgctxt "Fandom discussions amount of Tags/Forums" +msgid "{} tags" +msgstr "" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:217 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:220 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:234 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" + +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:312 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:318 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "" + +#: extensions/base/discussions.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" + +#: extensions/base/discussions.py:365 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" + +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:80 +#, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "" + +#: extensions/base/managewiki.py:89 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:124 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "" + +#: extensions/base/managewiki.py:134 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:147 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:158 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:173 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "" + +#: extensions/base/managewiki.py:182 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:195 +#, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:203 +#, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:217 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:225 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/datadump.py:36 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "" + +#: extensions/base/datadump.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "" + +#: extensions/base/datadump.py:58 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "" + +#: extensions/base/datadump.py:67 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "" + +#: extensions/base/curseprofile.py:40 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:42 +msgid "Edited their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:44 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "" + +#: extensions/base/curseprofile.py:46 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "" + +#: extensions/base/curseprofile.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:60 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:65 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:67 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:82 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:84 +msgid "Left a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:97 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:100 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:113 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:115 +msgid "Edited a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:131 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:144 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:146 +msgid "Replied to a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:162 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:175 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:177 +msgid "Deleted a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:197 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +"profile.{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:200 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:214 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:216 +msgid "Purged a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:230 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:233 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [their own]({link}) profile." +"{reason}" +msgstr "" + +#: extensions/base/renameuser.py:38 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" + +#: extensions/base/renameuser.py:43 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: extensions/base/renameuser.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" + +#: extensions/base/renameuser.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" + +#: extensions/base/interwiki.py:37 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:38 extensions/base/interwiki.py:65 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:50 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:64 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:77 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:91 +msgid "Deleted an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:92 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:102 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "None" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Warning issued" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Blocked user**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Tagged the edit" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Disallowed the action" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**IP range blocked**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Throttled actions" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Removed autoconfirmed group" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Removed from privileged groups**" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Edit" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Move" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Stash upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Deletion" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Account creation" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Auto account creation" +msgstr "" + +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "" + +#: extensions/base/abusefilter.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" + +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "" + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "" + +#: extensions/base/mediawiki.py:112 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: extensions/base/mediawiki.py:117 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: extensions/base/mediawiki.py:190 extensions/base/mediawiki.py:223 +msgid "Options" +msgstr "" + +#: extensions/base/mediawiki.py:190 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "" + +#: extensions/base/mediawiki.py:195 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:197 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:199 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "" + +#: extensions/base/mediawiki.py:208 +msgid "**No license!**" +msgstr "" + +#: extensions/base/mediawiki.py:223 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "" + +#: extensions/base/mediawiki.py:228 +msgid "" +"\n" +"License: {}" +msgstr "" + +#: extensions/base/mediawiki.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:248 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:283 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" + +#: extensions/base/mediawiki.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:322 +#, python-brace-format +msgid "Restored {article}" +msgstr "" + +#: extensions/base/mediawiki.py:331 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "" + +#: extensions/base/mediawiki.py:356 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:370 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "" + +#: extensions/base/mediawiki.py:383 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" + +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr "" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:609 +msgid "Blocked from editing the following pages: " +msgstr "" + +#: extensions/base/mediawiki.py:616 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:618 +msgid "Blocked from editing pages on following namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:629 +msgid "Partial block details" +msgstr "" + +#: extensions/base/mediawiki.py:632 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:634 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr "" + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "" + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "" + +#: extensions/base/mediawiki.py:772 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" + +#: extensions/base/mediawiki.py:788 +#, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "" + +#: extensions/base/mediawiki.py:803 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" + +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:835 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "" + +#: extensions/base/mediawiki.py:837 +msgid "System" +msgstr "" + +#: extensions/base/mediawiki.py:838 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "" + +#: extensions/base/mediawiki.py:844 +msgid "Added group" +msgid_plural "Added groups" +msgstr[0] "" + +#: extensions/base/mediawiki.py:846 +msgid "Removed group" +msgid_plural "Removed groups" +msgstr[0] "" + +#: extensions/base/mediawiki.py:860 +#, python-brace-format +msgid "Added to {added} and removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 +#: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 +msgid ", " +msgstr "" + +#: extensions/base/mediawiki.py:863 +#, python-brace-format +msgid "Added to {added}." +msgstr "" + +#: extensions/base/mediawiki.py:865 +#, python-brace-format +msgid "Removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:866 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}): {group_changes}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:870 +#, python-brace-format +msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:883 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" + +#: extensions/base/mediawiki.py:897 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:911 +msgid "Created account automatically" +msgstr "" + +#: extensions/base/mediawiki.py:918 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "" + +#: extensions/base/mediawiki.py:931 extensions/base/mediawiki.py:996 +msgid "Created account" +msgstr "" + +#: extensions/base/mediawiki.py:938 extensions/base/mediawiki.py:1003 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "" + +#: extensions/base/mediawiki.py:950 +#, python-brace-format +msgid "Created account {article}" +msgstr "" + +#: extensions/base/mediawiki.py:959 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:972 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" + +#: extensions/base/mediawiki.py:983 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1015 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:1017 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1029 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1044 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: extensions/base/mediawiki.py:1046 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1057 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1072 +#, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1082 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1103 +#, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1105 +msgid "Removed from" +msgstr "" + +#: extensions/base/mediawiki.py:1105 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" + +#: extensions/base/mediawiki.py:1118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" + +#: extensions/base/mediawiki.py:1145 +#, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1173 +#, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1182 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/sprite.py:37 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "" + +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" + +#: extensions/base/sprite.py:60 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "" + +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" + +#: extensions/base/sprite.py:79 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "" + +#: extensions/base/sprite.py:86 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" diff --git a/locale/pl/LC_MESSAGES/formatters.mo b/locale/pl/LC_MESSAGES/formatters.mo index 65c0c7a607881c48e1c180e550325598b6820aaa..81a55dd0ffe8fc0b5d7a019be09f37613b0c6c54 100644 GIT binary patch delta 5331 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 delta 4759 zcmYk<2~-u=0mku*c_OPUViaU~D2pq&2N4V)iW_dY#T5n7uo#tKNYy@@h$%*6Bh_eJ z+Nd$Mf+TrHlS;J2B{q!>S{F=Pb4=4?7R_l>LV9ZK>Hm8(c$ky#{qCJN@6MgO4CelA zujZRxu3Mpw9fqTsM3TRH8x!wk%-%qqHD+L_F#$Npb`*wCpJ>+?pe`-OV5~%ctj3PG z1AF5h?1Ja)@0*e9UFHi4VSMpD2B9BU^~4BN!|B)^C*o=>#5}x#{jncEPQ^K>4%DD- zcnH<;OBjxyqB_)q@%Uft&;5PN&jillOIBYiPldsrP#!ZhmRZ~|8KVEolU6DI~@3r@#)R-(>VqDEjZ zs-uml8#Uu#ypR1biD6O4=GtyRb@(u*<5BzkSE%0w(Mz7uWJNRnx^O-xd~q>$!V=Wn zmD}g5Q9r1`0a%Ax3x7e4#J8vpcjdA5`w^%$k%>H$S%n(et*DW%$4b2EqM#?5?zDD6 z1?mQyQ5U|8`r+rOHR7P68z&dVM)d1Sb+zThD|sN<1sA8 z$MFEFqo3RLG+rK~bcb~m)Zi&pLtPmE#W)!!;hU(2AK*AFPcmjaHsE~pW}+8h0j|YH ztj2U!^a%VAThMC|(}}I9MOn{E%+nLzqfm~SLs)qD4rXI4Z==;%gwNtl)c1MAj9Gza zFb$I!-+U~=8Tc`d#8@7G3@*T2JcwKIU#JIhr4S9xMG6_{LwBd)ch~=STL5-QXZ(9m2x3CiU_T7T zk*J0zp*mKC>PQ8u;k6isM^FvDkJ^qOAsfQnL2XmNQP%q*3e|o#szWpIWnAN;Fpq){ z^T4_=g{Udn$%i^}9a+%k4r)q5Gptu@0%}Od+VxyyVVg3H!riDjK8b2qe{poT72`+LA?@va6NX!P3Xie_W3&0gPcH@R&x`DNAUq>VAv$K3eH4d+=yBu zFJVtSjhdR<$Z{~=x!lN$_Xg@grm!HK_zbeX%`Q}XH&E?(PqAK5!>2Gny76jGXzr?Q z51}{pGZ=ywP*c!spZ@`M{r^x;8a~w;(w?>%sNXF_b$BIe1Zz;M{s?NM8m2P-t0**b zLUTA|n)UAAjwRGvkU=r|)7h3hVJ+&FdpFN|CHI+O%rfc+k^hYUOcs`|$3hIAWy~?G zz%3Xzn-AJ~3l~s)+cn4fs}%f%)j%<3^2Hh4sB7n1@9s^==$WgSjlFnjJc-MZWnivg z4o1!A=C~Aj2bl|~4m!A-I#`P3*oaz7u3o<2if^2P`t?IoyXYpflg<$Ps*+ zCul_{mMpOr;g$mHL7Gq_+Ly;)iF=X3Fo8>r`3V-_2E2t_=Q4|mtQ%iOJxMCv&_g*(fA{d!Hi<-{}VQ0B=t{GYvBis!U*O!N*gqV z0uN$l;UhQ){ct{Z#%1V(YwYtbyS~}}z6Q0351`t454Ffnp#wj`AiRo!_ywxH@31rX zH}@%opkJxgvq%h}o{9r82UD>UccK3D9w0XexAYvk zzvmA^HGV|ak&EOU(V?Md20Uv+^@Ai@1&*JQpAzQLd`#AmPDF>EIG)6k%cSklw$@EG z(upeWq`>Yo*GT(g6BRbc!z05koyYg>@}IC5(KM|k&ycR<6!|szEqROR_zht*c>bw3 zMJG6(_jJW7Km6=Z>55&`9~O3^=h)4sUeCQrHu;dS>&zLVBaAF2T3kAwBcq9?(6bJ3 z0%3!h?PNdsgJ=9H=qR>$_*q412^sM4jP(cSS?ZVUbHBu2wEKP-(=dU$D!sA}=@dEAlisOBRt6bIsS)n^Av)aT_av7DkjKdD zWGHDQ`^ZWX!Tmk2U-0~ilpFQIG0MX8I$lpXoczu{HxkoGDJdfbqzBQ9X@mH9iRcA0hU5_)e\n" "Language-Team: Polish \n" @@ -663,9 +663,9 @@ msgstr "" "[{author}]({author_url}) wygenerował(a) kopię zapasową w *{file}*{comment}" #: extensions/base/datadump.py:58 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted {file} dump" -msgstr "Usunął stronę {article}" +msgstr "Usunął plik kopii {file}" #: extensions/base/datadump.py:67 #, python-brace-format @@ -711,13 +711,13 @@ msgstr "" "[{target}]({target_url}). *({desc})*" #: extensions/base/curseprofile.py:65 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " "profile." msgstr "" -"[{author}]({author_url}) edytował(a) pole {field} na [swoim własnym]" -"({target_url}) profilu. *({desc})*" +"[{author}]({author_url}) wyczyścił(a) pole {field} na [swoim " +"własnym]({target_url}) profilu." #: extensions/base/curseprofile.py:67 #, python-brace-format @@ -738,20 +738,20 @@ msgid "Left a comment on their own profile" msgstr "Zostawił(a) komentarz na swoim profilu" #: extensions/base/curseprofile.py:97 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." msgstr "" "[{author}]({author_url}) zostawił(a) [komentarz]({comment}) na profilu " -"użytkownika {target}" +"użytkownika {target}." #: extensions/base/curseprofile.py:100 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on their own profile." msgstr "" "[{author}]({author_url}) zostawił(a) [komentarz]({comment}) na swoim własnym " -"profilu" +"profilu." #: extensions/base/curseprofile.py:113 #, python-brace-format @@ -771,7 +771,7 @@ msgstr "" "użytkownika {target}" #: extensions/base/curseprofile.py:131 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on their own profile." msgstr "" @@ -788,7 +788,7 @@ msgid "Replied to a comment on their own profile" msgstr "Odpowiedział(a) na komentarz na swoim profilu" #: extensions/base/curseprofile.py:159 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " "profile." diff --git a/locale/sv/LC_MESSAGES/formatters.mo b/locale/sv/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..2520d1eb3967d9a625c8146960e05145f709a4e6 GIT binary patch literal 455 zcmYL_%}xR_6ooaq>e97~YvMwqoe^UU7BG&^fFul%0sPyQnafZe+DThLAHt=t=d)PE z$VtAmO>b|{x!-%cUt3Pwj(x|WW5;poSgGpxbeC6dUDf=nuhlE2mbNqcfZ7Np84Q+~ z2{VPGByFYP@|Yx8Ds5?Oa*@&7d2Z-XF(CaOO>iMrk7&p(GI)-HgvLD@25{eFar@+@ z*NsSr8%u|pOH**GG=t`-(}8XfM^KOApxwC%!Z3*jgKJkR^EuCv4w26`PU=%@OT&EM z{&hibDc;0bSuaDsTxT%8PV+Qd`V*yR+*%jMHw%B$lz~~0xE)8Es1@&w+$m{MI)@*n zi(v8H`eng|tU)^E+MsQWhD}=C)U7;BP}4}JDibniP#p_P`o&!Hf;QdnhJh@9kEU^6 fgY~u{;h+JP8hN5El&IIUc*L=r3c`hVNw$6ftAB_9 literal 0 HcmV?d00001 diff --git a/locale/sv/LC_MESSAGES/formatters.po b/locale/sv/LC_MESSAGES/formatters.po new file mode 100644 index 0000000..df709ed --- /dev/null +++ b/locale/sv/LC_MESSAGES/formatters.po @@ -0,0 +1,1604 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDw package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" +msgstr "" + +#: src/api/util.py:71 +msgid "Removed" +msgstr "" + +#: src/api/util.py:73 +msgid "Added" +msgstr "" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 +msgid "Unregistered user" +msgstr "" + +#: src/api/util.py:160 +msgctxt "recent changes Tags" +msgid "Tags" +msgstr "" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "" + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr "" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "" + +#: src/api/util.py:166 +msgid " and {} more" +msgstr "" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "" + +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:105 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: extensions/base/translate.py:55 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: extensions/base/translate.py:80 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:106 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:133 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: extensions/base/translate.py:161 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:177 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:188 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:215 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:231 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:240 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:264 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:288 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:315 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:342 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:387 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:401 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "" + +#: extensions/base/translate.py:431 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:439 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "" + +#: extensions/base/translate.py:464 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "" + +#: extensions/base/translate.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:193 extensions/base/discussions.py:195 +msgctxt "Fandom discussions Tags/Forums" +msgid "Tags" +msgstr "" + +#: extensions/base/discussions.py:193 +msgctxt "Fandom discussions amount of Tags/Forums" +msgid "{} tags" +msgstr "" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:217 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:220 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:234 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" + +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:312 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:318 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "" + +#: extensions/base/discussions.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" + +#: extensions/base/discussions.py:365 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" + +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:80 +#, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "" + +#: extensions/base/managewiki.py:89 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:124 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "" + +#: extensions/base/managewiki.py:134 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:147 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:158 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:173 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "" + +#: extensions/base/managewiki.py:182 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:195 +#, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:203 +#, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:217 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:225 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/datadump.py:36 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "" + +#: extensions/base/datadump.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "" + +#: extensions/base/datadump.py:58 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "" + +#: extensions/base/datadump.py:67 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "" + +#: extensions/base/curseprofile.py:40 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:42 +msgid "Edited their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:44 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "" + +#: extensions/base/curseprofile.py:46 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "" + +#: extensions/base/curseprofile.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:60 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:65 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:67 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:82 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:84 +msgid "Left a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:97 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:100 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:113 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:115 +msgid "Edited a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:131 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:144 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:146 +msgid "Replied to a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:162 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:175 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:177 +msgid "Deleted a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:197 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +"profile.{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:200 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:214 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:216 +msgid "Purged a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:230 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:233 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [their own]({link}) profile." +"{reason}" +msgstr "" + +#: extensions/base/renameuser.py:38 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/renameuser.py:43 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: extensions/base/renameuser.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/renameuser.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" + +#: extensions/base/interwiki.py:37 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:38 extensions/base/interwiki.py:65 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:50 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:64 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:77 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:91 +msgid "Deleted an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:92 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:102 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "None" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Warning issued" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Blocked user**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Tagged the edit" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Disallowed the action" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**IP range blocked**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Throttled actions" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Removed autoconfirmed group" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Removed from privileged groups**" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Edit" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Move" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Stash upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Deletion" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Account creation" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Auto account creation" +msgstr "" + +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "" + +#: extensions/base/abusefilter.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" + +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "" + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "" + +#: extensions/base/mediawiki.py:112 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: extensions/base/mediawiki.py:117 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: extensions/base/mediawiki.py:190 extensions/base/mediawiki.py:223 +msgid "Options" +msgstr "" + +#: extensions/base/mediawiki.py:190 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "" + +#: extensions/base/mediawiki.py:195 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:197 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:199 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "" + +#: extensions/base/mediawiki.py:208 +msgid "**No license!**" +msgstr "" + +#: extensions/base/mediawiki.py:223 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "" + +#: extensions/base/mediawiki.py:228 +msgid "" +"\n" +"License: {}" +msgstr "" + +#: extensions/base/mediawiki.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:248 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:283 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" + +#: extensions/base/mediawiki.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:322 +#, python-brace-format +msgid "Restored {article}" +msgstr "" + +#: extensions/base/mediawiki.py:331 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "" + +#: extensions/base/mediawiki.py:356 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:370 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:383 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr "" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:609 +msgid "Blocked from editing the following pages: " +msgstr "" + +#: extensions/base/mediawiki.py:616 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:618 +msgid "Blocked from editing pages on following namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:629 +msgid "Partial block details" +msgstr "" + +#: extensions/base/mediawiki.py:632 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:634 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr "" + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "" + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:772 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:788 +#, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:803 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:835 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "" + +#: extensions/base/mediawiki.py:837 +msgid "System" +msgstr "" + +#: extensions/base/mediawiki.py:838 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "" + +#: extensions/base/mediawiki.py:844 +msgid "Added group" +msgid_plural "Added groups" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:846 +msgid "Removed group" +msgid_plural "Removed groups" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:860 +#, python-brace-format +msgid "Added to {added} and removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 +#: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 +msgid ", " +msgstr "" + +#: extensions/base/mediawiki.py:863 +#, python-brace-format +msgid "Added to {added}." +msgstr "" + +#: extensions/base/mediawiki.py:865 +#, python-brace-format +msgid "Removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:866 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}): {group_changes}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:870 +#, python-brace-format +msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:883 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" + +#: extensions/base/mediawiki.py:897 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:911 +msgid "Created account automatically" +msgstr "" + +#: extensions/base/mediawiki.py:918 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "" + +#: extensions/base/mediawiki.py:931 extensions/base/mediawiki.py:996 +msgid "Created account" +msgstr "" + +#: extensions/base/mediawiki.py:938 extensions/base/mediawiki.py:1003 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "" + +#: extensions/base/mediawiki.py:950 +#, python-brace-format +msgid "Created account {article}" +msgstr "" + +#: extensions/base/mediawiki.py:959 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:972 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" + +#: extensions/base/mediawiki.py:983 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1015 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:1017 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1029 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1044 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: extensions/base/mediawiki.py:1046 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1057 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1072 +#, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1082 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1103 +#, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1105 +msgid "Removed from" +msgstr "" + +#: extensions/base/mediawiki.py:1105 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1145 +#, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1173 +#, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1182 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/sprite.py:37 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "" + +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" + +#: extensions/base/sprite.py:60 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "" + +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" + +#: extensions/base/sprite.py:79 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "" + +#: extensions/base/sprite.py:86 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" diff --git a/locale/sv/LC_MESSAGES/misc.mo b/locale/sv/LC_MESSAGES/misc.mo new file mode 100644 index 0000000000000000000000000000000000000000..9cd13195f666403805e11e4eb49dd87b4361c53b GIT binary patch literal 449 zcmYL_-%i3X6vi=nwM(zPsEHRE?Iy+;EX+9Fz$J{40sgxy-EmY$yR-%L348)y&u6iS zabNOF+w|+{ch2|j&R4@~%d%%VuxwjSENitapZ4<7u4~V~hDyEyGdRxiJt)nkAZWCL zoa-4n%vg_wt0O0aN-BdBUGN;=EDDXsk|1Z8;tZC2{RoHD06|Ytkl`f7VSw&ZlElZ) z=^%3YR2w{2ROpf#sR-&$`h7GAk_dI8B#8UhK^SJyXmn+*qFB%Z@EGX4PSTkfQ)%LP z=C2C4EB?l((zrQz)uspSDORw2<;}Tfo?d!&IfC@kN#Z1`n{2wL&aD&%gw6I*+3*J5 zjaQYFi#B32sx%mXGVbD5?OXr;0t!ch$()OVpw^TdXIL&2Epb<>xh6od=+E_rhuX01BjqUjP6A literal 0 HcmV?d00001 diff --git a/locale/sv/LC_MESSAGES/misc.po b/locale/sv/LC_MESSAGES/misc.po new file mode 100644 index 0000000..52022c4 --- /dev/null +++ b/locale/sv/LC_MESSAGES/misc.po @@ -0,0 +1,83 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDw package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/misc.py:44 +msgid "Location" +msgstr "" + +#: src/misc.py:44 +msgid "About me" +msgstr "" + +#: src/misc.py:44 +msgid "Google link" +msgstr "" + +#: src/misc.py:44 +msgid "Facebook link" +msgstr "" + +#: src/misc.py:44 +msgid "Twitter link" +msgstr "" + +#: src/misc.py:44 +msgid "Reddit link" +msgstr "" + +#: src/misc.py:44 +msgid "Twitch link" +msgstr "" + +#: src/misc.py:44 +msgid "PSN link" +msgstr "" + +#: src/misc.py:44 +msgid "VK link" +msgstr "" + +#: src/misc.py:44 +msgid "XBL link" +msgstr "" + +#: src/misc.py:44 +msgid "Steam link" +msgstr "" + +#: src/misc.py:44 +msgid "Discord handle" +msgstr "" + +#: src/misc.py:44 +msgid "Battle.net handle" +msgstr "" + +#: src/misc.py:138 +msgid "" +"\n" +"__And more__" +msgstr "" + +#: src/misc.py:322 +msgid "Unknown" +msgstr "" + +#: src/misc.py:324 +msgid "unknown" +msgstr "" diff --git a/locale/sv/LC_MESSAGES/rcgcdw.mo b/locale/sv/LC_MESSAGES/rcgcdw.mo new file mode 100644 index 0000000000000000000000000000000000000000..9428059500c70a36de13bfad54333c35d2836358 GIT binary patch literal 449 zcmYL_O-{ow5QU3icHl zoD4$LXWEdlVnUb9NJVjX((mJeABVUT#(vbl_Jbe|N24p7DvAXwfQ*67YbTwVF_osS zYyP@`v*K@jDvgtaTWx00uF8rmU%7L}g{zlt-Hu|tL~#^{^^i^H6x~W;Kv-`dl{IhR z-MCe0i`zJxF{QzHlW~`{>b&*uFQ7;$GMRHxP~4hwgNEfov66J9nrn(h^?TLcSsQOc cPvCtIH{0lu^gw{xY~cZ>b{~MxoeR|X0R^*#SO5S3 literal 0 HcmV?d00001 diff --git a/locale/sv/LC_MESSAGES/rcgcdw.po b/locale/sv/LC_MESSAGES/rcgcdw.po new file mode 100644 index 0000000..d2640f6 --- /dev/null +++ b/locale/sv/LC_MESSAGES/rcgcdw.po @@ -0,0 +1,111 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDw package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: src/rcgcdw.py:117 +#, python-brace-format +msgid "{value} (avg. {avg})" +msgstr "" + +#: src/rcgcdw.py:136 +msgid "Daily overview" +msgstr "" + +#: src/rcgcdw.py:143 +msgid "No activity" +msgstr "" + +#: src/rcgcdw.py:167 +msgid " ({} action)" +msgid_plural " ({} actions)" +msgstr[0] "" +msgstr[1] "" + +#: src/rcgcdw.py:169 +msgid " ({} edit)" +msgid_plural " ({} edits)" +msgstr[0] "" +msgstr[1] "" + +#: src/rcgcdw.py:174 +msgid " UTC ({} action)" +msgid_plural " UTC ({} actions)" +msgstr[0] "" +msgstr[1] "" + +#: src/rcgcdw.py:176 src/rcgcdw.py:179 +msgid "But nobody came" +msgstr "" + +#: src/rcgcdw.py:183 +msgid "Most active user" +msgid_plural "Most active users" +msgstr[0] "" +msgstr[1] "" + +#: src/rcgcdw.py:184 +msgid "Most edited article" +msgid_plural "Most edited articles" +msgstr[0] "" +msgstr[1] "" + +#: src/rcgcdw.py:185 +msgid "Edits made" +msgstr "" + +#: src/rcgcdw.py:185 +msgid "New files" +msgstr "" + +#: src/rcgcdw.py:186 +msgid "Admin actions" +msgstr "" + +#: src/rcgcdw.py:186 +msgid "Bytes changed" +msgstr "" + +#: src/rcgcdw.py:187 +msgid "New articles" +msgstr "" + +#: src/rcgcdw.py:187 +msgid "Unique contributors" +msgstr "" + +#: src/rcgcdw.py:188 +msgid "Most active hour" +msgid_plural "Most active hours" +msgstr[0] "" +msgstr[1] "" + +#: src/rcgcdw.py:189 +msgid "Day score" +msgstr "" + +#: src/rcgcdw.py:215 +msgid "~~hidden~~" +msgstr "" + +#: src/rcgcdw.py:217 +msgid "No description provided" +msgstr "" + +#: src/rcgcdw.py:220 +msgid "hidden" +msgstr "" diff --git a/locale/sv/LC_MESSAGES/redaction.mo b/locale/sv/LC_MESSAGES/redaction.mo new file mode 100644 index 0000000000000000000000000000000000000000..f11bd82ec4bc818679d5ef271c45768ad8236a28 GIT binary patch literal 454 zcmYL_O-{ow5QU3il_hHyMq&X1HxwaM+y)UyS|TM)m8Sgd++;`%tsU8J19xD{^*9R- zMdV4JY|AsF_vU+d=c{G3W!N(u7`6>3hFV?2r}?}zXI=BJu@tY6X&mJE9;9M|6EvwH zXKIcPlWdrI)sdAzDWt}cDp-zhR)xZ;AjlfWIDs{*o3KYU5cK4`365gyx#%t?QE>bm zk9;enO5;>gt`<}aNzh;#hG^tQKI;3C8-&-c=OzARa%D<+v7!aw6zH;X(w}QxDq`FE zZwj<4_QqyHw{x(|O$KGltjO}pmXOm-8&|ek+s#aZ)Y^)I$ZwK%+Naj7;2O9w_)(e! z8s4>CE-2$Yl+CGBpq*(tz}=>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/discord/redaction.py:77 src/discord/redaction.py:80 +#: src/discord/redaction.py:85 +msgid "Removed" +msgstr "" diff --git a/locale/tr/LC_MESSAGES/formatters.mo b/locale/tr/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..1c0ad0df644914788e93271ec27850910fe0813c GIT binary patch literal 455 zcmYL_-%i3X6vj1rwM(zPsEHREEfZr57BEgXa0vr4hX3x$b{Lh>F6}||A-weUd=@(~ za*|)#re9CL?|kp=er?&>w(MIDEjyM|OH~car@g$gYo+, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-22 18:48+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: src/api/util.py:61 src/api/util.py:66 +msgid "__Only whitespace__" +msgstr "" + +#: src/api/util.py:71 +msgid "Removed" +msgstr "" + +#: src/api/util.py:73 +msgid "Added" +msgstr "" + +#: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 +#: src/api/util.py:141 extensions/base/discussions.py:247 +#: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 +msgid "Unregistered user" +msgstr "" + +#: src/api/util.py:160 +msgctxt "recent changes Tags" +msgid "Tags" +msgstr "" + +#: src/api/util.py:162 +msgid "**Added**: " +msgstr "" + +#: src/api/util.py:163 +msgid " and {} more\n" +msgstr "" + +#: src/api/util.py:165 +msgid "**Removed**: " +msgstr "" + +#: src/api/util.py:166 +msgid " and {} more" +msgstr "" + +#: src/api/util.py:168 +msgid "Changed categories" +msgstr "" + +#: extensions/base/cargo.py:37 +#, python-brace-format +msgid "Created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:60 +#, python-brace-format +msgid "Recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:68 +#, python-brace-format +msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:83 +#, python-brace-format +msgid "Replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:91 +#, python-brace-format +msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:105 +#, python-brace-format +msgid "Deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/cargo.py:112 +#, python-brace-format +msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" +msgstr "" + +#: extensions/base/translate.py:41 +#, python-brace-format +msgid "Marked \"{article}\" for translation" +msgstr "" + +#: extensions/base/translate.py:55 +#, python-brace-format +msgid "" +"[{author}]({author_url}) marked [{article}]({article_url}) for " +"translation{comment}" +msgstr "" + +#: extensions/base/translate.py:70 +#, python-brace-format +msgid "Removed \"{article}\" from the translation system" +msgstr "" + +#: extensions/base/translate.py:80 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed [{article}]({article_url}) from the " +"translation system{comment}" +msgstr "" + +#: extensions/base/translate.py:95 +#, python-brace-format +msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:106 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed moving translation pages from *{article}* " +"to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:121 +#, python-brace-format +msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:133 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encountered a problem while moving [{article}]" +"({article_url}) to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:149 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translatable page " +"\"{target}\"" +msgstr "" + +#: extensions/base/translate.py:161 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translatable page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:177 +#, python-brace-format +msgid "Completed deletion of translation page \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:188 +#, python-brace-format +msgid "" +"[{author}]({author_url}) completed deletion of translation page [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:203 +#, python-brace-format +msgid "" +"Failed to delete \"{article}\" which belongs to translation page \"{target}\"" +msgstr "" + +#: extensions/base/translate.py:215 +#, python-brace-format +msgid "" +"[{author}]({author_url}) failed to delete [{article}]({article_url}) which " +"belongs to translation page [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:231 +#, python-brace-format +msgid "Encouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:240 +#, python-brace-format +msgid "" +"[{author}]({author_url}) encouraged translation of [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:255 +#, python-brace-format +msgid "Discouraged translation of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:264 +#, python-brace-format +msgid "" +"[{author}]({author_url}) discouraged translation of [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:282 +#, python-brace-format +msgid "Limited languages for \"{article}\" to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:285 +#, python-brace-format +msgid "Priority languages for \"{article}\" set to `{languages}`" +msgstr "" + +#: extensions/base/translate.py:288 +#, python-brace-format +msgid "Removed priority languages from \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:301 +#, python-brace-format +msgid "" +"[{author}]({author_url}) limited languages for [{article}]({article_url}) to " +"`{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) set the priority languages for [{article}]" +"({article_url}) to `{languages}`{comment}" +msgstr "" + +#: extensions/base/translate.py:315 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed priority languages from [{article}]" +"({article_url}){comment}" +msgstr "" + +#: extensions/base/translate.py:331 +#, python-brace-format +msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:342 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added translatable page [{article}]({article_url}) " +"to aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:357 +#, python-brace-format +msgid "" +"Removed translatable page \"{article}\" from aggregate group \"{group}\"" +msgstr "" + +#: extensions/base/translate.py:368 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed translatable page [{article}]" +"({article_url}) from aggregate group \"{group}\"{comment}" +msgstr "" + +#: extensions/base/translate.py:387 +#, python-brace-format +msgid "Reviewed translation \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:401 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reviewed translation [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/translate.py:416 +#, python-brace-format +msgid "Changed the state of `{language}` translations of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:419 +msgid "Old state" +msgstr "" + +#: extensions/base/translate.py:420 +msgid "New state" +msgstr "" + +#: extensions/base/translate.py:431 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:439 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the state of `{language}` translations of " +"[{article}]({article_url}) to `{new_state}`{comment}" +msgstr "" + +#: extensions/base/translate.py:452 extensions/base/translate.py:455 +msgid "(default)" +msgstr "" + +#: extensions/base/translate.py:464 +#, python-brace-format +msgid "Changed the language of \"{article}\"" +msgstr "" + +#: extensions/base/translate.py:465 +msgid "Old language" +msgstr "" + +#: extensions/base/translate.py:466 +msgid "New language" +msgstr "" + +#: extensions/base/translate.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the language of [{article}]({article_url}) " +"from {old_lang} to {new_lang}{comment}" +msgstr "" + +#: extensions/base/discussions.py:148 extensions/base/discussions.py:207 +#: extensions/base/discussions.py:245 extensions/base/discussions.py:261 +#: extensions/base/discussions.py:284 extensions/base/discussions.py:306 +#: extensions/base/discussions.py:334 extensions/base/discussions.py:354 +msgid "unknown" +msgstr "" + +#: extensions/base/discussions.py:157 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:161 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:168 +msgid "Option {}" +msgstr "" + +#: extensions/base/discussions.py:170 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "" + +#: extensions/base/discussions.py:174 +#, python-brace-format +msgid "Created a quiz \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:193 extensions/base/discussions.py:195 +msgctxt "Fandom discussions Tags/Forums" +msgid "Tags" +msgstr "" + +#: extensions/base/discussions.py:193 +msgctxt "Fandom discussions amount of Tags/Forums" +msgid "{} tags" +msgstr "" + +#: extensions/base/discussions.py:198 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "" + +#: extensions/base/discussions.py:214 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:217 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:220 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" +msgstr "" + +#: extensions/base/discussions.py:234 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) " +"to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" + +#: extensions/base/discussions.py:292 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:298 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" + +#: extensions/base/discussions.py:312 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:318 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" + +#: extensions/base/discussions.py:338 +#, python-brace-format +msgid "Commented on {article}" +msgstr "" + +#: extensions/base/discussions.py:344 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "" + +#: extensions/base/discussions.py:359 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) " +"on [{article}](<{url}>)" +msgstr "" + +#: extensions/base/discussions.py:365 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}" +"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on " +"[{article}](<{url}>)" +msgstr "" + +#: extensions/base/managewiki.py:34 +msgid "Changed wiki settings" +msgstr "" + +#: extensions/base/managewiki.py:44 +#, python-brace-format +msgid "[{author}]({author_url}) changed wiki settings{reason}" +msgstr "" + +#: extensions/base/managewiki.py:55 +#, python-brace-format +msgid "Deleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:55 extensions/base/managewiki.py:67 +#: extensions/base/managewiki.py:103 extensions/base/managewiki.py:112 +#: extensions/base/managewiki.py:125 extensions/base/managewiki.py:126 +#: extensions/base/managewiki.py:135 extensions/base/managewiki.py:136 +#: extensions/base/managewiki.py:148 extensions/base/managewiki.py:149 +#: extensions/base/managewiki.py:160 extensions/base/managewiki.py:161 +#: extensions/base/managewiki.py:195 extensions/base/managewiki.py:204 +#: extensions/base/managewiki.py:217 extensions/base/managewiki.py:226 +#: extensions/base/abusefilter.py:55 extensions/base/abusefilter.py:56 +#: extensions/base/abusefilter.py:57 extensions/base/abusefilter.py:68 +#: extensions/base/abusefilter.py:69 extensions/base/abusefilter.py:70 +#: extensions/base/mediawiki.py:744 +msgid "Unknown" +msgstr "" + +#: extensions/base/managewiki.py:63 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:80 +#, python-brace-format +msgid "Deleted a \"{group}\" user group" +msgstr "" + +#: extensions/base/managewiki.py:89 +#, python-brace-format +msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:103 +#, python-brace-format +msgid "Locked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:111 +#, python-brace-format +msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:124 +#, python-brace-format +msgid "Modified \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 +msgid "Wiki" +msgstr "" + +#: extensions/base/managewiki.py:134 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:147 +#, python-brace-format +msgid "Deleted a \"{namespace_name}\" namespace" +msgstr "" + +#: extensions/base/managewiki.py:158 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a namespace *{namespace_name}* on " +"*{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:173 +#, python-brace-format +msgid "Modified \"{usergroup_name}\" usergroup" +msgstr "" + +#: extensions/base/managewiki.py:182 +#, python-brace-format +msgid "[{author}]({author_url}) modified user group *{group_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:195 +#, python-brace-format +msgid "Undeleted a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:203 +#, python-brace-format +msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/managewiki.py:217 +#, python-brace-format +msgid "Unlocked a \"{wiki}\" wiki" +msgstr "" + +#: extensions/base/managewiki.py:225 +#, python-brace-format +msgid "[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}" +msgstr "" + +#: extensions/base/datadump.py:36 +#, python-brace-format +msgid "Generated {file} dump" +msgstr "" + +#: extensions/base/datadump.py:45 +#, python-brace-format +msgid "[{author}]({author_url}) generated *{file}* dump{comment}" +msgstr "" + +#: extensions/base/datadump.py:58 +#, python-brace-format +msgid "Deleted {file} dump" +msgstr "" + +#: extensions/base/datadump.py:67 +#, python-brace-format +msgid "[{author}]({author_url}) deleted *{file}* dump{comment}" +msgstr "" + +#: extensions/base/curseprofile.py:40 +#, python-brace-format +msgid "Edited {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:42 +msgid "Edited their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:44 +#, python-brace-format +msgid "Cleared the {field} field" +msgstr "" + +#: extensions/base/curseprofile.py:46 +#, python-brace-format +msgid "{field} field changed to: {desc}" +msgstr "" + +#: extensions/base/curseprofile.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:60 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:65 +#, python-brace-format +msgid "" +"[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:67 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the {field} on [their own]({target_url}) " +"profile. *({desc})*" +msgstr "" + +#: extensions/base/curseprofile.py:82 +#, python-brace-format +msgid "Left a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:84 +msgid "Left a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:97 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:100 +#, python-brace-format +msgid "" +"[{author}]({author_url}) left a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:113 +#, python-brace-format +msgid "Edited a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:115 +msgid "Edited a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." +msgstr "" + +#: extensions/base/curseprofile.py:131 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited a [comment]({comment}) on their own profile." +msgstr "" + +#: extensions/base/curseprofile.py:144 +#, python-brace-format +msgid "Replied to a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:146 +msgid "Replied to a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:159 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:162 +#, python-brace-format +msgid "" +"[{author}]({author_url}) replied to a [comment]({comment}) on their own " +"profile." +msgstr "" + +#: extensions/base/curseprofile.py:175 +#, python-brace-format +msgid "Deleted a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:177 +msgid "Deleted a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:197 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " +"profile.{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:200 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:214 +#, python-brace-format +msgid "Purged a comment on {target}'s profile" +msgstr "" + +#: extensions/base/curseprofile.py:216 +msgid "Purged a comment on their own profile" +msgstr "" + +#: extensions/base/curseprofile.py:230 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." +"{reason}" +msgstr "" + +#: extensions/base/curseprofile.py:233 +#, python-brace-format +msgid "" +"[{author}]({author_url}) purged a comment on [their own]({link}) profile." +"{reason}" +msgstr "" + +#: extensions/base/renameuser.py:38 +#, python-brace-format +msgid "Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"" +msgid_plural "Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/renameuser.py:43 +#, python-brace-format +msgid "Renamed user \"{old_name}\" to \"{new_name}\"" +msgstr "" + +#: extensions/base/renameuser.py:58 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " +"[{new_name}]({link}){comment}" +msgid_plural "" +"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " +"[{new_name}]({link}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/renameuser.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" +"{comment}" +msgstr "" + +#: extensions/base/interwiki.py:37 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:38 extensions/base/interwiki.py:65 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:50 +#, python-brace-format +msgid "" +"[{author}]({author_url}) added an entry to the [interwiki table]" +"({table_url}) pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:64 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:77 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " +"pointing to {website} with {prefix} prefix" +msgstr "" + +#: extensions/base/interwiki.py:91 +msgid "Deleted an entry in interwiki table" +msgstr "" + +#: extensions/base/interwiki.py:92 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: extensions/base/interwiki.py:102 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" +"{desc}" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "None" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Warning issued" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Blocked user**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Tagged the edit" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Disallowed the action" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**IP range blocked**" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Throttled actions" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "Removed autoconfirmed group" +msgstr "" + +#: extensions/base/abusefilter.py:29 +msgid "**Removed from privileged groups**" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Edit" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Move" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Stash upload" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Deletion" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Account creation" +msgstr "" + +#: extensions/base/abusefilter.py:30 +msgid "Auto account creation" +msgstr "" + +#: extensions/base/abusefilter.py:54 +#, python-brace-format +msgid "{user} triggered \"{abuse_filter}\"" +msgstr "" + +#: extensions/base/abusefilter.py:55 +msgid "Performed" +msgstr "" + +#: extensions/base/abusefilter.py:56 +msgid "Action taken" +msgstr "" + +#: extensions/base/abusefilter.py:57 +msgid "Title" +msgstr "" + +#: extensions/base/abusefilter.py:66 +#, python-brace-format +msgid "" +"[{author}]({author_url}) triggered *{abuse_filter}*, performing the action " +"\"{action}\" on *[{target}]({target_url})* - action taken: {result}." +msgstr "" + +#: extensions/base/abusefilter.py:83 +#, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:95 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/abusefilter.py:111 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "" + +#: extensions/base/abusefilter.py:119 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "director" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bot" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "editor" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "directors" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "sysop" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "bureaucrat" +msgstr "" + +#: extensions/base/mediawiki.py:37 +msgid "reviewer" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autoreview" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "autopatrol" +msgstr "" + +#: extensions/base/mediawiki.py:38 +msgid "wiki_guardian" +msgstr "" + +#: extensions/base/mediawiki.py:71 +msgid "(N!) " +msgstr "" + +#: extensions/base/mediawiki.py:72 +msgid "m" +msgstr "" + +#: extensions/base/mediawiki.py:73 +msgid "b" +msgstr "" + +#: extensions/base/mediawiki.py:112 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: extensions/base/mediawiki.py:117 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created [{article}]({edit_link}){comment} {bold}" +"({sign}{edit_size}){bold}" +msgstr "" + +#: extensions/base/mediawiki.py:190 extensions/base/mediawiki.py:223 +msgid "Options" +msgstr "" + +#: extensions/base/mediawiki.py:190 +#, python-brace-format +msgid "([preview]({link}) | [undo]({undolink}))" +msgstr "" + +#: extensions/base/mediawiki.py:195 +#, python-brace-format +msgid "Uploaded a new version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:197 +#, python-brace-format +msgid "Reverted a version of {name}" +msgstr "" + +#: extensions/base/mediawiki.py:199 +#, python-brace-format +msgid "Uploaded {name}" +msgstr "" + +#: extensions/base/mediawiki.py:208 +msgid "**No license!**" +msgstr "" + +#: extensions/base/mediawiki.py:223 +#, python-brace-format +msgid "([preview]({link}))" +msgstr "" + +#: extensions/base/mediawiki.py:228 +msgid "" +"\n" +"License: {}" +msgstr "" + +#: extensions/base/mediawiki.py:237 +#, python-brace-format +msgid "" +"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:248 +#, python-brace-format +msgid "" +"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:259 +#, python-brace-format +msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:274 +#, python-brace-format +msgid "Deleted page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:283 +#, python-brace-format +msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:298 +#, python-brace-format +msgid "Deleted redirect {article} by overwriting" +msgstr "" + +#: extensions/base/mediawiki.py:308 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted redirect by overwriting [{page}]" +"({page_link}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:322 +#, python-brace-format +msgid "Restored {article}" +msgstr "" + +#: extensions/base/mediawiki.py:331 +#, python-brace-format +msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:348 +msgid "Changed visibility of log events" +msgstr "" + +#: extensions/base/mediawiki.py:356 +#, python-brace-format +msgid "[{author}]({author_url}) changed visibility of log events{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:370 +#, python-brace-format +msgid "Changed visibility of revision on page {article} " +msgid_plural "Changed visibility of {amount} revisions on page {article} " +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:383 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed visibility of revision on page [{article}]" +"({article_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) changed visibility of {amount} revisions on page " +"[{article}]({article_url}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 +msgid "No redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:400 extensions/base/mediawiki.py:433 +msgid "A redirect has been made" +msgstr "" + +#: extensions/base/mediawiki.py:401 +#, python-brace-format +msgid "Moved {redirect}{article} to {target}" +msgstr "" + +#: extensions/base/mediawiki.py:412 extensions/base/mediawiki.py:444 +msgid "without making a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:413 extensions/base/mediawiki.py:445 +msgid "with a redirect" +msgstr "" + +#: extensions/base/mediawiki.py:416 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:434 +#, python-brace-format +msgid "Moved {redirect}{article} to {title} over redirect" +msgstr "" + +#: extensions/base/mediawiki.py:448 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* over redirect to " +"[{target}]({target_url}) {made_a_redirect}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:464 +#, python-brace-format +msgid "Moved protection settings from {redirect}{article} to {title}" +msgstr "" + +#: extensions/base/mediawiki.py:477 +#, python-brace-format +msgid "" +"[{author}]({author_url}) moved protection settings from {redirect}*{article}" +"* to [{target}]({target_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:492 +#, python-brace-format +msgid "Protected {target}" +msgstr "" + +#: extensions/base/mediawiki.py:495 extensions/base/mediawiki.py:510 +#: extensions/base/mediawiki.py:526 extensions/base/mediawiki.py:541 +msgid " [cascading]" +msgstr "" + +#: extensions/base/mediawiki.py:506 +#, python-brace-format +msgid "" +"[{author}]({author_url}) protected [{article}]({article_url}) with the " +"following settings: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:523 +#, python-brace-format +msgid "Changed protection level for {article}" +msgstr "" + +#: extensions/base/mediawiki.py:537 +#, python-brace-format +msgid "" +"[{author}]({author_url}) modified protection settings of [{article}]" +"({article_url}) to: {settings}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:554 +#, python-brace-format +msgid "Removed protection from {article}" +msgstr "" + +#: extensions/base/mediawiki.py:563 +#, python-brace-format +msgid "" +"[{author}]({author_url}) removed protection from [{article}]({article_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:572 +msgid "for infinity and beyond" +msgstr "" + +#: extensions/base/mediawiki.py:582 +msgid "for less than a minute" +msgstr "" + +#: extensions/base/mediawiki.py:584 +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:584 +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:585 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:590 +#, python-brace-format +msgid "for {time_number} {time_unit}" +msgstr "" + +#: extensions/base/mediawiki.py:609 +msgid "Blocked from editing the following pages: " +msgstr "" + +#: extensions/base/mediawiki.py:616 extensions/base/mediawiki.py:662 +msgid " and namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:618 +msgid "Blocked from editing pages on following namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:629 +msgid "Partial block details" +msgstr "" + +#: extensions/base/mediawiki.py:632 +msgid "Block flags" +msgstr "" + +#: extensions/base/mediawiki.py:634 +#, python-brace-format +msgid "Blocked {blocked_user} {time}" +msgstr "" + +#: extensions/base/mediawiki.py:654 +msgid " on pages: " +msgstr "" + +#: extensions/base/mediawiki.py:664 +msgid " on namespaces: " +msgstr "" + +#: extensions/base/mediawiki.py:676 +#, python-brace-format +msgid "" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:694 +#, python-brace-format +msgid "Changed block settings for {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:704 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed block settings for [{blocked_user}]" +"({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:717 +#, python-brace-format +msgid "Unblocked {blocked_user}" +msgstr "" + +#: extensions/base/mediawiki.py:727 +#, python-brace-format +msgid "" +"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:743 +msgid "Action has been hidden by administration" +msgstr "" + +#: extensions/base/mediawiki.py:750 +msgid "An action has been hidden by administration." +msgstr "" + +#: extensions/base/mediawiki.py:761 +#, python-brace-format +msgid "Imported {article} with {count} revision" +msgid_plural "Imported {article} with {count} revisions" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:772 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision{comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions{comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:788 +#, python-brace-format +msgid "Imported {article} with {count} revision from \"{source}\"" +msgid_plural "Imported {article} with {count} revisions from \"{source}\"" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:803 +#, python-brace-format +msgid "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revision from [{source}]({source_url}){comment}" +msgid_plural "" +"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " +"revisions from [{source}]({source_url}){comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:818 +#, python-brace-format +msgid " (until {date_and_time})" +msgstr "" + +#: extensions/base/mediawiki.py:835 +#, python-brace-format +msgid "Changed group membership for {target}" +msgstr "" + +#: extensions/base/mediawiki.py:837 +msgid "System" +msgstr "" + +#: extensions/base/mediawiki.py:838 +#, python-brace-format +msgid "{target} got autopromoted to a new usergroup" +msgstr "" + +#: extensions/base/mediawiki.py:844 +msgid "Added group" +msgid_plural "Added groups" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:846 +msgid "Removed group" +msgid_plural "Removed groups" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:860 +#, python-brace-format +msgid "Added to {added} and removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 +#: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 +msgid ", " +msgstr "" + +#: extensions/base/mediawiki.py:863 +#, python-brace-format +msgid "Added to {added}." +msgstr "" + +#: extensions/base/mediawiki.py:865 +#, python-brace-format +msgid "Removed from {removed}." +msgstr "" + +#: extensions/base/mediawiki.py:866 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed group membership for [{target}]" +"({target_url}): {group_changes}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:870 +#, python-brace-format +msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:883 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" + +#: extensions/base/mediawiki.py:897 +#, python-brace-format +msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" + +#: extensions/base/mediawiki.py:911 +msgid "Created account automatically" +msgstr "" + +#: extensions/base/mediawiki.py:918 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "" + +#: extensions/base/mediawiki.py:931 extensions/base/mediawiki.py:996 +msgid "Created account" +msgstr "" + +#: extensions/base/mediawiki.py:938 extensions/base/mediawiki.py:1003 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "" + +#: extensions/base/mediawiki.py:950 +#, python-brace-format +msgid "Created account {article}" +msgstr "" + +#: extensions/base/mediawiki.py:959 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:972 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "" + +#: extensions/base/mediawiki.py:983 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1015 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "" + +#: extensions/base/mediawiki.py:1017 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1029 +#, python-brace-format +msgid "" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1044 +#, python-brace-format +msgid "Created the page {article} using a non-default content model" +msgstr "" + +#: extensions/base/mediawiki.py:1046 +#, python-brace-format +msgid "Created with model {new}: {reason}" +msgstr "" + +#: extensions/base/mediawiki.py:1057 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the page [{article}]({article_url}) using a " +"non-default content model {new}{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1072 +#, python-brace-format +msgid "Created the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1082 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1103 +#, python-brace-format +msgid "Deleted the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1105 +msgid "Removed from" +msgstr "" + +#: extensions/base/mediawiki.py:1105 +msgid "{} revision or log entry" +msgid_plural "{} revisions and/or log entries" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1118 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1128 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revision or log entry{comment}" +msgid_plural "" +"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " +"it from {count} revisions and/or log entries{comment}" +msgstr[0] "" +msgstr[1] "" + +#: extensions/base/mediawiki.py:1145 +#, python-brace-format +msgid "Activated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1154 +#, python-brace-format +msgid "" +"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/mediawiki.py:1173 +#, python-brace-format +msgid "Deactivated the tag \"{tag}\"" +msgstr "" + +#: extensions/base/mediawiki.py:1182 +#, python-brace-format +msgid "" +"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" +msgstr "" + +#: extensions/base/sprite.py:37 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "" + +#: extensions/base/sprite.py:45 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +msgstr "" + +#: extensions/base/sprite.py:60 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "" + +#: extensions/base/sprite.py:68 +#, python-brace-format +msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" + +#: extensions/base/sprite.py:79 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "" + +#: extensions/base/sprite.py:86 +#, python-brace-format +msgid "" +"[{author}]({author_url}) edited the slice for [{article}]({article_url})" +msgstr "" From 4ffac4210ed318ed3274a47b3b14989592c0b3ee Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 23 May 2021 21:04:37 +0200 Subject: [PATCH 147/173] Fix to crashing hook --- .gitignore | 1 + extensions/hooks/usertalk.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index fb2b897..4a9dbac 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ lastchange.txt /venv/ /lokalize-scripts/ /venvv/ +/.idea/ __pycache__ *.bat *.code-workspace diff --git a/extensions/hooks/usertalk.py b/extensions/hooks/usertalk.py index de156bf..cffd44f 100644 --- a/extensions/hooks/usertalk.py +++ b/extensions/hooks/usertalk.py @@ -30,7 +30,7 @@ def example_post_hook(message, metadata, context, change): if discord_users and change["ns"] in [2, 3, 202] and not "/" in change["title"]: username = change["title"].split(':', 1)[1] if discord_users.get(username, "") and username != change["user"]: - message.webhook_object["content"] = (content or "") + " <@{}>".format(discord_users[username]) + message.webhook_object["content"] = (message.webhook_object.get("content", "") or "") + " <@{}>".format(discord_users[username]) if message.webhook_object["allowed_mentions"].get("users", []): message.webhook_object["allowed_mentions"]["users"].append(discord_users[username]) else: From fbb9904d7501b1eba5bde1e3d5bc5ae37431491e Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 23 May 2021 21:06:59 +0200 Subject: [PATCH 148/173] Trying to fix circular import --- src/misc.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/misc.py b/src/misc.py index 2e0093c..512f33f 100644 --- a/src/misc.py +++ b/src/misc.py @@ -21,7 +21,7 @@ from urllib.parse import urlparse, urlunparse import requests from src.configloader import settings -from src.api.util import sanitize_to_markdown +import src.api.util from src.discord.message import DiscordMessage, DiscordMessageMetadata from src.discord.queue import messagequeue, send_to_discord from src.exceptions import MediaWikiError @@ -345,13 +345,13 @@ class LinkParser(HTMLParser): def handle_data(self, data): if self.recent_href: - self.new_string = self.new_string + "[{}](<{}>)".format(sanitize_to_markdown(data), self.recent_href) + self.new_string = self.new_string + "[{}](<{}>)".format(src.api.util.sanitize_to_markdown(data), self.recent_href) self.recent_href = "" else: - self.new_string = self.new_string + sanitize_to_markdown(data) + self.new_string = self.new_string + src.api.util.sanitize_to_markdown(data) def handle_comment(self, data): - self.new_string = self.new_string + sanitize_to_markdown(data) + self.new_string = self.new_string + src.api.util.sanitize_to_markdown(data) def handle_endtag(self, tag): misc_logger.debug(self.new_string) From 5e372c764166f5c92dc96ec59eb1a59cb3584fd2 Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Sun, 23 May 2021 22:51:39 +0000 Subject: [PATCH 149/173] Add diff back before tags and categories --- extensions/base/mediawiki.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index b9f862b..4ac4db8 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -44,7 +44,6 @@ if 1 == 2: # additional translation strings in unreachable code @formatter.embed(event="edit", mode="embed", aliases=["new"]) def embed_edit(ctx: Context, change: dict) -> DiscordMessage: embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) - embed_helper(ctx, embed, change) action = ctx.event editsize = change["newlen"] - change["oldlen"] if editsize > 0: @@ -88,6 +87,7 @@ def embed_edit(ctx: Context, change: dict) -> DiscordMessage: parse_mediawiki_changes(ctx, changed_content, embed) else: logger.warning("Unable to download data on the edit content!") + embed_helper(ctx, embed, change) return embed From 54e4f8646c84b82f84fa75636fb18955d9631f87 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 24 May 2021 14:43:25 +0200 Subject: [PATCH 150/173] Fix issue with block length parsing --- extensions/base/mediawiki.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/extensions/base/mediawiki.py b/extensions/base/mediawiki.py index 4ac4db8..f5b81d0 100644 --- a/extensions/base/mediawiki.py +++ b/extensions/base/mediawiki.py @@ -574,10 +574,9 @@ def block_expiry(change: dict) -> str: if "expiry" in change["logparams"]: expiry_date_time_obj = datetime.datetime.strptime(change["logparams"]["expiry"], '%Y-%m-%dT%H:%M:%SZ') timestamp_date_time_obj = datetime.datetime.strptime(change["timestamp"], '%Y-%m-%dT%H:%M:%SZ') - timedelta_for_expiry = expiry_date_time_obj - timestamp_date_time_obj - years, days, hours, minutes = timedelta_for_expiry.seconds // 31557600, \ - timedelta_for_expiry.seconds % 31557600 // 86400, \ - timedelta_for_expiry.seconds % 86400 // 3600, timedelta_for_expiry.seconds % 3600 // 60 + timedelta_for_expiry = (expiry_date_time_obj - timestamp_date_time_obj).total_seconds() + years, days, hours, minutes = timedelta_for_expiry // 31557600, timedelta_for_expiry % 31557600 // 86400, \ + timedelta_for_expiry % 86400 // 3600, timedelta_for_expiry % 3600 // 60 if not any([years, days, hours, minutes]): return _("for less than a minute") time_names = ( @@ -587,7 +586,7 @@ def block_expiry(change: dict) -> str: for num, timev in enumerate([years, days, hours, minutes]): if timev: final_time.append( - _("for {time_number} {time_unit}").format(time_unit=time_names[num], time_number=timev)) + _("for {time_number} {time_unit}").format(time_unit=time_names[num], time_number=int(timev))) return ", ".join(final_time) else: return change["logparams"]["duration"] # Temporary? Should be rare? We will see in testing From e042b9174854db5a4c04ff85e8b94bbe579f970a Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Wed, 26 May 2021 10:46:14 +0000 Subject: [PATCH 151/173] Don't try to follow the logic, you can't --- extensions/hooks/edit_alerts.py | 124 ++++++++++++++++++++++++++++++++ extensions/hooks/usertalk.py | 5 +- 2 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 extensions/hooks/edit_alerts.py diff --git a/extensions/hooks/edit_alerts.py b/extensions/hooks/edit_alerts.py new file mode 100644 index 0000000..4086fed --- /dev/null +++ b/extensions/hooks/edit_alerts.py @@ -0,0 +1,124 @@ +# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw). +# +# RcGcDw is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# RcGcDw is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with RcGcDw. If not, see . + +from src.api.hook import post_hook +from src.configloader import settings + +# { +# "hooks": { +# "edit_alerts": [ +# { +# "content": "DISCORD MARKDOWN TEXT", +# "allowed_mentions": { +# "users": ["USERID"], +# "roles": ["ROLEID"] +# }, +# "requirements": [ +# { +# "action": [ +# "edit", +# "delete/delete", +# "delete" +# ], +# "user": [ +# "USERNAME", +# "@__anon__", +# "@__user__" +# ], +# "title": [ +# "PAGETITLE" +# ], +# "tags": [ +# ["EDIT TAG", "AND EDIT TAG"], +# ["OR EDIT TAG"] +# ], +# "categories": [ +# { +# "added": [ +# ["CATEGORY", "AND CATEGORY"], +# ["OR CATEGORY"] +# ], +# "removed": [ +# ["CATEGORY", "AND CATEGORY"], +# ["OR CATEGORY"] +# ] +# } +# ] +# } +# ] +# } +# ] +# } +# } +edit_alerts = settings.get("hooks", {}).get("edit_alerts", []) + +@post_hook +def edit_alerts_hook(message, metadata, context, change): + for alert in edit_alerts: + for requirement in alert.get("requirements", []): + reqAction = requirement.get("action", []) + if reqAction and context.event not in reqAction and context.event.split('/', 1)[0] not in reqAction: + continue + reqUser = requirement.get("user", []) + if reqUser and change["user"] not in reqUser and ("@__anon__" if "anon" in change else "@__user__") not in reqUser: + continue + reqTitle = requirement.get("title", []) + if reqTitle and change["title"] not in reqTitle: + continue + if requirement.get("tags", []): + for reqTags in requirement.get("tags", []): + for reqTag in reqTags: + if reqTag not in change.get("tags", []): + break + else: + break + else: + continue + if requirement.get("categories", []): + for reqCats in requirement.get("categories", []): + if reqCats.get("added", []): + for addedCats in reqCats.get("added", []): + for addedCat in addedCats: + if addedCat not in context.categories.new: + break + else: + break + else: + continue + if reqCats.get("removed", []): + for removedCats in reqCats.get("removed", []): + for removedCat in removedCats: + if removedCat not in context.categories.removed: + break + else: + break + else: + continue + break + else: + continue + break + else: + continue + message.webhook_object["content"] = (message.webhook_object.get("content", "") or "") + alert["content"] + allowed_mentions = message.webhook_object["allowed_mentions"] + if alert.get("allowed_mentions", {}).get("users", []): + if not allowed_mentions.get("users", []): + allowed_mentions["users"] = [] + allowed_mentions["users"].extend(alert["allowed_mentions"]["users"]) + if alert.get("allowed_mentions", {}).get("roles", []): + if not allowed_mentions.get("roles", []): + allowed_mentions["roles"] = [] + allowed_mentions["roles"].extend(alert["allowed_mentions"]["roles"]) diff --git a/extensions/hooks/usertalk.py b/extensions/hooks/usertalk.py index cffd44f..75911aa 100644 --- a/extensions/hooks/usertalk.py +++ b/extensions/hooks/usertalk.py @@ -26,12 +26,13 @@ from src.configloader import settings discord_users = settings.get("hooks", {}).get("usertalk", {}) @post_hook -def example_post_hook(message, metadata, context, change): +def usertalk_hook(message, metadata, context, change): if discord_users and change["ns"] in [2, 3, 202] and not "/" in change["title"]: username = change["title"].split(':', 1)[1] if discord_users.get(username, "") and username != change["user"]: message.webhook_object["content"] = (message.webhook_object.get("content", "") or "") + " <@{}>".format(discord_users[username]) if message.webhook_object["allowed_mentions"].get("users", []): - message.webhook_object["allowed_mentions"]["users"].append(discord_users[username]) + if discord_users[username] not in message.webhook_object["allowed_mentions"]["users"]: + message.webhook_object["allowed_mentions"]["users"].append(discord_users[username]) else: message.webhook_object["allowed_mentions"]["users"] = [discord_users[username]] From 6a8a67e9c54bef7eff55004615cb3f75c2291493 Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 26 May 2021 14:36:02 +0200 Subject: [PATCH 152/173] Simplification --- extensions/hooks/edit_alerts.py | 77 +++++++++++++++------------------ 1 file changed, 36 insertions(+), 41 deletions(-) diff --git a/extensions/hooks/edit_alerts.py b/extensions/hooks/edit_alerts.py index 4086fed..a71d1b7 100644 --- a/extensions/hooks/edit_alerts.py +++ b/extensions/hooks/edit_alerts.py @@ -64,52 +64,47 @@ from src.configloader import settings # } edit_alerts = settings.get("hooks", {}).get("edit_alerts", []) + +class RequirementNotMet(Exception): + pass + + +def check_group_requirements(change_data: list, settings_data: list): + """This function resolves group discussions and raises RequirementNotMet when requirement is not met""" + if settings_data: + for required_group in settings_data: + for required_item in required_group: + if required_item not in change_data: + raise RequirementNotMet + + @post_hook def edit_alerts_hook(message, metadata, context, change): + # For every alert in edit_alerts, they can have different functions and so on for alert in edit_alerts: + # For every requirement, if one of the requirements passes the alert gets executed for requirement in alert.get("requirements", []): - reqAction = requirement.get("action", []) - if reqAction and context.event not in reqAction and context.event.split('/', 1)[0] not in reqAction: + try: + req_action = requirement.get("action", []) + # If current action isn't in config for this requirement AND current event type is not in the requirements in settings skip this requirement + if req_action and context.event not in req_action and context.event.split('/', 1)[0] not in req_action: + raise RequirementNotMet + req_user = requirement.get("user", []) + # If current user is not in config AND checkings for anon and user fail + if req_user and change["user"] not in req_user and ("@__anon__" if "anon" in change else "@__user__") not in req_user: + raise RequirementNotMet + req_title = requirement.get("title", []) + if req_title and change["title"] not in req_title: + raise RequirementNotMet + check_group_requirements(change.get("tags", []), requirement.get("tags", [])) + if requirement.get("categories", []): + for reqCats in requirement.get("categories", []): + check_group_requirements(context.categories.new, reqCats.get("added", [])) + check_group_requirements(context.categories.new, reqCats.get("removed", [])) + except RequirementNotMet: continue - reqUser = requirement.get("user", []) - if reqUser and change["user"] not in reqUser and ("@__anon__" if "anon" in change else "@__user__") not in reqUser: - continue - reqTitle = requirement.get("title", []) - if reqTitle and change["title"] not in reqTitle: - continue - if requirement.get("tags", []): - for reqTags in requirement.get("tags", []): - for reqTag in reqTags: - if reqTag not in change.get("tags", []): - break - else: - break - else: - continue - if requirement.get("categories", []): - for reqCats in requirement.get("categories", []): - if reqCats.get("added", []): - for addedCats in reqCats.get("added", []): - for addedCat in addedCats: - if addedCat not in context.categories.new: - break - else: - break - else: - continue - if reqCats.get("removed", []): - for removedCats in reqCats.get("removed", []): - for removedCat in removedCats: - if removedCat not in context.categories.removed: - break - else: - break - else: - continue - break - else: - continue - break + else: + break else: continue message.webhook_object["content"] = (message.webhook_object.get("content", "") or "") + alert["content"] From ad7b0fd207206e1c3306213fdcc286ea0b27be55 Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 26 May 2021 14:42:06 +0200 Subject: [PATCH 153/173] Fixed copy-paste error --- extensions/hooks/edit_alerts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/hooks/edit_alerts.py b/extensions/hooks/edit_alerts.py index a71d1b7..87105e7 100644 --- a/extensions/hooks/edit_alerts.py +++ b/extensions/hooks/edit_alerts.py @@ -100,7 +100,7 @@ def edit_alerts_hook(message, metadata, context, change): if requirement.get("categories", []): for reqCats in requirement.get("categories", []): check_group_requirements(context.categories.new, reqCats.get("added", [])) - check_group_requirements(context.categories.new, reqCats.get("removed", [])) + check_group_requirements(context.categories.removed, reqCats.get("removed", [])) except RequirementNotMet: continue else: From 69efcf26507de0b1732bac9363f350aa71dd656b Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 26 May 2021 15:38:36 +0200 Subject: [PATCH 154/173] Fixed both issues, partially returned the older code --- extensions/hooks/edit_alerts.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/extensions/hooks/edit_alerts.py b/extensions/hooks/edit_alerts.py index 87105e7..c0f0252 100644 --- a/extensions/hooks/edit_alerts.py +++ b/extensions/hooks/edit_alerts.py @@ -66,6 +66,7 @@ edit_alerts = settings.get("hooks", {}).get("edit_alerts", []) class RequirementNotMet(Exception): + """Exception raised when the requirement is not met and another requirement must be processed""" pass @@ -73,9 +74,11 @@ def check_group_requirements(change_data: list, settings_data: list): """This function resolves group discussions and raises RequirementNotMet when requirement is not met""" if settings_data: for required_group in settings_data: - for required_item in required_group: - if required_item not in change_data: - raise RequirementNotMet + # test all items in required_group are in change_data (one group fulfills the requirement) return the function + if all([required_item in change_data for required_item in required_group]): + return + raise RequirementNotMet + @post_hook @@ -98,9 +101,26 @@ def edit_alerts_hook(message, metadata, context, change): raise RequirementNotMet check_group_requirements(change.get("tags", []), requirement.get("tags", [])) if requirement.get("categories", []): - for reqCats in requirement.get("categories", []): - check_group_requirements(context.categories.new, reqCats.get("added", [])) - check_group_requirements(context.categories.removed, reqCats.get("removed", [])) + for req_cats in requirement.get("categories", []): + if req_cats.get("added", []): + for added_cats in req_cats.get("added", []): + for added_cat in added_cats: + if added_cat not in context.categories.new: + break + else: + break + else: + raise RequirementNotMet + if req_cats.get("removed", []): + for removed_cats in req_cats.get("removed", []): + for removed_cat in removed_cats: + if removed_cat not in context.categories.removed: + break + else: + break + else: + raise RequirementNotMet + break except RequirementNotMet: continue else: From 139385bd80cca61af7cef55653f5cb4fdb2f9bbf Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Wed, 26 May 2021 13:46:59 +0000 Subject: [PATCH 155/173] use function again --- extensions/hooks/edit_alerts.py | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/extensions/hooks/edit_alerts.py b/extensions/hooks/edit_alerts.py index c0f0252..a96582a 100644 --- a/extensions/hooks/edit_alerts.py +++ b/extensions/hooks/edit_alerts.py @@ -102,25 +102,15 @@ def edit_alerts_hook(message, metadata, context, change): check_group_requirements(change.get("tags", []), requirement.get("tags", [])) if requirement.get("categories", []): for req_cats in requirement.get("categories", []): - if req_cats.get("added", []): - for added_cats in req_cats.get("added", []): - for added_cat in added_cats: - if added_cat not in context.categories.new: - break - else: - break - else: - raise RequirementNotMet - if req_cats.get("removed", []): - for removed_cats in req_cats.get("removed", []): - for removed_cat in removed_cats: - if removed_cat not in context.categories.removed: - break - else: - break - else: - raise RequirementNotMet - break + try: + check_group_requirements(context.categories.new, reqCats.get("added", [])) + check_group_requirements(context.categories.removed, reqCats.get("removed", [])) + except RequirementNotMet: + continue + else: + break + else: + raise RequirementNotMet except RequirementNotMet: continue else: From 0cd1b7ad74ba646df21d706b9a36e0305666b7cc Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Wed, 26 May 2021 14:06:16 +0000 Subject: [PATCH 156/173] make function readable, fix copy paste error --- extensions/hooks/edit_alerts.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/extensions/hooks/edit_alerts.py b/extensions/hooks/edit_alerts.py index a96582a..005fb05 100644 --- a/extensions/hooks/edit_alerts.py +++ b/extensions/hooks/edit_alerts.py @@ -75,9 +75,12 @@ def check_group_requirements(change_data: list, settings_data: list): if settings_data: for required_group in settings_data: # test all items in required_group are in change_data (one group fulfills the requirement) return the function - if all([required_item in change_data for required_item in required_group]): - return - raise RequirementNotMet + for required_item in required_group: + if required_item not in change_data: + continue + break + else: + raise RequirementNotMet @@ -103,8 +106,8 @@ def edit_alerts_hook(message, metadata, context, change): if requirement.get("categories", []): for req_cats in requirement.get("categories", []): try: - check_group_requirements(context.categories.new, reqCats.get("added", [])) - check_group_requirements(context.categories.removed, reqCats.get("removed", [])) + check_group_requirements(context.categories.new, req_cats.get("added", [])) + check_group_requirements(context.categories.removed, req_cats.get("removed", [])) except RequirementNotMet: continue else: From 2aa17a7d36deda899dbbe99840403eb55f7c5e37 Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Wed, 26 May 2021 14:09:29 +0000 Subject: [PATCH 157/173] fix function --- extensions/hooks/edit_alerts.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/extensions/hooks/edit_alerts.py b/extensions/hooks/edit_alerts.py index 005fb05..4339aff 100644 --- a/extensions/hooks/edit_alerts.py +++ b/extensions/hooks/edit_alerts.py @@ -77,8 +77,9 @@ def check_group_requirements(change_data: list, settings_data: list): # test all items in required_group are in change_data (one group fulfills the requirement) return the function for required_item in required_group: if required_item not in change_data: - continue - break + break + else: + break else: raise RequirementNotMet From b64ba81ea797a0a8ed7ade3438d3f78eb73b95e6 Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 27 May 2021 23:02:07 +0200 Subject: [PATCH 158/173] Translated using Weblate (Swedish) Currently translated at 100.0% (1 of 1 strings) Translated using Weblate (Swedish) Currently translated at 100.0% (20 of 20 strings) Translated using Weblate (Polish) Currently translated at 84.5% (247 of 292 strings) Co-authored-by: Frisk The Evil Goat Overlord Co-authored-by: Spisen Co-authored-by: Weblate Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/pl/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/main/sv/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/redaction/sv/ Translation: RcGcDw/formatters Translation: RcGcDw/rcgcdw Translation: RcGcDw/redaction --- locale/pl/LC_MESSAGES/formatters.mo | Bin 28923 -> 32781 bytes locale/pl/LC_MESSAGES/formatters.po | 105 +++++++++++++++------------- locale/sv/LC_MESSAGES/rcgcdw.mo | Bin 449 -> 1740 bytes locale/sv/LC_MESSAGES/rcgcdw.po | 60 ++++++++-------- locale/sv/LC_MESSAGES/redaction.mo | Bin 454 -> 495 bytes locale/sv/LC_MESSAGES/redaction.po | 11 +-- 6 files changed, 94 insertions(+), 82 deletions(-) diff --git a/locale/pl/LC_MESSAGES/formatters.mo b/locale/pl/LC_MESSAGES/formatters.mo index 81a55dd0ffe8fc0b5d7a019be09f37613b0c6c54..b184a9a4ec970d856a626b1067bbe107c6ee95f6 100644 GIT binary patch delta 7200 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 DbbNf_ diff --git a/locale/pl/LC_MESSAGES/formatters.po b/locale/pl/LC_MESSAGES/formatters.po index 4504fed..1c2b141 100644 --- a/locale/pl/LC_MESSAGES/formatters.po +++ b/locale/pl/LC_MESSAGES/formatters.po @@ -20,7 +20,7 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: 2021-05-23 17:18+0000\n" +"PO-Revision-Date: 2021-05-27 21:02+0000\n" "Last-Translator: Frisk The Evil Goat Overlord \n" "Language-Team: Polish \n" @@ -763,7 +763,7 @@ msgid "Edited a comment on their own profile" msgstr "Edytował(a) komentarz na swoim profilu" #: extensions/base/curseprofile.py:128 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." msgstr "" @@ -797,7 +797,7 @@ msgstr "" "profilu użytkownika {target}" #: extensions/base/curseprofile.py:162 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on their own " "profile." @@ -811,12 +811,11 @@ msgid "Deleted a comment on {target}'s profile" msgstr "Usunął komentarz na profilu użytkownika {target}" #: extensions/base/curseprofile.py:177 -#, fuzzy msgid "Deleted a comment on their own profile" -msgstr "Edytował(a) komentarz na swoim profilu" +msgstr "Usunął/usunęła komentarz na swoim profilu" #: extensions/base/curseprofile.py:197 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " "profile.{reason}" @@ -825,7 +824,7 @@ msgstr "" "użytkownika {target}" #: extensions/base/curseprofile.py:200 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." "{reason}" @@ -878,23 +877,31 @@ msgid "Renamed user \"{old_name}\" to \"{new_name}\"" msgstr "Zmieniono nazwę użytkownika „{old_name}” na „{new_name}”" #: extensions/base/renameuser.py:58 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to " "[{new_name}]({link}){comment}" msgid_plural "" "[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to " "[{new_name}]({link}){comment}" -msgstr[0] "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" -msgstr[1] "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" -msgstr[2] "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" +msgstr[0] "" +"[{author}]({author_url}) zmienił(a) nazwę użytkownika *{old_name}* z {edits} " +"edycją na [{new_name}]({link}){comment}" +msgstr[1] "" +"[{author}]({author_url}) zmienił(a) nazwę użytkownika *{old_name}* z {edits} " +"edycjami na [{new_name}]({link}){comment}" +msgstr[2] "" +"[{author}]({author_url}) zmienił(a) nazwę użytkownika *{old_name}* z {edits} " +"edycjami na [{new_name}]({link}){comment}" #: extensions/base/renameuser.py:66 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link})" "{comment}" -msgstr "[{author}]({author_url}) skasował(a) [{page}]({page_link}){comment}" +msgstr "" +"[{author}]({author_url}) zmienił(a) nazwę użytkownika {old_name} na " +"[{new_name}]({link}){comment}" #: extensions/base/interwiki.py:37 msgid "Added an entry to the interwiki table" @@ -937,11 +944,12 @@ msgid "Prefix: {prefix} | {desc}" msgstr "Prefix: {prefix} | {desc}" #: extensions/base/interwiki.py:102 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" "{desc}" -msgstr "[{author}]({author_url}) usunął wpis z [tabeli interwiki]({table_url})" +msgstr "" +"[{author}]({author_url}) usunął wpis z [tabeli interwiki]({table_url}){desc}" #: extensions/base/abusefilter.py:29 msgid "None" @@ -1374,7 +1382,7 @@ msgstr "na wieczność" #: extensions/base/mediawiki.py:582 msgid "for less than a minute" -msgstr "" +msgstr "na mniej niż minutę" #: extensions/base/mediawiki.py:584 msgid "year" @@ -1407,7 +1415,7 @@ msgstr[2] "minut" #: extensions/base/mediawiki.py:590 #, python-brace-format msgid "for {time_number} {time_unit}" -msgstr "" +msgstr "na {time_number} {time_unit}" #: extensions/base/mediawiki.py:609 msgid "Blocked from editing the following pages: " @@ -1427,7 +1435,7 @@ msgstr "Szczegóły częściowej blokady" #: extensions/base/mediawiki.py:632 msgid "Block flags" -msgstr "" +msgstr "Opcje blokady" #: extensions/base/mediawiki.py:634 #, python-brace-format @@ -1512,12 +1520,12 @@ msgstr[2] "" "{count} wersjami{comment}" #: extensions/base/mediawiki.py:788 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Imported {article} with {count} revision from \"{source}\"" msgid_plural "Imported {article} with {count} revisions from \"{source}\"" -msgstr[0] "Zaimportowano {article} z {count} wersją" -msgstr[1] "Zaimportowano {article} z {count} wersjami" -msgstr[2] "Zaimportowano {article} z {count} wersjami" +msgstr[0] "Zaimportowano {article} z {count} wersją z „{source}”" +msgstr[1] "Zaimportowano {article} z {count} wersjami z „{source}”" +msgstr[2] "Zaimportowano {article} z {count} wersjami z „{source}”" #: extensions/base/mediawiki.py:803 #, python-brace-format @@ -1540,7 +1548,7 @@ msgstr[2] "" #: extensions/base/mediawiki.py:818 #, python-brace-format msgid " (until {date_and_time})" -msgstr "" +msgstr " (do {date_and_time})" #: extensions/base/mediawiki.py:835 #, python-brace-format @@ -1557,56 +1565,54 @@ msgid "{target} got autopromoted to a new usergroup" msgstr "{target} automatycznie otrzymał nową grupę użytkownika" #: extensions/base/mediawiki.py:844 -#, fuzzy msgid "Added group" msgid_plural "Added groups" -msgstr[0] "Usunięto" -msgstr[1] "Usunięto" -msgstr[2] "Usunięto" +msgstr[0] "Dodana grupa" +msgstr[1] "Dodane grupy" +msgstr[2] "Dodane grupy" #: extensions/base/mediawiki.py:846 -#, fuzzy msgid "Removed group" msgid_plural "Removed groups" -msgstr[0] "Usunięto" -msgstr[1] "Usunięto" -msgstr[2] "Usunięto" +msgstr[0] "Usunięta grupa" +msgstr[1] "Usunięte grupy" +msgstr[2] "Usunięte grupy" #: extensions/base/mediawiki.py:860 #, python-brace-format msgid "Added to {added} and removed from {removed}." -msgstr "" +msgstr "Dodano do {added} oraz usunięto z {removed}." #: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 #: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 msgid ", " -msgstr "" +msgstr ", " #: extensions/base/mediawiki.py:863 #, python-brace-format msgid "Added to {added}." -msgstr "" +msgstr "Dodany do {added}." #: extensions/base/mediawiki.py:865 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Removed from {removed}." -msgstr "Usunięto" +msgstr "Usunięty z {removed}." #: extensions/base/mediawiki.py:866 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) changed group membership for [{target}]" "({target_url}): {group_changes}{comment}" msgstr "" -"[{author}]({author_url}) zmienił(a) przynależność do grup dla [{target}]" -"({target_url}) z {old_groups} na {new_groups}{comment}" +"[{author}]({author_url}) zmienił(a) przynależność do grup dla " +"[{target}]({target_url}): {group_changes}{comment}" #: extensions/base/mediawiki.py:870 -#, fuzzy, python-brace-format +#, python-brace-format msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" msgstr "" -"{author} automatycznie zmienił przynależność do grup [{target}]" -"({target_url}) z {old_groups} na {new_groups}{comment}" +"System automatycznie zmienił przynależność do grup dla " +"[{target}]({target_url}) na {added}.{comment}" #: extensions/base/mediawiki.py:883 #, python-brace-format @@ -1690,12 +1696,12 @@ msgstr "" #: extensions/base/mediawiki.py:1044 #, python-brace-format msgid "Created the page {article} using a non-default content model" -msgstr "" +msgstr "Stworzono stronę {article} z użyciem niestandardowego modelu treści" #: extensions/base/mediawiki.py:1046 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created with model {new}: {reason}" -msgstr "Model został zmieniony z {old} na {new}: {reason}" +msgstr "Utworzono model {new}: {reason}" #: extensions/base/mediawiki.py:1057 #, python-brace-format @@ -1707,18 +1713,19 @@ msgstr "" "używając niedomyślnego modelu zawartości {new}{comment}" #: extensions/base/mediawiki.py:1072 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "Utworzono znacznik „{tag}”" #: extensions/base/mediawiki.py:1082 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) utworzył(a) [znacznik]({tag_url}) „{tag}”" +msgstr "" +"[{author}]({author_url}) utworzył(a) [znacznik]({tag_url}) „{tag}”{comment}" #: extensions/base/mediawiki.py:1103 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "Usunięto znacznik „{tag}”" diff --git a/locale/sv/LC_MESSAGES/rcgcdw.mo b/locale/sv/LC_MESSAGES/rcgcdw.mo index 9428059500c70a36de13bfad54333c35d2836358..a23fcb8537a88e66b670ee2eb7928a26279946cd 100644 GIT binary patch literal 1740 zcmZ{j-EJF26vu~BzD)UQ_!fw1ksuM;xCK-yr$IQi(?-Ne=FET2&iU=^>2DdvbC|DS z{*3u5X8Hgg7{7xrgMWa}ga3f%!KG7-Jpo<8SrnA;!i!u*yG?C@CEQia0$EsJ`C2tXTc9a%KHU)8=89HYq0-1&DiVU(nE~B z3BCuu1bz;Z-Z4n}Zi7#Q-xc;Fj`X?i8fDdFsI3!b4@ ziy`DFLg+k7a^ZrG(<1Yt&$AshngvXa8#+~Zvr`Q^jOkq}A3Hsu%JG4-nU*+B+vrjc#ZCf^D3;jTbt44c^vJ2L%FDKVk@;tD*SRshtgg; zbRvy5t?T;=H-p^t>u;~|>Fc`T=hpefwbCciHD#2WR^emSK|K_IclAd#E!3WvjgNtByM%pG~mtR-d(PqfXPB~u!u=m^PW24cyiM^DOf{M5A}l11P{88KD^%} zoLLMLCZjEd!|gp8e9u3NFAfiBdEfL@S}eH#Lz?fgGZxc0n2ZeSui24viRjT#l%S)0 l&*{vd)I1THrxxo8-q9#Uf;Pw?k0q1izWl!q%Ri#Q{sn`$*Np%G delta 66 xcmX@Zdyv`Uo)F7a1|VPrVi_P-0b*t#)&XJ=umIwAprj>`2C0F8%~{Nyi~s}c26F%a diff --git a/locale/sv/LC_MESSAGES/rcgcdw.po b/locale/sv/LC_MESSAGES/rcgcdw.po index d2640f6..0682604 100644 --- a/locale/sv/LC_MESSAGES/rcgcdw.po +++ b/locale/sv/LC_MESSAGES/rcgcdw.po @@ -8,104 +8,106 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2021-05-27 21:02+0000\n" +"Last-Translator: Spisen \n" +"Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.6\n" #: src/rcgcdw.py:117 #, python-brace-format msgid "{value} (avg. {avg})" -msgstr "" +msgstr "{value} (avg. {avg})" #: src/rcgcdw.py:136 msgid "Daily overview" -msgstr "" +msgstr "Daglig översikt" #: src/rcgcdw.py:143 msgid "No activity" -msgstr "" +msgstr "Ingen aktivitet" #: src/rcgcdw.py:167 msgid " ({} action)" msgid_plural " ({} actions)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] " ({} handling)" +msgstr[1] " ({} handlingar)" #: src/rcgcdw.py:169 msgid " ({} edit)" msgid_plural " ({} edits)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] " ({} redigering)" +msgstr[1] " ({} redigeringar)" #: src/rcgcdw.py:174 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] " UTC ({} handling)" +msgstr[1] " UTC ({} handlingar)" #: src/rcgcdw.py:176 src/rcgcdw.py:179 msgid "But nobody came" -msgstr "" +msgstr "Ingen kom hit" #: src/rcgcdw.py:183 msgid "Most active user" msgid_plural "Most active users" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Mest aktiva användaren" +msgstr[1] "Mest aktiva användarna" #: src/rcgcdw.py:184 msgid "Most edited article" msgid_plural "Most edited articles" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Mest redigerade artikeln" +msgstr[1] "Mest redigerade artiklarna" #: src/rcgcdw.py:185 msgid "Edits made" -msgstr "" +msgstr "Redigeringar gjorda" #: src/rcgcdw.py:185 msgid "New files" -msgstr "" +msgstr "Nya filer" #: src/rcgcdw.py:186 msgid "Admin actions" -msgstr "" +msgstr "Administratörsåtgärder" #: src/rcgcdw.py:186 msgid "Bytes changed" -msgstr "" +msgstr "Bytes ändrade" #: src/rcgcdw.py:187 msgid "New articles" -msgstr "" +msgstr "Nya artiklar" #: src/rcgcdw.py:187 msgid "Unique contributors" -msgstr "" +msgstr "Unika bidragsgivare" #: src/rcgcdw.py:188 msgid "Most active hour" msgid_plural "Most active hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Mest aktiva timme" +msgstr[1] "Mest aktiva timmarna" #: src/rcgcdw.py:189 msgid "Day score" -msgstr "" +msgstr "Dagligt poäng" #: src/rcgcdw.py:215 msgid "~~hidden~~" -msgstr "" +msgstr "~~gömd~~" #: src/rcgcdw.py:217 msgid "No description provided" -msgstr "" +msgstr "Ingen beskrivning gavs" #: src/rcgcdw.py:220 msgid "hidden" -msgstr "" +msgstr "gömd" diff --git a/locale/sv/LC_MESSAGES/redaction.mo b/locale/sv/LC_MESSAGES/redaction.mo index f11bd82ec4bc818679d5ef271c45768ad8236a28..caa1d647644c8d45c466c20730a50d5e119ed777 100644 GIT binary patch delta 107 zcmX@c{GK`Do)F7a1|VPpVi_RT0b*7lwgF-g2moSsAPxlL9!3U+NFdDt#Ls|iAOh)(0D`U!`~Uy| delta 65 wcmaFQe2m%Ro)F7a1|VPrVi_P-0b*t#)&XJ=umIv7prj>`2C0F8jS+o}00rI#ga7~l diff --git a/locale/sv/LC_MESSAGES/redaction.po b/locale/sv/LC_MESSAGES/redaction.po index f075f09..5535fc9 100644 --- a/locale/sv/LC_MESSAGES/redaction.po +++ b/locale/sv/LC_MESSAGES/redaction.po @@ -8,15 +8,18 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2021-05-27 21:02+0000\n" +"Last-Translator: Spisen \n" +"Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.6\n" #: src/discord/redaction.py:77 src/discord/redaction.py:80 #: src/discord/redaction.py:85 msgid "Removed" -msgstr "" +msgstr "Tog bort" From 9d002a2141425fc65441e055a22265512dcc6df7 Mon Sep 17 00:00:00 2001 From: Frisk Date: Fri, 28 May 2021 12:57:03 +0200 Subject: [PATCH 159/173] Updated URLs to translation platform --- CONTRIBUTING.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3395c0d..6594a82 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,4 +9,4 @@ If you contribute, I ask of you to create merge requests based on testing branch `testing `- testing branch is what all of my hosted scripts run. It is used to test the code before merging it with master branch. ## Translations ## -If you speak in other languages than English, you are more than welcome to. There are several ways you can contribute your translation, first the easiest one is to signup at [our weblate instance](https://weblate.frisk.space) and [contact me directly with request to review your account](https://minecraft.gamepedia.com/User:Frisk#Contact). You can also contact me so I send you the translation files you can fill in. If you know how .po files work, you are also free to send Merge Requests with translated files. +If you speak in other languages than English, you are more than welcome to. There are several ways you can contribute your translation, first the easiest one is to signup at [our weblate instance](https://translate.wikibot.de) and [contact me directly with request to review your account](https://minecraft.gamepedia.com/User:Frisk#Contact). You can also contact me so I send you the translation files you can fill in. If you know how .po files work, you are also free to send Merge Requests with translated files. diff --git a/README.md b/README.md index a3de044..5e82978 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ Thank you! -[![Translation status](https://weblate.frisk.space/widgets/rcgcdw/-/multi-auto.svg)](https://weblate.frisk.space/engage/rcgcdw/?utm_source=widget) +[![Translation status](https://translate.wikibot.de/widgets/rcgcdw/-/multi-auto.svg)](https://translate.wikibot.de/engage/rcgcdw/?utm_source=widget) ### Extensions/compatible programs ### * [Wiki Utilities](https://github.com/Sidemen19/Wiki-Utilities) – an integration that allows wiki administrators to revert edits, block editors, and delete pages on the wiki by reacting to messages created by RcGcDw/RcGcDb. Author: [Sidemen19](https://github.com/Sidemen19) From c9962ca4878c3bb637a6c79c86e062864528283f Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 31 May 2021 21:54:49 +0000 Subject: [PATCH 160/173] Translated using Weblate (Swedish) Currently translated at 100.0% (16 of 16 strings) Translated using Weblate (Swedish) Currently translated at 11.6% (34 of 292 strings) Translated using Weblate (Chinese (Simplified) (zh-hans)) Currently translated at 100.0% (292 of 292 strings) Translated using Weblate (Russian) Currently translated at 98.2% (287 of 292 strings) Translated using Weblate (Portuguese (Brazil) (pt-br)) Currently translated at 93.1% (272 of 292 strings) Translated using Weblate (Chinese (Simplified) (zh-hans)) Currently translated at 100.0% (292 of 292 strings) Co-authored-by: Eduaddad Co-authored-by: Philo04 Co-authored-by: Spisen Co-authored-by: Weblate Co-authored-by: lakejason0 Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/pt-br/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/ru/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/sv/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/zh-hans/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/misc/sv/ Translation: RcGcDw/formatters Translation: RcGcDw/misc --- locale/pt-br/LC_MESSAGES/formatters.mo | Bin 32846 -> 35452 bytes locale/pt-br/LC_MESSAGES/formatters.po | 27 +++---- locale/ru/LC_MESSAGES/formatters.mo | Bin 48172 -> 47997 bytes locale/ru/LC_MESSAGES/formatters.po | 21 +++--- locale/sv/LC_MESSAGES/formatters.mo | Bin 455 -> 5441 bytes locale/sv/LC_MESSAGES/formatters.po | 75 ++++++++++++------ locale/sv/LC_MESSAGES/misc.mo | Bin 449 -> 1148 bytes locale/sv/LC_MESSAGES/misc.po | 41 +++++----- locale/zh-hans/LC_MESSAGES/formatters.mo | Bin 32551 -> 37119 bytes locale/zh-hans/LC_MESSAGES/formatters.po | 92 ++++++++++------------- 10 files changed, 137 insertions(+), 119 deletions(-) diff --git a/locale/pt-br/LC_MESSAGES/formatters.mo b/locale/pt-br/LC_MESSAGES/formatters.mo index 4d49257933c76f2042e01615f03c054b85e7b45c..cefe58605e6319ab2d69b2c7a5b35ffa5121409e 100644 GIT binary patch delta 7772 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 delta 5677 zcmZA530zfG0>|<5KtNZoLnNQ6GjkU=fC31qR^V z*cumMBiw<(#(2%^6!gJ&P+vTaQFtCThTri<42yO;=!hCfHdf#$9EOLnEhfYmlZgXR z?cI;+cpd6O_Mry!F1Dn9bDTmhCw@USkV)(GX{MkCR*hY-22=4hY=&QB8w`pyCKA)J zCFWr(EW-}C3X}15%))b+h{XruchIz(~HW^XbT>n9-;!xDz$N z)u=1qj%x5EYE7?TeGH)yT~HLNom8xcg{XE$qWYVk!2DA-kMYtR_n<~rhnmV*PWHzf z?1#%x4WGcF_zh|gWFud^mw+&9jlz7WE< zwOO)}U1|oPrg8-8i!$9M`@53+vo1->kOVkx+qb^{ydwvq?^Ybtemt!J6 zjI`@DHid9b96)t&3=8ly>Piw*7%gtVQ5eF_JO+z#4(`PY?84r^4L*%avBS;A@SmyWsR-MMS(ajy=e-V0~pS{#iHvW%IA#h8aju>zyGnt8Yc^}Z*E37tXV4lbYX znmU|>vAM>K!}&NIPou7+ZBM7e&3J_RWn?Vo01KUuf1;Kkzqd1E7EY&r4j;s!j7BqY z7IU#pKJ%}sFXP)fu?;oV-(n-oVgY%mnL=!UGhOGShx%gl$0hFhVi0!1Fw8{Vo&^|-qfzZtAp6-= zV-jvdR@WTCAPis{ws8gCFbZm@wx2VigQ)r$)W9yF8uahat%u>*1mjR0cSa4YH?nU{ zKje4IRAVr%NBsW2D)LJLk@MqP2!0nU`CqBczdYDsou8w_J>vmZ?c zMq)X(#zm-s@4yDQ8{6SQ#Sh1nPpyksHgbaNj>M zocU*2&99tb)=l3L&K0jgCc*5$>G%hB#c3m*jyGX4^;*=EunyZ{%qafK!F&wIIoKB$ zqXzaa@+dHuF$6P5Gyf{|;jyJD8j68fiD6jfT7%kD>rhv^8FfY5Q8RJ~wd;?e_Rx38 zv&h7baen>AVIuVzsP8|78t{5A1+CdZ)IiRm*5(pwKnb@xYnh9>vcnB1Z67jmC}`gx&q@UnY8V!Si3c+_UiMa|?8tcMe@0E=;v?*Hc~RBW)PTBAb>4pk2T*TN=KM;I#2o6Y zkujMQsPAP=V|M7@cqy=7%s!lmv0U!WI1l@wjci!+J93d`#2wBPaTjX9!84o&mtz6- zho5xZiZo?nSVvvZGGw*Q8?HCbMZWE~`IzA&K z2@~ym0C_i3SWR>=NZ&m>5j7YcR|)&YcYML?8M4)>`d*Ll`Zv;<^!;Vyo;K+eW)SXT z-=q9L_&j-?=q@NE+6#3=x1;Z%|Nk9HZm9?A0WpwlAS1{qGMyYCkCRK}C>ca5Nn`R9 zIZVn(0`Vgk$SI=ZWm1pqBihur6Yn#;{7AZ!>qk!t$z(5C@188dwr)Ac^;6tQK6LBi zYchbmtqMmA2jBBxp<5QABwy>_)jfF-%Sl7GE}D{8-1-STPezl6NESInjuD&aSV?L~ znkxTyJV$+nd+u}BueAQxm*AJbe4&q9UWRY|<@^rH;coq3c#_=a)~m3eTNW2d23bSy zBiE0AyM`IlOnQ@HB#|^Ar-_cglW$11Dt|eqQ2x@bZ^mrWpUfdQ zk(Y>$VseE9lNX8aZ>7u7hTKSw6CGp8KS`V_9N*dJqI-HgJ+1bwn%KRXZ1q?z`Zlz? z$JP4TVa;CfvnD4swNerfTeaOot@wl+tXq?ct&2%ltRBgqSd&|vvM02B+v7j9wAgw+ zA<15!(%3J!s;HuJYVq{aYAYo5F8`t_v+RYbQGwRR^k6$L{XmGlKkMcQD{9~vYsJ7N zfmPLsl|@tRMuWC{?0thPJ$6RnagRM{Sen1Ra^&ZJR>tfwYtq$@?ZS*^$3XP+4x z=&^nscgjkg@THwIv6-L!R#AzcHNGUwdbH%;;QY#|<+DpGi)PvJrON`X$J2xC!PC2k Z+P&xf9AWjUskA<-*&IfnrPn`a{tI3$-;4kN diff --git a/locale/pt-br/LC_MESSAGES/formatters.po b/locale/pt-br/LC_MESSAGES/formatters.po index 888f408..028c343 100644 --- a/locale/pt-br/LC_MESSAGES/formatters.po +++ b/locale/pt-br/LC_MESSAGES/formatters.po @@ -21,7 +21,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: 2021-05-21 18:19+0000\n" +"PO-Revision-Date: 2021-05-31 21:54+0000\n" "Last-Translator: Eduaddad \n" "Language-Team: Portuguese (Brazil) \n" @@ -30,7 +30,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.6\n" +"X-Generator: Weblate 4.6.2\n" #: src/api/util.py:61 src/api/util.py:66 msgid "__Only whitespace__" @@ -51,7 +51,6 @@ msgid "Unregistered user" msgstr "Usuário não registrado" #: src/api/util.py:160 -#, fuzzy msgctxt "recent changes Tags" msgid "Tags" msgstr "Etiquetas" @@ -425,13 +424,11 @@ msgid "Created a quiz \"{title}\"" msgstr "Criou um quiz \"{title}\"" #: extensions/base/discussions.py:193 extensions/base/discussions.py:195 -#, fuzzy msgctxt "Fandom discussions Tags/Forums" msgid "Tags" msgstr "Etiquetas" #: extensions/base/discussions.py:193 -#, fuzzy msgctxt "Fandom discussions amount of Tags/Forums" msgid "{} tags" msgstr "{} etiquetas" @@ -596,7 +593,7 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) travou uma wiki *{wiki_name}*{comment}" #: extensions/base/managewiki.py:124 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Modified \"{namespace_name}\" namespace" msgstr "Modificou o espaço nominal \"{namespace_name}\"" @@ -700,13 +697,13 @@ msgid "{field} field changed to: {desc}" msgstr "Campo {field} alterado para: {desc}" #: extensions/base/curseprofile.py:58 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " "profile." msgstr "" -"[{author}]({author_url}) editou o {field} no perfil de [{target}]" -"({target_url}). *({desc})*" +"[{author}]({author_url}) limpou o {field} no perfil de " +"[{target}]({target_url})" #: extensions/base/curseprofile.py:60 #, python-brace-format @@ -718,13 +715,13 @@ msgstr "" "({target_url}). *({desc})*" #: extensions/base/curseprofile.py:65 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " "profile." msgstr "" -"[{author}]({author_url}) editou o {field} em seu [próprio perfil]" -"({target_url}). *({desc})*" +"[{author}]({author_url}) limpou o {field} em seu [próprio " +"perfil]({target_url})." #: extensions/base/curseprofile.py:67 #, python-brace-format @@ -1560,17 +1557,17 @@ msgstr[1] "Removido de" #: extensions/base/mediawiki.py:860 #, python-brace-format msgid "Added to {added} and removed from {removed}." -msgstr "" +msgstr "Adicionado a {added} e removido de {removed}." #: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 #: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 msgid ", " -msgstr "" +msgstr ", " #: extensions/base/mediawiki.py:863 #, python-brace-format msgid "Added to {added}." -msgstr "" +msgstr "Adicionado a {added}." #: extensions/base/mediawiki.py:865 #, fuzzy, python-brace-format diff --git a/locale/ru/LC_MESSAGES/formatters.mo b/locale/ru/LC_MESSAGES/formatters.mo index 0f101f2a1113a0301e35f9159c86494a09fc52be..577c3eec08a9dbb5742c20e1b0479a859fb1e54d 100644 GIT binary patch delta 5067 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 delta 5168 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 diff --git a/locale/ru/LC_MESSAGES/formatters.po b/locale/ru/LC_MESSAGES/formatters.po index 2296a67..92eb93b 100644 --- a/locale/ru/LC_MESSAGES/formatters.po +++ b/locale/ru/LC_MESSAGES/formatters.po @@ -21,8 +21,8 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: 2021-05-22 16:00+0000\n" -"Last-Translator: Alex Great \n" +"PO-Revision-Date: 2021-05-31 21:54+0000\n" +"Last-Translator: Philo04 \n" "Language-Team: Russian \n" "Language: ru\n" @@ -31,7 +31,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.6\n" +"X-Generator: Weblate 4.6.2\n" #: src/api/util.py:61 src/api/util.py:66 msgid "__Only whitespace__" @@ -1598,9 +1598,8 @@ msgstr "" #: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 #: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 -#, fuzzy msgid ", " -msgstr "," +msgstr ", " #: extensions/base/mediawiki.py:863 #, python-brace-format @@ -1613,20 +1612,20 @@ msgid "Removed from {removed}." msgstr "Удалено" #: extensions/base/mediawiki.py:866 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) changed group membership for [{target}]" "({target_url}): {group_changes}{comment}" msgstr "" -"[{author}]({author_url}) изменил членство в группах для участника [{target}]" -"({target_url}) {added}{comma} {removed}{comment}" +"[{author}]({author_url}) изменил членство в группах для участника " +"[{target}]({target_url}): {group_changes}{comment}" #: extensions/base/mediawiki.py:870 -#, fuzzy, python-brace-format +#, python-brace-format msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" msgstr "" -"Членство в группах для участника [{target}]({target_url}) было автоматически " -"изменено системой: {added}{comma} {removed}{comment}" +"Участник [{target}]({target_url}) был автоматически добавлен в группу " +"{added}.{comment}" #: extensions/base/mediawiki.py:883 #, python-brace-format diff --git a/locale/sv/LC_MESSAGES/formatters.mo b/locale/sv/LC_MESSAGES/formatters.mo index 2520d1eb3967d9a625c8146960e05145f709a4e6..635b6a8d1db757307ebd874dd3c8579d7f65ed3e 100644 GIT binary patch literal 5441 zcmb`KOOO*q7{^-yh4===2M-$%3YN+S5P=FTWguBxD`9b8C}4%jOlLA?GBb8}vc_c( zS{#&vo;-N)pu)wA<%O~eZd=|ct1OR}-n7c{pj94xoc#AplAVN1b}&rsu-NrzxpGBYX|PlxDVb#ND9o~iw|6DR}u0cxDI>>+z37ZKG%BR2d=^Uad17D1rLB{ z!3=l>+y&kOkAZ)JJHdUc33(Zu11G>wK{f9;a67maLJxx(@P4ofD!bkR_kv%6kAXje zI`}*ICOCZ`bc5f33*Z(^o&!Gy-v|Ey-vi%X8_Zj^4s-Bsf)~LX;017Vf)E>Qf*ZhJ zz^A}}!4DCm4G4mY!{-Q&iqDt$cm%u&J`COhA&UF}s`)>IW8gnv9z2X-J`Y|7kAq)> zqu^iQEVv6oUI8zGhrn;aJ>VKBQST`bE|4;);^u;C{%7Em;CG-6{t8|K=N=`*0KW&{ z1&<(jMeqjr0k{c^cLn?cG{F~O^f~YoP{sFeP>sLvI3X4ACWt?>^9e!_YLW&K7XR9U zPYmx|_{opaGoVT7PQ`t|b<`{Hgk=9(!x?U1wWF%u4%orI-Q#?Mz=3$Tw1!# z7Pp6{K)&Uew~ZFG%-vde4wWumrN&JrAt7rC-K}#7Ho7K5b68Q%!6-*Ej$s=0xLdMW zjm}pro56cub!d2x4uA5BD#kSkgAs1vewU+4lU|`EX1k6l)R=ZyG#El#ap^eq|3s;P z_e#oJHA}6Cjn%3nNQkG)!;w+8TwLh65R!?+%Ps8DnwEy<0X~TAUp`#G>65OF9K$2t(|?1!F*5dh17wu-AeLGeBrh z!HFT02PYIZPSj=%PLlo=<_;7@)u3p_F@*co61A_NaMa#t*|*i$Wo5T#-byAs zO=ra-;Y>%lqPl;03p%5jVzv4}MR(s|x=c0BbO z37MQ}wF53s)A8ASo}SJWa`afPkeSH8n8{|Ra?{htF*G=?k~2)JEn9M|BBdwNsZ{$g zVx#j`)hfAi)LdFU^;<~9D^C=`zO_MkXL`pPL%RpT#j!$Tvoqt#Bg^BICuPQysy#5!yrk)ok|h&oY_ubGava)4 znmV5UD#i{RrNQHvL${65{YMk8CQmVkaZRdNoMk06NsJyGJv4eCL8yy%L3L(0ze3Nd zFUxBtj#kUITfNzgYtjQjqD^BV?BCCITBF1qoZ`OV_$(DT5)r)8fo}UJVVIZ=r?2 z`yTa}q>K!;AtWbdr**4)o{+9V8+Op_iOiQm)-#jD|m6{*u zunwV`7PwYHh|u>rArDF#*JwMa9l!5fYPXf0W$H*g!A!n%)e&l~g@?dbsamjbhyC$qc57^Rd&txkG;}Ly=Ot-BbXgQ+NVg^tw0lf0PiYmzZr#1fMJ9umkE>z$ zpQeFu7#jYiLEY@%`Pogq3U37VmqC?ZE9{Es0=!&rBbBwcQ0#rv)eEY9GsJn0eG+S* z4dtP?bWI`$%Vm`zEVN5|c4xGbAVcqxpAnloT6>H|tkxa)7F4RB3=BGz9u8vPnHKysh@6+^Ua9ifAkbYQ`{6CKedE!wXb^81Qa g=Rma7f$LB#=1@e1r07eWD*m4~(LbVBG&N5C0|ReCu>b%7 delta 69 zcmX@8b)4Dao)F7a1|VPrVi_P-0b*t#)&XJ=umIv-prj>`2C0F8%|hJ0j7(e%030y} AQ2+n{ diff --git a/locale/sv/LC_MESSAGES/formatters.po b/locale/sv/LC_MESSAGES/formatters.po index df709ed..a7e6b55 100644 --- a/locale/sv/LC_MESSAGES/formatters.po +++ b/locale/sv/LC_MESSAGES/formatters.po @@ -8,57 +8,59 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2021-05-31 21:54+0000\n" +"Last-Translator: Spisen \n" +"Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.6.2\n" #: src/api/util.py:61 src/api/util.py:66 msgid "__Only whitespace__" -msgstr "" +msgstr "__Endast blanksteg__" #: src/api/util.py:71 msgid "Removed" -msgstr "" +msgstr "Tog bort" #: src/api/util.py:73 msgid "Added" -msgstr "" +msgstr "Lagt till" #: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 #: src/api/util.py:141 extensions/base/discussions.py:247 #: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 msgid "Unregistered user" -msgstr "" +msgstr "Oregistrerad användare" #: src/api/util.py:160 msgctxt "recent changes Tags" msgid "Tags" -msgstr "" +msgstr "Taggar" #: src/api/util.py:162 msgid "**Added**: " -msgstr "" +msgstr "**Lagt till**: " #: src/api/util.py:163 msgid " and {} more\n" -msgstr "" +msgstr " och {} mer\n" #: src/api/util.py:165 msgid "**Removed**: " -msgstr "" +msgstr "**Tog bort**: " #: src/api/util.py:166 msgid " and {} more" -msgstr "" +msgstr " och {} mer" #: src/api/util.py:168 msgid "Changed categories" -msgstr "" +msgstr "Ändrade kategorier" #: extensions/base/cargo.py:37 #, python-brace-format @@ -103,7 +105,7 @@ msgstr "" #: extensions/base/translate.py:41 #, python-brace-format msgid "Marked \"{article}\" for translation" -msgstr "" +msgstr "Markerade \"{article}\" för översättning" #: extensions/base/translate.py:55 #, python-brace-format @@ -111,11 +113,13 @@ msgid "" "[{author}]({author_url}) marked [{article}]({article_url}) for " "translation{comment}" msgstr "" +"[{author}]({author_url}) markerade [{article}]({article_url}) för " +"översättning{comment}" #: extensions/base/translate.py:70 #, python-brace-format msgid "Removed \"{article}\" from the translation system" -msgstr "" +msgstr "Tog bort \"{article}\" från översättningssystemet" #: extensions/base/translate.py:80 #, python-brace-format @@ -123,11 +127,14 @@ msgid "" "[{author}]({author_url}) removed [{article}]({article_url}) from the " "translation system{comment}" msgstr "" +"[{author}]({author_url}) tog bort [{article}]({article_url}) från " +"översättningssystemet{comment}" #: extensions/base/translate.py:95 #, python-brace-format msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" msgstr "" +"Slutförde flytten av översättningssidor från \"{article}\" till \"{target}\"" #: extensions/base/translate.py:106 #, python-brace-format @@ -135,11 +142,13 @@ msgid "" "[{author}]({author_url}) completed moving translation pages from *{article}* " "to [{target}]({target_url}){comment}" msgstr "" +"[{author}]({author_url}) slutförde flytten av översättningssidor från " +"*{article}* till [{target}]({target_url}){comment}" #: extensions/base/translate.py:121 #, python-brace-format msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "" +msgstr "Ett problem uppstod vid flytten av \"{article}\" till \"{target}\"" #: extensions/base/translate.py:133 #, python-brace-format @@ -147,6 +156,8 @@ msgid "" "[{author}]({author_url}) encountered a problem while moving [{article}]" "({article_url}) to [{target}]({target_url}){comment}" msgstr "" +"[{author}]({author_url}) påträffade ett problem vid flytten av " +"[{article}]({article_url}) till [{target}]({target_url}){comment}" #: extensions/base/translate.py:149 #, python-brace-format @@ -154,6 +165,8 @@ msgid "" "Failed to delete \"{article}\" which belongs to translatable page " "\"{target}\"" msgstr "" +"Det gick inte att ta bort\"{article}\" som tillhör den översättbara sidan \"" +"{target}\"" #: extensions/base/translate.py:161 #, python-brace-format @@ -161,11 +174,13 @@ msgid "" "[{author}]({author_url}) failed to delete [{article}]({article_url}) which " "belongs to translatable page [{target}]({target_url}){comment}" msgstr "" +"[{author}]({author_url}) kunde inte ta bort [{article}]({article_url}) som " +"tillhör den översättbara sidan [{target}]({target_url}){comment}" #: extensions/base/translate.py:177 #, python-brace-format msgid "Completed deletion of translation page \"{article}\"" -msgstr "" +msgstr "Raderingen av översättningssidan \"{article}\" har slutförts" #: extensions/base/translate.py:188 #, python-brace-format @@ -173,12 +188,16 @@ msgid "" "[{author}]({author_url}) completed deletion of translation page [{article}]" "({article_url}){comment}" msgstr "" +"[{author}]({author_url}) lyckades med raderingen av översättningssidan " +"[{article}]({article_url}){comment}" #: extensions/base/translate.py:203 #, python-brace-format msgid "" "Failed to delete \"{article}\" which belongs to translation page \"{target}\"" msgstr "" +"Det gick inte att ta bort\"{article}\" som tillhör översättningssidan \"" +"{target}\"" #: extensions/base/translate.py:215 #, python-brace-format @@ -186,11 +205,13 @@ msgid "" "[{author}]({author_url}) failed to delete [{article}]({article_url}) which " "belongs to translation page [{target}]({target_url}){comment}" msgstr "" +"[{author}]({author_url}) kunde inte ta bort [{article}]({article_url}) som " +"tillhör översättningssidan [{target}]({target_url}){comment}" #: extensions/base/translate.py:231 #, python-brace-format msgid "Encouraged translation of \"{article}\"" -msgstr "" +msgstr "Uppmuntrade till översättning av \"{article}\"" #: extensions/base/translate.py:240 #, python-brace-format @@ -198,11 +219,13 @@ msgid "" "[{author}]({author_url}) encouraged translation of [{article}]({article_url})" "{comment}" msgstr "" +"[{author}]({author_url}) uppmuntrade till översättning av " +"[{article}]({article_url}){comment}" #: extensions/base/translate.py:255 #, python-brace-format msgid "Discouraged translation of \"{article}\"" -msgstr "" +msgstr "Uppmuntrade inte till översättning av \"{article}\"" #: extensions/base/translate.py:264 #, python-brace-format @@ -210,21 +233,23 @@ msgid "" "[{author}]({author_url}) discouraged translation of [{article}]" "({article_url}){comment}" msgstr "" +"[{author}]({author_url}) uppmuntrade inte till översättning av " +"[{article}]({article_url}){comment}" #: extensions/base/translate.py:282 #, python-brace-format msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "" +msgstr "Begränsade språk för \"{article}\" till `{languages}`" #: extensions/base/translate.py:285 #, python-brace-format msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "" +msgstr "Prioriterade språk för \"{article}\" till`{languages}`" #: extensions/base/translate.py:288 #, python-brace-format msgid "Removed priority languages from \"{article}\"" -msgstr "" +msgstr "Tog bort prioriterade språk från \"{article}\"" #: extensions/base/translate.py:301 #, python-brace-format @@ -232,6 +257,8 @@ msgid "" "[{author}]({author_url}) limited languages for [{article}]({article_url}) to " "`{languages}`{comment}" msgstr "" +"[{author}]({author_url}) begränsade språk för [{article}]({article_url}) " +"till `{languages}`{comment}" #: extensions/base/translate.py:308 #, python-brace-format @@ -239,6 +266,8 @@ msgid "" "[{author}]({author_url}) set the priority languages for [{article}]" "({article_url}) to `{languages}`{comment}" msgstr "" +"[{author}]({author_url}) prioriterade språk för [{article}]({article_url}) " +"till `{languages}`{comment}" #: extensions/base/translate.py:315 #, python-brace-format @@ -246,6 +275,8 @@ msgid "" "[{author}]({author_url}) removed priority languages from [{article}]" "({article_url}){comment}" msgstr "" +"[{author}]({author_url}) tog bort prioriterade språk från " +"[{article}]({article_url}){comment}" #: extensions/base/translate.py:331 #, python-brace-format diff --git a/locale/sv/LC_MESSAGES/misc.mo b/locale/sv/LC_MESSAGES/misc.mo index 9cd13195f666403805e11e4eb49dd87b4361c53b..30d6c100e55a1662b8198cfc9151374c9b941dbe 100644 GIT binary patch literal 1148 zcmYk4&2AGh5XTLaujQ+7>4i$>fB=EBw5qCV+f+?SQX;b5C`n6!L$uj7nj>5YtOuvy z2kb5I3h*890`LP6V?P3~0zcXBpMjS^e*?u?IBFjdl$dp2r$!*wcx@6$rFPAl20H-dF?Q zlQ_LzMZ`3hiuZb?(wAdHb56EHV=`V6+|WTN;*67Osw1i56Il-<-j{Mnvs4Vpj+9Bp z3%@C&(4#9)bEHqMiw7%DD(%p(*qZ>89(r9i~s?~O_ z)7gYjk&MHHvo73i*2%`en348e*Vrt)G)aePUz$?P-BED|?W!n=;)$EX`?~tjou%`r zK6LzsUz=TWsr1l!B!%GudV4d1<_&*s+));$Vx2~VP-$+;d)+!)o5f-Emt3)$h-93K z#G`Bd)Htndtip`drOLHO#b_#Zd3l`{ZduSns!;X$sCzE4kF*;VXAh*WBvAUQXE2g7k{bF|h6EHkh S1w$wr!|+%Q(_=kZeEA0|AslT0 delta 69 zcmeyvagf>Ko)F7a1|VPrVi_P-0b*t#)&XJ=umIwAprj>`2C0F8&9+SKj7(e%03oji AdH?_b diff --git a/locale/sv/LC_MESSAGES/misc.po b/locale/sv/LC_MESSAGES/misc.po index 52022c4..aa131dd 100644 --- a/locale/sv/LC_MESSAGES/misc.po +++ b/locale/sv/LC_MESSAGES/misc.po @@ -8,76 +8,81 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2021-05-31 21:54+0000\n" +"Last-Translator: Spisen \n" +"Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.6.2\n" #: src/misc.py:44 msgid "Location" -msgstr "" +msgstr "Plats" #: src/misc.py:44 msgid "About me" -msgstr "" +msgstr "Om mig" #: src/misc.py:44 msgid "Google link" -msgstr "" +msgstr "Google-länk" #: src/misc.py:44 msgid "Facebook link" -msgstr "" +msgstr "Facebook-länk" #: src/misc.py:44 msgid "Twitter link" -msgstr "" +msgstr "Twitter-länk" #: src/misc.py:44 msgid "Reddit link" -msgstr "" +msgstr "Reddit-länk" #: src/misc.py:44 msgid "Twitch link" -msgstr "" +msgstr "Twitch-länk" #: src/misc.py:44 msgid "PSN link" -msgstr "" +msgstr "PSN-länk" #: src/misc.py:44 msgid "VK link" -msgstr "" +msgstr "VK-länk" #: src/misc.py:44 msgid "XBL link" -msgstr "" +msgstr "XBL-länk" #: src/misc.py:44 msgid "Steam link" -msgstr "" +msgstr "Steam-länk" #: src/misc.py:44 msgid "Discord handle" -msgstr "" +msgstr "Discord-länk" #: src/misc.py:44 msgid "Battle.net handle" -msgstr "" +msgstr "Battle.net-länk" #: src/misc.py:138 msgid "" "\n" "__And more__" msgstr "" +"\n" +"__Och mer__" #: src/misc.py:322 msgid "Unknown" -msgstr "" +msgstr "Okänd" #: src/misc.py:324 msgid "unknown" -msgstr "" +msgstr "okänd" diff --git a/locale/zh-hans/LC_MESSAGES/formatters.mo b/locale/zh-hans/LC_MESSAGES/formatters.mo index dd4770e4bc832558e8f265e3215e00d9d33c1fcc..bada41bc8fc4268e72e2647dc00d5d24013eb26b 100644 GIT binary patch delta 9925 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 P9g9{7$6+LmSxx&P6WHEW;#x3sdkIYRQ{( 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 diff --git a/locale/zh-hans/LC_MESSAGES/formatters.po b/locale/zh-hans/LC_MESSAGES/formatters.po index 750f758..2e3c966 100644 --- a/locale/zh-hans/LC_MESSAGES/formatters.po +++ b/locale/zh-hans/LC_MESSAGES/formatters.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: 2021-05-21 18:19+0000\n" -"Last-Translator: Dianliang233 \n" +"PO-Revision-Date: 2021-05-31 21:54+0000\n" +"Last-Translator: lakejason0 \n" "Language-Team: Chinese (Simplified) \n" "Language: zh-hans\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.6\n" +"X-Generator: Weblate 4.6.2\n" #: src/api/util.py:61 src/api/util.py:66 msgid "__Only whitespace__" @@ -38,7 +38,6 @@ msgid "Unregistered user" msgstr "未注册用户" #: src/api/util.py:160 -#, fuzzy msgctxt "recent changes Tags" msgid "Tags" msgstr "标签" @@ -402,13 +401,11 @@ msgid "Created a quiz \"{title}\"" msgstr "创建了问卷 \"{title}\"" #: extensions/base/discussions.py:193 extensions/base/discussions.py:195 -#, fuzzy msgctxt "Fandom discussions Tags/Forums" msgid "Tags" msgstr "标签" #: extensions/base/discussions.py:193 -#, fuzzy msgctxt "Fandom discussions amount of Tags/Forums" msgid "{} tags" msgstr "{} 个标签" @@ -674,13 +671,12 @@ msgid "{field} field changed to: {desc}" msgstr "{field} 栏位改为:{desc}" #: extensions/base/curseprofile.py:58 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " "profile." msgstr "" -"[{author}]({author_url}) 在 [{target}]({target_url}) 的资料页上编辑了 " -"{field} 栏位。*({desc})*" +"[{author}]({author_url}) 在 [{target}]({target_url}) 的资料页上清除了 {field} 栏位。" #: extensions/base/curseprofile.py:60 #, python-brace-format @@ -692,13 +688,11 @@ msgstr "" "{field} 栏位。*({desc})*" #: extensions/base/curseprofile.py:65 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " "profile." -msgstr "" -"[{author}]({author_url}) 在[自己]({target_url})的资料页上编辑了 {field} 栏" -"位。*({desc})*" +msgstr "[{author}]({author_url}) 在[自己]({target_url})的资料页上编辑了 {field} 栏位。" #: extensions/base/curseprofile.py:67 #, python-brace-format @@ -719,17 +713,16 @@ msgid "Left a comment on their own profile" msgstr "在自己的资料页上留下留言" #: extensions/base/curseprofile.py:97 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." -msgstr "" -"[{author}]({author_url}) 在 {target} 的资料页上留下了一条[评论]({comment})" +msgstr "[{author}]({author_url}) 在 {target} 的资料页上留下了一条[评论]({comment})。" #: extensions/base/curseprofile.py:100 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on their own profile." -msgstr "[{author}]({author_url}) 在自己的资料页上留下了一条[评论]({comment})" +msgstr "[{author}]({author_url}) 在自己的资料页上留下了一条[评论]({comment})。" #: extensions/base/curseprofile.py:113 #, python-brace-format @@ -741,17 +734,16 @@ msgid "Edited a comment on their own profile" msgstr "编辑了自己的资料页上的一条留言" #: extensions/base/curseprofile.py:128 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." -msgstr "" -"[{author}]({author_url}) 在 {target} 的资料页上编辑了一条[评论]({comment})" +msgstr "[{author}]({author_url}) 在 {target} 的资料页上编辑了一条[评论]({comment})。" #: extensions/base/curseprofile.py:131 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on their own profile." -msgstr "[{author}]({author_url}) 在自己的资料页上编辑了一条[评论]({comment})" +msgstr "[{author}]({author_url}) 在自己的资料页上编辑了一条[评论]({comment})。" #: extensions/base/curseprofile.py:144 #, python-brace-format @@ -763,19 +755,18 @@ msgid "Replied to a comment on their own profile" msgstr "在自己的资料页上回复留言" #: extensions/base/curseprofile.py:159 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " "profile." -msgstr "" -"[{author}]({author_url}) 在 {target} 的资料页上回复了一条[评论]({comment})" +msgstr "[{author}]({author_url}) 在 {target} 的资料页上回复了一条[评论]({comment})。" #: extensions/base/curseprofile.py:162 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on their own " "profile." -msgstr "[{author}]({author_url}) 在自己的资料页上回复了一条[评论]({comment})" +msgstr "[{author}]({author_url}) 在自己的资料页上回复了一条[评论]({comment})。" #: extensions/base/curseprofile.py:175 #, python-brace-format @@ -787,19 +778,18 @@ msgid "Deleted a comment on their own profile" msgstr "删除了自己的资料页上的一条评论" #: extensions/base/curseprofile.py:197 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " "profile.{reason}" -msgstr "" -"[{author}]({author_url}) 在 {target} 的资料页上删除了一条[评论]({comment})" +msgstr "[{author}]({author_url}) 在 {target} 的资料页上删除了一条[评论]({comment})。{reason}" #: extensions/base/curseprofile.py:200 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." "{reason}" -msgstr "[{author}]({author_url}) 在自己的资料页上删除了一条[评论]({comment})" +msgstr "[{author}]({author_url}) 在自己的资料页上删除了一条[评论]({comment})。{reason}" #: extensions/base/curseprofile.py:214 #, python-brace-format @@ -811,18 +801,18 @@ msgid "Purged a comment on their own profile" msgstr "永久删除了自己的资料页上的一条评论" #: extensions/base/curseprofile.py:230 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." "{reason}" -msgstr "[{author}]({author_url}) 在 {target} 的资料页上永久删除了一条评论" +msgstr "[{author}]({author_url}) 在 [{target}]({link}) 的资料页上永久删除了一条评论。{reason}" #: extensions/base/curseprofile.py:233 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) purged a comment on [their own]({link}) profile." "{reason}" -msgstr "[{author}]({author_url}) 在自己的资料页上永久删除了一条评论" +msgstr "[{author}]({author_url}) 在[自己]({link})的资料页上永久删除了一条评论。{reason}" #: extensions/base/renameuser.py:38 #, python-brace-format @@ -1478,52 +1468,48 @@ msgid "{target} got autopromoted to a new usergroup" msgstr "{target} 被自动地提升到新用户组" #: extensions/base/mediawiki.py:844 -#, fuzzy msgid "Added group" msgid_plural "Added groups" -msgstr[0] "移除从" +msgstr[0] "添加用户组" #: extensions/base/mediawiki.py:846 -#, fuzzy msgid "Removed group" msgid_plural "Removed groups" -msgstr[0] "移除从" +msgstr[0] "移除用户组" #: extensions/base/mediawiki.py:860 #, python-brace-format msgid "Added to {added} and removed from {removed}." -msgstr "" +msgstr "添加到{added}中,从{removed}中移除。" #: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 #: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 msgid ", " -msgstr "" +msgstr "、" #: extensions/base/mediawiki.py:863 #, python-brace-format msgid "Added to {added}." -msgstr "" +msgstr "添加到{added}。" #: extensions/base/mediawiki.py:865 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Removed from {removed}." -msgstr "移除从" +msgstr "从{removed}中移除。" #: extensions/base/mediawiki.py:866 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) changed group membership for [{target}]" "({target_url}): {group_changes}{comment}" msgstr "" -"[{author}]({author_url}) 更改了 [{target}]({target_url}) 的用户组 {added}" -"{comma} {removed}{comment}" +"[{author}]({author_url}) 更改了 [{target}]({target_url}) " +"的用户组:{group_changes}{comment}" #: extensions/base/mediawiki.py:870 -#, fuzzy, python-brace-format +#, python-brace-format msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" -msgstr "" -"{author} 自动提升了 [{target}]({target_url}) 的用户组 {added}{comma} " -"{removed}{comment}" +msgstr "系统自动提升了 [{target}]({target_url}) 的用户组到{added}。{comment}" #: extensions/base/mediawiki.py:883 #, python-brace-format From f1e4d5509914b24fc2035e757aee2cc227e97fb5 Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 1 Jun 2021 00:26:13 +0200 Subject: [PATCH 161/173] Fixed issue for fr and uk languages not having compiled versions of their language files --- locale/fr/LC_MESSAGES/formatters.mo | Bin 0 -> 9136 bytes locale/uk/LC_MESSAGES/formatters.mo | Bin 0 -> 17756 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 locale/fr/LC_MESSAGES/formatters.mo create mode 100644 locale/uk/LC_MESSAGES/formatters.mo diff --git a/locale/fr/LC_MESSAGES/formatters.mo b/locale/fr/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..3c49978b9d693ec2e4319e20b9f63384e193dc84 GIT binary patch literal 9136 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 z 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 sP{Z;=hUgqRV8I1Eq!3xE4SVE_OC literal 0 HcmV?d00001 From 908b42288da0d55a7c9fa4a96824e3efbf7d607f Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 5 Jun 2021 14:44:05 +0200 Subject: [PATCH 162/173] Fixed #215 --- src/api/client.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/api/client.py b/src/api/client.py index f107168..5cef379 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -36,7 +36,6 @@ class Client: self.WIKI_JUST_DOMAIN: str = src.misc.WIKI_JUST_DOMAIN self.content_parser = src.misc.ContentParser self.tags = self.__recent_changes.tags - self.namespaces = self.__recent_changes.namespaces self.LinkParser: type(src.misc.LinkParser) = src.misc.LinkParser #self.make_api_request: src.rc.wiki.__recent_changes.api_request = self.__recent_changes.api_request @@ -44,6 +43,10 @@ class Client: """Refreshes internal storage data for wiki tags and MediaWiki messages.""" self.__recent_changes.init_info() + @property + def namespaces(self): + return self.__recent_changes.namespaces + def parse_links(self, summary: str): link_parser = self.LinkParser() link_parser.feed(summary) From 288e532dbdfe5e650cb73cb5100b897bb3aaaca8 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 5 Jun 2021 15:01:14 +0200 Subject: [PATCH 163/173] Fixed a possibility when init_info fails --- src/api/client.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/api/client.py b/src/api/client.py index 5cef379..caf5723 100644 --- a/src/api/client.py +++ b/src/api/client.py @@ -44,8 +44,12 @@ class Client: self.__recent_changes.init_info() @property - def namespaces(self): - return self.__recent_changes.namespaces + def namespaces(self) -> dict: + """Return a dict of namespaces, if None return empty dict""" + if self.__recent_changes.namespaces is not None: + return self.__recent_changes.namespaces + else: + return dict() def parse_links(self, summary: str): link_parser = self.LinkParser() From 966d28700a0b9f6844659bc414cd84fbb2bd86a9 Mon Sep 17 00:00:00 2001 From: Frisk Date: Fri, 11 Jun 2021 21:25:59 +0200 Subject: [PATCH 164/173] Fixed #216 With message deletion turned on sometimes messages are not being deleted --- src/discord/queue.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/discord/queue.py b/src/discord/queue.py index d8659d0..9777287 100644 --- a/src/discord/queue.py +++ b/src/discord/queue.py @@ -174,14 +174,14 @@ def send_to_discord(data: Optional[DiscordMessage], meta: DiscordMessageMetadata logger.info("Message \"{}\" has been rejected due to matching filter ({}).".format( to_check, regex)) return # discard the message without anything - if messagequeue: + if messagequeue: + messagequeue.add_message((data, meta)) + else: + code = send_to_discord_webhook(data, metadata=meta) + if code == 3: messagequeue.add_message((data, meta)) - else: - code = send_to_discord_webhook(data, metadata=meta) - if code == 3: - messagequeue.add_message((data, meta)) - elif code == 2: - time.sleep(5.0) - messagequeue.add_message((data, meta)) - elif code < 2: - pass \ No newline at end of file + elif code == 2: + time.sleep(5.0) + messagequeue.add_message((data, meta)) + elif code < 2: + pass \ No newline at end of file From ba2bddb8a9d2e877fb0ac5112dc51a869496f82c Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Sat, 12 Jun 2021 17:22:25 +0000 Subject: [PATCH 165/173] fix moved lines edit diff close #218 --- src/api/util.py | 8 ++++---- src/misc.py | 11 ++++++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/api/util.py b/src/api/util.py index dabdd22..e87f4f9 100644 --- a/src/api/util.py +++ b/src/api/util.py @@ -57,15 +57,15 @@ def parse_mediawiki_changes(ctx: Context, content: str, embed: DiscordMessage) - edit_diff = ctx.client.content_parser() edit_diff.feed(content) if edit_diff.small_prev_del: - if edit_diff.small_prev_del.replace("~~", "").isspace(): + if edit_diff.small_prev_del.replace("~~", "").replace("__", "").isspace(): edit_diff.small_prev_del = _('__Only whitespace__') else: - edit_diff.small_prev_del = edit_diff.small_prev_del.replace("~~~~", "") + edit_diff.small_prev_del = edit_diff.small_prev_del.replace("~~~~", "").replace("____", "") if edit_diff.small_prev_ins: - if edit_diff.small_prev_ins.replace("**", "").isspace(): + if edit_diff.small_prev_ins.replace("**", "").replace("__", "").isspace(): edit_diff.small_prev_ins = _('__Only whitespace__') else: - edit_diff.small_prev_ins = edit_diff.small_prev_ins.replace("****", "") + edit_diff.small_prev_ins = edit_diff.small_prev_ins.replace("****", "").replace("____", "") logger.debug("Changed content: {}".format(edit_diff.small_prev_ins)) if edit_diff.small_prev_del and not ctx.event == "new": embed.add_field(_("Removed"), "{data}".format(data=edit_diff.small_prev_del), inline=True) diff --git a/src/misc.py b/src/misc.py index 512f33f..f02e8cc 100644 --- a/src/misc.py +++ b/src/misc.py @@ -183,15 +183,18 @@ class ContentParser(HTMLParser): self.last_del = self.last_del + data def handle_endtag(self, tagname): - self.current_tag = "" if tagname == "ins": self.current_tag = "tda" elif tagname == "del": self.current_tag = "tdd" + elif tagname == "td": + self.current_tag = "" elif tagname == "tr": if self.last_ins is not None: self.ins_length += 1 - if self.empty and not self.last_ins.isspace() and "**" not in self.last_ins: + if self.empty and not self.last_ins.isspace(): + if "**" not in self.last_ins: + self.last_ins = self.last_ins.replace("**", "__") self.ins_length += 4 self.last_ins = "**" + self.last_ins + "**" self.small_prev_ins = self.small_prev_ins + "\n" + self.last_ins @@ -200,7 +203,9 @@ class ContentParser(HTMLParser): self.last_ins = None if self.last_del is not None: self.del_length += 1 - if self.empty and not self.last_del.isspace() and "~~" not in self.last_del: + if self.empty and not self.last_del.isspace(): + if "~~" not in self.last_del: + self.last_del = self.last_del.replace("~~", "__") self.del_length += 4 self.last_del = "~~" + self.last_del + "~~" self.small_prev_del = self.small_prev_del + "\n" + self.last_del From 02dce0f3aed37d22147273977e178d24a8ab7bdf Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 12 Jun 2021 23:32:13 +0200 Subject: [PATCH 166/173] Fixed a potential crash when author is not assigned --- src/discord/message.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/discord/message.py b/src/discord/message.py index 57a572f..8f4fb16 100644 --- a/src/discord/message.py +++ b/src/discord/message.py @@ -73,7 +73,7 @@ class DiscordMessage: self.embed["color"] = settings["event_appearance"][self.event_type]["color"] else: self.embed["color"] = math.floor(self.embed["color"]) - if not self.embed["author"]["icon_url"] and settings["event_appearance"].get(self.event_type, {"icon": None})["icon"]: + if not self.embed["author"].get("icon_url", None) and settings["event_appearance"].get(self.event_type, {"icon": None})["icon"]: self.embed["author"]["icon_url"] = settings["event_appearance"][self.event_type]["icon"] if len(self.embed["title"]) > 254: self.embed["title"] = self.embed["title"][0:253] + "…" From a69cbecffdd1bc9f618eb02a5a328d5bb694b905 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 20 Jun 2021 02:43:43 +0200 Subject: [PATCH 167/173] Fixed #219 --- extensions/base/abusefilter.py | 8 ++++---- src/discussions.py | 17 +++++++++++++---- src/exceptions.py | 4 ++++ src/rcgcdw.py | 25 +++++++++++++++++++++---- 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/extensions/base/abusefilter.py b/extensions/base/abusefilter.py index 4cd23b1..d54226c 100644 --- a/extensions/base/abusefilter.py +++ b/extensions/base/abusefilter.py @@ -73,7 +73,7 @@ def compact_abuselog(ctx: Context, change: dict): # abusefilter/modify - AbuseFilter filter modification -@formatter.embed(event="abuselog/modify") +@formatter.embed(event="abusefilter/modify") def embed_abuselog_modify(ctx: Context, change: dict): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) @@ -84,7 +84,7 @@ def embed_abuselog_modify(ctx: Context, change: dict): return embed -@formatter.compact(event="abuselog/modify") +@formatter.compact(event="abusefilter/modify") def compact_abuselog_modify(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path( @@ -103,7 +103,7 @@ def compact_abuselog_modify(ctx: Context, change: dict): # abusefilter/create - AbuseFilter filter creation -@formatter.embed(event="abuselog/create") +@formatter.embed(event="abusefilter/create") def embed_abuselog_create(ctx: Context, change: dict): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) @@ -111,7 +111,7 @@ def embed_abuselog_create(ctx: Context, change: dict): embed["title"] = _("Created abuse filter number {number}").format(number=change["logparams"]['newId']) return embed -@formatter.compact(event="abuselog/create") +@formatter.compact(event="abusefilter/create") def compact_abuselog_create(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) link = clean_link( diff --git a/src/discussions.py b/src/discussions.py index ed63331..6ef5094 100644 --- a/src/discussions.py +++ b/src/discussions.py @@ -16,20 +16,21 @@ # along with RcGcDw. If not, see . import logging, schedule, requests -from typing import Dict, Any +from typing import Dict, Any, Optional from src.configloader import settings #from src.discussion_formatters import embed_formatter, compact_formatter from src.misc import datafile, prepare_paths, run_hooks from src.discord.queue import messagequeue, send_to_discord -from src.discord.message import DiscordMessageMetadata +from src.discord.message import DiscordMessageMetadata, DiscordMessage from src.session import session -from src.exceptions import ArticleCommentError +from src.exceptions import ArticleCommentError, NoFormatter from src.api.util import default_message from src.api.context import Context from src.api.hooks import formatter_hooks, pre_hooks, post_hooks + # Create a custom logger discussion_logger = logging.getLogger("rcgcdw.disc") @@ -122,7 +123,15 @@ def parse_discussion_post(post, comment_pages): event_type = f"discussion/{post_type.lower()}" context.set_comment_page(comment_page) run_hooks(pre_hooks, context, post) - discord_message = default_message(event_type, formatter_hooks)(context, post) + try: + discord_message = default_message(event_type, formatter_hooks)(context, post) + except NoFormatter: + return + except: + if settings.get("error_tolerance", 1) > 0: + discord_message: Optional[DiscordMessage] = None # It's handled by send_to_discord, we still want other code to run + else: + raise metadata = DiscordMessageMetadata("POST") run_hooks(post_hooks, discord_message, metadata, context, post) send_to_discord(discord_message, metadata) diff --git a/src/exceptions.py b/src/exceptions.py index 6f4ac72..c4e84f2 100644 --- a/src/exceptions.py +++ b/src/exceptions.py @@ -32,6 +32,10 @@ class ServerError(Exception): """Exception for when a request fails because of Server error""" pass +class NoFormatter(Exception): + """Exception to throw when there are no formatters""" + pass + class ClientError(Exception): """Exception for when a request failes because of Client error""" diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 26001f2..612fc95 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -33,7 +33,7 @@ from src.misc import add_to_dict, datafile, WIKI_API_PATH, LinkParser, run_hooks from src.api.util import create_article_path, default_message from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata -from src.exceptions import MWError, ServerError, MediaWikiError, BadRequest, ClientError +from src.exceptions import MWError, ServerError, MediaWikiError, BadRequest, ClientError, NoFormatter from src.i18n import rcgcdw from src.wiki import Wiki @@ -75,7 +75,7 @@ if settings["limitrefetch"] != -1 and os.path.exists("lastchange.txt") is True: def no_formatter(ctx: Context, change: dict) -> None: logger.warning(f"There is no formatter specified for {ctx.event}! Ignoring event.") - return + raise NoFormatter formatter_hooks["no_formatter"] = no_formatter @@ -205,7 +205,16 @@ def rc_processor(change, changed_categories): run_hooks(pre_hooks, context, change) if ("actionhidden" in change or "suppressed" in change) and "suppressed" not in settings["ignored"]: # if event is hidden using suppression context.event = "suppressed" - discord_message: Optional[DiscordMessage] = default_message("suppressed", formatter_hooks)(context, change) + try: + discord_message: Optional[DiscordMessage] = default_message("suppressed", formatter_hooks)(context, change) + except NoFormatter: + return + except: + if settings.get("error_tolerance", 1) > 0: + discord_message: Optional[ + DiscordMessage] = None # It's handled by send_to_discord, we still want other code to run + else: + raise else: if "commenthidden" not in change: LinkParser.feed(change.get("parsedcomment", "")) @@ -267,7 +276,15 @@ def abuselog_processing(entry): context = Context(settings["appearance"]["mode"], settings["webhookURL"], client) run_hooks(pre_hooks, context, entry) context.event = action - discord_message: Optional[DiscordMessage] = default_message(action, formatter_hooks)(context, entry) + try: + discord_message: Optional[DiscordMessage] = default_message(action, formatter_hooks)(context, entry) + except NoFormatter: + return + except: + if settings.get("error_tolerance", 1) > 0: + discord_message: Optional[DiscordMessage] = None # It's handled by send_to_discord, we still want other code to run + else: + raise metadata = DiscordMessageMetadata("POST") run_hooks(post_hooks, discord_message, metadata, context, entry) discord_message.finish_embed() From 40e87ab5a609279ed644301ba4d6b47701508713 Mon Sep 17 00:00:00 2001 From: Frisk Date: Thu, 8 Jul 2021 11:44:13 +0200 Subject: [PATCH 168/173] Bump version --- src/configloader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configloader.py b/src/configloader.py index 933bba6..002c890 100644 --- a/src/configloader.py +++ b/src/configloader.py @@ -28,7 +28,7 @@ def load_settings(): if settings["limitrefetch"] < settings["limit"] and settings["limitrefetch"] != -1: settings["limitrefetch"] = settings["limit"] if "user-agent" in settings["header"]: - settings["header"]["user-agent"] = settings["header"]["user-agent"].format(version="1.13.1.3") # set the version in the useragent + settings["header"]["user-agent"] = settings["header"]["user-agent"].format(version="1.14") # set the version in the useragent except FileNotFoundError: logging.critical("No config file could be found. Please make sure settings.json is in the directory.") sys.exit(1) From 92d0d5d007a502bb90712f0e6cf17f454d2adee5 Mon Sep 17 00:00:00 2001 From: MarkusRost <2701034-MarkusRost@users.noreply.gitlab.com> Date: Thu, 8 Jul 2021 10:35:26 +0000 Subject: [PATCH 169/173] Change "Removed" to "~~hidden~~" Matches formatters then edit already stats partially hidden, no need to specifically state that the info got removed. close #222 --- src/discord/redaction.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/discord/redaction.py b/src/discord/redaction.py index 6fa86ba..b7aac13 100644 --- a/src/discord/redaction.py +++ b/src/discord/redaction.py @@ -74,15 +74,15 @@ def redact_messages(ids: list, entry_type: int, to_censor: dict): logger.error("Couldn't find entry in the database for RevDel to censor information. This is probably because the script has been recently restarted or cache cleared.") return if "user" in to_censor and "url" in new_embed["author"]: - new_embed["author"]["name"] = _("Removed") + new_embed["author"]["name"] = _("hidden") new_embed["author"].pop("url") if "action" in to_censor and "url" in new_embed: - new_embed["title"] = _("Removed") + new_embed["title"] = _("~~hidden~~") new_embed.pop("url") if "content" in to_censor and "fields" in new_embed: new_embed.pop("fields") if "comment" in to_censor: - new_embed["description"] = _("Removed") + new_embed["description"] = _("~~hidden~~") message["embeds"][0] = new_embed db_cursor.execute("UPDATE messages SET content = ? WHERE message_id = ?;", (json.dumps(message), row[1],)) db_connection.commit() From 19181d01a9b473a908a1e18e3c8046062beff51d Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 11 Jul 2021 12:33:17 +0000 Subject: [PATCH 170/173] Translated using Weblate (Japanese) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 17.4% (51 of 292 strings) Translated using Weblate (Turkish) Currently translated at 9.9% (29 of 292 strings) Translated using Weblate (Russian) Currently translated at 100.0% (292 of 292 strings) Translated using Weblate (Russian) Currently translated at 100.0% (292 of 292 strings) Translated using Weblate (Portuguese (Brazil) (pt-br)) Currently translated at 100.0% (292 of 292 strings) Translated using Weblate (Polish) Currently translated at 85.2% (249 of 292 strings) Translated using Weblate (Hindi) Currently translated at 100.0% (292 of 292 strings) Translated using Weblate (Spanish) Currently translated at 48.6% (142 of 292 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (16 of 16 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (1 of 1 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (1 of 1 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (1 of 1 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (16 of 16 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (1 of 1 strings) Translated using Weblate (Hindi) Currently translated at 100.0% (20 of 20 strings) Co-authored-by: Alex Great Co-authored-by: Creeper Co-authored-by: Doğukan Karakaş Co-authored-by: Eduaddad Co-authored-by: Frisk The Evil Goat Overlord Co-authored-by: Philo04 Co-authored-by: Tamara Carvallo Co-authored-by: Weblate Co-authored-by: しぃ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/es/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/hi/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/ja/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/pl/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/pt-br/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/ru/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/formatters/tr/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/main/hi/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/main/ja/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/main/tr/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/misc/ja/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/misc/tr/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/redaction/ja/ Translate-URL: https://translate.wikibot.de/projects/rcgcdw/redaction/tr/ Translation: RcGcDw/formatters Translation: RcGcDw/misc Translation: RcGcDw/rcgcdw Translation: RcGcDw/redaction --- locale/es/LC_MESSAGES/formatters.mo | Bin 0 -> 18108 bytes locale/es/LC_MESSAGES/formatters.po | 62 ++---- locale/hi/LC_MESSAGES/formatters.mo | Bin 0 -> 51176 bytes locale/hi/LC_MESSAGES/formatters.po | 268 +++++++++++-------------- locale/hi/LC_MESSAGES/rcgcdw.mo | Bin 3388 -> 2325 bytes locale/hi/LC_MESSAGES/rcgcdw.po | 12 +- locale/ja/LC_MESSAGES/formatters.mo | Bin 452 -> 8105 bytes locale/ja/LC_MESSAGES/formatters.po | 106 ++++++---- locale/ja/LC_MESSAGES/misc.mo | Bin 0 -> 1278 bytes locale/ja/LC_MESSAGES/misc.po | 41 ++-- locale/ja/LC_MESSAGES/rcgcdw.mo | Bin 489 -> 521 bytes locale/ja/LC_MESSAGES/rcgcdw.po | 10 +- locale/ja/LC_MESSAGES/redaction.mo | Bin 494 -> 492 bytes locale/ja/LC_MESSAGES/redaction.po | 11 +- locale/pl/LC_MESSAGES/formatters.mo | Bin 32781 -> 33133 bytes locale/pl/LC_MESSAGES/formatters.po | 14 +- locale/pt-br/LC_MESSAGES/formatters.mo | Bin 35452 -> 38806 bytes locale/pt-br/LC_MESSAGES/formatters.po | 97 ++++----- locale/ru/LC_MESSAGES/formatters.mo | Bin 47997 -> 48556 bytes locale/ru/LC_MESSAGES/formatters.po | 26 ++- locale/tr/LC_MESSAGES/formatters.mo | Bin 455 -> 4048 bytes locale/tr/LC_MESSAGES/formatters.po | 64 +++--- locale/tr/LC_MESSAGES/misc.mo | Bin 0 -> 1232 bytes locale/tr/LC_MESSAGES/misc.po | 41 ++-- locale/tr/LC_MESSAGES/rcgcdw.mo | Bin 3324 -> 525 bytes locale/tr/LC_MESSAGES/rcgcdw.po | 8 +- locale/tr/LC_MESSAGES/redaction.mo | Bin 496 -> 502 bytes locale/tr/LC_MESSAGES/redaction.po | 12 +- 28 files changed, 390 insertions(+), 382 deletions(-) create mode 100644 locale/es/LC_MESSAGES/formatters.mo create mode 100644 locale/hi/LC_MESSAGES/formatters.mo create mode 100644 locale/ja/LC_MESSAGES/misc.mo create mode 100644 locale/tr/LC_MESSAGES/misc.mo diff --git a/locale/es/LC_MESSAGES/formatters.mo b/locale/es/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..ddf39e76351faf7f45224751d51062a1752f78b7 GIT binary patch literal 18108 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, YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: 2021-01-22 13:58+0000\n" +"PO-Revision-Date: 2021-07-11 12:33+0000\n" "Last-Translator: Tamara Carvallo \n" "Language-Team: Spanish \n" +"formatters/es/>\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6.2\n" #: src/api/util.py:61 src/api/util.py:66 -#, fuzzy msgid "__Only whitespace__" -msgstr "" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" -"__Sólo espacios en blanco__\n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"__Solo espacios en blanco__" +msgstr "__Sólo espacios en blanco__" #: src/api/util.py:71 msgid "Removed" @@ -58,13 +44,8 @@ msgid "Tags" msgstr "Etiquetas" #: src/api/util.py:162 -#, fuzzy msgid "**Added**: " -msgstr "" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" -"**Añadió**: \n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"**Agregó**: " +msgstr "**Agregó**: " #: src/api/util.py:163 msgid " and {} more\n" @@ -79,13 +60,8 @@ msgid " and {} more" msgstr " y {} más" #: src/api/util.py:168 -#, fuzzy msgid "Changed categories" -msgstr "" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" -"Cambió de categorías\n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"Cambio las categorías" +msgstr "Cambio las categorías" #: extensions/base/cargo.py:37 #, python-brace-format @@ -118,13 +94,9 @@ msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) reemplazó la tabla Cargo \"{table}\"" #: extensions/base/cargo.py:105 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted the Cargo table \"{table}\"" -msgstr "" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" -"Eliminó la tabla Cargo \"{table}\"\n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"Eliminó la tabla Cargo\"{table}\"" +msgstr "Eliminó la tabla Cargo \"{table}\"" #: extensions/base/cargo.py:112 #, python-brace-format @@ -134,33 +106,37 @@ msgstr "[{author}]({author_url}) eliminó la tabla Cargo \"{table}\"" #: extensions/base/translate.py:41 #, python-brace-format msgid "Marked \"{article}\" for translation" -msgstr "" +msgstr "Marcó \"{article}\" para traducir" #: extensions/base/translate.py:55 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) marked [{article}]({article_url}) for " "translation{comment}" -msgstr "[{author}]({author_url}) restauró [{article}]({article_url}){comment}" +msgstr "" +"[{author}]({author_url}) marcó [{article}]({article_url}) para " +"traducción{comment}" #: extensions/base/translate.py:70 #, python-brace-format msgid "Removed \"{article}\" from the translation system" -msgstr "" +msgstr "Eliminó \"{article}\" del sistema de traducción" #: extensions/base/translate.py:80 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) removed [{article}]({article_url}) from the " "translation system{comment}" msgstr "" -"[{author}]({author_url}) importó [{article}]({article_url}) con {count} " -"revisión{comment}" +"[{author}]({author_url}) eliminó [{article}]({article_url}) del sistema de " +"traducción{comment}" #: extensions/base/translate.py:95 #, python-brace-format msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" msgstr "" +"Completó el traslado de las páginas de traducción de \"{article}\" a \"" +"{target}\"" #: extensions/base/translate.py:106 #, fuzzy, python-brace-format diff --git a/locale/hi/LC_MESSAGES/formatters.mo b/locale/hi/LC_MESSAGES/formatters.mo new file mode 100644 index 0000000000000000000000000000000000000000..91eeab4aca86fab7d1e336c8eb5d6138179f8d65 GIT binary patch literal 51176 zcmds=37lM2mH!_KB9U!^3b^1S2qX=i03yZ+NXP<#Y=*EIpi}9pbjoyBHC5Gw*tRyH z5Qqq<2nZOEZa~%yP9P|Xr~~dYgS&&aGvkcT{B=fAa2S{Qo_p?nOVxW-uev+J=U<=P z{N8exbI(27z3;x)KbgAowI08Nck;Z~f%A9syem2Gohny7@0R^MZ+GxkkbmBN_WTL( zZ#e&sJ^wdw56+(f_Xc;`-}7DpP6c-X4*;iwZv^)Nmw+_o_-jz=o$*?2e-0@9=>{p{^@Bp+ z72v_()u7b-ASm^G8JR6kuo&bgJr@>c)&w)pQd%nT*=7MuU zq4yF{=(rY?{(QmW55YHb{##J^yRWZw9tujm3&7c67kD6eJ$Nkm8Bpkb4%`b4fg&f5fiDNY z3rhcg0!sbA19t{rOJ%}OAC&70L8-rw|H$H90}5S#2hwHlDNy+F3@H8G9cD=X4gsZ} zZtxWFa&Qs&9gwWv0o*(SJP{N+s^ALna!};&pFqjC3?eAvRY4h->p|(~*FmA@pY8Qs zV8&sb&ju;#2nz5Wa+_3e)miTo}GMSso)r61j(lpC`5FShruvUmfy zEB9{$h5ozk^~XRd|8=kv{5kj*a32O`DtIa=^qmJny7zui`gu1f^?e%@`Tag9a0e%%c5nObX=luitLGT#xyf>*FUJHu-`vuqy9*Z%O_HF^! zfK%V>dCS28a1?wTlzhEZax3^GDD6}j{Aa=6f_GX`Bpz zMNsPhDR>Ha#M@Mk2En&;{%P=Z@EPz7a1lx;{l5j2`_F^NgL4r2cYqr~Y5(h>w096U z{{Wr`O1o!LNbY|E%z@8>i@~!_P&!9JIe!Ke`c9aubcUK&-(_L2N?qI$YnZSeW29)c~JCXZw67u`3z95kAS`4v*49rHy0t@ z`we&kI0s^6{02ce|12ow{s`^^E~W9;gKNMk;IPHb;7*)>416hgy}f=D_;Swgu(%c6 zjq``Wmw{gb#h!l++!y>M_-b$`IxY3@2THvMfqQ}ngZqI;gHrDjQ1tx_a98jga1SsK z?gduB{lSYtsqZGx2k!t62fqRy2>u?N4epCjUqOS*!Pjv9V}x7EKMP8}y%Ex5z@tE^ zuL!;Ztbwz@Vek-eD=74QA6yOo6zl{~Kv?z#OW>=(OTii7P2dsW~H$mag-YCmz z&<9TeFS6&~0B3UEc^+d5o&$C7hZd{F3l9y| zRL<`KWgH#_CEu^X{lJAKVqLHcl=`0pVVyUhN{7HZKt#ejm`tm|VNk~7XCR{O9gR@H z0`Cg&9pG=kkAm|m*dFi);BMe*D&HM^7uX4I0DlUOf-l|4^FB~hxx0Ko?d;Patn!Y& zK>K+!h$wkK2C33}D@>5~?g0@Q@6Vu&%Xtifmb z1b7K3rT+)MPv!o7;LV&r38DgC zX&5@-kpV=QdErWtYFj7lPM-u--fI z0p;8GK%r~Pr#0?6@bBuVz7Le~+4W)V z-v>de@b-XsM9=#oScTqGsa*K{=p$<94*i_+>k&}+yz=wfk1v8loG*HmxfS>X_%m?* z7t~%ac}(+v4#ebohka4U`QzXfoc{@&1#bG1&hNH^2XOwM;A_DtU)H$i5O6onJHZ3N zw}AVAXM_8JeHJeTU&Z+rumju%iaw5kM}brSUhUBW@MWBL+4Hra)ISVLeOG`}!P~&S zzz4x;;N##-@R#6haKFcuj(313ab5s7g7<<8z(b!8 z1rb{lFD|v$5HmAB^1-sbhRB=WhxlK3D)MeR1?(%w{GL`YF~%6j%k8=F{{N9W?YWH2 zusyyEJlr0?1$--MfV4AdlqA15!iNJaFD}+g!T%x$yOYi%l}MR?i{5j&wFjY?Az5!M!P@-*G&X z^m2~ncRWe_)i1$+Bb`iIMH1WjF7S_}t4KT9{2Y3_kiJPef%JyR^;dIz8rNo!P)~0! zd#}dvHqzHg@~e_QNm?W){LUc#6X_46kCEi}ddmKb9(w-@4wA00=Pw6OCB2S3$AaG_ zeSqYCFX7-B(rzTtmHDK%lfFm#D(T&%OGvv~`cMV)!xVb|NV=YM5NSPW5AysP+?8|^ z=_1nJq~DPKnMS)+~<2QhNkbXq^BI$Y36Qp@0 z`H2ts8$C4ZwL|v!LGTOq*ug0r97KMxS3f58kam;uq!Er^3CiyWq}6i3@57`sNq0pxkZRfzZ{ron^D@h+GT}_hTV$%Mk zHKa#K?)M!I&ax-3rF@0s=Sa&)8}0Sia6QNI|B`m*_HOXYgKoY+%abVt1ib zEzI!;hdh7!K&e*j^#}90TA?df%6HX@eTAVJp1-O)SMAQ_i>01(J)awXDc4u1_UF0_ z)j7Ui865Ka%9TRwWQymPOLcj<(4Xru<)$w^aE9+qU)5hJTu>}*ICuJBZ?Uv~XomkD zf7L)KU*>{V%UsEWQ{Jvbi;LYvsF2hZK)nKktD|Yu5hUkqw>>8-_(#s7L=&lst zb>3gIQF0E{)|D$JqdBtqgx~$SYIQ@ok~f8_1uCXQp)XhL9qcam^>JZn5}Qn{Gnu$Z zC!z$j%3r?75rMR$DcOH|3lL}BOLla0_?-E%0|Cd_9b7jR4Y_A6xSCiv8I=?6G75Jj~-X; z38e;el4Z!KLM19RgZ6A_W<%!S3UXNO&6%c*DnO%?k!eCwuBWF`=%E)%0=JF)NheBv zE+b!P4F;24#W3KjQ4D`=Z?326IVCaTju_X_Z&glF+qLE1-tq>y6jS!ZLc+x`zteA* zb#RU9T$gC$kUwawiZ^ea=p&*pH~ng%Ce2r=rsBs71Ub9mNl&>_EL4L_hBJO&p>Iv0 zQe9W<*W$HYrKf;KxF-55@C(dN{-%gj}Q5! zTG;=12C<`6=_UW-H2VQT@e+f%J~2~6m@zF1Dd}a6j<}KX=JghGSU`(OA6JhjOUryrJ!)m??)S?+PXS&{`mvNcPHIgLxr%T7t`XG z21GvnK}F=!(qy%>{=CjM*5!^eG+s}5#~7w`pAj@D5!yAgVbyg7vON9+X1SyoLmPypC9P!*V@GO&M#I`lJW*?1JpIiReVkb9l|t3bi2+#F2LV-@}C*0ro2qbmB31u zt(oSzJWaT5vj``u5*^kFZS=N^w((eja|rL(Nrb(TM0m+K>4F$jEKQ}13ikOM*1>Yb z-t2vA2-uw=R#mEOCg@+{{0)Ayx0BLa9J#NN1xm zyQr_fTrn42x6x*-3z2Tj{drk4Rx{^x4ywv9b&F}u+(bjk#f7ysB&4abH0DW=xW&aj zqj)YH(XcBj6G%ZAtyG6rdy92KB}O%B4wvLAGS7+@6@73LBxYhs0au(4A`E{W!Mlm# zWC#N>6st#Ioi9`g+?JT=tJ_A1#={SmCBBd>b*_NCMZylDp@}(<mvUZg~p5N6NpIe7Gj!~GcYo+Drh-YSE4YBiG}oNX#zqGwm8sPBIeh` zy;Lm=aMIO?@J6KDJFS+huJZ@_d&{}JcbZBy-q*x<1WGbI-b#s>%q=s4!GQK5WO)|0 ztirMarbl*R3%=Tgl$qg*)5>)yIukWQAv0sIdMjnl<(*!#s|fY01E-hrDWUr5rS&CZ za*FEugP9RTo!99l7FzH|Ch`(5;GM2LR1g|`WYuqESdhUo@XTDLB(tJowK{;YJX2;0 z=?i+Xsmm(D7Q>ky%NB{XSh5OPl3tNnsH$JiT2;56Why76wAJ^Qxo@V@us^WRs%_4; zD>mtYY1j!%Xd;@db~4zh_98=9-QceplyQGAMnvIpNU!qFW30$UzCQ4UzsEvli`J^vjH5rw4>WwCY5j3H}+_}?_9h66LYiIS(8mz73ZhldI==d2- zMHzotgjg!8g6&r*ayQE^BzMU|@*MS68#o+#yKCvVSeqhf>e~>4=pwYEvT3Eq&uC3$ zj>ovVFz>2-yFFi&KhCjN8DNNU(Z0)_v5g90>PA;4xrIYa9%S-khn( zU>Jq?h6g|~3vZ1~D@Nw)p7%_EBW||Xq3gpP=AlN0KDlzM28E9@0}-tEPU*7X%14b{ z(5z9xAkJ`4hi0~pSz6cXLXAjl(N49pKwx(I_#O4@s~uuDI?QsgF6VRv{mH_HVA+*A z%%o?iz4Bt{#@~G82~hJ1vt8v(Ra7?u!76P0;hR5Ec^QZ8a3nRe9kIPDEUxJ!u2pz%TxCWOs6M>lE_*@ z@)CXqmh=SA1? zH(^z<#1NE8iEY!(PK&CX`H9$@CUqt5bZ8<`W)0S@XS4Ak=th$^+}4P3MWlVYgQ5vZ zbsH)&P}J9K%SDrx%pQzYx(Nfdk#2&H4b`wsl&cv-XtHNzLJE#@231{5R zwA`-4uqQv)ll6AHk7sfw#+fQ~Y8}z$^bkU}E|?8F6O`SgJwB^+p_4%sE0ul0Ql0=e zYzmqXeP&}HrXX-dc`hzV79F~D&3>rkaKB%-HJV*8&|_b! zV#AZ!Ji=CgS=daQeRcSqu7r8(46nlQ@e(30eWl9aK(Kvjg4;@XBQn_TG_H7aAlwZ# zzVc>^l<~nLPqGl+o?PiJGAd};T-8ESySkQ@dN<0%xu#3fU0q&R*Qzs+Qoq>8Vmzc6 z)R>jKvf;8nSF4nJ&7n#(Zws#}*Ss|Y_|1WC_KJJ?+(t=NPot-DB{-;hvgX4DiNW>F zwJ!S>k3AbG71^*Xw~K7-F=ID*26=1d+m*2&Ue4UH(ooDDK#yS4U#ZtcLPhZh} zQuq7~Gp4L4$WH&xCDoo{zVpO^o@(bx`Y~nsvd$Iu6}Qg$ydE&eKYPL46`f0#bG^bxl0!K$1YehchTY#=FXqLV!>&r z9Zyz$^{;bfA=l^VICfpF)?b}7YnF>23NvMZ5V)E7!YtS(^jBw9x_i3w8)hLkyaUVr z!|JSc#aUsMbJ!$5Wyzu?3&L(5IrE4q^YrD!&XpVc=|HV;VQm&(u~>SWj9CTidfe$N z7k17L^GQF}7Al?cl8C&$J;$HDrdXS@yq7mddOH`=I`40n`ps$exTD_Y>)~-F|9Jn% zw@o>#)4ok1j5xEfhPPG={?Rj!nR(O{Z_3!n17jnf9~-%BY-Ib`DF0u~0TLtck=MOJ z?vIU(jE!6?FOmaeqnk{TE6p(lZyg(X)D*vtx68*yJ~}qC72w95z@4V<`&@~;%qb0S zrUbX|BD1`LZi`9l!6C1ow_lBImUb=~8+mAK6e@42Z*4kc>8tBPz$hKxYBFv!4B`I= zOo?mB7KBprQhP&gvW`F_8L2>6NcQ+E?+r!Zcya^03~yOE`iZg8%MB3_zeQe+9~-&J zPz0wRfkyk1{Mg7nhHR)MJL5w3TOnur*vRdU-}k$>=K~U{i#*9CA08XsWD1z-7@|#N zO%M~V-Z?fx?qMB8DW|XCoBl$_RwEPi6v==-cq6THPXFbclj{t@FzzB#$O?qWA~zqV z=Va!Hu29GQdU9QG6d~2-)m!e({;`p(=mh0;WK>4=SUI(Yd-s@rKvH7$-q^?o%;1s% z1|ue0n#DM&v4iwM#zuP&XQW%rn!E>QiVp% z0z-quK1!~u4TX%k5K~QcqB~%R3#1s`x(vcV; z5JrOt&UL(nVRooP8ltlqK)h5bkg#F2!Q5%A(yOyWoQu&js*2pHwo}nC9ix5B z3(UgYkg3Vk8?!ZBwuFw2j(BY}AlZ$0B5znfH4L|RI$O&yi{*;>Fb2&%b)LpOJ8-Zv zFr&lf7^aJ53$BWBrL1nykdkUQr1uD=vBo12>)-{W6cZkD?_eobmRw^5M?|v0@+PWU z%#BeBwut`TZ8Qr%BjWC54I)C$#5iv}ukg$AT;&egRh?A-6odiJgjhcoBT&sZ;Z8u& zj&3Oa3Pjk47+L0WpzZoHhL==QSX*CG`e_UR1_)hLx!WFXNj$j35S~~$tMe4O&Dty% z30m%AF>HS7aAqKwzXT&3lkfTw3hO{A?N>jPBIyAga! zNQL!knb5$s&c4x0F?3XbXwe!9mslwoTu&RcTqwTRDC$G%#vAzLMazUQUGhFeqlt-f zN@`X|G-`%|5dTpwHPp{FN1Y6$bmTg&U2jGme})bD2p!d;QYlUhm#AZnDWhI7FwN_Y zDMI+#8|AF;z`r12+l+s*BSnqvH0L!NI@3zO$8Y+ui(r zObpww83g22LVe3rfD1tsAifqMv>`!E2P`+aYptEiXC!x{&`?|Y@Yq2>v}q3MfV^;c zM0Y5P62MOtf`F>1)EYs&%)}-7*%!*mj1#~Q#GIto7=&Em+|IH>XDcF>^=%Ww;S4WD zUF^G{WI(Z1f|1kDyOj^aR*@`Ngagqb)9H%{e-O~5S7dr^vNp?u^Ohd!;Hi{I3@>cZ z&(t&!XxO0^m%TC-(D@a6S z+Ed4=`pigGJaSI(-fgrNwW*U^48nKRyvh^43eR+whJzC6kA%Stt2~Tib-Echn`)ZW zNW}={)=uM29vvHvEf#PeBE;z!w=4%-s`ow;aWfsk&)&|F$TtvUbj)U06<713QMH&G zDCK`qY!l8%L)iRbZ8BCHcS6~MGU$&^Leld_2sfXNprRyd%?iH09Ab(Q6FeCe~E5_}jU>tP@k~ z1jFvpOVu7D+M}W=?eVmw{x;#138c0;3lh^Tq=0isk)goCATwH#9&-bNx5NUcmUMeY zxH4L-mbF2blg=henBMzHdGkO@92L144Oxn5*}Uf%62>50f^GEgzOVw!-kn@C7e*vb z(&?LcNYvF$7Q{r;qVPH){;+rO!#A7iw`opGB28+0PHjCgTB0;Y+l3z56e74m?USW} zjcuR|c3SGx;)PK~Iys)01?5YOSsJH@S+(5;zt)nat9k}jA{kEF1F7Mf6%94*8j8lP z`y^HEET}cp>L-jLZm)qhBv7n;hRWMC_gQOg(9O*fCfkohLYW;}nY?o*E8a4LFeeyP zh6UvlWw2wn2iZs z2<<-%!DOnli$_HsPZ7*F;Eacag_z^v=p z5%1%z$QsyyNosPM+XydS$%Mb@M7+Sw?=T*u*(q2ai&f(m9#OLa9<`FnX{@glH;znLAONy?ltoFkoiAcEZZFaMjH9-q6ecqEVPS7h`Vs|I8kgd2hf!| zU0{e~*gDO->)g-m{1fNLwTCbd_o-8_=r@hn}OoDU+JB^3o zIjw4wvJS(zQV5eLmeF;{Vx}@Gi zd#ncD#0PfI|iMf@>NDj+(Yb&bdS5*cK_E#3U1jr=w@X>Q2&EN2u%~ zj2e}N1!w~+#$}y7vMMK2*cf#Q_Y)}HX2?dOup`LKU9vGKTx@VxxkTJ_hiak*`Jvs> zD)=8-ZX@T_rvFqX;>I~bh`7Lh)$Hp~J@)~#;Nz6davkm)XV3V;BOOH%U#bZ{ix$+A zXqC|-IAzyJsVrnu^pQrRl@2Y4)fmdcDMYMZ)I)iektbW=V(K(7HQ-3|e3Xy5DC!pz za21p&HI_*Ad_n7$*KsS_%oR>*JBCex_h`OEYDuP(qPp}+cnzfML;5mYHdluT(Uj`K z7R+YYrmdL^i821zh<$Et`iIUT4{PdI51ZFY0b}0GrdQtF_QUO0iRdVrEkOOwMVdcXPu*{{t+K<=8EY}l4~~+dqZE*7%V6M6Awt(qZzE{=Z^XW zWPpG1nVr{YoX~d1R8e;85tYboY9uf==1u~I&XDK>w+G3F@q;JmHXXZ__8>Fn@bpr$ zU9gS2r+3;x>I{XL6YH?*>*bDlJe>AM4);yWYN;dh5TqpTeF~<>1R!Fb!!VbMs9D@78ZR#kn0XxI%T>AO zdS}OX0n4IQS{{co8qaD3nif7DI4gGH2pNFz0^Z5Y z$_k+yfYIUfx4NucT9e2Aekr>Wd zREXcqQ-c)q(N5F$d)oRZ+2pO0@N3$JBRW%x8!CxH&Db;Qj34R}tnHYQNAcU`fOXYI zWFjBd4M;$IVKR+9OwVJs#mKJ;t7QvnY}#l3-u5@N18K)ggnPr9y{!?Dh_a|KTh)M2 zNXBs>6YVb~W*Ea(!Yo5~uaQTbQNSTH7tqgc8#{QJ`Iw{q5O-8Z!%#E>E#u}}-9A&? zkdUpB)2Oj4vf{-h9+K*j()0Jxh_M%(F@XrdW&SD457yMK;~WUL*o=G= zvQ|hPq!?{+45K%Q6BS8|FZg69Hf9FoP5Jt-OSJk}JA`7ag&aErY9&mO@3K?Y1z>O} z_6_WY&q}x3jE&7`!ip#@ZPMW&R^{?GblGx|(9U%y`Lpe&T&VjQ6yL2rxO#03#@Cy<07i-m+akb-Jmtcr zFjspr)rlXQk9xh9{TR2*rIQ*L(D+y9+oEmq1=R@r9H#)oDc3YXR(jK$RAcJK)Z?<14nvhi+Nwo0NtICLCU!uuU~Y5h=+UA}17bQ+U6 zY$o<}xB2RKdzLKgGE1!1?9Qy+KtLwrbPu<%gI}gFGqo&VFBDITZH-!dw*VXrruApx zejJ^1xe!bou}t#mTguBAEzM=tVS*C7V5gcPD?#$u%D9B=aZ~VFSu^8CrZa8#&Mp?s zzu#`CHT{Ujgz?4Y3>*t1bt-gY(GZ&3u}krsL6;=lu*^*-N>;qHP9PA@!PFpr(60NolvDc! zs#f!YL@fL#&p}6u&fJEBwV3l^y`P+)FO{sKD^2 zLyY}H5wSMWxo*(^h{w)AU6w_+9pkdCIS;4a^gUcY&O+A?nxa@UnSpsNhxY%g$EuUa zmn^diolD3=K;vK|3)mAHne0tFMYIHH9B#t%2@&8XR#CNYT+MckH^l8mZIYJMF$PWT z5E_-~PpLTioYpteW)0DcfW&Z3Fv+oO_FJ!Zt9&KBod-WJG80$0imfFwk$ns5hSl0{ z3T$q=A!sFTcGk+=g2tlGPeMsE1J?)-3kgf6Uza|3#ZzaT&oiZ}vXWv*US z{2xEDFA#sD4pp@n%Z(J)$I&+M%o0b(Uee4Gk~*hJ`j`$Y zn+Px5O~YR-q95#?5qpja88)k5IKud5;p`SFTYi1V?Y zcxfago;`u?j{vptAVn5>WIKmEtz+D&F>x8!{$(iBpoy~@SsAA$`|!5Us8IOA_gdT7 zQxcG7#>n)U-oS%xF@B~8&o;10YuuQtNF*A_0mB`xv zk<;)uwCG9_fdQjivNDT(gnJVCH&dG^Pt(OJ9{Y_?ZCL0EpJy=@wSOin(rCSVx3=84 zccZp&j4sKlu@O6?RWjPfM#OC;EvtmxncRN2M@NqnJ*Gabi!XeTp07QjwpAk$uM zZ7Eq1J=|t2zJAV6>O_*T##@kGD^`9MF^sL}Pm+X-Osftt+iv}?b=^aS$t5C?kz}uB zyAQSDqG)yk8b>2OKhH7%Xi(syhRw0KQ3wjI!o+6pmg=*Oc8JDK(_597`*{QzymJ~n zQ%(AlUpk_q;~XLJ5Nn^+avu8a?1W70)zlX)*+HDI3M$K4Fz7|X^Kn=#_U0fhvd=hF zk!*Gf^KaMI0xhh!)NRZXZPp1q$!Icd#5!P^bq(CU0wSZ9W%fF8y0VxFox(U9Z&rTB zsdml(WS6PbNUU}32rf>Y|50&>h&)(#vnuQU;&Dhe35hSrX6M5;_{wK=^6@vR;;ToMwMmPX#epNsx7U z=$qKOMYuA;E|~gxID8CSt6!uakAJh~BW!dub-#~U=AU5avgoz#Ai@J9vBmQKZ`ie# zI-8}5z-)@~AOB0jU0ufLpfnm>-wmbeP(`DRY9S8z6;8M7Ulla32~)s+>5&5RvapFj z`CtA}SNu;6M!w-fJ!}efDj*9J4|tK=&eDkliqYX7;&{0Q3hI&G#aco#%vHtYSgIz6 zx=;BGQg{T5f-WkxET>#cmed&J z#po^}Ay~4CY0)EDl%$091gzFUD};%qw=q7#qi>>^l3^p)>r@b1L3wvFdKo9O$_j*) z)t}g{Ph75NyP0Wd#m_ACQ#6jA9F@G7$njR~)B2exqe6XDI*Bxxk6*IM%R`aJFY2A95x{o-C za@(O|kmU9J*jiZqj3TIpjM+Z9Kt^l!!>^Z^01v+t`*V?Ggq1>%Qz>CxgICc{fCi&H d9IPc;&!Wa&-k79Y44|uQbU3wSw%uM-@PFg#?{WYD literal 0 HcmV?d00001 diff --git a/locale/hi/LC_MESSAGES/formatters.po b/locale/hi/LC_MESSAGES/formatters.po index 2e0678c..0585be7 100644 --- a/locale/hi/LC_MESSAGES/formatters.po +++ b/locale/hi/LC_MESSAGES/formatters.po @@ -3,30 +3,21 @@ # This file is distributed under the same license as the RcGcDw package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: 2020-12-30 13:26+0000\n" +"PO-Revision-Date: 2021-07-11 12:33+0000\n" "Last-Translator: Creeper \n" "Language-Team: Hindi \n" +"formatters/hi/>\n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"#-#-#-#-# discussion_formatters.po (RcGcDw) #-#-#-#-#\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.2.1\n" -"#-#-#-#-# rc_formatters.po (RcGcDw) #-#-#-#-#\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6.2\n" #: src/api/util.py:61 src/api/util.py:66 msgid "__Only whitespace__" @@ -47,7 +38,6 @@ msgid "Unregistered user" msgstr "अनरेजिसटर्ड सदस्य" #: src/api/util.py:160 -#, fuzzy msgctxt "recent changes Tags" msgid "Tags" msgstr "टैग" @@ -416,13 +406,11 @@ msgid "Created a quiz \"{title}\"" msgstr "एक क्विज़ \"{title}\" बनाया" #: extensions/base/discussions.py:193 extensions/base/discussions.py:195 -#, fuzzy msgctxt "Fandom discussions Tags/Forums" msgid "Tags" msgstr "टैग" #: extensions/base/discussions.py:193 -#, fuzzy msgctxt "Fandom discussions amount of Tags/Forums" msgid "{} tags" msgstr "{} टैग" @@ -567,15 +555,14 @@ msgid "[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* को डिलीट किया{comment}" #: extensions/base/managewiki.py:80 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted a \"{group}\" user group" -msgstr "\"{usergroup_name}\" यूज़रग्रुप को मॉडिफाइ किया गया" +msgstr "\"{group}\" यूज़रग्रुप को हटाया गया" #: extensions/base/managewiki.py:89 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) deleted a usergroup *{group}*{comment}" -msgstr "" -"[{author}]({author_url}) ने यूज़र ग्रुप *{group_name}* को मॉडिफाइ किया{comment}" +msgstr "[{author}]({author_url}) ने यूज़र ग्रुप *{group}* को हटाया{comment}" #: extensions/base/managewiki.py:103 #, python-brace-format @@ -588,22 +575,22 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}" msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* के लॉक किया{comment}" #: extensions/base/managewiki.py:124 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Modified \"{namespace_name}\" namespace" -msgstr "\"{namespace_name}\" नेमस्पेस को मॉडिफाइ किया गया" +msgstr "\"{namespace_name}\" नेमस्पेस को मॉडिफाई किया गया" #: extensions/base/managewiki.py:126 extensions/base/managewiki.py:149 msgid "Wiki" msgstr "विकी" #: extensions/base/managewiki.py:134 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) modified namespace *{namespace_name}* on " "*{wiki_name}*{comment}" msgstr "" -"[{author}]({author_url}) ने *{wiki_name}* पर एक नेमस्पेस *{namespace_name}* को " -"मॉडिफाइ किया{comment}" +"[{author}]({author_url}) ने *{wiki_name}* पर नेमस्पेस *{namespace_name}* को " +"मॉडिफाई किया{comment}" #: extensions/base/managewiki.py:147 #, python-brace-format @@ -631,14 +618,14 @@ msgstr "" "[{author}]({author_url}) ने यूज़र ग्रुप *{group_name}* को मॉडिफाइ किया{comment}" #: extensions/base/managewiki.py:195 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Undeleted a \"{wiki}\" wiki" -msgstr "\"{wiki}\" विकी को डिलीट किया गया" +msgstr "\"{wiki}\" विकि को अनडिलीट किया गया" #: extensions/base/managewiki.py:203 -#, fuzzy, python-brace-format +#, python-brace-format msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}" -msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* को डिलीट किया{comment}" +msgstr "[{author}]({author_url}) ने विकि *{wiki_name}* को अनडिलीट किया{comment}" #: extensions/base/managewiki.py:217 #, python-brace-format @@ -691,13 +678,13 @@ msgid "{field} field changed to: {desc}" msgstr "{field} फील्ड को बदला गया: {desc} में" #: extensions/base/curseprofile.py:58 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " "profile." msgstr "" -"[{author}]({author_url}) ने [{target}]({target_url}) के प्रॉफाइल पर {field} को " -"सम्पादित किया। *({desc})*" +"[{author}]({author_url}) ने [{target}]({target_url}) के प्रोफाइल पर {field} " +"को साफ़ किया।" #: extensions/base/curseprofile.py:60 #, python-brace-format @@ -705,17 +692,17 @@ msgid "" "[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s " "profile. *({desc})*" msgstr "" -"[{author}]({author_url}) ने [{target}]({target_url}) के प्रॉफाइल पर {field} को " -"सम्पादित किया। *({desc})*" +"[{author}]({author_url}) ने [{target}]({target_url}) के प्रोफाइल पर {field} " +"को सम्पादित किया। *({desc})*" #: extensions/base/curseprofile.py:65 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) cleared the {field} on [their own]({target_url}) " "profile." msgstr "" -"[{author}]({author_url}) ने [अपने]({target_url}) प्रॉफाइल पर {field} को सम्पादित " -"किया। *({desc})*" +"[{author}]({author_url}) ने [अपने]({target_url}) प्रोफाइल पर {field} को साफ़ " +"किया।" #: extensions/base/curseprofile.py:67 #, python-brace-format @@ -723,30 +710,32 @@ msgid "" "[{author}]({author_url}) edited the {field} on [their own]({target_url}) " "profile. *({desc})*" msgstr "" -"[{author}]({author_url}) ने [अपने]({target_url}) प्रॉफाइल पर {field} को सम्पादित " -"किया। *({desc})*" +"[{author}]({author_url}) ने [अपने]({target_url}) प्रोफाइल पर {field} को " +"सम्पादित किया। *({desc})*" #: extensions/base/curseprofile.py:82 #, python-brace-format msgid "Left a comment on {target}'s profile" -msgstr "{target} के प्रॉफाइल पर एक कमेंट छोड़ा" +msgstr "{target} के प्रोफाइल पर एक कमेंट छोड़ा" #: extensions/base/curseprofile.py:84 msgid "Left a comment on their own profile" -msgstr "अपने प्रॉफाइल पर एक कमेंट छोड़ा" +msgstr "अपने प्रोफाइल पर एक कमेंट छोड़ा" #: extensions/base/curseprofile.py:97 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." msgstr "" -"[{author}]({author_url}) ने {target} के प्रॉफाइल पर एक [कमेंट]({comment}) छोड़ा" +"[{author}]({author_url}) ने {target} के प्रोफाइल पर एक [कमेंट]({comment}) " +"छोड़ा।" #: extensions/base/curseprofile.py:100 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on their own profile." -msgstr "[{author}]({author_url}) ने अपने प्रॉफाइल पर एक [कमेंट]({comment}) छोड़ा" +msgstr "" +"[{author}]({author_url}) ने अपने प्रोफाइल पर एक [कमेंट]({comment}) छोड़ा।" #: extensions/base/curseprofile.py:113 #, python-brace-format @@ -758,19 +747,20 @@ msgid "Edited a comment on their own profile" msgstr "अपने प्रॉफाइल के एक कमेंट को सम्पादित किया" #: extensions/base/curseprofile.py:128 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." msgstr "" -"[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) पर जवाब " -"दिया" +"[{author}]({author_url}) ने {target} के प्रोफाइल के एक [कमेंट]({comment}) पर " +"जवाब दिया।" #: extensions/base/curseprofile.py:131 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on their own profile." msgstr "" -"[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) को सम्पादित किया" +"[{author}]({author_url}) ने अपने प्रोफाइल के एक [कमेंट]({comment}) को सम्पादि" +"त किया।" #: extensions/base/curseprofile.py:144 #, python-brace-format @@ -782,24 +772,22 @@ msgid "Replied to a comment on their own profile" msgstr "अपने प्रॉफाइल क के एक कमेंट पर जवाब दिया" #: extensions/base/curseprofile.py:159 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " "profile." msgstr "" -"[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) पर जवाब " -"दिया" +"[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) पर " +"जवाब दिया।" #: extensions/base/curseprofile.py:162 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on their own " "profile." msgstr "" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" -"[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट] ({comment}) पर जवाब दिया\n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) पर जवाब दिया" +"[{author}]({author_url}) ने अपने प्रोफाइल पर एक [कमेंट]({comment}) पर जवाब " +"दिया।" #: extensions/base/curseprofile.py:175 #, python-brace-format @@ -811,21 +799,22 @@ msgid "Deleted a comment on their own profile" msgstr "अपने प्रॉफाइल के एक कमेंट को डिलीट किया" #: extensions/base/curseprofile.py:197 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " "profile.{reason}" msgstr "" -"[{author}]({author_url}) ने {target} के प्रॉफाइल के एक [कमेंट]({comment}) को डिलीट " -"किया" +"[{author}]({author_url}) ने {target} के प्रोफाइल के एक [कमेंट]({comment}) को " +"डिलीट किया।{reason}" #: extensions/base/curseprofile.py:200 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." "{reason}" msgstr "" -"[{author}]({author_url}) ने अपने प्रॉफाइल के एक [कमेंट]({comment}) को डिलीट किया" +"[{author}]({author_url}) ने अपने प्रोफाइल के एक [कमेंट]({comment}) को डिलीट " +"किया।{reason}" #: extensions/base/curseprofile.py:214 #, python-brace-format @@ -837,18 +826,22 @@ msgid "Purged a comment on their own profile" msgstr "अपने प्रॉफाइल के एक कमेंट को पर्ज किया" #: extensions/base/curseprofile.py:230 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." "{reason}" -msgstr "[{author}]({author_url}) ने {target} के प्रॉफाइल के एक कमेंट को पर्ज किया" +msgstr "" +"[{author}]({author_url}) ने [{target}]({link}) के प्रोफाइल के एक कमेंट को पर्" +"ज किया।{reason}" #: extensions/base/curseprofile.py:233 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) purged a comment on [their own]({link}) profile." "{reason}" -msgstr "[{author}]({author_url}) ने अपने प्रॉफाइल के एक कमेंट को पर्ज किया" +msgstr "" +"[{author}]({author_url}) ने [अपने]({link}) प्रोफाइल के एक कमेंट को पर्ज " +"किया।{reason}" #: extensions/base/renameuser.py:38 #, python-brace-format @@ -929,13 +922,13 @@ msgid "Prefix: {prefix} | {desc}" msgstr "उपसर्ग: {prefix} | {desc}" #: extensions/base/interwiki.py:102 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" "{desc}" msgstr "" -"[{author}]({author_url}) ने [इंटरविकी टेबल]({table_url}) पर एक एंट्री को डिलीट " -"किया" +"[{author}]({author_url}) ने [इंटरविकि टेबल]({table_url}) पर एक एंट्री को डिली" +"ट किया{desc}" #: extensions/base/abusefilter.py:29 msgid "None" @@ -946,13 +939,8 @@ msgid "Warning issued" msgstr "सूचना दे दी गई है" #: extensions/base/abusefilter.py:29 -#, fuzzy msgid "**Blocked user**" -msgstr "" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" -"**सदस्य को ब्लॉक कर दिया गया है**\n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"**ब्लॉक्ड सदस्य**" +msgstr "**ब्लॉक्ड सदस्य**" #: extensions/base/abusefilter.py:29 msgid "Tagged the edit" @@ -1208,17 +1196,13 @@ msgid "Deleted redirect {article} by overwriting" msgstr "ओवर्राइट करके रेडिरेक्ट {article} को डिलीट किया" #: extensions/base/mediawiki.py:308 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" "({page_link}){comment}" msgstr "" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" -"[{author}]({author_url} ने [{page}]({page_link}){comment} को ओवर्राइट करके " -"रेडिरेक्ट को डिलीट किया\n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"[{author}]({author_url}) ने [{page}]({page_link}){comment} को ओवर्राइट करके " -"रेडिरेक्ट को डिलीट किया" +"[{author}]({author_url}) ने [{page}]({page_link}) को ओवर्राइट करके अनुप्रेषण " +"को डिलीट किया{comment}" #: extensions/base/mediawiki.py:322 #, python-brace-format @@ -1248,7 +1232,7 @@ msgstr[0] "पृष्ठ {article} पर रिवीशन के दृश msgstr[1] "पृष्ठ {article} पर {amount} रिवीशनों के दृश्यता को बदला " #: extensions/base/mediawiki.py:383 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" "({article_url}){comment}" @@ -1256,19 +1240,11 @@ msgid_plural "" "[{author}]({author_url}) changed visibility of {amount} revisions on page " "[{article}]({article_url}){comment}" msgstr[0] "" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" -"[{author}]({author_url} ने [{article}]({article_url}) पर रिवीशन के दृश्यता को " -"बदल दिया{comment}\n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"[{author}]({author_url}) ने [{article}]({article_url}) पर रिवीशन के दृश्यता को " -"बदल दिया{comment}" +"[{author}]({author_url}) ने [{article}]({article_url}) पर रिवीशन के दृश्यता " +"को बदल दिया{comment}" msgstr[1] "" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" -"[{author}]({author_url} ने [{article}]({article_url}) पर {amount} रिवीशनों के " -"दृश्यता को बदल दिया{comment}\n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"[{author}]({author_url}) ने [{article}]({article_url}) पर {amount} रिवीशनों के " -"दृश्यता को बदल दिया{comment}" +"[{author}]({author_url}) ने [{article}]({article_url}) पर {amount} रिवीशनों " +"के दृश्यता को बदल दिया{comment}" #: extensions/base/mediawiki.py:399 extensions/base/mediawiki.py:432 msgid "No redirect has been made" @@ -1306,17 +1282,13 @@ msgid "Moved {redirect}{article} to {title} over redirect" msgstr "{redirect}{article} को रेडिरेक्ट के साथ {title} पर ले जाया गया है" #: extensions/base/mediawiki.py:448 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " "[{target}]({target_url}) {made_a_redirect}{comment}" msgstr "" -"#-#-#-#-# rcgcdw.po (RcGcDw) #-#-#-#-#\n" -"[{author}]({author_url}) ने {redirect}*{article}* को रेडिरेक्ट के साथ [{target}]" -"({target_url}) {made_a_redirect} पर मूव किया{comment}\n" -"#-#-#-#-# formatters.po (RcGcDw) #-#-#-#-#\n" -"[{author}]({author_url}) ने {redirect}*{article}* को रेडिरेक्ट के साथ [{target}]" -"({target_url}) {made_a_redirect}{comment} पर मूव किया" +"[{author}]({author_url}) ने {redirect}*{article}* को अनुप्रेषण के साथ " +"[{target}]({target_url}) पर मूव किया {made_a_redirect}{comment}" #: extensions/base/mediawiki.py:464 #, python-brace-format @@ -1385,7 +1357,7 @@ msgstr "अनंत और इसके परे तक" #: extensions/base/mediawiki.py:582 msgid "for less than a minute" -msgstr "" +msgstr "एक मिनट से कम के लिए" #: extensions/base/mediawiki.py:584 msgid "year" @@ -1414,7 +1386,7 @@ msgstr[1] "मिनट" #: extensions/base/mediawiki.py:590 #, python-brace-format msgid "for {time_number} {time_unit}" -msgstr "" +msgstr "{time_number} {time_unit} के लिए" #: extensions/base/mediawiki.py:609 msgid "Blocked from editing the following pages: " @@ -1434,7 +1406,7 @@ msgstr "आधा ब्लॉक विवरण" #: extensions/base/mediawiki.py:632 msgid "Block flags" -msgstr "" +msgstr "ब्लॉक के फ्लैग" #: extensions/base/mediawiki.py:634 #, python-brace-format @@ -1540,7 +1512,7 @@ msgstr[1] "" #: extensions/base/mediawiki.py:818 #, python-brace-format msgid " (until {date_and_time})" -msgstr "" +msgstr " ({date_and_time} तक)" #: extensions/base/mediawiki.py:835 #, python-brace-format @@ -1557,54 +1529,51 @@ msgid "{target} got autopromoted to a new usergroup" msgstr "{target} को एक नए यूज़रग्रुप में ऑटोप्रमोट किया गया" #: extensions/base/mediawiki.py:844 -#, fuzzy msgid "Added group" msgid_plural "Added groups" -msgstr[0] "हटाया गया" -msgstr[1] "हटाया गया" +msgstr[0] "जोड़ा गया समूह" +msgstr[1] "जोड़े गए समूह" #: extensions/base/mediawiki.py:846 -#, fuzzy msgid "Removed group" msgid_plural "Removed groups" -msgstr[0] "हटाया गया" -msgstr[1] "हटाया गया" +msgstr[0] "हटाया गया समूह" +msgstr[1] "हटाए गए समूह" #: extensions/base/mediawiki.py:860 #, python-brace-format msgid "Added to {added} and removed from {removed}." -msgstr "" +msgstr "{added} में जोड़ा गया और {removed} से हटाया गया।" #: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 #: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 msgid ", " -msgstr "" +msgstr ", " #: extensions/base/mediawiki.py:863 #, python-brace-format msgid "Added to {added}." -msgstr "" +msgstr "{added} में जोड़ा गया।" #: extensions/base/mediawiki.py:865 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Removed from {removed}." -msgstr "हटाया गया" +msgstr "{removed} से हटाया गया।" #: extensions/base/mediawiki.py:866 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) changed group membership for [{target}]" "({target_url}): {group_changes}{comment}" msgstr "" -"[{author}]({author_url}) ने [{target}]({target_url}) के लिए ग्रुप {old_groups} से " -"{new_groups} में बदला{comment}" +"[{author}]({author_url}) ने [{target}]({target_url}) के समूह सदस्यता को बदला:" +" {group_changes}{comment}" #: extensions/base/mediawiki.py:870 -#, fuzzy, python-brace-format +#, python-brace-format msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" msgstr "" -"{author} ने [{target}]({target_url}) को {old_groups} से {new_groups} में " -"ऑटोप्रमोट किया{comment}" +"सिस्टम ने [{target}]({target_url}) को {added} में ऑटोप्रमोट किया।{comment}" #: extensions/base/mediawiki.py:883 #, python-brace-format @@ -1705,40 +1674,42 @@ msgstr "" "मॉडल की मदद से बनाया {new}{comment}" #: extensions/base/mediawiki.py:1072 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "टैग \"{tag}\" बनाया गया" #: extensions/base/mediawiki.py:1082 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" बनाया" +msgstr "" +"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" बनाया{comment}" #: extensions/base/mediawiki.py:1103 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "टैग \"{tag}\" को डिलीट किया गया" #: extensions/base/mediawiki.py:1105 -#, fuzzy msgid "Removed from" -msgstr "हटाया गया" +msgstr "इससे हटाया गया" #: extensions/base/mediawiki.py:1105 msgid "{} revision or log entry" msgid_plural "{} revisions and/or log entries" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{} रिवीशन या लॉग एंट्री" +msgstr[1] "{} रिवीशन और/या लॉग एंट्री" #: extensions/base/mediawiki.py:1118 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिलीट किया" +msgstr "" +"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिलीट " +"किया{comment}" #: extensions/base/mediawiki.py:1128 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revision or log entry{comment}" @@ -1746,34 +1717,37 @@ msgid_plural "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revisions and/or log entries{comment}" msgstr[0] "" -"[{author}]({author_url}) ने [{article}]({article_url}) को {count} रिवीशन के " -"साथ ({article_url}) इम्पोर्ट किया{comment}" +"[{author}]({author_url}) ने [टैग]({tag_url}) \"{tag}\" को डिलीट किया और इसे " +"{count} रिवीशन या लॉग एंट्री से हटाया।{comment}" msgstr[1] "" -"[{author}]({author_url}) ने [{article}]({article_url}) को {count} रिवीशनों के " -"साथ ({article_url}) इम्पोर्ट किया{comment}" +"[{author}]({author_url}) ने [टैग]({tag_url}) \"{tag}\" को डिलीट किया और इसे " +"{count} रिवीशनों और/या लॉग एंट्रियों से हटाया।{comment}" #: extensions/base/mediawiki.py:1145 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Activated the tag \"{tag}\"" -msgstr "टैग \"{tag}\" को ऐक्टिवेट किया गया" +msgstr "टैग \"{tag}\" को सक्रीय किया गया" #: extensions/base/mediawiki.py:1154 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}" -msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को ऐक्टिवेट किया" +msgstr "" +"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को सक्रीय " +"किया{comment}" #: extensions/base/mediawiki.py:1173 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deactivated the tag \"{tag}\"" -msgstr "टैग \"{tag}\" को डिऐक्टिवेट किया गया" +msgstr "टैग \"{tag}\" को अक्रीय किया गया" #: extensions/base/mediawiki.py:1182 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}" msgstr "" -"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिऐक्टिवेट किया" +"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को अक्रीय " +"किया{comment}" #: extensions/base/sprite.py:37 #, python-brace-format diff --git a/locale/hi/LC_MESSAGES/rcgcdw.mo b/locale/hi/LC_MESSAGES/rcgcdw.mo index c4855193fcbb2ee6e291d76de97a5956547fd30b..ec8b03beb6602f4ba500f47ebc8bcfe070502216 100644 GIT binary patch delta 725 zcmZ|M&ubGw6u|M9CNUb@s;TuytU8T|l|q#Y1t~p9a}zyCJroc9kzMLy$u?<{OXyZa zMDQ3x58}zGsFw<<2f-f~J?UQ{MaKU?L2oViok;{QeK7Nxw=bEUdHXKg%&dOTB$`6> zGX@x+7$+HvF($%b7JuLo+{PUCb&2%g7#_fUC!fMz@_F2cB}`)-bNHa+OB@nem9H$i zDf~hEhpxEDe(c7hcntgSBJROF9>%L^H=f1&9O@1ZlmASJOyWRNw%dmNR5m!b>&QW5Z=nIMBer{-(Z!+GwfK1K z#`REn{&JxlELDQAsFuoME%1C#ZWe=5)mMeESSbhd)k;`imfL~n`9-PM<`%2|iW-`$ zEsUr-^U8UNqINZk8f(dk)=n}XON@<-rW?0Xr&@*7RD8T?)*l)DP#OKk=#OrGZS*tp y7e>D|>vxU5NAlbiH;n#3vSzehH8#^{vQJ#$6>0n7f91iR6N6D?^zJ{2BKZsDD4gE_ literal 3388 zcmbuATWl0n7{`wYURFiKD|kDgXbG8aTdU$y(52l%O_$cPRqIPLojGg=c4wBkv}_6q zmmnBp)Win7B!pxZ4WextTi^v_qS3@Rjc>*bukuQKF){wXGiTe~Eh5pA?)=Vo&Ue1^ z-DdjR%B7PG<0AZ!R3&D z0&fQ|g9-2oNay}gT(y+3CdeJ&ouB|o-v#dg_k;I>$3Z&(iQ=aqOt2Xx&w=+q{sz1a z{28SCe^v4oknCOsZvp=T$=qaXTit7U%-dKt02X{0!dv1t_It|4v_M@SMezL5abUPXTbX* z{|K%EFM|}%pGtla$s)gpKsvV{r28kqmEf$}|3UEzNcSyA^2pv=5b2V0(nnd?3j8RS z6dw)pAL*(aWP|Q`P_0t$QCt)=u8=vQ{vh9j*DdYcAHBM0>X`Cc8ApV~q7rJkU; zkbYUGC&4B7(Lf4hFHqmncoe^Na)t+QnmE99!?zrJeXZarNtl*jGo|IhTxb2M`UR+@ z&7x&1s~+1L_}q3z9J9;~y(rk$vM)StjOun?n5;{;3T5t$33tpA;}FZ-GaOg23~u&# zQ8xw4I-W1hjR`*L1n!~*uWlvqM7;_vC>4rFm|S;#%P1(z^=ls6A;zl;v9QZ32+W+= z2g@(BLEG9J2yQsG?^+{)@4&telyu*93UcZS8PJI1vys3RdSJM^&kSMvfm>FzVAj;j z^ut6L6l@HLmMaVxo}YM(9L0i60X;lcvY+Q&v^5L;@YmYUY4|LbGbeolh?#hS9CdTwaAP(>*eJtP1C-6M5p7p!V zZg{KpnA)qzHM%Lqw_CPp@umS|o6$ACJ~1Flj_Ye#FK?OJ)*$a`IVZ&v{e3yD6X~H2 z)Vg$EqaXxTokE6um}rLsL6-sszr zN%ZQTujO3b_6j<(mEzrly}f)#I-B7gnQXeJ_oZ}K*Fa|H&Mi>25n*0vIiVM;4tI?D ze#uKElfJScnkg5kW3wrer8rP8=^A;%98VT?%TA73$pvF6K58YhJ=x4cCR&?Y5}l|5 zYOm$WC4}gUeSWf3z~N2wCb*vPHxK5zwT%mUbo(yhY8l&bOv}!v_{I^-PxKc8S1)MY zj$8Cn+%8Gc+uXK^$J5O=-@;orC0^II30t7$Cam?V+#i(*H3J*hgGYY5RA&bIu(%qS;atzBSUw5#>W1rO1p3&953oW`L5K@6 zE#05O(n&-C@8Sq0$tvDI;+tc!*S(Wt4A(%cVwWy6T!>OsL zg2usF*}TdQ+M6`+o`nm;hRDhPu6yRRj79M#cJoOs?Jit};$5is67 U^}@*6{J-ZY{6L-xtN)|_2E{>y0ssI2 diff --git a/locale/hi/LC_MESSAGES/rcgcdw.po b/locale/hi/LC_MESSAGES/rcgcdw.po index 9d84c50..394bd95 100644 --- a/locale/hi/LC_MESSAGES/rcgcdw.po +++ b/locale/hi/LC_MESSAGES/rcgcdw.po @@ -8,16 +8,16 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-21 21:04+0200\n" -"PO-Revision-Date: 2020-12-06 14:17+0000\n" +"PO-Revision-Date: 2021-07-11 12:33+0000\n" "Last-Translator: Creeper \n" -"Language-Team: Hindi \n" +"Language-Team: Hindi " +"\n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.2.1\n" +"X-Generator: Weblate 4.6.2\n" #: src/rcgcdw.py:117 #, python-brace-format @@ -102,7 +102,7 @@ msgstr "दिन का स्कोर" #: src/rcgcdw.py:215 msgid "~~hidden~~" -msgstr "" +msgstr "~~छिपाया गया~~" #: src/rcgcdw.py:217 msgid "No description provided" @@ -110,7 +110,7 @@ msgstr "कोई विवरण नहीं दिया गया" #: src/rcgcdw.py:220 msgid "hidden" -msgstr "" +msgstr "छिपाया गया" #~ msgid "director" #~ msgstr "निर्देशक" diff --git a/locale/ja/LC_MESSAGES/formatters.mo b/locale/ja/LC_MESSAGES/formatters.mo index 2a64407b30ded43ea1f33317a2042b5f5ee02ee7..5603fe6d205b1e584c4dbc4b877600ebca5eaf92 100644 GIT binary patch literal 8105 zcmcJTeQ*?K9mgL9EuQtQRM8gO$5<%@FM*1-bAZ#7B$Q4Om(Gxjww3O)nw z2RDHqfF$Rkdl;(%p9Mbw>K1V>ueAI$}1y_Pg7co{3J`IwbLm&sQ zf}aC_2Yw$kz$n;;N$C1LFaoX&ncM|FhwBSq5BM)|JJ<>5><51X4uIR?Jd*Qga4Wb0 zP9!@|f;+$uz!$-9ej3k$N5Qq=qR+raupUf;C&0zvg3mJcMQ{l?h*+%xzl`e%DE|=n zM-W5Vzb%Fk4D!Fs#9Hie5gJJLvxCXrU^QInkAWUb^f(_vJz!l&nko5X3NPhi2Ncpk&3yi%4wt=MA zHSinYUqI6P{w0hZ0Urg)uQ$Mca4DS91pdV0-@!Iqum2Kk1m6I+g3BIY>d_^9<2}7RrKqy!BE+hz>tZoER$U$8_}(g~lvk`P@jDZrTvw&E zmXvg9XHw=FDK7J>9!b>`(WKm4#dU>C@wh6-C0*umRq4#&wqS1++t4AU<8q8gaWk%{ z30ZS~(mQ0X>GY7Yi|^=3Vqhm^_wI1!ODJiLZn|b;8RrTnS8kcplLY1LsjFZY6@T0;_U(gWv1S9H6ncxu#Evj^? zun=-Ahg#aZ?Q2M5R9cr+43l_9RUkjbyE+nZy`{cu_$)oe!)2#vlpqXBD5eX&(Zo#A z4!%=PD(SdJV{BdB!FL?R!J-;{2ZUrESaG{lvyE@!j0G!}gV`ctlU zYO=~+=#e`04n^&KX}R^Sy;Dv0uHX_?8Ani2V?1Eh5qiS>YCQt~`>Nj)RZ=NAt@rxR zh!K_434aCVHAiq^skTk)t){ek!7ePY+01{_jTTxS7`qIA*>iRdMbq2cThhsHTKKxGWzc`y+Zoafos37t zMp@(Aq`0<_KG+sj*)2!)@TORJyR2$hiV^;dl#$Z1CiCU3(T&mit`#9Paz)j{&00JW z3qREv*TUPB2oG&(2~+>3r^5BvyGHnT8|qra%`M^jI{tJ^qUV_Q=b-(1(+z}Gc2*KKNgvaY_qwPEYlZ)2#rK@V?}rIbsRbsf5%(IU0AcDBeh zU5S?yI~BbqCf8yIOIB#LYBU~=b=6`WrX(GE2Ca6tR9lo9;k%_!^QPv8qOq%MR)sbw z*bAqjVs{2M=<=(2Es`XWUP}&B5u^2O+Zw}96vvS%yJR&?Tj3Zs`w{-c&V(M?lEl_K z8E(YvT7;)F;!<0`dM!7{x!Ff9Aqj=Gx3TGvThO#MFUb6s~14S8*5Iy91(4IUdpG1C9u{Sj;6% zg`E7@;N;DI%S2}|Zg`E$9yD_M@ss^#0CR4TQg4sv4<0XyF<--szJ6i;3HZTz8N;B- zi8FIdz)+b^P$m z1vq_hYUt+Fv2z}s3a=06-x@Zuuxk(xcpYbY)i))I9>OFuCoURdPOk{d_Y|~u3&)YY z__On2PS9+Jlg{s+ov%3W#M8rjrbo^q5XI!d8yhJ)bR<7^iaFs&4D1G3#WCL0%3c7Y z9*qkpu8Qlul$!evvi#voM%KP?$)RBG9m($-u(ZftnXSe2@Xw%y<@fAmND+P+Vr7%0 z|B#tl%vr&9Lg#*IGQ&x;f4)A;Igf zz=AP#eXno95ObRg)tw{d+%YvVW@HZ)4kOP8ylcZQT(ojUO{3Ueyg5Arvs?}+oEe!K z8lM^bd4AxXsbj;_d-gHk7H?#)7<;n51_v}`%pFuPk(P7oWwB`oC^Tr2g~w3W8ZavxDZ;?jTgC#@t*eQ*eX)7A&kpo(Bmt zYqK!voEeb6-8vNziVEExlu%~r4~WA28bJjiKm)P61@#ukPJb=Sn;E>K+N1Fe)mG;HzYgk{-Zb`;^`R(Q-dk8(R|2vMx5u1H?fuswZdr|Q{_C#Hl-N9=cVQD` zZ4`rBXa#u&T?fmoPP+%XjbQ-`G}r{Y=bM#n?$WPJXK%;Hp3*;KVPWZZSJ_Pew`2C0F8&H4gej7(e%02>Mh AX8-^I diff --git a/locale/ja/LC_MESSAGES/formatters.po b/locale/ja/LC_MESSAGES/formatters.po index 459e87d..84d6014 100644 --- a/locale/ja/LC_MESSAGES/formatters.po +++ b/locale/ja/LC_MESSAGES/formatters.po @@ -8,102 +8,104 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2021-07-11 12:33+0000\n" +"Last-Translator: しぃ \n" +"Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.6.2\n" #: src/api/util.py:61 src/api/util.py:66 msgid "__Only whitespace__" -msgstr "" +msgstr "__空白のみ__" #: src/api/util.py:71 msgid "Removed" -msgstr "" +msgstr "削除済" #: src/api/util.py:73 msgid "Added" -msgstr "" +msgstr "追加済" #: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 #: src/api/util.py:141 extensions/base/discussions.py:247 #: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 msgid "Unregistered user" -msgstr "" +msgstr "未登録利用者" #: src/api/util.py:160 msgctxt "recent changes Tags" msgid "Tags" -msgstr "" +msgstr "タグ" #: src/api/util.py:162 msgid "**Added**: " -msgstr "" +msgstr "**追加済**: " #: src/api/util.py:163 msgid " and {} more\n" -msgstr "" +msgstr " そして {} その他にも\n" #: src/api/util.py:165 msgid "**Removed**: " -msgstr "" +msgstr "**削除済**: " #: src/api/util.py:166 msgid " and {} more" -msgstr "" +msgstr " そして {} その他にも" #: src/api/util.py:168 msgid "Changed categories" -msgstr "" +msgstr "変更後の分類" #: extensions/base/cargo.py:37 #, python-brace-format msgid "Created the Cargo table \"{table}\"" -msgstr "" +msgstr "Cargo テーブル\"{table}\"を作成しました" #: extensions/base/cargo.py:45 #, python-brace-format msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "" +msgstr "[{author}]({author_url}) がCargo テーブル\"{table}\"を作成しました" #: extensions/base/cargo.py:60 #, python-brace-format msgid "Recreated the Cargo table \"{table}\"" -msgstr "" +msgstr "Cargo テーブル \"{table}\" の再作成" #: extensions/base/cargo.py:68 #, python-brace-format msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "" +msgstr "[{author}]({author_url}) がCargo テーブル\"{table}\"を再作成しました" #: extensions/base/cargo.py:83 #, python-brace-format msgid "Replaced the Cargo table \"{table}\"" -msgstr "" +msgstr "Cargo テーブル \"{table}\" の置き換え" #: extensions/base/cargo.py:91 #, python-brace-format msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "" +msgstr "[{author}]({author_url}) がCargo テーブル\"{table}\"を置き換えました" #: extensions/base/cargo.py:105 #, python-brace-format msgid "Deleted the Cargo table \"{table}\"" -msgstr "" +msgstr "Cargo テーブル \"{table}\" の削除" #: extensions/base/cargo.py:112 #, python-brace-format msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "" +msgstr "[{author}]({author_url}) がCargo テーブル\"{table}\"を削除しました" #: extensions/base/translate.py:41 #, python-brace-format msgid "Marked \"{article}\" for translation" -msgstr "" +msgstr "ページ \"{article}\" を翻訳可能にしました" #: extensions/base/translate.py:55 #, python-brace-format @@ -111,11 +113,13 @@ msgid "" "[{author}]({author_url}) marked [{article}]({article_url}) for " "translation{comment}" msgstr "" +"[{author}]({author_url}) は [{article}]({article_url}) というページを翻訳可能にしました " +"{comment}" #: extensions/base/translate.py:70 #, python-brace-format msgid "Removed \"{article}\" from the translation system" -msgstr "" +msgstr "翻訳システムから \"{article}\" を削除しました" #: extensions/base/translate.py:80 #, python-brace-format @@ -123,11 +127,12 @@ msgid "" "[{author}]({author_url}) removed [{article}]({article_url}) from the " "translation system{comment}" msgstr "" +"[{author}]({author_url}) は [{article}]({article_url}) を翻訳から削除しました {comment}" #: extensions/base/translate.py:95 #, python-brace-format msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" -msgstr "" +msgstr "翻訳ページを \"{article}\" から \"{target}\" への移動を完了" #: extensions/base/translate.py:106 #, python-brace-format @@ -135,11 +140,13 @@ msgid "" "[{author}]({author_url}) completed moving translation pages from *{article}* " "to [{target}]({target_url}){comment}" msgstr "" +"[{author}]({author_url}) が *{article}* から [{target}]({target_url}) " +"への翻訳ページの移動が完了しました {comment}" #: extensions/base/translate.py:121 #, python-brace-format msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" -msgstr "" +msgstr "\"{article}\" から \"{target}\" に移動する際に問題が発生しました" #: extensions/base/translate.py:133 #, python-brace-format @@ -147,13 +154,15 @@ msgid "" "[{author}]({author_url}) encountered a problem while moving [{article}]" "({article_url}) to [{target}]({target_url}){comment}" msgstr "" +"[{author}]({author_url}) が [{article}]({article_url}) から " +"[{target}]({target_url}) に移動する際に問題が発生しました {comment}" #: extensions/base/translate.py:149 #, python-brace-format msgid "" "Failed to delete \"{article}\" which belongs to translatable page " "\"{target}\"" -msgstr "" +msgstr "翻訳可能なページ\"{target}\"に関する\"{article}\"の削除に失敗しました" #: extensions/base/translate.py:161 #, python-brace-format @@ -161,11 +170,13 @@ msgid "" "[{author}]({author_url}) failed to delete [{article}]({article_url}) which " "belongs to translatable page [{target}]({target_url}){comment}" msgstr "" +"[{author}]({author_url})は、翻訳可能なページに属する[{article}]({article_url})の削除に失敗しました " +"[{target}]({target_url}){comment}" #: extensions/base/translate.py:177 #, python-brace-format msgid "Completed deletion of translation page \"{article}\"" -msgstr "" +msgstr "翻訳ページ\"{article}\"の削除を完了" #: extensions/base/translate.py:188 #, python-brace-format @@ -173,12 +184,13 @@ msgid "" "[{author}]({author_url}) completed deletion of translation page [{article}]" "({article_url}){comment}" msgstr "" +"[{author}]({author_url}) が翻訳ページ [{article}]({article_url}) の削除を完了 {comment}" #: extensions/base/translate.py:203 #, python-brace-format msgid "" "Failed to delete \"{article}\" which belongs to translation page \"{target}\"" -msgstr "" +msgstr "翻訳ページ\"{target}\"に属する\"{article}\"の削除に失敗しました" #: extensions/base/translate.py:215 #, python-brace-format @@ -186,45 +198,47 @@ msgid "" "[{author}]({author_url}) failed to delete [{article}]({article_url}) which " "belongs to translation page [{target}]({target_url}){comment}" msgstr "" +"[{author}]({author_url})が翻訳ページ[{target}]({target_url})に属する[{article}]({articl" +"e_url})の削除に失敗しました {comment}" #: extensions/base/translate.py:231 #, python-brace-format msgid "Encouraged translation of \"{article}\"" -msgstr "" +msgstr "推奨される\"{article}\"の翻訳" #: extensions/base/translate.py:240 #, python-brace-format msgid "" "[{author}]({author_url}) encouraged translation of [{article}]({article_url})" "{comment}" -msgstr "" +msgstr "[{author}]({author_url})が推奨する翻訳:[{article}]({article_url}){comment}" #: extensions/base/translate.py:255 #, python-brace-format msgid "Discouraged translation of \"{article}\"" -msgstr "" +msgstr "\"{article}\"の翻訳に挫折" #: extensions/base/translate.py:264 #, python-brace-format msgid "" "[{author}]({author_url}) discouraged translation of [{article}]" "({article_url}){comment}" -msgstr "" +msgstr "[{author}]({author_url}) が挫折した翻訳: [{article}]({article_url}){comment}" #: extensions/base/translate.py:282 #, python-brace-format msgid "Limited languages for \"{article}\" to `{languages}`" -msgstr "" +msgstr "\"{article}\"の言語を`{languages}`に限定" #: extensions/base/translate.py:285 #, python-brace-format msgid "Priority languages for \"{article}\" set to `{languages}`" -msgstr "" +msgstr "\"{article}\"の優先言語は`{languages}`に設定されています" #: extensions/base/translate.py:288 #, python-brace-format msgid "Removed priority languages from \"{article}\"" -msgstr "" +msgstr "\"{article}\"から優先順位の高い言語を削除しました" #: extensions/base/translate.py:301 #, python-brace-format @@ -232,6 +246,8 @@ msgid "" "[{author}]({author_url}) limited languages for [{article}]({article_url}) to " "`{languages}`{comment}" msgstr "" +"[{author}]({author_url}) は [{article}]({article_url}) の言語を `{languages}` " +"に限定しました {comment}" #: extensions/base/translate.py:308 #, python-brace-format @@ -239,6 +255,8 @@ msgid "" "[{author}]({author_url}) set the priority languages for [{article}]" "({article_url}) to `{languages}`{comment}" msgstr "" +"[{author}]({author_url})は、[{article}]({article_url}) " +"ページの優先言語リストを以下のように設定しています: `{languages}`{comment}" #: extensions/base/translate.py:315 #, python-brace-format @@ -246,11 +264,12 @@ msgid "" "[{author}]({author_url}) removed priority languages from [{article}]" "({article_url}){comment}" msgstr "" +"[{author}]({author_url}) の優先言語を [{article}]({article_url}) から削除しました {comment}" #: extensions/base/translate.py:331 #, python-brace-format msgid "Added translatable page \"{article}\" to aggregate group \"{group}\"" -msgstr "" +msgstr "翻訳可能なページ \"{article}\" を集計グループ \"{group}\" に追加しました" #: extensions/base/translate.py:342 #, python-brace-format @@ -258,12 +277,14 @@ msgid "" "[{author}]({author_url}) added translatable page [{article}]({article_url}) " "to aggregate group \"{group}\"{comment}" msgstr "" +"[{author}]({author_url}) は、翻訳可能なページ [{article}]({article_url}) を集計グループ \"" +"{group}\"に追加しました{comment}" #: extensions/base/translate.py:357 #, python-brace-format msgid "" "Removed translatable page \"{article}\" from aggregate group \"{group}\"" -msgstr "" +msgstr "翻訳可能なページ \"{article}\" を集約グループ \"{group}\" から削除しました" #: extensions/base/translate.py:368 #, python-brace-format @@ -271,11 +292,13 @@ msgid "" "[{author}]({author_url}) removed translatable page [{article}]" "({article_url}) from aggregate group \"{group}\"{comment}" msgstr "" +"[{author}]({author_url}) は、翻訳可能なページ [{article}]({article_url}) を集計グループ \"" +"{group}\"から削除しました{comment}" #: extensions/base/translate.py:387 #, python-brace-format msgid "Reviewed translation \"{article}\"" -msgstr "" +msgstr "\"{article}\" ページの翻訳を確認しました" #: extensions/base/translate.py:401 #, python-brace-format @@ -283,19 +306,20 @@ msgid "" "[{author}]({author_url}) reviewed translation [{article}]({article_url})" "{comment}" msgstr "" +"[{author}]({author_url}) の翻訳をチェックしました [{article}]({article_url}){comment}" #: extensions/base/translate.py:416 #, python-brace-format msgid "Changed the state of `{language}` translations of \"{article}\"" -msgstr "" +msgstr "\"{article}\"ページの翻訳状況を`{language}`に変更しました" #: extensions/base/translate.py:419 msgid "Old state" -msgstr "" +msgstr "古い状態" #: extensions/base/translate.py:420 msgid "New state" -msgstr "" +msgstr "新しい状態" #: extensions/base/translate.py:431 #, python-brace-format diff --git a/locale/ja/LC_MESSAGES/misc.mo b/locale/ja/LC_MESSAGES/misc.mo new file mode 100644 index 0000000000000000000000000000000000000000..2ed81077a63707065a7687e4aaf8aba8ab0f81dc GIT binary patch literal 1278 zcmaiyO=uHA6vtPsU+Y(`1uqJ7DOhxqR-}~e2c{;e(WD7UTC0~Z*&Wkul9{kOF?utJ zmG+=FwHHC8w9ukrJy=i=9z2UTQSdUwir`ti`6jy|4IX?j`%ntZ~%>xes7l8YKkAO1v3Ggs*-8+8|JOKJ5P{w`rxas+S0aft-@pQ*d zML7t%6Sx<6(qj)$=4+lF0N#b1QD8UtKkQPJBfu}fUf@q)53sw#J=cLX8K$*AY`F{hUjK*8+2FhM!d?zevvKMJGN7gUjLYlm* zY0!cKa@J7l@A%j%F}53q%Q8j=^lR zDZ|(xS;q3HV9~rX&RDKM+awe+$D;10>>VU*HcJeyMNDmq*be+mN0)F3Q{oVGDrt-x!Ah^1Bqe5ZE#~Ab zQyVMi94*asq$c88lH9OlmKMaE=;&%Fkkn#vEf_!-<9aM|`dWM*5YcSP_}VF3p2au=!ljY(i!O=Lhg2? zZ%Cci#t9|1`vO-;7T$uObG`xJSyj%Cs6H0e=bLXH{#aNSx94DlwpOa5x+bbiqIySE zm$y%ns67?6HBnm@^;e=kFRB}mE9$FK)?PFx>_1V>!D~x(=daBr>d!>&rKrCZwb!D) r0{@T$*%so?Wt*!po^2j?O8;@eu(tU&H|~93ybmMW=7q^^(_YkHD4CF` literal 0 HcmV?d00001 diff --git a/locale/ja/LC_MESSAGES/misc.po b/locale/ja/LC_MESSAGES/misc.po index 2865824..4428443 100644 --- a/locale/ja/LC_MESSAGES/misc.po +++ b/locale/ja/LC_MESSAGES/misc.po @@ -8,76 +8,81 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-11-30 11:58+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2021-07-11 12:33+0000\n" +"Last-Translator: しぃ \n" +"Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.6.2\n" #: src/misc.py:45 msgid "Location" -msgstr "" +msgstr "ロケーション" #: src/misc.py:45 msgid "About me" -msgstr "" +msgstr "私について" #: src/misc.py:45 msgid "Google link" -msgstr "" +msgstr "Googleのリンク" #: src/misc.py:45 msgid "Facebook link" -msgstr "" +msgstr "Facebookのリンク" #: src/misc.py:45 msgid "Twitter link" -msgstr "" +msgstr "Twitterのリンク" #: src/misc.py:45 msgid "Reddit link" -msgstr "" +msgstr "Redditのリンク" #: src/misc.py:45 msgid "Twitch link" -msgstr "" +msgstr "Twitchのリンク" #: src/misc.py:45 msgid "PSN link" -msgstr "" +msgstr "PSNのリンク" #: src/misc.py:45 msgid "VK link" -msgstr "" +msgstr "VKのリンク" #: src/misc.py:45 msgid "XBL link" -msgstr "" +msgstr "XBLのリンク" #: src/misc.py:45 msgid "Steam link" -msgstr "" +msgstr "Steamのリンク" #: src/misc.py:45 msgid "Discord handle" -msgstr "" +msgstr "Discordアカウントへのリンク" #: src/misc.py:45 msgid "Battle.net handle" -msgstr "" +msgstr "Battle.net アカウントへのリンク" #: src/misc.py:119 msgid "" "\n" "__And more__" msgstr "" +"\n" +"__その他色々__" #: src/misc.py:276 msgid "Unknown" -msgstr "" +msgstr "不明" #: src/misc.py:278 msgid "unknown" -msgstr "" +msgstr "不明" diff --git a/locale/ja/LC_MESSAGES/rcgcdw.mo b/locale/ja/LC_MESSAGES/rcgcdw.mo index 1cd0c1a3d1399eba6152168b0be5140d02e7849e..b4418286c9d46d445a31923301c19252a389752f 100644 GIT binary patch delta 170 zcmaFK+{sdZPl#nI0}wC)u?!IF05K~N+W;{L1OTx(5C;Nr8zTclCXki@;txPJ5P|gp zDFpD#S4c@MPA0j~iz{Zko&h06cpuFaQ7m delta 113 zcmeBVdC6>XPl#nI0}wC*u?!Ha05LNV>i{tbSOD>Qprj>`2C0F8i5U)RA-c{*sfi_- r`FXl7i6yC43PuJ-2D*kux`xIIhNe~~hS~-|uyLsyBdd{~Ar}JxYQz#5 diff --git a/locale/ja/LC_MESSAGES/rcgcdw.po b/locale/ja/LC_MESSAGES/rcgcdw.po index 85ae6f3..7fea434 100644 --- a/locale/ja/LC_MESSAGES/rcgcdw.po +++ b/locale/ja/LC_MESSAGES/rcgcdw.po @@ -8,14 +8,16 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-11-30 11:58+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2021-07-11 12:33+0000\n" +"Last-Translator: しぃ \n" +"Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.6.2\n" #: src/rc_formatters.py:28 msgid "None" @@ -732,7 +734,7 @@ msgstr "" #: src/rc_formatters.py:661 src/rc_formatters.py:948 msgid "No description provided" -msgstr "" +msgstr "説明はありません" #: src/rc_formatters.py:685 msgid "(N!) " diff --git a/locale/ja/LC_MESSAGES/redaction.mo b/locale/ja/LC_MESSAGES/redaction.mo index b6be5e7129c8e2f6f4fe1c751b6117b1c48ebd1a..14af06e0cc8ad70cec54f075832bac73a7aa08b3 100644 GIT binary patch delta 113 zcmaFI{DwK=o)F7a1|VPpVi_RT0b*7lwgF-g2moSsAPxlLZbk-%NFdDy#7}{2AOh\n" +"Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.6.2\n" #: src/discord/redaction.py:59 src/discord/redaction.py:62 #: src/discord/redaction.py:67 msgid "Removed" -msgstr "" +msgstr "削除" diff --git a/locale/pl/LC_MESSAGES/formatters.mo b/locale/pl/LC_MESSAGES/formatters.mo index b184a9a4ec970d856a626b1067bbe107c6ee95f6..4eec8f385985e9c3106826fe6cf23c5b796a28c1 100644 GIT binary patch delta 5528 zcmYk<37l0`9S88kGHe0LFp7)Ct`StYg2FTA~3DVC%fzgKg9Y!`WHj8;OElDtF~doD{cIXjx|T7spK<`}S;cqRfo-*Z z2>Y>=r!m@J!0x=Befb+!=s&%$FrO{UvksQiskDYBmF{MLKFN{X#TeMY1GA3DQr~HD z?v?DSzMip?&oKtJjnVFI4rZzQUFfVZPGK15Ge&qfEk@eHxCQUABU@@E-tWnHe^Oqb z%O2|2vI`$(4E%M*O6+3v(@`Vwxe<&#aB4^E-%O##iCEetY|JYdOSXp5;e(8ZUuO)c zL8oj$UFjzs?Il)V24jXRIE**)c)rZ|e8-BE4&^9L;^J8U*hHJ0hzo`oW-Q$qj2WzA zba*r47Cg$H{FpJo1HBoJWDI;ZhqER>e>dZEFEIwzNGEY!2R3JALBSK3dNEdDK>o(@ zj1NpaB>ksN3h@Qf-iLHrMo;^B78R4(Dke4a70%EPkvSMW&nM>&ySF*-cK zw^4Mop4HsW@f>w{Hjrx=_1C$CRhFSJR^fJqDu%u zr?ao+nZh-UhIjCf95Ny$eWWHM^IOJPnL5TM+`+gNJ#B=mxQsFJrbidDC7p1zjpM`` z#s{~sExQWY`;Z5ww+t`ke7Zmnac!kly zhm3}IGj{tP9>C_N5e-+eggx1m{n&~_7*EL)4sk@mU=eK2V4T z9vG8-0X@Z*>aX%Z?qD?Bz6&<_^jiT7z4YA(czC79lk)1e0rM)v-E`Qcft|u zp?cuKfH{JWTx)#%Am~DI4H$ zYAc<}=;-H+hF{Fz|A;Nrn@`SeRT<-!bYrYcugTWmmsFbKM9gS4ql5eN3!Y~*xRWun zQV)O3v=`&nOy-%qmCgATTeD

?|9R_w#y2hht9m?aGCWTfP2dR~@48v=ec`hwRV& zPRTAD%OUD3S;mcwrQFQeGi9gx3yE%pMAm@%;@JVF(Ghexv6 z=~?@QF$&S}QXav(7!AM8a(UpgCjlo{{gFz1J! zm6A)+d7R0uT*l!uJV|_rQ(~8NI@|qmqLzMAS66S~YF^2~v%F~d8Ja}e3w>l(~!B@Z@tUu!AP4qP5-IFG+dLG^LYM)W7xMQ``~$; zuD*%G*<*e-gPF8n(`LrNx-Q5Dw2F(>w=y>CxP@7J*U=c$Hu_0NpJV-3Dby=m#(~y5 zM*KKy&A8%Vpwj^7Lb&Ol}1vQoCEY1Fa*~aDSho0x}N&bRy zU9a=Af&A!v>mM_2>c+%9n#7pVM#in!$ERxypq8W5-?|{5>5At$`b`_zh>x%ZA7^X+fz9}8e*Uez z{sE)m&luO0UYPw>?ackv2Qk_`k!?AlpwL+1Z0^H3Y{g}a4lZLfw1#bX8)KmNu_a&R zp?r-)+3KR~dtfZ1qu!EE|yaI z3y+Wyd3`UZE5y$3E1yd&Z9j=4?su%@jdGR5@pE}cs$!bgC|oFU%$8lUB`S_Gu@{TS zA-QuIySTVPd8_FnK zdrz{rJSn5($MU8;AQNTp@t#6_yZupCNe{VPe3hi{%c0U)V)J@*3&sC@l+$zK`=R(Z zUDQvO1Le`EmysVSQB#tZP>SF2ZmvMRV9@c$*Iz3)27gD-Z;gfH?5ykP} zsE__ed4qDRyuK~Bh9`c{uRJ16XroxD&QFx`Ect;nk@m7g z4v;qTCyC=Tsg!}TP=?8Oq+a5av zNx5v259^;Pd!gjuvuD=KtevxPLB+yZ6}5}17c8!+E>_Q}o;|ao@`CC`wR2|F%=}(u z{pIB&_N`k|)vm6=pvt=0L(A)*t*SbxVW0l>{~o=qN!=ae+tqC!-=_YN6NZ)5-B{hJ TuKmK^bxY@$*MDB!uH*jzycwM~ delta 5416 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 aO8HBpB7*bt;;)y^Kb{yBkUu0PF!UEFO@l}P diff --git a/locale/pl/LC_MESSAGES/formatters.po b/locale/pl/LC_MESSAGES/formatters.po index 1c2b141..f228687 100644 --- a/locale/pl/LC_MESSAGES/formatters.po +++ b/locale/pl/LC_MESSAGES/formatters.po @@ -20,7 +20,7 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: 2021-05-27 21:02+0000\n" +"PO-Revision-Date: 2021-07-11 12:33+0000\n" "Last-Translator: Frisk The Evil Goat Overlord \n" "Language-Team: Polish \n" @@ -30,7 +30,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.6\n" +"X-Generator: Weblate 4.6.2\n" "Generated-By: pygettext.py 1.5\n" #: src/api/util.py:61 src/api/util.py:66 @@ -191,9 +191,9 @@ msgstr "" "przez [{author}]({author_url}) nie powiodło się{comment}" #: extensions/base/translate.py:177 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Completed deletion of translation page \"{article}\"" -msgstr "Zmieniono widoczność wersji na stronie {article} " +msgstr "Zmieniono widoczność wersji na stronie „{article}”" #: extensions/base/translate.py:188 #, fuzzy, python-brace-format @@ -693,13 +693,13 @@ msgid "{field} field changed to: {desc}" msgstr "pole „{field}” zostało zmienione na: {desc}" #: extensions/base/curseprofile.py:58 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s " "profile." msgstr "" -"[{author}]({author_url}) edytował(a) pole {field} na profilu użytkownika " -"[{target}]({target_url}). *({desc})*" +"[{author}]({author_url}) wyczyścił(a) pole {field} na profilu użytkownika " +"[{target}]({target_url})" #: extensions/base/curseprofile.py:60 #, python-brace-format diff --git a/locale/pt-br/LC_MESSAGES/formatters.mo b/locale/pt-br/LC_MESSAGES/formatters.mo index cefe58605e6319ab2d69b2c7a5b35ffa5121409e..cab7332131d11522f6b6c53aab91730343c2d09e 100644 GIT binary patch delta 8127 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 diff --git a/locale/pt-br/LC_MESSAGES/formatters.po b/locale/pt-br/LC_MESSAGES/formatters.po index 028c343..f11b0f5 100644 --- a/locale/pt-br/LC_MESSAGES/formatters.po +++ b/locale/pt-br/LC_MESSAGES/formatters.po @@ -21,7 +21,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: 2021-05-31 21:54+0000\n" +"PO-Revision-Date: 2021-07-11 12:33+0000\n" "Last-Translator: Eduaddad \n" "Language-Team: Portuguese (Brazil) \n" @@ -703,7 +703,7 @@ msgid "" "profile." msgstr "" "[{author}]({author_url}) limpou o {field} no perfil de " -"[{target}]({target_url})" +"[{target}]({target_url})." #: extensions/base/curseprofile.py:60 #, python-brace-format @@ -742,19 +742,19 @@ msgid "Left a comment on their own profile" msgstr "Deixou um comentário em seu próprio perfil" #: extensions/base/curseprofile.py:97 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile." msgstr "" "[{author}]({author_url}) deixou um [comentário]({comment}) no perfil de " -"{target}" +"{target}." #: extensions/base/curseprofile.py:100 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on their own profile." msgstr "" -"[{author}]({author_url}) deixou um [comentário]({comment}) no próprio perfil" +"[{author}]({author_url}) deixou um [comentário]({comment}) no próprio perfil." #: extensions/base/curseprofile.py:113 #, python-brace-format @@ -766,19 +766,19 @@ msgid "Edited a comment on their own profile" msgstr "Editou um comentário em seu próprio perfil" #: extensions/base/curseprofile.py:128 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile." msgstr "" "[{author}]({author_url}) editou um [comentário]({comment}) no perfil de " -"{target}" +"{target}." #: extensions/base/curseprofile.py:131 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on their own profile." msgstr "" -"[{author}]({author_url}) editou um [comentário]({comment}) no próprio perfil" +"[{author}]({author_url}) editou um [comentário]({comment}) no próprio perfil." #: extensions/base/curseprofile.py:144 #, python-brace-format @@ -790,22 +790,22 @@ msgid "Replied to a comment on their own profile" msgstr "Respondeu a um comentário em seu próprio perfil" #: extensions/base/curseprofile.py:159 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s " "profile." msgstr "" "[{author}]({author_url}) respondeu a um [comentário]({comment}) no perfil de " -"{target}" +"{target}." #: extensions/base/curseprofile.py:162 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on their own " "profile." msgstr "" "[{author}]({author_url}) respondeu a um [comentário]({comment}) no próprio " -"perfil" +"perfil." #: extensions/base/curseprofile.py:175 #, python-brace-format @@ -817,21 +817,22 @@ msgid "Deleted a comment on their own profile" msgstr "Excluiu um comentário em seu próprio perfil" #: extensions/base/curseprofile.py:197 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s " "profile.{reason}" msgstr "" "[{author}]({author_url}) excluiu um [comentário]({comment}) no perfil de " -"{target}" +"{target}.{reason}" #: extensions/base/curseprofile.py:200 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted a [comment]({comment}) on their own profile." "{reason}" msgstr "" -"[{author}]({author_url}) excluiu um [comentário]({comment}) no próprio perfil" +"[{author}]({author_url}) excluiu um [comentário]({comment}) no próprio " +"perfil.{reason}" #: extensions/base/curseprofile.py:214 #, python-brace-format @@ -843,18 +844,22 @@ msgid "Purged a comment on their own profile" msgstr "Limitou um comentário em seu próprio perfil" #: extensions/base/curseprofile.py:230 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) purged a comment on [{target}]({link})'s profile." "{reason}" -msgstr "[{author}]({author_url}) limpou um comentário no perfil de {target}" +msgstr "" +"[{author}]({author_url}) limpou um comentário no perfil de " +"[{target}]({link}).{reason}" #: extensions/base/curseprofile.py:233 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) purged a comment on [their own]({link}) profile." "{reason}" -msgstr "[{author}]({author_url}) limpou um comentário no próprio perfil" +msgstr "" +"[{author}]({author_url}) limpou um comentário no [próprio " +"perfil]{link}.{reason}" #: extensions/base/renameuser.py:38 #, python-brace-format @@ -1541,18 +1546,16 @@ msgid "{target} got autopromoted to a new usergroup" msgstr "{target} foi promovido para um novo grupo de usuários" #: extensions/base/mediawiki.py:844 -#, fuzzy msgid "Added group" msgid_plural "Added groups" -msgstr[0] "Removido de" -msgstr[1] "Removido de" +msgstr[0] "Adicionado grupo" +msgstr[1] "Adicionado grupos" #: extensions/base/mediawiki.py:846 -#, fuzzy msgid "Removed group" msgid_plural "Removed groups" -msgstr[0] "Removido de" -msgstr[1] "Removido de" +msgstr[0] "Removido grupo" +msgstr[1] "Removido grupos" #: extensions/base/mediawiki.py:860 #, python-brace-format @@ -1570,25 +1573,25 @@ msgid "Added to {added}." msgstr "Adicionado a {added}." #: extensions/base/mediawiki.py:865 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Removed from {removed}." -msgstr "Removido de" +msgstr "Removido de {removed}." #: extensions/base/mediawiki.py:866 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) changed group membership for [{target}]" "({target_url}): {group_changes}{comment}" msgstr "" -"[{author}]({author_url}) alterou os privilégios do usuário [{target}]" -"({target_url}) de {old_groups} para {new_groups}{comment}" +"[{author}]({author_url}) mudou a associação do grupo para " +"[{target}]({target_url}): {group_changes}{comment}" #: extensions/base/mediawiki.py:870 -#, fuzzy, python-brace-format +#, python-brace-format msgid "The system autopromoted [{target}]({target_url}) to {added}.{comment}" msgstr "" -"{author} autopromoveu [{target}]({target_url}) de {old_groups} para " -"{new_groups}{comment}" +"O sistema foi promovido automaticamente [{target}]({target_url}) para " +"{added}.{comment}" #: extensions/base/mediawiki.py:883 #, python-brace-format @@ -1689,7 +1692,7 @@ msgstr "" "modelo de conteúdo não padrão {new}{comment}" #: extensions/base/mediawiki.py:1072 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Created the tag \"{tag}\"" msgstr "Criou uma etiqueta \"{tag}\"" @@ -1701,7 +1704,7 @@ msgstr "" "[{author}]({author_url}) criou a [etiqueta]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1103 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deleted the tag \"{tag}\"" msgstr "Excluiu uma etiqueta \"{tag}\"" @@ -1723,7 +1726,7 @@ msgstr "" "[{author}]({author_url}) excluiu a [etiqueta]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1128 -#, fuzzy, python-brace-format +#, python-brace-format msgid "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revision or log entry{comment}" @@ -1731,16 +1734,16 @@ msgid_plural "" "[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed " "it from {count} revisions and/or log entries{comment}" msgstr[0] "" -"[{author}]({author_url}) importou [{article}]({article_url}) com {count} " -"revisão{comment}" +"[{author}]({author_url}) excluiu [etiqueta]({tag_url}) \"{tag}\" e o removeu " +"{count} revisão ou entrada de registro{comment}" msgstr[1] "" -"[{author}]({author_url}) importou [{article}]({article_url}) com {count} " -"revisões{comment}" +"[{author}]({author_url}) excluiu [etiqueta]({tag_url}) \"{tag}\" e o removeu " +"{count} revisões e/ou entradas de registro{comment}" #: extensions/base/mediawiki.py:1145 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Activated the tag \"{tag}\"" -msgstr "Ativou uma etiqueta \"{tag}\"" +msgstr "Ativou a etiqueta \"{tag}\"" #: extensions/base/mediawiki.py:1154 #, python-brace-format @@ -1750,9 +1753,9 @@ msgstr "" "[{author}]({author_url}) ativou a [etiqueta]({tag_url}) \"{tag}\"{comment}" #: extensions/base/mediawiki.py:1173 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Deactivated the tag \"{tag}\"" -msgstr "Desativou uma etiqueta \"{tag}\"" +msgstr "Desativou a etiqueta \"{tag}\"" #: extensions/base/mediawiki.py:1182 #, python-brace-format diff --git a/locale/ru/LC_MESSAGES/formatters.mo b/locale/ru/LC_MESSAGES/formatters.mo index 577c3eec08a9dbb5742c20e1b0479a859fb1e54d..467a17e51b06418d1d437bf4000a0a15e89ca0a1 100644 GIT binary patch delta 6852 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 ddzYGmnnkSLf|`6ftFjy_={(Q7BF*d(`6nz~w= zDXnxF+fOaaTDP^fRa&}CVb=fs`JUsve7^7JdCob{?L5!8426i_(<3G*0O#o=E@Fsd@f9)|H=}=V!5|{36z28Efz%R^fV{z^7TC z?@?2Q^p!+hc#v^pwI(SwU}M&1M;^=Gj0PsKBCn!b(hSbzZ5+iz?7)#FDV@T3jCwaQ zI`9T#K;N*5_ETz_^{|AkWlPzY0~rG;K=u}2+q+c=4bWyi~RWsGzzV*v9QGjtFAOE0uE|8e6-aPEoR_oMgtvKnWGp}dVXF$ zkI}#y`j=k!5gpq@V@Nfej2UUq7;%5b054?Jv!YcYr6Ceq6%6K4=1Ve-W*5$3bYvaR z=2p&R19!)Dw@^`9$9Od5jFDE->*!Dkqr5lUb2?p;R_4A`kf^NSU+m2<@)PaNU)(s7 zv04|?c1dN7k*r|cw=qBeTz>x5+?}lE{JV?+e4Ll>XWU=OR_Mq=bBU8BhO!y!$XV;pJpkaXH@)G*5V$<)F0#^M(<-}gE@mQ@jQ0xl+qY3#;dcCJflWb2-8;uVYr{>C9Z$wh8W^Vo;a z@LcZWXb$^vHUkec&L85b>}?N@IqNHgT|g#eOM`=P+Kt$2gbOOmlQ_(P@R0mPq_X!L6Kpy2rsU_$`mO zgnz?kR#c4mZ4PCr-o?~j!PvItj7L-JjFhh7B%aS*yqujal-La`IFldpdX6gSW?Zm? zSFxv7Vrtehp7{ZqoOGsEC-64Lh(6~z9Ax-0@&_3msBc=fa|+FN>ULK4$fh&u-OAV< z^@nFOSQsM_Cm!V$+|N6BsRyl->09?(r!np4TAN4s>Z=3TH9?3cd!xn@Mu;x%xIt~qvAHK#S_?=CsV~~1gmfi zGCcWZGJ8_IXIf}&%mvp&Z$?z@`N z&`L(f9%ox_VhKNH4Df&KY5k=tmUuJvVH1vLjARx&@=nIo|CZ6fAzD|dofX!AGg*>b{V_2j3rFXyt1n;EP4EGy7@ zP0QJW?{OIq@e(ez*ZT2m4r8|qv+s}vj77VK@g6yFq35rYY3M~+&mZAc^6&CA4w+yo zP5B*cC%N^~?9k9Y?dX{IhJ$fAVzJG|#0R$-bP)*ex6Ke3hwL zhXxiTCd37d2H#>dP+?m36RH*K$PZ;Jj%QRfpGWac##DYllaabymObOU83Q{&uZlGI zaHeR$XoB%wC$?aJ*5zczqMpTWT*5l>eYiy;ru>hL?ei6H;t8{|p0DRf z`FCkOrHHX65E=HScq=*-WS1ntgpgPwOuY zSYnji$T&a#wrtJ3%|FQxxjp-uZ?V*ZlwZ44Pgh7x)4i4&sIn}+k}M+K)R*)q=d=A? z+0;J4v*f?w3p~vOox+NDYmAq1C|~8dtiL?#*fh?U-_024SfifIzZE26b)Ruh_U0?2 z&YIh-!Q1(%j=jlfc=P?9Cu=;AjpQy`cd5zGvV0l!EtMG6X0GE@PFu$Y%xMn`=l4G1uOyCLlU4XOW8{~4 z4kjVJ$Y^lXquHbSGh;1GTwB~Vh4iJwIt6_n^HZC97>i`>;}#@)IBDUgH|go55l>`a zDjzT^?(nN@N}ptmw8#2v(XHl8`AdK8D_DnjbCCSv|I2222Mh7Adp(s+&1S~xZMh-) zSv`lpk>A7jxaR5X7t*4Q*&A*z&r{z2nXKZKoFM-Rn{(i^*}H!-kCk7;i){==V$UgF=PzL+mMi^Za!u&|5o_36A;#IAWu z)E03J5XXzJ#Uyd02ICkh#)@BvJEDhitQ4{O?T+G`uY{Y$eInMvxnh{GS&D~8Tl@}K zo#%t|VFdPM9OUx+xWiwDIVF;LWZZMM8HaI6gT1{Kv@Dc4A4fIQt_ql9iN==Fjr- zf6Z;N<) z#qn82@ijU%PrsD=1BZ)S@_cVL7PpJ1#47Q)cu&O9QZz57;_Z5P{uNXa<>I6KfEe{_j=ZPm-%eA+%qliCT;`n1m@r^kxPydtEoWCL3KUKVupLivA z0{@(+zvm!vv>Q&~QEb2#Jiv(}ju{!LvGO=(WfZ@LkCASX=Z|o{PJYb=S1Q~lekU#w zFN-){5L-n}@rl?W&K5((x8i@IzlfuuxJhgg%S9X;#qT#f*tkWd4Go$dS8KzS?au4E wVbKLoG+Tb~*8?}~oin>?b7}dre5(A(oeRr1Mt;NW1>Ji6KLxBw(*OVf diff --git a/locale/ru/LC_MESSAGES/formatters.po b/locale/ru/LC_MESSAGES/formatters.po index 92eb93b..5b719d8 100644 --- a/locale/ru/LC_MESSAGES/formatters.po +++ b/locale/ru/LC_MESSAGES/formatters.po @@ -21,7 +21,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: 2021-05-31 21:54+0000\n" +"PO-Revision-Date: 2021-07-11 12:33+0000\n" "Last-Translator: Philo04 \n" "Language-Team: Russian \n" @@ -49,7 +49,7 @@ msgstr "Добавлено" #: src/api/util.py:141 extensions/base/discussions.py:247 #: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 msgid "Unregistered user" -msgstr "Незарегистрированный пользователь" +msgstr "Незарегистрированный участник" #: src/api/util.py:160 msgctxt "recent changes Tags" @@ -1576,25 +1576,23 @@ msgid "{target} got autopromoted to a new usergroup" msgstr "Участник {target} был автоматически повышен до новой группы участников" #: extensions/base/mediawiki.py:844 -#, fuzzy msgid "Added group" msgid_plural "Added groups" -msgstr[0] "Удалено" -msgstr[1] "Удалено" -msgstr[2] "Удалено" +msgstr[0] "Добавленная группа" +msgstr[1] "Добавленные группы" +msgstr[2] "Добавленные группы" #: extensions/base/mediawiki.py:846 -#, fuzzy msgid "Removed group" msgid_plural "Removed groups" -msgstr[0] "Удалено" -msgstr[1] "Удалено" -msgstr[2] "Удалено" +msgstr[0] "Удалённая группа" +msgstr[1] "Удалённые группы" +msgstr[2] "Удалённые группы" #: extensions/base/mediawiki.py:860 #, python-brace-format msgid "Added to {added} and removed from {removed}." -msgstr "" +msgstr "Добавил в {added} и убрал из {removed}." #: extensions/base/mediawiki.py:861 extensions/base/mediawiki.py:863 #: extensions/base/mediawiki.py:865 extensions/base/mediawiki.py:872 @@ -1604,12 +1602,12 @@ msgstr ", " #: extensions/base/mediawiki.py:863 #, python-brace-format msgid "Added to {added}." -msgstr "" +msgstr "Добавил в {added}." #: extensions/base/mediawiki.py:865 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Removed from {removed}." -msgstr "Удалено" +msgstr "Убрал из {removed}." #: extensions/base/mediawiki.py:866 #, python-brace-format diff --git a/locale/tr/LC_MESSAGES/formatters.mo b/locale/tr/LC_MESSAGES/formatters.mo index 1c0ad0df644914788e93271ec27850910fe0813c..958f7ff9196c9c28220f33cf35b78b3045bb5524 100644 GIT binary patch literal 4048 zcmbuB&u<$=6vu~Bpcp7n%I{y(6jg27joS*L)@e#Z;Ekcv1U#DR0*R0I;pcaV_kAPyi<4?Urt$_)wr01kX-z5Wrm>sabao6qig=FNNG z_hw#h?ArbX!Sw>}=WsuG7a<40|3GtnxeedIufT`E@4yGZAL934zx zxZ&sED)=k-33%pS*aEMCX1#qd`VMG=qhJGk3?w@Uc?#GKeukJW@L|0Fct0VJfWLtz z?i-*P|2Js-BPl|j0d|0g!M)%)a2b3F{1$u>`~#c={{<(&S0Ua$@FVab_zh_6Uk5Gl zCTM=&1<{`XkAok83*brccknp46O%p#&w!V~>tF%Au#=F};7?!)+<{v@_>%fXsuh!g%c9pRD{(rs%9Iwi%h!gwrog_C zrCUY^w5WWqdk)n;UNuuCu8jr7;ekVSnbQe;^r>bA*Q^o|BPNYAeMe-a?T1oxg;9)F zl@9|RT`3FLiT&zwy2pVjhGAIWZ$`Z-K4Zf!(*k#WSqjXUmKu?du^jDKa!gfVs(Y=X zuiA4UC|Tt8mI24f!q_Njo9!7jjaDs3OqPOLpt* zo;a0nT|Af@SG*Ca`53EoXAu{BYp>5r1C-(&Xzw*kx6k@Ll{`Q`)d01gm=+Zme?O0s z_rgHlZMj?W`FZKq%pst8P{r2D=Lv#B6;nGpJ_EYUO2KyXhb$=nU2bb@+Of`Y6<}Xx z=yIqkA}G`Si}q=Ia^*k@Thv$D$^|9iSg(bpz*_b*G_^2qE%J-POtL0%9A@ZS+3`gy zH*Zaj(=+p#-1Nb>=jXDiSr%w(IX;kmm7!B-XJ_f$crHs%WOL)wv!})oY)-q>a$CDFft*b#Moo<~Ud}KvbM8Vf14o~CgG%*BeWtVJcC5@bWOyjf&Fh1Qe zn!)jt%1!68oluXA98OL6ID{oUtW^<$=I`q?G!}By$fW|V$IdQKS;so#Oe96FEOUT6 zXdfARtRQr1!3`C2ttqS?WT>o0uff>SQQCYQlXTA*Ju;el(>l#1S4Z(yUh`zbBAn3xP4A;Ukmyxpl@4HMQa% zPmoJoy&@z<5}4vT%3xw-npYH4y()C&nRKt)&WGuc9@2&AphBlA64&XeiWydG)HOu8 zL@S|-@EUa+NlH5G4$D1R=8@>wSuHB&oKWO{ D)%8D+ delta 69 zcmca0f1KIko)F7a1|VPrVi_P-0b*t#)&XJ=umIv-prj>`2C0F8%{m;tj7(e%03GxO AYybcN diff --git a/locale/tr/LC_MESSAGES/formatters.po b/locale/tr/LC_MESSAGES/formatters.po index c421667..aa80895 100644 --- a/locale/tr/LC_MESSAGES/formatters.po +++ b/locale/tr/LC_MESSAGES/formatters.po @@ -8,102 +8,105 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-22 18:48+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2021-07-11 12:33+0000\n" +"Last-Translator: Doğukan Karakaş \n" +"Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.6.2\n" #: src/api/util.py:61 src/api/util.py:66 msgid "__Only whitespace__" -msgstr "" +msgstr "__Sadece boş alan__" #: src/api/util.py:71 msgid "Removed" -msgstr "" +msgstr "Kaldırıldı" #: src/api/util.py:73 msgid "Added" -msgstr "" +msgstr "Eklendi" #: src/api/util.py:94 src/api/util.py:126 src/api/util.py:133 #: src/api/util.py:141 extensions/base/discussions.py:247 #: extensions/base/discussions.py:264 extensions/base/abusefilter.py:45 msgid "Unregistered user" -msgstr "" +msgstr "Kayıtsız kullanıcı" #: src/api/util.py:160 msgctxt "recent changes Tags" msgid "Tags" -msgstr "" +msgstr "Etiketler" #: src/api/util.py:162 msgid "**Added**: " -msgstr "" +msgstr "**Eklendi**: " #: src/api/util.py:163 msgid " and {} more\n" -msgstr "" +msgstr " ve {} fazlası\n" #: src/api/util.py:165 msgid "**Removed**: " -msgstr "" +msgstr "**Kaldırıldı**: " #: src/api/util.py:166 msgid " and {} more" -msgstr "" +msgstr " ve {} fazlası" #: src/api/util.py:168 msgid "Changed categories" -msgstr "" +msgstr "Kategoriler değiştirildi" #: extensions/base/cargo.py:37 #, python-brace-format msgid "Created the Cargo table \"{table}\"" -msgstr "" +msgstr "Kargo tablosu \"{table}\" oluşturuldu" #: extensions/base/cargo.py:45 #, python-brace-format msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "" +msgstr "[{author}]({author_url}), \"{table}\" Kargo tablosunu oluşturdu" #: extensions/base/cargo.py:60 #, python-brace-format msgid "Recreated the Cargo table \"{table}\"" -msgstr "" +msgstr "Kargo tablosu \"{table}\" tekrar oluşturuldu" #: extensions/base/cargo.py:68 #, python-brace-format msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" msgstr "" +"[{author}]({author_url}), \"{table}\" Kargo tablosunu tekrar oluşturuldu" #: extensions/base/cargo.py:83 #, python-brace-format msgid "Replaced the Cargo table \"{table}\"" -msgstr "" +msgstr "Kargo tablosu \"{table}\" değiştirildi" #: extensions/base/cargo.py:91 #, python-brace-format msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "" +msgstr "[{author}]({author_url}), \"{table}\" Kargo tablosunu değiştirdi" #: extensions/base/cargo.py:105 #, python-brace-format msgid "Deleted the Cargo table \"{table}\"" -msgstr "" +msgstr "Kargo tablosu \"{table}\" silindi" #: extensions/base/cargo.py:112 #, python-brace-format msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "" +msgstr "[{author}]({author_url}), \"{table}\" Kargo tablosunu sildi" #: extensions/base/translate.py:41 #, python-brace-format msgid "Marked \"{article}\" for translation" -msgstr "" +msgstr "\"{article}\" çeviri için işaretlendi" #: extensions/base/translate.py:55 #, python-brace-format @@ -111,11 +114,13 @@ msgid "" "[{author}]({author_url}) marked [{article}]({article_url}) for " "translation{comment}" msgstr "" +"[{author}]({author_url}), [{article}]({article_url}) makalesini çeviri için " +"işaretledi{comment}" #: extensions/base/translate.py:70 #, python-brace-format msgid "Removed \"{article}\" from the translation system" -msgstr "" +msgstr "\"{article}\" çeviri sisteminden kaldırıldı" #: extensions/base/translate.py:80 #, python-brace-format @@ -123,11 +128,15 @@ msgid "" "[{author}]({author_url}) removed [{article}]({article_url}) from the " "translation system{comment}" msgstr "" +"[{author}]({author_url}), [{article}]({article_url}) makalesini çeviri " +"sisteminden kaldırdı{comment}" #: extensions/base/translate.py:95 #, python-brace-format msgid "Completed moving translation pages from \"{article}\" to \"{target}\"" msgstr "" +"\"{article}\" çeviri sayfasını \"{target}\" sayfasına taşıma başarıyla " +"tamamlandı" #: extensions/base/translate.py:106 #, python-brace-format @@ -135,11 +144,14 @@ msgid "" "[{author}]({author_url}) completed moving translation pages from *{article}* " "to [{target}]({target_url}){comment}" msgstr "" +"[{author}]({author_url}), *{article}* çeviri sayfalarını başarıyla " +"[{target}]({target_url}) sayfasına taşıdı{comment}" #: extensions/base/translate.py:121 #, python-brace-format msgid "Encountered a problem while moving \"{article}\" to \"{target}\"" msgstr "" +"\"{article}\" makalesini \"{target}\" hedefine taşırken bir sıkıntı yaşandı" #: extensions/base/translate.py:133 #, python-brace-format @@ -147,13 +159,15 @@ msgid "" "[{author}]({author_url}) encountered a problem while moving [{article}]" "({article_url}) to [{target}]({target_url}){comment}" msgstr "" +"[{author}]({author_url}), [{article}]({article_url}) makalesini " +"[{target}]({target_url}) hedefine taşırken bir sıkıntı yaşadı{comment}" #: extensions/base/translate.py:149 #, python-brace-format msgid "" "Failed to delete \"{article}\" which belongs to translatable page " "\"{target}\"" -msgstr "" +msgstr "Çevrilebilir \"{target}\" sayfasına ait olan \"{article}\" silinemedi" #: extensions/base/translate.py:161 #, python-brace-format @@ -161,11 +175,13 @@ msgid "" "[{author}]({author_url}) failed to delete [{article}]({article_url}) which " "belongs to translatable page [{target}]({target_url}){comment}" msgstr "" +"[{author}]({author_url}), [{target}]({target_url}) çeviri sayfasına ait olan " +"[{article}]({article_url}) makalesini silemedi{comment}" #: extensions/base/translate.py:177 #, python-brace-format msgid "Completed deletion of translation page \"{article}\"" -msgstr "" +msgstr "Çeviri sayfası \"{article}\" başarıyla silindi" #: extensions/base/translate.py:188 #, python-brace-format diff --git a/locale/tr/LC_MESSAGES/misc.mo b/locale/tr/LC_MESSAGES/misc.mo new file mode 100644 index 0000000000000000000000000000000000000000..ea4766c7cd943d9ae2235da017b110954b2546c0 GIT binary patch literal 1232 zcmZXS%We}f6ow6y+i)wlvH{5~kU+%=tx#1>n~J1K+NenrC21*aB4@@VLuTyA;}E)J z2M>U{1R-7^@B~OfV#gKT1204V42b>h0jGg)fVl2`tbYVT8>6?teX;f!46Mb#9x$*c>>u9(1K(&r;0grV zBe2yd@ZNYAJcn3~Mq0WwP+Bw^B;8a!LjyrF+!$XZq%gG2rRxil^+HE!cR$T@M>Lh{ zP~VdsvZhqa7ty?^9Bw=%Nu{wV8S?eW|Q9VJ_`BUN9L?Tskk z$rPhWFaA-{>alPPE4XZ1=nxLGX}zaAUf8BLtInE}?ccJhqN}uFrLg6>EYoX+tgdWo zRm!X?o_M&3Ww{YHeUM96S*gsjX}VsvONH5o<;|Q`|CLI^1pC$#UD6ZfGZyCf-FP`d-ItDwA+UvK!qYOlqg) zxcy`R?+ca5@pd*f+A0-Fx$!0E5_hasC5@2K+in+{H{z*Dc75*2CF-=f4uwf=)$?p| zT!*JW5}M_tqg+q6Y`WO=j8*Y_n)@uTbP(E9c1LNLnqQ*PG$rZv6rEeLcG#MbLPxJ~ zUo_!81ihPBNX%PkpKU>1-sa(O00vs;oz8F&xcpxSad$X4@XshYa8HvDU-?{`;Q-d} x+h|hUP_h?{%rvRTu9_4hdrfMw&;A$DaFc4r13L%auF`0}$$#j=Nu@ci{tM$eOj-Z{ literal 0 HcmV?d00001 diff --git a/locale/tr/LC_MESSAGES/misc.po b/locale/tr/LC_MESSAGES/misc.po index 9c5e2a3..f1dab71 100644 --- a/locale/tr/LC_MESSAGES/misc.po +++ b/locale/tr/LC_MESSAGES/misc.po @@ -8,76 +8,81 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-11-18 14:13+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2021-07-11 12:33+0000\n" +"Last-Translator: Doğukan Karakaş \n" +"Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.6.2\n" #: src/misc.py:45 msgid "Location" -msgstr "" +msgstr "Konum" #: src/misc.py:45 msgid "About me" -msgstr "" +msgstr "Hakkımda" #: src/misc.py:45 msgid "Google link" -msgstr "" +msgstr "Google bağlantısı" #: src/misc.py:45 msgid "Facebook link" -msgstr "" +msgstr "Facebook bağlantısı" #: src/misc.py:45 msgid "Twitter link" -msgstr "" +msgstr "Twitter bağlantısı" #: src/misc.py:45 msgid "Reddit link" -msgstr "" +msgstr "Reddit bağlantısı" #: src/misc.py:45 msgid "Twitch link" -msgstr "" +msgstr "Twitch bağlantısı" #: src/misc.py:45 msgid "PSN link" -msgstr "" +msgstr "PSN bağlantısı" #: src/misc.py:45 msgid "VK link" -msgstr "" +msgstr "VK bağlantısı" #: src/misc.py:45 msgid "XBL link" -msgstr "" +msgstr "XBL bağlantısı" #: src/misc.py:45 msgid "Steam link" -msgstr "" +msgstr "Steam bağlantısı" #: src/misc.py:45 msgid "Discord handle" -msgstr "" +msgstr "Discord adı" #: src/misc.py:45 msgid "Battle.net handle" -msgstr "" +msgstr "Battle.net adı" #: src/misc.py:114 msgid "" "\n" "__And more__" msgstr "" +"\n" +"__Ve dahası__" #: src/misc.py:271 msgid "Unknown" -msgstr "" +msgstr "Bilinmiyor" #: src/misc.py:273 msgid "unknown" -msgstr "" +msgstr "bilinmiyor" diff --git a/locale/tr/LC_MESSAGES/rcgcdw.mo b/locale/tr/LC_MESSAGES/rcgcdw.mo index 42d30c5d487a4cda22f58b9028e0048a2b448c67..0532ad9e6cdcc6ad9e8d9b428f71b50071dd1372 100644 GIT binary patch delta 146 zcmew(*~^k~Pl#nI0}wC)u?!IF05K~N+W;{L1OTx(5C;NrCnEzxCXki{;?F=f5P|gp zDFpD#S4c@MPAV7P0T&A@#uU800IUdMgRZ+ literal 3324 zcmcJROKclO7{{kjC>YA4P@p`Aib{#wjcL_G3DhIQS*F6a0R-{xi58^WVYyz)g22^Axxl zb3Wv*A=BV9SkHhDf+xX;!872aU>)27E)M7Kg7;$n3HT8B8CV9t1rLK;q2x4J1O@mt zSOmA+!`O%59C!r03ce1$1Yx9a0o(z;2fhzqKL?-0JPju(4oAV=;5cWegWbi z`(e2L<8b~f2odZz5T>y|!Cl~AAlbd+e#V{vN5F01VUYZs8LpoL>HP~JoxccP055^B zfq#Q$0Su{UPvdzE58RFGWGhI1kgqhTzLp0}VK6ryNLM^4C-F$9 zkNUdeNtZ{VH0d-;rzfVl5kXDza z;DK!2Mu1w%))CR=a$q#qk>w5Hk^gIUrj33Z1>;P(&KpVmv%C};PvNSK%v6q7@~zR- zjBILSonly1u5&c1g-%Ild1`vfnUM>MlIG-vm05nakehLeQ%*j|PfTTt6T8n%ohqaz zMQEK8T1@B*t4)?4o12{Er*g#tKU65@CMJ*M^7)y%W`W{#ff5J)ychMFQ;DBfyKpj zO6?|$xALORG=02$kXP!$gwl@Bm5wVV8ijCuAs^T>H_L z%QiBR-w@%T$EK`qpnrS3zV7y{LX%ThF0(@0mkr6)q6(-Gm5;`(SiZlsC<9-jA76oS z?5y@yCF(%5;RsA2tFE<&^)G49k9fPk7q zZ|afHPKx%RXR*7uHel>51j3%Vwt(k}rI2%@=Dr85X8o>CcSZOzg!d~kbEE&>>q+A} z&6tOxU8RH|?>tn#t5#Iq)cEy8^_N21UkW5|i$xTUhai8493h_gnzq&Lh~GFi?yv&Z z7<|XyL5j^foszpcY!71-a2a}vmzCjRf64Th8t}Bg#L@K?{#a$!7;=-y-K5hC7p+|d zu3Y5kxC$wOI|blKd9z8olEx(0C?(AGBocHBZF;;V!I n@Z4gdY#7(Jgm?dnE8Wj)m8>l$j;}MjW}%FZBfN${17iOG816P1 diff --git a/locale/tr/LC_MESSAGES/rcgcdw.po b/locale/tr/LC_MESSAGES/rcgcdw.po index 691f0dc..a728c17 100644 --- a/locale/tr/LC_MESSAGES/rcgcdw.po +++ b/locale/tr/LC_MESSAGES/rcgcdw.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-11-18 14:13+0100\n" -"PO-Revision-Date: 2021-04-14 14:22+0000\n" -"Last-Translator: Deveb \n" +"PO-Revision-Date: 2021-07-11 12:33+0000\n" +"Last-Translator: Doğukan Karakaş \n" "Language-Team: Turkish \n" "Language: tr\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4.2\n" +"X-Generator: Weblate 4.6.2\n" #: src/rc_formatters.py:28 msgid "None" @@ -598,7 +598,7 @@ msgstr "" #: src/rc_formatters.py:500 src/rc_formatters.py:768 msgid "No description provided" -msgstr "" +msgstr "Açıklama sağlanmamış" #: src/rc_formatters.py:524 msgid "(N!) " diff --git a/locale/tr/LC_MESSAGES/redaction.mo b/locale/tr/LC_MESSAGES/redaction.mo index b709ff143f545131d216e417ed95f306929d4de9..b5fb7c1a1da31d3c37da8b1f556ffe8df6992ff4 100644 GIT binary patch delta 143 zcmeys{Ea!{o)F7a1|VPpVi_RT0b*7lwgF-g2moSsAPxlLK1K$HNFdD%#4mtsAOhb5f3M LEIP6gL@@vWxoI6o delta 135 zcmeyy{DIlxo)F7a1|VPrVi_P-0b*t#)&XJ=umIw1KuJp=4N?OG6C>=^LUf&rQWHxu z^Ye6F5=&C86pRdv40H_*b&bpw42`V}EVK=PVB(Y#q4LzE9H0ulw4%)7Y`x-w#N^4+ Mj3-!)^bENe0KJwQ5&!@I diff --git a/locale/tr/LC_MESSAGES/redaction.po b/locale/tr/LC_MESSAGES/redaction.po index 2bd0db8..e63040f 100644 --- a/locale/tr/LC_MESSAGES/redaction.po +++ b/locale/tr/LC_MESSAGES/redaction.po @@ -8,16 +8,18 @@ msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-11-18 15:17+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2021-07-11 12:33+0000\n" +"Last-Translator: Doğukan Karakaş \n" +"Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.1\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.6.2\n" #: src/discord/redaction.py:59 src/discord/redaction.py:62 #: src/discord/redaction.py:67 msgid "Removed" -msgstr "" +msgstr "Kaldırıldı" From 76b41a1ed363114be6709d8de83cbd885a4c24db Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 11 Jul 2021 14:35:18 +0200 Subject: [PATCH 171/173] Updated translation strings --- locale/de/LC_MESSAGES/formatters.po | 144 +++++++++--------- locale/de/LC_MESSAGES/misc.po | 34 ++--- locale/de/LC_MESSAGES/rcgcdw.po | 8 +- locale/de/LC_MESSAGES/redaction.po | 16 +- locale/es/LC_MESSAGES/formatters.po | 142 +++++++++--------- locale/es/LC_MESSAGES/misc.po | 34 ++--- locale/es/LC_MESSAGES/rcgcdw.po | 8 +- locale/es/LC_MESSAGES/redaction.po | 16 +- locale/fr/LC_MESSAGES/formatters.po | 142 +++++++++--------- locale/fr/LC_MESSAGES/misc.po | 34 ++--- locale/fr/LC_MESSAGES/rcgcdw.po | 8 +- locale/fr/LC_MESSAGES/redaction.po | 16 +- locale/hi/LC_MESSAGES/formatters.po | 142 +++++++++--------- locale/hi/LC_MESSAGES/misc.po | 34 ++--- locale/hi/LC_MESSAGES/rcgcdw.po | 8 +- locale/hi/LC_MESSAGES/redaction.po | 16 +- locale/lol/LC_MESSAGES/formatters.po | 142 +++++++++--------- locale/lol/LC_MESSAGES/misc.po | 34 ++--- locale/lol/LC_MESSAGES/rcgcdw.po | 8 +- locale/lol/LC_MESSAGES/redaction.po | 11 +- locale/pl/LC_MESSAGES/formatters.po | 156 ++++++++++---------- locale/pl/LC_MESSAGES/misc.po | 34 ++--- locale/pl/LC_MESSAGES/rcgcdw.po | 12 +- locale/pl/LC_MESSAGES/redaction.po | 16 +- locale/pt-br/LC_MESSAGES/formatters.po | 164 ++++++++++----------- locale/pt-br/LC_MESSAGES/misc.po | 34 ++--- locale/pt-br/LC_MESSAGES/rcgcdw.po | 8 +- locale/pt-br/LC_MESSAGES/redaction.po | 16 +- locale/ru/LC_MESSAGES/formatters.po | 148 +++++++++---------- locale/ru/LC_MESSAGES/misc.po | 34 ++--- locale/ru/LC_MESSAGES/rcgcdw.po | 8 +- locale/ru/LC_MESSAGES/redaction.po | 16 +- locale/templates/formatters.pot | 142 +++++++++--------- locale/templates/misc.pot | 34 ++--- locale/templates/rcgcdw.pot | 8 +- locale/templates/redaction.pot | 11 +- locale/uk/LC_MESSAGES/formatters.po | 142 +++++++++--------- locale/uk/LC_MESSAGES/misc.po | 34 ++--- locale/uk/LC_MESSAGES/rcgcdw.po | 8 +- locale/uk/LC_MESSAGES/redaction.po | 16 +- locale/zh-hans/LC_MESSAGES/formatters.po | 180 ++++++++++++----------- locale/zh-hans/LC_MESSAGES/misc.po | 34 ++--- locale/zh-hans/LC_MESSAGES/rcgcdw.po | 8 +- locale/zh-hans/LC_MESSAGES/redaction.po | 16 +- locale/zh-hant/LC_MESSAGES/formatters.po | 142 +++++++++--------- locale/zh-hant/LC_MESSAGES/misc.po | 34 ++--- locale/zh-hant/LC_MESSAGES/rcgcdw.po | 8 +- locale/zh-hant/LC_MESSAGES/redaction.po | 16 +- 48 files changed, 1278 insertions(+), 1198 deletions(-) diff --git a/locale/de/LC_MESSAGES/formatters.po b/locale/de/LC_MESSAGES/formatters.po index 8083bba..8661070 100644 --- a/locale/de/LC_MESSAGES/formatters.po +++ b/locale/de/LC_MESSAGES/formatters.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-22 18:48+0200\n" +"POT-Creation-Date: 2021-07-11 14:32+0200\n" "PO-Revision-Date: 2021-05-23 17:18+0000\n" "Last-Translator: magiczocker \n" "Language-Team: German