From 7945116d37e12c8bfeb443d04c3d147584c9bd78 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sat, 11 May 2019 00:19:13 +0200 Subject: [PATCH 01/23] lowered the timeout between messages --- rcgcdw.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rcgcdw.py b/rcgcdw.py index 6417f01..56c157e 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -151,7 +151,7 @@ def send_to_discord(data): time.sleep(5.0) recent_changes.unsent_messages.append(data) elif code < 2: - time.sleep(2.5) + time.sleep(2.0) pass def link_formatter(link): From b39c160d093f1b3ef9e4d02bd3e0c775b187c0e1 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 19 May 2019 17:03:05 +0200 Subject: [PATCH 02/23] Magor logging system refactoring, added new misc module and added data.json as new data storage file --- misc.py | 41 ++++++++++ rcgcdw.py | 233 +++++++++++++++++++++++++++++++----------------------- 2 files changed, 177 insertions(+), 97 deletions(-) create mode 100644 misc.py diff --git a/misc.py b/misc.py new file mode 100644 index 0000000..4872b64 --- /dev/null +++ b/misc.py @@ -0,0 +1,41 @@ +import json, logging, sys + +# Create a custom logger +misc_logger = logging.getLogger("rcgcdw.misc") + +data_template = {"rcid": 99999999999, + "daily_overview": {"edits": None, "new_files": None, "admin_actions": None, "bytes_changed": None, + "new_articles": None, "unique_editors": None, "day_score": None}} + + +def generate_datafile(): + """Generate a data.json file from a template.""" + try: + with open("data.json", 'w') 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.") + sys.exit(1) + + +def load_datafile() -> object: + """Read a data.json file and return a dictionary with contents + :rtype: object + """ + try: + with open("data.json") as data: + return json.loads(data.read()) + except FileNotFoundError: + generate_datafile() + misc_logger.info("The data file could not be found. Generating a new one...") + return data_template + + +def save_datafile(data): + """Overwrites the data.json file with given dictionary""" + try: + with open("data.json", "w") as data_file: + data_file.write(json.dumps(data, indent=4)) + except PermissionError: + misc_logger.critical("Could not modify a data file (no permissions). No way to store last edit.") + sys.exit(1) diff --git a/rcgcdw.py b/rcgcdw.py index 56c157e..47d77d3 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -20,7 +20,7 @@ # WARNING! SHITTY CODE AHEAD. ENTER ONLY IF YOU ARE SURE YOU CAN TAKE IT # You have been warned -import time, logging, json, requests, datetime, re, gettext, math, random, os.path, schedule, sys, ipaddress +import time, logging, logging.config, json, requests, datetime, re, gettext, math, random, os.path, schedule, sys, ipaddress, misc from bs4 import BeautifulSoup from collections import defaultdict, Counter from urllib.parse import quote_plus @@ -43,27 +43,73 @@ except FileNotFoundError: logging.critical("No config file could be found. Please make sure settings.json is in the directory.") sys.exit(1) -logged_in = False -logging.basicConfig(level=settings["verbose_level"]) -if settings["limitrefetch"] != -1 and os.path.exists("lastchange.txt") is False: - with open("lastchange.txt", 'w') as sfile: - sfile.write("99999999999") logging.debug("Current settings: {settings}".format(settings=settings)) + +# Prepare logging + +logging_config = {'version': 1, + 'disable_existing_loggers': False, + 'formatters': { + 'standard': { + 'format': '%(name)s - %(levelname)s: %(message)s' + }, + }, + 'handlers': { + 'default': { + 'level': 0, + 'formatter': 'standard', + 'class': 'logging.StreamHandler', + 'stream': 'ext://sys.stdout' + }, + }, + 'loggers': { + '': { + 'level': 0, + 'handlers': ['default'] + }, + 'rcgcdw': { + 'level': 0 + }, + 'rcgcdw.misc': { + 'level': 0 + }, + } +} + +logging.config.dictConfig(logging_config) +logger = logging.getLogger("rcgcdw") + + +data = misc.load_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: + logger.info("Converting old lastchange.txt file into new data storage data.json...") + data["rcid"] = int(sfile.read().strip()) + misc.save_datafile(data) + os.remove("lastchange.txt") + +# Setup translation + try: lang = gettext.translation('rcgcdw', localedir='locale', languages=[settings["lang"]]) except FileNotFoundError: - logging.critical("No language files have been found. Make sure locale folder is located in the directory.") + logger.critical("No language files have been found. Make sure locale folder is located in the directory.") sys.exit(1) lang.install() ngettext = lang.ngettext +# A few initial vars + +logged_in = False 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/profile-edited", "curseprofile/comment-replied", "contentmodel/change", "sprite/sprite", "sprite/sheet", "sprite/slice", "managetags/create", "managetags/delete", "managetags/activate", "managetags/deactivate", "tag/update"] class MWError(Exception): pass - class LinkParser(HTMLParser): new_string = "" recent_href = "" @@ -89,7 +135,7 @@ class LinkParser(HTMLParser): self.new_string = self.new_string + data def handle_endtag(self, tag): - logging.debug(self.new_string) + logger.debug(self.new_string) LinkParser = LinkParser() @@ -112,11 +158,11 @@ def safe_read(request, *keys): for item in keys: request = request[item] except KeyError: - logging.warning( + logger.warning( "Failure while extracting data from request on key {key} in {change}".format(key=item, change=request)) return None except ValueError: - logging.warning("Failure while extracting data from request in {change}".format(change=request)) + logger.warning("Failure while extracting data from request in {change}".format(change=request)) return None return request @@ -131,10 +177,10 @@ def send_to_discord_webhook(data): result = requests.post(settings["webhookURL"], data=data, headers=header, timeout=10) except requests.exceptions.Timeout: - logging.warning("Timeouted while sending data to the webhook.") + logger.warning("Timeouted while sending data to the webhook.") return 3 except requests.exceptions.ConnectionError: - logging.warning("Connection error while sending the data to a webhook") + logger.warning("Connection error while sending the data to a webhook") return 3 else: return handle_discord_http(result.status_code, data, result) @@ -240,7 +286,7 @@ def compact_formatter(action, change, parsed_comment, categories): english_length + "s", int(english_length_num))) except AttributeError: - logging.error("Could not strip s from the block event, seems like the regex didn't work?") + logger.error("Could not strip s from the block event, seems like the regex didn't work?") return content = _( "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}").format(author=author, author_url=author_url, user=user, time=block_time, user_url=link, comment=parsed_comment) @@ -452,21 +498,21 @@ def embed_formatter(action, change, parsed_comment, categories): if "anon" in change: author_url = "https://{wiki}.gamepedia.com/Special:Contributions/{user}".format(wiki=settings["wiki"], user=change["user"].replace(" ", "_")) # Replace here needed in case of #75 - logging.debug("current user: {} with cache of IPs: {}".format(change["user"], recent_changes.map_ips.keys())) + 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( "https://{wiki}.gamepedia.com/api.php?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucstart={timestamp}&ucprop=".format( wiki=settings["wiki"], user=change["user"], timestamp=change["timestamp"])), "query", "usercontribs") if contibs is None: - logging.warning( + logger.warning( "WARNING: Something went wrong when checking amount of contributions for given IP address") change["user"] = change["user"] + "(?)" else: recent_changes.map_ips[change["user"]] = len(contibs) - logging.debug("1Current params user {} and state of map_ips {}".format(change["user"], recent_changes.map_ips)) + logger.debug("1Current params user {} and state of map_ips {}".format(change["user"], recent_changes.map_ips)) change["user"] = "{author} ({contribs})".format(author=change["user"], contribs=len(contibs)) else: - logging.debug( + logger.debug( "2Current 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 @@ -508,7 +554,7 @@ def embed_formatter(action, change, parsed_comment, categories): article=change["title"].replace(" ", "_")) additional_info_retrieved = False if urls is not None: - logging.debug(urls) + logger.debug(urls) if "-1" not in urls: # image still exists and not removed img_info = next(iter(urls.values()))["imageinfo"] embed["image"]["url"] = img_info[0]["url"] @@ -532,7 +578,7 @@ def embed_formatter(action, change, parsed_comment, categories): "https://{wiki}.gamepedia.com/api.php?action=query&format=json&prop=revisions&titles={article}&rvprop=content".format( wiki=settings["wiki"], article=quote_plus(change["title"], safe=''))), "query", "pages") if article_content is None: - logging.warning("Something went wrong when getting license for the image") + 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]['*'] @@ -546,11 +592,11 @@ def embed_formatter(action, change, parsed_comment, categories): else: license = "?" except IndexError: - logging.error( + 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: - logging.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: @@ -603,7 +649,7 @@ def embed_formatter(action, change, parsed_comment, categories): english_length = english_length.rstrip("s").strip() block_time = "{num} {translated_length}".format(num=english_length_num, translated_length=ngettext(english_length, english_length + "s", int(english_length_num))) except AttributeError: - logging.error("Could not strip s from the block event, seems like the regex didn't work?") + logger.error("Could not strip s from the block event, seems like the regex didn't work?") return embed["title"] = _("Blocked {blocked_user} for {time}").format(blocked_user=user, time=block_time) elif action == "block/reblock": @@ -810,7 +856,7 @@ def embed_formatter(action, change, parsed_comment, categories): embed["title"] = _("Action has been hidden by administration.") embed["author"]["name"] = _("Unknown") else: - logging.warning("No entry for {event} with params: {params}".format(event=action, params=change)) + logger.warning("No entry for {event} with params: {params}".format(event=action, params=change)) embed["author"]["icon_url"] = settings["appearance"]["embed"][action]["icon"] embed["url"] = link embed["description"] = parsed_comment @@ -835,7 +881,7 @@ def embed_formatter(action, change, parsed_comment, categories): else: tag_displayname.append(tag) embed["fields"].append({"name": _("Tags"), "value": ", ".join(tag_displayname)}) - logging.debug("Current params in edit action: {}".format(change)) + 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): if "fields" not in embed: embed["fields"] = [] @@ -853,19 +899,19 @@ def handle_discord_http(code, formatted_embed, result): if 300 > code > 199: # message went through return 0 elif code == 400: # HTTP BAD REQUEST result.status_code, data, result, header - logging.error( + logger.error( "Following message has been rejected by Discord, please submit a bug on our bugtracker adding it:") - logging.error(formatted_embed) - logging.error(result.text) + logger.error(formatted_embed) + logger.error(result.text) return 1 elif code == 401 or code == 404: # HTTP UNAUTHORIZED AND NOT FOUND - logging.error("Webhook URL is invalid or no longer in use, please replace it with proper one.") + logger.error("Webhook URL is invalid or no longer in use, please replace it with proper one.") sys.exit(1) elif code == 429: - logging.error("We are sending too many requests to the Discord, slowing down...") + logger.error("We are sending too many requests to the Discord, slowing down...") return 2 elif 499 < code < 600: - logging.error( + logger.error( "Discord have trouble processing the event, and because the HTTP code returned is {} it means we blame them.".format( code)) return 3 @@ -873,7 +919,7 @@ def handle_discord_http(code, formatted_embed, result): def essential_info(change, changed_categories): """Prepares essential information for both embed and compact message format.""" - logging.debug(change) + 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) return @@ -887,30 +933,30 @@ def essential_info(change, changed_categories): if not parsed_comment: parsed_comment = None if change["type"] in ["edit", "new"]: - logging.debug("List of categories in essential_info: {}".format(changed_categories)) + logger.debug("List of categories in essential_info: {}".format(changed_categories)) if "userhidden" in change: change["user"] = _("hidden") 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: - logging.warning( + 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: - logging.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)) + 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) def day_overview_request(): - logging.info("Fetching daily overview... This may take up to 30 seconds!") + logger.info("Fetching daily overview... This may take up to 30 seconds!") timestamp = (datetime.datetime.utcnow() - datetime.timedelta(hours=24)).isoformat(timespec='milliseconds') - logging.debug("timestamp is {}".format(timestamp)) + logger.debug("timestamp is {}".format(timestamp)) complete = False result = [] passes = 0 @@ -925,18 +971,18 @@ def day_overview_request(): rc = request['query']['recentchanges'] continuearg = request["continue"]["rccontinue"] if "continue" in request else None except ValueError: - logging.warning("ValueError in fetching changes") + logger.warning("ValueError in fetching changes") recent_changes.downtime_controller() complete = 2 except KeyError: - logging.warning("Wiki returned %s" % (request.json())) + logger.warning("Wiki returned %s" % (request.json())) complete = 2 else: result += rc if continuearg: continuearg = "&rccontinue={}".format(continuearg) passes += 1 - logging.debug( + logger.debug( "continuing requesting next pages of recent changes with {} passes and continuearg being {}".format( passes, continuearg)) time.sleep(3.0) @@ -945,7 +991,7 @@ def day_overview_request(): else: complete = 2 if passes == 10: - logging.debug("quit the loop because there been too many passes") + logger.debug("quit the loop because there been too many passes") return (result, complete) @@ -1034,7 +1080,7 @@ def day_overview(): # time.strftime('%Y-%m-%dT%H:%M:%S.000Z', time.gmtime(time. formatted_embed = json.dumps(data, indent=4) send_to_discord(formatted_embed) else: - logging.debug("function requesting changes for day overview returned with error code") + logger.debug("function requesting changes for day overview returned with error code") class Recent_Changes_Class(object): @@ -1051,21 +1097,14 @@ class Recent_Changes_Class(object): session = requests.Session() session.headers.update(settings["header"]) if settings["limitrefetch"] != -1: - with open("lastchange.txt", "r") as record: - file_content = record.read().strip() - if file_content: - file_id = int(file_content) - logging.debug("File_id is {val}".format(val=file_id)) - else: - logging.debug("File is empty") - file_id = 999999999 + file_id = data["rcid"] else: file_id = 999999999 # such value won't cause trouble, and it will make sure no refetch happen @staticmethod def handle_mw_errors(request): if "errors" in request: - logging.error(request["errors"]) + logger.error(request["errors"]) raise MWError return request @@ -1073,16 +1112,16 @@ class Recent_Changes_Class(object): global logged_in # session.cookies.clear() if '@' not in settings["wiki_bot_login"]: - logging.error( + logger.error( "Please provide proper nickname for login from https://{wiki}.gamepedia.com/Special:BotPasswords".format( wiki=settings["wiki"])) return if len(settings["wiki_bot_password"]) != 32: - logging.error( + logger.error( "Password seems incorrect. It should be 32 characters long! Grab it from https://{wiki}.gamepedia.com/Special:BotPasswords".format( wiki=settings["wiki"])) return - logging.info("Trying to log in to https://{wiki}.gamepedia.com...".format(wiki=settings["wiki"])) + logger.info("Trying to log in to https://{wiki}.gamepedia.com...".format(wiki=settings["wiki"])) try: response = self.handle_mw_errors( self.session.post("https://{wiki}.gamepedia.com/api.php".format(wiki=settings["wiki"]), @@ -1095,19 +1134,19 @@ class Recent_Changes_Class(object): 'lgpassword': settings["wiki_bot_password"], 'lgtoken': response.json()['query']['tokens']['logintoken']})) except ValueError: - logging.error("Logging in have not succeeded") + logger.error("Logging in have not succeeded") return except MWError: - logging.error("Logging in have not succeeded") + logger.error("Logging in have not succeeded") return try: if response.json()['login']['result'] == "Success": - logging.info("Logging to the wiki succeeded") + logger.info("Successfully logged in") logged_in = True else: - logging.error("Logging in have not succeeded") + logger.error("Logging in have not succeeded") except: - logging.error("Logging in have not succeeded") + logger.error("Logging in have not succeeded") def add_cache(self, change): self.ids.append(change["rcid"]) @@ -1117,37 +1156,37 @@ class Recent_Changes_Class(object): def fetch(self, amount=settings["limit"]): if self.unsent_messages: - logging.info( + logger.info( "{} messages waiting to be delivered to Discord due to Discord throwing errors/no connection to Discord servers.".format( len(self.unsent_messages))) for num, item in enumerate(self.unsent_messages): - logging.debug( + logger.debug( "Trying to send a message to Discord from the queue with id of {} and content {}".format(str(num), str(item))) if send_to_discord_webhook(item) < 2: - logging.debug("Sending message succeeded") + logger.debug("Sending message succeeded") time.sleep(2.5) else: - logging.debug("Sending message failed") + logger.debug("Sending message failed") break else: self.unsent_messages = [] - logging.debug("Queue emptied, all messages delivered") + logger.debug("Queue emptied, all messages delivered") self.unsent_messages = self.unsent_messages[num:] - logging.debug(self.unsent_messages) + logger.debug(self.unsent_messages) last_check = self.fetch_changes(amount=amount) self.recent_id = last_check if last_check is not None else self.file_id if settings["limitrefetch"] != -1 and self.recent_id != self.file_id: self.file_id = self.recent_id - with open("lastchange.txt", "w") as record: - record.write(str(self.file_id)) - logging.debug("Most recent rcid is: {}".format(self.recent_id)) + data["rcid"] = self.recent_id + misc.save_datafile(data) + logger.debug("Most recent rcid is: {}".format(self.recent_id)) return self.recent_id def fetch_changes(self, amount, clean=False): global logged_in if len(self.ids) == 0: - logging.debug("ids is empty, triggering clean fetch") + logger.debug("ids is empty, triggering clean fetch") clean = True changes = self.safe_request( "https://{wiki}.gamepedia.com/api.php?action=query&format=json&list=recentchanges&rcshow=!bot&rcprop=title%7Credirect%7Ctimestamp%7Cids%7Cloginfo%7Cparsedcomment%7Csizes%7Cflags%7Ctags%7Cuser&rclimit={amount}&rctype=edit%7Cnew%7Clog%7Cexternal{categorize}".format( @@ -1157,15 +1196,15 @@ class Recent_Changes_Class(object): changes = changes.json()['query']['recentchanges'] changes.reverse() except ValueError: - logging.warning("ValueError in fetching changes") + logger.warning("ValueError in fetching changes") if changes.url == "https://www.gamepedia.com": - logging.critical( + logger.critical( "The wiki specified in the settings most probably doesn't exist, got redirected to gamepedia.com") sys.exit(1) self.downtime_controller() return None except KeyError: - logging.warning("Wiki returned %s" % (changes.json())) + logger.warning("Wiki returned %s" % (changes.json())) return None else: if self.downtimecredibility > 0: @@ -1183,15 +1222,15 @@ class Recent_Changes_Class(object): for change in changes: if not (change["rcid"] in self.ids or change["rcid"] < self.recent_id) and not clean: new_events += 1 - logging.debug( + logger.debug( "New event: {}".format(change["rcid"])) if new_events == settings["limit"]: if amount < 500: # call the function again with max limit for more results, ignore the ones in this request - logging.debug("There were too many new events, requesting max amount of events from the wiki.") + logger.debug("There were too many new events, requesting max amount of events from the wiki.") return self.fetch(amount=5000 if logged_in else 500) else: - logging.debug( + logger.debug( "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: @@ -1203,31 +1242,31 @@ class Recent_Changes_Class(object): 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["recentchanges-page-added-to-category-bundled"] in comment_to_match: categorize_events[change["revid"]]["new"].add(cat_title) - logging.debug("Matched {} to added category for {}".format(cat_title, change["revid"])) + logger.debug("Matched {} to added category for {}".format(cat_title, change["revid"])) elif recent_changes.mw_messages["recentchanges-page-removed-from-category"] in comment_to_match or recent_changes.mw_messages["recentchanges-page-removed-from-category-bundled"] in comment_to_match: categorize_events[change["revid"]]["removed"].add(cat_title) - logging.debug("Matched {} to removed category for {}".format(cat_title, change["revid"])) + logger.debug("Matched {} to removed category for {}".format(cat_title, change["revid"])) else: - logging.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"], comment_to_match)) + 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"], comment_to_match)) else: - logging.warning("Init information not available, could not read category information. Please restart the bot.") + logger.warning("Init information not available, could not read category information. Please restart the bot.") else: - logging.debug("Log entry got suppressed, ignoring entry.") + logger.debug("Log entry got suppressed, ignoring entry.") # if change["revid"] in categorize_events: # categorize_events[change["revid"]].append(cat_title) # else: - # logging.debug("New category '{}' for {}".format(cat_title, change["revid"])) + # logger.debug("New category '{}' for {}".format(cat_title, change["revid"])) # categorize_events[change["revid"]] = {cat_title: } for change in changes: if change["rcid"] in self.ids or change["rcid"] < self.recent_id: - logging.debug("Change ({}) is in ids or is lower than recent_id {}".format(change["rcid"], + logger.debug("Change ({}) is in ids or is lower than recent_id {}".format(change["rcid"], self.recent_id)) continue - logging.debug(self.ids) - logging.debug(self.recent_id) + logger.debug(self.ids) + logger.debug(self.recent_id) self.add_cache(change) if clean and not (self.recent_id == 0 and change["rcid"] > self.file_id): - logging.debug("Rejected {val}".format(val=change["rcid"])) + logger.debug("Rejected {val}".format(val=change["rcid"])) continue essential_info(change, categorize_events.get(change.get("revid"), None)) return change["rcid"] @@ -1236,11 +1275,11 @@ class Recent_Changes_Class(object): try: request = self.session.get(url, timeout=10, allow_redirects=False) except requests.exceptions.Timeout: - logging.warning("Reached timeout error for request on link {url}".format(url=url)) + logger.warning("Reached timeout error for request on link {url}".format(url=url)) self.downtime_controller() return None except requests.exceptions.ConnectionError: - logging.warning("Reached connection error for request on link {url}".format(url=url)) + logger.warning("Reached connection error for request on link {url}".format(url=url)) self.downtime_controller() return None else: @@ -1248,7 +1287,7 @@ class Recent_Changes_Class(object): self.downtime_controller() return None elif request.status_code == 302: - logging.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 Gamepedia 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 @@ -1263,7 +1302,7 @@ class Recent_Changes_Class(object): except requests.exceptions.Timeout: pass if online < 1: - logging.error("Failure when checking Internet connection at {time}".format( + logger.error("Failure when checking Internet connection at {time}".format( time=time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime()))) self.downtimecredibility = 0 if not looped: @@ -1310,10 +1349,10 @@ class Recent_Changes_Class(object): if key.startswith("recentchanges-page-"): self.mw_messages[key] = re.sub(r'\[\[.*?\]\]', '', message) else: - logging.warning("Could not retrieve initial wiki information. Some features may not work correctly!") - logging.debug(startup_info) + logger.warning("Could not retrieve initial wiki information. Some features may not work correctly!") + logger.debug(startup_info) else: - logging.error("Could not retrieve initial wiki information. Possibly internet connection issue?") + logger.error("Could not retrieve initial wiki information. Possibly internet connection issue?") recent_changes = Recent_Changes_Class() @@ -1323,7 +1362,7 @@ if settings["appearance"]["mode"] == "embed": elif settings["appearance"]["mode"] == "compact": appearance_mode = compact_formatter else: - logging.critical("Unknown formatter!") + logger.critical("Unknown formatter!") sys.exit(1) # Log in and download wiki information @@ -1332,7 +1371,7 @@ try: recent_changes.log_in() recent_changes.init_info() except requests.exceptions.ConnectionError: - logging.critical("A connection can't be established with the wiki. Exiting...") + logger.critical("A connection can't be established with the wiki. Exiting...") sys.exit(1) time.sleep(1.0) recent_changes.fetch(amount=settings["limitrefetch"] if settings["limitrefetch"] != -1 else settings["limit"]) @@ -1349,13 +1388,13 @@ if settings["overview"]: str(overview_time.tm_min).zfill(2))).do(day_overview) del overview_time except schedule.ScheduleValueError: - logging.error("Invalid time format! Currently: {}:{}".format(time.strptime(settings["overview_time"], '%H:%M').tm_hour, time.strptime(settings["overview_time"], '%H:%M').tm_min)) + logger.error("Invalid time format! Currently: {}:{}".format(time.strptime(settings["overview_time"], '%H:%M').tm_hour, time.strptime(settings["overview_time"], '%H:%M').tm_min)) except ValueError: - logging.error("Invalid time format! Currentely: {}. Note: It needs to be in HH:MM format.".format(settings["overview_time"])) + 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) if TESTING: - logging.debug("DEBUGGING") + logger.debug("DEBUGGING") recent_changes.recent_id -= 5 recent_changes.file_id -= 5 recent_changes.ids = [1] From 132141964acc7921059d827be3fbc5b69fb34d0a Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 19 May 2019 18:25:20 +0200 Subject: [PATCH 03/23] Finished calculating and showing average values for daily overviews (also closes #22) --- misc.py | 7 ++++++- rcgcdw.py | 30 ++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/misc.py b/misc.py index 4872b64..0941e41 100644 --- a/misc.py +++ b/misc.py @@ -5,7 +5,7 @@ misc_logger = logging.getLogger("rcgcdw.misc") data_template = {"rcid": 99999999999, "daily_overview": {"edits": None, "new_files": None, "admin_actions": None, "bytes_changed": None, - "new_articles": None, "unique_editors": None, "day_score": None}} + "new_articles": None, "unique_editors": None, "day_score": None, "days_tracked": 0}} def generate_datafile(): @@ -39,3 +39,8 @@ def save_datafile(data): except PermissionError: misc_logger.critical("Could not modify a data file (no permissions). No way to store last edit.") sys.exit(1) + + +def weighted_average(value, weight, new_value): + """Calculates weighted average of value number with weight weight and new_value with weight 1""" + return round(((value * weight) + new_value) / (weight + 1), 2) diff --git a/rcgcdw.py b/rcgcdw.py index 47d77d3..fba8a01 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -1002,6 +1002,31 @@ def add_to_dict(dictionary, key): dictionary[key] = 1 return dictionary +def daily_overview_sync(edits, files, admin, changed_bytes, new_articles, unique_contributors, day_score): + weight = data["daily_overview"]["days_tracked"] + if weight == 0: + data["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) + else: + edits_avg = misc.weighted_average(data["daily_overview"]["edits"], weight, edits) + edits = _("{value} (avg. {avg})").format(value=edits, avg=edits_avg) + files_avg = misc.weighted_average(data["daily_overview"]["new_files"], weight, files) + files = _("{value} (avg. {avg})").format(value=files, avg=files_avg) + admin_avg = misc.weighted_average(data["daily_overview"]["admin_actions"], weight, admin) + admin = _("{value} (avg. {avg})").format(value=admin, avg=admin_avg) + changed_bytes_avg = misc.weighted_average(data["daily_overview"]["bytes_changed"], weight, changed_bytes) + changed_bytes = _("{value} (avg. {avg})").format(value=changed_bytes, avg=changed_bytes_avg) + new_articles_avg = misc.weighted_average(data["daily_overview"]["new_articles"], weight, new_articles) + new_articles = _("{value} (avg. {avg})").format(value=new_articles, avg=new_articles_avg) + unique_contributors_avg = misc.weighted_average(data["daily_overview"]["unique_editors"], weight, unique_contributors) + unique_contributors = _("{value} (avg. {avg})").format(value=unique_contributors, avg=unique_contributors_avg) + day_score_avg = misc.weighted_average(data["daily_overview"]["day_score"], weight, day_score) + day_score = _("{value} (avg. {avg})").format(value=day_score, avg=day_score_avg) + data["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["daily_overview"]["days_tracked"] += 1 + misc.save_datafile(data) + return edits, files, admin, changed_bytes, new_articles, unique_contributors, day_score def day_overview(): # time.strftime('%Y-%m-%dT%H:%M:%S.000Z', time.gmtime(time.time())) # (datetime.datetime.utcnow()+datetime.timedelta(hours=0)).isoformat(timespec='milliseconds')+'Z' @@ -1066,14 +1091,15 @@ def day_overview(): # time.strftime('%Y-%m-%dT%H:%M:%S.000Z', time.gmtime(time. if not active_articles: active_articles = [_("But nobody came")] embed["fields"] = [] + edits, files, admin, changed_bytes, new_articles, unique_contributors, overall = daily_overview_sync(edits, files, admin, changed_bytes, new_articles, len(activity), 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"), str(len(activity))), + (_("Unique contributors"), unique_contributors), (ngettext("Most active hour", "Most active hours", len(active_hours)), ', '.join(active_hours) + houramount), - (_("Day score"), str(overall))) + (_("Day score"), overall)) for name, value in fields: embed["fields"].append({"name": name, "value": value}) data = {"embeds": [dict(embed)]} From 28a9db95d4d940729d8cb5c106a3d32c24254411 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 20 May 2019 12:16:54 +0200 Subject: [PATCH 04/23] Updated Polish translation, moved logging config from the script to config file --- locale/pl/LC_MESSAGES/rcgcdw.mo | Bin 18780 -> 18842 bytes locale/pl/LC_MESSAGES/rcgcdw.po | 350 ++++++++++++------------- rcgcdw.pot | 444 ++++++++++++++++---------------- rcgcdw.py | 36 +-- settings.json.example | 27 +- 5 files changed, 433 insertions(+), 424 deletions(-) diff --git a/locale/pl/LC_MESSAGES/rcgcdw.mo b/locale/pl/LC_MESSAGES/rcgcdw.mo index ee5e619c6faed17554b0ef13fda931caa74df053..cd40a5c83a9e2422980bb223d7c895a443d2f5df 100644 GIT binary patch delta 2925 zcmXxl3rv<(9LMqhtMGDBKrVuJUo7$kMSZ=3AU7ou@{$RSyd;I8VO}U)O!STHBF=Kj zoVU%{f`Qj+m}AVgES=fRsV&{iSwn2CvT2#RwAuI9^XOim&w0-CoOAx?od0>avemPz z$rHR97qZRxcaZ;s_+KAtb{(%oa^c^qXtUn98VBHdOvIfy3_o$7f9LuWMp1tQ>B{b- zA3ZT<@tB6aFbDYst(dDCJcs>oDTZSMrs5_{!Xuc1XHf6|i6hbam?c9xQf0GI&!0!N ze+A=kJF5MDd;-tmXvVj@6ns<+kL6`7!v1&^`Pn%x8mJ5VVhp`Kjwz^)ijhg$YK*`) zQ0+J2aBN1kJA;p57itB)EJrHi+h7XnU^*(oGE~R)s0JUQmiiP9!C!GGMkF{ZmWmp% z0JUoiP%BV{TIyQNzy@S&>%_VEEe17!kMK03X{e=NhGVe?M_>yofb*`mQG1%iG^Su4 zD)9BFcFm}qxrADgZqye3feO^iO&I!;Sbq)Zr$P?`n2sf=Nb68D*o@la9jHC+#5C+i zy%$5`Xy(Jvi|H7G<5BH1Q2`YqKby;iMYQUEtiK`&QsKjQQAyN>s_#Gr_ysD!)2JC= z!`CsH${Dx|%ds2RU=By606)X?cn{0)n}KFon9Na|i3@`i=1@3*x%j{}d$99jJ?2o~ zfhBkspT(&pLMiUXV!VY4^aUY`JDD!v4i`oI39!BSy#Py24BU#Y;-j? zVh#R{b-0v7QGFM#z*!{BJp3GIVH^oih!v>*S}_lA;?o!)qxJpRfZD1(jzQZ;p(hnb z+y@=VNwcp|OaDFUbX;}sZ(s!XchHMEV=@fYaWrag`(qDGM-tt}p!z99<-$A+(fO~S zpn+a;Us#Eu+^8!t&EHKLHumm;Gi^w;|wxBv_K@EHswH1G1B!)7I+V{b6 zn1*V%2o?Bi$bqu=a6azGDD;kTwjf~)>#t*wO@#(pjcT~deW4vWS@r{Jpnp(Xk`QnL z$wGBF6MNx&oQPGZ721Q^;-i>~6UUlO!o?VdJAxFH411BEea+<=ypI()n`u?zr}!i$ z60JH|h_i7U#^H60#(StO44dH0dAeEf(wC!hrxHW38r6Ok_QrbDd2d9mL^CRYW2pX5VuBXu7YbU6f87^CnI1)p z#yl*!H^6x8B1|Fc3>fws2Ue=e|WOT<6Qz=z0N%641ar=Wj+9otN-l z9oFDUtW^gY18KYMp#ofi3UDLF;&xQ_?n5QpMfd(1vhCJ~ zebO;5!8EKyO=JtQBmXBhSissZNAB@>4mQ>GKIJ*klpj^?+24LBYU6nBVv4CZoOEKh>A?sL9FQHA^a2EL-`gS;~w_ F{{hkjOUwWO delta 2848 zcmXxldrVhl9LMqRPq`?90wO3v{xl&#LaqjwV5lf4B8GT3@v=&ZyjGZYm{y88yZmID z)pXOEm$5R|&1uuQ##+uw?Phtwd23k6KQuR&y+584JHPXKo^zi2^L-Ax1HM1r@i~{G zgPM)M!~7EXtqC@}j;F)8@wc$ASvb~WJl10@HsLVb>%Bka`2$Aq{36nnbzlm1VSkM8 zXVwQZkjt?`?y69Z192Ai!j+hc>o5-YV-g-imA{JVcn61KV&sDctr+#b5>hhNJ%{-?2tPtDJHbsIoy7roABW=rT2(`Z$mFaRd*cdJ{dM>V z?m*Q$h7aRe)CzWED*amo>!Jo8LyfQ$)o>lELIAbYU*JP{0f*pS)QSy?aXZXL?b;O7 z3d}?;^-|2ol}Mj<2&dz5bksp4!_$m%QA!FtplZ$a(pAxy*bsB-sF zGmmCDLNF17a5$=dDr!J^$YmwmSUj6MkoDI{p67udUqs@`cA=ghKn?H{)BwLi&G;O? zgi$;!!>u?Q&*KZ2!BHu}5AjF5g*A9|Fq6Y5j#>p)I3%W#cn^#5wr6^xTd)p`czysU z<4v52IRwHCd;`m|9j9PAfw2}Fa1wT+2AJ=6>uUS**t*0;U>Ua4Pm70487+s=b{!7O!9x4ke=X{aB6Ks_m|hy-T7e5B7U6 z4j?DYT2V{?4eE59@$wf@L3IN|@Q&v{sD}SV?QL()UJpz}0^R(mcJffMFdl<+{;No+ zqZ+TkQy5IX9@Wtr)PP>WP<#v3(Js_6+lPvoBgppKN$>sd=qG;z(=jx~{T}3^>d(V( z9iQ3LB-Bt=ntR@hkxAHM9En>|BR-1is15mM*)OPp-a>WoH)^JXN4VuPQKw@Js@^nY zmu(@2;6`-#Sra#oq+{U7x>2APU zoQ9Wi5oYG|pAiE%0j+>#=MZr%G1L{VqSS*cC#%f%JdvPuH zFEM-FA<;x)8%8p`4fp{z;NbC`RcuDBKsQ$4M5e77HKStV8dl>7GQ_7fVj>>#{2qIf z{|mK+U8q>NhmL|LmTC0IB-CCNpbD0F`3ejnUxTqYAGPOeum?6`5^h4Za}X2oI4VXi zU_ZQ!s^5t^jv\n" "Language-Team: \n" "Language: pl\n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: rcgcdw.py:177 +#: rcgcdw.py:223 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" @@ -28,7 +28,7 @@ msgstr "" "[{author}]({author_url}) editował(-a) [{article}]({edit_link}){comment} " "({sign}{edit_size})" -#: rcgcdw.py:179 +#: rcgcdw.py:225 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" @@ -37,12 +37,12 @@ msgstr "" "[{author}]({author_url}) stworzył(-a) [{article}]({edit_link}){comment} " "({sign}{edit_size})" -#: rcgcdw.py:183 +#: rcgcdw.py:229 #, python-brace-format msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" msgstr "[{author}]({author_url}) przesłał(-a) [{file}]({file_link}){comment}" -#: rcgcdw.py:191 +#: rcgcdw.py:237 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -51,12 +51,12 @@ msgstr "" "[{author}]({author_url}) przesłał(-a) nową wersję [{file}]({file_link})" "{comment}" -#: rcgcdw.py:195 +#: rcgcdw.py:241 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) usunął/usunęła [{page}]({page_link}){comment}" -#: rcgcdw.py:200 +#: rcgcdw.py:246 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -65,15 +65,15 @@ msgstr "" "[{author}]({author_url}) usunął/usunęła przekierowanie przez nadpisanie " "[{page}]({page_link}){comment}" -#: rcgcdw.py:205 rcgcdw.py:211 +#: rcgcdw.py:251 rcgcdw.py:257 msgid "without making a redirect" msgstr "bez utworzenia przekierowania przekierowania" -#: rcgcdw.py:205 rcgcdw.py:212 +#: rcgcdw.py:251 rcgcdw.py:258 msgid "with a redirect" msgstr "z przekierowaniem" -#: rcgcdw.py:206 +#: rcgcdw.py:252 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" @@ -82,7 +82,7 @@ msgstr "" "[{author}]({author_url}) przeniósł/przeniosła {redirect}*{article}* do " "[{target}]({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:213 +#: rcgcdw.py:259 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " @@ -91,7 +91,7 @@ msgstr "" "[{author}]({author_url}) przeniósł/przeniosła {redirect}*{article}* do " "przekierowania [{target}]({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:219 +#: rcgcdw.py:265 #, python-brace-format msgid "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" @@ -100,11 +100,11 @@ msgstr "" "[{author}]({author_url}) przeniósł/przeniosła ustawienia zabezpieczeń z " "{redirect}*{article}* do [{target}]({target_url}){comment}" -#: rcgcdw.py:231 rcgcdw.py:598 +#: rcgcdw.py:277 rcgcdw.py:644 msgid "infinity and beyond" msgstr "wieczność" -#: rcgcdw.py:246 +#: rcgcdw.py:292 #, python-brace-format msgid "" "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}" @@ -112,7 +112,7 @@ msgstr "" "[{author}]({author_url}) zablokował(-a) [{user}]({user_url}) na {time}" "{comment}" -#: rcgcdw.py:251 +#: rcgcdw.py:297 #, python-brace-format msgid "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" @@ -121,25 +121,25 @@ msgstr "" "[{author}]({author_url}) zmienił(-a) ustawienia blokady dla [{blocked_user}]" "({user_url}){comment}" -#: rcgcdw.py:256 +#: rcgcdw.py:302 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" msgstr "" "[{author}]({author_url}) odblokował(-a) [{blocked_user}]({user_url}){comment}" -#: rcgcdw.py:260 +#: rcgcdw.py:306 #, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" msgstr "" "[{author}]({author_url}) pozostawił(-a) [komentarz]({comment}) na {target}" -#: rcgcdw.py:260 +#: rcgcdw.py:306 msgid "their own profile" msgstr "swoim własnym profilu" -#: rcgcdw.py:265 +#: rcgcdw.py:311 #, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target} " @@ -148,100 +148,100 @@ msgstr "" "[{author}]({author_url}) odpowiedział(-a) na [komentarz]({comment}) na " "{target}" -#: rcgcdw.py:268 rcgcdw.py:276 rcgcdw.py:283 +#: rcgcdw.py:314 rcgcdw.py:322 rcgcdw.py:329 msgid "their own" msgstr "swój własny" -#: rcgcdw.py:273 +#: rcgcdw.py:319 #, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" msgstr "" "[{author}]({author_url}) edytował(-a) [komentarz]({comment}) na {target}" -#: rcgcdw.py:281 +#: rcgcdw.py:327 #, python-brace-format msgid "[{author}]({author_url}) deleted a comment on {target} profile" msgstr "[{author}]({author_url}) usunął/usunęła komentarz na {target}" -#: rcgcdw.py:289 rcgcdw.py:648 +#: rcgcdw.py:335 rcgcdw.py:694 msgid "Location" msgstr "Lokacja" -#: rcgcdw.py:291 rcgcdw.py:650 +#: rcgcdw.py:337 rcgcdw.py:696 msgid "About me" msgstr "O mnie" -#: rcgcdw.py:293 rcgcdw.py:652 +#: rcgcdw.py:339 rcgcdw.py:698 msgid "Google link" msgstr "link Google" -#: rcgcdw.py:295 rcgcdw.py:654 +#: rcgcdw.py:341 rcgcdw.py:700 msgid "Facebook link" msgstr "link Facebook" -#: rcgcdw.py:297 rcgcdw.py:656 +#: rcgcdw.py:343 rcgcdw.py:702 msgid "Twitter link" msgstr "link Twitter" -#: rcgcdw.py:299 rcgcdw.py:658 +#: rcgcdw.py:345 rcgcdw.py:704 msgid "Reddit link" msgstr "link Reddit" -#: rcgcdw.py:301 rcgcdw.py:660 +#: rcgcdw.py:347 rcgcdw.py:706 msgid "Twitch link" msgstr "link Twitch" -#: rcgcdw.py:303 rcgcdw.py:662 +#: rcgcdw.py:349 rcgcdw.py:708 msgid "PSN link" msgstr "link PSN" -#: rcgcdw.py:305 rcgcdw.py:664 +#: rcgcdw.py:351 rcgcdw.py:710 msgid "VK link" msgstr "link VK" -#: rcgcdw.py:307 rcgcdw.py:666 +#: rcgcdw.py:353 rcgcdw.py:712 msgid "XVL link" msgstr "link XVL" -#: rcgcdw.py:309 rcgcdw.py:668 +#: rcgcdw.py:355 rcgcdw.py:714 msgid "Steam link" msgstr "link Steam" -#: rcgcdw.py:311 rcgcdw.py:670 +#: rcgcdw.py:357 rcgcdw.py:716 msgid "Discord handle" msgstr "konto Discord" -#: rcgcdw.py:313 +#: rcgcdw.py:359 msgid "unknown" msgstr "nieznana sekcja" -#: rcgcdw.py:314 +#: rcgcdw.py:360 #, python-brace-format msgid "[{target}]({target_url})'s" msgstr "na profilu użytkownika [{target}]({target_url})" -#: rcgcdw.py:314 +#: rcgcdw.py:360 #, python-brace-format msgid "[their own]({target_url})" msgstr "na [swoim własnym profilu użytkownika]({target_url})" -#: rcgcdw.py:315 +#: rcgcdw.py:361 #, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*" msgstr "" "[{author}]({author_url}) edytował(-a) pole {field} {target}. *({desc})*" -#: rcgcdw.py:329 rcgcdw.py:331 rcgcdw.py:701 rcgcdw.py:703 +#: rcgcdw.py:375 rcgcdw.py:377 rcgcdw.py:747 rcgcdw.py:749 msgid "none" msgstr "brak" -#: rcgcdw.py:337 rcgcdw.py:688 +#: rcgcdw.py:383 rcgcdw.py:734 msgid "System" msgstr "System" -#: rcgcdw.py:343 +#: rcgcdw.py:389 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " @@ -250,11 +250,11 @@ msgstr "" "[{author}]({author_url}) zabezpieczył(-a) [{article}]({article_url}) z " "następującymi ustawieniami: {settings}{comment}" -#: rcgcdw.py:345 rcgcdw.py:354 rcgcdw.py:712 rcgcdw.py:719 +#: rcgcdw.py:391 rcgcdw.py:400 rcgcdw.py:758 rcgcdw.py:765 msgid " [cascading]" msgstr " [kaskadowo]" -#: rcgcdw.py:351 +#: rcgcdw.py:397 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" @@ -263,7 +263,7 @@ msgstr "" "[{author}]({author_url}) modyfikował(-a) ustawienia zabezpieczeń [{article}]" "({article_url}) na: {settings}{comment}" -#: rcgcdw.py:359 +#: rcgcdw.py:405 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" @@ -272,7 +272,7 @@ msgstr "" "[{author}]({author_url}) usunął/usunęła zabezpieczenia z [{article}]" "({article_url}){comment}" -#: rcgcdw.py:364 +#: rcgcdw.py:410 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -290,7 +290,7 @@ msgstr[2] "" "[{author}]({author_url}) zmienił(-a) widoczność {amount} wersji strony " "[{article}]({article_url}){comment}" -#: rcgcdw.py:370 +#: rcgcdw.py:416 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -308,23 +308,23 @@ msgstr[2] "" "[{author}]({author_url}) zaimportował(-a) [{article}]({article_url}) {count} " "wersjami{comment}" -#: rcgcdw.py:376 +#: rcgcdw.py:422 #, python-brace-format msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" "[{author}]({author_url}) przywrócił(-a) [{article}]({article_url}){comment}" -#: rcgcdw.py:378 +#: rcgcdw.py:424 #, python-brace-format msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "[{author}]({author_url}) zmienił(-a) widoczność wydarzeń{comment}" -#: rcgcdw.py:380 +#: rcgcdw.py:426 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" msgstr "[{author}]({author_url}) zaimportował(-a) interwiki{comment}" -#: rcgcdw.py:383 +#: rcgcdw.py:429 #, python-brace-format msgid "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" @@ -332,7 +332,7 @@ msgstr "" "[{author}]({author_url}) edytował(-a) filtr nadużyć [numer {number}]" "({filter_url})" -#: rcgcdw.py:386 +#: rcgcdw.py:432 #, python-brace-format msgid "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" @@ -340,7 +340,7 @@ msgstr "" "[{author}]({author_url}) stworzył(-a) filtr nadużyć [numer {number}]" "({filter_url})" -#: rcgcdw.py:392 +#: rcgcdw.py:438 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -349,7 +349,7 @@ msgstr "" "[{author}]({author_url}) połączył(-a) historie zmian [{article}]" "({article_url}) z [{dest}]({dest_url}){comment}" -#: rcgcdw.py:396 +#: rcgcdw.py:442 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -358,7 +358,7 @@ msgstr "" "[{author}]({author_url}) dodał(-a) wpis do [tabeli interwiki]({table_url}), " "który prowadzi do {website} z prefixem {prefix}" -#: rcgcdw.py:402 +#: rcgcdw.py:448 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -367,7 +367,7 @@ msgstr "" "[{author}]({author_url}) edytował(-a) wpis w [tabeli interwiki]" "({table_url}), który prowadzi do {website} z prefixem {prefix}" -#: rcgcdw.py:408 +#: rcgcdw.py:454 #, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" @@ -375,7 +375,7 @@ msgstr "" "[{author}]({author_url}) usunął/usunęła wpis z [tabeli interwiki]" "({table_url})" -#: rcgcdw.py:412 +#: rcgcdw.py:458 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -384,14 +384,14 @@ msgstr "" "[{author}]({author_url}) zmienił(-a) model zawartości [{article}]" "({article_url}) z {old} na {new}{comment}" -#: rcgcdw.py:417 +#: rcgcdw.py:463 #, python-brace-format msgid "" "[{author}]({author_url}) edited the sprite for [{article}]({article_url})" msgstr "" "[{author}]({author_url}) edytował(-a) sprite [{article}]({article_url})" -#: rcgcdw.py:421 +#: rcgcdw.py:467 #, python-brace-format msgid "" "[{author}]({author_url}) created the sprite sheet for [{article}]" @@ -399,72 +399,72 @@ msgid "" msgstr "" "[{author}]({author_url}) utworzył(-a) sprite sheet [{article}]({article_url})" -#: rcgcdw.py:425 +#: rcgcdw.py:471 #, python-brace-format msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "[{author}]({author_url}) edytował(-a) slice [{article}]({article_url})" -#: rcgcdw.py:428 +#: rcgcdw.py:474 #, python-brace-format msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) utworzył(-a) [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:432 +#: rcgcdw.py:478 #, python-brace-format msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) usunął/usunęła [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:436 +#: rcgcdw.py:482 #, python-brace-format msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) aktywował(-a) [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:439 +#: rcgcdw.py:485 #, python-brace-format msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) dezaktywował(-a) [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:442 +#: rcgcdw.py:488 msgid "An action has been hidden by administration." msgstr "Akcja została ukryta przez administrację." -#: rcgcdw.py:450 rcgcdw.py:704 +#: rcgcdw.py:496 rcgcdw.py:750 msgid "No description provided" msgstr "Nie podano opisu zmian" -#: rcgcdw.py:500 +#: rcgcdw.py:546 msgid "(N!) " msgstr "(N!) " -#: rcgcdw.py:501 +#: rcgcdw.py:547 msgid "m " msgstr "d " -#: rcgcdw.py:525 rcgcdw.py:560 +#: rcgcdw.py:571 rcgcdw.py:606 msgid "Options" msgstr "Opcje" -#: rcgcdw.py:525 +#: rcgcdw.py:571 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "([podgląd]({link}) | [wycofaj]({undolink}))" -#: rcgcdw.py:527 +#: rcgcdw.py:573 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "Przesłał(a) nową wersję {name}" -#: rcgcdw.py:529 +#: rcgcdw.py:575 #, python-brace-format msgid "Uploaded {name}" msgstr "Przesłał(a) {name}" -#: rcgcdw.py:545 +#: rcgcdw.py:591 msgid "**No license!**" msgstr "**Brak licencji!**" -#: rcgcdw.py:557 +#: rcgcdw.py:603 msgid "" "\n" "License: {}" @@ -472,148 +472,148 @@ msgstr "" "\n" "Licencja: {}" -#: rcgcdw.py:560 +#: rcgcdw.py:606 #, python-brace-format msgid "([preview]({link}))" msgstr "([podgląd]({link}))" -#: rcgcdw.py:565 +#: rcgcdw.py:611 #, python-brace-format msgid "Deleted page {article}" msgstr "Usunął/usunęła {article}" -#: rcgcdw.py:569 +#: rcgcdw.py:615 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "" "Usunął/usunęła przekierowanie ({article}) aby utworzyć miejsce dla " "przenoszonej strony" -#: rcgcdw.py:574 +#: rcgcdw.py:620 msgid "No redirect has been made" msgstr "Nie utworzono przekierowania" -#: rcgcdw.py:575 +#: rcgcdw.py:621 msgid "A redirect has been made" msgstr "Zostało utworzone przekierowanie" -#: rcgcdw.py:576 +#: rcgcdw.py:622 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "Przeniósł/przeniosła {redirect}{article} do {target}" -#: rcgcdw.py:580 +#: rcgcdw.py:626 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "" "Przeniósł/przeniosła {redirect}{article} do strony przekierowującej {title}" -#: rcgcdw.py:585 +#: rcgcdw.py:631 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "Przeniesiono ustawienia zabezpieczeń z {redirect}{article} do {title}" -#: rcgcdw.py:608 +#: rcgcdw.py:654 #, python-brace-format msgid "Blocked {blocked_user} for {time}" msgstr "Zablokowano {blocked_user} na {time}" -#: rcgcdw.py:614 +#: rcgcdw.py:660 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "Zmienił ustawienia blokady {blocked_user}" -#: rcgcdw.py:620 +#: rcgcdw.py:666 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "Odblokował {blocked_user}" -#: rcgcdw.py:625 +#: rcgcdw.py:671 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "Pozostawiono komentarz na profilu użytkownika {target}" -#: rcgcdw.py:627 +#: rcgcdw.py:673 msgid "Left a comment on their own profile" msgstr "Pozostawił(a) komentarz na swoim profilu" -#: rcgcdw.py:632 +#: rcgcdw.py:678 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "Odpowiedziano na komentarz na profilu użytkownika {target}" -#: rcgcdw.py:634 +#: rcgcdw.py:680 msgid "Replied to a comment on their own profile" msgstr "Odpowiedział(a) na komentarz na swoim profilu" -#: rcgcdw.py:639 +#: rcgcdw.py:685 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "Edytowano komentarz na profilu użytkownika {target}" -#: rcgcdw.py:641 +#: rcgcdw.py:687 msgid "Edited a comment on their own profile" msgstr "Edytował(a) komentarz na swoim profilu" -#: rcgcdw.py:672 rcgcdw.py:811 +#: rcgcdw.py:718 rcgcdw.py:857 msgid "Unknown" msgstr "Nieznana" -#: rcgcdw.py:673 +#: rcgcdw.py:719 #, python-brace-format msgid "Edited {target}'s profile" msgstr "Edytowano profil użytkownika {target}" -#: rcgcdw.py:673 +#: rcgcdw.py:719 msgid "Edited their own profile" msgstr "Edytował(a) swój profil" -#: rcgcdw.py:675 +#: rcgcdw.py:721 #, python-brace-format msgid "Cleared the {field} field" msgstr "Wyczyszczono pole {field}" -#: rcgcdw.py:677 +#: rcgcdw.py:723 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "pole \"{field}\" zostało zmienione na: {desc}" -#: rcgcdw.py:682 +#: rcgcdw.py:728 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "Usunął komentarz na profilu użytkownika {target}" -#: rcgcdw.py:686 +#: rcgcdw.py:732 #, python-brace-format msgid "Changed group membership for {target}" msgstr "Zmieniono przynależność do grup dla {target}" -#: rcgcdw.py:690 +#: rcgcdw.py:736 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "{target} automatycznie otrzymał nową grupę użytkownika" -#: rcgcdw.py:705 +#: rcgcdw.py:751 #, python-brace-format msgid "Groups changed from {old_groups} to {new_groups}{reason}" msgstr "Grupy zmienione z {old_groups} do {new_groups}{reason}" -#: rcgcdw.py:710 +#: rcgcdw.py:756 #, python-brace-format msgid "Protected {target}" msgstr "Zabezpieczono {target}" -#: rcgcdw.py:717 +#: rcgcdw.py:763 #, python-brace-format msgid "Changed protection level for {article}" msgstr "Zmieniono poziom zabezpieczeń {article}" -#: rcgcdw.py:724 +#: rcgcdw.py:770 #, python-brace-format msgid "Removed protection from {article}" msgstr "Usunięto zabezpieczenie {article}" -#: rcgcdw.py:729 +#: rcgcdw.py:775 #, python-brace-format msgid "Changed visibility of revision on page {article} " msgid_plural "Changed visibility of {amount} revisions on page {article} " @@ -621,7 +621,7 @@ 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} " -#: rcgcdw.py:735 +#: rcgcdw.py:781 #, python-brace-format msgid "Imported {article} with {count} revision" msgid_plural "Imported {article} with {count} revisions" @@ -629,333 +629,339 @@ msgstr[0] "Zaimportowano {article} z {count} wersją" msgstr[1] "Zaimportowano {article} z {count} wersjami" msgstr[2] "Zaimportowano {article} z {count} wersjami" -#: rcgcdw.py:741 +#: rcgcdw.py:787 #, python-brace-format msgid "Restored {article}" msgstr "Przywrócono {article}" -#: rcgcdw.py:744 +#: rcgcdw.py:790 msgid "Changed visibility of log events" msgstr "Zmieniono widoczność logów" -#: rcgcdw.py:747 +#: rcgcdw.py:793 msgid "Imported interwiki" msgstr "Zaimportowano interwiki" -#: rcgcdw.py:750 +#: rcgcdw.py:796 #, python-brace-format msgid "Edited abuse filter number {number}" msgstr "Edytowano filtr nadużyć numer {number}" -#: rcgcdw.py:753 +#: rcgcdw.py:799 #, python-brace-format msgid "Created abuse filter number {number}" msgstr "Utworzono filtr nadużyć numer {number}" -#: rcgcdw.py:757 +#: rcgcdw.py:803 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "Połączono historie {article} z {dest}" -#: rcgcdw.py:761 +#: rcgcdw.py:807 msgid "Added an entry to the interwiki table" msgstr "Dodano wpis do tabeli interwiki" -#: rcgcdw.py:762 rcgcdw.py:768 +#: rcgcdw.py:808 rcgcdw.py:814 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "Prefix: {prefix}, strona: {website} | {desc}" -#: rcgcdw.py:767 +#: rcgcdw.py:813 msgid "Edited an entry in interwiki table" msgstr "Edytowano wpis interwiki" -#: rcgcdw.py:773 +#: rcgcdw.py:819 msgid "Deleted an entry in interwiki table" msgstr "Usunięto wpis interwiki" -#: rcgcdw.py:774 +#: rcgcdw.py:820 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "Prefix: {prefix} | {desc}" -#: rcgcdw.py:778 +#: rcgcdw.py:824 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "Zmieniono model zawartości {article}" -#: rcgcdw.py:779 +#: rcgcdw.py:825 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Model został zmieniony z {old} na {new}: {reason}" -#: rcgcdw.py:785 +#: rcgcdw.py:831 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Edytowano sprite dla {article}" -#: rcgcdw.py:789 +#: rcgcdw.py:835 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Utworzono sprite sheet dla {article}" -#: rcgcdw.py:793 +#: rcgcdw.py:839 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Edytowano część sprite dla {article}" -#: rcgcdw.py:796 +#: rcgcdw.py:842 #, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "Utworzono tag \"{tag}\"" -#: rcgcdw.py:800 +#: rcgcdw.py:846 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "Usunięto tag \"{tag}\"" -#: rcgcdw.py:804 +#: rcgcdw.py:850 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "Aktywowano tag \"{tag}\"" -#: rcgcdw.py:807 +#: rcgcdw.py:853 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "Dezaktywowano tag \"{tag}\"" -#: rcgcdw.py:810 +#: rcgcdw.py:856 msgid "Action has been hidden by administration." msgstr "Akcja została ukryta przez administrację." -#: rcgcdw.py:837 +#: rcgcdw.py:883 msgid "Tags" msgstr "Tagi" -#: rcgcdw.py:843 +#: rcgcdw.py:889 msgid "**Added**: " msgstr "**Dodane**: " -#: rcgcdw.py:843 +#: rcgcdw.py:889 msgid " and {} more\n" msgstr " oraz {} innych\n" -#: rcgcdw.py:844 +#: rcgcdw.py:890 msgid "**Removed**: " msgstr "**Usunięte**: " -#: rcgcdw.py:844 +#: rcgcdw.py:890 msgid " and {} more" msgstr " oraz {} innych" -#: rcgcdw.py:845 +#: rcgcdw.py:891 msgid "Changed categories" msgstr "Zmienione kategorie" -#: rcgcdw.py:886 +#: rcgcdw.py:932 msgid "~~hidden~~" msgstr "~~ukryte~~" -#: rcgcdw.py:892 +#: rcgcdw.py:938 msgid "hidden" msgstr "ukryte" -#: rcgcdw.py:995 +#: rcgcdw.py:1012 rcgcdw.py:1014 rcgcdw.py:1016 rcgcdw.py:1018 rcgcdw.py:1020 +#: rcgcdw.py:1022 rcgcdw.py:1024 +#, python-brace-format +msgid "{value} (avg. {avg})" +msgstr "{value} (średnio {avg})" + +#: rcgcdw.py:1066 msgid "Daily overview" msgstr "Podsumowanie dnia" -#: rcgcdw.py:1005 +#: rcgcdw.py:1076 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} akcja)" msgstr[1] " ({} akcje)" msgstr[2] " ({} akcji)" -#: rcgcdw.py:1009 +#: rcgcdw.py:1080 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} edycja)" msgstr[1] " ({} edycje)" msgstr[2] " ({} edycji)" -#: rcgcdw.py:1014 +#: rcgcdw.py:1085 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} akcja)" msgstr[1] " UTC ({} akcje)" msgstr[2] " UTC ({} akcji)" -#: rcgcdw.py:1016 rcgcdw.py:1017 rcgcdw.py:1021 +#: rcgcdw.py:1087 rcgcdw.py:1088 rcgcdw.py:1092 msgid "But nobody came" msgstr "Ale nikt nie przyszedł" -#: rcgcdw.py:1024 +#: rcgcdw.py:1096 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" -#: rcgcdw.py:1025 +#: rcgcdw.py:1097 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" -#: rcgcdw.py:1026 +#: rcgcdw.py:1098 msgid "Edits made" msgstr "Zrobionych edycji" -#: rcgcdw.py:1026 +#: rcgcdw.py:1098 msgid "New files" msgstr "Nowych plików" -#: rcgcdw.py:1026 +#: rcgcdw.py:1098 msgid "Admin actions" msgstr "Akcji administratorskich" -#: rcgcdw.py:1027 +#: rcgcdw.py:1099 msgid "Bytes changed" msgstr "Zmienionych bajtów" -#: rcgcdw.py:1027 +#: rcgcdw.py:1099 msgid "New articles" msgstr "Nowych artykułów" -#: rcgcdw.py:1028 +#: rcgcdw.py:1100 msgid "Unique contributors" msgstr "Unikalnych edytujących" -#: rcgcdw.py:1029 +#: rcgcdw.py:1101 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Najbardziej aktywna godzina" msgstr[1] "Najbardziej aktywne godziny" msgstr[2] "Najbardziej aktywne godziny" -#: rcgcdw.py:1030 +#: rcgcdw.py:1102 msgid "Day score" msgstr "Wynik dnia" -#: rcgcdw.py:1177 +#: rcgcdw.py:1242 #, python-brace-format msgid "Connection to {wiki} seems to be stable now." msgstr "Połączenie z {wiki} wygląda na stabilne." -#: rcgcdw.py:1178 rcgcdw.py:1289 +#: rcgcdw.py:1243 rcgcdw.py:1354 msgid "Connection status" msgstr "Problem z połączeniem" -#: rcgcdw.py:1288 +#: rcgcdw.py:1353 #, python-brace-format msgid "{wiki} seems to be down or unreachable." msgstr "{wiki} nie działa lub jest nieosiągalna." -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "director" msgstr "Dyrektor" -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "bot" msgstr "Bot" -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "editor" msgstr "Redaktor" -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "directors" msgstr "Dyrektorzy" -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "sysop" msgstr "Administrator" -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "bureaucrat" msgstr "Biurokrata" -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "reviewer" msgstr "Przeglądający" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "autoreview" msgstr "Automatycznie przeglądający" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "autopatrol" msgstr "Automatycznie zatwierdzający" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "wiki_guardian" msgstr "Strażnik wiki" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "second" msgid_plural "seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekund" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "minute" msgid_plural "minutes" msgstr[0] "minuta" msgstr[1] "minuty" msgstr[2] "minut" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "hour" msgid_plural "hours" msgstr[0] "godzina" msgstr[1] "godziny" msgstr[2] "godzin" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "day" msgid_plural "days" msgstr[0] "dzień" msgstr[1] "dni" msgstr[2] "dni" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "week" msgid_plural "weeks" msgstr[0] "tydzień" msgstr[1] "tygodnie" msgstr[2] "tygodni" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "month" msgid_plural "months" msgstr[0] "miesiąc" msgstr[1] "miesiące" msgstr[2] "miesięcy" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "year" msgid_plural "years" msgstr[0] "rok" msgstr[1] "lata" msgstr[2] "lat" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "millennium" msgid_plural "millennia" msgstr[0] "tysiąclecie" msgstr[1] "tysiąclecia" msgstr[2] "tysiącleci" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "decade" msgid_plural "decades" msgstr[0] "dekada" msgstr[1] "dekady" msgstr[2] "dekad" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "century" msgid_plural "centuries" msgstr[0] "stulecie" diff --git a/rcgcdw.pot b/rcgcdw.pot index ed0ef1c..7ee0058 100644 --- a/rcgcdw.pot +++ b/rcgcdw.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-03 11:33+0200\n" +"POT-Creation-Date: 2019-05-19 18:32+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,230 +18,230 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: rcgcdw.py:177 +#: rcgcdw.py:223 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" "{edit_size})" msgstr "" -#: rcgcdw.py:179 +#: rcgcdw.py:225 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" "{edit_size})" msgstr "" -#: rcgcdw.py:183 +#: rcgcdw.py:229 #, python-brace-format msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" msgstr "" -#: rcgcdw.py:191 +#: rcgcdw.py:237 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" "{comment}" msgstr "" -#: rcgcdw.py:195 +#: rcgcdw.py:241 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "" -#: rcgcdw.py:200 +#: rcgcdw.py:246 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" "({page_link}){comment}" msgstr "" -#: rcgcdw.py:205 rcgcdw.py:211 +#: rcgcdw.py:251 rcgcdw.py:257 msgid "without making a redirect" msgstr "" -#: rcgcdw.py:205 rcgcdw.py:212 +#: rcgcdw.py:251 rcgcdw.py:258 msgid "with a redirect" msgstr "" -#: rcgcdw.py:206 +#: rcgcdw.py:252 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" "({target_url}) {made_a_redirect}{comment}" msgstr "" -#: rcgcdw.py:213 +#: rcgcdw.py:259 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " "[{target}]({target_url}) {made_a_redirect}{comment}" msgstr "" -#: rcgcdw.py:219 +#: rcgcdw.py:265 #, python-brace-format msgid "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" "* to [{target}]({target_url}){comment}" msgstr "" -#: rcgcdw.py:231 rcgcdw.py:598 +#: rcgcdw.py:277 rcgcdw.py:644 msgid "infinity and beyond" msgstr "" -#: rcgcdw.py:246 +#: rcgcdw.py:292 #, python-brace-format msgid "" "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}" msgstr "" -#: rcgcdw.py:251 +#: rcgcdw.py:297 #, python-brace-format msgid "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" "({user_url}){comment}" msgstr "" -#: rcgcdw.py:256 +#: rcgcdw.py:302 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" msgstr "" -#: rcgcdw.py:260 +#: rcgcdw.py:306 #, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" msgstr "" -#: rcgcdw.py:260 +#: rcgcdw.py:306 msgid "their own profile" msgstr "" -#: rcgcdw.py:265 +#: rcgcdw.py:311 #, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target} " "profile" msgstr "" -#: rcgcdw.py:268 rcgcdw.py:276 rcgcdw.py:283 +#: rcgcdw.py:314 rcgcdw.py:322 rcgcdw.py:329 msgid "their own" msgstr "" -#: rcgcdw.py:273 +#: rcgcdw.py:319 #, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" msgstr "" -#: rcgcdw.py:281 +#: rcgcdw.py:327 #, python-brace-format msgid "[{author}]({author_url}) deleted a comment on {target} profile" msgstr "" -#: rcgcdw.py:289 rcgcdw.py:648 +#: rcgcdw.py:335 rcgcdw.py:694 msgid "Location" msgstr "" -#: rcgcdw.py:291 rcgcdw.py:650 +#: rcgcdw.py:337 rcgcdw.py:696 msgid "About me" msgstr "" -#: rcgcdw.py:293 rcgcdw.py:652 +#: rcgcdw.py:339 rcgcdw.py:698 msgid "Google link" msgstr "" -#: rcgcdw.py:295 rcgcdw.py:654 +#: rcgcdw.py:341 rcgcdw.py:700 msgid "Facebook link" msgstr "" -#: rcgcdw.py:297 rcgcdw.py:656 +#: rcgcdw.py:343 rcgcdw.py:702 msgid "Twitter link" msgstr "" -#: rcgcdw.py:299 rcgcdw.py:658 +#: rcgcdw.py:345 rcgcdw.py:704 msgid "Reddit link" msgstr "" -#: rcgcdw.py:301 rcgcdw.py:660 +#: rcgcdw.py:347 rcgcdw.py:706 msgid "Twitch link" msgstr "" -#: rcgcdw.py:303 rcgcdw.py:662 +#: rcgcdw.py:349 rcgcdw.py:708 msgid "PSN link" msgstr "" -#: rcgcdw.py:305 rcgcdw.py:664 +#: rcgcdw.py:351 rcgcdw.py:710 msgid "VK link" msgstr "" -#: rcgcdw.py:307 rcgcdw.py:666 +#: rcgcdw.py:353 rcgcdw.py:712 msgid "XVL link" msgstr "" -#: rcgcdw.py:309 rcgcdw.py:668 +#: rcgcdw.py:355 rcgcdw.py:714 msgid "Steam link" msgstr "" -#: rcgcdw.py:311 rcgcdw.py:670 +#: rcgcdw.py:357 rcgcdw.py:716 msgid "Discord handle" msgstr "" -#: rcgcdw.py:313 +#: rcgcdw.py:359 msgid "unknown" msgstr "" -#: rcgcdw.py:314 +#: rcgcdw.py:360 #, python-brace-format msgid "[{target}]({target_url})'s" msgstr "" -#: rcgcdw.py:314 +#: rcgcdw.py:360 #, python-brace-format msgid "[their own]({target_url})" msgstr "" -#: rcgcdw.py:315 +#: rcgcdw.py:361 #, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*" msgstr "" -#: rcgcdw.py:329 rcgcdw.py:331 rcgcdw.py:701 rcgcdw.py:703 +#: rcgcdw.py:375 rcgcdw.py:377 rcgcdw.py:747 rcgcdw.py:749 msgid "none" msgstr "" -#: rcgcdw.py:337 rcgcdw.py:688 +#: rcgcdw.py:383 rcgcdw.py:734 msgid "System" msgstr "" -#: rcgcdw.py:343 +#: rcgcdw.py:389 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " "following settings: {settings}{comment}" msgstr "" -#: rcgcdw.py:345 rcgcdw.py:354 rcgcdw.py:712 rcgcdw.py:719 +#: rcgcdw.py:391 rcgcdw.py:400 rcgcdw.py:758 rcgcdw.py:765 msgid " [cascading]" msgstr "" -#: rcgcdw.py:351 +#: rcgcdw.py:397 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" "({article_url}) to: {settings}{comment}" msgstr "" -#: rcgcdw.py:359 +#: rcgcdw.py:405 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" "{comment}" msgstr "" -#: rcgcdw.py:364 +#: rcgcdw.py:410 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -252,7 +252,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:370 +#: rcgcdw.py:416 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -263,615 +263,621 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:376 +#: rcgcdw.py:422 #, python-brace-format msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" -#: rcgcdw.py:378 +#: rcgcdw.py:424 #, python-brace-format msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "" -#: rcgcdw.py:380 +#: rcgcdw.py:426 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" msgstr "" -#: rcgcdw.py:383 +#: rcgcdw.py:429 #, python-brace-format msgid "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" msgstr "" -#: rcgcdw.py:386 +#: rcgcdw.py:432 #, python-brace-format msgid "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" msgstr "" -#: rcgcdw.py:392 +#: rcgcdw.py:438 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" "({article_url}) into [{dest}]({dest_url}){comment}" msgstr "" -#: rcgcdw.py:396 +#: rcgcdw.py:442 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" "({table_url}) pointing to {website} with {prefix} prefix" msgstr "" -#: rcgcdw.py:402 +#: rcgcdw.py:448 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " "pointing to {website} with {prefix} prefix" msgstr "" -#: rcgcdw.py:408 +#: rcgcdw.py:454 #, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" msgstr "" -#: rcgcdw.py:412 +#: rcgcdw.py:458 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "" -#: rcgcdw.py:417 +#: rcgcdw.py:463 #, python-brace-format msgid "" "[{author}]({author_url}) edited the sprite for [{article}]({article_url})" msgstr "" -#: rcgcdw.py:421 +#: rcgcdw.py:467 #, python-brace-format msgid "" "[{author}]({author_url}) created the sprite sheet for [{article}]" "({article_url})" msgstr "" -#: rcgcdw.py:425 +#: rcgcdw.py:471 #, python-brace-format msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" -#: rcgcdw.py:428 +#: rcgcdw.py:474 #, python-brace-format msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:432 +#: rcgcdw.py:478 #, python-brace-format msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:436 +#: rcgcdw.py:482 #, python-brace-format msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:439 +#: rcgcdw.py:485 #, python-brace-format msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:442 +#: rcgcdw.py:488 msgid "An action has been hidden by administration." msgstr "" -#: rcgcdw.py:450 rcgcdw.py:704 +#: rcgcdw.py:496 rcgcdw.py:750 msgid "No description provided" msgstr "" -#: rcgcdw.py:500 +#: rcgcdw.py:546 msgid "(N!) " msgstr "" -#: rcgcdw.py:501 +#: rcgcdw.py:547 msgid "m " msgstr "" -#: rcgcdw.py:525 rcgcdw.py:560 +#: rcgcdw.py:571 rcgcdw.py:606 msgid "Options" msgstr "" -#: rcgcdw.py:525 +#: rcgcdw.py:571 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "" -#: rcgcdw.py:527 +#: rcgcdw.py:573 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "" -#: rcgcdw.py:529 +#: rcgcdw.py:575 #, python-brace-format msgid "Uploaded {name}" msgstr "" -#: rcgcdw.py:545 +#: rcgcdw.py:591 msgid "**No license!**" msgstr "" -#: rcgcdw.py:557 +#: rcgcdw.py:603 msgid "" "\n" "License: {}" msgstr "" -#: rcgcdw.py:560 +#: rcgcdw.py:606 #, python-brace-format msgid "([preview]({link}))" msgstr "" -#: rcgcdw.py:565 +#: rcgcdw.py:611 #, python-brace-format msgid "Deleted page {article}" msgstr "" -#: rcgcdw.py:569 +#: rcgcdw.py:615 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "" -#: rcgcdw.py:574 +#: rcgcdw.py:620 msgid "No redirect has been made" msgstr "" -#: rcgcdw.py:575 +#: rcgcdw.py:621 msgid "A redirect has been made" msgstr "" -#: rcgcdw.py:576 +#: rcgcdw.py:622 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "" -#: rcgcdw.py:580 +#: rcgcdw.py:626 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "" -#: rcgcdw.py:585 +#: rcgcdw.py:631 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "" -#: rcgcdw.py:608 +#: rcgcdw.py:654 #, python-brace-format msgid "Blocked {blocked_user} for {time}" msgstr "" -#: rcgcdw.py:614 +#: rcgcdw.py:660 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "" -#: rcgcdw.py:620 +#: rcgcdw.py:666 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "" -#: rcgcdw.py:625 +#: rcgcdw.py:671 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "" -#: rcgcdw.py:627 +#: rcgcdw.py:673 msgid "Left a comment on their own profile" msgstr "" -#: rcgcdw.py:632 +#: rcgcdw.py:678 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "" -#: rcgcdw.py:634 +#: rcgcdw.py:680 msgid "Replied to a comment on their own profile" msgstr "" -#: rcgcdw.py:639 +#: rcgcdw.py:685 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "" -#: rcgcdw.py:641 +#: rcgcdw.py:687 msgid "Edited a comment on their own profile" msgstr "" -#: rcgcdw.py:672 rcgcdw.py:811 +#: rcgcdw.py:718 rcgcdw.py:857 msgid "Unknown" msgstr "" -#: rcgcdw.py:673 +#: rcgcdw.py:719 #, python-brace-format msgid "Edited {target}'s profile" msgstr "" -#: rcgcdw.py:673 +#: rcgcdw.py:719 msgid "Edited their own profile" msgstr "" -#: rcgcdw.py:675 +#: rcgcdw.py:721 #, python-brace-format msgid "Cleared the {field} field" msgstr "" -#: rcgcdw.py:677 +#: rcgcdw.py:723 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "" -#: rcgcdw.py:682 +#: rcgcdw.py:728 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "" -#: rcgcdw.py:686 +#: rcgcdw.py:732 #, python-brace-format msgid "Changed group membership for {target}" msgstr "" -#: rcgcdw.py:690 +#: rcgcdw.py:736 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "" -#: rcgcdw.py:705 +#: rcgcdw.py:751 #, python-brace-format msgid "Groups changed from {old_groups} to {new_groups}{reason}" msgstr "" -#: rcgcdw.py:710 +#: rcgcdw.py:756 #, python-brace-format msgid "Protected {target}" msgstr "" -#: rcgcdw.py:717 +#: rcgcdw.py:763 #, python-brace-format msgid "Changed protection level for {article}" msgstr "" -#: rcgcdw.py:724 +#: rcgcdw.py:770 #, python-brace-format msgid "Removed protection from {article}" msgstr "" -#: rcgcdw.py:729 +#: rcgcdw.py:775 #, 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] "" -#: rcgcdw.py:735 +#: rcgcdw.py:781 #, python-brace-format msgid "Imported {article} with {count} revision" msgid_plural "Imported {article} with {count} revisions" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:741 +#: rcgcdw.py:787 #, python-brace-format msgid "Restored {article}" msgstr "" -#: rcgcdw.py:744 +#: rcgcdw.py:790 msgid "Changed visibility of log events" msgstr "" -#: rcgcdw.py:747 -msgid "Imported interwiki" -msgstr "" - -#: rcgcdw.py:750 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "" - -#: rcgcdw.py:753 -#, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "" - -#: rcgcdw.py:757 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "" - -#: rcgcdw.py:761 -msgid "Added an entry to the interwiki table" -msgstr "" - -#: rcgcdw.py:762 rcgcdw.py:768 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "" - -#: rcgcdw.py:767 -msgid "Edited an entry in interwiki table" -msgstr "" - -#: rcgcdw.py:773 -msgid "Deleted an entry in interwiki table" -msgstr "" - -#: rcgcdw.py:774 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "" - -#: rcgcdw.py:778 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "" - -#: rcgcdw.py:779 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "" - -#: rcgcdw.py:785 -#, python-brace-format -msgid "Edited the sprite for {article}" -msgstr "" - -#: rcgcdw.py:789 -#, python-brace-format -msgid "Created the sprite sheet for {article}" -msgstr "" - #: rcgcdw.py:793 -#, python-brace-format -msgid "Edited the slice for {article}" +msgid "Imported interwiki" msgstr "" #: rcgcdw.py:796 #, python-brace-format +msgid "Edited abuse filter number {number}" +msgstr "" + +#: rcgcdw.py:799 +#, python-brace-format +msgid "Created abuse filter number {number}" +msgstr "" + +#: rcgcdw.py:803 +#, python-brace-format +msgid "Merged revision histories of {article} into {dest}" +msgstr "" + +#: rcgcdw.py:807 +msgid "Added an entry to the interwiki table" +msgstr "" + +#: rcgcdw.py:808 rcgcdw.py:814 +#, python-brace-format +msgid "Prefix: {prefix}, website: {website} | {desc}" +msgstr "" + +#: rcgcdw.py:813 +msgid "Edited an entry in interwiki table" +msgstr "" + +#: rcgcdw.py:819 +msgid "Deleted an entry in interwiki table" +msgstr "" + +#: rcgcdw.py:820 +#, python-brace-format +msgid "Prefix: {prefix} | {desc}" +msgstr "" + +#: rcgcdw.py:824 +#, python-brace-format +msgid "Changed the content model of the page {article}" +msgstr "" + +#: rcgcdw.py:825 +#, python-brace-format +msgid "Model changed from {old} to {new}: {reason}" +msgstr "" + +#: rcgcdw.py:831 +#, python-brace-format +msgid "Edited the sprite for {article}" +msgstr "" + +#: rcgcdw.py:835 +#, python-brace-format +msgid "Created the sprite sheet for {article}" +msgstr "" + +#: rcgcdw.py:839 +#, python-brace-format +msgid "Edited the slice for {article}" +msgstr "" + +#: rcgcdw.py:842 +#, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "" -#: rcgcdw.py:800 +#: rcgcdw.py:846 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "" -#: rcgcdw.py:804 +#: rcgcdw.py:850 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "" -#: rcgcdw.py:807 +#: rcgcdw.py:853 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "" -#: rcgcdw.py:810 +#: rcgcdw.py:856 msgid "Action has been hidden by administration." msgstr "" -#: rcgcdw.py:837 +#: rcgcdw.py:883 msgid "Tags" msgstr "" -#: rcgcdw.py:843 +#: rcgcdw.py:889 msgid "**Added**: " msgstr "" -#: rcgcdw.py:843 +#: rcgcdw.py:889 msgid " and {} more\n" msgstr "" -#: rcgcdw.py:844 +#: rcgcdw.py:890 msgid "**Removed**: " msgstr "" -#: rcgcdw.py:844 +#: rcgcdw.py:890 msgid " and {} more" msgstr "" -#: rcgcdw.py:845 +#: rcgcdw.py:891 msgid "Changed categories" msgstr "" -#: rcgcdw.py:886 +#: rcgcdw.py:932 msgid "~~hidden~~" msgstr "" -#: rcgcdw.py:892 +#: rcgcdw.py:938 msgid "hidden" msgstr "" -#: rcgcdw.py:995 +#: rcgcdw.py:1012 rcgcdw.py:1014 rcgcdw.py:1016 rcgcdw.py:1018 rcgcdw.py:1020 +#: rcgcdw.py:1022 rcgcdw.py:1024 +#, python-brace-format +msgid "{value} (avg. {avg})" +msgstr "" + +#: rcgcdw.py:1066 msgid "Daily overview" msgstr "" -#: rcgcdw.py:1005 +#: rcgcdw.py:1076 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1009 +#: rcgcdw.py:1080 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1014 +#: rcgcdw.py:1085 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1016 rcgcdw.py:1017 rcgcdw.py:1021 +#: rcgcdw.py:1087 rcgcdw.py:1088 rcgcdw.py:1092 msgid "But nobody came" msgstr "" -#: rcgcdw.py:1024 +#: rcgcdw.py:1096 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1025 +#: rcgcdw.py:1097 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1026 +#: rcgcdw.py:1098 msgid "Edits made" msgstr "" -#: rcgcdw.py:1026 +#: rcgcdw.py:1098 msgid "New files" msgstr "" -#: rcgcdw.py:1026 +#: rcgcdw.py:1098 msgid "Admin actions" msgstr "" -#: rcgcdw.py:1027 +#: rcgcdw.py:1099 msgid "Bytes changed" msgstr "" -#: rcgcdw.py:1027 +#: rcgcdw.py:1099 msgid "New articles" msgstr "" -#: rcgcdw.py:1028 +#: rcgcdw.py:1100 msgid "Unique contributors" msgstr "" -#: rcgcdw.py:1029 +#: rcgcdw.py:1101 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1030 +#: rcgcdw.py:1102 msgid "Day score" msgstr "" -#: rcgcdw.py:1177 +#: rcgcdw.py:1242 #, python-brace-format msgid "Connection to {wiki} seems to be stable now." msgstr "" -#: rcgcdw.py:1178 rcgcdw.py:1289 +#: rcgcdw.py:1243 rcgcdw.py:1354 msgid "Connection status" msgstr "" -#: rcgcdw.py:1288 +#: rcgcdw.py:1353 #, python-brace-format msgid "{wiki} seems to be down or unreachable." msgstr "" -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "director" msgstr "" -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "bot" msgstr "" -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "editor" msgstr "" -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "directors" msgstr "" -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "sysop" msgstr "" -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "bureaucrat" msgstr "" -#: rcgcdw.py:1342 +#: rcgcdw.py:1407 msgid "reviewer" msgstr "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "autoreview" msgstr "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "autopatrol" msgstr "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "wiki_guardian" msgstr "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "second" msgid_plural "seconds" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "minute" msgid_plural "minutes" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "hour" msgid_plural "hours" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "day" msgid_plural "days" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "week" msgid_plural "weeks" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "month" msgid_plural "months" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "year" msgid_plural "years" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "millennium" msgid_plural "millennia" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "decade" msgid_plural "decades" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1408 msgid "century" msgid_plural "centuries" msgstr[0] "" diff --git a/rcgcdw.py b/rcgcdw.py index fba8a01..40bc8dd 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -47,36 +47,7 @@ logging.debug("Current settings: {settings}".format(settings=settings)) # Prepare logging -logging_config = {'version': 1, - 'disable_existing_loggers': False, - 'formatters': { - 'standard': { - 'format': '%(name)s - %(levelname)s: %(message)s' - }, - }, - 'handlers': { - 'default': { - 'level': 0, - 'formatter': 'standard', - 'class': 'logging.StreamHandler', - 'stream': 'ext://sys.stdout' - }, - }, - 'loggers': { - '': { - 'level': 0, - 'handlers': ['default'] - }, - 'rcgcdw': { - 'level': 0 - }, - 'rcgcdw.misc': { - 'level': 0 - }, - } -} - -logging.config.dictConfig(logging_config) +logging.config.dictConfig(settings["logging"]) logger = logging.getLogger("rcgcdw") @@ -488,6 +459,7 @@ def compact_formatter(action, change, parsed_comment, categories): content = _("An action has been hidden by administration.") send_to_discord({'content': content}) + def embed_formatter(action, change, parsed_comment, categories): data = {"embeds": []} embed = defaultdict(dict) @@ -509,11 +481,11 @@ def embed_formatter(action, change, parsed_comment, categories): change["user"] = change["user"] + "(?)" else: recent_changes.map_ips[change["user"]] = len(contibs) - logger.debug("1Current params user {} and state of map_ips {}".format(change["user"], recent_changes.map_ips)) + logger.debug("Current params user {} and state of map_ips {}".format(change["user"], recent_changes.map_ips)) change["user"] = "{author} ({contribs})".format(author=change["user"], contribs=len(contibs)) else: logger.debug( - "2Current params user {} and state of map_ips {}".format(change["user"], recent_changes.map_ips)) + "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"], diff --git a/settings.json.example b/settings.json.example index 6d74771..b91520d 100644 --- a/settings.json.example +++ b/settings.json.example @@ -16,7 +16,6 @@ "embed": "" }, "ignored": ["external"], - "verbose_level": 0, "show_updown_messages": true, "overview": false, "overview_time": "00:00", @@ -27,6 +26,32 @@ "wiki_bot_login": "", "wiki_bot_password": "", "show_added_categories": true, + "logging": { + "version": 1, + "disable_existing_loggers": false, + "formatters": { + "standard": { + "format": "%(name)s - %(levelname)s: %(message)s" + } + }, + "handlers": { + "default": { + "formatter": "standard", + "class": "logging.StreamHandler", + "stream": "ext://sys.stdout" + } + }, + "loggers": { + "": { + "level": 0, + "handlers": ["default"] + }, + "rcgcdw": { + }, + "rcgcdw.misc": { + } + } + }, "appearance":{ "mode": "embed", "embed": { From 5d0758f32de83eca97fe65d729b4132bce601b5b Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 20 May 2019 12:32:26 +0200 Subject: [PATCH 05/23] Some refactoring, changed general "data" variable to "storage" to avoid overshadowing in other scopes --- rcgcdw.py | 86 ++++++++++++++++++++++++------------------------------- 1 file changed, 38 insertions(+), 48 deletions(-) diff --git a/rcgcdw.py b/rcgcdw.py index 40bc8dd..b261bad 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -51,15 +51,15 @@ logging.config.dictConfig(settings["logging"]) logger = logging.getLogger("rcgcdw") -data = misc.load_datafile() +storage = misc.load_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: logger.info("Converting old lastchange.txt file into new data storage data.json...") - data["rcid"] = int(sfile.read().strip()) - misc.save_datafile(data) + storage["rcid"] = int(sfile.read().strip()) + misc.save_datafile(storage) os.remove("lastchange.txt") # Setup translation @@ -292,9 +292,6 @@ def compact_formatter(action, change, parsed_comment, categories): comment=link, target=change["title"].split(':')[1] if change["title"].split(':')[1] !=change["user"] else _("their own")) elif action == "curseprofile/comment-deleted": - link = link_formatter("https://{wiki}.gamepedia.com/Special:CommentPermalink/{commentid}".format(wiki=settings["wiki"], - commentid=change["logparams"]["4:comment_id"])) - # link = "https://{wiki}.gamepedia.com/UserProfile:{target}".format(wiki=settings["wiki"], target=params["target"].replace(" ", "_").replace(')', '\)')) content = _("[{author}]({author_url}) deleted a comment on {target} profile").format(author=author, author_url=author_url, target=change["title"].split(':')[1] if change["title"].split(':')[1] !=change["user"] else _("their own")) @@ -455,7 +452,6 @@ def compact_formatter(action, change, parsed_comment, categories): link = "".format(wiki=settings["wiki"]) content = _("[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"").format(author=author, author_url=author_url, tag=change["logparams"]["tag"], tag_url=link) elif action == "suppressed": - link = "".format(wiki=settings["wiki"]) content = _("An action has been hidden by administration.") send_to_discord({'content': content}) @@ -639,19 +635,16 @@ def embed_formatter(action, change, parsed_comment, categories): elif action == "curseprofile/comment-created": link = "https://{wiki}.gamepedia.com/Special:CommentPermalink/{commentid}".format(wiki=settings["wiki"], commentid=change["logparams"]["4:comment_id"]) - # link = "https://{wiki}.gamepedia.com/UserProfile:{target}".format(wiki=settings["wiki"], target=params["target"].replace(" ", "_").replace(')', '\)')) old way of linking embed["title"] = _("Left a comment on {target}'s profile").format(target=change["title"].split(':')[1]) if change["title"].split(':')[1] != \ change["user"] else _( "Left a comment on their own profile") elif action == "curseprofile/comment-replied": - # link = "https://{wiki}.gamepedia.com/UserProfile:{target}".format(wiki=settings["wiki"], target=params["target"].replace(" ", "_").replace(')', '\)')) link = "https://{wiki}.gamepedia.com/Special:CommentPermalink/{commentid}".format(wiki=settings["wiki"], commentid=change["logparams"]["4:comment_id"]) embed["title"] = _("Replied to a comment on {target}'s profile").format(target=change["title"].split(':')[1]) if change["title"].split(':')[1] != \ change["user"] else _( "Replied to a comment on their own profile") elif action == "curseprofile/comment-edited": - # link = "https://{wiki}.gamepedia.com/UserProfile:{target}".format(wiki=settings["wiki"], target=params["target"].replace(" ", "_").replace(')', '\)')) link = "https://{wiki}.gamepedia.com/Special:CommentPermalink/{commentid}".format(wiki=settings["wiki"], commentid=change["logparams"]["4:comment_id"]) embed["title"] = _("Edited a comment on {target}'s profile").format(target=change["title"].split(':')[1]) if change["title"].split(':')[1] != \ @@ -696,7 +689,6 @@ def embed_formatter(action, change, parsed_comment, categories): elif action == "curseprofile/comment-deleted": link = "https://{wiki}.gamepedia.com/Special:CommentPermalink/{commentid}".format(wiki=settings["wiki"], commentid=change["logparams"]["4:comment_id"]) - # link = "https://{wiki}.gamepedia.com/UserProfile:{target}".format(wiki=settings["wiki"], target=params["target"].replace(" ", "_").replace(')', '\)')) embed["title"] = _("Deleted a comment on {target}'s profile").format(target=change["title"].split(':')[1]) elif action in ("rights/rights", "rights/autopromote"): link = "https://{wiki}.gamepedia.com/User:".format(wiki=settings["wiki"]) + change["title"].split(":")[1].replace(" ", "_") @@ -857,7 +849,6 @@ def embed_formatter(action, change, parsed_comment, categories): if categories is not None and not (len(categories["new"]) == 0 and len(categories["removed"]) == 0): if "fields" not in embed: embed["fields"] = [] - # embed["fields"].append({"name": _("Changed categories"), "value": ", ".join(params["new_categories"][0:15]) + ("" if (len(params["new_categories"]) < 15) else _(" and {} more").format(len(params["new_categories"])-14))}) 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["fields"].append({"name": _("Changed categories"), "value": new_cat + del_cat}) @@ -964,7 +955,7 @@ def day_overview_request(): complete = 2 if passes == 10: logger.debug("quit the loop because there been too many passes") - return (result, complete) + return result, complete def add_to_dict(dictionary, key): @@ -975,33 +966,32 @@ def add_to_dict(dictionary, key): return dictionary def daily_overview_sync(edits, files, admin, changed_bytes, new_articles, unique_contributors, day_score): - weight = data["daily_overview"]["days_tracked"] + weight = storage["daily_overview"]["days_tracked"] if weight == 0: - data["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}) + 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) else: - edits_avg = misc.weighted_average(data["daily_overview"]["edits"], weight, edits) + edits_avg = misc.weighted_average(storage["daily_overview"]["edits"], weight, edits) edits = _("{value} (avg. {avg})").format(value=edits, avg=edits_avg) - files_avg = misc.weighted_average(data["daily_overview"]["new_files"], weight, files) + files_avg = misc.weighted_average(storage["daily_overview"]["new_files"], weight, files) files = _("{value} (avg. {avg})").format(value=files, avg=files_avg) - admin_avg = misc.weighted_average(data["daily_overview"]["admin_actions"], weight, admin) + admin_avg = misc.weighted_average(storage["daily_overview"]["admin_actions"], weight, admin) admin = _("{value} (avg. {avg})").format(value=admin, avg=admin_avg) - changed_bytes_avg = misc.weighted_average(data["daily_overview"]["bytes_changed"], weight, changed_bytes) + changed_bytes_avg = 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 = misc.weighted_average(data["daily_overview"]["new_articles"], weight, new_articles) + new_articles_avg = 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 = misc.weighted_average(data["daily_overview"]["unique_editors"], weight, unique_contributors) + unique_contributors_avg = 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 = misc.weighted_average(data["daily_overview"]["day_score"], weight, day_score) + day_score_avg = misc.weighted_average(storage["daily_overview"]["day_score"], weight, day_score) day_score = _("{value} (avg. {avg})").format(value=day_score, avg=day_score_avg) - data["daily_overview"].update({"edits": edits_avg, "new_files": files_avg, "admin_actions": admin_avg, "bytes_changed": changed_bytes_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["daily_overview"]["days_tracked"] += 1 - misc.save_datafile(data) + storage["daily_overview"]["days_tracked"] += 1 + misc.save_datafile(storage) return edits, files, admin, changed_bytes, new_articles, unique_contributors, day_score -def day_overview(): # time.strftime('%Y-%m-%dT%H:%M:%S.000Z', time.gmtime(time.time())) - # (datetime.datetime.utcnow()+datetime.timedelta(hours=0)).isoformat(timespec='milliseconds')+'Z' +def day_overview(): result = day_overview_request() if result[1] == 1: activity = defaultdict(dict) @@ -1042,12 +1032,9 @@ def day_overview(): # time.strftime('%Y-%m-%dT%H:%M:%S.000Z', time.gmtime(time. embed["author"]["name"] = settings["wikiname"] embed["author"]["url"] = "https://{wiki}.gamepedia.com/".format(wiki=settings["wiki"]) if activity: - # v = activity.values() active_users = [] for user, numberu in Counter(activity).most_common(3): # find most active users active_users.append(user + ngettext(" ({} action)", " ({} actions)", numberu).format(numberu)) - # the_one = random.choice(active_users) - # v = articles.values() for article, numbere in Counter(articles).most_common(3): # find most active users active_articles.append(article + ngettext(" ({} edit)", " ({} edits)", numbere).format(numbere)) v = hours.values() @@ -1082,22 +1069,23 @@ def day_overview(): # time.strftime('%Y-%m-%dT%H:%M:%S.000Z', time.gmtime(time. class Recent_Changes_Class(object): - ids = [] - map_ips = {} - recent_id = 0 - downtimecredibility = 0 - last_downtime = 0 - tags = {} - groups = {} - streak = -1 - unsent_messages = [] - mw_messages = {} - session = requests.Session() - session.headers.update(settings["header"]) - if settings["limitrefetch"] != -1: - file_id = data["rcid"] - else: - file_id = 999999999 # such value won't cause trouble, and it will make sure no refetch happen + def __init__(self): + self.ids = [] + self.map_ips = {} + self.recent_id = 0 + self.downtimecredibility = 0 + self.last_downtime = 0 + self.tags = {} + self.groups = {} + self.streak = -1 + self.unsent_messages = [] + self.mw_messages = {} + self.session = requests.Session() + self.session.headers.update(settings["header"]) + if settings["limitrefetch"] != -1: + self.file_id = storage["rcid"] + else: + self.file_id = 999999999 # such value won't cause trouble, and it will make sure no refetch happen @staticmethod def handle_mw_errors(request): @@ -1176,8 +1164,8 @@ class Recent_Changes_Class(object): self.recent_id = last_check if last_check is not None else self.file_id if settings["limitrefetch"] != -1 and self.recent_id != self.file_id: self.file_id = self.recent_id - data["rcid"] = self.recent_id - misc.save_datafile(data) + storage["rcid"] = self.recent_id + misc.save_datafile(storage) logger.debug("Most recent rcid is: {}".format(self.recent_id)) return self.recent_id @@ -1346,6 +1334,7 @@ class Recent_Changes_Class(object): for key, message in self.mw_messages.items(): if key.startswith("recentchanges-page-"): self.mw_messages[key] = re.sub(r'\[\[.*?\]\]', '', message) + logger.info("Gathered information about the tags and interface messages.") else: logger.warning("Could not retrieve initial wiki information. Some features may not work correctly!") logger.debug(startup_info) @@ -1372,6 +1361,7 @@ except requests.exceptions.ConnectionError: logger.critical("A connection can't be established with the wiki. Exiting...") sys.exit(1) time.sleep(1.0) +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) From f0108322691d0884513408a95dd10fe7d0c89923 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 20 May 2019 12:41:40 +0200 Subject: [PATCH 06/23] Moved link_formatter function to misc module --- misc.py | 8 +++++++- rcgcdw.py | 61 +++++++++++++++++++++++++++---------------------------- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/misc.py b/misc.py index 0941e41..c1743e9 100644 --- a/misc.py +++ b/misc.py @@ -1,6 +1,7 @@ -import json, logging, sys +import json, logging, sys, re # Create a custom logger + misc_logger = logging.getLogger("rcgcdw.misc") data_template = {"rcid": 99999999999, @@ -44,3 +45,8 @@ def save_datafile(data): def weighted_average(value, weight, new_value): """Calculates weighted average of value number with weight weight and new_value with weight 1""" return round(((value * weight) + new_value) / (weight + 1), 2) + + +def link_formatter(link): + """Formats a link to not embed it""" + return "<"+re.sub(r"([ \)])", "\\\\\\1", link)+">" \ No newline at end of file diff --git a/rcgcdw.py b/rcgcdw.py index b261bad..7609ae0 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -20,12 +20,14 @@ # WARNING! SHITTY CODE AHEAD. ENTER ONLY IF YOU ARE SURE YOU CAN TAKE IT # You have been warned -import time, logging, logging.config, json, requests, datetime, re, gettext, math, random, os.path, schedule, sys, ipaddress, misc +import time, logging.config, json, requests, datetime, re, gettext, math, random, os.path, schedule, sys, ipaddress, misc from bs4 import BeautifulSoup from collections import defaultdict, Counter from urllib.parse import quote_plus from html.parser import HTMLParser +from misc import link_formatter + if __name__ != "__main__": # return if called as a module logging.critical("The file is being executed as a module. Please execute the script using the console.") sys.exit(1) @@ -171,9 +173,6 @@ def send_to_discord(data): time.sleep(2.0) pass -def link_formatter(link): - return "<"+re.sub(r"([ \)])", "\\\\\\1", link)+">" - def compact_formatter(action, change, parsed_comment, categories): if action != "suppressed": author_url = link_formatter("https://{wiki}.gamepedia.com/User:{user}".format(wiki=settings["wiki"], user=change["user"])) @@ -196,7 +195,7 @@ def compact_formatter(action, change, parsed_comment, categories): content = _("[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}{edit_size})").format(author=author, author_url=author_url, article=change["title"], edit_link=edit_link, comment=parsed_comment, edit_size=edit_size, sign=sign) elif action =="upload/upload": file_link = link_formatter("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=change["title"])) content = _("[{author}]({author_url}) uploaded [{file}]({file_link}){comment}").format(author=author, author_url=author_url, file=change["title"], @@ -204,34 +203,34 @@ def compact_formatter(action, change, parsed_comment, categories): comment=parsed_comment) elif action == "upload/overwrite": file_link = link_formatter("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=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("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=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) elif action == "delete/delete_redir": page_link = link_formatter("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=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) elif action == "move/move": link = link_formatter("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["logparams"]['target_title'])) + article=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("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["logparams"]["target_title"])) + article=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("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["logparams"]["oldtitle_title"])) + article=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) @@ -240,10 +239,10 @@ def compact_formatter(action, change, parsed_comment, categories): try: ipaddress.ip_address(user) link = link_formatter("https://{wiki}.gamepedia.com/Special:Contributions/{user}".format(wiki=settings["wiki"], - user=user)) + user=user)) except ValueError: link = link_formatter("https://{wiki}.gamepedia.com/{user}".format(wiki=settings["wiki"], - user=change["title"])) + user=change["title"])) if change["logparams"]["duration"] == "infinite": block_time = _("infinity and beyond") else: @@ -263,21 +262,21 @@ def compact_formatter(action, change, parsed_comment, categories): "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}").format(author=author, author_url=author_url, user=user, time=block_time, user_url=link, comment=parsed_comment) elif action == "block/reblock": link = link_formatter("https://{wiki}.gamepedia.com/{user}".format(wiki=settings["wiki"], - user=change["title"])) + user=change["title"])) user = change["title"].split(':')[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("https://{wiki}.gamepedia.com/{user}".format(wiki=settings["wiki"], - user=change["title"])) + user=change["title"])) user = change["title"].split(':')[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("https://{wiki}.gamepedia.com/Special:CommentPermalink/{commentid}".format(wiki=settings["wiki"], - commentid=change["logparams"]["4:comment_id"])) + commentid=change["logparams"]["4:comment_id"])) content = _("[{author}]({author_url}) left a [comment]({comment}) on {target} profile").format(author=author, author_url=author_url, comment=link, target=change["title"].split(':')[1]+"'s" if change["title"].split(':')[1] != change["user"] else _("their own profile")) elif action == "curseprofile/comment-replied": link = link_formatter("https://{wiki}.gamepedia.com/Special:CommentPermalink/{commentid}".format(wiki=settings["wiki"], - commentid=change["logparams"][ + commentid=change["logparams"][ "4:comment_id"])) content = _("[{author}]({author_url}) replied to a [comment]({comment}) on {target} profile").format(author=author, author_url=author_url, @@ -285,7 +284,7 @@ def compact_formatter(action, change, parsed_comment, categories): target=change["title"].split(':')[1] if change["title"].split(':')[1] !=change["user"] else _("their own")) elif action == "curseprofile/comment-edited": link = link_formatter("https://{wiki}.gamepedia.com/Special:CommentPermalink/{commentid}".format(wiki=settings["wiki"], - commentid=change["logparams"][ + commentid=change["logparams"][ "4:comment_id"])) content = _("[{author}]({author_url}) edited a [comment]({comment}) on {target} profile").format(author=author, author_url=author_url, @@ -298,7 +297,7 @@ def compact_formatter(action, change, parsed_comment, categories): elif action == "curseprofile/profile-edited": link = link_formatter("https://{wiki}.gamepedia.com/UserProfile:{target}".format(wiki=settings["wiki"], - target=change["title"].split(':')[1])) + target=change["title"].split(':')[1])) if change["logparams"]['4:section'] == "profile-location": field = _("Location") elif change["logparams"]['4:section'] == "profile-aboutme": @@ -353,14 +352,14 @@ def compact_formatter(action, change, parsed_comment, categories): comment=parsed_comment) elif action == "protect/protect": link = link_formatter("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=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"]["description"]+_(" [cascading]") if "cascade" in change["logparams"] else "", comment=parsed_comment) elif action == "protect/modify": link = link_formatter("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=change["title"])) content = _( "[{author}]({author_url}) modified protection settings of [{article}]({article_url}) to: {settings}{comment}").format( author=author, author_url=author_url, @@ -369,24 +368,24 @@ def compact_formatter(action, change, parsed_comment, categories): comment=parsed_comment) elif action == "protect/unprotect": link = link_formatter("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=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("".format(wiki=settings["wiki"], - article=change["title"])) + article=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) elif action == "import/upload": link = link_formatter("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=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": link = link_formatter("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=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) @@ -400,9 +399,9 @@ def compact_formatter(action, change, parsed_comment, categories): 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("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=change["title"])) link_dest = link_formatter("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["logparams"]["dest_title"])) + article=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 == "interwiki/iw_add": @@ -422,20 +421,20 @@ def compact_formatter(action, change, parsed_comment, categories): 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("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=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 == "sprite/sprite": link = link_formatter("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=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("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=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("https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], - article=change["title"])) + article=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 == "managetags/create": link = "".format(wiki=settings["wiki"]) From 6e09a8dc231f7f87914dd1ab42087a2d845960bd Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 20 May 2019 15:11:30 +0200 Subject: [PATCH 07/23] Added #71 --- misc.py | 72 ++++++++++++++++++++++++++++++++++++++++++- rcgcdw.py | 59 ++++++++++++++++++++++++++--------- settings.json.example | 3 +- 3 files changed, 118 insertions(+), 16 deletions(-) diff --git a/misc.py b/misc.py index c1743e9..fa7f696 100644 --- a/misc.py +++ b/misc.py @@ -1,4 +1,5 @@ import json, logging, sys, re +from html.parser import HTMLParser # Create a custom logger @@ -49,4 +50,73 @@ def weighted_average(value, weight, new_value): def link_formatter(link): """Formats a link to not embed it""" - return "<"+re.sub(r"([ \)])", "\\\\\\1", link)+">" \ No newline at end of file + return "<" + re.sub(r"([ \)])", "\\\\\\1", link) + ">" + + +class ContentParser(HTMLParser): + more = _("\n__And more__") + current_tag = "" + small_prev_ins = "" + small_prev_del = "" + ins_length = len(more) + del_length = len(more) + added = False + + 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]: + self.current_tag = tagname + "a" + if tagname == "td" and 'diff-deletedline' in attribs[0]: + self.current_tag = tagname + "d" + if tagname == "td" and 'diff-marker' in attribs[0]: + self.added = True + + def handle_data(self, data): + data = re.sub(r"(`|_|\*|~|<|>|{|}|@|/|\|)", "\\\\\\1", data, 0) + if self.current_tag == "ins" and self.ins_length <= 1000: + self.ins_length += len("**" + data + '**') + if self.ins_length <= 1000: + self.small_prev_ins = self.small_prev_ins + "**" + data + '**' + else: + self.small_prev_ins = self.small_prev_ins + self.more + if self.current_tag == "del" and self.del_length <= 1000: + self.del_length += len("~~" + data + '~~') + if self.del_length <= 1000: + self.small_prev_del = self.small_prev_del + "~~" + data + '~~' + else: + self.small_prev_del = self.small_prev_del + self.more + if (self.current_tag == "afterins" or self.current_tag == "tda") and self.ins_length <= 1000: + self.ins_length += len(data) + if self.ins_length <= 1000: + self.small_prev_ins = self.small_prev_ins + data + else: + self.small_prev_ins = self.small_prev_ins + self.more + if (self.current_tag == "afterdel" or self.current_tag == "tdd") and self.del_length <= 1000: + self.del_length += len(data) + if self.del_length <= 1000: + self.small_prev_del = self.small_prev_del + data + else: + self.small_prev_del = self.small_prev_del + self.more + if self.added: + if data == '+' and self.ins_length <= 1000: + self.ins_length += 1 + if self.ins_length <= 1000: + self.small_prev_ins = self.small_prev_ins + '\n' + else: + self.small_prev_ins = self.small_prev_ins + self.more + if data == '−' and self.del_length <= 1000: + self.del_length += 1 + if self.del_length <= 1000: + self.small_prev_del = self.small_prev_del + '\n' + else: + self.small_prev_del = self.small_prev_del + self.more + self.added = False + + def handle_endtag(self, tagname): + if tagname == "ins": + self.current_tag = "afterins" + elif tagname == "del": + self.current_tag = "afterdel" + else: + self.current_tag = "" diff --git a/rcgcdw.py b/rcgcdw.py index 7609ae0..a0ba72e 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -20,14 +20,12 @@ # WARNING! SHITTY CODE AHEAD. ENTER ONLY IF YOU ARE SURE YOU CAN TAKE IT # You have been warned -import time, logging.config, json, requests, datetime, re, gettext, math, random, os.path, schedule, sys, ipaddress, misc +import time, logging.config, json, requests, datetime, re, gettext, math, random, os.path, schedule, sys, ipaddress from bs4 import BeautifulSoup from collections import defaultdict, Counter from urllib.parse import quote_plus from html.parser import HTMLParser -from misc import link_formatter - if __name__ != "__main__": # return if called as a module logging.critical("The file is being executed as a module. Please execute the script using the console.") sys.exit(1) @@ -52,6 +50,21 @@ logging.debug("Current settings: {settings}".format(settings=settings)) logging.config.dictConfig(settings["logging"]) logger = logging.getLogger("rcgcdw") +# Setup translation + +try: + lang = gettext.translation('rcgcdw', localedir='locale', languages=[settings["lang"]]) +except FileNotFoundError: + logger.critical("No language files have been found. Make sure locale folder is located in the directory.") + sys.exit(1) + +lang.install() +ngettext = lang.ngettext + +import misc + +from misc import link_formatter +from misc import ContentParser storage = misc.load_datafile() @@ -64,17 +77,6 @@ if settings["limitrefetch"] != -1 and os.path.exists("lastchange.txt") is True: misc.save_datafile(storage) os.remove("lastchange.txt") -# Setup translation - -try: - lang = gettext.translation('rcgcdw', localedir='locale', languages=[settings["lang"]]) -except FileNotFoundError: - logger.critical("No language files have been found. Make sure locale folder is located in the directory.") - sys.exit(1) - -lang.install() -ngettext = lang.ngettext - # A few initial vars logged_in = False @@ -512,6 +514,35 @@ def embed_formatter(action, change, parsed_comment, categories): embed["title"] = "{redirect}{article} ({new}{minor}{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 "") + if settings["appearance"]["embed"]["show_edit_changes"]: + changed_content = safe_read(recent_changes.safe_request( + "https://{wiki}.gamepedia.com/api.php?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format( + wiki=settings["wiki"], diff=change["revid"] + )), "compare", "*") + if changed_content: + if "fields" not in embed: + embed["fields"] = [] + 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["fields"].append( + {"name": "Removed", "value": "{data}".format(data=EditDiff.small_prev_del), "inline": True}) + if EditDiff.small_prev_ins: + embed["fields"].append( + {"name": "Added", "value": "{data}".format(data=EditDiff.small_prev_ins), "inline": True}) + else: + logging.warning("Unabled to download data on the edit content!") elif action in ("upload/overwrite", "upload/upload"): # sending files license = None urls = safe_read(recent_changes.safe_request( diff --git a/settings.json.example b/settings.json.example index b91520d..f6221d5 100644 --- a/settings.json.example +++ b/settings.json.example @@ -55,7 +55,8 @@ "appearance":{ "mode": "embed", "embed": { - "daily_overview": { + "show_edit_changes": false, + "daily_overview": { "color": 16312092, "icon":"" }, From 80b8bf4584a62e290b68ad4ded0dfa9e694fc9b6 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 20 May 2019 15:31:25 +0200 Subject: [PATCH 08/23] Fixed diff generator, as it treated all changes as new pages --- rcgcdw.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/rcgcdw.py b/rcgcdw.py index a0ba72e..c6a48f2 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -515,10 +515,16 @@ def embed_formatter(action, change, parsed_comment, categories): editsize) if editsize > 0 else editsize, new=_("(N!) ") if action == "new" else "", minor=_("m ") if action == "edit" and "minor" in change else "") if settings["appearance"]["embed"]["show_edit_changes"]: - changed_content = safe_read(recent_changes.safe_request( + if action == "new": + changed_content = safe_read(recent_changes.safe_request( "https://{wiki}.gamepedia.com/api.php?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format( wiki=settings["wiki"], diff=change["revid"] )), "compare", "*") + else: + changed_content = safe_read(recent_changes.safe_request( + "https://{wiki}.gamepedia.com/api.php?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( + wiki=settings["wiki"], diff=change["revid"],oldrev=change["old_revid"] + )), "compare", "*") if changed_content: if "fields" not in embed: embed["fields"] = [] From 966ec64e8414925d1c9556e87874fe2949d10043 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 20 May 2019 15:32:23 +0200 Subject: [PATCH 09/23] Added copyright to misc.py --- misc.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/misc.py b/misc.py index fa7f696..d9cca00 100644 --- a/misc.py +++ b/misc.py @@ -1,3 +1,19 @@ +# Recent changes Gamepedia compatible Discord webhook is a project for using a webhook as recent changes page from MediaWiki. +# Copyright (C) 2018 Frisk + +# This program 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, +# 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 . + import json, logging, sys, re from html.parser import HTMLParser From e8fc3eb9ad6d4743569c38d7ed9b413800aeb83f Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 20 May 2019 16:51:17 +0200 Subject: [PATCH 10/23] Split the config code to a new module resolving #81 --- configloader.py | 12 ++++++++++++ misc.py | 1 + rcgcdw.py | 15 ++------------- 3 files changed, 15 insertions(+), 13 deletions(-) create mode 100644 configloader.py diff --git a/configloader.py b/configloader.py new file mode 100644 index 0000000..86cf036 --- /dev/null +++ b/configloader.py @@ -0,0 +1,12 @@ +import json, sys, logging + +try: # load settings + with open("settings.json") as sfile: + settings = json.load(sfile) + 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.6.0.1") # 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) diff --git a/misc.py b/misc.py index d9cca00..9dcca0f 100644 --- a/misc.py +++ b/misc.py @@ -16,6 +16,7 @@ import json, logging, sys, re from html.parser import HTMLParser +from configloader import settings # Create a custom logger diff --git a/rcgcdw.py b/rcgcdw.py index c6a48f2..7327628 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -25,6 +25,7 @@ from bs4 import BeautifulSoup from collections import defaultdict, Counter from urllib.parse import quote_plus from html.parser import HTMLParser +from configloader import settings if __name__ != "__main__": # return if called as a module logging.critical("The file is being executed as a module. Please execute the script using the console.") @@ -32,23 +33,11 @@ if __name__ != "__main__": # return if called as a module TESTING = True if "--test" in sys.argv else False # debug mode, pipeline testing -try: # load settings - with open("settings.json") as sfile: - settings = json.load(sfile) - 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.6.0.1") # 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) - -logging.debug("Current settings: {settings}".format(settings=settings)) - # Prepare logging logging.config.dictConfig(settings["logging"]) logger = logging.getLogger("rcgcdw") +logger.debug("Current settings: {settings}".format(settings=settings)) # Setup translation From 4dd3def3724457832afcdbe7a1eb9dc2d9cbbb26 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 20 May 2019 17:28:55 +0200 Subject: [PATCH 11/23] Added German and Polish translations --- locale/de/LC_MESSAGES/rcgcdw.mo | Bin 18058 -> 18195 bytes locale/de/LC_MESSAGES/rcgcdw.po | 362 +++++++++++++++++--------------- locale/pl/LC_MESSAGES/rcgcdw.mo | Bin 18842 -> 18986 bytes locale/pl/LC_MESSAGES/rcgcdw.po | 360 ++++++++++++++++--------------- misc.pot | 24 +++ misc.py | 2 + rcgcdw.pot | 358 ++++++++++++++++--------------- rcgcdw.py | 10 +- 8 files changed, 592 insertions(+), 524 deletions(-) create mode 100644 misc.pot diff --git a/locale/de/LC_MESSAGES/rcgcdw.mo b/locale/de/LC_MESSAGES/rcgcdw.mo index fbbc0eb35f4587c5c59a2b8039a0c9f0a40b6e5d..f57d066fac86ee6aaa3af0c0b3984dd85f1fcfbb 100644 GIT binary patch delta 3892 zcmYk;2~bs40LJmdV+{mUM9B3a3Ir&iB5ESIP^e%k<(fX12o*s^aY5~+r6z(A=9ZDA zWo4#QuW6yO%*v^m%r>UTF=xse%VwNvG;^u{_wKPe!*_q@-glRC&vLc4K49yX0PpGc zLE8-F5a~kdf{i(cSHsy*o{Tc44L*gP@DO&ykFW=xvA+jKJLk2) zr(y(FB7a^}!&Vp6Vm$7|FnkGb!DfuZA5b^EioMX)*10YP)7c+@2{;Ei#jLl#Z$sT@ zAGXI&P}iTqB%W_V+8L9&9cOn@-^++ewQ1)b_h7O6N|3j%v?q_nxHkI+ZT; zXMg+(bz(RJyaY?I9FJoa_G6-~#Qmt_ZYE46*5RFa1;^qzCPD%3LEY~x=3^gb^mtr| zbcWX)rJ}Asg&MO9)+-puen_%&JRG$QV^Kqpj9M+3c0Ug_$qF$9Cs?PTe=eY&Q;sh5 zVh64NbyRet9jHmMA2nHgs0Y1ne?N-B?4LwEs0G!aGZ>1$p&s-XYS{&+ICCcknGPlq z^?NS5u@KXFzL`gbYs_|g!V&y1fKMz&aJ(Uv&nZ5RTBglNZ<^Dn$r+U9G`s`q!3n5_ zW}uc~HnP;sT-54VgKBsKdiCaesW9y3C1lB(FRVY?;{oZ;0}_#GU@}qHl_2xf%(ln9 z$XC_uMK#Qa{qPv_=`fd2U)o64wq7{5H~r5`noJ2ZVh9-iWsi$I5JunDa0A_);4%HI}GwA;uD(`Th4PL@b3}Taw*{B

8R%vVHkSX*~(^QJ(@>R zH#&^%u@&_OzoIUoCAvK0^FWZXE& znA^4f&rng9r3`k)WEtv4A7eho^4+}+C*l}v!rSp2mSNTqZjQTf8vcPrI4;+iS=fYX z=-)UB3x_&3;u}2QoT8#hxINFg!3nHjKQ*6~fjhAVuj8Y*a+ooTFlxB-W?sCD{m*a) zCXX=Y4%~n`-h%mW-`twvYX4kA?%&0*2V^GT}4mBhRs5vkgJKzYr zKiN79HRkhC*DXd3*(!|0T6Ez~)ctlB(EmE&6%J^U9K&EdiF!~As)663Zg2rLiLRsO zMmXc52X#SRpM*NEAG&cE_Qct!7u<+luo2Vo@NM*e3YAkF(1pPaYygfW4A;LU?%$fz zwWaJoYmd#tC&+z-Iq3h^H{$<`hD&o{F)1hOh)SWxex<@qiF0j5$`2xoR;GQ zM1?6}){uIlN%u5Sxu5JH<47l>-cdO~rjrRoJ*x5u(euq#vXG1-T}d`k;bZ7uO8y-- zTWn<_Y8dvBEV7myB(+4P2MHnLwL@7#?j#diI$Pd zaMF(C5q(Tlm@4KTf6duw={`kf+hb4S<778kPaY#LkUH`V2_=WfUgGcn{n(3WN$nwg zkIXjGpL8UfND)aODi1sOzXhtUB+JMOQbA&fN+r>3e^5KN1Ytk&9BClD|9@q&ttR3w zGK7?oRV13IWIFh_$+q4NQ*C{UwKt9-%k6$=YdGFQ`jC-)O8kfCvt8}4Ih!PS-tMQN zS~-;z5MALS#y36co&evQ(O-u8HpYcU$9Oz_viOKIr|=;-|PE4zu)sb-|LgAO&*mSJzTeg zn^zmkQPP1Fdl~ZpziYtA7*i4lSB8=7>~_hV7lPs3m= zM_s=YqwzfU;`!zg6(=V`gN#{(DcBAVBmc~KKJ=g~7=q8SD~51a-6$35oGCzGT!OlO zHFm=-sO!#R7rcTR!KWC*^NkwQv~f#tTswRH26YQ|yR0uoM1`8nJe5tOxc% z%~~dE1SX?~dJd*w5%Nq^i{tSey7YiRnx`Hmp@u#W``}FMfz_x6T(G^5no|ee7=#I^ zh8Lo)+k#p%U!g|i8fpq}qekW_IxsMl@z(>x_*P#;Vow}^YUzAb4@yyUT!EU?T8zbO zsNX$D^*os2@Wu#ij$KjL$DkUNjQlf$`C#zOlrY9$Em_P7C$2=+li7|se+1RQI#dHs zqk4Q5S78t*M`9)B;Wb==@obgBcnB}!W6Z%b?dco_vDLCL%SB}zm0g&QzuLw{SU+5d zX`DZTqwx_=#zYpvB;0_b@D65T91CMPmf#5d4b{LDr*-{WJjHPXCZVgGan%pc;xhDN zq8DHZF2x5}g1Iadoxg&Gn8t#ch{tdYda?k9Vm9i2+b{!v#%zpaMeF^s3^i4oEL~;? zm1dkcXn%18*>dBojK5lVn-ekEh)xWTw_ZpCkm)otP(3S0P04Q5 z2pvZC{99z9n}2O1XocPjgRmct!&X><30RHEc(E7ruN(ct33iZi@~uoq-7p_DC1t4J z?M6R5Z`*(^IsOSV@iD4r$-Rx4fTNL9W*_Q-m(YRUw3T+*$3C8kTC|HX5UWvBb{NC34ukL;WF%bXCKZ29+(R|s z368*!zQ#<)d>nH#-~~@rad@J z`~NnT(R>lbi&+;I;aoh8uVCar{!m~kYL2gC0Y(k78d{DcIlg2Yp2oEt&qgi2j_KC* zIk<@9lQ;*R8T=oC=bLp@wxGvL{O19;qI%{SY`x?2FrVY&I2Qe1w$A5c2FIUZ4*rSV zFms4CRmHY0Y{vOY)KqLjO~rO}X>pvO(gx3Oobg8|<-vSc^`MPhnU55w#ef zp%$m_Fl#$SV|R`xpdL_)9>{CKU3&BBw5sm^*l7K|D2$%j@#4s;Fs1G}+lXqYN|uG$ zjLXPG`&dMg8lv@7MAV5=(o~YD>?57Y2GUH=??e_7rq?};U=HYmqTX&J;|T94_g^+I z%pfYO$qJ&CtwpP{n5-wfGTbklbZjc&RLY3#K# zCXqEnQ>F4MDIp8UbkdQO6O~z{+Fi4D*N1lfU1UwT+zZS;XSPx~Y9Ht&q|s5)obDm7 zlOrUWXr-$}60L=qM00+S>>})H_u2sW8+5HIb{T@&N$w|n1lnGDdAvc=2wUImCvOtH z15^q~B^gM@lNb_5LWw6?M^eZkGLO`frqYE<9vMNFlf$Gr8KWM~Alm;b?^&3YxZSP` z?T-JKVh-99z1etSy2}TAwj)!lLo*vcCL#851dg=p6*z~u|NalNPm1{@f%GM9h)OJ( zOg52eq#w~fSE(XPNdW0jUL&i>UZS#-^dw8j`$Q#^yroKu%=#Mte2;oZV1uLnR_Js8 x`o?Idr%ytnvv=>*#Kfww7-!Q#Qhi3uJ\n" "Language-Team: German\n" "Language: de\n" @@ -16,7 +16,7 @@ msgstr "" "X-Generator: Poedit 2.2.1\n" "X-Loco-Parser: loco_parse_po\n" -#: rcgcdw.py:177 +#: rcgcdw.py:184 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" @@ -25,7 +25,7 @@ msgstr "" "[{author}]({author_url}) bearbeitete [{article}]({edit_link}){comment} " "({sign}{edit_size})" -#: rcgcdw.py:179 +#: rcgcdw.py:186 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" @@ -34,12 +34,12 @@ msgstr "" "[{author}]({author_url}) erstellte [{article}]({edit_link}){comment} ({sign}" "{edit_size})" -#: rcgcdw.py:183 +#: rcgcdw.py:190 #, python-brace-format msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" msgstr "[{author}]({author_url}) lud [{file}]({file_link}) hoch{comment}" -#: rcgcdw.py:191 +#: rcgcdw.py:198 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -48,12 +48,12 @@ msgstr "" "[{author}]({author_url}) lud eine neue Version von [{file}]({file_link}) " "hoch{comment}" -#: rcgcdw.py:195 +#: rcgcdw.py:202 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) löschte [{page}]({page_link}){comment}" -#: rcgcdw.py:200 +#: rcgcdw.py:207 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -62,15 +62,15 @@ msgstr "" "[{author}]({author_url}) löschte die Weiterleitung [{page}]({page_link}) " "durch Überschreiben{comment}" -#: rcgcdw.py:205 rcgcdw.py:211 +#: rcgcdw.py:212 rcgcdw.py:218 msgid "without making a redirect" msgstr "ohne eine Weiterleitung zu erstellen" -#: rcgcdw.py:205 rcgcdw.py:212 +#: rcgcdw.py:212 rcgcdw.py:219 msgid "with a redirect" msgstr "und erstellte eine Weiterleitung" -#: rcgcdw.py:206 +#: rcgcdw.py:213 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" @@ -79,7 +79,7 @@ msgstr "" "[{author}]({author_url}) verschob {redirect}*{article}* nach [{target}]" "({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:213 +#: rcgcdw.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " @@ -88,7 +88,7 @@ msgstr "" "[{author}]({author_url}) verschob {redirect}*{article}* nach [{target}]" "({target_url}) und überschrieb eine Weiterleitung {made_a_redirect}{comment}" -#: rcgcdw.py:219 +#: rcgcdw.py:226 #, python-brace-format msgid "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" @@ -97,18 +97,18 @@ msgstr "" "[{author}]({author_url}) verschob die Schutzeinstellungen von {redirect}" "*{article}* nach [{target}]({target_url}){comment}" -#: rcgcdw.py:231 rcgcdw.py:598 +#: rcgcdw.py:238 rcgcdw.py:637 msgid "infinity and beyond" msgstr "alle Ewigkeit" -#: rcgcdw.py:246 +#: rcgcdw.py:253 #, python-brace-format msgid "" "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}" msgstr "" "[{author}]({author_url}) sperrte [{user}]({user_url}) für {time}{comment}" -#: rcgcdw.py:251 +#: rcgcdw.py:258 #, python-brace-format msgid "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" @@ -117,7 +117,7 @@ msgstr "" "[{author}]({author_url}) änderte die Sperreinstellungen für [{blocked_user}]" "({user_url}){comment}" -#: rcgcdw.py:256 +#: rcgcdw.py:263 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" @@ -125,7 +125,7 @@ msgstr "" "[{author}]({author_url}) hob die Sperre von [{blocked_user}]({user_url}) " "auf{comment}" -#: rcgcdw.py:260 +#: rcgcdw.py:267 #, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" @@ -133,11 +133,11 @@ msgstr "" "[{author}]({author_url}) hinterließ ein [Kommentar]({comment}) auf dem " "Profil von {target}" -#: rcgcdw.py:260 +#: rcgcdw.py:267 msgid "their own profile" msgstr "das eigene Profil" -#: rcgcdw.py:265 +#: rcgcdw.py:272 #, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target} " @@ -146,11 +146,11 @@ msgstr "" "[{author}]({author_url}) antwortete auf ein [Kommentar]({comment}) auf dem " "Profil von {target}" -#: rcgcdw.py:268 rcgcdw.py:276 rcgcdw.py:283 +#: rcgcdw.py:275 rcgcdw.py:283 rcgcdw.py:287 msgid "their own" msgstr "sich selbst" -#: rcgcdw.py:273 +#: rcgcdw.py:280 #, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" @@ -158,90 +158,90 @@ msgstr "" "[{author}]({author_url}) bearbeitete ein [Kommentar]({comment}) auf dem " "Profil von {target}" -#: rcgcdw.py:281 +#: rcgcdw.py:285 #, python-brace-format msgid "[{author}]({author_url}) deleted a comment on {target} profile" msgstr "" "[{author}]({author_url}) löschte ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:289 rcgcdw.py:648 +#: rcgcdw.py:293 rcgcdw.py:684 msgid "Location" msgstr "Wohnort" -#: rcgcdw.py:291 rcgcdw.py:650 +#: rcgcdw.py:295 rcgcdw.py:686 msgid "About me" msgstr "\"Über mich\"-Abschnitt" -#: rcgcdw.py:293 rcgcdw.py:652 +#: rcgcdw.py:297 rcgcdw.py:688 msgid "Google link" msgstr "Google-Link" -#: rcgcdw.py:295 rcgcdw.py:654 +#: rcgcdw.py:299 rcgcdw.py:690 msgid "Facebook link" msgstr "Facebook-Link" -#: rcgcdw.py:297 rcgcdw.py:656 +#: rcgcdw.py:301 rcgcdw.py:692 msgid "Twitter link" msgstr "Twitter-Link" -#: rcgcdw.py:299 rcgcdw.py:658 +#: rcgcdw.py:303 rcgcdw.py:694 msgid "Reddit link" msgstr "Reddit-Link" -#: rcgcdw.py:301 rcgcdw.py:660 +#: rcgcdw.py:305 rcgcdw.py:696 msgid "Twitch link" msgstr "Twitch-Link" -#: rcgcdw.py:303 rcgcdw.py:662 +#: rcgcdw.py:307 rcgcdw.py:698 msgid "PSN link" msgstr "PSN-Link" -#: rcgcdw.py:305 rcgcdw.py:664 +#: rcgcdw.py:309 rcgcdw.py:700 msgid "VK link" msgstr "VK-Link" -#: rcgcdw.py:307 rcgcdw.py:666 +#: rcgcdw.py:311 rcgcdw.py:702 msgid "XVL link" msgstr "Xbox-Live-Link" -#: rcgcdw.py:309 rcgcdw.py:668 +#: rcgcdw.py:313 rcgcdw.py:704 msgid "Steam link" msgstr "Steam-Link" -#: rcgcdw.py:311 rcgcdw.py:670 +#: rcgcdw.py:315 rcgcdw.py:706 msgid "Discord handle" msgstr "Discord-Link" -#: rcgcdw.py:313 +#: rcgcdw.py:317 msgid "unknown" msgstr "unbekannt" -#: rcgcdw.py:314 +#: rcgcdw.py:318 #, python-brace-format msgid "[{target}]({target_url})'s" msgstr "dem Profil von [{target}]({target_url})" -#: rcgcdw.py:314 +#: rcgcdw.py:318 #, python-brace-format msgid "[their own]({target_url})" msgstr "dem [eigenen Profil]({target_url})" -#: rcgcdw.py:315 +#: rcgcdw.py:319 #, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*" msgstr "" "[{author}]({author_url}) bearbeitete den {field} auf {target}. *({desc})*" -#: rcgcdw.py:329 rcgcdw.py:331 rcgcdw.py:701 rcgcdw.py:703 +#: rcgcdw.py:333 rcgcdw.py:335 rcgcdw.py:736 rcgcdw.py:738 msgid "none" msgstr "keine" -#: rcgcdw.py:337 rcgcdw.py:688 +#: rcgcdw.py:341 rcgcdw.py:723 msgid "System" msgstr "System" -#: rcgcdw.py:343 +#: rcgcdw.py:347 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " @@ -250,11 +250,11 @@ msgstr "" "[{author}]({author_url}) schützte [{article}]({article_url}) {settings}" "{comment}" -#: rcgcdw.py:345 rcgcdw.py:354 rcgcdw.py:712 rcgcdw.py:719 +#: rcgcdw.py:349 rcgcdw.py:358 rcgcdw.py:747 rcgcdw.py:754 msgid " [cascading]" msgstr " [kaskadierend]" -#: rcgcdw.py:351 +#: rcgcdw.py:355 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" @@ -263,7 +263,7 @@ msgstr "" "[{author}]({author_url}) änderte den Schutzstatus von [{article}]" "({article_url}) {settings}{comment}" -#: rcgcdw.py:359 +#: rcgcdw.py:363 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" @@ -272,7 +272,7 @@ msgstr "" "[{author}]({author_url}) entfernte den Schutz von [{article}]({article_url})" "{comment}" -#: rcgcdw.py:364 +#: rcgcdw.py:368 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -287,7 +287,7 @@ msgstr[1] "" "[{author}]({author_url}) änderte die Sichtbarkeit von {amount} Versionen von " "[{article}]({article_url}){comment}" -#: rcgcdw.py:370 +#: rcgcdw.py:374 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -302,40 +302,40 @@ msgstr[1] "" "[{author}]({author_url}) importierte [{article}]({article_url}) mit {count} " "Versionen{comment}" -#: rcgcdw.py:376 +#: rcgcdw.py:380 #, python-brace-format msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" "[{author}]({author_url}) stellte [{article}]({article_url}) wieder " "her{comment}" -#: rcgcdw.py:378 +#: rcgcdw.py:382 #, python-brace-format msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "" "[{author}]({author_url}) änderte die Sichtbarkeit eines " "Logbucheintrags{comment}" -#: rcgcdw.py:380 +#: rcgcdw.py:384 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" msgstr "[{author}]({author_url}) importierte Interwiki{comment}" -#: rcgcdw.py:383 +#: rcgcdw.py:387 #, python-brace-format msgid "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" msgstr "" "[{author}]({author_url}) änderte [Missbrauchsfilter {number}]({filter_url})" -#: rcgcdw.py:386 +#: rcgcdw.py:390 #, python-brace-format msgid "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" msgstr "" "[{author}]({author_url}) erstellte [Missbrauchsfilter {number}]({filter_url})" -#: rcgcdw.py:392 +#: rcgcdw.py:396 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -344,7 +344,7 @@ msgstr "" "[{author}]({author_url}) vereinigte Versionen von [{article}]({article_url}) " "in [{dest}]({dest_url}){comment}" -#: rcgcdw.py:396 +#: rcgcdw.py:400 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -353,7 +353,7 @@ msgstr "" "[{author}]({author_url}) erstellte den [Interwiki-Präfix]({table_url}) " "{prefix} nach {website}" -#: rcgcdw.py:402 +#: rcgcdw.py:406 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -362,13 +362,13 @@ msgstr "" "[{author}]({author_url}) bearbeitete den [Interwiki-Präfix]({table_url}) " "{prefix} nach {website}" -#: rcgcdw.py:408 +#: rcgcdw.py:412 #, 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})" -#: rcgcdw.py:412 +#: rcgcdw.py:416 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -377,14 +377,14 @@ msgstr "" "[{author}]({author_url}) änderte das Inhaltsmodell der Seite [{article}]" "({article_url}) von {old} zu {new}{comment}" -#: rcgcdw.py:417 +#: rcgcdw.py:421 #, python-brace-format msgid "" "[{author}]({author_url}) edited the sprite for [{article}]({article_url})" msgstr "" "[{author}]({author_url}) edited the sprite for [{article}]({article_url})" -#: rcgcdw.py:421 +#: rcgcdw.py:425 #, python-brace-format msgid "" "[{author}]({author_url}) created the sprite sheet for [{article}]" @@ -393,77 +393,89 @@ msgstr "" "[{author}]({author_url}) erstellte das Sprite-sheet für [{article}]" "({article_url})" -#: rcgcdw.py:425 +#: rcgcdw.py:429 #, python-brace-format msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" -#: rcgcdw.py:428 +#: rcgcdw.py:432 #, python-brace-format msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" msgstr "" "[{author}]({author_url}) erstellte eine [Markierung]({tag_url}) \"{tag}\"" -#: rcgcdw.py:432 +#: rcgcdw.py:436 #, python-brace-format msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" msgstr "" "[{author}]({author_url}) löschte eine [Markierung]({tag_url}) \"{tag}\"" -#: rcgcdw.py:436 +#: rcgcdw.py:440 #, python-brace-format msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" msgstr "" "[{author}]({author_url}) aktivierte eine [Markierung]({tag_url}) \"{tag}\"" -#: rcgcdw.py:439 +#: rcgcdw.py:443 #, python-brace-format msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" msgstr "" "[{author}]({author_url}) deaktivierte eine [Markierung]({tag_url}) \"{tag}\"" -#: rcgcdw.py:442 +#: rcgcdw.py:445 msgid "An action has been hidden by administration." msgstr "Eine Aktion wurde versteckt." -#: rcgcdw.py:450 rcgcdw.py:704 +#: rcgcdw.py:454 rcgcdw.py:739 msgid "No description provided" msgstr "Keine Zusammenfassung angegeben" -#: rcgcdw.py:500 +#: rcgcdw.py:504 msgid "(N!) " msgstr "(N!) " -#: rcgcdw.py:501 +#: rcgcdw.py:505 msgid "m " msgstr "K " -#: rcgcdw.py:525 rcgcdw.py:560 +#: rcgcdw.py:524 rcgcdw.py:529 +msgid "__Only whitespace__" +msgstr "__Nur Leerraum__" + +#: rcgcdw.py:535 +msgid "Removed" +msgstr "Entfernt" + +#: rcgcdw.py:538 +msgid "Added" +msgstr "Hinzugefügt" + +#: rcgcdw.py:564 rcgcdw.py:599 msgid "Options" msgstr "Optionen" -#: rcgcdw.py:525 +#: rcgcdw.py:564 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "([Vorschau]({link}) | [zurücksetzen]({undolink}))" -#: rcgcdw.py:527 +#: rcgcdw.py:566 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "Neue Dateiversion {name}" -#: rcgcdw.py:529 +#: rcgcdw.py:568 #, python-brace-format msgid "Uploaded {name}" msgstr "Neue Datei {name}" -#: rcgcdw.py:545 +#: rcgcdw.py:584 msgid "**No license!**" msgstr "**Keine Lizenz!**" -#: rcgcdw.py:557 +#: rcgcdw.py:596 msgid "" "\n" "License: {}" @@ -471,472 +483,478 @@ msgstr "" "\n" "Lizenz: {}" -#: rcgcdw.py:560 +#: rcgcdw.py:599 #, python-brace-format msgid "([preview]({link}))" msgstr "([Vorschau]({link}))" -#: rcgcdw.py:565 +#: rcgcdw.py:604 #, python-brace-format msgid "Deleted page {article}" msgstr "Löschte {article}" -#: rcgcdw.py:569 +#: rcgcdw.py:608 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "Löschte die Weiterleitung {article} um Platz zu machen" -#: rcgcdw.py:574 +#: rcgcdw.py:613 msgid "No redirect has been made" msgstr "Die Erstellung einer Weiterleitung wurde unterdrückt" -#: rcgcdw.py:575 +#: rcgcdw.py:614 msgid "A redirect has been made" msgstr "Eine Weiterleitung wurde erstellt" -#: rcgcdw.py:576 +#: rcgcdw.py:615 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "Verschob {redirect}{article} nach {target}" -#: rcgcdw.py:580 +#: rcgcdw.py:619 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "" "Verschob {redirect}{article} nach {title} und überschrieb eine Weiterleitung" -#: rcgcdw.py:585 +#: rcgcdw.py:624 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "Verschob die Schutzeinstellungen von {redirect}{article} nach {title}" -#: rcgcdw.py:608 +#: rcgcdw.py:647 #, python-brace-format msgid "Blocked {blocked_user} for {time}" msgstr "Sperrte {blocked_user} für {time}" -#: rcgcdw.py:614 +#: rcgcdw.py:653 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "Änderte die Sperreinstellungen für {blocked_user}" -#: rcgcdw.py:620 +#: rcgcdw.py:659 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "Hob die Sperre von {blocked_user} auf" -#: rcgcdw.py:625 +#: rcgcdw.py:663 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "Hinterließ ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:627 +#: rcgcdw.py:665 msgid "Left a comment on their own profile" msgstr "Hinterließ ein Kommentar auf dem eigenen Profil" -#: rcgcdw.py:632 +#: rcgcdw.py:669 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "Antwortete auf ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:634 +#: rcgcdw.py:671 msgid "Replied to a comment on their own profile" msgstr "Antwortete auf ein Kommentar auf dem eigenen Profil" -#: rcgcdw.py:639 +#: rcgcdw.py:675 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "Bearbeitete ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:641 +#: rcgcdw.py:677 msgid "Edited a comment on their own profile" msgstr "Bearbeitete ein Kommentar auf dem eigenen Profil" -#: rcgcdw.py:672 rcgcdw.py:811 +#: rcgcdw.py:708 rcgcdw.py:846 msgid "Unknown" msgstr "Unbekannt" -#: rcgcdw.py:673 +#: rcgcdw.py:709 #, python-brace-format msgid "Edited {target}'s profile" msgstr "Bearbeitete das Profil von {target}" -#: rcgcdw.py:673 +#: rcgcdw.py:709 msgid "Edited their own profile" msgstr "Bearbeitete das eigene Profil" -#: rcgcdw.py:675 +#: rcgcdw.py:711 #, python-brace-format msgid "Cleared the {field} field" msgstr "Entfernte den {field}" -#: rcgcdw.py:677 +#: rcgcdw.py:713 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "{field} geändert zu: {desc}" -#: rcgcdw.py:682 +#: rcgcdw.py:717 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "Löschte ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:686 +#: rcgcdw.py:721 #, python-brace-format msgid "Changed group membership for {target}" msgstr "Änderte die Gruppenzugehörigkeit von {target}" -#: rcgcdw.py:690 +#: rcgcdw.py:725 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "{target} got autopromoted to a new usergroup" -#: rcgcdw.py:705 +#: rcgcdw.py:740 #, 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}" -#: rcgcdw.py:710 +#: rcgcdw.py:745 #, python-brace-format msgid "Protected {target}" msgstr "Schützte {target}" -#: rcgcdw.py:717 +#: rcgcdw.py:752 #, python-brace-format msgid "Changed protection level for {article}" msgstr "Änderte den Schutzstatus von {article}" -#: rcgcdw.py:724 +#: rcgcdw.py:759 #, python-brace-format msgid "Removed protection from {article}" msgstr "Entfernte den Schutz von {article}" -#: rcgcdw.py:729 +#: rcgcdw.py:764 #, 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} " -#: rcgcdw.py:735 +#: rcgcdw.py:770 #, 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" -#: rcgcdw.py:741 +#: rcgcdw.py:776 #, python-brace-format msgid "Restored {article}" msgstr "Stellte {article} wieder her" -#: rcgcdw.py:744 +#: rcgcdw.py:779 msgid "Changed visibility of log events" msgstr "Änderte die Sichtbarkeit eines Logbucheintrags" -#: rcgcdw.py:747 +#: rcgcdw.py:782 msgid "Imported interwiki" msgstr "Importierte Interwiki" -#: rcgcdw.py:750 +#: rcgcdw.py:785 #, python-brace-format msgid "Edited abuse filter number {number}" msgstr "Änderte Missbrauchsfilter {number}" -#: rcgcdw.py:753 +#: rcgcdw.py:788 #, python-brace-format msgid "Created abuse filter number {number}" msgstr "Erstellte Missbrauchsfilter {number}" -#: rcgcdw.py:757 +#: rcgcdw.py:792 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "Vereinigte Versionen von {article} in {dest}" -#: rcgcdw.py:761 +#: rcgcdw.py:796 msgid "Added an entry to the interwiki table" msgstr "Fügte ein Interwiki-Präfix hinzu" -#: rcgcdw.py:762 rcgcdw.py:768 +#: rcgcdw.py:797 rcgcdw.py:803 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "Präfix: {prefix}, URL: {website} | {desc}" -#: rcgcdw.py:767 +#: rcgcdw.py:802 msgid "Edited an entry in interwiki table" msgstr "Änderte ein Interwiki-Präfix" -#: rcgcdw.py:773 +#: rcgcdw.py:808 msgid "Deleted an entry in interwiki table" msgstr "Entfernte ein Interwiki-Präfix" -#: rcgcdw.py:774 +#: rcgcdw.py:809 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "Präfix: {prefix} | {desc}" -#: rcgcdw.py:778 +#: rcgcdw.py:813 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "Änderte das Inhaltsmodell von {article}" -#: rcgcdw.py:779 +#: rcgcdw.py:814 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Modell geändert von {old} zu {new}: {reason}" -#: rcgcdw.py:785 +#: rcgcdw.py:820 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Edited the sprite for {article}" -#: rcgcdw.py:789 +#: rcgcdw.py:824 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Created the sprite sheet for {article}" -#: rcgcdw.py:793 +#: rcgcdw.py:828 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Edited the slice for {article}" -#: rcgcdw.py:796 +#: rcgcdw.py:831 #, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "Erstellte die Markierung \"{tag}\"" -#: rcgcdw.py:800 +#: rcgcdw.py:835 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "Löschte die Markierung \"{tag}\"" -#: rcgcdw.py:804 +#: rcgcdw.py:839 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "Aktivierte die Markierung \"{tag}\"" -#: rcgcdw.py:807 +#: rcgcdw.py:842 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "Deaktivierte die Markierung \"{tag}\"" -#: rcgcdw.py:810 +#: rcgcdw.py:845 msgid "Action has been hidden by administration." msgstr "Aktion wurde versteckt" -#: rcgcdw.py:837 +#: rcgcdw.py:872 msgid "Tags" msgstr "Markierungen" -#: rcgcdw.py:843 +#: rcgcdw.py:877 msgid "**Added**: " msgstr "**Hinzugefügt:** " -#: rcgcdw.py:843 +#: rcgcdw.py:877 msgid " and {} more\n" msgstr " und {} mehr\n" -#: rcgcdw.py:844 +#: rcgcdw.py:878 msgid "**Removed**: " msgstr "**Entfernt:** " -#: rcgcdw.py:844 +#: rcgcdw.py:878 msgid " and {} more" msgstr " und {} mehr" -#: rcgcdw.py:845 +#: rcgcdw.py:879 msgid "Changed categories" msgstr "Geänderte Kategorien" -#: rcgcdw.py:886 +#: rcgcdw.py:920 msgid "~~hidden~~" msgstr "~~versteckt~~" -#: rcgcdw.py:892 +#: rcgcdw.py:926 msgid "hidden" msgstr "versteckt" -#: rcgcdw.py:995 +#: rcgcdw.py:1000 rcgcdw.py:1002 rcgcdw.py:1004 rcgcdw.py:1006 rcgcdw.py:1008 +#: rcgcdw.py:1010 rcgcdw.py:1012 +#, python-brace-format +msgid "{value} (avg. {avg})" +msgstr "" + +#: rcgcdw.py:1053 msgid "Daily overview" msgstr "Tägliche Übersicht" -#: rcgcdw.py:1005 +#: rcgcdw.py:1062 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " (eine Aktion)" msgstr[1] " ({} Aktionen)" -#: rcgcdw.py:1009 +#: rcgcdw.py:1064 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " (eine Änderung)" msgstr[1] " ({} Änderungen)" -#: rcgcdw.py:1014 +#: rcgcdw.py:1069 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC (eine Aktion)" msgstr[1] " UTC ({} Aktionen)" -#: rcgcdw.py:1016 rcgcdw.py:1017 rcgcdw.py:1021 +#: rcgcdw.py:1071 rcgcdw.py:1072 rcgcdw.py:1076 msgid "But nobody came" msgstr "Keine Aktivität" -#: rcgcdw.py:1024 +#: rcgcdw.py:1080 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Aktivster Benutzer" msgstr[1] "Aktivste Benutzer" -#: rcgcdw.py:1025 +#: rcgcdw.py:1081 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "Meist bearbeiteter Artikel" msgstr[1] "Meist bearbeitete Artikel" -#: rcgcdw.py:1026 +#: rcgcdw.py:1082 msgid "Edits made" msgstr "Bearbeitungen" -#: rcgcdw.py:1026 +#: rcgcdw.py:1082 msgid "New files" msgstr "Neue Dateien" -#: rcgcdw.py:1026 +#: rcgcdw.py:1082 msgid "Admin actions" msgstr "Admin-Aktionen" -#: rcgcdw.py:1027 +#: rcgcdw.py:1083 msgid "Bytes changed" msgstr "Bytes geändert" -#: rcgcdw.py:1027 +#: rcgcdw.py:1083 msgid "New articles" msgstr "Neue Artikel" -#: rcgcdw.py:1028 +#: rcgcdw.py:1084 msgid "Unique contributors" msgstr "Einzelne Autoren" -#: rcgcdw.py:1029 +#: rcgcdw.py:1085 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Aktivste Stunde" msgstr[1] "Aktivste Stunden" -#: rcgcdw.py:1030 +#: rcgcdw.py:1086 msgid "Day score" msgstr "Tageswert" -#: rcgcdw.py:1177 +#: rcgcdw.py:1227 #, python-brace-format msgid "Connection to {wiki} seems to be stable now." msgstr "{wiki} scheint wieder erreichbar zu sein." -#: rcgcdw.py:1178 rcgcdw.py:1289 +#: rcgcdw.py:1228 rcgcdw.py:1339 msgid "Connection status" msgstr "Verbindungsstatus" -#: rcgcdw.py:1288 +#: rcgcdw.py:1338 #, python-brace-format msgid "{wiki} seems to be down or unreachable." msgstr "Das {wiki} scheint unerreichbar zu sein." -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "director" msgstr "Direktor" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "bot" msgstr "Bot" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "editor" msgstr "editor" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "directors" msgstr "Direktor" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "sysop" msgstr "Administrator" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "bureaucrat" msgstr "Bürokrat" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "reviewer" msgstr "reviewer" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "autoreview" msgstr "autoreview" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "autopatrol" msgstr "autopatrol" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "wiki_guardian" msgstr "Wiki Guardian" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "second" msgid_plural "seconds" msgstr[0] "Sekunde" msgstr[1] "Sekunden" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "minute" msgid_plural "minutes" msgstr[0] "Minute" msgstr[1] "Minuten" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "hour" msgid_plural "hours" msgstr[0] "Stunde" msgstr[1] "Stunden" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "day" msgid_plural "days" msgstr[0] "Tag" msgstr[1] "Tage" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "week" msgid_plural "weeks" msgstr[0] "Woche" msgstr[1] "Wochen" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "month" msgid_plural "months" msgstr[0] "Monat" msgstr[1] "Monate" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "year" msgid_plural "years" msgstr[0] "Jahr" msgstr[1] "Jahre" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "millennium" msgid_plural "millennia" msgstr[0] "Jahrtausend" msgstr[1] "Jahrtausende" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "decade" msgid_plural "decades" msgstr[0] "Jahrzehnt" msgstr[1] "Jahrzehnte" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "century" msgid_plural "centuries" msgstr[0] "Jahrhundert" diff --git a/locale/pl/LC_MESSAGES/rcgcdw.mo b/locale/pl/LC_MESSAGES/rcgcdw.mo index cd40a5c83a9e2422980bb223d7c895a443d2f5df..36a3a0b1b4042ede1fbb0fabbe0be4773476c82a 100644 GIT binary patch delta 3904 zcmYk;2~bs40LJkHDvKxxD3I%OM-~N?z#SJzaUu6zB#=TB2r_(buf^0zaRIf=%FHcI z&3UFY&ghipmNwetFx5ylm8Ci6G-k^Bd{k78Rqg;Dr5cES7h`^YfocP?zn@kHcOW+2AmFpR_n zs7tRz{ye6NPo1zGV{ktP;V0M&FJUx3KwYp!D`UE21nRtWOu#Jcj1|aF%@+Ip9@KTb z7=brX=ikR3+}}in8`FmagVBYHa1mDHWB3U9Gf|wa8^vN9oPyo37<=GGWH8JL490V) z^RHr0yn{L~f??>2u^7eu%~&exVLs{t>rp-2fx7Ugs1t6ZhP-8KV>)6IcETLg$d#gQ zxE7n^F4PDeLJj#zOvm#`UwpmsOvFgKr5hBYo~Q~n1xGLi>o6XFMRg#W1t15Y=5`Ja z#?`2fpGBQ_2eo!OFn=16IMh`3<3k-C8_oC!QYqwsZdhW!sKi9tn@~MHje3GFQNM3M z&GjwR$OZBEahQVo{T$Q?lwkla!>0HW>N;ys9jl39{HdFrd@#D^W7G|XCj2H;cHBJ`~V)P0trKW@O* z+W(uW=tBEYi{dzHv7ABO=z{(J8aAVS6Lq6os1Du7K=hAwZqyvL?b@K$PFG|(n7;P= zapb-7-lKz zcQwc|FsG57X?{cv`6HySrWJcy?SZI{=Oi-zJe=`xfc0VaBMaPofrs!eYUsB2b}o1f zb)(D3yU6^7IzN=F>BecODVdGUu>^I#8~b7n>b&!)j^F6R__Nc@Lk`Ts$RuZ|OHos? z0<|mlplcl3=&iCz+9cMOb^bZb!GAFV$EP}rJP$RMWvB=Dtf8Vs zvKxc&0P0D+$h4U&s1yD{JwZ6#*Xr+pyb?@LWEM;|>ILP-DEtUD1(#84rXIDc8c^5y z0bA(Vf1{#*EFPhTB%1E4BYjXeNXOPV3pFBT_WLEsDdt7Yz&c!kf8&!_na(=^FW^Fq z@9(^jUdQ3=ss@~`vF}W`hw_7!I0aAPcx*k0w;kqVHtxfb_&W~6w86$qL^m$L%Q#!d zhd8g;TGaI#P*dEGn>>NXa1=h0`XV!f`KL$K$TiGiu096uVmYP{ci!O#aW(DE^lBaM z#}$}LuiWUxd6<~#j6gMxqx~J~ff89DS|iK(n2cx8!-6(3bgMm%#tv9$U4>0(??TPx zUVIFXVkmx&k@yX2%I=|l_or?9^Oym&Lof;>P;=i4{V{bE1Jj*KItO&2xu}kmqZZ2s z48vN~1$Lvh(@E<^d%Pa?yL+e({)_5h%xGsD_QV9*{jmiW+IGcg#(w|@c5*=b`df^{ z2dF3Ml+6}I4WFi_u|zjkP}^)i*=LUx;oD>-(E?S6Hk1FCG8%d0SZ=#MER8U^j^mx&5X#kUsL<1Dh9sJuY75$y==vS6ZefXpGj|NmO)2xXIl zslighAo$ipsy*HZ^KD&J+xk@0yuL?xv6&ai2c(LqbRk*?6V#wo5G}x5ZH#VI*rL9L zrn%9IpGF$X2r5BjE$L(r#^N)!-VC+vR@?SMbdffMo#)#DDfkxIN+uB%)+kfX_%HP} zosR_2!g-zW8Zd`R2ANA#hLdnIlsrdNvPgli=6vw}G4GP6$RV>zKFSIBm9kgOwn zxWDhMb_913mA#}p(Od5w(w}T0{fKtKt7I(cOjI^Fm|CkFpC?PmBBGt8QbM%5R;gi& zrzw@bWIx$x4>mI0R=VOFWDt3pEF)n=CCS0}+0)iLVw|nduqNUdQfb@m9J77ftQU>m zWTgFa0WP<7(Sy8i+wrJTn@KXs0OC)KcTs48pZD{yuL8Z>q65Psb8~Y_7P?)P&lEj3 zzoINJe|~PR_pKg-{DV@GT*+wzlGAFwk9FBbN{TnQ*FAsl{rD@vUTHB4}<8Hw1k7KvWP?L=l7(+%Q~F6ja1iP)w72ZmF0{Zn>3d zO5)n`%we3G$UE==iYahbI)@1@K&E)TYTKt z!u+-w%2CpeRQVfo6Mt;NhB7zUm}Xdx&)^b_z@69$-?xAN*7j#?&hcBwt;{3rjy@sA zw8U6!iv5v4x5;L!3&vqiQQk z47a1MKaAb*BKG9@<^dH42clbWGG<{LJc<07i){3udTfOu+^q|CMcpVHc}Y`_LAVrk z{aTF11E}lHV`r>K^MyYa{)QbfDBS9?7}NvP zQKL2i)dSN}U0sPuxD0u=IfWzf8+7Xd4w|Po8jR}tQcS=KjKdmK11{O#Lyc)9ukjqF zp&Gsfb=?8foVkkXksGKXyp3vT06T%`h@}7Z!0sH-5Ao>498^meq26E}YK(WF#`F}% z;tkY!Axs>-c_$1&C;DL`>iT3Y};X};FuiF}vf>A8BVK~uEC6CGx9Dt8)Q`=i7 zR$+gR*I^Dmz_B=pi7*CtV>aH!=P{LuQHj-gGa5#oB0Wz=%b-#m{hIeoT#xtY!{aAq-sy&u& zbBIbK4xF%ms6$qo`5e{t-=S8=HGBUS2C;u115j&B2BK~pj2hcE=!;Hdq8k_LJ{hRF zFdF@|{)?#SLDTFL=Ab|OOHdD5iE7XW48*;t2i2mMnFlpzP9wu_F4@2Tjt=(kV-Jk% zZZ%{ua>x{56P|CDQ90+sEJxiiKh|3J#mGyVHP{p1L$&-T)C2!OzFp=qs=>|UtOvD3 zy>S}q{4uCiG6i*AB{JIPRdlQC4pQOI9B0E4HQyui#@t0Fx@kf4^?NMpJCTp9JhK?p z)mxA@n1lBIWmJQILEgzku%?*?W&kpOO$i>u6;AqJT^9eWb;BIggQg zFQA6vFKmMTJVn=sVlRwET~~-|_Ln~EmGUgXbw z#by*f!XnJ&wTkfr9D)(FRyUZ4xws9(@FoW1L(~uk_O{-<18Q!hU}GGJdXa2obd0;0 ziZ0lMdV^YI$(s{MFPp2VFIE7rrSsBJU0;BjJH_aSWvJ`tVl%8lt@mnFPaHrs;A7PN z&tkYb=T|D~ihu1B{CPd9CK%H&17E>an1_Bz%w!ycv#<^`uxm1nV-=O*1on^jv%aWJ zY5f@Xb8tBB!$Eilvo$!0sr<{w0XGiBGdL0ho-<}97NBl;28Uu)f9r;2sIfhbnK*EO z_2sL!y^I}cP}?-?-;5M)p2K;IumaCwrEZXv&fDQ}T!+1Bp5FK~T!d+~ZZe)i^*~!* zcNoq>z0oPu+z4Vb8uO5OYHF}OUa`H0jo1&PwHm?*bhn`rMMaY*1zTb^YOD%TCr-Eb zD=>il#TbFhQDeRneX$0+VlC=E7qA`HqvpsH3_-sv>-z94I#A0ejsr5;{vi`}Vj-%5 zvr!FPgDr47YW5yNO|~oc{&i&7O(^4}Wt@YtSd4m+jmU_2CpMUP4WL6cN}R>hExm7c zKHak_Oabrz5!a*MTt!2n@;aGEGz1Mry|JHY+{=j?TSXd5qQ?Ji(uurAG(H{4EW&i~ zz6F?fw4rn%+ll4@A2V+^`(qkWd6_IA*;TSx^7A<1MWSxEK}m0iS1=8{d;NLl}L zUEw(vTPg3Hw;FV{J;WI^e?(mAu8gNx>u l^m8O|hSSyCX`h$mDT}%7>zUl+iy)7yPn#B=X_;qy{{!qwfSdpT diff --git a/locale/pl/LC_MESSAGES/rcgcdw.po b/locale/pl/LC_MESSAGES/rcgcdw.po index af94a16..a1db538 100644 --- a/locale/pl/LC_MESSAGES/rcgcdw.po +++ b/locale/pl/LC_MESSAGES/rcgcdw.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-19 18:32+0200\n" -"PO-Revision-Date: 2019-05-19 18:38+0200\n" +"POT-Creation-Date: 2019-05-20 17:17+0200\n" +"PO-Revision-Date: 2019-05-20 17:22+0200\n" "Last-Translator: Frisk \n" "Language-Team: \n" "Language: pl\n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: rcgcdw.py:223 +#: rcgcdw.py:184 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" @@ -28,7 +28,7 @@ msgstr "" "[{author}]({author_url}) editował(-a) [{article}]({edit_link}){comment} " "({sign}{edit_size})" -#: rcgcdw.py:225 +#: rcgcdw.py:186 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" @@ -37,12 +37,12 @@ msgstr "" "[{author}]({author_url}) stworzył(-a) [{article}]({edit_link}){comment} " "({sign}{edit_size})" -#: rcgcdw.py:229 +#: rcgcdw.py:190 #, python-brace-format msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" msgstr "[{author}]({author_url}) przesłał(-a) [{file}]({file_link}){comment}" -#: rcgcdw.py:237 +#: rcgcdw.py:198 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -51,12 +51,12 @@ msgstr "" "[{author}]({author_url}) przesłał(-a) nową wersję [{file}]({file_link})" "{comment}" -#: rcgcdw.py:241 +#: rcgcdw.py:202 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) usunął/usunęła [{page}]({page_link}){comment}" -#: rcgcdw.py:246 +#: rcgcdw.py:207 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -65,15 +65,15 @@ msgstr "" "[{author}]({author_url}) usunął/usunęła przekierowanie przez nadpisanie " "[{page}]({page_link}){comment}" -#: rcgcdw.py:251 rcgcdw.py:257 +#: rcgcdw.py:212 rcgcdw.py:218 msgid "without making a redirect" msgstr "bez utworzenia przekierowania przekierowania" -#: rcgcdw.py:251 rcgcdw.py:258 +#: rcgcdw.py:212 rcgcdw.py:219 msgid "with a redirect" msgstr "z przekierowaniem" -#: rcgcdw.py:252 +#: rcgcdw.py:213 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" @@ -82,7 +82,7 @@ msgstr "" "[{author}]({author_url}) przeniósł/przeniosła {redirect}*{article}* do " "[{target}]({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:259 +#: rcgcdw.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " @@ -91,7 +91,7 @@ msgstr "" "[{author}]({author_url}) przeniósł/przeniosła {redirect}*{article}* do " "przekierowania [{target}]({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:265 +#: rcgcdw.py:226 #, python-brace-format msgid "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" @@ -100,11 +100,11 @@ msgstr "" "[{author}]({author_url}) przeniósł/przeniosła ustawienia zabezpieczeń z " "{redirect}*{article}* do [{target}]({target_url}){comment}" -#: rcgcdw.py:277 rcgcdw.py:644 +#: rcgcdw.py:238 rcgcdw.py:637 msgid "infinity and beyond" msgstr "wieczność" -#: rcgcdw.py:292 +#: rcgcdw.py:253 #, python-brace-format msgid "" "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}" @@ -112,7 +112,7 @@ msgstr "" "[{author}]({author_url}) zablokował(-a) [{user}]({user_url}) na {time}" "{comment}" -#: rcgcdw.py:297 +#: rcgcdw.py:258 #, python-brace-format msgid "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" @@ -121,25 +121,25 @@ msgstr "" "[{author}]({author_url}) zmienił(-a) ustawienia blokady dla [{blocked_user}]" "({user_url}){comment}" -#: rcgcdw.py:302 +#: rcgcdw.py:263 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" msgstr "" "[{author}]({author_url}) odblokował(-a) [{blocked_user}]({user_url}){comment}" -#: rcgcdw.py:306 +#: rcgcdw.py:267 #, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" msgstr "" "[{author}]({author_url}) pozostawił(-a) [komentarz]({comment}) na {target}" -#: rcgcdw.py:306 +#: rcgcdw.py:267 msgid "their own profile" msgstr "swoim własnym profilu" -#: rcgcdw.py:311 +#: rcgcdw.py:272 #, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target} " @@ -148,100 +148,100 @@ msgstr "" "[{author}]({author_url}) odpowiedział(-a) na [komentarz]({comment}) na " "{target}" -#: rcgcdw.py:314 rcgcdw.py:322 rcgcdw.py:329 +#: rcgcdw.py:275 rcgcdw.py:283 rcgcdw.py:287 msgid "their own" msgstr "swój własny" -#: rcgcdw.py:319 +#: rcgcdw.py:280 #, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" msgstr "" "[{author}]({author_url}) edytował(-a) [komentarz]({comment}) na {target}" -#: rcgcdw.py:327 +#: rcgcdw.py:285 #, python-brace-format msgid "[{author}]({author_url}) deleted a comment on {target} profile" msgstr "[{author}]({author_url}) usunął/usunęła komentarz na {target}" -#: rcgcdw.py:335 rcgcdw.py:694 +#: rcgcdw.py:293 rcgcdw.py:684 msgid "Location" msgstr "Lokacja" -#: rcgcdw.py:337 rcgcdw.py:696 +#: rcgcdw.py:295 rcgcdw.py:686 msgid "About me" msgstr "O mnie" -#: rcgcdw.py:339 rcgcdw.py:698 +#: rcgcdw.py:297 rcgcdw.py:688 msgid "Google link" msgstr "link Google" -#: rcgcdw.py:341 rcgcdw.py:700 +#: rcgcdw.py:299 rcgcdw.py:690 msgid "Facebook link" msgstr "link Facebook" -#: rcgcdw.py:343 rcgcdw.py:702 +#: rcgcdw.py:301 rcgcdw.py:692 msgid "Twitter link" msgstr "link Twitter" -#: rcgcdw.py:345 rcgcdw.py:704 +#: rcgcdw.py:303 rcgcdw.py:694 msgid "Reddit link" msgstr "link Reddit" -#: rcgcdw.py:347 rcgcdw.py:706 +#: rcgcdw.py:305 rcgcdw.py:696 msgid "Twitch link" msgstr "link Twitch" -#: rcgcdw.py:349 rcgcdw.py:708 +#: rcgcdw.py:307 rcgcdw.py:698 msgid "PSN link" msgstr "link PSN" -#: rcgcdw.py:351 rcgcdw.py:710 +#: rcgcdw.py:309 rcgcdw.py:700 msgid "VK link" msgstr "link VK" -#: rcgcdw.py:353 rcgcdw.py:712 +#: rcgcdw.py:311 rcgcdw.py:702 msgid "XVL link" msgstr "link XVL" -#: rcgcdw.py:355 rcgcdw.py:714 +#: rcgcdw.py:313 rcgcdw.py:704 msgid "Steam link" msgstr "link Steam" -#: rcgcdw.py:357 rcgcdw.py:716 +#: rcgcdw.py:315 rcgcdw.py:706 msgid "Discord handle" msgstr "konto Discord" -#: rcgcdw.py:359 +#: rcgcdw.py:317 msgid "unknown" msgstr "nieznana sekcja" -#: rcgcdw.py:360 +#: rcgcdw.py:318 #, python-brace-format msgid "[{target}]({target_url})'s" msgstr "na profilu użytkownika [{target}]({target_url})" -#: rcgcdw.py:360 +#: rcgcdw.py:318 #, python-brace-format msgid "[their own]({target_url})" msgstr "na [swoim własnym profilu użytkownika]({target_url})" -#: rcgcdw.py:361 +#: rcgcdw.py:319 #, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*" msgstr "" "[{author}]({author_url}) edytował(-a) pole {field} {target}. *({desc})*" -#: rcgcdw.py:375 rcgcdw.py:377 rcgcdw.py:747 rcgcdw.py:749 +#: rcgcdw.py:333 rcgcdw.py:335 rcgcdw.py:736 rcgcdw.py:738 msgid "none" msgstr "brak" -#: rcgcdw.py:383 rcgcdw.py:734 +#: rcgcdw.py:341 rcgcdw.py:723 msgid "System" msgstr "System" -#: rcgcdw.py:389 +#: rcgcdw.py:347 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " @@ -250,11 +250,11 @@ msgstr "" "[{author}]({author_url}) zabezpieczył(-a) [{article}]({article_url}) z " "następującymi ustawieniami: {settings}{comment}" -#: rcgcdw.py:391 rcgcdw.py:400 rcgcdw.py:758 rcgcdw.py:765 +#: rcgcdw.py:349 rcgcdw.py:358 rcgcdw.py:747 rcgcdw.py:754 msgid " [cascading]" msgstr " [kaskadowo]" -#: rcgcdw.py:397 +#: rcgcdw.py:355 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" @@ -263,7 +263,7 @@ msgstr "" "[{author}]({author_url}) modyfikował(-a) ustawienia zabezpieczeń [{article}]" "({article_url}) na: {settings}{comment}" -#: rcgcdw.py:405 +#: rcgcdw.py:363 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" @@ -272,7 +272,7 @@ msgstr "" "[{author}]({author_url}) usunął/usunęła zabezpieczenia z [{article}]" "({article_url}){comment}" -#: rcgcdw.py:410 +#: rcgcdw.py:368 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -290,7 +290,7 @@ msgstr[2] "" "[{author}]({author_url}) zmienił(-a) widoczność {amount} wersji strony " "[{article}]({article_url}){comment}" -#: rcgcdw.py:416 +#: rcgcdw.py:374 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -308,23 +308,23 @@ msgstr[2] "" "[{author}]({author_url}) zaimportował(-a) [{article}]({article_url}) {count} " "wersjami{comment}" -#: rcgcdw.py:422 +#: rcgcdw.py:380 #, python-brace-format msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" "[{author}]({author_url}) przywrócił(-a) [{article}]({article_url}){comment}" -#: rcgcdw.py:424 +#: rcgcdw.py:382 #, python-brace-format msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "[{author}]({author_url}) zmienił(-a) widoczność wydarzeń{comment}" -#: rcgcdw.py:426 +#: rcgcdw.py:384 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" msgstr "[{author}]({author_url}) zaimportował(-a) interwiki{comment}" -#: rcgcdw.py:429 +#: rcgcdw.py:387 #, python-brace-format msgid "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" @@ -332,7 +332,7 @@ msgstr "" "[{author}]({author_url}) edytował(-a) filtr nadużyć [numer {number}]" "({filter_url})" -#: rcgcdw.py:432 +#: rcgcdw.py:390 #, python-brace-format msgid "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" @@ -340,7 +340,7 @@ msgstr "" "[{author}]({author_url}) stworzył(-a) filtr nadużyć [numer {number}]" "({filter_url})" -#: rcgcdw.py:438 +#: rcgcdw.py:396 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -349,7 +349,7 @@ msgstr "" "[{author}]({author_url}) połączył(-a) historie zmian [{article}]" "({article_url}) z [{dest}]({dest_url}){comment}" -#: rcgcdw.py:442 +#: rcgcdw.py:400 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -358,7 +358,7 @@ msgstr "" "[{author}]({author_url}) dodał(-a) wpis do [tabeli interwiki]({table_url}), " "który prowadzi do {website} z prefixem {prefix}" -#: rcgcdw.py:448 +#: rcgcdw.py:406 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -367,7 +367,7 @@ msgstr "" "[{author}]({author_url}) edytował(-a) wpis w [tabeli interwiki]" "({table_url}), który prowadzi do {website} z prefixem {prefix}" -#: rcgcdw.py:454 +#: rcgcdw.py:412 #, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" @@ -375,7 +375,7 @@ msgstr "" "[{author}]({author_url}) usunął/usunęła wpis z [tabeli interwiki]" "({table_url})" -#: rcgcdw.py:458 +#: rcgcdw.py:416 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -384,14 +384,14 @@ msgstr "" "[{author}]({author_url}) zmienił(-a) model zawartości [{article}]" "({article_url}) z {old} na {new}{comment}" -#: rcgcdw.py:463 +#: rcgcdw.py:421 #, python-brace-format msgid "" "[{author}]({author_url}) edited the sprite for [{article}]({article_url})" msgstr "" "[{author}]({author_url}) edytował(-a) sprite [{article}]({article_url})" -#: rcgcdw.py:467 +#: rcgcdw.py:425 #, python-brace-format msgid "" "[{author}]({author_url}) created the sprite sheet for [{article}]" @@ -399,72 +399,84 @@ msgid "" msgstr "" "[{author}]({author_url}) utworzył(-a) sprite sheet [{article}]({article_url})" -#: rcgcdw.py:471 +#: rcgcdw.py:429 #, python-brace-format msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "[{author}]({author_url}) edytował(-a) slice [{article}]({article_url})" -#: rcgcdw.py:474 +#: rcgcdw.py:432 #, python-brace-format msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) utworzył(-a) [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:478 +#: rcgcdw.py:436 #, python-brace-format msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) usunął/usunęła [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:482 +#: rcgcdw.py:440 #, python-brace-format msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) aktywował(-a) [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:485 +#: rcgcdw.py:443 #, python-brace-format msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) dezaktywował(-a) [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:488 +#: rcgcdw.py:445 msgid "An action has been hidden by administration." msgstr "Akcja została ukryta przez administrację." -#: rcgcdw.py:496 rcgcdw.py:750 +#: rcgcdw.py:454 rcgcdw.py:739 msgid "No description provided" msgstr "Nie podano opisu zmian" -#: rcgcdw.py:546 +#: rcgcdw.py:504 msgid "(N!) " msgstr "(N!) " -#: rcgcdw.py:547 +#: rcgcdw.py:505 msgid "m " msgstr "d " -#: rcgcdw.py:571 rcgcdw.py:606 +#: rcgcdw.py:524 rcgcdw.py:529 +msgid "__Only whitespace__" +msgstr "__Tylko znaki niedrukowane__" + +#: rcgcdw.py:535 +msgid "Removed" +msgstr "Usunięto" + +#: rcgcdw.py:538 +msgid "Added" +msgstr "Dodano" + +#: rcgcdw.py:564 rcgcdw.py:599 msgid "Options" msgstr "Opcje" -#: rcgcdw.py:571 +#: rcgcdw.py:564 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "([podgląd]({link}) | [wycofaj]({undolink}))" -#: rcgcdw.py:573 +#: rcgcdw.py:566 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "Przesłał(a) nową wersję {name}" -#: rcgcdw.py:575 +#: rcgcdw.py:568 #, python-brace-format msgid "Uploaded {name}" msgstr "Przesłał(a) {name}" -#: rcgcdw.py:591 +#: rcgcdw.py:584 msgid "**No license!**" msgstr "**Brak licencji!**" -#: rcgcdw.py:603 +#: rcgcdw.py:596 msgid "" "\n" "License: {}" @@ -472,148 +484,148 @@ msgstr "" "\n" "Licencja: {}" -#: rcgcdw.py:606 +#: rcgcdw.py:599 #, python-brace-format msgid "([preview]({link}))" msgstr "([podgląd]({link}))" -#: rcgcdw.py:611 +#: rcgcdw.py:604 #, python-brace-format msgid "Deleted page {article}" msgstr "Usunął/usunęła {article}" -#: rcgcdw.py:615 +#: rcgcdw.py:608 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "" "Usunął/usunęła przekierowanie ({article}) aby utworzyć miejsce dla " "przenoszonej strony" -#: rcgcdw.py:620 +#: rcgcdw.py:613 msgid "No redirect has been made" msgstr "Nie utworzono przekierowania" -#: rcgcdw.py:621 +#: rcgcdw.py:614 msgid "A redirect has been made" msgstr "Zostało utworzone przekierowanie" -#: rcgcdw.py:622 +#: rcgcdw.py:615 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "Przeniósł/przeniosła {redirect}{article} do {target}" -#: rcgcdw.py:626 +#: rcgcdw.py:619 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "" "Przeniósł/przeniosła {redirect}{article} do strony przekierowującej {title}" -#: rcgcdw.py:631 +#: rcgcdw.py:624 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "Przeniesiono ustawienia zabezpieczeń z {redirect}{article} do {title}" -#: rcgcdw.py:654 +#: rcgcdw.py:647 #, python-brace-format msgid "Blocked {blocked_user} for {time}" msgstr "Zablokowano {blocked_user} na {time}" -#: rcgcdw.py:660 +#: rcgcdw.py:653 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "Zmienił ustawienia blokady {blocked_user}" -#: rcgcdw.py:666 +#: rcgcdw.py:659 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "Odblokował {blocked_user}" -#: rcgcdw.py:671 +#: rcgcdw.py:663 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "Pozostawiono komentarz na profilu użytkownika {target}" -#: rcgcdw.py:673 +#: rcgcdw.py:665 msgid "Left a comment on their own profile" msgstr "Pozostawił(a) komentarz na swoim profilu" -#: rcgcdw.py:678 +#: rcgcdw.py:669 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "Odpowiedziano na komentarz na profilu użytkownika {target}" -#: rcgcdw.py:680 +#: rcgcdw.py:671 msgid "Replied to a comment on their own profile" msgstr "Odpowiedział(a) na komentarz na swoim profilu" -#: rcgcdw.py:685 +#: rcgcdw.py:675 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "Edytowano komentarz na profilu użytkownika {target}" -#: rcgcdw.py:687 +#: rcgcdw.py:677 msgid "Edited a comment on their own profile" msgstr "Edytował(a) komentarz na swoim profilu" -#: rcgcdw.py:718 rcgcdw.py:857 +#: rcgcdw.py:708 rcgcdw.py:846 msgid "Unknown" msgstr "Nieznana" -#: rcgcdw.py:719 +#: rcgcdw.py:709 #, python-brace-format msgid "Edited {target}'s profile" msgstr "Edytowano profil użytkownika {target}" -#: rcgcdw.py:719 +#: rcgcdw.py:709 msgid "Edited their own profile" msgstr "Edytował(a) swój profil" -#: rcgcdw.py:721 +#: rcgcdw.py:711 #, python-brace-format msgid "Cleared the {field} field" msgstr "Wyczyszczono pole {field}" -#: rcgcdw.py:723 +#: rcgcdw.py:713 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "pole \"{field}\" zostało zmienione na: {desc}" -#: rcgcdw.py:728 +#: rcgcdw.py:717 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "Usunął komentarz na profilu użytkownika {target}" -#: rcgcdw.py:732 +#: rcgcdw.py:721 #, python-brace-format msgid "Changed group membership for {target}" msgstr "Zmieniono przynależność do grup dla {target}" -#: rcgcdw.py:736 +#: rcgcdw.py:725 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "{target} automatycznie otrzymał nową grupę użytkownika" -#: rcgcdw.py:751 +#: rcgcdw.py:740 #, python-brace-format msgid "Groups changed from {old_groups} to {new_groups}{reason}" msgstr "Grupy zmienione z {old_groups} do {new_groups}{reason}" -#: rcgcdw.py:756 +#: rcgcdw.py:745 #, python-brace-format msgid "Protected {target}" msgstr "Zabezpieczono {target}" -#: rcgcdw.py:763 +#: rcgcdw.py:752 #, python-brace-format msgid "Changed protection level for {article}" msgstr "Zmieniono poziom zabezpieczeń {article}" -#: rcgcdw.py:770 +#: rcgcdw.py:759 #, python-brace-format msgid "Removed protection from {article}" msgstr "Usunięto zabezpieczenie {article}" -#: rcgcdw.py:775 +#: rcgcdw.py:764 #, python-brace-format msgid "Changed visibility of revision on page {article} " msgid_plural "Changed visibility of {amount} revisions on page {article} " @@ -621,7 +633,7 @@ 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} " -#: rcgcdw.py:781 +#: rcgcdw.py:770 #, python-brace-format msgid "Imported {article} with {count} revision" msgid_plural "Imported {article} with {count} revisions" @@ -629,339 +641,339 @@ msgstr[0] "Zaimportowano {article} z {count} wersją" msgstr[1] "Zaimportowano {article} z {count} wersjami" msgstr[2] "Zaimportowano {article} z {count} wersjami" -#: rcgcdw.py:787 +#: rcgcdw.py:776 #, python-brace-format msgid "Restored {article}" msgstr "Przywrócono {article}" -#: rcgcdw.py:790 +#: rcgcdw.py:779 msgid "Changed visibility of log events" msgstr "Zmieniono widoczność logów" -#: rcgcdw.py:793 +#: rcgcdw.py:782 msgid "Imported interwiki" msgstr "Zaimportowano interwiki" -#: rcgcdw.py:796 +#: rcgcdw.py:785 #, python-brace-format msgid "Edited abuse filter number {number}" msgstr "Edytowano filtr nadużyć numer {number}" -#: rcgcdw.py:799 +#: rcgcdw.py:788 #, python-brace-format msgid "Created abuse filter number {number}" msgstr "Utworzono filtr nadużyć numer {number}" -#: rcgcdw.py:803 +#: rcgcdw.py:792 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "Połączono historie {article} z {dest}" -#: rcgcdw.py:807 +#: rcgcdw.py:796 msgid "Added an entry to the interwiki table" msgstr "Dodano wpis do tabeli interwiki" -#: rcgcdw.py:808 rcgcdw.py:814 +#: rcgcdw.py:797 rcgcdw.py:803 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "Prefix: {prefix}, strona: {website} | {desc}" -#: rcgcdw.py:813 +#: rcgcdw.py:802 msgid "Edited an entry in interwiki table" msgstr "Edytowano wpis interwiki" -#: rcgcdw.py:819 +#: rcgcdw.py:808 msgid "Deleted an entry in interwiki table" msgstr "Usunięto wpis interwiki" -#: rcgcdw.py:820 +#: rcgcdw.py:809 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "Prefix: {prefix} | {desc}" -#: rcgcdw.py:824 +#: rcgcdw.py:813 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "Zmieniono model zawartości {article}" -#: rcgcdw.py:825 +#: rcgcdw.py:814 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Model został zmieniony z {old} na {new}: {reason}" -#: rcgcdw.py:831 +#: rcgcdw.py:820 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Edytowano sprite dla {article}" -#: rcgcdw.py:835 +#: rcgcdw.py:824 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Utworzono sprite sheet dla {article}" -#: rcgcdw.py:839 +#: rcgcdw.py:828 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Edytowano część sprite dla {article}" -#: rcgcdw.py:842 +#: rcgcdw.py:831 #, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "Utworzono tag \"{tag}\"" -#: rcgcdw.py:846 +#: rcgcdw.py:835 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "Usunięto tag \"{tag}\"" -#: rcgcdw.py:850 +#: rcgcdw.py:839 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "Aktywowano tag \"{tag}\"" -#: rcgcdw.py:853 +#: rcgcdw.py:842 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "Dezaktywowano tag \"{tag}\"" -#: rcgcdw.py:856 +#: rcgcdw.py:845 msgid "Action has been hidden by administration." msgstr "Akcja została ukryta przez administrację." -#: rcgcdw.py:883 +#: rcgcdw.py:872 msgid "Tags" msgstr "Tagi" -#: rcgcdw.py:889 +#: rcgcdw.py:877 msgid "**Added**: " msgstr "**Dodane**: " -#: rcgcdw.py:889 +#: rcgcdw.py:877 msgid " and {} more\n" msgstr " oraz {} innych\n" -#: rcgcdw.py:890 +#: rcgcdw.py:878 msgid "**Removed**: " msgstr "**Usunięte**: " -#: rcgcdw.py:890 +#: rcgcdw.py:878 msgid " and {} more" msgstr " oraz {} innych" -#: rcgcdw.py:891 +#: rcgcdw.py:879 msgid "Changed categories" msgstr "Zmienione kategorie" -#: rcgcdw.py:932 +#: rcgcdw.py:920 msgid "~~hidden~~" msgstr "~~ukryte~~" -#: rcgcdw.py:938 +#: rcgcdw.py:926 msgid "hidden" msgstr "ukryte" -#: rcgcdw.py:1012 rcgcdw.py:1014 rcgcdw.py:1016 rcgcdw.py:1018 rcgcdw.py:1020 -#: rcgcdw.py:1022 rcgcdw.py:1024 +#: rcgcdw.py:1000 rcgcdw.py:1002 rcgcdw.py:1004 rcgcdw.py:1006 rcgcdw.py:1008 +#: rcgcdw.py:1010 rcgcdw.py:1012 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "{value} (średnio {avg})" -#: rcgcdw.py:1066 +#: rcgcdw.py:1053 msgid "Daily overview" msgstr "Podsumowanie dnia" -#: rcgcdw.py:1076 +#: rcgcdw.py:1062 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} akcja)" msgstr[1] " ({} akcje)" msgstr[2] " ({} akcji)" -#: rcgcdw.py:1080 +#: rcgcdw.py:1064 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} edycja)" msgstr[1] " ({} edycje)" msgstr[2] " ({} edycji)" -#: rcgcdw.py:1085 +#: rcgcdw.py:1069 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} akcja)" msgstr[1] " UTC ({} akcje)" msgstr[2] " UTC ({} akcji)" -#: rcgcdw.py:1087 rcgcdw.py:1088 rcgcdw.py:1092 +#: rcgcdw.py:1071 rcgcdw.py:1072 rcgcdw.py:1076 msgid "But nobody came" msgstr "Ale nikt nie przyszedł" -#: rcgcdw.py:1096 +#: rcgcdw.py:1080 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" -#: rcgcdw.py:1097 +#: rcgcdw.py:1081 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" -#: rcgcdw.py:1098 +#: rcgcdw.py:1082 msgid "Edits made" msgstr "Zrobionych edycji" -#: rcgcdw.py:1098 +#: rcgcdw.py:1082 msgid "New files" msgstr "Nowych plików" -#: rcgcdw.py:1098 +#: rcgcdw.py:1082 msgid "Admin actions" msgstr "Akcji administratorskich" -#: rcgcdw.py:1099 +#: rcgcdw.py:1083 msgid "Bytes changed" msgstr "Zmienionych bajtów" -#: rcgcdw.py:1099 +#: rcgcdw.py:1083 msgid "New articles" msgstr "Nowych artykułów" -#: rcgcdw.py:1100 +#: rcgcdw.py:1084 msgid "Unique contributors" msgstr "Unikalnych edytujących" -#: rcgcdw.py:1101 +#: rcgcdw.py:1085 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Najbardziej aktywna godzina" msgstr[1] "Najbardziej aktywne godziny" msgstr[2] "Najbardziej aktywne godziny" -#: rcgcdw.py:1102 +#: rcgcdw.py:1086 msgid "Day score" msgstr "Wynik dnia" -#: rcgcdw.py:1242 +#: rcgcdw.py:1227 #, python-brace-format msgid "Connection to {wiki} seems to be stable now." msgstr "Połączenie z {wiki} wygląda na stabilne." -#: rcgcdw.py:1243 rcgcdw.py:1354 +#: rcgcdw.py:1228 rcgcdw.py:1339 msgid "Connection status" msgstr "Problem z połączeniem" -#: rcgcdw.py:1353 +#: rcgcdw.py:1338 #, python-brace-format msgid "{wiki} seems to be down or unreachable." msgstr "{wiki} nie działa lub jest nieosiągalna." -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "director" msgstr "Dyrektor" -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "bot" msgstr "Bot" -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "editor" msgstr "Redaktor" -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "directors" msgstr "Dyrektorzy" -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "sysop" msgstr "Administrator" -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "bureaucrat" msgstr "Biurokrata" -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "reviewer" msgstr "Przeglądający" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "autoreview" msgstr "Automatycznie przeglądający" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "autopatrol" msgstr "Automatycznie zatwierdzający" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "wiki_guardian" msgstr "Strażnik wiki" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "second" msgid_plural "seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekund" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "minute" msgid_plural "minutes" msgstr[0] "minuta" msgstr[1] "minuty" msgstr[2] "minut" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "hour" msgid_plural "hours" msgstr[0] "godzina" msgstr[1] "godziny" msgstr[2] "godzin" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "day" msgid_plural "days" msgstr[0] "dzień" msgstr[1] "dni" msgstr[2] "dni" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "week" msgid_plural "weeks" msgstr[0] "tydzień" msgstr[1] "tygodnie" msgstr[2] "tygodni" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "month" msgid_plural "months" msgstr[0] "miesiąc" msgstr[1] "miesiące" msgstr[2] "miesięcy" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "year" msgid_plural "years" msgstr[0] "rok" msgstr[1] "lata" msgstr[2] "lat" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "millennium" msgid_plural "millennia" msgstr[0] "tysiąclecie" msgstr[1] "tysiąclecia" msgstr[2] "tysiącleci" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "decade" msgid_plural "decades" msgstr[0] "dekada" msgstr[1] "dekady" msgstr[2] "dekad" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "century" msgid_plural "centuries" msgstr[0] "stulecie" diff --git a/misc.pot b/misc.pot new file mode 100644 index 0000000..9fdf7d8 --- /dev/null +++ b/misc.pot @@ -0,0 +1,24 @@ +# 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 "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-05-20 17:18+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" + +#: misc.py:76 +msgid "" +"\n" +"__And more__" +msgstr "" diff --git a/misc.py b/misc.py index 9dcca0f..4ec2511 100644 --- a/misc.py +++ b/misc.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + # Recent changes Gamepedia compatible Discord webhook is a project for using a webhook as recent changes page from MediaWiki. # Copyright (C) 2018 Frisk diff --git a/rcgcdw.pot b/rcgcdw.pot index 7ee0058..e59c562 100644 --- a/rcgcdw.pot +++ b/rcgcdw.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-19 18:32+0200\n" +"POT-Creation-Date: 2019-05-20 17:17+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,230 +18,230 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: rcgcdw.py:223 +#: rcgcdw.py:184 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" "{edit_size})" msgstr "" -#: rcgcdw.py:225 +#: rcgcdw.py:186 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" "{edit_size})" msgstr "" -#: rcgcdw.py:229 +#: rcgcdw.py:190 #, python-brace-format msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" msgstr "" -#: rcgcdw.py:237 +#: rcgcdw.py:198 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" "{comment}" msgstr "" -#: rcgcdw.py:241 +#: rcgcdw.py:202 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "" -#: rcgcdw.py:246 +#: rcgcdw.py:207 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" "({page_link}){comment}" msgstr "" -#: rcgcdw.py:251 rcgcdw.py:257 +#: rcgcdw.py:212 rcgcdw.py:218 msgid "without making a redirect" msgstr "" -#: rcgcdw.py:251 rcgcdw.py:258 +#: rcgcdw.py:212 rcgcdw.py:219 msgid "with a redirect" msgstr "" -#: rcgcdw.py:252 +#: rcgcdw.py:213 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" "({target_url}) {made_a_redirect}{comment}" msgstr "" -#: rcgcdw.py:259 +#: rcgcdw.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " "[{target}]({target_url}) {made_a_redirect}{comment}" msgstr "" -#: rcgcdw.py:265 +#: rcgcdw.py:226 #, python-brace-format msgid "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" "* to [{target}]({target_url}){comment}" msgstr "" -#: rcgcdw.py:277 rcgcdw.py:644 +#: rcgcdw.py:238 rcgcdw.py:637 msgid "infinity and beyond" msgstr "" -#: rcgcdw.py:292 +#: rcgcdw.py:253 #, python-brace-format msgid "" "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}" msgstr "" -#: rcgcdw.py:297 +#: rcgcdw.py:258 #, python-brace-format msgid "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" "({user_url}){comment}" msgstr "" -#: rcgcdw.py:302 +#: rcgcdw.py:263 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" msgstr "" -#: rcgcdw.py:306 +#: rcgcdw.py:267 #, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" msgstr "" -#: rcgcdw.py:306 +#: rcgcdw.py:267 msgid "their own profile" msgstr "" -#: rcgcdw.py:311 +#: rcgcdw.py:272 #, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target} " "profile" msgstr "" -#: rcgcdw.py:314 rcgcdw.py:322 rcgcdw.py:329 +#: rcgcdw.py:275 rcgcdw.py:283 rcgcdw.py:287 msgid "their own" msgstr "" -#: rcgcdw.py:319 +#: rcgcdw.py:280 #, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" msgstr "" -#: rcgcdw.py:327 +#: rcgcdw.py:285 #, python-brace-format msgid "[{author}]({author_url}) deleted a comment on {target} profile" msgstr "" -#: rcgcdw.py:335 rcgcdw.py:694 +#: rcgcdw.py:293 rcgcdw.py:684 msgid "Location" msgstr "" -#: rcgcdw.py:337 rcgcdw.py:696 +#: rcgcdw.py:295 rcgcdw.py:686 msgid "About me" msgstr "" -#: rcgcdw.py:339 rcgcdw.py:698 +#: rcgcdw.py:297 rcgcdw.py:688 msgid "Google link" msgstr "" -#: rcgcdw.py:341 rcgcdw.py:700 +#: rcgcdw.py:299 rcgcdw.py:690 msgid "Facebook link" msgstr "" -#: rcgcdw.py:343 rcgcdw.py:702 +#: rcgcdw.py:301 rcgcdw.py:692 msgid "Twitter link" msgstr "" -#: rcgcdw.py:345 rcgcdw.py:704 +#: rcgcdw.py:303 rcgcdw.py:694 msgid "Reddit link" msgstr "" -#: rcgcdw.py:347 rcgcdw.py:706 +#: rcgcdw.py:305 rcgcdw.py:696 msgid "Twitch link" msgstr "" -#: rcgcdw.py:349 rcgcdw.py:708 +#: rcgcdw.py:307 rcgcdw.py:698 msgid "PSN link" msgstr "" -#: rcgcdw.py:351 rcgcdw.py:710 +#: rcgcdw.py:309 rcgcdw.py:700 msgid "VK link" msgstr "" -#: rcgcdw.py:353 rcgcdw.py:712 +#: rcgcdw.py:311 rcgcdw.py:702 msgid "XVL link" msgstr "" -#: rcgcdw.py:355 rcgcdw.py:714 +#: rcgcdw.py:313 rcgcdw.py:704 msgid "Steam link" msgstr "" -#: rcgcdw.py:357 rcgcdw.py:716 +#: rcgcdw.py:315 rcgcdw.py:706 msgid "Discord handle" msgstr "" -#: rcgcdw.py:359 +#: rcgcdw.py:317 msgid "unknown" msgstr "" -#: rcgcdw.py:360 +#: rcgcdw.py:318 #, python-brace-format msgid "[{target}]({target_url})'s" msgstr "" -#: rcgcdw.py:360 +#: rcgcdw.py:318 #, python-brace-format msgid "[their own]({target_url})" msgstr "" -#: rcgcdw.py:361 +#: rcgcdw.py:319 #, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*" msgstr "" -#: rcgcdw.py:375 rcgcdw.py:377 rcgcdw.py:747 rcgcdw.py:749 +#: rcgcdw.py:333 rcgcdw.py:335 rcgcdw.py:736 rcgcdw.py:738 msgid "none" msgstr "" -#: rcgcdw.py:383 rcgcdw.py:734 +#: rcgcdw.py:341 rcgcdw.py:723 msgid "System" msgstr "" -#: rcgcdw.py:389 +#: rcgcdw.py:347 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " "following settings: {settings}{comment}" msgstr "" -#: rcgcdw.py:391 rcgcdw.py:400 rcgcdw.py:758 rcgcdw.py:765 +#: rcgcdw.py:349 rcgcdw.py:358 rcgcdw.py:747 rcgcdw.py:754 msgid " [cascading]" msgstr "" -#: rcgcdw.py:397 +#: rcgcdw.py:355 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" "({article_url}) to: {settings}{comment}" msgstr "" -#: rcgcdw.py:405 +#: rcgcdw.py:363 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" "{comment}" msgstr "" -#: rcgcdw.py:410 +#: rcgcdw.py:368 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -252,7 +252,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:416 +#: rcgcdw.py:374 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -263,621 +263,633 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:422 +#: rcgcdw.py:380 #, python-brace-format msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" -#: rcgcdw.py:424 +#: rcgcdw.py:382 #, python-brace-format msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "" -#: rcgcdw.py:426 +#: rcgcdw.py:384 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" msgstr "" -#: rcgcdw.py:429 +#: rcgcdw.py:387 #, python-brace-format msgid "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" msgstr "" -#: rcgcdw.py:432 +#: rcgcdw.py:390 #, python-brace-format msgid "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" msgstr "" -#: rcgcdw.py:438 +#: rcgcdw.py:396 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" "({article_url}) into [{dest}]({dest_url}){comment}" msgstr "" -#: rcgcdw.py:442 +#: rcgcdw.py:400 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" "({table_url}) pointing to {website} with {prefix} prefix" msgstr "" -#: rcgcdw.py:448 +#: rcgcdw.py:406 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " "pointing to {website} with {prefix} prefix" msgstr "" -#: rcgcdw.py:454 +#: rcgcdw.py:412 #, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" msgstr "" -#: rcgcdw.py:458 +#: rcgcdw.py:416 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "" -#: rcgcdw.py:463 +#: rcgcdw.py:421 #, python-brace-format msgid "" "[{author}]({author_url}) edited the sprite for [{article}]({article_url})" msgstr "" -#: rcgcdw.py:467 +#: rcgcdw.py:425 #, python-brace-format msgid "" "[{author}]({author_url}) created the sprite sheet for [{article}]" "({article_url})" msgstr "" -#: rcgcdw.py:471 +#: rcgcdw.py:429 #, python-brace-format msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" -#: rcgcdw.py:474 +#: rcgcdw.py:432 #, python-brace-format msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:478 +#: rcgcdw.py:436 #, python-brace-format msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:482 +#: rcgcdw.py:440 #, python-brace-format msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:485 +#: rcgcdw.py:443 #, python-brace-format msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:488 +#: rcgcdw.py:445 msgid "An action has been hidden by administration." msgstr "" -#: rcgcdw.py:496 rcgcdw.py:750 +#: rcgcdw.py:454 rcgcdw.py:739 msgid "No description provided" msgstr "" -#: rcgcdw.py:546 +#: rcgcdw.py:504 msgid "(N!) " msgstr "" -#: rcgcdw.py:547 +#: rcgcdw.py:505 msgid "m " msgstr "" -#: rcgcdw.py:571 rcgcdw.py:606 +#: rcgcdw.py:524 rcgcdw.py:529 +msgid "__Only whitespace__" +msgstr "" + +#: rcgcdw.py:535 +msgid "Removed" +msgstr "" + +#: rcgcdw.py:538 +msgid "Added" +msgstr "" + +#: rcgcdw.py:564 rcgcdw.py:599 msgid "Options" msgstr "" -#: rcgcdw.py:571 +#: rcgcdw.py:564 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "" -#: rcgcdw.py:573 +#: rcgcdw.py:566 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "" -#: rcgcdw.py:575 +#: rcgcdw.py:568 #, python-brace-format msgid "Uploaded {name}" msgstr "" -#: rcgcdw.py:591 +#: rcgcdw.py:584 msgid "**No license!**" msgstr "" -#: rcgcdw.py:603 +#: rcgcdw.py:596 msgid "" "\n" "License: {}" msgstr "" -#: rcgcdw.py:606 +#: rcgcdw.py:599 #, python-brace-format msgid "([preview]({link}))" msgstr "" -#: rcgcdw.py:611 +#: rcgcdw.py:604 #, python-brace-format msgid "Deleted page {article}" msgstr "" -#: rcgcdw.py:615 +#: rcgcdw.py:608 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "" -#: rcgcdw.py:620 +#: rcgcdw.py:613 msgid "No redirect has been made" msgstr "" -#: rcgcdw.py:621 +#: rcgcdw.py:614 msgid "A redirect has been made" msgstr "" -#: rcgcdw.py:622 +#: rcgcdw.py:615 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "" -#: rcgcdw.py:626 +#: rcgcdw.py:619 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "" -#: rcgcdw.py:631 +#: rcgcdw.py:624 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "" -#: rcgcdw.py:654 +#: rcgcdw.py:647 #, python-brace-format msgid "Blocked {blocked_user} for {time}" msgstr "" -#: rcgcdw.py:660 +#: rcgcdw.py:653 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "" -#: rcgcdw.py:666 +#: rcgcdw.py:659 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "" -#: rcgcdw.py:671 +#: rcgcdw.py:663 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "" -#: rcgcdw.py:673 +#: rcgcdw.py:665 msgid "Left a comment on their own profile" msgstr "" -#: rcgcdw.py:678 +#: rcgcdw.py:669 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "" -#: rcgcdw.py:680 +#: rcgcdw.py:671 msgid "Replied to a comment on their own profile" msgstr "" -#: rcgcdw.py:685 +#: rcgcdw.py:675 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "" -#: rcgcdw.py:687 +#: rcgcdw.py:677 msgid "Edited a comment on their own profile" msgstr "" -#: rcgcdw.py:718 rcgcdw.py:857 +#: rcgcdw.py:708 rcgcdw.py:846 msgid "Unknown" msgstr "" -#: rcgcdw.py:719 +#: rcgcdw.py:709 #, python-brace-format msgid "Edited {target}'s profile" msgstr "" -#: rcgcdw.py:719 +#: rcgcdw.py:709 msgid "Edited their own profile" msgstr "" -#: rcgcdw.py:721 +#: rcgcdw.py:711 #, python-brace-format msgid "Cleared the {field} field" msgstr "" -#: rcgcdw.py:723 +#: rcgcdw.py:713 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "" -#: rcgcdw.py:728 +#: rcgcdw.py:717 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "" -#: rcgcdw.py:732 +#: rcgcdw.py:721 #, python-brace-format msgid "Changed group membership for {target}" msgstr "" -#: rcgcdw.py:736 +#: rcgcdw.py:725 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "" -#: rcgcdw.py:751 +#: rcgcdw.py:740 #, python-brace-format msgid "Groups changed from {old_groups} to {new_groups}{reason}" msgstr "" -#: rcgcdw.py:756 +#: rcgcdw.py:745 #, python-brace-format msgid "Protected {target}" msgstr "" -#: rcgcdw.py:763 +#: rcgcdw.py:752 #, python-brace-format msgid "Changed protection level for {article}" msgstr "" -#: rcgcdw.py:770 +#: rcgcdw.py:759 #, python-brace-format msgid "Removed protection from {article}" msgstr "" -#: rcgcdw.py:775 +#: rcgcdw.py:764 #, 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] "" -#: rcgcdw.py:781 +#: rcgcdw.py:770 #, python-brace-format msgid "Imported {article} with {count} revision" msgid_plural "Imported {article} with {count} revisions" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:787 +#: rcgcdw.py:776 #, python-brace-format msgid "Restored {article}" msgstr "" -#: rcgcdw.py:790 +#: rcgcdw.py:779 msgid "Changed visibility of log events" msgstr "" -#: rcgcdw.py:793 +#: rcgcdw.py:782 msgid "Imported interwiki" msgstr "" -#: rcgcdw.py:796 +#: rcgcdw.py:785 #, python-brace-format msgid "Edited abuse filter number {number}" msgstr "" -#: rcgcdw.py:799 +#: rcgcdw.py:788 #, python-brace-format msgid "Created abuse filter number {number}" msgstr "" -#: rcgcdw.py:803 +#: rcgcdw.py:792 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "" -#: rcgcdw.py:807 +#: rcgcdw.py:796 msgid "Added an entry to the interwiki table" msgstr "" -#: rcgcdw.py:808 rcgcdw.py:814 +#: rcgcdw.py:797 rcgcdw.py:803 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "" -#: rcgcdw.py:813 +#: rcgcdw.py:802 msgid "Edited an entry in interwiki table" msgstr "" -#: rcgcdw.py:819 +#: rcgcdw.py:808 msgid "Deleted an entry in interwiki table" msgstr "" -#: rcgcdw.py:820 +#: rcgcdw.py:809 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "" -#: rcgcdw.py:824 +#: rcgcdw.py:813 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "" -#: rcgcdw.py:825 +#: rcgcdw.py:814 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "" -#: rcgcdw.py:831 +#: rcgcdw.py:820 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "" -#: rcgcdw.py:835 +#: rcgcdw.py:824 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "" -#: rcgcdw.py:839 +#: rcgcdw.py:828 #, python-brace-format msgid "Edited the slice for {article}" msgstr "" -#: rcgcdw.py:842 +#: rcgcdw.py:831 #, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "" -#: rcgcdw.py:846 +#: rcgcdw.py:835 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "" -#: rcgcdw.py:850 +#: rcgcdw.py:839 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "" -#: rcgcdw.py:853 +#: rcgcdw.py:842 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "" -#: rcgcdw.py:856 +#: rcgcdw.py:845 msgid "Action has been hidden by administration." msgstr "" -#: rcgcdw.py:883 +#: rcgcdw.py:872 msgid "Tags" msgstr "" -#: rcgcdw.py:889 +#: rcgcdw.py:877 msgid "**Added**: " msgstr "" -#: rcgcdw.py:889 +#: rcgcdw.py:877 msgid " and {} more\n" msgstr "" -#: rcgcdw.py:890 +#: rcgcdw.py:878 msgid "**Removed**: " msgstr "" -#: rcgcdw.py:890 +#: rcgcdw.py:878 msgid " and {} more" msgstr "" -#: rcgcdw.py:891 +#: rcgcdw.py:879 msgid "Changed categories" msgstr "" -#: rcgcdw.py:932 +#: rcgcdw.py:920 msgid "~~hidden~~" msgstr "" -#: rcgcdw.py:938 +#: rcgcdw.py:926 msgid "hidden" msgstr "" -#: rcgcdw.py:1012 rcgcdw.py:1014 rcgcdw.py:1016 rcgcdw.py:1018 rcgcdw.py:1020 -#: rcgcdw.py:1022 rcgcdw.py:1024 +#: rcgcdw.py:1000 rcgcdw.py:1002 rcgcdw.py:1004 rcgcdw.py:1006 rcgcdw.py:1008 +#: rcgcdw.py:1010 rcgcdw.py:1012 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "" -#: rcgcdw.py:1066 +#: rcgcdw.py:1053 msgid "Daily overview" msgstr "" -#: rcgcdw.py:1076 +#: rcgcdw.py:1062 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1080 +#: rcgcdw.py:1064 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1085 +#: rcgcdw.py:1069 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1087 rcgcdw.py:1088 rcgcdw.py:1092 +#: rcgcdw.py:1071 rcgcdw.py:1072 rcgcdw.py:1076 msgid "But nobody came" msgstr "" -#: rcgcdw.py:1096 +#: rcgcdw.py:1080 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1097 +#: rcgcdw.py:1081 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1098 +#: rcgcdw.py:1082 msgid "Edits made" msgstr "" -#: rcgcdw.py:1098 +#: rcgcdw.py:1082 msgid "New files" msgstr "" -#: rcgcdw.py:1098 +#: rcgcdw.py:1082 msgid "Admin actions" msgstr "" -#: rcgcdw.py:1099 +#: rcgcdw.py:1083 msgid "Bytes changed" msgstr "" -#: rcgcdw.py:1099 +#: rcgcdw.py:1083 msgid "New articles" msgstr "" -#: rcgcdw.py:1100 +#: rcgcdw.py:1084 msgid "Unique contributors" msgstr "" -#: rcgcdw.py:1101 +#: rcgcdw.py:1085 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1102 +#: rcgcdw.py:1086 msgid "Day score" msgstr "" -#: rcgcdw.py:1242 +#: rcgcdw.py:1227 #, python-brace-format msgid "Connection to {wiki} seems to be stable now." msgstr "" -#: rcgcdw.py:1243 rcgcdw.py:1354 +#: rcgcdw.py:1228 rcgcdw.py:1339 msgid "Connection status" msgstr "" -#: rcgcdw.py:1353 +#: rcgcdw.py:1338 #, python-brace-format msgid "{wiki} seems to be down or unreachable." msgstr "" -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "director" msgstr "" -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "bot" msgstr "" -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "editor" msgstr "" -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "directors" msgstr "" -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "sysop" msgstr "" -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "bureaucrat" msgstr "" -#: rcgcdw.py:1407 +#: rcgcdw.py:1394 msgid "reviewer" msgstr "" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "autoreview" msgstr "" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "autopatrol" msgstr "" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "wiki_guardian" msgstr "" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "second" msgid_plural "seconds" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "minute" msgid_plural "minutes" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "hour" msgid_plural "hours" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "day" msgid_plural "days" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "week" msgid_plural "weeks" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "month" msgid_plural "months" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "year" msgid_plural "years" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "millennium" msgid_plural "millennia" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "decade" msgid_plural "decades" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1408 +#: rcgcdw.py:1395 msgid "century" msgid_plural "centuries" msgstr[0] "" diff --git a/rcgcdw.py b/rcgcdw.py index 7327628..c5e295b 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -521,23 +521,23 @@ def embed_formatter(action, change, parsed_comment, categories): EditDiff.feed(changed_content) if EditDiff.small_prev_del: if EditDiff.small_prev_del.replace("~~", "").isspace(): - EditDiff.small_prev_del = '__Only whitespace__' + 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__' + 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["fields"].append( - {"name": "Removed", "value": "{data}".format(data=EditDiff.small_prev_del), "inline": True}) + {"name": _("Removed"), "value": "{data}".format(data=EditDiff.small_prev_del), "inline": True}) if EditDiff.small_prev_ins: embed["fields"].append( - {"name": "Added", "value": "{data}".format(data=EditDiff.small_prev_ins), "inline": True}) + {"name": _("Added"), "value": "{data}".format(data=EditDiff.small_prev_ins), "inline": True}) else: - logging.warning("Unabled to download data on the edit content!") + logging.warning("Unable to download data on the edit content!") elif action in ("upload/overwrite", "upload/upload"): # sending files license = None urls = safe_read(recent_changes.safe_request( From ea28667bdc74e28b7f0ff0938d0bb6a49595cc03 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 20 May 2019 17:32:42 +0200 Subject: [PATCH 12/23] En translation --- locale/en/LC_MESSAGES/rcgcdw.mo | Bin 17407 -> 17597 bytes locale/en/LC_MESSAGES/rcgcdw.po | 418 +++++++++++++++++--------------- 2 files changed, 219 insertions(+), 199 deletions(-) diff --git a/locale/en/LC_MESSAGES/rcgcdw.mo b/locale/en/LC_MESSAGES/rcgcdw.mo index f38a5ba715694acef9cc971368c217b16454167b..7a873ecbca683a61d575bb73cf337ab2eca0808c 100644 GIT binary patch delta 3947 zcmajhc~I6x9LMnm6-Y!B6uf=B9}yG~#V{}M7DPPJBt*RM029S4e9ZE~6Y%&XK; znbgM2$|f5dr!XByXCR%-(wwxi%&E!VpXayC^iR_c-`{KZckMpA-~A0wSNfb??c=Eo zslLTfN{J@K<{HM_#ae+JD9373$K%)tKg2M+jxF(_y&f9u+~>j|&PO4yGTqUQeJ~WK zqh7rP`SX|}j(T7xHo!v|fFEOfyollW2=&5Rb&P3)A*koNVI=m)7MPFRYPQ(x`%&*H z!w{@MJ^v8f(!U9-YfL9j^gtKR!dbW;8{%Kcp9$k>b>znSI0{?i3~Y-Vk;yQp@EQCJ z_54@Z4)39!3t<{sp&P^K-y~Df2(wWySce+nF4T)ZK|OF6HRVC|jA@3^*c?+)Gna?z za23|Xy{H*Fikk8>*bOfrWATp0GaN%1mO7Y%`b9;kB`C#MJdGXjN7MkqNdTFETH6fl zfh$l0{}lDyJyh;AW&JcG5vZk%5#^D&BcF>0jeP`}_Z>i$a9 zTHis$-a10jXD7=eLscZiL!~ZBR=PkJ>H0Z95f}Wa;RK6RkPu%>`6Hi_sT1U_I^s zO;q%vgQ%o9iAt99sE$6j*UPa6?VG5M?w|(r5dG2D?Q~QVwe9Moa;FuN4yLoco`Npg z=@?1>W+4@}q&a}R%bY=t_*-1-A_RjBP%jO;XX2KBxbkQO`ZaNDSgY`j`aN zd&i@$&qTdv5o&wxLp^^glKE%ZO$8@9Vf83yYT|Gf?NO+yJCB;`3glMv0QnY~CLNs* zRxIj0V^B-E1hqu#P|t5e&Fpd1bJtNHyayebe@$g5y=#OKSQ|&8MwpFy@oLlq$52y# z1=(rlF|xBvShO>9T~QsTVol7!Ae@VVxD31Ddelr@@K6~}jz>|}2gs>3d*3q6rp zHt86GD^R~+2P)h5qt^N;YUaK~^36O!-QSvziDn=kwH*^tyJ`^XJwuU!dCWK}O1h~S zic3))Y(^LE!eBgW&tF0f^eSqgm8f6-2QI*_U7RmmDUPN61oa6X(bf3`U&M0SLGk(o zv;N;u(WkX53zLF#a2S4sy|C`Hj%ld-im@kN!Xa2I!TAKI<0#t4a4`CDb26skJlu@~ zvEFme05fn1{hNbSPUEl0k1$90IlA!{=3@lC&A{C_2Wv8_g;{}^*IySMWRzKla@ zx9j74f(uaZ`vAFQY9uO|1Ps>WDzgYzjqCn*{fQo3B*c5NwbEiDoQRT))Yd& zPTTAiLWQL@g~U4Id14=-vXt0HD515~nl+Vohz!E}|6d)Qp%goq63in85lx9Mgi0qO z+go!E>ur5B1`=-(F~rNn5u%7tX-Oy_($t_RsYeo-+W)Pou+zMWrnOgwk0Gi`5*6jZ zDx$eP>BeccUIWJyD{Olvx`_G&8^*h(WASxjD=~sl89+49{$J#6ItS%~5^+1hb~W!3 zy@?kHl|(`b*Nd1-sPrc$d27yr&xv`Hm`EHY_7J;>*NElBPU0}Jme^1K-pnnRG}NG4hkDjOWkW~;sp1;hek7NIStl1nrpURA>uPjxDti9^Ij zd$NjjTWN(m2)<8dDzTUdCRCywyvKI7-V7sbeXKPKhY<5^yRqY7?|yAhqa)GRUYw3E z*}7;;ylvYZP_s6U=tm?FzJw{us6EN2>`d?#|FV_g{=uP{nW?!m7rN$8%b7ble|A>( zfN z%$Ua575Vd;G=B9$CPv@{Y=nz24p(3}9>PvogL?iKjK@b9g^?jng{D91{s`3jQ!orm zQ19=;7x5f+qkVIajE4*1p~mE6Dz?TW$e%gKj~cp;EwK)xu_d*tqBP{=%nS^~g{b#e zU<__Uy;p-B@j7Y*pI{vAnP8eMU>{UZ=b*k|C2Ee>qvo^{J7X>C zxjNLBhcO%tF%tbT8ufl0szWKrpGoJ3!84O07=QI-0T(>D3|UWR2kLqSs)Hv`9XyTt z;_q-dhH^0jH{e99#iiJlt&)z1@msu)n?d)v__$OJ*dQ-Pj+0x5h`h56;Ja zT(7`kcn`;85({B0Zp2KyjaeAa!dQaEI20eEI+*Hl-(QQLQND)B=q+Jf^sWyOSTJL-3WuXF3t%wjpz7O>1Mp|e!6;U=&W|G0RBdwgnw@0) zxNykcs6cj@sYVU`Mbz%NX3IBGi|Q^m#7EYDP!&H%&21oi&le++g>F2kdQwnpVG#Oj z|L2fVL*wiN)35>M0#rkbQ5{-^0k{R#&<@l#JBV5{Cz0tl=k5I;&_nqy#$!ONdmbdC z-k*%6ULRv-lTnWz$GJoF9N8hJb!T_mC8F++woXSioR8}08%Pyq4eHA)QLFwes$*AB z&)-1St+|hl(5DOYPg^F43_HjqBhzKFP%jjsdcGQ29;OOa;n(*5PpJ3*KyAZt9@hJv zky$V!u^TQ!4<5yQyo?&Do(YV(k_-MsOXfgL|+kUP5*7dsMy8x-$QIp(EX7p_^Bbon+=BJI9owhU^%s$6sI& z{)kQR9yZ3mF%^9h-H}McQIxY$_3uM{(3hy8{|$TKpI$PIp6S%x?LdxoF=|e?V_!Un z>iKiji_!c9<9O7F0AI#P!o4B*shhOx+XuSq4N9u7eDJOlN` zGjTcY#|&(f;vTVis3Z0)rejJ^_lRAN<0xnLa!=0vm`(X6j>Im^Pk&r#t-(Ip|If(u z<3?(4_lR7E<0)UjvDh}vJz^JO7UddTf`J_5L(z-s;AI?!VK2Ey>{O)hCY-O)b6Hq~ zD_5(Ctwx)MAN6HI#^Yun%g{WMFHYXzv%Hhw>_n$GsSX zSMB}3(1$YH-AQa7=Xn*nI9D|OHu0?4SzoYfA?6eB5smG&Z0i=(d}@m7leXwVVi>WA z&?u}V>XX*PUZMlBk?>Rd?TPsWqvC8GFbDKQ(xI`P&o2~`OwK4^Nv+$L9w2k6vFRhLW}ZkLc3xOp{Y}PjnD#~ zM@%Ey5haAuOrqS$ak}Dun|~Ks6JBS5*=yzlGRJL!^Fq7RNwNIyA>JS=2%X)UXQe1Y zYbBS^S~*1QCfKFUe`vtjHEWfzX%LQZ^0aW2%v53m@g~78bpDOD4_6bf5=t|O4FucT zIosn}{9Y+X%Vz|C=ITxGocf46ETJ8 zMQEQZl@WzRGom*!msn1GL@4bd5{QMw`-D;!@s=_{S=H4|r}|Wfhg=J&K9yA0^plvQ pK4mqr#f=h^Jl(seB_);hjq}tOQmbdh75V=6aP_71kM(qqe*q-Fd#3;Z diff --git a/locale/en/LC_MESSAGES/rcgcdw.po b/locale/en/LC_MESSAGES/rcgcdw.po index 58e843c..1052c89 100644 --- a/locale/en/LC_MESSAGES/rcgcdw.po +++ b/locale/en/LC_MESSAGES/rcgcdw.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-03 11:33+0200\n" -"PO-Revision-Date: 2019-05-03 11:38+0200\n" +"POT-Creation-Date: 2019-05-20 17:17+0200\n" +"PO-Revision-Date: 2019-05-20 17:31+0200\n" "Last-Translator: Frisk \n" "Language-Team: \n" "Language: en\n" @@ -18,7 +18,7 @@ msgstr "" "X-Generator: Poedit 2.2.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: rcgcdw.py:177 +#: rcgcdw.py:184 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" @@ -27,7 +27,7 @@ msgstr "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" "{edit_size})" -#: rcgcdw.py:179 +#: rcgcdw.py:186 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" @@ -36,12 +36,12 @@ msgstr "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" "{edit_size})" -#: rcgcdw.py:183 +#: rcgcdw.py:190 #, python-brace-format msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" msgstr "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" -#: rcgcdw.py:191 +#: rcgcdw.py:198 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -50,12 +50,12 @@ msgstr "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" "{comment}" -#: rcgcdw.py:195 +#: rcgcdw.py:202 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" -#: rcgcdw.py:200 +#: rcgcdw.py:207 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -64,33 +64,33 @@ msgstr "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" "({page_link}){comment}" -#: rcgcdw.py:205 rcgcdw.py:211 +#: rcgcdw.py:212 rcgcdw.py:218 msgid "without making a redirect" msgstr "without making a redirect" -#: rcgcdw.py:205 rcgcdw.py:212 +#: rcgcdw.py:212 rcgcdw.py:219 msgid "with a redirect" msgstr "with a redirect" -#: rcgcdw.py:206 -#, python-brace-format -msgid "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" -msgstr "" -"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" -"({target_url}) {made_a_redirect}{comment}" - #: rcgcdw.py:213 #, python-brace-format msgid "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" +msgstr "" +"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" +"({target_url}) {made_a_redirect}{comment}" + +#: rcgcdw.py:220 +#, python-brace-format +msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " "[{target}]({target_url}) {made_a_redirect}{comment}" msgstr "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " "[{target}]({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:219 +#: rcgcdw.py:226 #, python-brace-format msgid "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" @@ -99,18 +99,18 @@ msgstr "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" "* to [{target}]({target_url}){comment}" -#: rcgcdw.py:231 rcgcdw.py:598 +#: rcgcdw.py:238 rcgcdw.py:637 msgid "infinity and beyond" msgstr "infinity and beyond" -#: rcgcdw.py:246 +#: rcgcdw.py:253 #, python-brace-format msgid "" "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}" msgstr "" "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}" -#: rcgcdw.py:251 +#: rcgcdw.py:258 #, python-brace-format msgid "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" @@ -119,25 +119,25 @@ msgstr "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" "({user_url}){comment}" -#: rcgcdw.py:256 +#: rcgcdw.py:263 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" msgstr "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" -#: rcgcdw.py:260 +#: rcgcdw.py:267 #, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" msgstr "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" -#: rcgcdw.py:260 +#: rcgcdw.py:267 msgid "their own profile" msgstr "their own profile" -#: rcgcdw.py:265 +#: rcgcdw.py:272 #, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target} " @@ -146,100 +146,100 @@ msgstr "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target} " "profile" -#: rcgcdw.py:268 rcgcdw.py:276 rcgcdw.py:283 +#: rcgcdw.py:275 rcgcdw.py:283 rcgcdw.py:287 msgid "their own" msgstr "their own" -#: rcgcdw.py:273 +#: rcgcdw.py:280 #, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" msgstr "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" -#: rcgcdw.py:281 +#: rcgcdw.py:285 #, python-brace-format msgid "[{author}]({author_url}) deleted a comment on {target} profile" msgstr "[{author}]({author_url}) deleted a comment on {target} profile" -#: rcgcdw.py:289 rcgcdw.py:648 +#: rcgcdw.py:293 rcgcdw.py:684 msgid "Location" msgstr "Location" -#: rcgcdw.py:291 rcgcdw.py:650 +#: rcgcdw.py:295 rcgcdw.py:686 msgid "About me" msgstr "About me" -#: rcgcdw.py:293 rcgcdw.py:652 +#: rcgcdw.py:297 rcgcdw.py:688 msgid "Google link" msgstr "Google link" -#: rcgcdw.py:295 rcgcdw.py:654 +#: rcgcdw.py:299 rcgcdw.py:690 msgid "Facebook link" msgstr "Facebook link" -#: rcgcdw.py:297 rcgcdw.py:656 +#: rcgcdw.py:301 rcgcdw.py:692 msgid "Twitter link" msgstr "Twitter link" -#: rcgcdw.py:299 rcgcdw.py:658 +#: rcgcdw.py:303 rcgcdw.py:694 msgid "Reddit link" msgstr "Reddit link" -#: rcgcdw.py:301 rcgcdw.py:660 +#: rcgcdw.py:305 rcgcdw.py:696 msgid "Twitch link" msgstr "Twitch link" -#: rcgcdw.py:303 rcgcdw.py:662 +#: rcgcdw.py:307 rcgcdw.py:698 msgid "PSN link" msgstr "PSN link" -#: rcgcdw.py:305 rcgcdw.py:664 +#: rcgcdw.py:309 rcgcdw.py:700 msgid "VK link" msgstr "VK link" -#: rcgcdw.py:307 rcgcdw.py:666 +#: rcgcdw.py:311 rcgcdw.py:702 msgid "XVL link" msgstr "XVL link" -#: rcgcdw.py:309 rcgcdw.py:668 +#: rcgcdw.py:313 rcgcdw.py:704 msgid "Steam link" msgstr "Steam link" -#: rcgcdw.py:311 rcgcdw.py:670 +#: rcgcdw.py:315 rcgcdw.py:706 msgid "Discord handle" msgstr "Discord handle" -#: rcgcdw.py:313 +#: rcgcdw.py:317 msgid "unknown" msgstr "unknown" -#: rcgcdw.py:314 +#: rcgcdw.py:318 #, python-brace-format msgid "[{target}]({target_url})'s" msgstr "[{target}]({target_url})'s" -#: rcgcdw.py:314 +#: rcgcdw.py:318 #, python-brace-format msgid "[their own]({target_url})" msgstr "[their own]({target_url})" -#: rcgcdw.py:315 +#: rcgcdw.py:319 #, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*" msgstr "" "[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*" -#: rcgcdw.py:329 rcgcdw.py:331 rcgcdw.py:701 rcgcdw.py:703 +#: rcgcdw.py:333 rcgcdw.py:335 rcgcdw.py:736 rcgcdw.py:738 msgid "none" msgstr "none" -#: rcgcdw.py:337 rcgcdw.py:688 +#: rcgcdw.py:341 rcgcdw.py:723 msgid "System" msgstr "System" -#: rcgcdw.py:343 +#: rcgcdw.py:347 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " @@ -248,11 +248,11 @@ msgstr "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " "following settings: {settings}{comment}" -#: rcgcdw.py:345 rcgcdw.py:354 rcgcdw.py:712 rcgcdw.py:719 +#: rcgcdw.py:349 rcgcdw.py:358 rcgcdw.py:747 rcgcdw.py:754 msgid " [cascading]" msgstr " [cascading]" -#: rcgcdw.py:351 +#: rcgcdw.py:355 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" @@ -261,7 +261,7 @@ msgstr "" "[{author}]({author_url}) modified protection settings of [{article}]" "({article_url}) to: {settings}{comment}" -#: rcgcdw.py:359 +#: rcgcdw.py:363 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" @@ -270,7 +270,7 @@ msgstr "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" "{comment}" -#: rcgcdw.py:364 +#: rcgcdw.py:368 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -285,7 +285,7 @@ msgstr[1] "" "[{author}]({author_url}) changed visibility of {amount} revisions on page " "[{article}]({article_url}){comment}" -#: rcgcdw.py:370 +#: rcgcdw.py:374 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -300,54 +300,54 @@ msgstr[1] "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " "revisions{comment}" -#: rcgcdw.py:376 +#: rcgcdw.py:380 #, python-brace-format msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -#: rcgcdw.py:378 +#: rcgcdw.py:382 #, python-brace-format msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "[{author}]({author_url}) changed visibility of log events{comment}" -#: rcgcdw.py:380 +#: rcgcdw.py:384 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" msgstr "[{author}]({author_url}) imported interwiki{comment}" -#: rcgcdw.py:383 +#: rcgcdw.py:387 #, python-brace-format msgid "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" msgstr "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" -#: rcgcdw.py:386 +#: rcgcdw.py:390 #, python-brace-format msgid "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" msgstr "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" -#: rcgcdw.py:392 -#, python-brace-format -msgid "" -"[{author}]({author_url}) merged revision histories of [{article}]" -"({article_url}) into [{dest}]({dest_url}){comment}" -msgstr "" -"[{author}]({author_url}) merged revision histories of [{article}]" -"({article_url}) into [{dest}]({dest_url}){comment}" - #: rcgcdw.py:396 #, python-brace-format msgid "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" +msgstr "" +"[{author}]({author_url}) merged revision histories of [{article}]" +"({article_url}) into [{dest}]({dest_url}){comment}" + +#: rcgcdw.py:400 +#, 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}) added an entry to the [interwiki table]" "({table_url}) pointing to {website} with {prefix} prefix" -#: rcgcdw.py:402 +#: rcgcdw.py:406 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -356,105 +356,119 @@ msgstr "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " "pointing to {website} with {prefix} prefix" -#: rcgcdw.py:408 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" -msgstr "" -"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" - #: rcgcdw.py:412 #, python-brace-format msgid "" -"[{author}]({author_url}) changed the content model of the page [{article}]" -"({article_url}) from {old} to {new}{comment}" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" msgstr "" -"[{author}]({author_url}) changed the content model of the page [{article}]" -"({article_url}) from {old} to {new}{comment}" +"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" -#: rcgcdw.py:417 +#: rcgcdw.py:416 #, python-brace-format msgid "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" msgstr "" -"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" +"[{author}]({author_url}) changed the content model of the page [{article}]" +"({article_url}) from {old} to {new}{comment}" #: rcgcdw.py:421 #, python-brace-format msgid "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" msgstr "" -"[{author}]({author_url}) created the sprite sheet for [{article}]" -"({article_url})" +"[{author}]({author_url}) edited the sprite for [{article}]({article_url})" #: rcgcdw.py:425 #, python-brace-format msgid "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" +msgstr "" +"[{author}]({author_url}) created the sprite sheet for [{article}]" +"({article_url})" + +#: rcgcdw.py:429 +#, python-brace-format +msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" -#: rcgcdw.py:428 +#: rcgcdw.py:432 #, python-brace-format msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:432 +#: rcgcdw.py:436 #, python-brace-format msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:436 +#: rcgcdw.py:440 #, python-brace-format msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:439 +#: rcgcdw.py:443 #, python-brace-format msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:442 +#: rcgcdw.py:445 msgid "An action has been hidden by administration." msgstr "An action has been hidden by administration." -#: rcgcdw.py:450 rcgcdw.py:704 +#: rcgcdw.py:454 rcgcdw.py:739 msgid "No description provided" msgstr "No description provided" -#: rcgcdw.py:500 +#: rcgcdw.py:504 msgid "(N!) " msgstr "(N!) " -#: rcgcdw.py:501 +#: rcgcdw.py:505 msgid "m " msgstr "m " -#: rcgcdw.py:525 rcgcdw.py:560 +#: rcgcdw.py:524 rcgcdw.py:529 +msgid "__Only whitespace__" +msgstr "__Only whitespace__" + +#: rcgcdw.py:535 +#| msgid "**Removed**: " +msgid "Removed" +msgstr "Removed" + +#: rcgcdw.py:538 +#| msgid "**Added**: " +msgid "Added" +msgstr "Added" + +#: rcgcdw.py:564 rcgcdw.py:599 msgid "Options" msgstr "Options" -#: rcgcdw.py:525 +#: rcgcdw.py:564 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "([preview]({link}) | [undo]({undolink}))" -#: rcgcdw.py:527 +#: rcgcdw.py:566 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "Uploaded a new version of {name}" -#: rcgcdw.py:529 +#: rcgcdw.py:568 #, python-brace-format msgid "Uploaded {name}" msgstr "Uploaded {name}" -#: rcgcdw.py:545 +#: rcgcdw.py:584 msgid "**No license!**" msgstr "**No license!**" -#: rcgcdw.py:557 +#: rcgcdw.py:596 msgid "" "\n" "License: {}" @@ -462,470 +476,476 @@ msgstr "" "\n" "License: {}" -#: rcgcdw.py:560 +#: rcgcdw.py:599 #, python-brace-format msgid "([preview]({link}))" msgstr "([preview]({link}))" -#: rcgcdw.py:565 +#: rcgcdw.py:604 #, python-brace-format msgid "Deleted page {article}" msgstr "Deleted page {article}" -#: rcgcdw.py:569 +#: rcgcdw.py:608 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "Deleted redirect {article} by overwriting" -#: rcgcdw.py:574 +#: rcgcdw.py:613 msgid "No redirect has been made" msgstr "No redirect has been made" -#: rcgcdw.py:575 +#: rcgcdw.py:614 msgid "A redirect has been made" msgstr "A redirect has been made" -#: rcgcdw.py:576 +#: rcgcdw.py:615 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "Moved {redirect}{article} to {target}" -#: rcgcdw.py:580 +#: rcgcdw.py:619 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "Moved {redirect}{article} to {title} over redirect" -#: rcgcdw.py:585 +#: rcgcdw.py:624 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "Moved protection settings from {redirect}{article} to {title}" -#: rcgcdw.py:608 +#: rcgcdw.py:647 #, python-brace-format msgid "Blocked {blocked_user} for {time}" msgstr "Blocked {blocked_user} for {time}" -#: rcgcdw.py:614 +#: rcgcdw.py:653 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "Changed block settings for {blocked_user}" -#: rcgcdw.py:620 +#: rcgcdw.py:659 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "Unblocked {blocked_user}" -#: rcgcdw.py:625 +#: rcgcdw.py:663 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "Left a comment on {target}'s profile" -#: rcgcdw.py:627 +#: rcgcdw.py:665 msgid "Left a comment on their own profile" msgstr "Left a comment on their own profile" -#: rcgcdw.py:632 +#: rcgcdw.py:669 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "Replied to a comment on {target}'s profile" -#: rcgcdw.py:634 +#: rcgcdw.py:671 msgid "Replied to a comment on their own profile" msgstr "Replied to a comment on their own profile" -#: rcgcdw.py:639 +#: rcgcdw.py:675 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "Edited a comment on {target}'s profile" -#: rcgcdw.py:641 +#: rcgcdw.py:677 msgid "Edited a comment on their own profile" msgstr "Edited a comment on their own profile" -#: rcgcdw.py:672 rcgcdw.py:811 +#: rcgcdw.py:708 rcgcdw.py:846 msgid "Unknown" msgstr "Unknown" -#: rcgcdw.py:673 +#: rcgcdw.py:709 #, python-brace-format msgid "Edited {target}'s profile" msgstr "Edited {target}'s profile" -#: rcgcdw.py:673 +#: rcgcdw.py:709 msgid "Edited their own profile" msgstr "Edited their own profile" -#: rcgcdw.py:675 +#: rcgcdw.py:711 #, python-brace-format msgid "Cleared the {field} field" msgstr "Cleared the {field} field" -#: rcgcdw.py:677 +#: rcgcdw.py:713 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "{field} field changed to: {desc}" -#: rcgcdw.py:682 +#: rcgcdw.py:717 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "Deleted a comment on {target}'s profile" -#: rcgcdw.py:686 +#: rcgcdw.py:721 #, python-brace-format msgid "Changed group membership for {target}" msgstr "Changed group membership for {target}" -#: rcgcdw.py:690 +#: rcgcdw.py:725 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "{target} got autopromoted to a new usergroup" -#: rcgcdw.py:705 +#: rcgcdw.py:740 #, python-brace-format msgid "Groups changed from {old_groups} to {new_groups}{reason}" msgstr "Groups changed from {old_groups} to {new_groups}{reason}" -#: rcgcdw.py:710 +#: rcgcdw.py:745 #, python-brace-format msgid "Protected {target}" msgstr "Protected {target}" -#: rcgcdw.py:717 +#: rcgcdw.py:752 #, python-brace-format msgid "Changed protection level for {article}" msgstr "Changed protection level for {article}" -#: rcgcdw.py:724 +#: rcgcdw.py:759 #, python-brace-format msgid "Removed protection from {article}" msgstr "Removed protection from {article}" -#: rcgcdw.py:729 +#: rcgcdw.py:764 #, python-brace-format msgid "Changed visibility of revision on page {article} " msgid_plural "Changed visibility of {amount} revisions on page {article} " msgstr[0] "Changed visibility of revision on page {article} " msgstr[1] "Changed visibility of {amount} revisions on page {article} " -#: rcgcdw.py:735 +#: rcgcdw.py:770 #, python-brace-format msgid "Imported {article} with {count} revision" msgid_plural "Imported {article} with {count} revisions" msgstr[0] "Imported {article} with {count} revision" msgstr[1] "Imported {article} with {count} revisions" -#: rcgcdw.py:741 +#: rcgcdw.py:776 #, python-brace-format msgid "Restored {article}" msgstr "Restored {article}" -#: rcgcdw.py:744 +#: rcgcdw.py:779 msgid "Changed visibility of log events" msgstr "Changed visibility of log events" -#: rcgcdw.py:747 +#: rcgcdw.py:782 msgid "Imported interwiki" msgstr "Imported interwiki" -#: rcgcdw.py:750 +#: rcgcdw.py:785 #, python-brace-format msgid "Edited abuse filter number {number}" msgstr "Edited abuse filter number {number}" -#: rcgcdw.py:753 +#: rcgcdw.py:788 #, python-brace-format msgid "Created abuse filter number {number}" msgstr "Created abuse filter number {number}" -#: rcgcdw.py:757 +#: rcgcdw.py:792 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "Merged revision histories of {article} into {dest}" -#: rcgcdw.py:761 +#: rcgcdw.py:796 msgid "Added an entry to the interwiki table" msgstr "Added an entry to the interwiki table" -#: rcgcdw.py:762 rcgcdw.py:768 +#: rcgcdw.py:797 rcgcdw.py:803 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "Prefix: {prefix}, website: {website} | {desc}" -#: rcgcdw.py:767 +#: rcgcdw.py:802 msgid "Edited an entry in interwiki table" msgstr "Edited an entry in interwiki table" -#: rcgcdw.py:773 +#: rcgcdw.py:808 msgid "Deleted an entry in interwiki table" msgstr "Deleted an entry in interwiki table" -#: rcgcdw.py:774 +#: rcgcdw.py:809 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "Prefix: {prefix} | {desc}" -#: rcgcdw.py:778 +#: rcgcdw.py:813 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "Changed the content model of the page {article}" -#: rcgcdw.py:779 +#: rcgcdw.py:814 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Model changed from {old} to {new}: {reason}" -#: rcgcdw.py:785 +#: rcgcdw.py:820 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Edited the sprite for {article}" -#: rcgcdw.py:789 +#: rcgcdw.py:824 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Created the sprite sheet for {article}" -#: rcgcdw.py:793 +#: rcgcdw.py:828 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Edited the slice for {article}" -#: rcgcdw.py:796 +#: rcgcdw.py:831 #, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "Created a tag \"{tag}\"" -#: rcgcdw.py:800 +#: rcgcdw.py:835 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "Deleted a tag \"{tag}\"" -#: rcgcdw.py:804 +#: rcgcdw.py:839 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "Activated a tag \"{tag}\"" -#: rcgcdw.py:807 +#: rcgcdw.py:842 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "Deactivated a tag \"{tag}\"" -#: rcgcdw.py:810 +#: rcgcdw.py:845 msgid "Action has been hidden by administration." msgstr "Action has been hidden by administration." -#: rcgcdw.py:837 +#: rcgcdw.py:872 msgid "Tags" msgstr "Tags" -#: rcgcdw.py:843 +#: rcgcdw.py:877 msgid "**Added**: " msgstr "**Added**: " -#: rcgcdw.py:843 +#: rcgcdw.py:877 msgid " and {} more\n" msgstr " and {} more\n" -#: rcgcdw.py:844 +#: rcgcdw.py:878 msgid "**Removed**: " msgstr "**Removed**: " -#: rcgcdw.py:844 +#: rcgcdw.py:878 msgid " and {} more" msgstr " and {} more" -#: rcgcdw.py:845 +#: rcgcdw.py:879 msgid "Changed categories" msgstr "Changed categories" -#: rcgcdw.py:886 +#: rcgcdw.py:920 msgid "~~hidden~~" msgstr "~~hidden~~" -#: rcgcdw.py:892 +#: rcgcdw.py:926 msgid "hidden" msgstr "hidden" -#: rcgcdw.py:995 +#: rcgcdw.py:1000 rcgcdw.py:1002 rcgcdw.py:1004 rcgcdw.py:1006 rcgcdw.py:1008 +#: rcgcdw.py:1010 rcgcdw.py:1012 +#, python-brace-format +msgid "{value} (avg. {avg})" +msgstr "{value} (avg. {avg})" + +#: rcgcdw.py:1053 msgid "Daily overview" msgstr "Daily overview" -#: rcgcdw.py:1005 +#: rcgcdw.py:1062 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} action)" msgstr[1] " ({} actions)" -#: rcgcdw.py:1009 +#: rcgcdw.py:1064 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} edit)" msgstr[1] " ({} edits)" -#: rcgcdw.py:1014 +#: rcgcdw.py:1069 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} action)" msgstr[1] " UTC ({} actions)" -#: rcgcdw.py:1016 rcgcdw.py:1017 rcgcdw.py:1021 +#: rcgcdw.py:1071 rcgcdw.py:1072 rcgcdw.py:1076 msgid "But nobody came" msgstr "But nobody came" -#: rcgcdw.py:1024 +#: rcgcdw.py:1080 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Most active user" msgstr[1] "Most active users" -#: rcgcdw.py:1025 +#: rcgcdw.py:1081 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "Most edited article" msgstr[1] "Most edited articles" -#: rcgcdw.py:1026 +#: rcgcdw.py:1082 msgid "Edits made" msgstr "Edits made" -#: rcgcdw.py:1026 +#: rcgcdw.py:1082 msgid "New files" msgstr "New files" -#: rcgcdw.py:1026 +#: rcgcdw.py:1082 msgid "Admin actions" msgstr "Admin actions" -#: rcgcdw.py:1027 +#: rcgcdw.py:1083 msgid "Bytes changed" msgstr "Bytes changed" -#: rcgcdw.py:1027 +#: rcgcdw.py:1083 msgid "New articles" msgstr "New articles" -#: rcgcdw.py:1028 +#: rcgcdw.py:1084 msgid "Unique contributors" msgstr "Unique contributors" -#: rcgcdw.py:1029 +#: rcgcdw.py:1085 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Most active hour" msgstr[1] "Most active hours" -#: rcgcdw.py:1030 +#: rcgcdw.py:1086 msgid "Day score" msgstr "Day score" -#: rcgcdw.py:1177 +#: rcgcdw.py:1227 #, python-brace-format msgid "Connection to {wiki} seems to be stable now." msgstr "Connection to {wiki} seems to be stable now." -#: rcgcdw.py:1178 rcgcdw.py:1289 +#: rcgcdw.py:1228 rcgcdw.py:1339 msgid "Connection status" msgstr "Connection status" -#: rcgcdw.py:1288 +#: rcgcdw.py:1338 #, python-brace-format msgid "{wiki} seems to be down or unreachable." msgstr "{wiki} seems to be down or unreachable." -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "director" msgstr "Director" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "bot" msgstr "Bot" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "editor" msgstr "Editor" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "directors" msgstr "Directors" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "sysop" msgstr "Administrator" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "bureaucrat" msgstr "Bureaucrat" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "reviewer" msgstr "Reviewer" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "autoreview" msgstr "Autoreview" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "autopatrol" msgstr "Autopatrol" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "wiki_guardian" msgstr "Wiki guardian" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "second" msgid_plural "seconds" msgstr[0] "second" msgstr[1] "seconds" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "minute" msgid_plural "minutes" msgstr[0] "minute" msgstr[1] "minutes" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "hour" msgid_plural "hours" msgstr[0] "hour" msgstr[1] "hours" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "day" msgid_plural "days" msgstr[0] "day" msgstr[1] "days" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "week" msgid_plural "weeks" msgstr[0] "week" msgstr[1] "weeks" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "month" msgid_plural "months" msgstr[0] "month" msgstr[1] "months" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "year" msgid_plural "years" msgstr[0] "year" msgstr[1] "years" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "millennium" msgid_plural "millennia" msgstr[0] "millennium" msgstr[1] "millennia" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "decade" msgid_plural "decades" msgstr[0] "decade" msgstr[1] "decades" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "century" msgid_plural "centuries" msgstr[0] "century" From 8f8db6297d203e85df8e7072900ed8e0c99be0b4 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 20 May 2019 17:39:03 +0200 Subject: [PATCH 13/23] Bump version --- configloader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configloader.py b/configloader.py index 86cf036..d113705 100644 --- a/configloader.py +++ b/configloader.py @@ -6,7 +6,7 @@ try: # 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.6.0.1") # set the version in the useragent + settings["header"]["user-agent"] = settings["header"]["user-agent"].format(version="1.7") # 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 b4f821cd3f155dc16dbd8aeab0329574fca26813 Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 20 May 2019 21:01:45 +0200 Subject: [PATCH 14/23] Fixed translation of misc module --- misc.py | 5 +++++ rcgcdw.py | 8 +++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/misc.py b/misc.py index 4ec2511..6fd1c66 100644 --- a/misc.py +++ b/misc.py @@ -19,6 +19,11 @@ import json, logging, sys, re from html.parser import HTMLParser from configloader import settings +import gettext + +# Initialize translation +t = gettext.translation('misc', localedir='locale', languages=[settings["lang"]]) +_ = t.gettext # Create a custom logger diff --git a/rcgcdw.py b/rcgcdw.py index c5e295b..682975f 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -21,11 +21,14 @@ # You have been warned import time, logging.config, json, requests, datetime, re, gettext, math, random, os.path, schedule, sys, ipaddress +import misc from bs4 import BeautifulSoup from collections import defaultdict, Counter from urllib.parse import quote_plus from html.parser import HTMLParser from configloader import settings +from misc import link_formatter +from misc import ContentParser if __name__ != "__main__": # return if called as a module logging.critical("The file is being executed as a module. Please execute the script using the console.") @@ -50,11 +53,6 @@ except FileNotFoundError: lang.install() ngettext = lang.ngettext -import misc - -from misc import link_formatter -from misc import ContentParser - storage = misc.load_datafile() # Remove previous data holding file if exists and limitfetch allows From 062c31a7b1872cce9241fdbfc12b4fdc408d14dc Mon Sep 17 00:00:00 2001 From: Frisk Date: Mon, 20 May 2019 21:23:19 +0200 Subject: [PATCH 15/23] Refactoring - moved a few functions to misc --- misc.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++ rcgcdw.py | 82 ++----------------------------------------------------- 2 files changed, 78 insertions(+), 80 deletions(-) diff --git a/misc.py b/misc.py index 6fd1c66..ea30a4e 100644 --- a/misc.py +++ b/misc.py @@ -22,6 +22,7 @@ from configloader import settings import gettext # Initialize translation + t = gettext.translation('misc', localedir='locale', languages=[settings["lang"]]) _ = t.gettext @@ -144,3 +145,78 @@ class ContentParser(HTMLParser): self.current_tag = "afterdel" else: self.current_tag = "" + + +class LinkParser(HTMLParser): + new_string = "" + recent_href = "" + + def handle_starttag(self, tag, attrs): + for attr in attrs: + if attr[0] == 'href': + self.recent_href = attr[1] + if self.recent_href.startswith("//"): + self.recent_href = "https:{rest}".format(rest=self.recent_href) + elif not self.recent_href.startswith("http"): + self.recent_href = "https://{wiki}.gamepedia.com".format(wiki=settings["wiki"]) + self.recent_href + self.recent_href = self.recent_href.replace(")", "\\)") + + def handle_data(self, data): + if self.recent_href: + self.new_string = self.new_string + "[{}](<{}>)".format(data, self.recent_href) + self.recent_href = "" + else: + self.new_string = self.new_string + data + + def handle_comment(self, data): + self.new_string = self.new_string + data + + def handle_endtag(self, tag): + misc_logger.debug(self.new_string) + + +def safe_read(request, *keys): + if request is None: + return None + try: + request = request.json() + for item in keys: + request = request[item] + except KeyError: + misc_logger.warning( + "Failure while extracting data from request on key {key} in {change}".format(key=item, change=request)) + return None + except ValueError: + misc_logger.warning("Failure while extracting data from request in {change}".format(change=request)) + return None + return request + + +def handle_discord_http(code, formatted_embed, result): + if 300 > code > 199: # message went through + return 0 + elif code == 400: # HTTP BAD REQUEST result.status_code, data, result, header + misc_logger.error( + "Following message has been rejected by Discord, please submit a bug on our bugtracker adding it:") + misc_logger.error(formatted_embed) + misc_logger.error(result.text) + return 1 + elif code == 401 or code == 404: # HTTP UNAUTHORIZED AND NOT FOUND + misc_logger.error("Webhook URL is invalid or no longer in use, please replace it with proper one.") + sys.exit(1) + elif code == 429: + misc_logger.error("We are sending too many requests to the Discord, slowing down...") + return 2 + elif 499 < code < 600: + misc_logger.error( + "Discord have trouble processing the event, and because the HTTP code returned is {} it means we blame them.".format( + code)) + return 3 + + +def add_to_dict(dictionary, key): + if key in dictionary: + dictionary[key] += 1 + else: + dictionary[key] = 1 + return dictionary \ No newline at end of file diff --git a/rcgcdw.py b/rcgcdw.py index 682975f..ff9bc69 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -25,10 +25,8 @@ import misc from bs4 import BeautifulSoup from collections import defaultdict, Counter from urllib.parse import quote_plus -from html.parser import HTMLParser from configloader import settings -from misc import link_formatter -from misc import ContentParser +from misc import link_formatter, LinkParser, ContentParser, safe_read, handle_discord_http, add_to_dict if __name__ != "__main__": # return if called as a module logging.critical("The file is being executed as a module. Please execute the script using the console.") @@ -68,41 +66,11 @@ if settings["limitrefetch"] != -1 and os.path.exists("lastchange.txt") is True: logged_in = False 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/profile-edited", "curseprofile/comment-replied", "contentmodel/change", "sprite/sprite", "sprite/sheet", "sprite/slice", "managetags/create", "managetags/delete", "managetags/activate", "managetags/deactivate", "tag/update"] +LinkParser = LinkParser() class MWError(Exception): pass -class LinkParser(HTMLParser): - new_string = "" - recent_href = "" - - def handle_starttag(self, tag, attrs): - for attr in attrs: - if attr[0] == 'href': - self.recent_href = attr[1] - if self.recent_href.startswith("//"): - self.recent_href = "https:{rest}".format(rest=self.recent_href) - elif not self.recent_href.startswith("http"): - self.recent_href = "https://{wiki}.gamepedia.com".format(wiki=settings["wiki"]) + self.recent_href - self.recent_href = self.recent_href.replace(")", "\\)") - - def handle_data(self, data): - if self.recent_href: - self.new_string = self.new_string + "[{}](<{}>)".format(data, self.recent_href) - self.recent_href = "" - else: - self.new_string = self.new_string + data - - def handle_comment(self, data): - self.new_string = self.new_string + data - - def handle_endtag(self, tag): - logger.debug(self.new_string) - - -LinkParser = LinkParser() - - def send(message, name, avatar): dictionary_creator = {"content": message} if name: @@ -112,23 +80,6 @@ def send(message, name, avatar): send_to_discord(dictionary_creator) -def safe_read(request, *keys): - if request is None: - return None - try: - request = request.json() - for item in keys: - request = request[item] - except KeyError: - logger.warning( - "Failure while extracting data from request on key {key} in {change}".format(key=item, change=request)) - return None - except ValueError: - logger.warning("Failure while extracting data from request in {change}".format(change=request)) - return None - return request - - def send_to_discord_webhook(data): header = settings["header"] if "content" not in data: @@ -881,28 +832,6 @@ def embed_formatter(action, change, parsed_comment, categories): send_to_discord(formatted_embed) -def handle_discord_http(code, formatted_embed, result): - if 300 > code > 199: # message went through - return 0 - elif code == 400: # HTTP BAD REQUEST result.status_code, data, result, header - logger.error( - "Following message has been rejected by Discord, please submit a bug on our bugtracker adding it:") - logger.error(formatted_embed) - logger.error(result.text) - return 1 - elif code == 401 or code == 404: # HTTP UNAUTHORIZED AND NOT FOUND - logger.error("Webhook URL is invalid or no longer in use, please replace it with proper one.") - sys.exit(1) - elif code == 429: - logger.error("We are sending too many requests to the Discord, slowing down...") - return 2 - elif 499 < code < 600: - logger.error( - "Discord have trouble processing the event, and because the HTTP code returned is {} it means we blame them.".format( - code)) - return 3 - - def essential_info(change, changed_categories): """Prepares essential information for both embed and compact message format.""" logger.debug(change) @@ -981,13 +910,6 @@ def day_overview_request(): return result, complete -def add_to_dict(dictionary, key): - if key in dictionary: - dictionary[key] += 1 - else: - dictionary[key] = 1 - return dictionary - def daily_overview_sync(edits, files, admin, changed_bytes, new_articles, unique_contributors, day_score): weight = storage["daily_overview"]["days_tracked"] if weight == 0: From 25cc94105fea7baa9ba91c41b7e92907f49319de Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 21 May 2019 01:27:51 +0200 Subject: [PATCH 16/23] Updated translations --- locale/de/LC_MESSAGES/misc.mo | Bin 0 -> 441 bytes locale/de/LC_MESSAGES/misc.po | 27 +++ locale/en/LC_MESSAGES/misc.mo | Bin 0 -> 441 bytes locale/en/LC_MESSAGES/misc.po | 27 +++ locale/fr/LC_MESSAGES/misc.mo | Bin 0 -> 439 bytes locale/fr/LC_MESSAGES/misc.po | 27 +++ locale/fr/LC_MESSAGES/rcgcdw.mo | Bin 9347 -> 9494 bytes locale/fr/LC_MESSAGES/rcgcdw.po | 362 +++++++++++++++-------------- locale/pl/LC_MESSAGES/misc.mo | Bin 0 -> 502 bytes locale/pl/LC_MESSAGES/misc.po | 27 +++ locale/pt-br/LC_MESSAGES/misc.mo | Bin 0 -> 438 bytes locale/pt-br/LC_MESSAGES/misc.po | 27 +++ locale/pt-br/LC_MESSAGES/rcgcdw.mo | Bin 9102 -> 9257 bytes locale/pt-br/LC_MESSAGES/rcgcdw.po | 362 +++++++++++++++-------------- locale/ru/LC_MESSAGES/misc.mo | Bin 0 -> 462 bytes locale/ru/LC_MESSAGES/misc.po | 25 ++ 16 files changed, 540 insertions(+), 344 deletions(-) create mode 100644 locale/de/LC_MESSAGES/misc.mo create mode 100644 locale/de/LC_MESSAGES/misc.po create mode 100644 locale/en/LC_MESSAGES/misc.mo create mode 100644 locale/en/LC_MESSAGES/misc.po create mode 100644 locale/fr/LC_MESSAGES/misc.mo create mode 100644 locale/fr/LC_MESSAGES/misc.po create mode 100644 locale/pl/LC_MESSAGES/misc.mo create mode 100644 locale/pl/LC_MESSAGES/misc.po create mode 100644 locale/pt-br/LC_MESSAGES/misc.mo create mode 100644 locale/pt-br/LC_MESSAGES/misc.po create mode 100644 locale/ru/LC_MESSAGES/misc.mo create mode 100644 locale/ru/LC_MESSAGES/misc.po diff --git a/locale/de/LC_MESSAGES/misc.mo b/locale/de/LC_MESSAGES/misc.mo new file mode 100644 index 0000000000000000000000000000000000000000..f6d60e542df6fe3f36a823b11ef0eeff9bac8a40 GIT binary patch literal 441 zcmZvY!A`?442BDWOC&CwIfNSsJlaYVBclfx8=BZenL5O+3ajagx}-`{1P{Vf@J>7n z?uyujU-={_`E4iu-rxE3NZZ5#aZ2nGmqeqO*drc@yDiU4fA?P$(^{*^{S!;mE0yt; zHkhVfZ1gKG9E>w~L}LrB1ZOj>v~e)Cd6B_&om)sW9mn?x3=B#~F1V2n1rPn;0{kw7 zJ`c`C&^z%%-zOu?@U3X7{p$<6t#2Y#UdtRILAjy^)A4k;c}CFj*+46Y%0co`Q8$P0 z?yM?hq56EWl*Xcq=E(?p8=sNNzMz4jTIj4$x!}F$!m%f~MTJH>Z3K@sW`*NnC+q}l zA}y6~(#rOh#bs?|2_tP*R&Z6Vw>Ap, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-05-20 17:18+0200\n" +"PO-Revision-Date: 2019-05-20 17:25+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.2.1\n" +"Last-Translator: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: de\n" + +#: misc.py:76 +msgid "" +"\n" +"__And more__" +msgstr "" +"\n" +"__Und mehr__" diff --git a/locale/en/LC_MESSAGES/misc.mo b/locale/en/LC_MESSAGES/misc.mo new file mode 100644 index 0000000000000000000000000000000000000000..2a92917dde3e75a406335fe29e6ac81d7bb37327 GIT binary patch literal 441 zcmZvY!A`?442BDWOC&CwIfNSsJklb>=;#5)h9;OOQ$gISu$mIoB~_9kco3d~cj8%a zSHy(GuY8i7{I-*PZLWO;q*Y>z*eBMBQ=(ByY!J7^)k+ZLKlvxcv=(Y=f5r0rOc#7+ zEarKTTJwTa52FI^(K=;x%-IBMV?B&rsR}rsmku&R+v!aPeT&kQ3ofL`m`5T!0dWM8 z;Nfu`cK1Xi1Q}t1ud39bP1C$uooQ&T8i#=QHeJbQpk)M%wQHs-0pLU|r_qE5)J wrK9#uS=FAhw3=I4!O+;5i@B~BsY{|BZ^L9q^X-I(yFDsy9}siYEcpAg-z*e#$N&HU literal 0 HcmV?d00001 diff --git a/locale/en/LC_MESSAGES/misc.po b/locale/en/LC_MESSAGES/misc.po new file mode 100644 index 0000000..f1358ed --- /dev/null +++ b/locale/en/LC_MESSAGES/misc.po @@ -0,0 +1,27 @@ +# 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: 2019-05-20 17:18+0200\n" +"PO-Revision-Date: 2019-05-20 17:32+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.2.1\n" +"Last-Translator: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: en\n" + +#: misc.py:76 +msgid "" +"\n" +"__And more__" +msgstr "" +"\n" +"__And more__" diff --git a/locale/fr/LC_MESSAGES/misc.mo b/locale/fr/LC_MESSAGES/misc.mo new file mode 100644 index 0000000000000000000000000000000000000000..6b754846125e9bdf6fa42080c5b14b64b585099e GIT binary patch literal 439 zcmZ9I!Ab)$5QbOL%c2+09&%K4YO*NS)C#q>QfYB5t9V;tce<`@lO;(-AHl?w`Um?dgmy zjKwq!Vr$-T=3$h<6IxdoEm=6l%2*E*mlqjaFLMWpq3ifQfxboM$ptscqht{m7r@UT z;!K=N(LUl4=VXK_z87`1|31OEkkM)58!MeJRgRFLTF?iR(PXf0L$r9FWKCN0S$KGYmcM3 F{sKRGbX))c literal 0 HcmV?d00001 diff --git a/locale/fr/LC_MESSAGES/misc.po b/locale/fr/LC_MESSAGES/misc.po new file mode 100644 index 0000000..10034b3 --- /dev/null +++ b/locale/fr/LC_MESSAGES/misc.po @@ -0,0 +1,27 @@ +# 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: 2019-05-20 17:18+0200\n" +"PO-Revision-Date: 2019-05-21 01:24+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.2.1\n" +"Last-Translator: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: fr\n" + +#: misc.py:76 +msgid "" +"\n" +"__And more__" +msgstr "" +"\n" +"__Et plus__" diff --git a/locale/fr/LC_MESSAGES/rcgcdw.mo b/locale/fr/LC_MESSAGES/rcgcdw.mo index 1e1ad4a39fc124e3e6a694b428eca87bbc359778..a1196d7880e5ef7ddd6fd765f9cfba5c5788b6cd 100644 GIT binary patch delta 2752 zcmY+`e@vBC9LMo<`6-$NToJL%2gF1L;a({eL{RewWRUnPB)kz`^CH}kpR%^@!nyv) zKNKe$>R4q|x>jy?H2!f$n46`!wPionYBO6o#-{#}&gSa0BSd zcpS%Eyo7GNgVQj9!{f$;Od1tEkd3pj5T{@zW?(I{NkExhX>v>p?>DYpLun&{*G$!FFX5yE)0DnQ< zAIDAea5ieDR-y*96*Z6$s=Z;HNB`zB6;0(WdOyyfD8o+()9Hv2QR)J+0K#lw()Pq-$ z$%^!*nV3$mTB;1xKnqamQ;F(ulfAwJ^EvNCe&+o&=3j3x!kHczL#^p0)Rax&B1|W9 zsG17Y3~a^(+=+4MN43+88dx`K<_;h~bCQGFKZ_2IB9mi&ax?$>!%Z$|q_>fuxz9lz zCC`YOiEIp$W6yJuNia)M&#gsP&s5v<2Gq>#Mh&zL)m{&({XUGrfe;mbW{`s#_!RX9 z=TL9RPud;dSDW@9UY$18<(Sld$AY~;ZnR{y@z@(kJnTOKGgGvQ8V!w zs{N~|nZAvg^lxTxmjN2|KO0ShpI8t5SEzOSrz zu!!@yjxo>U7SznWi=hfC-%-&Tx*49FkJ@g<$Sj&F)GqO()~*$q9Mg^Js2{a7=TQT? zhPv-M>bo(48gMGFt%0mYR?YNeGylrsBV5n}CsA2HjB4l%DqBBC+A!lt0-HZj1NsNm za4erWHCTkYUX5yR8){%aR6pI;w@}G^NZ(&|)NgMbvNwz%JIZ{4+Q;8pe?#r(o2Y@^ zLUr^2V=y5nn#@V4U6YM^-h=9}6m|b9Ou?!U72Q~GFEpdROmEoh?;v?%j-!%m6tznx z(1r9HDQqQENodeairGYLBQ(f|rIU)*KR}ccuM(jq4k{Yeqh z2rZQoPf50zm`bShM2YN@5?ilFZBymJI)cxI$)kU>pNJ)t2RjLUwNzdrlx(?#)?Otp zO5}r5X6vGX(8owcJHQjE@edQeMyw##5PJwxC-VP=XHfq)FpWeDv6)cWNbrq`{KN4& z))Gqyl_H`eQi~q8!V5%QcrvNP70#Mgml$qO^SazVUrn&3*Xh|4==68AH8%NuzVIpc zm}`o+(D4+Pc#4mGQ3PJl)}R T1q1uK{H^|ACoNsie$VwEu-p7G delta 2631 zcmYk+drX&A9LMqR4^WV+aZ$*C2UL`sTuntNBl3b+2nL9lyX12!Q zpQ2T3%QdUzZ>y|L{G%K+ww$h9w$)s;Io6!mY7$w!KX6!_@%_EdIXus~pQpdNXOsU^ zd|026x`;c7kx;V%d?uV9()D>}(KwE`<3G3nQzFeWu@LqDdS@%fP;SRL_%trZ=P?04 zz$iR}ab~`KLq;!L#$>#T5g6d9g&2uTF%$LNM$Etlqyc-<)xV6{l>0Fr&!XPDh*>y+ z1?Vwa4{NcV{;h+|ZB+b>c{q+qm_~1Uu@qx*2QqnU!xTJ%%kVhr`A=~%j-XcPI%+`S zysUu~q1tOiJ=cwy^l$HyNyD!(9Y;|s5yte?Q7W=1whC#}Dv`-pEw08E)QtPE4o{#u zn8YQRK7V>etFV~z7R<%x(AOTGBqP5??bQvez(p*JM!p^OqK_<&okFd|AZm+-Q3Jh# zIyRH2EevH;s*lEe%tHQb8$X)B{&?13d)Y~amZ}ePa1i;kF@7}jTR0aZI6+|;hiV`Z zH6RbQV)@9Qt>;GrX+{rsBa2}@uD%yFz&8?De|7L474l=`0@xR>d-htEAcmKfO8Y4+lfJ{EEz*E5BakKe)N77YT)%g8O^8_)xkdZz(Jft`B~J!dQf|R z+?C%%kMjGNheN2t_y?W~aAr7>>R^_nqA5Q^=GGWmm8=<_!qJW7Rq$gQ95dCYET2(gZeHULJhPJHGp%d8Bd}PZ4%3%_B_-f z&qlq!0;91k)7}3KROl0W05uSOmDKP{s0KfG^%qbLUPg8Bi}M=l&`zK__!l+cC_aOF zE)%&JmXErwmCl;Q{`9?Vph6?siRz#YL$DJ$m)3>49j~Dpcnj6x3Dol+;e7lI_1usv zUqXF&uDbf0$hKSflIgRw)F-2B(S!li!PCfR(h)NHuslIL?kcrqH7+ljXXUHNKSp@O zy+k>otx|e~(CW0PK2`}>HR**3wMR!t)!8V;DzLbdBJNL9f981#09})i(d)+2M6BdNdN!< diff --git a/locale/fr/LC_MESSAGES/rcgcdw.po b/locale/fr/LC_MESSAGES/rcgcdw.po index 57386c4..35efd16 100644 --- a/locale/fr/LC_MESSAGES/rcgcdw.po +++ b/locale/fr/LC_MESSAGES/rcgcdw.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-03 11:33+0200\n" -"PO-Revision-Date: 2019-05-03 11:36+0200\n" +"POT-Creation-Date: 2019-05-20 17:17+0200\n" +"PO-Revision-Date: 2019-05-21 01:26+0200\n" "Last-Translator: Frisk \n" "Language-Team: \n" "Language: fr\n" @@ -20,67 +20,67 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-SearchPath-0: rcgcdw.pot\n" -#: rcgcdw.py:177 +#: rcgcdw.py:184 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" "{edit_size})" msgstr "" -#: rcgcdw.py:179 +#: rcgcdw.py:186 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" "{edit_size})" msgstr "" -#: rcgcdw.py:183 +#: rcgcdw.py:190 #, python-brace-format msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" msgstr "" -#: rcgcdw.py:191 +#: rcgcdw.py:198 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" "{comment}" msgstr "" -#: rcgcdw.py:195 +#: rcgcdw.py:202 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "" -#: rcgcdw.py:200 +#: rcgcdw.py:207 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" "({page_link}){comment}" msgstr "" -#: rcgcdw.py:205 rcgcdw.py:211 +#: rcgcdw.py:212 rcgcdw.py:218 msgid "without making a redirect" msgstr "" -#: rcgcdw.py:205 rcgcdw.py:212 +#: rcgcdw.py:212 rcgcdw.py:219 msgid "with a redirect" msgstr "" -#: rcgcdw.py:206 +#: rcgcdw.py:213 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" "({target_url}) {made_a_redirect}{comment}" msgstr "" -#: rcgcdw.py:213 +#: rcgcdw.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " "[{target}]({target_url}) {made_a_redirect}{comment}" msgstr "" -#: rcgcdw.py:219 +#: rcgcdw.py:226 #, fuzzy, python-brace-format #| msgid "Moved protection settings from {redirect}{article} to {title}" msgid "" @@ -89,17 +89,17 @@ msgid "" msgstr "" "Transfert des paramètres de protection de {redirect}{article} vers {title}" -#: rcgcdw.py:231 rcgcdw.py:598 +#: rcgcdw.py:238 rcgcdw.py:637 msgid "infinity and beyond" msgstr "toujours" -#: rcgcdw.py:246 +#: rcgcdw.py:253 #, python-brace-format msgid "" "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}" msgstr "" -#: rcgcdw.py:251 +#: rcgcdw.py:258 #, fuzzy, python-brace-format #| msgid "Changed block settings for {blocked_user}" msgid "" @@ -107,26 +107,26 @@ msgid "" "({user_url}){comment}" msgstr "Modification des paramètres de blocage pour {blocked_user}" -#: rcgcdw.py:256 +#: rcgcdw.py:263 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" msgstr "" -#: rcgcdw.py:260 +#: rcgcdw.py:267 #, fuzzy, python-brace-format #| msgid "Left a comment on {target}'s profile" msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" msgstr "Ajout d'un commentaire sur le profil de {target}" -#: rcgcdw.py:260 +#: rcgcdw.py:267 #, fuzzy #| msgid "Edited their own profile" msgid "their own profile" msgstr "Modification de son propre profil" -#: rcgcdw.py:265 +#: rcgcdw.py:272 #, fuzzy, python-brace-format #| msgid "Replied to a comment on {target}'s profile" msgid "" @@ -134,127 +134,127 @@ msgid "" "profile" msgstr "Réponse à un commentaire sur le profil de {target}" -#: rcgcdw.py:268 rcgcdw.py:276 rcgcdw.py:283 +#: rcgcdw.py:275 rcgcdw.py:283 rcgcdw.py:287 msgid "their own" msgstr "" -#: rcgcdw.py:273 +#: rcgcdw.py:280 #, fuzzy, python-brace-format #| msgid "Edited a comment on {target}'s profile" msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" msgstr "Édition d'un commentaire sur le profil de {target}" -#: rcgcdw.py:281 +#: rcgcdw.py:285 #, fuzzy, python-brace-format #| msgid "Deleted a comment on {target}'s profile" msgid "[{author}]({author_url}) deleted a comment on {target} profile" msgstr "Retrait d'un commentaire sur le profil de {target}" -#: rcgcdw.py:289 rcgcdw.py:648 +#: rcgcdw.py:293 rcgcdw.py:684 msgid "Location" msgstr "Emplacement" -#: rcgcdw.py:291 rcgcdw.py:650 +#: rcgcdw.py:295 rcgcdw.py:686 msgid "About me" msgstr "À propos de moi" -#: rcgcdw.py:293 rcgcdw.py:652 +#: rcgcdw.py:297 rcgcdw.py:688 msgid "Google link" msgstr "Lien Google" -#: rcgcdw.py:295 rcgcdw.py:654 +#: rcgcdw.py:299 rcgcdw.py:690 msgid "Facebook link" msgstr "Lien Facebook" -#: rcgcdw.py:297 rcgcdw.py:656 +#: rcgcdw.py:301 rcgcdw.py:692 msgid "Twitter link" msgstr "Lien Twitter" -#: rcgcdw.py:299 rcgcdw.py:658 +#: rcgcdw.py:303 rcgcdw.py:694 msgid "Reddit link" msgstr "Lien Reddit" -#: rcgcdw.py:301 rcgcdw.py:660 +#: rcgcdw.py:305 rcgcdw.py:696 msgid "Twitch link" msgstr "Lien Twitch" -#: rcgcdw.py:303 rcgcdw.py:662 +#: rcgcdw.py:307 rcgcdw.py:698 msgid "PSN link" msgstr "Lien PSN" -#: rcgcdw.py:305 rcgcdw.py:664 +#: rcgcdw.py:309 rcgcdw.py:700 msgid "VK link" msgstr "Lien VK" -#: rcgcdw.py:307 rcgcdw.py:666 +#: rcgcdw.py:311 rcgcdw.py:702 msgid "XVL link" msgstr "Lien XVL" -#: rcgcdw.py:309 rcgcdw.py:668 +#: rcgcdw.py:313 rcgcdw.py:704 msgid "Steam link" msgstr "Lien Steam" -#: rcgcdw.py:311 rcgcdw.py:670 +#: rcgcdw.py:315 rcgcdw.py:706 msgid "Discord handle" msgstr "" -#: rcgcdw.py:313 +#: rcgcdw.py:317 #, fuzzy #| msgid "Unknown" msgid "unknown" msgstr "Inconnu" -#: rcgcdw.py:314 +#: rcgcdw.py:318 #, python-brace-format msgid "[{target}]({target_url})'s" msgstr "" -#: rcgcdw.py:314 +#: rcgcdw.py:318 #, python-brace-format msgid "[their own]({target_url})" msgstr "" -#: rcgcdw.py:315 +#: rcgcdw.py:319 #, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*" msgstr "" -#: rcgcdw.py:329 rcgcdw.py:331 rcgcdw.py:701 rcgcdw.py:703 +#: rcgcdw.py:333 rcgcdw.py:335 rcgcdw.py:736 rcgcdw.py:738 msgid "none" msgstr "aucun" -#: rcgcdw.py:337 rcgcdw.py:688 +#: rcgcdw.py:341 rcgcdw.py:723 msgid "System" msgstr "Système" -#: rcgcdw.py:343 +#: rcgcdw.py:347 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " "following settings: {settings}{comment}" msgstr "" -#: rcgcdw.py:345 rcgcdw.py:354 rcgcdw.py:712 rcgcdw.py:719 +#: rcgcdw.py:349 rcgcdw.py:358 rcgcdw.py:747 rcgcdw.py:754 msgid " [cascading]" msgstr " [protection en cascade]" -#: rcgcdw.py:351 +#: rcgcdw.py:355 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" "({article_url}) to: {settings}{comment}" msgstr "" -#: rcgcdw.py:359 +#: rcgcdw.py:363 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" "{comment}" msgstr "" -#: rcgcdw.py:364 +#: rcgcdw.py:368 #, fuzzy, python-brace-format #| msgid "Changed visibility of revision on page {article} " #| msgid_plural "Changed visibility of {amount} revisions on page {article} " @@ -268,7 +268,7 @@ 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} " -#: rcgcdw.py:370 +#: rcgcdw.py:374 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -279,78 +279,78 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:376 +#: rcgcdw.py:380 #, python-brace-format msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" -#: rcgcdw.py:378 +#: rcgcdw.py:382 #, fuzzy, python-brace-format #| msgid "Changed visibility of log events" msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "Modification de la visibilité d'évènements des journaux" -#: rcgcdw.py:380 +#: rcgcdw.py:384 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" msgstr "" -#: rcgcdw.py:383 +#: rcgcdw.py:387 #, fuzzy, python-brace-format #| msgid "Edited abuse filter number {number}" msgid "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" msgstr "Édition de la règle {number} du filtre anti-abus" -#: rcgcdw.py:386 +#: rcgcdw.py:390 #, fuzzy, python-brace-format #| msgid "Edited abuse filter number {number}" msgid "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" msgstr "Édition de la règle {number} du filtre anti-abus" -#: rcgcdw.py:392 +#: rcgcdw.py:396 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" "({article_url}) into [{dest}]({dest_url}){comment}" msgstr "" -#: rcgcdw.py:396 +#: rcgcdw.py:400 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" "({table_url}) pointing to {website} with {prefix} prefix" msgstr "" -#: rcgcdw.py:402 +#: rcgcdw.py:406 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " "pointing to {website} with {prefix} prefix" msgstr "" -#: rcgcdw.py:408 +#: rcgcdw.py:412 #, fuzzy, python-brace-format #| msgid "Deleted an entry in interwiki table" msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" msgstr "Retrait d'une entrée de la table interwiki" -#: rcgcdw.py:412 +#: rcgcdw.py:416 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "" -#: rcgcdw.py:417 +#: rcgcdw.py:421 #, python-brace-format msgid "" "[{author}]({author_url}) edited the sprite for [{article}]({article_url})" msgstr "" -#: rcgcdw.py:421 +#: rcgcdw.py:425 #, fuzzy, python-brace-format #| msgid "Created the sprite sheet for {article}" msgid "" @@ -358,74 +358,86 @@ msgid "" "({article_url})" msgstr "Création d'une feuille de sprite pour {article}" -#: rcgcdw.py:425 +#: rcgcdw.py:429 #, python-brace-format msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" -#: rcgcdw.py:428 +#: rcgcdw.py:432 #, python-brace-format msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:432 +#: rcgcdw.py:436 #, python-brace-format msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:436 +#: rcgcdw.py:440 #, python-brace-format msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:439 +#: rcgcdw.py:443 #, python-brace-format msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:442 +#: rcgcdw.py:445 #, fuzzy #| msgid "Action has been hidden by Gamepedia staff." msgid "An action has been hidden by administration." msgstr "L'action a été masquée par le personnel de Gamepedia." -#: rcgcdw.py:450 rcgcdw.py:704 +#: rcgcdw.py:454 rcgcdw.py:739 msgid "No description provided" msgstr "Aucune description" -#: rcgcdw.py:500 +#: rcgcdw.py:504 msgid "(N!) " msgstr "(N!) " -#: rcgcdw.py:501 +#: rcgcdw.py:505 msgid "m " msgstr "m " -#: rcgcdw.py:525 rcgcdw.py:560 +#: rcgcdw.py:524 rcgcdw.py:529 +msgid "__Only whitespace__" +msgstr "__Espaces uniquement__" + +#: rcgcdw.py:535 +msgid "Removed" +msgstr "Retirés" + +#: rcgcdw.py:538 +msgid "Added" +msgstr "Ajoutés" + +#: rcgcdw.py:564 rcgcdw.py:599 msgid "Options" msgstr "Options" -#: rcgcdw.py:525 +#: rcgcdw.py:564 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "([Aperçu]({link}) | [Annuler]({undolink}))" -#: rcgcdw.py:527 +#: rcgcdw.py:566 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "Téléversement d'une nouvelle version de {name}" -#: rcgcdw.py:529 +#: rcgcdw.py:568 #, python-brace-format msgid "Uploaded {name}" msgstr "Téléversement de {name}" -#: rcgcdw.py:545 +#: rcgcdw.py:584 msgid "**No license!**" msgstr "**Aucune license!**" -#: rcgcdw.py:557 +#: rcgcdw.py:596 msgid "" "\n" "License: {}" @@ -433,146 +445,146 @@ msgstr "" "\n" "License: {}" -#: rcgcdw.py:560 +#: rcgcdw.py:599 #, python-brace-format msgid "([preview]({link}))" msgstr "([Aperçu]({link}))" -#: rcgcdw.py:565 +#: rcgcdw.py:604 #, python-brace-format msgid "Deleted page {article}" msgstr "Suppression de la page {article}" -#: rcgcdw.py:569 +#: rcgcdw.py:608 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "Suppression par écrasement de la redirection {article}" -#: rcgcdw.py:574 +#: rcgcdw.py:613 msgid "No redirect has been made" msgstr "Aucune redirection créée" -#: rcgcdw.py:575 +#: rcgcdw.py:614 msgid "A redirect has been made" msgstr "Une redirection a été créée" -#: rcgcdw.py:576 +#: rcgcdw.py:615 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "Déplacement de {redirect}{article} vers {target}" -#: rcgcdw.py:580 +#: rcgcdw.py:619 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "Déplacement de {redirect}{article} vers {title} par redirection" -#: rcgcdw.py:585 +#: rcgcdw.py:624 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "" "Transfert des paramètres de protection de {redirect}{article} vers {title}" -#: rcgcdw.py:608 +#: rcgcdw.py:647 #, python-brace-format msgid "Blocked {blocked_user} for {time}" msgstr "{blocked_user} a été bloqué pour {time}" -#: rcgcdw.py:614 +#: rcgcdw.py:653 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "Modification des paramètres de blocage pour {blocked_user}" -#: rcgcdw.py:620 +#: rcgcdw.py:659 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "{blocked_user} a été débloqué" -#: rcgcdw.py:625 +#: rcgcdw.py:663 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "Ajout d'un commentaire sur le profil de {target}" -#: rcgcdw.py:627 +#: rcgcdw.py:665 msgid "Left a comment on their own profile" msgstr "Ajout d'un commentaire sur son propre profil" -#: rcgcdw.py:632 +#: rcgcdw.py:669 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "Réponse à un commentaire sur le profil de {target}" -#: rcgcdw.py:634 +#: rcgcdw.py:671 msgid "Replied to a comment on their own profile" msgstr "Réponse à un commentaire sur son propre profil" -#: rcgcdw.py:639 +#: rcgcdw.py:675 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "Édition d'un commentaire sur le profil de {target}" -#: rcgcdw.py:641 +#: rcgcdw.py:677 msgid "Edited a comment on their own profile" msgstr "Modification d'un commentaire sur son propre profil" -#: rcgcdw.py:672 rcgcdw.py:811 +#: rcgcdw.py:708 rcgcdw.py:846 msgid "Unknown" msgstr "Inconnu" -#: rcgcdw.py:673 +#: rcgcdw.py:709 #, python-brace-format msgid "Edited {target}'s profile" msgstr "Modification du profil de {target}" -#: rcgcdw.py:673 +#: rcgcdw.py:709 msgid "Edited their own profile" msgstr "Modification de son propre profil" -#: rcgcdw.py:675 +#: rcgcdw.py:711 #, python-brace-format msgid "Cleared the {field} field" msgstr "" -#: rcgcdw.py:677 +#: rcgcdw.py:713 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "{field} modifié pour: {desc}" -#: rcgcdw.py:682 +#: rcgcdw.py:717 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "Retrait d'un commentaire sur le profil de {target}" -#: rcgcdw.py:686 +#: rcgcdw.py:721 #, python-brace-format msgid "Changed group membership for {target}" msgstr "Modification des groupes pour {target}" -#: rcgcdw.py:690 +#: rcgcdw.py:725 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "{target} a été auto-promu dans un nouveau groupe" -#: rcgcdw.py:705 +#: rcgcdw.py:740 #, python-brace-format msgid "Groups changed from {old_groups} to {new_groups}{reason}" msgstr "Groupe modifié de {old_groups} vers {new_groups}{reason}" -#: rcgcdw.py:710 +#: rcgcdw.py:745 #, python-brace-format msgid "Protected {target}" msgstr "Protection de {target}" -#: rcgcdw.py:717 +#: rcgcdw.py:752 #, python-brace-format msgid "Changed protection level for {article}" msgstr "Modification du niveau de protection de {article}" -#: rcgcdw.py:724 +#: rcgcdw.py:759 #, python-brace-format msgid "Removed protection from {article}" msgstr "Retrait de la protection de {article}" -#: rcgcdw.py:729 +#: rcgcdw.py:764 #, python-brace-format msgid "Changed visibility of revision on page {article} " msgid_plural "Changed visibility of {amount} revisions on page {article} " @@ -580,328 +592,334 @@ 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} " -#: rcgcdw.py:735 +#: rcgcdw.py:770 #, 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" -#: rcgcdw.py:741 +#: rcgcdw.py:776 #, python-brace-format msgid "Restored {article}" msgstr "Restauration de {article}" -#: rcgcdw.py:744 +#: rcgcdw.py:779 msgid "Changed visibility of log events" msgstr "Modification de la visibilité d'évènements des journaux" -#: rcgcdw.py:747 +#: rcgcdw.py:782 msgid "Imported interwiki" msgstr "Importation d'interwiki" -#: rcgcdw.py:750 +#: rcgcdw.py:785 #, python-brace-format msgid "Edited abuse filter number {number}" msgstr "Édition de la règle {number} du filtre anti-abus" -#: rcgcdw.py:753 +#: rcgcdw.py:788 #, fuzzy, python-brace-format #| msgid "Edited abuse filter number {number}" msgid "Created abuse filter number {number}" msgstr "Édition de la règle {number} du filtre anti-abus" -#: rcgcdw.py:757 +#: rcgcdw.py:792 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "Fusion de l'historique de {article} vers {dest}" -#: rcgcdw.py:761 +#: rcgcdw.py:796 msgid "Added an entry to the interwiki table" msgstr "Ajout d'une entrée à la table interwiki" -#: rcgcdw.py:762 rcgcdw.py:768 +#: rcgcdw.py:797 rcgcdw.py:803 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "Préfixe: {prefix}, site: {website} | {desc}" -#: rcgcdw.py:767 +#: rcgcdw.py:802 msgid "Edited an entry in interwiki table" msgstr "Modification d'une entrée de la table interwiki" -#: rcgcdw.py:773 +#: rcgcdw.py:808 msgid "Deleted an entry in interwiki table" msgstr "Retrait d'une entrée de la table interwiki" -#: rcgcdw.py:774 +#: rcgcdw.py:809 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "Préfixe: {prefix} | {desc}" -#: rcgcdw.py:778 +#: rcgcdw.py:813 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "Modification du modèle de contenu de l'article {article}" -#: rcgcdw.py:779 +#: rcgcdw.py:814 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Modèle changé de {old} à {new}: {reason}" -#: rcgcdw.py:785 +#: rcgcdw.py:820 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Édition du sprite de {article}" -#: rcgcdw.py:789 +#: rcgcdw.py:824 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Création d'une feuille de sprite pour {article}" -#: rcgcdw.py:793 +#: rcgcdw.py:828 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Edited the slice for {article}" -#: rcgcdw.py:796 +#: rcgcdw.py:831 #, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "Création du tag « {tag} »" -#: rcgcdw.py:800 +#: rcgcdw.py:835 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "Suppression du tag « {tag} »" -#: rcgcdw.py:804 +#: rcgcdw.py:839 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "Activation du tag « {tag} »" -#: rcgcdw.py:807 +#: rcgcdw.py:842 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "Désactivation du tag « {tag} »" -#: rcgcdw.py:810 +#: rcgcdw.py:845 #, fuzzy #| msgid "Action has been hidden by Gamepedia staff." msgid "Action has been hidden by administration." msgstr "L'action a été masquée par le personnel de Gamepedia." -#: rcgcdw.py:837 +#: rcgcdw.py:872 msgid "Tags" msgstr "Tags" -#: rcgcdw.py:843 +#: rcgcdw.py:877 msgid "**Added**: " msgstr "**Ajoutées : ** " -#: rcgcdw.py:843 +#: rcgcdw.py:877 msgid " and {} more\n" msgstr " et {} autres\n" -#: rcgcdw.py:844 +#: rcgcdw.py:878 msgid "**Removed**: " msgstr "**Retirées : ** " -#: rcgcdw.py:844 +#: rcgcdw.py:878 msgid " and {} more" msgstr " et {} autres" -#: rcgcdw.py:845 +#: rcgcdw.py:879 msgid "Changed categories" msgstr "Catégories modifiées" -#: rcgcdw.py:886 +#: rcgcdw.py:920 msgid "~~hidden~~" msgstr "" -#: rcgcdw.py:892 +#: rcgcdw.py:926 msgid "hidden" msgstr "" -#: rcgcdw.py:995 +#: rcgcdw.py:1000 rcgcdw.py:1002 rcgcdw.py:1004 rcgcdw.py:1006 rcgcdw.py:1008 +#: rcgcdw.py:1010 rcgcdw.py:1012 +#, python-brace-format +msgid "{value} (avg. {avg})" +msgstr "" + +#: rcgcdw.py:1053 msgid "Daily overview" msgstr "Résumé de la journée" -#: rcgcdw.py:1005 +#: rcgcdw.py:1062 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} action)" msgstr[1] " ({} actions)" -#: rcgcdw.py:1009 +#: rcgcdw.py:1064 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} modification)" msgstr[1] " ({} modifications)" -#: rcgcdw.py:1014 +#: rcgcdw.py:1069 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} action)" msgstr[1] " UTC ({} actions)" -#: rcgcdw.py:1016 rcgcdw.py:1017 rcgcdw.py:1021 +#: rcgcdw.py:1071 rcgcdw.py:1072 rcgcdw.py:1076 msgid "But nobody came" msgstr "Aucune activité" -#: rcgcdw.py:1024 +#: rcgcdw.py:1080 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Membre le plus actif" msgstr[1] "Membres les plus actifs" -#: rcgcdw.py:1025 +#: rcgcdw.py:1081 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "Article le plus modifié" msgstr[1] "Articles les plus modifiés" -#: rcgcdw.py:1026 +#: rcgcdw.py:1082 msgid "Edits made" msgstr "Modifications effectuées" -#: rcgcdw.py:1026 +#: rcgcdw.py:1082 msgid "New files" msgstr "Nouveaux fichiers" -#: rcgcdw.py:1026 +#: rcgcdw.py:1082 msgid "Admin actions" msgstr "Actions d'administrateur" -#: rcgcdw.py:1027 +#: rcgcdw.py:1083 msgid "Bytes changed" msgstr "Octets modifiés" -#: rcgcdw.py:1027 +#: rcgcdw.py:1083 msgid "New articles" msgstr "Nouveaux articles" -#: rcgcdw.py:1028 +#: rcgcdw.py:1084 msgid "Unique contributors" msgstr "Contributeurs uniques" -#: rcgcdw.py:1029 +#: rcgcdw.py:1085 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Heure la plus active" msgstr[1] "Heures les plus actives" -#: rcgcdw.py:1030 +#: rcgcdw.py:1086 msgid "Day score" msgstr "Score du jour" -#: rcgcdw.py:1177 +#: rcgcdw.py:1227 #, python-brace-format msgid "Connection to {wiki} seems to be stable now." msgstr "La connexion avec {wiki} semble stable maintenant." -#: rcgcdw.py:1178 rcgcdw.py:1289 +#: rcgcdw.py:1228 rcgcdw.py:1339 msgid "Connection status" msgstr "Statut de connexion" -#: rcgcdw.py:1288 +#: rcgcdw.py:1338 #, python-brace-format msgid "{wiki} seems to be down or unreachable." msgstr "{wiki} semble être down ou inatteignable." -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "director" msgstr "Directeur" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "bot" msgstr "Robot" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "editor" msgstr "editor" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "directors" msgstr "Directeur" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "sysop" msgstr "Administrateur" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "bureaucrat" msgstr "Bureaucrate" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "reviewer" msgstr "reviewer" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "autoreview" msgstr "autoreview" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "autopatrol" msgstr "autopatrol" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "wiki_guardian" msgstr "Gardien du wiki" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "second" msgid_plural "seconds" msgstr[0] "seconde" msgstr[1] "secondes" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "minute" msgid_plural "minutes" msgstr[0] "minute" msgstr[1] "minutes" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "hour" msgid_plural "hours" msgstr[0] "heure" msgstr[1] "heures" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "day" msgid_plural "days" msgstr[0] "jour" msgstr[1] "jours" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "week" msgid_plural "weeks" msgstr[0] "semaine" msgstr[1] "semaines" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "month" msgid_plural "months" msgstr[0] "mois" msgstr[1] "mois" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "year" msgid_plural "years" msgstr[0] "année" msgstr[1] "années" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "millennium" msgid_plural "millennia" msgstr[0] "millénaire" msgstr[1] "millénaires" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "decade" msgid_plural "decades" msgstr[0] "décennie" msgstr[1] "décennies" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "century" msgid_plural "centuries" msgstr[0] "centenaire" diff --git a/locale/pl/LC_MESSAGES/misc.mo b/locale/pl/LC_MESSAGES/misc.mo new file mode 100644 index 0000000000000000000000000000000000000000..d674b72a2b35dd28fb28e4b91f4704258880493b GIT binary patch literal 502 zcmZvZ%}xR_5XV=emrXqA*+VZ9j27F15f>Jt2!;g0N><}-Q`vD{0xjtlzrxX1@ZkIS z9G-j-XCaY`lm61_%ztLu^m}LH!$Dg|c9BD56R9J)1;`e1jl8cpPK5h5@`FCEh2^z> z=0?%EipfM9h$1I2dIUpDJ2AZllcidD#2vs?8%ujxlE(C6mSi;47!LX&Z5ogkRrFF? z@Q7gil(J(g7~v-#uO2YL7z*hCp3=PAzdBJ~>bg=TGnoJlK~8W$uhVO-uE9&pZE9sf zSsK1hahin}do&%(RMp7vQJM^_e-pN8b)_>>We;FzOAU3Ls>CDJ`_#I3^a>OhX|?f4 zpdn5z5hYRLZdYd5J}(, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-05-20 17:18+0200\n" +"PO-Revision-Date: 2019-05-20 17:23+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.2.1\n" +"Last-Translator: \n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Language: pl\n" + +#: misc.py:76 +msgid "" +"\n" +"__And more__" +msgstr "" +"\n" +"__Oraz więcej__" diff --git a/locale/pt-br/LC_MESSAGES/misc.mo b/locale/pt-br/LC_MESSAGES/misc.mo new file mode 100644 index 0000000000000000000000000000000000000000..b6dd34028ed13efd63e8e6dbb58a3c4633505ecf GIT binary patch literal 438 zcmZ9I!Ab)$5QbOL%ZeAz9&%K4Y7!7@Y6Y#WC@rpK6>m%Ij_b-cS&~%rL3{}x%4c!5 z3l{vzM<&TXlVN^#HohX#I{{wdC~3zM_C zb(m#Q;_MsF0^H>Ah|ZVRC>Bq#wl2WL7iA8Yi^4-{={mVfVc<{)a>11jsF>v96!4VA5WVmWWba*_lCZGwBe%AC` zz>jcLSGqJkHhb01W9UDmBj~PtP8SvU8JnR, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-05-20 17:18+0200\n" +"PO-Revision-Date: 2019-05-21 01:22+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.2.1\n" +"Last-Translator: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt\n" + +#: misc.py:76 +msgid "" +"\n" +"__And more__" +msgstr "" +"\n" +"__E mais__" diff --git a/locale/pt-br/LC_MESSAGES/rcgcdw.mo b/locale/pt-br/LC_MESSAGES/rcgcdw.mo index bbe92d0e72748bbd32c5981eaa4803dd7d518388..27486a07a42c95437cf8e667e527054595fe2831 100644 GIT binary patch delta 2751 zcmY+`eN0t#9LMqB6W=%vnOS(t!4H8+f{8ed%?x8~lS)Sy;}MxDPOJ$MKi$b8}){}%Jv zzksQj%-!oc56;J0T#P}qnBTlYr;`I8;!G@H^jonC)3F0{aR4>IC??~Vn1E;TCcKCX z(8Z6sE+6M%6)IzGs2kgfx}ifjpZU#abadinR7%r%oGdKEY-~YgrWZBQb4V7=5oAs? zhCHkp$1*&PdUAIP*~8hW@q?%bc>$H-chUCJIZo#moJ8F~HffMGsI~KBB@UwQ{0r1| zSCFKcJZ4iSyr?BxhPu&aR2cVj<4 zM8%HFF_!&$XMYuv1hWqHgaKp~O~~0FKxO6`)Qt|I#yf}_f7GTEL+3r@&m3c;0lr2( z(RtLs7oFq3V?6u+q6Uhm(o_Q}sQoOoFdtRKD^W$+iybawUPYas#5!q->{)c?(kVf$ zc@ye{9jF0!qf$DEn)m<~<7=qz!8b_RnBS0lisV}lkWSt;ZZ0YVH8>j^P~*1aBEA11 zIvVJ8RF!^!O6m8grJ2NXjOBKj!&IWGcrEG)ccK?ZQAIU@{pe;;)ye?s_aW3gr`RYX zKSX5x6S*zjc`@pOI@Ig89wQT=zKo-&3qMBw%+G8}(9MrJuM+hZ1swOIz84>%&i@HD zZaitxjpSmc-v25(N?{8s_3fw>_TW-{5>+fGa5bJmO}K#3G+{I9x?Na?gQ!fLM7>3S zpx&ZPJ|?mn>v0R(dcVi$l;SzmKp9r_26B_&p=#oB)RXK*-N*VyEveU52D`BBbb11p$2*%RSTb^&i@WsX7eW|;Y>zX z?PQ@cS%WIFHK-fih-BXcP?>xhwdBJ&cC@PB`$O>>=Np{N!0s% z6*W;Dv+KGU7=son6Z23HumpAf3e-3asPmg`I(l+H>co)a0O|&wNB+zKHkEh`wf29b z3-uZ@_;2ds+r?Py`KqbxiUJ@~)vTK0N~8lsCJ<7NxNXTey6 znu<#8ZbAjAC0I{X5cd&U3bjR1%pG`pq|f^6W25TbN~qfFiARYYgqjLSYyJ??O{i@n z?j=-|Dn$MJu4PdzsP#sP6zfu_zX1ygeMM^t6=VVPn?53z(E9rbRjAtigo-Ag&?i?- z|0bwq6U!sL=w>76W2B}6^G167cMaPK)y|#7W+IO$CzcTPs=`e~C(%r(ts?klME>p9 z{u*MjI<(t}P^1^#=!0_)@j&>OgbG*Klla8+@Jp#)SDMe)80_e`dfPW|_lLS$+x$LX z_*B~4F1NSPDk`lgDt&QJy5;s3S%pOv-jeXq^bIlLtC>%^U0vbFtgWs&K3{dWKiC?w YboKaXm*wxYHf?JSwskSkCC`ZKKV|v&(*OVf delta 2628 zcmYk+Urd#C9LMqRgCPGT4Lk^$_#6-g1U#GrC>Tnni7AO-q=to-*-@}GFqr707p51@ z+L)~7T19_Wc42k8C@#p0wv5?@vzDtC%v`zFSgdsGhI)VC!T9Zb&+GX;=XrjAzQ5n^ zd{B30z4vo^{8^(MChjFJ&oFx(dlLDg{F!Vv3&-#t9LG$|PBF{H5bF0P-&Rbc-i`@) z1Pky4X5e{D#X+2H=GhPzdf^Am!kd_c4o}U)6wJq5)N^$h#Ac)c>+%SnA zvr*LZHg|F_B%|tCs7wS=16+z~FO0lmH5i9mkdJNUi&eI$$AxCng=*-i|HF%zK>aML zp>wD;f6uRfiZ1mpP@8rHwF%SMfo+ai1?u^JcA!%K5iY{qCi*aOxl%mC8k^ zjzbv1O4PaEhinTwiS%WCs2O~SYIp#ZfonJ)uVX2WquwuJU9=hNP?>B)mcp}RTvT!6 z4Dzg9LLIvi)XWkXei*~3&9eu)u@|*B(r8`3yQq$u_);bg`1YX&JcxS!D(aN|ip4tr z2@F^Nd|}j!n^7}(fva^VQ4f2xCaXoU&I#3P2g0yWHP!k$LW$rpE<$s|v z=a9CQI{$OH&?ec0Td)W!ymhHWpwlejdm+)CoJj_1Af>1j?m#urj@nE;ScY$42(O?r5=W!z zFb8!Ei&1-|9QFRHAol4TMQxflQ7QZqwOPMI4R8dNxj#^AtkG!m z22dT%N4=MinpmY@UyT}2L#{XZ;5KgP-0nto5cMDIz&PqBQ8Pb{8u>ZY^XE|weT?ep zbJUE7P|scS{S7sM+o%csi#3?%QPW!QLI<_J9L+nWgDZ7(=+2$VC8?iQe{9;6mqj4Y7^jl-m7-mP_RU zLQC09==5jhBst~b($S3v@oy00a zC63Vgt2{+KOlU*0+!JLP->V7jjXK?-|A~#YT@}gphOOI++|){&%`6O1~sQ@Q=lfBP=m+W-In diff --git a/locale/pt-br/LC_MESSAGES/rcgcdw.po b/locale/pt-br/LC_MESSAGES/rcgcdw.po index 18537b2..57c4cbe 100644 --- a/locale/pt-br/LC_MESSAGES/rcgcdw.po +++ b/locale/pt-br/LC_MESSAGES/rcgcdw.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-03 11:33+0200\n" -"PO-Revision-Date: 2019-05-03 11:37+0200\n" +"POT-Creation-Date: 2019-05-20 17:17+0200\n" +"PO-Revision-Date: 2019-05-21 01:24+0200\n" "Last-Translator: Frisk \n" "Language-Team: \n" "Language: pt_BR\n" @@ -18,67 +18,67 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 2.2.1\n" -#: rcgcdw.py:177 +#: rcgcdw.py:184 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" "{edit_size})" msgstr "" -#: rcgcdw.py:179 +#: rcgcdw.py:186 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" "{edit_size})" msgstr "" -#: rcgcdw.py:183 +#: rcgcdw.py:190 #, python-brace-format msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" msgstr "" -#: rcgcdw.py:191 +#: rcgcdw.py:198 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" "{comment}" msgstr "" -#: rcgcdw.py:195 +#: rcgcdw.py:202 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "" -#: rcgcdw.py:200 +#: rcgcdw.py:207 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" "({page_link}){comment}" msgstr "" -#: rcgcdw.py:205 rcgcdw.py:211 +#: rcgcdw.py:212 rcgcdw.py:218 msgid "without making a redirect" msgstr "" -#: rcgcdw.py:205 rcgcdw.py:212 +#: rcgcdw.py:212 rcgcdw.py:219 msgid "with a redirect" msgstr "" -#: rcgcdw.py:206 +#: rcgcdw.py:213 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" "({target_url}) {made_a_redirect}{comment}" msgstr "" -#: rcgcdw.py:213 +#: rcgcdw.py:220 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " "[{target}]({target_url}) {made_a_redirect}{comment}" msgstr "" -#: rcgcdw.py:219 +#: rcgcdw.py:226 #, fuzzy, python-brace-format #| msgid "Moved protection settings from {redirect}{article} to {title}" msgid "" @@ -86,17 +86,17 @@ msgid "" "* to [{target}]({target_url}){comment}" msgstr "Configurações de proteção movidos de {redirect}{article} para {title}" -#: rcgcdw.py:231 rcgcdw.py:598 +#: rcgcdw.py:238 rcgcdw.py:637 msgid "infinity and beyond" msgstr "infinito e além" -#: rcgcdw.py:246 +#: rcgcdw.py:253 #, python-brace-format msgid "" "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}" msgstr "" -#: rcgcdw.py:251 +#: rcgcdw.py:258 #, fuzzy, python-brace-format #| msgid "Changed block settings for {blocked_user}" msgid "" @@ -104,26 +104,26 @@ msgid "" "({user_url}){comment}" msgstr "Configurações de bloqueio alteradas para {blocked_user}" -#: rcgcdw.py:256 +#: rcgcdw.py:263 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" msgstr "" -#: rcgcdw.py:260 +#: rcgcdw.py:267 #, fuzzy, python-brace-format #| msgid "Left a comment on {target}'s profile" msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" msgstr "Deixou um comentário no perfil de {target}" -#: rcgcdw.py:260 +#: rcgcdw.py:267 #, fuzzy #| msgid "Edited their own profile" msgid "their own profile" msgstr "Editou seu próprio perfil" -#: rcgcdw.py:265 +#: rcgcdw.py:272 #, fuzzy, python-brace-format #| msgid "Replied to a comment on {target}'s profile" msgid "" @@ -131,127 +131,127 @@ msgid "" "profile" msgstr "Respondeu a um comentário no perfil de {target}" -#: rcgcdw.py:268 rcgcdw.py:276 rcgcdw.py:283 +#: rcgcdw.py:275 rcgcdw.py:283 rcgcdw.py:287 msgid "their own" msgstr "" -#: rcgcdw.py:273 +#: rcgcdw.py:280 #, fuzzy, python-brace-format #| msgid "Edited a comment on {target}'s profile" msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" msgstr "Editou um comentário no perfil de {target}" -#: rcgcdw.py:281 +#: rcgcdw.py:285 #, fuzzy, python-brace-format #| msgid "Deleted a comment on {target}'s profile" msgid "[{author}]({author_url}) deleted a comment on {target} profile" msgstr "Excluiu um comentário no perfil de {target}" -#: rcgcdw.py:289 rcgcdw.py:648 +#: rcgcdw.py:293 rcgcdw.py:684 msgid "Location" msgstr "Localização" -#: rcgcdw.py:291 rcgcdw.py:650 +#: rcgcdw.py:295 rcgcdw.py:686 msgid "About me" msgstr "Sobre mim" -#: rcgcdw.py:293 rcgcdw.py:652 +#: rcgcdw.py:297 rcgcdw.py:688 msgid "Google link" msgstr "Link do Google" -#: rcgcdw.py:295 rcgcdw.py:654 +#: rcgcdw.py:299 rcgcdw.py:690 msgid "Facebook link" msgstr "Facebook link" -#: rcgcdw.py:297 rcgcdw.py:656 +#: rcgcdw.py:301 rcgcdw.py:692 msgid "Twitter link" msgstr "Link do Twitter" -#: rcgcdw.py:299 rcgcdw.py:658 +#: rcgcdw.py:303 rcgcdw.py:694 msgid "Reddit link" msgstr "Link do Reddit" -#: rcgcdw.py:301 rcgcdw.py:660 +#: rcgcdw.py:305 rcgcdw.py:696 msgid "Twitch link" msgstr "Link do Twitch" -#: rcgcdw.py:303 rcgcdw.py:662 +#: rcgcdw.py:307 rcgcdw.py:698 msgid "PSN link" msgstr "Link do PSN" -#: rcgcdw.py:305 rcgcdw.py:664 +#: rcgcdw.py:309 rcgcdw.py:700 msgid "VK link" msgstr "Link do VK" -#: rcgcdw.py:307 rcgcdw.py:666 +#: rcgcdw.py:311 rcgcdw.py:702 msgid "XVL link" msgstr "Link do XVL" -#: rcgcdw.py:309 rcgcdw.py:668 +#: rcgcdw.py:313 rcgcdw.py:704 msgid "Steam link" msgstr "Link do Steam" -#: rcgcdw.py:311 rcgcdw.py:670 +#: rcgcdw.py:315 rcgcdw.py:706 msgid "Discord handle" msgstr "" -#: rcgcdw.py:313 +#: rcgcdw.py:317 #, fuzzy #| msgid "Unknown" msgid "unknown" msgstr "Desconhecido" -#: rcgcdw.py:314 +#: rcgcdw.py:318 #, python-brace-format msgid "[{target}]({target_url})'s" msgstr "" -#: rcgcdw.py:314 +#: rcgcdw.py:318 #, python-brace-format msgid "[their own]({target_url})" msgstr "" -#: rcgcdw.py:315 +#: rcgcdw.py:319 #, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*" msgstr "" -#: rcgcdw.py:329 rcgcdw.py:331 rcgcdw.py:701 rcgcdw.py:703 +#: rcgcdw.py:333 rcgcdw.py:335 rcgcdw.py:736 rcgcdw.py:738 msgid "none" msgstr "nenhum" -#: rcgcdw.py:337 rcgcdw.py:688 +#: rcgcdw.py:341 rcgcdw.py:723 msgid "System" msgstr "Sistema" -#: rcgcdw.py:343 +#: rcgcdw.py:347 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " "following settings: {settings}{comment}" msgstr "" -#: rcgcdw.py:345 rcgcdw.py:354 rcgcdw.py:712 rcgcdw.py:719 +#: rcgcdw.py:349 rcgcdw.py:358 rcgcdw.py:747 rcgcdw.py:754 msgid " [cascading]" msgstr " [em cascata]" -#: rcgcdw.py:351 +#: rcgcdw.py:355 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" "({article_url}) to: {settings}{comment}" msgstr "" -#: rcgcdw.py:359 +#: rcgcdw.py:363 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" "{comment}" msgstr "" -#: rcgcdw.py:364 +#: rcgcdw.py:368 #, fuzzy, python-brace-format #| msgid "Changed visibility of revision on page {article} " #| msgid_plural "Changed visibility of {amount} revisions on page {article} " @@ -264,7 +264,7 @@ msgid_plural "" msgstr[0] "Visibilidade alterada da revisão na página {article} " msgstr[1] "Visibilidade alterada de {amount} revisões na página {article} " -#: rcgcdw.py:370 +#: rcgcdw.py:374 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -275,78 +275,78 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:376 +#: rcgcdw.py:380 #, python-brace-format msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" -#: rcgcdw.py:378 +#: rcgcdw.py:382 #, fuzzy, python-brace-format #| msgid "Changed visibility of log events" msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "Visibilidade alterada de eventos de registros" -#: rcgcdw.py:380 +#: rcgcdw.py:384 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" msgstr "" -#: rcgcdw.py:383 +#: rcgcdw.py:387 #, fuzzy, python-brace-format #| msgid "Edited abuse filter number {number}" msgid "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" msgstr "Número de filtro de abuso editado {number}" -#: rcgcdw.py:386 +#: rcgcdw.py:390 #, fuzzy, python-brace-format #| msgid "Created abuse filter number {number}" msgid "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" msgstr "Criado filtro de abuso número {number}" -#: rcgcdw.py:392 +#: rcgcdw.py:396 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" "({article_url}) into [{dest}]({dest_url}){comment}" msgstr "" -#: rcgcdw.py:396 +#: rcgcdw.py:400 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" "({table_url}) pointing to {website} with {prefix} prefix" msgstr "" -#: rcgcdw.py:402 +#: rcgcdw.py:406 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " "pointing to {website} with {prefix} prefix" msgstr "" -#: rcgcdw.py:408 +#: rcgcdw.py:412 #, fuzzy, python-brace-format #| msgid "Deleted an entry in interwiki table" msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" msgstr "Excluiu uma entrada na tabela interwiki" -#: rcgcdw.py:412 +#: rcgcdw.py:416 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "" -#: rcgcdw.py:417 +#: rcgcdw.py:421 #, python-brace-format msgid "" "[{author}]({author_url}) edited the sprite for [{article}]({article_url})" msgstr "" -#: rcgcdw.py:421 +#: rcgcdw.py:425 #, fuzzy, python-brace-format #| msgid "Created the sprite sheet for {article}" msgid "" @@ -354,72 +354,84 @@ msgid "" "({article_url})" msgstr "Criou a folha de sprites para {article}" -#: rcgcdw.py:425 +#: rcgcdw.py:429 #, python-brace-format msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" -#: rcgcdw.py:428 +#: rcgcdw.py:432 #, python-brace-format msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:432 +#: rcgcdw.py:436 #, python-brace-format msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:436 +#: rcgcdw.py:440 #, python-brace-format msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:439 +#: rcgcdw.py:443 #, python-brace-format msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:442 +#: rcgcdw.py:445 msgid "An action has been hidden by administration." msgstr "" -#: rcgcdw.py:450 rcgcdw.py:704 +#: rcgcdw.py:454 rcgcdw.py:739 msgid "No description provided" msgstr "Nenhuma descrição fornecida" -#: rcgcdw.py:500 +#: rcgcdw.py:504 msgid "(N!) " msgstr "(N!) " -#: rcgcdw.py:501 +#: rcgcdw.py:505 msgid "m " msgstr "m " -#: rcgcdw.py:525 rcgcdw.py:560 +#: rcgcdw.py:524 rcgcdw.py:529 +msgid "__Only whitespace__" +msgstr "__Apenas espaço em branco__" + +#: rcgcdw.py:535 +msgid "Removed" +msgstr "Removido" + +#: rcgcdw.py:538 +msgid "Added" +msgstr "Adicionado" + +#: rcgcdw.py:564 rcgcdw.py:599 msgid "Options" msgstr "Opções" -#: rcgcdw.py:525 +#: rcgcdw.py:564 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "([visualização]({link}) | [desfazer]({undolink}))" -#: rcgcdw.py:527 +#: rcgcdw.py:566 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "Carregou uma nova versão de {name}" -#: rcgcdw.py:529 +#: rcgcdw.py:568 #, python-brace-format msgid "Uploaded {name}" msgstr "Carregado {name}" -#: rcgcdw.py:545 +#: rcgcdw.py:584 msgid "**No license!**" msgstr "* * Sem licença!* *" -#: rcgcdw.py:557 +#: rcgcdw.py:596 msgid "" "\n" "License: {}" @@ -427,470 +439,476 @@ msgstr "" "\n" "Licença: {}" -#: rcgcdw.py:560 +#: rcgcdw.py:599 #, python-brace-format msgid "([preview]({link}))" msgstr "([visualização]({link}))" -#: rcgcdw.py:565 +#: rcgcdw.py:604 #, python-brace-format msgid "Deleted page {article}" msgstr "Página {article} excluída" -#: rcgcdw.py:569 +#: rcgcdw.py:608 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "Redirecionado {article} excluído por sobrescrevendo" -#: rcgcdw.py:574 +#: rcgcdw.py:613 msgid "No redirect has been made" msgstr "Nenhum redirecionamento foi feito" -#: rcgcdw.py:575 +#: rcgcdw.py:614 msgid "A redirect has been made" msgstr "Foi feito um redirecionamento" -#: rcgcdw.py:576 +#: rcgcdw.py:615 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "Movido {redirect}{article} para {target}" -#: rcgcdw.py:580 +#: rcgcdw.py:619 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "Movido {redirect}{article} para {title} ao redirecionar" -#: rcgcdw.py:585 +#: rcgcdw.py:624 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "Configurações de proteção movidos de {redirect}{article} para {title}" -#: rcgcdw.py:608 +#: rcgcdw.py:647 #, python-brace-format msgid "Blocked {blocked_user} for {time}" msgstr "Bloqueado {blocked_user} por {time}" -#: rcgcdw.py:614 +#: rcgcdw.py:653 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "Configurações de bloqueio alteradas para {blocked_user}" -#: rcgcdw.py:620 +#: rcgcdw.py:659 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "Desbloqueado {blocked_user}" -#: rcgcdw.py:625 +#: rcgcdw.py:663 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "Deixou um comentário no perfil de {target}" -#: rcgcdw.py:627 +#: rcgcdw.py:665 msgid "Left a comment on their own profile" msgstr "Deixou um comentário em seu próprio perfil" -#: rcgcdw.py:632 +#: rcgcdw.py:669 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "Respondeu a um comentário no perfil de {target}" -#: rcgcdw.py:634 +#: rcgcdw.py:671 msgid "Replied to a comment on their own profile" msgstr "Respondeu a um comentário em seu próprio perfil" -#: rcgcdw.py:639 +#: rcgcdw.py:675 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "Editou um comentário no perfil de {target}" -#: rcgcdw.py:641 +#: rcgcdw.py:677 msgid "Edited a comment on their own profile" msgstr "Editou um comentário em seu próprio perfil" -#: rcgcdw.py:672 rcgcdw.py:811 +#: rcgcdw.py:708 rcgcdw.py:846 msgid "Unknown" msgstr "Desconhecido" -#: rcgcdw.py:673 +#: rcgcdw.py:709 #, python-brace-format msgid "Edited {target}'s profile" msgstr "Editado perfil {target}" -#: rcgcdw.py:673 +#: rcgcdw.py:709 msgid "Edited their own profile" msgstr "Editou seu próprio perfil" -#: rcgcdw.py:675 +#: rcgcdw.py:711 #, python-brace-format msgid "Cleared the {field} field" msgstr "" -#: rcgcdw.py:677 +#: rcgcdw.py:713 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "campo {field} alterado para: {desc}" -#: rcgcdw.py:682 +#: rcgcdw.py:717 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "Excluiu um comentário no perfil de {target}" -#: rcgcdw.py:686 +#: rcgcdw.py:721 #, python-brace-format msgid "Changed group membership for {target}" msgstr "Alterado grupo do membro de {target}" -#: rcgcdw.py:690 +#: rcgcdw.py:725 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "{target} recebeu um promovido para um novo grupo de usuários" -#: rcgcdw.py:705 +#: rcgcdw.py:740 #, python-brace-format msgid "Groups changed from {old_groups} to {new_groups}{reason}" msgstr "Grupos alterados de {old_groups} para {new_groups} {reason}" -#: rcgcdw.py:710 +#: rcgcdw.py:745 #, python-brace-format msgid "Protected {target}" msgstr "Protegido {target}" -#: rcgcdw.py:717 +#: rcgcdw.py:752 #, python-brace-format msgid "Changed protection level for {article}" msgstr "Nível de proteção alterado para {article}" -#: rcgcdw.py:724 +#: rcgcdw.py:759 #, python-brace-format msgid "Removed protection from {article}" msgstr "Removida a proteção de {article}" -#: rcgcdw.py:729 +#: rcgcdw.py:764 #, python-brace-format msgid "Changed visibility of revision on page {article} " msgid_plural "Changed visibility of {amount} revisions on page {article} " msgstr[0] "Visibilidade alterada da revisão na página {article} " msgstr[1] "Visibilidade alterada de {amount} revisões na página {article} " -#: rcgcdw.py:735 +#: rcgcdw.py:770 #, 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] "{article} importado com {count} revisões" -#: rcgcdw.py:741 +#: rcgcdw.py:776 #, python-brace-format msgid "Restored {article}" msgstr "Página {article} excluída" -#: rcgcdw.py:744 +#: rcgcdw.py:779 msgid "Changed visibility of log events" msgstr "Visibilidade alterada de eventos de registros" -#: rcgcdw.py:747 +#: rcgcdw.py:782 msgid "Imported interwiki" msgstr "Interwiki importado" -#: rcgcdw.py:750 +#: rcgcdw.py:785 #, python-brace-format msgid "Edited abuse filter number {number}" msgstr "Número de filtro de abuso editado {number}" -#: rcgcdw.py:753 +#: rcgcdw.py:788 #, python-brace-format msgid "Created abuse filter number {number}" msgstr "Criado filtro de abuso número {number}" -#: rcgcdw.py:757 +#: rcgcdw.py:792 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "Históricos de revisão mesclados de {article} em {dest}" -#: rcgcdw.py:761 +#: rcgcdw.py:796 msgid "Added an entry to the interwiki table" msgstr "Adicionado uma entrada para a tabela interwiki" -#: rcgcdw.py:762 rcgcdw.py:768 +#: rcgcdw.py:797 rcgcdw.py:803 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "Prefixo: {prefix}, site: {website} | {desc}" -#: rcgcdw.py:767 +#: rcgcdw.py:802 msgid "Edited an entry in interwiki table" msgstr "Editou uma entrada na tabela interwiki" -#: rcgcdw.py:773 +#: rcgcdw.py:808 msgid "Deleted an entry in interwiki table" msgstr "Excluiu uma entrada na tabela interwiki" -#: rcgcdw.py:774 +#: rcgcdw.py:809 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "Prefixo: {prefix} | {desc}" -#: rcgcdw.py:778 +#: rcgcdw.py:813 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "Alterou o modelo de conteúdo da página {article}" -#: rcgcdw.py:779 +#: rcgcdw.py:814 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Modelo alterado de {old} para {new}: {reason}" -#: rcgcdw.py:785 +#: rcgcdw.py:820 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Editou o sprite para {article}" -#: rcgcdw.py:789 +#: rcgcdw.py:824 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Criou a folha de sprites para {article}" -#: rcgcdw.py:793 +#: rcgcdw.py:828 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Editou a fatia de {article}" -#: rcgcdw.py:796 +#: rcgcdw.py:831 #, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "Criei uma etiqueta \"{tag}\"" -#: rcgcdw.py:800 +#: rcgcdw.py:835 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "Excluiu uma etiqueta \"{tag}\"" -#: rcgcdw.py:804 +#: rcgcdw.py:839 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "Ativou uma etiqueta \"{tag}\"" -#: rcgcdw.py:807 +#: rcgcdw.py:842 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "Desativou uma etiqueta \"{tag}\"" -#: rcgcdw.py:810 +#: rcgcdw.py:845 msgid "Action has been hidden by administration." msgstr "" -#: rcgcdw.py:837 +#: rcgcdw.py:872 msgid "Tags" msgstr "Etiquetas" -#: rcgcdw.py:843 +#: rcgcdw.py:877 msgid "**Added**: " msgstr "**Adicionado**: " -#: rcgcdw.py:843 +#: rcgcdw.py:877 msgid " and {} more\n" msgstr " e {} mais\n" -#: rcgcdw.py:844 +#: rcgcdw.py:878 msgid "**Removed**: " msgstr "**Removida**: " -#: rcgcdw.py:844 +#: rcgcdw.py:878 msgid " and {} more" msgstr " e {} mais" -#: rcgcdw.py:845 +#: rcgcdw.py:879 msgid "Changed categories" msgstr "Mudanças de categorias" -#: rcgcdw.py:886 +#: rcgcdw.py:920 msgid "~~hidden~~" msgstr "" -#: rcgcdw.py:892 +#: rcgcdw.py:926 msgid "hidden" msgstr "" -#: rcgcdw.py:995 +#: rcgcdw.py:1000 rcgcdw.py:1002 rcgcdw.py:1004 rcgcdw.py:1006 rcgcdw.py:1008 +#: rcgcdw.py:1010 rcgcdw.py:1012 +#, python-brace-format +msgid "{value} (avg. {avg})" +msgstr "" + +#: rcgcdw.py:1053 msgid "Daily overview" msgstr "Visão geral diária" -#: rcgcdw.py:1005 +#: rcgcdw.py:1062 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} açao)" msgstr[1] " ({} ações)" -#: rcgcdw.py:1009 +#: rcgcdw.py:1064 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} editado)" msgstr[1] " ({} edições)" -#: rcgcdw.py:1014 +#: rcgcdw.py:1069 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} ação)" msgstr[1] " UTC ({} ações)" -#: rcgcdw.py:1016 rcgcdw.py:1017 rcgcdw.py:1021 +#: rcgcdw.py:1071 rcgcdw.py:1072 rcgcdw.py:1076 msgid "But nobody came" msgstr "Mas ninguém veio" -#: rcgcdw.py:1024 +#: rcgcdw.py:1080 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Usuário mais ativo" msgstr[1] "Usuários mais ativos" -#: rcgcdw.py:1025 +#: rcgcdw.py:1081 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "Artigo mais editado" msgstr[1] "Artigos mais editados" -#: rcgcdw.py:1026 +#: rcgcdw.py:1082 msgid "Edits made" msgstr "Edições feitas" -#: rcgcdw.py:1026 +#: rcgcdw.py:1082 msgid "New files" msgstr "Novos arquivos" -#: rcgcdw.py:1026 +#: rcgcdw.py:1082 msgid "Admin actions" msgstr "Ações de administração" -#: rcgcdw.py:1027 +#: rcgcdw.py:1083 msgid "Bytes changed" msgstr "Bytes alterados" -#: rcgcdw.py:1027 +#: rcgcdw.py:1083 msgid "New articles" msgstr "Novos artigos" -#: rcgcdw.py:1028 +#: rcgcdw.py:1084 msgid "Unique contributors" msgstr "Contribuidores exclusivos" -#: rcgcdw.py:1029 +#: rcgcdw.py:1085 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Hora mais ativa" msgstr[1] "Horas mais ativas" -#: rcgcdw.py:1030 +#: rcgcdw.py:1086 msgid "Day score" msgstr "Pontuação do dia" -#: rcgcdw.py:1177 +#: rcgcdw.py:1227 #, python-brace-format msgid "Connection to {wiki} seems to be stable now." msgstr "A conexão com {wiki} parece estar estável agora." -#: rcgcdw.py:1178 rcgcdw.py:1289 +#: rcgcdw.py:1228 rcgcdw.py:1339 msgid "Connection status" msgstr "Status da conexão" -#: rcgcdw.py:1288 +#: rcgcdw.py:1338 #, python-brace-format msgid "{wiki} seems to be down or unreachable." msgstr "{wiki} parece estar inativo ou inacessível." -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "director" msgstr "diretor" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "bot" msgstr "robô" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "editor" msgstr "editor" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "directors" msgstr "diretores" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "sysop" msgstr "administrador" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "bureaucrat" msgstr "burocrata" -#: rcgcdw.py:1342 +#: rcgcdw.py:1394 msgid "reviewer" msgstr "revisor" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "autoreview" msgstr "revisão automática" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "autopatrol" msgstr "patrulha automatica" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "wiki_guardian" msgstr "guardião_wiki" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "second" msgid_plural "seconds" msgstr[0] "segundo" msgstr[1] "segundos" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "minute" msgid_plural "minutes" msgstr[0] "minuto" msgstr[1] "minutos" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "hour" msgid_plural "hours" msgstr[0] "hora" msgstr[1] "horas" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "day" msgid_plural "days" msgstr[0] "dia" msgstr[1] "dias" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "week" msgid_plural "weeks" msgstr[0] "semana" msgstr[1] "semanas" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "month" msgid_plural "months" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "year" msgid_plural "years" msgstr[0] "ano" msgstr[1] "anos" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "millennium" msgid_plural "millennia" msgstr[0] "milénio" msgstr[1] "milénios" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "decade" msgid_plural "decades" msgstr[0] "década" msgstr[1] "décadas" -#: rcgcdw.py:1343 +#: rcgcdw.py:1395 msgid "century" msgid_plural "centuries" msgstr[0] "século" diff --git a/locale/ru/LC_MESSAGES/misc.mo b/locale/ru/LC_MESSAGES/misc.mo new file mode 100644 index 0000000000000000000000000000000000000000..63f2da1a1f2dda8f1f936afc6547ec91cbe3e332 GIT binary patch literal 462 zcmZ9IQA@)x5XUF_)JLCvI6;R)Gm|*6>&yh_CW8&jsN!o}W36mSNm5bR$I!3mXYsnC z0}uY>F8BN2g?#Vsd^Iq(P5#11mRQegGX|!w6fA08$oPTntR}F-e$o>Iviiw7Iim>7p0X8GBS4Q zBGARUbmFWBbt;bZA)`VtXf~lr>AqkLu7CpKSoa10ZC#2^m98E1l5tqAYD=GWT4-Tt Q;jJFNqW*~pY#B6u02a7;p8x;= literal 0 HcmV?d00001 diff --git a/locale/ru/LC_MESSAGES/misc.po b/locale/ru/LC_MESSAGES/misc.po new file mode 100644 index 0000000..c959c33 --- /dev/null +++ b/locale/ru/LC_MESSAGES/misc.po @@ -0,0 +1,25 @@ +# 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: 2019-05-20 17:18+0200\n" +"PO-Revision-Date: 2019-05-21 01:19+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.2.1\n" +"Last-Translator: \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" +"Language: ru\n" + +#: misc.py:76 +msgid "" +"\n" +"__And more__" +msgstr "" From fa1cf53a7642f94b258e9870a741e4e81733f5cf Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 21 May 2019 12:11:59 +0200 Subject: [PATCH 17/23] Added basic config builder as per #69 --- configbuilder.py | 154 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 configbuilder.py diff --git a/configbuilder.py b/configbuilder.py new file mode 100644 index 0000000..96a18f1 --- /dev/null +++ b/configbuilder.py @@ -0,0 +1,154 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Recent changes Gamepedia compatible Discord webhook is a project for using a webhook as recent changes page from MediaWiki. +# Copyright (C) 2018 Frisk + +# This program 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, +# 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 . + +import json, time, sys, re + +try: + import requests +except ModuleNotFoundError: + print("The requests module couldn't be found. Please install requests library.") + sys.exit(0) + +if "--help" in sys.argv: + print("""Usage: python configbuilder.py [OPTIONS] + + Options: + --basic - Prepares only the most basic settings necessary to run the script, leaves a lot of customization options on default + --advanced - Prepares advanced settings with great range of customization + --annoying - Asks for every single value available""") + sys.exit(0) + +def default_or_custom(answer, default): + if answer == "": + return default + else: + return answer + +def yes_no(answer): + if answer.lower() == "y": + return True + if answer.lower() == "n": + return False + +print("Welcome in RcGcDw config builder! 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: + 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")): + settings = requests.get("https://gitlab.com/piotrex43/RcGcDw/raw/master/settings.json.example").json() + +def basic(): + while True: + if set_cooldown(): + break + while True: + if set_wiki(): + break + while True: + if set_lang(): + break + while True: + if set_webhook(): + break + while True: + if set_wikiname(): + break + while True: + if set_displaymode(): + break + with open("settings.json", "w") as settings_file: + settings_file.write(json.dumps(settings, indent=4)) + print("Responses has been saved! Your settings.json should be now valid and bot ready to run.") + +def set_cooldown(): + option = default_or_custom(input("Interval for fetching recent changes in seconds (min. 10, default 30).\n"), 30) + try: + option = int(option) + if option < 10: + print("Please give a value higher than 9!") + return False + else: + settings["cooldown"] = option + return True + except ValueError: + print("Please give a valid number.") + return False + +def set_wiki(): + option = input("Please give the wiki you want to be monitored. (for example 'minecraft' or 'terraria-pl' are valid options)\n") + if option.startswith("http"): + regex = re.search(r"http(?:s|):\/\/(.*?)\.gamepedia.com", option) + if regex.group(1): + option = regex.group(1) + wiki_request = requests.get("https://{}.gamepedia.com".format(option), timeout=10, allow_redirects=False) + if wiki_request.status_code == 404 or wiki_request.status_code == 302: + print("Wiki at https://{}.gamepedia.com does not exist, are you sure you have entered the wiki correctly?".format(option)) + return False + else: + settings["wiki"] = option + return True + +def set_lang(): + option = default_or_custom(input( + "Please provide a language code for translation of the script. Translations available: en, de, ru, pt-br, fr. (default en)\n"), "en") + if option in ["en", "de", "ru", "pt-br", "fr"]: + settings["lang"] = option + return True + return False + +def set_webhook(): + option = input( + "Webhook URL is required. You can get it on Discord by following instructions on this page: https://support.discordapp.com/hc/en-us/articles/228383668-Intro-to-Webhooks\n") + if option.startswith("https://discordapp.com/api/webhooks/"): + test_webhook = requests.get(option) + if test_webhook.status_code != 200: + print("The webhook URL does not seem right. Reason: {}".format(test_webhook.json()["message"])) + return False + else: + settings["webhookURL"] = option + return True + else: + print("The webhook URL should start with https://discordapp.com/api/webhooks/, are you sure it's the right URL?") + return False + +def set_wikiname(): + option = input("Please provide any wiki name for the wiki (can be whatever, but should be a full name of the wiki, for example \"Minecraft Wiki\")\n") # TODO Fetch the wiki yourself using api by default + settings["wikiname"] = option + return True + +def set_displaymode(): + option = default_or_custom(input( + "Please choose the display mode for the feed. More on how they look like on https://gitlab.com/piotrex43/RcGcDw/wikis/Presentation. Valid values: compact or embed. Default: embed\n"), "embed").lower() + if option in ["embed", "compact"]: + settings["appearance"]["mode"] = option + return True + print("Invalid mode selected!") + return False + + +try: + basic() +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 From f6ad179294798f1eb6266d6195dcd2d5bbaba945 Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 21 May 2019 19:42:02 +0200 Subject: [PATCH 18/23] More progress on configbuilder and changed default in settings file --- configbuilder.py | 94 +++++++++++++++++++++++++++++++++++++++---- settings.json.example | 2 +- 2 files changed, 88 insertions(+), 8 deletions(-) diff --git a/configbuilder.py b/configbuilder.py index 96a18f1..848f3c4 100644 --- a/configbuilder.py +++ b/configbuilder.py @@ -22,7 +22,7 @@ import json, time, sys, re try: import requests except ModuleNotFoundError: - print("The requests module couldn't be found. Please install requests library.") + print("The requests module couldn't be found. Please install requests library using pip install requests.") sys.exit(0) if "--help" in sys.argv: @@ -43,8 +43,10 @@ def default_or_custom(answer, default): def yes_no(answer): if answer.lower() == "y": return True - if answer.lower() == "n": + elif answer.lower() == "n": return False + else: + raise ValueError print("Welcome in RcGcDw config builder! 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!") @@ -74,9 +76,9 @@ def basic(): while True: if set_displaymode(): break - with open("settings.json", "w") as settings_file: - settings_file.write(json.dumps(settings, indent=4)) - print("Responses has been saved! Your settings.json should be now valid and bot ready to run.") + +def advanced(): + def set_cooldown(): option = default_or_custom(input("Interval for fetching recent changes in seconds (min. 10, default 30).\n"), 30) @@ -108,8 +110,8 @@ def set_wiki(): def set_lang(): option = default_or_custom(input( - "Please provide a language code for translation of the script. Translations available: en, de, ru, pt-br, fr. (default en)\n"), "en") - if option in ["en", "de", "ru", "pt-br", "fr"]: + "Please provide a language code for translation of the script. Translations available: en, de, ru, pt-br, fr, pl. (default en)\n"), "en") + if option in ["en", "de", "ru", "pt-br", "fr", "pl"]: settings["lang"] = option return True return False @@ -143,9 +145,87 @@ def set_displaymode(): print("Invalid mode selected!") return False +def set_limit(): + option = default_or_custom(input("Limit for amount of changes fetched every {} seconds. (default: 10, minimum: 1, the less active wiki is the lower the value should be)\n".format(settings["cooldown"])), 10) + try: + option = int(option) + if option < 2: + print("Please give a value higher than 1!") + return False + else: + settings["limit"] = option + return True + except ValueError: + print("Please give a valid number.") + return False + +def set_refetch_limit(): + option = default_or_custom(input("Limit for amount of changes fetched every time the script starts. (default: 28, minimum: {})\n".format(settings["limit"])), 28) + try: + option = int(option) + if option < settings["limit"]: + print("Please give a value higher than {}!".format(settings["limit"])) + return False + else: + settings["limit"] = option + return True + except ValueError: + print("Please give a valid number.") + return False + +def set_updown_messages(): + try: + option = yes_no(default_or_custom(input("Should the script send messages when the wiki becomes unavailable? (Y/n)"), "y")) + settings["show_updown_messages"] = option + return True + except ValueError: + print("Response not valid, please use y (yes) or n (no)") + return False + +def set_downup_avatars(): + option = default_or_custom(input("Provide a link for a custom webhook avatar when the wiki goes DOWN. (default: no avatar)"), "") #TODO Add a check for the image + settings["avatars"]["connection_failed"] = option + option = default_or_custom( + input("Provide a link for a custom webhook avatar when the connection to the wiki is RESTORED. (default: no avatar)"), + "") # TODO Add a check for the image + settings["avatars"]["connection_failed"] = option + return True + +def set_ignored_events(): + option = default_or_custom( + input("Provide a list of entry types that are supposed to be ignored. Separate them using commas. Example: external, edit, upload/overwrite. (default: external)"), "external") # TODO Add a check for the image + entry_types = [] + for etype in option.split(","): + entry_types.append(etype.strip()) + settings["ignored"] = entry_types + +def set_overview(): + try: + option = yes_no(default_or_custom(input("Should the script send daily overviews of the actions done on the wiki for past 24 hours? (y/N)"), "n")) + settings["overview"] = option + return True + except ValueError: + print("Response not valid, please use y (yes) or n (no)") + return False + +def set_overview_time(): + try: + option = default_or_custom(input("At what time should the daily overviews be sent? (script uses local machine time, the format of the time should be HH:MM, default is 00:00)"), "00:00") + re.match(r"$\d{2}:\d{2}^") + settings["overview"] = option + return True + except ValueError: + print("Response not valid, please use y (yes) or n (no)") + return False try: basic() + with open("settings.json", "w") 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...") + advanced() + print("Responses has been saved! Your settings.json should be now valid and bot ready to run.") except KeyboardInterrupt: if not yes_no(default_or_custom(input("\nSave the config before exiting? (y/N)"),"n")): sys.exit(0) diff --git a/settings.json.example b/settings.json.example index f6221d5..9e1270d 100644 --- a/settings.json.example +++ b/settings.json.example @@ -5,7 +5,7 @@ "header": { "user-agent": "RcGcDw/{version}" }, - "limit": 11, + "limit": 10, "webhookURL": "https://discordapp.com/api/webhooks/111111111111111111/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "limitrefetch": 28, "wikiname": "Minecraft Wiki", From 26f3475f07d4ac562e1779ccfaaab9224163b84d Mon Sep 17 00:00:00 2001 From: Frisk Date: Tue, 21 May 2019 23:45:14 +0200 Subject: [PATCH 19/23] Added #83 --- rcgcdw.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rcgcdw.py b/rcgcdw.py index ff9bc69..3ad178d 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -653,6 +653,8 @@ def embed_formatter(action, change, parsed_comment, categories): field = _("Steam link") elif change["logparams"]['4:section'] == "profile-link-discord": field = _("Discord handle") + elif change["logparams"]['4:section'] == "profile-link-battlenet": + field = _("Battle.net handle") else: field = _("Unknown") embed["title"] = _("Edited {target}'s profile").format(target=change["title"].split(':')[1]) if change["user"] != change["title"].split(':')[1] else _("Edited their own profile") From 15cd9a2dec16d4ae04ff3ebf8205c69a778e86b7 Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 22 May 2019 00:02:14 +0200 Subject: [PATCH 20/23] Updated translations (pl, de) --- locale/de/LC_MESSAGES/rcgcdw.mo | Bin 18195 -> 18327 bytes locale/de/LC_MESSAGES/rcgcdw.po | 360 ++++++++++++++++---------------- locale/pl/LC_MESSAGES/rcgcdw.mo | Bin 18986 -> 19061 bytes locale/pl/LC_MESSAGES/rcgcdw.po | 358 +++++++++++++++---------------- rcgcdw.pot | 356 +++++++++++++++---------------- 5 files changed, 543 insertions(+), 531 deletions(-) diff --git a/locale/de/LC_MESSAGES/rcgcdw.mo b/locale/de/LC_MESSAGES/rcgcdw.mo index f57d066fac86ee6aaa3af0c0b3984dd85f1fcfbb..878254ca8f65ba5837d9dbd841a242b14238cdee 100644 GIT binary patch delta 3968 zcmZA332;qU9LMqVY#|8}YZAmGmLw!12_-~c5riNiwpt^eHF-rMwxkbLs%oh%wN~v> zRAo#{&9sc7bYZ4rY8lm;YOB-QI!x6v{r>K|Pdh!6|NESC-@E6Wd(Qt{)~V>3L6+-kl> z{q6@;e}7;dY{-vWGQNqW(uxaN*bZl-6Zc{Pp2KkL$X!%T7HYupSRYqm3*3$B=RC4V z=04UyJ+|%-#MamXbzde%F}@j3MN7H_HN&l_4$h*U^fIdBrx=A%^?Xa;8zX5?#iqCn zwSwiS0Z(BdUPrCKFQ}z|h@H^EEWAw8q)-`z{ZRvKM?KMLw6+2hX+OX=*pk_5@3U=- zPPxM1y7**IT^ zpWsAH#-?nrewc%WxD}^iCip2oziW;aV>evlL<<4j% zElh#^{Ze!?zF9-1Emoi=auXTTJVbTWB!x4CeYGBrVJ;)O|-# z|Aw4IP2`6C{T<}3YeG58y51aF*OgNp9R;C;3N!_Tenul7k#i*6o*N*k)WSDDQkWWxAjz$T_yoB)> zj1!SRQ^-dL+=c4sDstk?bK55Eef@MrZP6&y@8)4m+-7?KgJ>W3Qpu!p2DK7(nbu&8 zLHabMr~wb5lItgAHO=qHqL^^j(TTlLPd*uwaRutwokG&YROe!UOhP@-LR;@jDthwG zsDVDk>UiJwZ`ARu%$MpY66;_F>Ip`nem@zN3p0>0%{uIa=TJG}=;%x4NYt^6K_=og z2~^Zks_%lyK;9K*D28AOYVTHH7?xou9!9OmDXfL(Q4_d=eefxc#dP+uFYd-XyoW`Y z!|bxH^H1d}7aDaoW;i~=-Z(JDw`65FnD#AHN1b{9x^OY}!Y{BN26y${HykI?-j1(e z^;Ba?QE<}dl70& zmY}v|H7W>b{$(E&DB<_1Cd@%!NuAzi}l`_F-}UUs_Hlku(NM-Evpk}3E)@fNX) zXin@Viiw5i?E1G?XJ{#0LbaV%{Y*zEwCa<_&_J zv0k;w7(=Lp6Eg^%jtzviK*d8evTFZ+=whqda2qj#;Dnl23FSr+5l^%sRFpT$r2;knS6bWcgE-!%!pzlMj2D55Sgi6|i^6Qc>0cYK(99AwwMeTiOr{w7pr6FR^C5=&(l z(Un+1j3X8jqX-ufLhL0r69)*rp4Sj-36lcUO!L=@3@8I5&TmyVMz-TRbV=IiJtcn6>MpO9I+E6O&Ss zJFg9kX%>*^Oh`ycXkX!qNvmAD`-^_!GN*W^RlL@AOhmo;{%(pV<-h3WTCYz30LAK> AAOHXW delta 3820 zcmYk;c~DhV0LSseP9UftO1M2x0TBg6KuH7_6a@^$-4vJ11;Nxr#pQ{nrlJzKri5GW z;TTRCGg_wQ)QqOn#3(uHA6a9gjZ=+gF7^Grdv!YF?|sg_@7;UOJVpZf7Z*%N3?6WohoSc@(3Ta3Wl_V*r5t=~1n0M55XZe_Y)G$vp$ zjzfPeM*cZXDWAGvJ%-{A^u?3d8SAkX{*1ceQ|yH9&8+L9F_zm+^ z?8hLygu4DVM$*3VZf;B*C%U2oCtwjS$5-(l^3Qm4wHgY=5X{7mI36Q$1u_`s5Wa$+ zqOSiEqp%Tmojb$O0YkAR?VH|I)Wdw#4VIyLSdO~!C#VaqqlWw$wnIk?W7=anYUBz~ z4K6~>UL|T|t5HLK413~dNMFnYbPlKDLATVvDAW^`qNbn*yW?T(fsHx{BN&O_a2A*y4mLK%PRrh*Sf)f_=Ja0VUtHEJ>a zVxNDA>gaRS6Zr6kT^DZpIZg?V@v z(=oNJWhv@+_1Fg=Vm2nR5JqDej>PLY1mjp3IarDd@FHemn#1bg8r1d9D^yNXX~TH- zz#maR^kahOV?Gw*MVyC;ER@A~5Ov&K}r4K@X0-qpb6OsBIX6nt~|QZi%;#(@~2o3%zl;?O1fJ1ynnQ=#EZo zq5Z#-if*(WwI~jv7E2wfq0{#F=g^DeE2xGVP#wCBKKKW!p?^@@&MVqlJHg0uFdb0e zr=bJ0FqZbsOe$Psw%I>8i{H5Miba3USH$o-#oefFT91sTxrthwo?Wbtw?H)lPri=|({4^8Th{zw`9-& z>@2g{wib26OQ@;2kNTZ|f;9zkwrS|k`E1O=(WnPIfcaSOq{6i(kZ!8Mbo9Xm$Y_~m z$Y7YG=)h~JCx49EuI(7#Ow31?gV~9>cmef5LHtOzM|C(B)lLrjqI0EP*?{avvjugd z6BvYzs3*9Oy5KQt4Y+d`+Ay84Cyqs}g-Z0p6R2%ikLtiV)O{}7$BoD$cA8(QG~PFvT28Qt79f+ea8>?{;-o@#d(3_j%P8^SaVGib{88aEHQ62pk z2V+(r%S!y5_RS3{T7=uuts7j%B93D+*crG3OYu2w!Nq-zc^d=!Sx@G~ksM#ei5S)2 znAdR)>U;xcVC(?vKb<0s;`jnOHT3tWXwIJ5`m&-tI1WZ_r&g#b2}iAgRBVC$?c*`F zlTmX%3w7OG)RZm309=pmxC3>+U73u(esGEtS|sPu3$LIWYCv`H7U~8MP>bj}YHj#2 zFKVa_>iS63?-J30eX%1>K|SDFY=e~;izfy${?Sx!a6%V)F|lqqlrUW{ORJYPYiOr& ze8@gG6F(%&32V^xuCK)Z7fqMe!dy~FRuYvg&Hp5_mMkC}$cv)6(?WcUsB_wmtB49q zz$_yhi5A@fqOyW)CwU}{XmnJLk_luu(TJ+NPt?AtB6G-K(v~C<6<&s}t>il3W0PGO zg_?%_B!QHX<77Qii6Gu&m<}lO$p}(FG#%_f*ZN}0oUT7AMswmt=}$#-{~l>?pVSo1 zu0~WE;sRD$J~F(P<~WD6x8eEx;Xw?QA|K8ARJir5|Zd z(urOsDl8TArmJRsXzT7JQ|xnla5vdSR+A6NF;Y%GB0i*+>?5x6KZu=(wp0z_ePp(h z9;78%M{-CwQQ2(adKaj=n3Rx3q=*C)m13gR{;m$};)#jmFsUG#zL#Z;UF(25NpCWp zEFn#aN_3>+f7uyOM0OPzRLO7OsugnR+)ez&iqVQmPhq4!7#vQ|f9ur+d`> N9y=kdYSN&T{{WI9d`\n" "Language-Team: German\n" "Language: de\n" @@ -16,7 +16,7 @@ msgstr "" "X-Generator: Poedit 2.2.1\n" "X-Loco-Parser: loco_parse_po\n" -#: rcgcdw.py:184 +#: rcgcdw.py:133 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" @@ -25,7 +25,7 @@ msgstr "" "[{author}]({author_url}) bearbeitete [{article}]({edit_link}){comment} " "({sign}{edit_size})" -#: rcgcdw.py:186 +#: rcgcdw.py:135 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" @@ -34,12 +34,12 @@ msgstr "" "[{author}]({author_url}) erstellte [{article}]({edit_link}){comment} ({sign}" "{edit_size})" -#: rcgcdw.py:190 +#: rcgcdw.py:139 #, python-brace-format msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" msgstr "[{author}]({author_url}) lud [{file}]({file_link}) hoch{comment}" -#: rcgcdw.py:198 +#: rcgcdw.py:147 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -48,12 +48,12 @@ msgstr "" "[{author}]({author_url}) lud eine neue Version von [{file}]({file_link}) " "hoch{comment}" -#: rcgcdw.py:202 +#: rcgcdw.py:151 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) löschte [{page}]({page_link}){comment}" -#: rcgcdw.py:207 +#: rcgcdw.py:156 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -62,15 +62,15 @@ msgstr "" "[{author}]({author_url}) löschte die Weiterleitung [{page}]({page_link}) " "durch Überschreiben{comment}" -#: rcgcdw.py:212 rcgcdw.py:218 +#: rcgcdw.py:161 rcgcdw.py:167 msgid "without making a redirect" msgstr "ohne eine Weiterleitung zu erstellen" -#: rcgcdw.py:212 rcgcdw.py:219 +#: rcgcdw.py:161 rcgcdw.py:168 msgid "with a redirect" msgstr "und erstellte eine Weiterleitung" -#: rcgcdw.py:213 +#: rcgcdw.py:162 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" @@ -79,7 +79,7 @@ msgstr "" "[{author}]({author_url}) verschob {redirect}*{article}* nach [{target}]" "({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:220 +#: rcgcdw.py:169 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " @@ -88,7 +88,7 @@ msgstr "" "[{author}]({author_url}) verschob {redirect}*{article}* nach [{target}]" "({target_url}) und überschrieb eine Weiterleitung {made_a_redirect}{comment}" -#: rcgcdw.py:226 +#: rcgcdw.py:175 #, python-brace-format msgid "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" @@ -97,18 +97,18 @@ msgstr "" "[{author}]({author_url}) verschob die Schutzeinstellungen von {redirect}" "*{article}* nach [{target}]({target_url}){comment}" -#: rcgcdw.py:238 rcgcdw.py:637 +#: rcgcdw.py:187 rcgcdw.py:586 msgid "infinity and beyond" msgstr "alle Ewigkeit" -#: rcgcdw.py:253 +#: rcgcdw.py:202 #, python-brace-format msgid "" "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}" msgstr "" "[{author}]({author_url}) sperrte [{user}]({user_url}) für {time}{comment}" -#: rcgcdw.py:258 +#: rcgcdw.py:207 #, python-brace-format msgid "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" @@ -117,7 +117,7 @@ msgstr "" "[{author}]({author_url}) änderte die Sperreinstellungen für [{blocked_user}]" "({user_url}){comment}" -#: rcgcdw.py:263 +#: rcgcdw.py:212 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" @@ -125,7 +125,7 @@ msgstr "" "[{author}]({author_url}) hob die Sperre von [{blocked_user}]({user_url}) " "auf{comment}" -#: rcgcdw.py:267 +#: rcgcdw.py:216 #, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" @@ -133,11 +133,11 @@ msgstr "" "[{author}]({author_url}) hinterließ ein [Kommentar]({comment}) auf dem " "Profil von {target}" -#: rcgcdw.py:267 +#: rcgcdw.py:216 msgid "their own profile" msgstr "das eigene Profil" -#: rcgcdw.py:272 +#: rcgcdw.py:221 #, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target} " @@ -146,11 +146,11 @@ msgstr "" "[{author}]({author_url}) antwortete auf ein [Kommentar]({comment}) auf dem " "Profil von {target}" -#: rcgcdw.py:275 rcgcdw.py:283 rcgcdw.py:287 +#: rcgcdw.py:224 rcgcdw.py:232 rcgcdw.py:236 msgid "their own" msgstr "sich selbst" -#: rcgcdw.py:280 +#: rcgcdw.py:229 #, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" @@ -158,90 +158,90 @@ msgstr "" "[{author}]({author_url}) bearbeitete ein [Kommentar]({comment}) auf dem " "Profil von {target}" -#: rcgcdw.py:285 +#: rcgcdw.py:234 #, python-brace-format msgid "[{author}]({author_url}) deleted a comment on {target} profile" msgstr "" "[{author}]({author_url}) löschte ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:293 rcgcdw.py:684 +#: rcgcdw.py:242 rcgcdw.py:633 msgid "Location" msgstr "Wohnort" -#: rcgcdw.py:295 rcgcdw.py:686 +#: rcgcdw.py:244 rcgcdw.py:635 msgid "About me" msgstr "\"Über mich\"-Abschnitt" -#: rcgcdw.py:297 rcgcdw.py:688 +#: rcgcdw.py:246 rcgcdw.py:637 msgid "Google link" msgstr "Google-Link" -#: rcgcdw.py:299 rcgcdw.py:690 +#: rcgcdw.py:248 rcgcdw.py:639 msgid "Facebook link" msgstr "Facebook-Link" -#: rcgcdw.py:301 rcgcdw.py:692 +#: rcgcdw.py:250 rcgcdw.py:641 msgid "Twitter link" msgstr "Twitter-Link" -#: rcgcdw.py:303 rcgcdw.py:694 +#: rcgcdw.py:252 rcgcdw.py:643 msgid "Reddit link" msgstr "Reddit-Link" -#: rcgcdw.py:305 rcgcdw.py:696 +#: rcgcdw.py:254 rcgcdw.py:645 msgid "Twitch link" msgstr "Twitch-Link" -#: rcgcdw.py:307 rcgcdw.py:698 +#: rcgcdw.py:256 rcgcdw.py:647 msgid "PSN link" msgstr "PSN-Link" -#: rcgcdw.py:309 rcgcdw.py:700 +#: rcgcdw.py:258 rcgcdw.py:649 msgid "VK link" msgstr "VK-Link" -#: rcgcdw.py:311 rcgcdw.py:702 +#: rcgcdw.py:260 rcgcdw.py:651 msgid "XVL link" msgstr "Xbox-Live-Link" -#: rcgcdw.py:313 rcgcdw.py:704 +#: rcgcdw.py:262 rcgcdw.py:653 msgid "Steam link" msgstr "Steam-Link" -#: rcgcdw.py:315 rcgcdw.py:706 +#: rcgcdw.py:264 rcgcdw.py:655 msgid "Discord handle" msgstr "Discord-Link" -#: rcgcdw.py:317 +#: rcgcdw.py:266 msgid "unknown" msgstr "unbekannt" -#: rcgcdw.py:318 +#: rcgcdw.py:267 #, python-brace-format msgid "[{target}]({target_url})'s" msgstr "dem Profil von [{target}]({target_url})" -#: rcgcdw.py:318 +#: rcgcdw.py:267 #, python-brace-format msgid "[their own]({target_url})" msgstr "dem [eigenen Profil]({target_url})" -#: rcgcdw.py:319 +#: rcgcdw.py:268 #, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*" msgstr "" "[{author}]({author_url}) bearbeitete den {field} auf {target}. *({desc})*" -#: rcgcdw.py:333 rcgcdw.py:335 rcgcdw.py:736 rcgcdw.py:738 +#: rcgcdw.py:282 rcgcdw.py:284 rcgcdw.py:687 rcgcdw.py:689 msgid "none" msgstr "keine" -#: rcgcdw.py:341 rcgcdw.py:723 +#: rcgcdw.py:290 rcgcdw.py:674 msgid "System" msgstr "System" -#: rcgcdw.py:347 +#: rcgcdw.py:296 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " @@ -250,11 +250,11 @@ msgstr "" "[{author}]({author_url}) schützte [{article}]({article_url}) {settings}" "{comment}" -#: rcgcdw.py:349 rcgcdw.py:358 rcgcdw.py:747 rcgcdw.py:754 +#: rcgcdw.py:298 rcgcdw.py:307 rcgcdw.py:698 rcgcdw.py:705 msgid " [cascading]" msgstr " [kaskadierend]" -#: rcgcdw.py:355 +#: rcgcdw.py:304 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" @@ -263,7 +263,7 @@ msgstr "" "[{author}]({author_url}) änderte den Schutzstatus von [{article}]" "({article_url}) {settings}{comment}" -#: rcgcdw.py:363 +#: rcgcdw.py:312 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" @@ -272,7 +272,7 @@ msgstr "" "[{author}]({author_url}) entfernte den Schutz von [{article}]({article_url})" "{comment}" -#: rcgcdw.py:368 +#: rcgcdw.py:317 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -287,7 +287,7 @@ msgstr[1] "" "[{author}]({author_url}) änderte die Sichtbarkeit von {amount} Versionen von " "[{article}]({article_url}){comment}" -#: rcgcdw.py:374 +#: rcgcdw.py:323 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -302,40 +302,40 @@ msgstr[1] "" "[{author}]({author_url}) importierte [{article}]({article_url}) mit {count} " "Versionen{comment}" -#: rcgcdw.py:380 +#: rcgcdw.py:329 #, python-brace-format msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" "[{author}]({author_url}) stellte [{article}]({article_url}) wieder " "her{comment}" -#: rcgcdw.py:382 +#: rcgcdw.py:331 #, python-brace-format msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "" "[{author}]({author_url}) änderte die Sichtbarkeit eines " "Logbucheintrags{comment}" -#: rcgcdw.py:384 +#: rcgcdw.py:333 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" msgstr "[{author}]({author_url}) importierte Interwiki{comment}" -#: rcgcdw.py:387 +#: rcgcdw.py:336 #, python-brace-format msgid "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" msgstr "" "[{author}]({author_url}) änderte [Missbrauchsfilter {number}]({filter_url})" -#: rcgcdw.py:390 +#: rcgcdw.py:339 #, python-brace-format msgid "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" msgstr "" "[{author}]({author_url}) erstellte [Missbrauchsfilter {number}]({filter_url})" -#: rcgcdw.py:396 +#: rcgcdw.py:345 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -344,7 +344,7 @@ msgstr "" "[{author}]({author_url}) vereinigte Versionen von [{article}]({article_url}) " "in [{dest}]({dest_url}){comment}" -#: rcgcdw.py:400 +#: rcgcdw.py:349 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -353,7 +353,7 @@ msgstr "" "[{author}]({author_url}) erstellte den [Interwiki-Präfix]({table_url}) " "{prefix} nach {website}" -#: rcgcdw.py:406 +#: rcgcdw.py:355 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -362,13 +362,13 @@ msgstr "" "[{author}]({author_url}) bearbeitete den [Interwiki-Präfix]({table_url}) " "{prefix} nach {website}" -#: rcgcdw.py:412 +#: rcgcdw.py:361 #, 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})" -#: rcgcdw.py:416 +#: rcgcdw.py:365 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -377,14 +377,14 @@ msgstr "" "[{author}]({author_url}) änderte das Inhaltsmodell der Seite [{article}]" "({article_url}) von {old} zu {new}{comment}" -#: rcgcdw.py:421 +#: rcgcdw.py:370 #, python-brace-format msgid "" "[{author}]({author_url}) edited the sprite for [{article}]({article_url})" msgstr "" "[{author}]({author_url}) edited the sprite for [{article}]({article_url})" -#: rcgcdw.py:425 +#: rcgcdw.py:374 #, python-brace-format msgid "" "[{author}]({author_url}) created the sprite sheet for [{article}]" @@ -393,89 +393,89 @@ msgstr "" "[{author}]({author_url}) erstellte das Sprite-sheet für [{article}]" "({article_url})" -#: rcgcdw.py:429 +#: rcgcdw.py:378 #, python-brace-format msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" -#: rcgcdw.py:432 +#: rcgcdw.py:381 #, python-brace-format msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" msgstr "" "[{author}]({author_url}) erstellte eine [Markierung]({tag_url}) \"{tag}\"" -#: rcgcdw.py:436 +#: rcgcdw.py:385 #, python-brace-format msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" msgstr "" "[{author}]({author_url}) löschte eine [Markierung]({tag_url}) \"{tag}\"" -#: rcgcdw.py:440 +#: rcgcdw.py:389 #, python-brace-format msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" msgstr "" "[{author}]({author_url}) aktivierte eine [Markierung]({tag_url}) \"{tag}\"" -#: rcgcdw.py:443 +#: rcgcdw.py:392 #, python-brace-format msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" msgstr "" "[{author}]({author_url}) deaktivierte eine [Markierung]({tag_url}) \"{tag}\"" -#: rcgcdw.py:445 +#: rcgcdw.py:394 msgid "An action has been hidden by administration." msgstr "Eine Aktion wurde versteckt." -#: rcgcdw.py:454 rcgcdw.py:739 +#: rcgcdw.py:403 rcgcdw.py:690 msgid "No description provided" msgstr "Keine Zusammenfassung angegeben" -#: rcgcdw.py:504 +#: rcgcdw.py:453 msgid "(N!) " msgstr "(N!) " -#: rcgcdw.py:505 +#: rcgcdw.py:454 msgid "m " msgstr "K " -#: rcgcdw.py:524 rcgcdw.py:529 +#: rcgcdw.py:473 rcgcdw.py:478 msgid "__Only whitespace__" msgstr "__Nur Leerraum__" -#: rcgcdw.py:535 +#: rcgcdw.py:484 msgid "Removed" msgstr "Entfernt" -#: rcgcdw.py:538 +#: rcgcdw.py:487 msgid "Added" msgstr "Hinzugefügt" -#: rcgcdw.py:564 rcgcdw.py:599 +#: rcgcdw.py:513 rcgcdw.py:548 msgid "Options" msgstr "Optionen" -#: rcgcdw.py:564 +#: rcgcdw.py:513 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "([Vorschau]({link}) | [zurücksetzen]({undolink}))" -#: rcgcdw.py:566 +#: rcgcdw.py:515 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "Neue Dateiversion {name}" -#: rcgcdw.py:568 +#: rcgcdw.py:517 #, python-brace-format msgid "Uploaded {name}" msgstr "Neue Datei {name}" -#: rcgcdw.py:584 +#: rcgcdw.py:533 msgid "**No license!**" msgstr "**Keine Lizenz!**" -#: rcgcdw.py:596 +#: rcgcdw.py:545 msgid "" "\n" "License: {}" @@ -483,478 +483,482 @@ msgstr "" "\n" "Lizenz: {}" -#: rcgcdw.py:599 +#: rcgcdw.py:548 #, python-brace-format msgid "([preview]({link}))" msgstr "([Vorschau]({link}))" -#: rcgcdw.py:604 +#: rcgcdw.py:553 #, python-brace-format msgid "Deleted page {article}" msgstr "Löschte {article}" -#: rcgcdw.py:608 +#: rcgcdw.py:557 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "Löschte die Weiterleitung {article} um Platz zu machen" -#: rcgcdw.py:613 +#: rcgcdw.py:562 msgid "No redirect has been made" msgstr "Die Erstellung einer Weiterleitung wurde unterdrückt" -#: rcgcdw.py:614 +#: rcgcdw.py:563 msgid "A redirect has been made" msgstr "Eine Weiterleitung wurde erstellt" -#: rcgcdw.py:615 +#: rcgcdw.py:564 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "Verschob {redirect}{article} nach {target}" -#: rcgcdw.py:619 +#: rcgcdw.py:568 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "" "Verschob {redirect}{article} nach {title} und überschrieb eine Weiterleitung" -#: rcgcdw.py:624 +#: rcgcdw.py:573 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "Verschob die Schutzeinstellungen von {redirect}{article} nach {title}" -#: rcgcdw.py:647 +#: rcgcdw.py:596 #, python-brace-format msgid "Blocked {blocked_user} for {time}" msgstr "Sperrte {blocked_user} für {time}" -#: rcgcdw.py:653 +#: rcgcdw.py:602 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "Änderte die Sperreinstellungen für {blocked_user}" -#: rcgcdw.py:659 +#: rcgcdw.py:608 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "Hob die Sperre von {blocked_user} auf" -#: rcgcdw.py:663 +#: rcgcdw.py:612 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "Hinterließ ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:665 +#: rcgcdw.py:614 msgid "Left a comment on their own profile" msgstr "Hinterließ ein Kommentar auf dem eigenen Profil" -#: rcgcdw.py:669 +#: rcgcdw.py:618 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "Antwortete auf ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:671 +#: rcgcdw.py:620 msgid "Replied to a comment on their own profile" msgstr "Antwortete auf ein Kommentar auf dem eigenen Profil" -#: rcgcdw.py:675 +#: rcgcdw.py:624 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "Bearbeitete ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:677 +#: rcgcdw.py:626 msgid "Edited a comment on their own profile" msgstr "Bearbeitete ein Kommentar auf dem eigenen Profil" -#: rcgcdw.py:708 rcgcdw.py:846 +#: rcgcdw.py:657 +msgid "Battle.net handle" +msgstr "Battle.net-Link" + +#: rcgcdw.py:659 rcgcdw.py:797 msgid "Unknown" msgstr "Unbekannt" -#: rcgcdw.py:709 +#: rcgcdw.py:660 #, python-brace-format msgid "Edited {target}'s profile" msgstr "Bearbeitete das Profil von {target}" -#: rcgcdw.py:709 +#: rcgcdw.py:660 msgid "Edited their own profile" msgstr "Bearbeitete das eigene Profil" -#: rcgcdw.py:711 +#: rcgcdw.py:662 #, python-brace-format msgid "Cleared the {field} field" msgstr "Entfernte den {field}" -#: rcgcdw.py:713 +#: rcgcdw.py:664 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "{field} geändert zu: {desc}" -#: rcgcdw.py:717 +#: rcgcdw.py:668 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "Löschte ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:721 +#: rcgcdw.py:672 #, python-brace-format msgid "Changed group membership for {target}" msgstr "Änderte die Gruppenzugehörigkeit von {target}" -#: rcgcdw.py:725 +#: rcgcdw.py:676 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "{target} got autopromoted to a new usergroup" -#: rcgcdw.py:740 +#: rcgcdw.py:691 #, 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}" -#: rcgcdw.py:745 +#: rcgcdw.py:696 #, python-brace-format msgid "Protected {target}" msgstr "Schützte {target}" -#: rcgcdw.py:752 +#: rcgcdw.py:703 #, python-brace-format msgid "Changed protection level for {article}" msgstr "Änderte den Schutzstatus von {article}" -#: rcgcdw.py:759 +#: rcgcdw.py:710 #, python-brace-format msgid "Removed protection from {article}" msgstr "Entfernte den Schutz von {article}" -#: rcgcdw.py:764 +#: rcgcdw.py:715 #, 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} " -#: rcgcdw.py:770 +#: rcgcdw.py:721 #, 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" -#: rcgcdw.py:776 +#: rcgcdw.py:727 #, python-brace-format msgid "Restored {article}" msgstr "Stellte {article} wieder her" -#: rcgcdw.py:779 +#: rcgcdw.py:730 msgid "Changed visibility of log events" msgstr "Änderte die Sichtbarkeit eines Logbucheintrags" -#: rcgcdw.py:782 +#: rcgcdw.py:733 msgid "Imported interwiki" msgstr "Importierte Interwiki" -#: rcgcdw.py:785 +#: rcgcdw.py:736 #, python-brace-format msgid "Edited abuse filter number {number}" msgstr "Änderte Missbrauchsfilter {number}" -#: rcgcdw.py:788 +#: rcgcdw.py:739 #, python-brace-format msgid "Created abuse filter number {number}" msgstr "Erstellte Missbrauchsfilter {number}" -#: rcgcdw.py:792 +#: rcgcdw.py:743 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "Vereinigte Versionen von {article} in {dest}" -#: rcgcdw.py:796 +#: rcgcdw.py:747 msgid "Added an entry to the interwiki table" msgstr "Fügte ein Interwiki-Präfix hinzu" -#: rcgcdw.py:797 rcgcdw.py:803 +#: rcgcdw.py:748 rcgcdw.py:754 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "Präfix: {prefix}, URL: {website} | {desc}" -#: rcgcdw.py:802 +#: rcgcdw.py:753 msgid "Edited an entry in interwiki table" msgstr "Änderte ein Interwiki-Präfix" -#: rcgcdw.py:808 +#: rcgcdw.py:759 msgid "Deleted an entry in interwiki table" msgstr "Entfernte ein Interwiki-Präfix" -#: rcgcdw.py:809 +#: rcgcdw.py:760 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "Präfix: {prefix} | {desc}" -#: rcgcdw.py:813 +#: rcgcdw.py:764 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "Änderte das Inhaltsmodell von {article}" -#: rcgcdw.py:814 +#: rcgcdw.py:765 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Modell geändert von {old} zu {new}: {reason}" -#: rcgcdw.py:820 +#: rcgcdw.py:771 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Edited the sprite for {article}" -#: rcgcdw.py:824 +#: rcgcdw.py:775 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Created the sprite sheet for {article}" -#: rcgcdw.py:828 +#: rcgcdw.py:779 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Edited the slice for {article}" -#: rcgcdw.py:831 +#: rcgcdw.py:782 #, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "Erstellte die Markierung \"{tag}\"" -#: rcgcdw.py:835 +#: rcgcdw.py:786 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "Löschte die Markierung \"{tag}\"" -#: rcgcdw.py:839 +#: rcgcdw.py:790 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "Aktivierte die Markierung \"{tag}\"" -#: rcgcdw.py:842 +#: rcgcdw.py:793 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "Deaktivierte die Markierung \"{tag}\"" -#: rcgcdw.py:845 +#: rcgcdw.py:796 msgid "Action has been hidden by administration." msgstr "Aktion wurde versteckt" -#: rcgcdw.py:872 +#: rcgcdw.py:823 msgid "Tags" msgstr "Markierungen" -#: rcgcdw.py:877 +#: rcgcdw.py:828 msgid "**Added**: " msgstr "**Hinzugefügt:** " -#: rcgcdw.py:877 +#: rcgcdw.py:828 msgid " and {} more\n" msgstr " und {} mehr\n" -#: rcgcdw.py:878 +#: rcgcdw.py:829 msgid "**Removed**: " msgstr "**Entfernt:** " -#: rcgcdw.py:878 +#: rcgcdw.py:829 msgid " and {} more" msgstr " und {} mehr" -#: rcgcdw.py:879 +#: rcgcdw.py:830 msgid "Changed categories" msgstr "Geänderte Kategorien" -#: rcgcdw.py:920 +#: rcgcdw.py:849 msgid "~~hidden~~" msgstr "~~versteckt~~" -#: rcgcdw.py:926 +#: rcgcdw.py:855 msgid "hidden" msgstr "versteckt" -#: rcgcdw.py:1000 rcgcdw.py:1002 rcgcdw.py:1004 rcgcdw.py:1006 rcgcdw.py:1008 -#: rcgcdw.py:1010 rcgcdw.py:1012 +#: rcgcdw.py:922 rcgcdw.py:924 rcgcdw.py:926 rcgcdw.py:928 rcgcdw.py:930 +#: rcgcdw.py:932 rcgcdw.py:934 #, python-brace-format msgid "{value} (avg. {avg})" -msgstr "" +msgstr "{value} (vgl. {avg})" -#: rcgcdw.py:1053 +#: rcgcdw.py:975 msgid "Daily overview" msgstr "Tägliche Übersicht" -#: rcgcdw.py:1062 +#: rcgcdw.py:984 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " (eine Aktion)" msgstr[1] " ({} Aktionen)" -#: rcgcdw.py:1064 +#: rcgcdw.py:986 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " (eine Änderung)" msgstr[1] " ({} Änderungen)" -#: rcgcdw.py:1069 +#: rcgcdw.py:991 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC (eine Aktion)" msgstr[1] " UTC ({} Aktionen)" -#: rcgcdw.py:1071 rcgcdw.py:1072 rcgcdw.py:1076 +#: rcgcdw.py:993 rcgcdw.py:994 rcgcdw.py:998 msgid "But nobody came" msgstr "Keine Aktivität" -#: rcgcdw.py:1080 +#: rcgcdw.py:1002 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Aktivster Benutzer" msgstr[1] "Aktivste Benutzer" -#: rcgcdw.py:1081 +#: rcgcdw.py:1003 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "Meist bearbeiteter Artikel" msgstr[1] "Meist bearbeitete Artikel" -#: rcgcdw.py:1082 +#: rcgcdw.py:1004 msgid "Edits made" msgstr "Bearbeitungen" -#: rcgcdw.py:1082 +#: rcgcdw.py:1004 msgid "New files" msgstr "Neue Dateien" -#: rcgcdw.py:1082 +#: rcgcdw.py:1004 msgid "Admin actions" msgstr "Admin-Aktionen" -#: rcgcdw.py:1083 +#: rcgcdw.py:1005 msgid "Bytes changed" msgstr "Bytes geändert" -#: rcgcdw.py:1083 +#: rcgcdw.py:1005 msgid "New articles" msgstr "Neue Artikel" -#: rcgcdw.py:1084 +#: rcgcdw.py:1006 msgid "Unique contributors" msgstr "Einzelne Autoren" -#: rcgcdw.py:1085 +#: rcgcdw.py:1007 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Aktivste Stunde" msgstr[1] "Aktivste Stunden" -#: rcgcdw.py:1086 +#: rcgcdw.py:1008 msgid "Day score" msgstr "Tageswert" -#: rcgcdw.py:1227 +#: rcgcdw.py:1149 #, python-brace-format msgid "Connection to {wiki} seems to be stable now." msgstr "{wiki} scheint wieder erreichbar zu sein." -#: rcgcdw.py:1228 rcgcdw.py:1339 +#: rcgcdw.py:1150 rcgcdw.py:1261 msgid "Connection status" msgstr "Verbindungsstatus" -#: rcgcdw.py:1338 +#: rcgcdw.py:1260 #, python-brace-format msgid "{wiki} seems to be down or unreachable." msgstr "Das {wiki} scheint unerreichbar zu sein." -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "director" msgstr "Direktor" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "bot" msgstr "Bot" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "editor" msgstr "editor" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "directors" msgstr "Direktor" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "sysop" msgstr "Administrator" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "bureaucrat" msgstr "Bürokrat" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "reviewer" msgstr "reviewer" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "autoreview" msgstr "autoreview" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "autopatrol" msgstr "autopatrol" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "wiki_guardian" msgstr "Wiki Guardian" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "second" msgid_plural "seconds" msgstr[0] "Sekunde" msgstr[1] "Sekunden" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "minute" msgid_plural "minutes" msgstr[0] "Minute" msgstr[1] "Minuten" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "hour" msgid_plural "hours" msgstr[0] "Stunde" msgstr[1] "Stunden" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "day" msgid_plural "days" msgstr[0] "Tag" msgstr[1] "Tage" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "week" msgid_plural "weeks" msgstr[0] "Woche" msgstr[1] "Wochen" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "month" msgid_plural "months" msgstr[0] "Monat" msgstr[1] "Monate" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "year" msgid_plural "years" msgstr[0] "Jahr" msgstr[1] "Jahre" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "millennium" msgid_plural "millennia" msgstr[0] "Jahrtausend" msgstr[1] "Jahrtausende" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "decade" msgid_plural "decades" msgstr[0] "Jahrzehnt" msgstr[1] "Jahrzehnte" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "century" msgid_plural "centuries" msgstr[0] "Jahrhundert" diff --git a/locale/pl/LC_MESSAGES/rcgcdw.mo b/locale/pl/LC_MESSAGES/rcgcdw.mo index 36a3a0b1b4042ede1fbb0fabbe0be4773476c82a..e7ef773fa9104fcafb9739188dd4f5ce2b680063 100644 GIT binary patch delta 3920 zcmZA3c~DhV0LSrzC@8pq8@R<|Q$Pe4TtE$C5kWvy)XW{l1rQSv_a1?vR;DTDUY5CF zu8}jT<&-hGkJcYfI*!&f)>z}I&LAsOOEsUvC*_#iJpV}JJ8gF4&{0%#!TRUTd&>!{vP}`B%hV${rqs%M}!}-_& zH=`bX0Qqy8&-v61=g}W;U`u>};rImou)B}-z!(hWJPvi=42;Ag^u=8mh)0oI&2`l8 z?xCLd5Zj|4KMtjS6G5RT7qT%Lm!bm?;sU&gU2qV0Q8d}83Ujd&Zp0AWk9y8!q?62J zY=wGl-S36HFa&j91_o2V$)%t!twgnO59$FIP;Yt@_2B0ijKLkPu2036IM2rbT#xF( zYE*^i(F^aOdf<0d*Vp3^bfXnc8foGvjKxe;1$$9%REw^m!2X;+!QL23Yc=*`Y)epM zybXurH>id;pzaG{{4_@mMt>iS9SgI7=ueTI62*1V>E z?~fX52dd{1F#-!wzu$)Hfy3y5r?5GGg?i4n{`9|Ec8v@CncIBO%jPMn0#91uz;>v~ z)E9L<0oBlv$e$U*hu*vZmti%gVGv7Z5*A`9evgSbyqhsUV40J`1PWtWdqc4rGx0uV z>9`y-uojn~uY*S8T2up_Hz?=tTwd_Wt=FU`P zT9^g)_iNEX{bnW0S@v|JicH~R7`rhy4Wbzu_nl}SgIv?;Z(Z$RdisX`Wv z`2zL3Yp9B!A=ANlv4&Z>CK}cCsmME+$$jX5U8v-O-e4#4(&jQUU(8cv!kaEp?B_Tb z)rI#_4}5{D(2twhn@kew{z<5c%TYsf5Y>~XQTNy40K6Mb|Lex~eXTbLL;WlG3Qopp z*apv_hU6l~;3HH;q5Z7;vQXd8MOL8Mh^puqYKShPFV>-+=holafZ91J4B|pJ)EkXO z&53+uxXm9p7(3EjO|A@7MLEbg!)AB(l81<9HjsD5Tl(cnQa2t6|noHXV~VKZfb}1e0<2aOMk^<5;Z4 zeDr(SdR{rEaefc=yl@__A$DS_3NI*(#MA`KO&CCfZXwSy&v^PM9Gqxvy%o5G^S`hX z3u)E6_!L)T8Le854LAdrrC2?13o|*7U}9wHIy#BDz()?YP32!WoQ2)73VYy5+w17g z`9suLKE^Ki95tCb^A;U26g6bAsNW^p=b7li`2^IQm^zY<(Abx7p&6E8C{~~zRE=uL z*T`fsx3L}GLp`7lwVXWYU)d3LJqY!?SX2YkPz{`gT871_$-E|w{@0{CXL zYDeqIKu2Ia>P_;IkufXC1fnI_f;1k-D6F?nLa-;HjZH@eB^Huvv(v?7jeh{qQqjgS zpHz^y$wm@H_LEZLN7Ojxt7|^2Lyh}KM8l%VMY~NN(M$dJQ14ZdZR9he3A>%Be%CRG z&$kG3%Jn}O_6^qt1guRsRl7 z*cn|%D?Yc{WpUgtdtxV|@zb2xO=glnQbt(zuCdoV(%9=bM3|edV-BBVNWOJyHsRjJ z_kYd4s7c~l0jQ;yMas#CWD;Qsn}tLhPzi}5y@`%UqB*iaC;vNo+2=pqT_uF*Y2l{N{6$Wk0jES zgptN$I)%gbNhs!!A@;e5C&k1;8jm#;mXpb3H2Ik9AuCA%(NRg(l5{dc@2?GJDbYUA zctlY6lnf&q$PDr(nL-kX4>?G7kt1Xr*-W+&9q*9YF~;!KP#_jab8@_ znYL%#d}fxE6y`-0<&`+*%`BQ-m{(KmbJ^dspQHbPxR}^2N#TK3dEmgBg76%7pMr%& QB?}#iO?TCti!AK%57Zuu_W%F@ delta 3828 zcmYk;32;qU0LJl?gvchcNn!~JLRMMOL@Y@VmB?bJwj!jpB`UQ9@k$jrnS; zzyQ37y8aRNq8wXM(v}4Mkyl9FIM4KK8_|$Y7Y0=!xf1 z*I&b4cpr6L0K?E7qcE8EO)eGnun={F&8QykLEZRU)CKoYL*6#Xm@b%zU9kW)awVt+ zH=-BTphoC0YRFGvDqcYP;_QuM3rov)hq~@QYVCwEe;Sb()KvE6LmkZxVf@=rDdL10EVjQ`hVdM4L-q6w>Ir^8{k|DB z*LP7P=fUI0U^43W(@-O@2;Ffdw!*cj`)ojUtSXf8r*8J~!RVT=Pz_wgaQqRqn4a3_ z-RZVE>Wg}U5I*$eNw^$KFdKizS1_3^vlKVs5OnKg%yk@&6EM`lo*O`=1oQ9^j>2b{ zjyYkL6{z1`#=+>$0vL%|I1#tuc)W)>n9jn;#R^=4O*jJc!mSSOL|yN=O{I}a9OKy+ ze?|SUBNJSTg*YFZa4`;Lp_JhX)cHgfOfl}kap=tg$j2F&g-22Mdx9A_m=!%59mt?K z%ylXn`Uj{v(_WF@=!U`eaYxiPj6_XA3Tn4x*vAE^MK%fDahB~|bgl(dJ1fx@w_uR= z|8^?6(E-$=IDuL$XHgAZw7xOz8QB9n3G~Ku_!3@2jZhm$vi1POiF%Xm#T2}R zT2wA{TOIL4PMIVei?eYiHsWmTNH2$@19km*EWj5SfcgEbMLrWXm5Wdh?$|&@i=-Ak z@F40*8jxu-S5X)Ii+Tcoy06tAhP)C?FJu->4(bI}hQatHY6`BP)=U#>S2d&Va|eC& z?0-_xKNinXLlQ#w)sX~L1F0Br}Kl=I37=9J_ZfsZHI-Jg9mUJ{)L&CGRT-QScdcP3QpDe!PYCb z8g;*B)D-unk(co}j=<+qUu0!4|MaL5xraHz-ACdBT#Tthtatb!T+eX?z1oEJSdRVZ zRT(zm42;jRMxYY&IKG8?pm-LD*2pS8#^G6Xu%JyS-Rg|l7=}f*>(Gtk8q{3w#}0T5 zeepXC#2ct7dx-ko-}bR9kLk{_HwI$>YVM=a75j}~U?QocazZznj_Sx_)MD9!?XVhk zgId&fI%RvwKHr4;-9uCdU!Xb|nr&^vUKq!5fAqm3`?xfl@lWH#K2B&~|BNyC81*Dw zbJ&8Y;nUQ#l#rGRYMad=2kdim@nf=@Xo0Fj+sXgSA`WJfH#GnA$y%a9$DMPy0hf^X zNK4UTqCcjHXcV-s-zF+773W&mj8jN0QF)8JPqZVn%RGt7K{Aav|NryT8Ok;bQ-vjj zL2#~ze)jnUEVS#Q(ymWH&FiOx7n@l_J|`7Kr5n*Y7_9?JDbWIaRU4xR6}G5zp=oZk z;wO@pGL(u3*+{zDC!_FnyWSeL?bh4J3ox9tC+s}u4oJq2$WAhrsIW$va>jp!^U(T; z11+3ggx7#MLNds7qB4Z|lXUVXQ5jBVJ8RYl?;rCCnMDqhePj>$ki0{7lS5<^siS@8 zTkR;;5S9HTlIX3sm-Ht)NME8|@Gi+E5kzH+g{ihJ!=+?7SxB_AREmjq*E${8C9@Tk zKBS&(wNJJ%$*y$A56D3B8d*u&5tYQM%(j7!F4SV2$JYP7s>YL%WSI^qoh+RDDw=w4 zGR!_V4_DcB(UW{;AIGAGX)?(oX~dN{i&yU4!a2naw|u{LX*l9{F|\n" "Language-Team: \n" "Language: pl\n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: rcgcdw.py:184 +#: rcgcdw.py:133 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" @@ -28,7 +28,7 @@ msgstr "" "[{author}]({author_url}) editował(-a) [{article}]({edit_link}){comment} " "({sign}{edit_size})" -#: rcgcdw.py:186 +#: rcgcdw.py:135 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" @@ -37,12 +37,12 @@ msgstr "" "[{author}]({author_url}) stworzył(-a) [{article}]({edit_link}){comment} " "({sign}{edit_size})" -#: rcgcdw.py:190 +#: rcgcdw.py:139 #, python-brace-format msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" msgstr "[{author}]({author_url}) przesłał(-a) [{file}]({file_link}){comment}" -#: rcgcdw.py:198 +#: rcgcdw.py:147 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -51,12 +51,12 @@ msgstr "" "[{author}]({author_url}) przesłał(-a) nową wersję [{file}]({file_link})" "{comment}" -#: rcgcdw.py:202 +#: rcgcdw.py:151 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) usunął/usunęła [{page}]({page_link}){comment}" -#: rcgcdw.py:207 +#: rcgcdw.py:156 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -65,15 +65,15 @@ msgstr "" "[{author}]({author_url}) usunął/usunęła przekierowanie przez nadpisanie " "[{page}]({page_link}){comment}" -#: rcgcdw.py:212 rcgcdw.py:218 +#: rcgcdw.py:161 rcgcdw.py:167 msgid "without making a redirect" msgstr "bez utworzenia przekierowania przekierowania" -#: rcgcdw.py:212 rcgcdw.py:219 +#: rcgcdw.py:161 rcgcdw.py:168 msgid "with a redirect" msgstr "z przekierowaniem" -#: rcgcdw.py:213 +#: rcgcdw.py:162 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" @@ -82,7 +82,7 @@ msgstr "" "[{author}]({author_url}) przeniósł/przeniosła {redirect}*{article}* do " "[{target}]({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:220 +#: rcgcdw.py:169 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " @@ -91,7 +91,7 @@ msgstr "" "[{author}]({author_url}) przeniósł/przeniosła {redirect}*{article}* do " "przekierowania [{target}]({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:226 +#: rcgcdw.py:175 #, python-brace-format msgid "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" @@ -100,11 +100,11 @@ msgstr "" "[{author}]({author_url}) przeniósł/przeniosła ustawienia zabezpieczeń z " "{redirect}*{article}* do [{target}]({target_url}){comment}" -#: rcgcdw.py:238 rcgcdw.py:637 +#: rcgcdw.py:187 rcgcdw.py:586 msgid "infinity and beyond" msgstr "wieczność" -#: rcgcdw.py:253 +#: rcgcdw.py:202 #, python-brace-format msgid "" "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}" @@ -112,7 +112,7 @@ msgstr "" "[{author}]({author_url}) zablokował(-a) [{user}]({user_url}) na {time}" "{comment}" -#: rcgcdw.py:258 +#: rcgcdw.py:207 #, python-brace-format msgid "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" @@ -121,25 +121,25 @@ msgstr "" "[{author}]({author_url}) zmienił(-a) ustawienia blokady dla [{blocked_user}]" "({user_url}){comment}" -#: rcgcdw.py:263 +#: rcgcdw.py:212 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" msgstr "" "[{author}]({author_url}) odblokował(-a) [{blocked_user}]({user_url}){comment}" -#: rcgcdw.py:267 +#: rcgcdw.py:216 #, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" msgstr "" "[{author}]({author_url}) pozostawił(-a) [komentarz]({comment}) na {target}" -#: rcgcdw.py:267 +#: rcgcdw.py:216 msgid "their own profile" msgstr "swoim własnym profilu" -#: rcgcdw.py:272 +#: rcgcdw.py:221 #, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target} " @@ -148,100 +148,100 @@ msgstr "" "[{author}]({author_url}) odpowiedział(-a) na [komentarz]({comment}) na " "{target}" -#: rcgcdw.py:275 rcgcdw.py:283 rcgcdw.py:287 +#: rcgcdw.py:224 rcgcdw.py:232 rcgcdw.py:236 msgid "their own" msgstr "swój własny" -#: rcgcdw.py:280 +#: rcgcdw.py:229 #, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" msgstr "" "[{author}]({author_url}) edytował(-a) [komentarz]({comment}) na {target}" -#: rcgcdw.py:285 +#: rcgcdw.py:234 #, python-brace-format msgid "[{author}]({author_url}) deleted a comment on {target} profile" msgstr "[{author}]({author_url}) usunął/usunęła komentarz na {target}" -#: rcgcdw.py:293 rcgcdw.py:684 +#: rcgcdw.py:242 rcgcdw.py:633 msgid "Location" msgstr "Lokacja" -#: rcgcdw.py:295 rcgcdw.py:686 +#: rcgcdw.py:244 rcgcdw.py:635 msgid "About me" msgstr "O mnie" -#: rcgcdw.py:297 rcgcdw.py:688 +#: rcgcdw.py:246 rcgcdw.py:637 msgid "Google link" msgstr "link Google" -#: rcgcdw.py:299 rcgcdw.py:690 +#: rcgcdw.py:248 rcgcdw.py:639 msgid "Facebook link" msgstr "link Facebook" -#: rcgcdw.py:301 rcgcdw.py:692 +#: rcgcdw.py:250 rcgcdw.py:641 msgid "Twitter link" msgstr "link Twitter" -#: rcgcdw.py:303 rcgcdw.py:694 +#: rcgcdw.py:252 rcgcdw.py:643 msgid "Reddit link" msgstr "link Reddit" -#: rcgcdw.py:305 rcgcdw.py:696 +#: rcgcdw.py:254 rcgcdw.py:645 msgid "Twitch link" msgstr "link Twitch" -#: rcgcdw.py:307 rcgcdw.py:698 +#: rcgcdw.py:256 rcgcdw.py:647 msgid "PSN link" msgstr "link PSN" -#: rcgcdw.py:309 rcgcdw.py:700 +#: rcgcdw.py:258 rcgcdw.py:649 msgid "VK link" msgstr "link VK" -#: rcgcdw.py:311 rcgcdw.py:702 +#: rcgcdw.py:260 rcgcdw.py:651 msgid "XVL link" msgstr "link XVL" -#: rcgcdw.py:313 rcgcdw.py:704 +#: rcgcdw.py:262 rcgcdw.py:653 msgid "Steam link" msgstr "link Steam" -#: rcgcdw.py:315 rcgcdw.py:706 +#: rcgcdw.py:264 rcgcdw.py:655 msgid "Discord handle" msgstr "konto Discord" -#: rcgcdw.py:317 +#: rcgcdw.py:266 msgid "unknown" msgstr "nieznana sekcja" -#: rcgcdw.py:318 +#: rcgcdw.py:267 #, python-brace-format msgid "[{target}]({target_url})'s" msgstr "na profilu użytkownika [{target}]({target_url})" -#: rcgcdw.py:318 +#: rcgcdw.py:267 #, python-brace-format msgid "[their own]({target_url})" msgstr "na [swoim własnym profilu użytkownika]({target_url})" -#: rcgcdw.py:319 +#: rcgcdw.py:268 #, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*" msgstr "" "[{author}]({author_url}) edytował(-a) pole {field} {target}. *({desc})*" -#: rcgcdw.py:333 rcgcdw.py:335 rcgcdw.py:736 rcgcdw.py:738 +#: rcgcdw.py:282 rcgcdw.py:284 rcgcdw.py:687 rcgcdw.py:689 msgid "none" msgstr "brak" -#: rcgcdw.py:341 rcgcdw.py:723 +#: rcgcdw.py:290 rcgcdw.py:674 msgid "System" msgstr "System" -#: rcgcdw.py:347 +#: rcgcdw.py:296 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " @@ -250,11 +250,11 @@ msgstr "" "[{author}]({author_url}) zabezpieczył(-a) [{article}]({article_url}) z " "następującymi ustawieniami: {settings}{comment}" -#: rcgcdw.py:349 rcgcdw.py:358 rcgcdw.py:747 rcgcdw.py:754 +#: rcgcdw.py:298 rcgcdw.py:307 rcgcdw.py:698 rcgcdw.py:705 msgid " [cascading]" msgstr " [kaskadowo]" -#: rcgcdw.py:355 +#: rcgcdw.py:304 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" @@ -263,7 +263,7 @@ msgstr "" "[{author}]({author_url}) modyfikował(-a) ustawienia zabezpieczeń [{article}]" "({article_url}) na: {settings}{comment}" -#: rcgcdw.py:363 +#: rcgcdw.py:312 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" @@ -272,7 +272,7 @@ msgstr "" "[{author}]({author_url}) usunął/usunęła zabezpieczenia z [{article}]" "({article_url}){comment}" -#: rcgcdw.py:368 +#: rcgcdw.py:317 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -290,7 +290,7 @@ msgstr[2] "" "[{author}]({author_url}) zmienił(-a) widoczność {amount} wersji strony " "[{article}]({article_url}){comment}" -#: rcgcdw.py:374 +#: rcgcdw.py:323 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -308,23 +308,23 @@ msgstr[2] "" "[{author}]({author_url}) zaimportował(-a) [{article}]({article_url}) {count} " "wersjami{comment}" -#: rcgcdw.py:380 +#: rcgcdw.py:329 #, python-brace-format msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" "[{author}]({author_url}) przywrócił(-a) [{article}]({article_url}){comment}" -#: rcgcdw.py:382 +#: rcgcdw.py:331 #, python-brace-format msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "[{author}]({author_url}) zmienił(-a) widoczność wydarzeń{comment}" -#: rcgcdw.py:384 +#: rcgcdw.py:333 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" msgstr "[{author}]({author_url}) zaimportował(-a) interwiki{comment}" -#: rcgcdw.py:387 +#: rcgcdw.py:336 #, python-brace-format msgid "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" @@ -332,7 +332,7 @@ msgstr "" "[{author}]({author_url}) edytował(-a) filtr nadużyć [numer {number}]" "({filter_url})" -#: rcgcdw.py:390 +#: rcgcdw.py:339 #, python-brace-format msgid "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" @@ -340,7 +340,7 @@ msgstr "" "[{author}]({author_url}) stworzył(-a) filtr nadużyć [numer {number}]" "({filter_url})" -#: rcgcdw.py:396 +#: rcgcdw.py:345 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -349,7 +349,7 @@ msgstr "" "[{author}]({author_url}) połączył(-a) historie zmian [{article}]" "({article_url}) z [{dest}]({dest_url}){comment}" -#: rcgcdw.py:400 +#: rcgcdw.py:349 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -358,7 +358,7 @@ msgstr "" "[{author}]({author_url}) dodał(-a) wpis do [tabeli interwiki]({table_url}), " "który prowadzi do {website} z prefixem {prefix}" -#: rcgcdw.py:406 +#: rcgcdw.py:355 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -367,7 +367,7 @@ msgstr "" "[{author}]({author_url}) edytował(-a) wpis w [tabeli interwiki]" "({table_url}), który prowadzi do {website} z prefixem {prefix}" -#: rcgcdw.py:412 +#: rcgcdw.py:361 #, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" @@ -375,7 +375,7 @@ msgstr "" "[{author}]({author_url}) usunął/usunęła wpis z [tabeli interwiki]" "({table_url})" -#: rcgcdw.py:416 +#: rcgcdw.py:365 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -384,14 +384,14 @@ msgstr "" "[{author}]({author_url}) zmienił(-a) model zawartości [{article}]" "({article_url}) z {old} na {new}{comment}" -#: rcgcdw.py:421 +#: rcgcdw.py:370 #, python-brace-format msgid "" "[{author}]({author_url}) edited the sprite for [{article}]({article_url})" msgstr "" "[{author}]({author_url}) edytował(-a) sprite [{article}]({article_url})" -#: rcgcdw.py:425 +#: rcgcdw.py:374 #, python-brace-format msgid "" "[{author}]({author_url}) created the sprite sheet for [{article}]" @@ -399,84 +399,84 @@ msgid "" msgstr "" "[{author}]({author_url}) utworzył(-a) sprite sheet [{article}]({article_url})" -#: rcgcdw.py:429 +#: rcgcdw.py:378 #, python-brace-format msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "[{author}]({author_url}) edytował(-a) slice [{article}]({article_url})" -#: rcgcdw.py:432 +#: rcgcdw.py:381 #, python-brace-format msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) utworzył(-a) [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:436 +#: rcgcdw.py:385 #, python-brace-format msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) usunął/usunęła [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:440 +#: rcgcdw.py:389 #, python-brace-format msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) aktywował(-a) [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:443 +#: rcgcdw.py:392 #, python-brace-format msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" msgstr "[{author}]({author_url}) dezaktywował(-a) [tag]({tag_url}) \"{tag}\"" -#: rcgcdw.py:445 +#: rcgcdw.py:394 msgid "An action has been hidden by administration." msgstr "Akcja została ukryta przez administrację." -#: rcgcdw.py:454 rcgcdw.py:739 +#: rcgcdw.py:403 rcgcdw.py:690 msgid "No description provided" msgstr "Nie podano opisu zmian" -#: rcgcdw.py:504 +#: rcgcdw.py:453 msgid "(N!) " msgstr "(N!) " -#: rcgcdw.py:505 +#: rcgcdw.py:454 msgid "m " msgstr "d " -#: rcgcdw.py:524 rcgcdw.py:529 +#: rcgcdw.py:473 rcgcdw.py:478 msgid "__Only whitespace__" msgstr "__Tylko znaki niedrukowane__" -#: rcgcdw.py:535 +#: rcgcdw.py:484 msgid "Removed" msgstr "Usunięto" -#: rcgcdw.py:538 +#: rcgcdw.py:487 msgid "Added" msgstr "Dodano" -#: rcgcdw.py:564 rcgcdw.py:599 +#: rcgcdw.py:513 rcgcdw.py:548 msgid "Options" msgstr "Opcje" -#: rcgcdw.py:564 +#: rcgcdw.py:513 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "([podgląd]({link}) | [wycofaj]({undolink}))" -#: rcgcdw.py:566 +#: rcgcdw.py:515 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "Przesłał(a) nową wersję {name}" -#: rcgcdw.py:568 +#: rcgcdw.py:517 #, python-brace-format msgid "Uploaded {name}" msgstr "Przesłał(a) {name}" -#: rcgcdw.py:584 +#: rcgcdw.py:533 msgid "**No license!**" msgstr "**Brak licencji!**" -#: rcgcdw.py:596 +#: rcgcdw.py:545 msgid "" "\n" "License: {}" @@ -484,148 +484,152 @@ msgstr "" "\n" "Licencja: {}" -#: rcgcdw.py:599 +#: rcgcdw.py:548 #, python-brace-format msgid "([preview]({link}))" msgstr "([podgląd]({link}))" -#: rcgcdw.py:604 +#: rcgcdw.py:553 #, python-brace-format msgid "Deleted page {article}" msgstr "Usunął/usunęła {article}" -#: rcgcdw.py:608 +#: rcgcdw.py:557 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "" "Usunął/usunęła przekierowanie ({article}) aby utworzyć miejsce dla " "przenoszonej strony" -#: rcgcdw.py:613 +#: rcgcdw.py:562 msgid "No redirect has been made" msgstr "Nie utworzono przekierowania" -#: rcgcdw.py:614 +#: rcgcdw.py:563 msgid "A redirect has been made" msgstr "Zostało utworzone przekierowanie" -#: rcgcdw.py:615 +#: rcgcdw.py:564 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "Przeniósł/przeniosła {redirect}{article} do {target}" -#: rcgcdw.py:619 +#: rcgcdw.py:568 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "" "Przeniósł/przeniosła {redirect}{article} do strony przekierowującej {title}" -#: rcgcdw.py:624 +#: rcgcdw.py:573 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "Przeniesiono ustawienia zabezpieczeń z {redirect}{article} do {title}" -#: rcgcdw.py:647 +#: rcgcdw.py:596 #, python-brace-format msgid "Blocked {blocked_user} for {time}" msgstr "Zablokowano {blocked_user} na {time}" -#: rcgcdw.py:653 +#: rcgcdw.py:602 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "Zmienił ustawienia blokady {blocked_user}" -#: rcgcdw.py:659 +#: rcgcdw.py:608 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "Odblokował {blocked_user}" -#: rcgcdw.py:663 +#: rcgcdw.py:612 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "Pozostawiono komentarz na profilu użytkownika {target}" -#: rcgcdw.py:665 +#: rcgcdw.py:614 msgid "Left a comment on their own profile" msgstr "Pozostawił(a) komentarz na swoim profilu" -#: rcgcdw.py:669 +#: rcgcdw.py:618 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "Odpowiedziano na komentarz na profilu użytkownika {target}" -#: rcgcdw.py:671 +#: rcgcdw.py:620 msgid "Replied to a comment on their own profile" msgstr "Odpowiedział(a) na komentarz na swoim profilu" -#: rcgcdw.py:675 +#: rcgcdw.py:624 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "Edytowano komentarz na profilu użytkownika {target}" -#: rcgcdw.py:677 +#: rcgcdw.py:626 msgid "Edited a comment on their own profile" msgstr "Edytował(a) komentarz na swoim profilu" -#: rcgcdw.py:708 rcgcdw.py:846 +#: rcgcdw.py:657 +msgid "Battle.net handle" +msgstr "konto Battle.net" + +#: rcgcdw.py:659 rcgcdw.py:797 msgid "Unknown" msgstr "Nieznana" -#: rcgcdw.py:709 +#: rcgcdw.py:660 #, python-brace-format msgid "Edited {target}'s profile" msgstr "Edytowano profil użytkownika {target}" -#: rcgcdw.py:709 +#: rcgcdw.py:660 msgid "Edited their own profile" msgstr "Edytował(a) swój profil" -#: rcgcdw.py:711 +#: rcgcdw.py:662 #, python-brace-format msgid "Cleared the {field} field" msgstr "Wyczyszczono pole {field}" -#: rcgcdw.py:713 +#: rcgcdw.py:664 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "pole \"{field}\" zostało zmienione na: {desc}" -#: rcgcdw.py:717 +#: rcgcdw.py:668 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "Usunął komentarz na profilu użytkownika {target}" -#: rcgcdw.py:721 +#: rcgcdw.py:672 #, python-brace-format msgid "Changed group membership for {target}" msgstr "Zmieniono przynależność do grup dla {target}" -#: rcgcdw.py:725 +#: rcgcdw.py:676 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "{target} automatycznie otrzymał nową grupę użytkownika" -#: rcgcdw.py:740 +#: rcgcdw.py:691 #, python-brace-format msgid "Groups changed from {old_groups} to {new_groups}{reason}" msgstr "Grupy zmienione z {old_groups} do {new_groups}{reason}" -#: rcgcdw.py:745 +#: rcgcdw.py:696 #, python-brace-format msgid "Protected {target}" msgstr "Zabezpieczono {target}" -#: rcgcdw.py:752 +#: rcgcdw.py:703 #, python-brace-format msgid "Changed protection level for {article}" msgstr "Zmieniono poziom zabezpieczeń {article}" -#: rcgcdw.py:759 +#: rcgcdw.py:710 #, python-brace-format msgid "Removed protection from {article}" msgstr "Usunięto zabezpieczenie {article}" -#: rcgcdw.py:764 +#: rcgcdw.py:715 #, python-brace-format msgid "Changed visibility of revision on page {article} " msgid_plural "Changed visibility of {amount} revisions on page {article} " @@ -633,7 +637,7 @@ 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} " -#: rcgcdw.py:770 +#: rcgcdw.py:721 #, python-brace-format msgid "Imported {article} with {count} revision" msgid_plural "Imported {article} with {count} revisions" @@ -641,339 +645,339 @@ msgstr[0] "Zaimportowano {article} z {count} wersją" msgstr[1] "Zaimportowano {article} z {count} wersjami" msgstr[2] "Zaimportowano {article} z {count} wersjami" -#: rcgcdw.py:776 +#: rcgcdw.py:727 #, python-brace-format msgid "Restored {article}" msgstr "Przywrócono {article}" -#: rcgcdw.py:779 +#: rcgcdw.py:730 msgid "Changed visibility of log events" msgstr "Zmieniono widoczność logów" -#: rcgcdw.py:782 +#: rcgcdw.py:733 msgid "Imported interwiki" msgstr "Zaimportowano interwiki" -#: rcgcdw.py:785 +#: rcgcdw.py:736 #, python-brace-format msgid "Edited abuse filter number {number}" msgstr "Edytowano filtr nadużyć numer {number}" -#: rcgcdw.py:788 +#: rcgcdw.py:739 #, python-brace-format msgid "Created abuse filter number {number}" msgstr "Utworzono filtr nadużyć numer {number}" -#: rcgcdw.py:792 +#: rcgcdw.py:743 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "Połączono historie {article} z {dest}" -#: rcgcdw.py:796 +#: rcgcdw.py:747 msgid "Added an entry to the interwiki table" msgstr "Dodano wpis do tabeli interwiki" -#: rcgcdw.py:797 rcgcdw.py:803 +#: rcgcdw.py:748 rcgcdw.py:754 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "Prefix: {prefix}, strona: {website} | {desc}" -#: rcgcdw.py:802 +#: rcgcdw.py:753 msgid "Edited an entry in interwiki table" msgstr "Edytowano wpis interwiki" -#: rcgcdw.py:808 +#: rcgcdw.py:759 msgid "Deleted an entry in interwiki table" msgstr "Usunięto wpis interwiki" -#: rcgcdw.py:809 +#: rcgcdw.py:760 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "Prefix: {prefix} | {desc}" -#: rcgcdw.py:813 +#: rcgcdw.py:764 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "Zmieniono model zawartości {article}" -#: rcgcdw.py:814 +#: rcgcdw.py:765 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Model został zmieniony z {old} na {new}: {reason}" -#: rcgcdw.py:820 +#: rcgcdw.py:771 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Edytowano sprite dla {article}" -#: rcgcdw.py:824 +#: rcgcdw.py:775 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Utworzono sprite sheet dla {article}" -#: rcgcdw.py:828 +#: rcgcdw.py:779 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Edytowano część sprite dla {article}" -#: rcgcdw.py:831 +#: rcgcdw.py:782 #, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "Utworzono tag \"{tag}\"" -#: rcgcdw.py:835 +#: rcgcdw.py:786 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "Usunięto tag \"{tag}\"" -#: rcgcdw.py:839 +#: rcgcdw.py:790 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "Aktywowano tag \"{tag}\"" -#: rcgcdw.py:842 +#: rcgcdw.py:793 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "Dezaktywowano tag \"{tag}\"" -#: rcgcdw.py:845 +#: rcgcdw.py:796 msgid "Action has been hidden by administration." msgstr "Akcja została ukryta przez administrację." -#: rcgcdw.py:872 +#: rcgcdw.py:823 msgid "Tags" msgstr "Tagi" -#: rcgcdw.py:877 +#: rcgcdw.py:828 msgid "**Added**: " msgstr "**Dodane**: " -#: rcgcdw.py:877 +#: rcgcdw.py:828 msgid " and {} more\n" msgstr " oraz {} innych\n" -#: rcgcdw.py:878 +#: rcgcdw.py:829 msgid "**Removed**: " msgstr "**Usunięte**: " -#: rcgcdw.py:878 +#: rcgcdw.py:829 msgid " and {} more" msgstr " oraz {} innych" -#: rcgcdw.py:879 +#: rcgcdw.py:830 msgid "Changed categories" msgstr "Zmienione kategorie" -#: rcgcdw.py:920 +#: rcgcdw.py:849 msgid "~~hidden~~" msgstr "~~ukryte~~" -#: rcgcdw.py:926 +#: rcgcdw.py:855 msgid "hidden" msgstr "ukryte" -#: rcgcdw.py:1000 rcgcdw.py:1002 rcgcdw.py:1004 rcgcdw.py:1006 rcgcdw.py:1008 -#: rcgcdw.py:1010 rcgcdw.py:1012 +#: rcgcdw.py:922 rcgcdw.py:924 rcgcdw.py:926 rcgcdw.py:928 rcgcdw.py:930 +#: rcgcdw.py:932 rcgcdw.py:934 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "{value} (średnio {avg})" -#: rcgcdw.py:1053 +#: rcgcdw.py:975 msgid "Daily overview" msgstr "Podsumowanie dnia" -#: rcgcdw.py:1062 +#: rcgcdw.py:984 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} akcja)" msgstr[1] " ({} akcje)" msgstr[2] " ({} akcji)" -#: rcgcdw.py:1064 +#: rcgcdw.py:986 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} edycja)" msgstr[1] " ({} edycje)" msgstr[2] " ({} edycji)" -#: rcgcdw.py:1069 +#: rcgcdw.py:991 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} akcja)" msgstr[1] " UTC ({} akcje)" msgstr[2] " UTC ({} akcji)" -#: rcgcdw.py:1071 rcgcdw.py:1072 rcgcdw.py:1076 +#: rcgcdw.py:993 rcgcdw.py:994 rcgcdw.py:998 msgid "But nobody came" msgstr "Ale nikt nie przyszedł" -#: rcgcdw.py:1080 +#: rcgcdw.py:1002 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" -#: rcgcdw.py:1081 +#: rcgcdw.py:1003 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" -#: rcgcdw.py:1082 +#: rcgcdw.py:1004 msgid "Edits made" msgstr "Zrobionych edycji" -#: rcgcdw.py:1082 +#: rcgcdw.py:1004 msgid "New files" msgstr "Nowych plików" -#: rcgcdw.py:1082 +#: rcgcdw.py:1004 msgid "Admin actions" msgstr "Akcji administratorskich" -#: rcgcdw.py:1083 +#: rcgcdw.py:1005 msgid "Bytes changed" msgstr "Zmienionych bajtów" -#: rcgcdw.py:1083 +#: rcgcdw.py:1005 msgid "New articles" msgstr "Nowych artykułów" -#: rcgcdw.py:1084 +#: rcgcdw.py:1006 msgid "Unique contributors" msgstr "Unikalnych edytujących" -#: rcgcdw.py:1085 +#: rcgcdw.py:1007 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Najbardziej aktywna godzina" msgstr[1] "Najbardziej aktywne godziny" msgstr[2] "Najbardziej aktywne godziny" -#: rcgcdw.py:1086 +#: rcgcdw.py:1008 msgid "Day score" msgstr "Wynik dnia" -#: rcgcdw.py:1227 +#: rcgcdw.py:1149 #, python-brace-format msgid "Connection to {wiki} seems to be stable now." msgstr "Połączenie z {wiki} wygląda na stabilne." -#: rcgcdw.py:1228 rcgcdw.py:1339 +#: rcgcdw.py:1150 rcgcdw.py:1261 msgid "Connection status" msgstr "Problem z połączeniem" -#: rcgcdw.py:1338 +#: rcgcdw.py:1260 #, python-brace-format msgid "{wiki} seems to be down or unreachable." msgstr "{wiki} nie działa lub jest nieosiągalna." -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "director" msgstr "Dyrektor" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "bot" msgstr "Bot" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "editor" msgstr "Redaktor" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "directors" msgstr "Dyrektorzy" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "sysop" msgstr "Administrator" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "bureaucrat" msgstr "Biurokrata" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "reviewer" msgstr "Przeglądający" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "autoreview" msgstr "Automatycznie przeglądający" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "autopatrol" msgstr "Automatycznie zatwierdzający" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "wiki_guardian" msgstr "Strażnik wiki" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "second" msgid_plural "seconds" msgstr[0] "sekunda" msgstr[1] "sekundy" msgstr[2] "sekund" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "minute" msgid_plural "minutes" msgstr[0] "minuta" msgstr[1] "minuty" msgstr[2] "minut" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "hour" msgid_plural "hours" msgstr[0] "godzina" msgstr[1] "godziny" msgstr[2] "godzin" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "day" msgid_plural "days" msgstr[0] "dzień" msgstr[1] "dni" msgstr[2] "dni" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "week" msgid_plural "weeks" msgstr[0] "tydzień" msgstr[1] "tygodnie" msgstr[2] "tygodni" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "month" msgid_plural "months" msgstr[0] "miesiąc" msgstr[1] "miesiące" msgstr[2] "miesięcy" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "year" msgid_plural "years" msgstr[0] "rok" msgstr[1] "lata" msgstr[2] "lat" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "millennium" msgid_plural "millennia" msgstr[0] "tysiąclecie" msgstr[1] "tysiąclecia" msgstr[2] "tysiącleci" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "decade" msgid_plural "decades" msgstr[0] "dekada" msgstr[1] "dekady" msgstr[2] "dekad" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "century" msgid_plural "centuries" msgstr[0] "stulecie" diff --git a/rcgcdw.pot b/rcgcdw.pot index e59c562..530fa82 100644 --- a/rcgcdw.pot +++ b/rcgcdw.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-20 17:17+0200\n" +"POT-Creation-Date: 2019-05-21 23:49+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,230 +18,230 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: rcgcdw.py:184 +#: rcgcdw.py:133 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" "{edit_size})" msgstr "" -#: rcgcdw.py:186 +#: rcgcdw.py:135 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" "{edit_size})" msgstr "" -#: rcgcdw.py:190 +#: rcgcdw.py:139 #, python-brace-format msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" msgstr "" -#: rcgcdw.py:198 +#: rcgcdw.py:147 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" "{comment}" msgstr "" -#: rcgcdw.py:202 +#: rcgcdw.py:151 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "" -#: rcgcdw.py:207 +#: rcgcdw.py:156 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" "({page_link}){comment}" msgstr "" -#: rcgcdw.py:212 rcgcdw.py:218 +#: rcgcdw.py:161 rcgcdw.py:167 msgid "without making a redirect" msgstr "" -#: rcgcdw.py:212 rcgcdw.py:219 +#: rcgcdw.py:161 rcgcdw.py:168 msgid "with a redirect" msgstr "" -#: rcgcdw.py:213 +#: rcgcdw.py:162 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" "({target_url}) {made_a_redirect}{comment}" msgstr "" -#: rcgcdw.py:220 +#: rcgcdw.py:169 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " "[{target}]({target_url}) {made_a_redirect}{comment}" msgstr "" -#: rcgcdw.py:226 +#: rcgcdw.py:175 #, python-brace-format msgid "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" "* to [{target}]({target_url}){comment}" msgstr "" -#: rcgcdw.py:238 rcgcdw.py:637 +#: rcgcdw.py:187 rcgcdw.py:586 msgid "infinity and beyond" msgstr "" -#: rcgcdw.py:253 +#: rcgcdw.py:202 #, python-brace-format msgid "" "[{author}]({author_url}) blocked [{user}]({user_url}) for {time}{comment}" msgstr "" -#: rcgcdw.py:258 +#: rcgcdw.py:207 #, python-brace-format msgid "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" "({user_url}){comment}" msgstr "" -#: rcgcdw.py:263 +#: rcgcdw.py:212 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" msgstr "" -#: rcgcdw.py:267 +#: rcgcdw.py:216 #, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" msgstr "" -#: rcgcdw.py:267 +#: rcgcdw.py:216 msgid "their own profile" msgstr "" -#: rcgcdw.py:272 +#: rcgcdw.py:221 #, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target} " "profile" msgstr "" -#: rcgcdw.py:275 rcgcdw.py:283 rcgcdw.py:287 +#: rcgcdw.py:224 rcgcdw.py:232 rcgcdw.py:236 msgid "their own" msgstr "" -#: rcgcdw.py:280 +#: rcgcdw.py:229 #, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" msgstr "" -#: rcgcdw.py:285 +#: rcgcdw.py:234 #, python-brace-format msgid "[{author}]({author_url}) deleted a comment on {target} profile" msgstr "" -#: rcgcdw.py:293 rcgcdw.py:684 +#: rcgcdw.py:242 rcgcdw.py:633 msgid "Location" msgstr "" -#: rcgcdw.py:295 rcgcdw.py:686 +#: rcgcdw.py:244 rcgcdw.py:635 msgid "About me" msgstr "" -#: rcgcdw.py:297 rcgcdw.py:688 +#: rcgcdw.py:246 rcgcdw.py:637 msgid "Google link" msgstr "" -#: rcgcdw.py:299 rcgcdw.py:690 +#: rcgcdw.py:248 rcgcdw.py:639 msgid "Facebook link" msgstr "" -#: rcgcdw.py:301 rcgcdw.py:692 +#: rcgcdw.py:250 rcgcdw.py:641 msgid "Twitter link" msgstr "" -#: rcgcdw.py:303 rcgcdw.py:694 +#: rcgcdw.py:252 rcgcdw.py:643 msgid "Reddit link" msgstr "" -#: rcgcdw.py:305 rcgcdw.py:696 +#: rcgcdw.py:254 rcgcdw.py:645 msgid "Twitch link" msgstr "" -#: rcgcdw.py:307 rcgcdw.py:698 +#: rcgcdw.py:256 rcgcdw.py:647 msgid "PSN link" msgstr "" -#: rcgcdw.py:309 rcgcdw.py:700 +#: rcgcdw.py:258 rcgcdw.py:649 msgid "VK link" msgstr "" -#: rcgcdw.py:311 rcgcdw.py:702 +#: rcgcdw.py:260 rcgcdw.py:651 msgid "XVL link" msgstr "" -#: rcgcdw.py:313 rcgcdw.py:704 +#: rcgcdw.py:262 rcgcdw.py:653 msgid "Steam link" msgstr "" -#: rcgcdw.py:315 rcgcdw.py:706 +#: rcgcdw.py:264 rcgcdw.py:655 msgid "Discord handle" msgstr "" -#: rcgcdw.py:317 +#: rcgcdw.py:266 msgid "unknown" msgstr "" -#: rcgcdw.py:318 +#: rcgcdw.py:267 #, python-brace-format msgid "[{target}]({target_url})'s" msgstr "" -#: rcgcdw.py:318 +#: rcgcdw.py:267 #, python-brace-format msgid "[their own]({target_url})" msgstr "" -#: rcgcdw.py:319 +#: rcgcdw.py:268 #, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*" msgstr "" -#: rcgcdw.py:333 rcgcdw.py:335 rcgcdw.py:736 rcgcdw.py:738 +#: rcgcdw.py:282 rcgcdw.py:284 rcgcdw.py:687 rcgcdw.py:689 msgid "none" msgstr "" -#: rcgcdw.py:341 rcgcdw.py:723 +#: rcgcdw.py:290 rcgcdw.py:674 msgid "System" msgstr "" -#: rcgcdw.py:347 +#: rcgcdw.py:296 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " "following settings: {settings}{comment}" msgstr "" -#: rcgcdw.py:349 rcgcdw.py:358 rcgcdw.py:747 rcgcdw.py:754 +#: rcgcdw.py:298 rcgcdw.py:307 rcgcdw.py:698 rcgcdw.py:705 msgid " [cascading]" msgstr "" -#: rcgcdw.py:355 +#: rcgcdw.py:304 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" "({article_url}) to: {settings}{comment}" msgstr "" -#: rcgcdw.py:363 +#: rcgcdw.py:312 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" "{comment}" msgstr "" -#: rcgcdw.py:368 +#: rcgcdw.py:317 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -252,7 +252,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:374 +#: rcgcdw.py:323 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -263,633 +263,637 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:380 +#: rcgcdw.py:329 #, python-brace-format msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" msgstr "" -#: rcgcdw.py:382 +#: rcgcdw.py:331 #, python-brace-format msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "" -#: rcgcdw.py:384 +#: rcgcdw.py:333 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" msgstr "" -#: rcgcdw.py:387 +#: rcgcdw.py:336 #, python-brace-format msgid "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" msgstr "" -#: rcgcdw.py:390 +#: rcgcdw.py:339 #, python-brace-format msgid "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" msgstr "" -#: rcgcdw.py:396 +#: rcgcdw.py:345 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" "({article_url}) into [{dest}]({dest_url}){comment}" msgstr "" -#: rcgcdw.py:400 +#: rcgcdw.py:349 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" "({table_url}) pointing to {website} with {prefix} prefix" msgstr "" -#: rcgcdw.py:406 +#: rcgcdw.py:355 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " "pointing to {website} with {prefix} prefix" msgstr "" -#: rcgcdw.py:412 +#: rcgcdw.py:361 #, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" msgstr "" -#: rcgcdw.py:416 +#: rcgcdw.py:365 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "" -#: rcgcdw.py:421 +#: rcgcdw.py:370 #, python-brace-format msgid "" "[{author}]({author_url}) edited the sprite for [{article}]({article_url})" msgstr "" -#: rcgcdw.py:425 +#: rcgcdw.py:374 #, python-brace-format msgid "" "[{author}]({author_url}) created the sprite sheet for [{article}]" "({article_url})" msgstr "" -#: rcgcdw.py:429 +#: rcgcdw.py:378 #, python-brace-format msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" msgstr "" -#: rcgcdw.py:432 +#: rcgcdw.py:381 #, python-brace-format msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:436 +#: rcgcdw.py:385 #, python-brace-format msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:440 +#: rcgcdw.py:389 #, python-brace-format msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:443 +#: rcgcdw.py:392 #, python-brace-format msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" msgstr "" -#: rcgcdw.py:445 +#: rcgcdw.py:394 msgid "An action has been hidden by administration." msgstr "" -#: rcgcdw.py:454 rcgcdw.py:739 +#: rcgcdw.py:403 rcgcdw.py:690 msgid "No description provided" msgstr "" -#: rcgcdw.py:504 +#: rcgcdw.py:453 msgid "(N!) " msgstr "" -#: rcgcdw.py:505 +#: rcgcdw.py:454 msgid "m " msgstr "" -#: rcgcdw.py:524 rcgcdw.py:529 +#: rcgcdw.py:473 rcgcdw.py:478 msgid "__Only whitespace__" msgstr "" -#: rcgcdw.py:535 +#: rcgcdw.py:484 msgid "Removed" msgstr "" -#: rcgcdw.py:538 +#: rcgcdw.py:487 msgid "Added" msgstr "" -#: rcgcdw.py:564 rcgcdw.py:599 +#: rcgcdw.py:513 rcgcdw.py:548 msgid "Options" msgstr "" -#: rcgcdw.py:564 +#: rcgcdw.py:513 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "" -#: rcgcdw.py:566 +#: rcgcdw.py:515 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "" -#: rcgcdw.py:568 +#: rcgcdw.py:517 #, python-brace-format msgid "Uploaded {name}" msgstr "" -#: rcgcdw.py:584 +#: rcgcdw.py:533 msgid "**No license!**" msgstr "" -#: rcgcdw.py:596 +#: rcgcdw.py:545 msgid "" "\n" "License: {}" msgstr "" -#: rcgcdw.py:599 +#: rcgcdw.py:548 #, python-brace-format msgid "([preview]({link}))" msgstr "" -#: rcgcdw.py:604 +#: rcgcdw.py:553 #, python-brace-format msgid "Deleted page {article}" msgstr "" -#: rcgcdw.py:608 +#: rcgcdw.py:557 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "" -#: rcgcdw.py:613 +#: rcgcdw.py:562 msgid "No redirect has been made" msgstr "" -#: rcgcdw.py:614 +#: rcgcdw.py:563 msgid "A redirect has been made" msgstr "" -#: rcgcdw.py:615 +#: rcgcdw.py:564 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "" -#: rcgcdw.py:619 +#: rcgcdw.py:568 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "" -#: rcgcdw.py:624 +#: rcgcdw.py:573 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "" -#: rcgcdw.py:647 +#: rcgcdw.py:596 #, python-brace-format msgid "Blocked {blocked_user} for {time}" msgstr "" -#: rcgcdw.py:653 +#: rcgcdw.py:602 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "" -#: rcgcdw.py:659 +#: rcgcdw.py:608 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "" -#: rcgcdw.py:663 +#: rcgcdw.py:612 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "" -#: rcgcdw.py:665 +#: rcgcdw.py:614 msgid "Left a comment on their own profile" msgstr "" -#: rcgcdw.py:669 +#: rcgcdw.py:618 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "" -#: rcgcdw.py:671 +#: rcgcdw.py:620 msgid "Replied to a comment on their own profile" msgstr "" -#: rcgcdw.py:675 +#: rcgcdw.py:624 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "" -#: rcgcdw.py:677 +#: rcgcdw.py:626 msgid "Edited a comment on their own profile" msgstr "" -#: rcgcdw.py:708 rcgcdw.py:846 +#: rcgcdw.py:657 +msgid "Battle.net handle" +msgstr "" + +#: rcgcdw.py:659 rcgcdw.py:797 msgid "Unknown" msgstr "" -#: rcgcdw.py:709 +#: rcgcdw.py:660 #, python-brace-format msgid "Edited {target}'s profile" msgstr "" -#: rcgcdw.py:709 +#: rcgcdw.py:660 msgid "Edited their own profile" msgstr "" -#: rcgcdw.py:711 +#: rcgcdw.py:662 #, python-brace-format msgid "Cleared the {field} field" msgstr "" -#: rcgcdw.py:713 +#: rcgcdw.py:664 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "" -#: rcgcdw.py:717 +#: rcgcdw.py:668 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "" -#: rcgcdw.py:721 +#: rcgcdw.py:672 #, python-brace-format msgid "Changed group membership for {target}" msgstr "" -#: rcgcdw.py:725 +#: rcgcdw.py:676 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "" -#: rcgcdw.py:740 +#: rcgcdw.py:691 #, python-brace-format msgid "Groups changed from {old_groups} to {new_groups}{reason}" msgstr "" -#: rcgcdw.py:745 +#: rcgcdw.py:696 #, python-brace-format msgid "Protected {target}" msgstr "" -#: rcgcdw.py:752 +#: rcgcdw.py:703 #, python-brace-format msgid "Changed protection level for {article}" msgstr "" -#: rcgcdw.py:759 +#: rcgcdw.py:710 #, python-brace-format msgid "Removed protection from {article}" msgstr "" -#: rcgcdw.py:764 +#: rcgcdw.py:715 #, 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] "" -#: rcgcdw.py:770 +#: rcgcdw.py:721 #, python-brace-format msgid "Imported {article} with {count} revision" msgid_plural "Imported {article} with {count} revisions" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:776 +#: rcgcdw.py:727 #, python-brace-format msgid "Restored {article}" msgstr "" -#: rcgcdw.py:779 +#: rcgcdw.py:730 msgid "Changed visibility of log events" msgstr "" -#: rcgcdw.py:782 +#: rcgcdw.py:733 msgid "Imported interwiki" msgstr "" -#: rcgcdw.py:785 +#: rcgcdw.py:736 #, python-brace-format msgid "Edited abuse filter number {number}" msgstr "" -#: rcgcdw.py:788 +#: rcgcdw.py:739 #, python-brace-format msgid "Created abuse filter number {number}" msgstr "" -#: rcgcdw.py:792 +#: rcgcdw.py:743 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "" -#: rcgcdw.py:796 +#: rcgcdw.py:747 msgid "Added an entry to the interwiki table" msgstr "" -#: rcgcdw.py:797 rcgcdw.py:803 +#: rcgcdw.py:748 rcgcdw.py:754 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "" -#: rcgcdw.py:802 +#: rcgcdw.py:753 msgid "Edited an entry in interwiki table" msgstr "" -#: rcgcdw.py:808 +#: rcgcdw.py:759 msgid "Deleted an entry in interwiki table" msgstr "" -#: rcgcdw.py:809 +#: rcgcdw.py:760 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "" -#: rcgcdw.py:813 +#: rcgcdw.py:764 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "" -#: rcgcdw.py:814 +#: rcgcdw.py:765 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "" -#: rcgcdw.py:820 +#: rcgcdw.py:771 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "" -#: rcgcdw.py:824 +#: rcgcdw.py:775 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "" -#: rcgcdw.py:828 +#: rcgcdw.py:779 #, python-brace-format msgid "Edited the slice for {article}" msgstr "" -#: rcgcdw.py:831 +#: rcgcdw.py:782 #, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "" -#: rcgcdw.py:835 +#: rcgcdw.py:786 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "" -#: rcgcdw.py:839 +#: rcgcdw.py:790 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "" -#: rcgcdw.py:842 +#: rcgcdw.py:793 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "" -#: rcgcdw.py:845 +#: rcgcdw.py:796 msgid "Action has been hidden by administration." msgstr "" -#: rcgcdw.py:872 +#: rcgcdw.py:823 msgid "Tags" msgstr "" -#: rcgcdw.py:877 +#: rcgcdw.py:828 msgid "**Added**: " msgstr "" -#: rcgcdw.py:877 +#: rcgcdw.py:828 msgid " and {} more\n" msgstr "" -#: rcgcdw.py:878 +#: rcgcdw.py:829 msgid "**Removed**: " msgstr "" -#: rcgcdw.py:878 +#: rcgcdw.py:829 msgid " and {} more" msgstr "" -#: rcgcdw.py:879 +#: rcgcdw.py:830 msgid "Changed categories" msgstr "" -#: rcgcdw.py:920 +#: rcgcdw.py:849 msgid "~~hidden~~" msgstr "" -#: rcgcdw.py:926 +#: rcgcdw.py:855 msgid "hidden" msgstr "" -#: rcgcdw.py:1000 rcgcdw.py:1002 rcgcdw.py:1004 rcgcdw.py:1006 rcgcdw.py:1008 -#: rcgcdw.py:1010 rcgcdw.py:1012 +#: rcgcdw.py:922 rcgcdw.py:924 rcgcdw.py:926 rcgcdw.py:928 rcgcdw.py:930 +#: rcgcdw.py:932 rcgcdw.py:934 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "" -#: rcgcdw.py:1053 +#: rcgcdw.py:975 msgid "Daily overview" msgstr "" -#: rcgcdw.py:1062 +#: rcgcdw.py:984 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1064 +#: rcgcdw.py:986 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1069 +#: rcgcdw.py:991 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1071 rcgcdw.py:1072 rcgcdw.py:1076 +#: rcgcdw.py:993 rcgcdw.py:994 rcgcdw.py:998 msgid "But nobody came" msgstr "" -#: rcgcdw.py:1080 +#: rcgcdw.py:1002 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1081 +#: rcgcdw.py:1003 msgid "Most edited article" msgid_plural "Most edited articles" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1082 +#: rcgcdw.py:1004 msgid "Edits made" msgstr "" -#: rcgcdw.py:1082 +#: rcgcdw.py:1004 msgid "New files" msgstr "" -#: rcgcdw.py:1082 +#: rcgcdw.py:1004 msgid "Admin actions" msgstr "" -#: rcgcdw.py:1083 +#: rcgcdw.py:1005 msgid "Bytes changed" msgstr "" -#: rcgcdw.py:1083 +#: rcgcdw.py:1005 msgid "New articles" msgstr "" -#: rcgcdw.py:1084 +#: rcgcdw.py:1006 msgid "Unique contributors" msgstr "" -#: rcgcdw.py:1085 +#: rcgcdw.py:1007 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1086 +#: rcgcdw.py:1008 msgid "Day score" msgstr "" -#: rcgcdw.py:1227 +#: rcgcdw.py:1149 #, python-brace-format msgid "Connection to {wiki} seems to be stable now." msgstr "" -#: rcgcdw.py:1228 rcgcdw.py:1339 +#: rcgcdw.py:1150 rcgcdw.py:1261 msgid "Connection status" msgstr "" -#: rcgcdw.py:1338 +#: rcgcdw.py:1260 #, python-brace-format msgid "{wiki} seems to be down or unreachable." msgstr "" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "director" msgstr "" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "bot" msgstr "" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "editor" msgstr "" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "directors" msgstr "" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "sysop" msgstr "" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "bureaucrat" msgstr "" -#: rcgcdw.py:1394 +#: rcgcdw.py:1316 msgid "reviewer" msgstr "" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "autoreview" msgstr "" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "autopatrol" msgstr "" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "wiki_guardian" msgstr "" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "second" msgid_plural "seconds" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "minute" msgid_plural "minutes" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "hour" msgid_plural "hours" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "day" msgid_plural "days" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "week" msgid_plural "weeks" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "month" msgid_plural "months" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "year" msgid_plural "years" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "millennium" msgid_plural "millennia" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "decade" msgid_plural "decades" msgstr[0] "" msgstr[1] "" -#: rcgcdw.py:1395 +#: rcgcdw.py:1317 msgid "century" msgid_plural "centuries" msgstr[0] "" From a355818753596aa7384300ac4422b436e38f2106 Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 22 May 2019 00:17:18 +0200 Subject: [PATCH 21/23] Added forgotten profile handle in compact mode --- rcgcdw.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rcgcdw.py b/rcgcdw.py index 3ad178d..9dae985 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -262,6 +262,8 @@ def compact_formatter(action, change, parsed_comment, categories): field = _("Steam link") elif change["logparams"]['4:section'] == "profile-link-discord": field = _("Discord handle") + elif change["logparams"]['4:section'] == "profile-link-battlenet": + field = _("Battle.net handle") else: field = _("unknown") target = _("[{target}]({target_url})'s").format(target=change["title"].split(':')[1], target_url=link) if change["title"].split(':')[1] != author else _("[their own]({target_url})").format(target_url=link) From e7c801cd99fbdf7cdaef45202a185634cb7949ee Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 22 May 2019 20:48:56 +0200 Subject: [PATCH 22/23] Fixed a crash caused by creating a link for removed comment --- rcgcdw.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/rcgcdw.py b/rcgcdw.py index 9dae985..8070d7a 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -665,8 +665,6 @@ def embed_formatter(action, change, parsed_comment, categories): else: parsed_comment = _("{field} field changed to: {desc}").format(field=field, desc=BeautifulSoup(change["parsedcomment"], "lxml").get_text()) elif action == "curseprofile/comment-deleted": - link = "https://{wiki}.gamepedia.com/Special:CommentPermalink/{commentid}".format(wiki=settings["wiki"], - commentid=change["logparams"]["4:comment_id"]) embed["title"] = _("Deleted a comment on {target}'s profile").format(target=change["title"].split(':')[1]) elif action in ("rights/rights", "rights/autopromote"): link = "https://{wiki}.gamepedia.com/User:".format(wiki=settings["wiki"]) + change["title"].split(":")[1].replace(" ", "_") From 5c03ccf59b08cae324148d381bb2a30419578d50 Mon Sep 17 00:00:00 2001 From: Frisk Date: Wed, 22 May 2019 20:54:32 +0200 Subject: [PATCH 23/23] Fixed a crash caused by a fix to a crash --- rcgcdw.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rcgcdw.py b/rcgcdw.py index 8070d7a..f32fef1 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -665,6 +665,11 @@ def embed_formatter(action, change, parsed_comment, categories): else: parsed_comment = _("{field} field changed to: {desc}").format(field=field, desc=BeautifulSoup(change["parsedcomment"], "lxml").get_text()) elif action == "curseprofile/comment-deleted": + if "4:comment_id" in change["logparams"]: + link = "https://{wiki}.gamepedia.com/Special:CommentPermalink/{commentid}".format(wiki=settings["wiki"], + commentid=change["logparams"]["4:comment_id"]) + else: + link = "https://{wiki}.gamepedia.com/{profile}".format(wiki=settings["wiki"], profile=change["title"]) embed["title"] = _("Deleted a comment on {target}'s profile").format(target=change["title"].split(':')[1]) elif action in ("rights/rights", "rights/autopromote"): link = "https://{wiki}.gamepedia.com/User:".format(wiki=settings["wiki"]) + change["title"].split(":")[1].replace(" ", "_")