diff --git a/README.md b/README.md index 152935b..41a0daa 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,6 @@ RcGcDb is a backend for handling webhooks to which recent changes of MediaWiki w ### Dependencies ### * **Python 3.6>** -* requests 2.18.4> * beautifulsoup 4.6.0> * aiohttp 3.6.2> * lxml 4.2.1> diff --git a/locale/de/LC_MESSAGES/discord.mo b/locale/de/LC_MESSAGES/discord.mo new file mode 100644 index 0000000..0130fc1 Binary files /dev/null and b/locale/de/LC_MESSAGES/discord.mo differ diff --git a/locale/de/LC_MESSAGES/discord.po b/locale/de/LC_MESSAGES/discord.po new file mode 100644 index 0000000..723dd77 --- /dev/null +++ b/locale/de/LC_MESSAGES/discord.po @@ -0,0 +1,35 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDd package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: RcGcDd\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-10 16:46+0200\n" +"PO-Revision-Date: 2020-08-10 01:50+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3.1\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/discord.py:25 +msgid "wiki deletion" +msgstr "" + +#: src/discord.py:25 src/discord.py:26 +msgid "wiki becoming inaccessible" +msgstr "" + +#: src/discord.py:27 +msgid "unknown error" +msgstr "" + +#: src/discord.py:28 +msgid "The webhook for {} has been removed due to {}." +msgstr "" diff --git a/locale/de/LC_MESSAGES/discussion_formatters.mo b/locale/de/LC_MESSAGES/discussion_formatters.mo new file mode 100644 index 0000000..89a6dd4 Binary files /dev/null and b/locale/de/LC_MESSAGES/discussion_formatters.mo differ diff --git a/locale/de/LC_MESSAGES/discussion_formatters.po b/locale/de/LC_MESSAGES/discussion_formatters.po new file mode 100644 index 0000000..a17f821 --- /dev/null +++ b/locale/de/LC_MESSAGES/discussion_formatters.po @@ -0,0 +1,171 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-10 16:45+0200\n" +"PO-Revision-Date: 2020-08-10 16:41+0000\n" +"Last-Translator: MarkusRost \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.1.1\n" + +#: src/formatters/discussions.py:21 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}f/p/{threadId}>) " +"in {forumName}" +msgstr "" +"[{author}]({author_url}) erstellte [{title}](<{url}f/p/{threadId}>) in " +"{forumName}" + +#: src/formatters/discussions.py:23 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a poll [{title}](<{url}f/p/" +"{threadId}>) in {forumName}" +msgstr "" +"[{author}]({author_url}) erstellte eine Umfrage [{title}](<{url}f/p/" +"{threadId}>) in {forumName}" + +#: src/formatters/discussions.py:28 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}f/p/{threadId}/r/" +"{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" +"[{author}]({author_url}) erstellte eine [Antwork](<{url}f/p/{threadId}/r/" +"{postId}>) zu [{title}](<{url}f/p/{threadId}>) in {forumName}" + +#: src/formatters/discussions.py:30 src/formatters/discussions.py:38 +#: src/formatters/discussions.py:96 src/formatters/discussions.py:108 +msgid "unknown" +msgstr "Unbekannt" + +#: src/formatters/discussions.py:34 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) erstellte [{title}](<{wikiurl}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) auf der [Nachrichtenseite von {user}]" +"(<{url}wiki/Message_Wall:{user_wall}>)" + +#: src/formatters/discussions.py:36 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) erstellte eine [Antwort](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) auf [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) auf der [Nachrichtenseite von " +"{user}](<{url}wiki/Message_Wall:{user_wall}>)" + +#: src/formatters/discussions.py:40 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a [comment](<{url}wiki/{article}?" +"threadId={threadId}>) on [{article}](<{url}wiki/{article}>)" +msgstr "" +"[{author}]({author_url}) erstellte ein [Kommentar](<{url}wiki/{article}?" +"commentId={commentId}>) zu [{article}](<{url}wiki/{article}>)" + +#: src/formatters/discussions.py:42 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}wiki/{article}?" +"threadId={threadId}) to a [comment](<{url}wiki/{article}?threadId={threadId}" +"#{replyId}>) on [{article}](<{url}wiki/{article}>)" +msgstr "" +"[{author}]({author_url}) erstellte eine [Antwort](<{url}wiki/{article}?" +"threadId={threadId}>) auf ein [Kommentar](<{url}wiki/{article}?" +"commentId={commentId}&replyId={replyId}>) zu [{article}](<{url}wiki/{article}" +">)" + +#: src/formatters/discussions.py:48 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" +"Unbekanntes Event `{event}` von [{author}]({author_url}), melde es auf dem " +"[Support-Server](<{support}>)." + +#: src/formatters/discussions.py:74 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "Erstellte „{title}“" + +#: src/formatters/discussions.py:79 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "Erstellte eine Umfrage „{title}“" + +#: src/formatters/discussions.py:84 +msgid "Option {}" +msgstr "Option {}" + +#: src/formatters/discussions.py:85 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[Bild öffnen]({image_url})__" + +#: src/formatters/discussions.py:93 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "Antwortete auf „{title}“" + +#: src/formatters/discussions.py:102 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "Erstellte „{title}“ auf der Nachrichtenseite von {user}" + +#: src/formatters/discussions.py:106 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "Antwortete auf „{title}“ auf der Nachrichtenseite von {user}" + +#: src/formatters/discussions.py:112 +#, python-brace-format +msgid "Commented on {article}" +msgstr "Kommentierte zu „{article}“" + +#: src/formatters/discussions.py:116 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "Antwortete auf ein Kommentar zu „{article}“" + +#: src/formatters/discussions.py:120 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "Unbekanntes Event `{event}`" + +#: src/formatters/discussions.py:125 src/formatters/discussions.py:127 +msgid "Report this on the support server" +msgstr "Melde es auf dem Support-Server" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) " +#~ "in {forumName}" +#~ msgstr "" +#~ "[{author}]({author_url}) erstellte ein Quiz [{title}](<{url}f/p/{threadId}" +#~ ">) in {forumName}" + +#, python-brace-format +#~ msgid "Created a quiz \"{title}\"" +#~ msgstr "Erstellte ein Quiz „{title}“" diff --git a/locale/de/LC_MESSAGES/discussions.mo b/locale/de/LC_MESSAGES/discussions.mo deleted file mode 100644 index 7e93b3d..0000000 Binary files a/locale/de/LC_MESSAGES/discussions.mo and /dev/null differ diff --git a/locale/de/LC_MESSAGES/discussions.po b/locale/de/LC_MESSAGES/discussions.po deleted file mode 100644 index dc752fa..0000000 --- a/locale/de/LC_MESSAGES/discussions.po +++ /dev/null @@ -1,105 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-04 00:58+0200\n" -"PO-Revision-Date: 2020-07-04 01:04+0200\n" -"Last-Translator: \n" -"Language-Team: \n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: discussions.py:56 -#, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "Antwortete auf „{title}“" - -#: discussions.py:63 discussions.py:79 discussions.py:127 discussions.py:143 -msgid "unknown" -msgstr "Unbekannt" - -#: discussions.py:68 -#, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "Antwortete auf „{title}“ auf der Nachrichtenseite von {user}" - -#: discussions.py:72 -#, python-brace-format -msgid "Created \"{title}\"" -msgstr "Erstellte „{title}“" - -#: discussions.py:86 -#, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "Erstellte „{title}“ auf der Nachrichtenseite von {user}" - -#: discussions.py:99 -#, python-brace-format -msgid "Created a poll titled \"{title}\"" -msgstr "Erstellte eine Umfrage „{title}“" - -#: discussions.py:104 -msgid "Option {}" -msgstr "Option {}" - -#: discussions.py:105 -#, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "__[Bild öffnen]({image_url})__" - -#: discussions.py:121 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}f/p/{threadId}>) " -"in {forumName}" -msgstr "" -"[{author}](<{url}f/u/{creatorId}>) erstellte [{title}](<{url}f/p/{threadId}" -">) in {forumName}" - -#: discussions.py:130 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{wikiurl}wiki/" -"Message_Wall:{user_wall}?threadId={threadid}>) on {user}'s Message Wall" -msgstr "" -"[{author}](<{url}f/u/{creatorId}>) erstellte [{title}](<{wikiurl}wiki/" -"Message_Wall:{user_wall}?threadId={threadid}>) auf der Nachrichtenseite von " -"{user}" - -#: discussions.py:136 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}f/p/{threadId}/r/" -"{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}" -msgstr "" -"[{author}](<{url}f/u/{creatorId}>) erstellte eine [Antwork](<{url}f/p/" -"{threadId}/r/{postId}>) zu [{title}](<{url}f/p/{threadId}>) in {forumName}" - -#: discussions.py:147 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) replied to [{title}](<{wikiurl}wiki/" -"Message_Wall:{user_wall}?threadId={threadid}#{replyId}>) on {user}'s Message " -"Wall" -msgstr "" -"[{author}](<{url}f/u/{creatorId}>) antwortete auf [{title}](<{wikiurl}wiki/" -"Message_Wall:{user_wall}?threadId={threadid}#{replyId}>) auf der " -"Nachrichtenseite von {user}" - -#: discussions.py:153 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created a poll [{title}](<{url}f/p/" -"{threadId}>) in {forumName}" -msgstr "" -"[{author}](<{url}f/u/{creatorId}>) erstellte eine Umfrage [{title}](<{url}f/" -"p/{threadId}>) in {forumName}" diff --git a/locale/de/LC_MESSAGES/misc.mo b/locale/de/LC_MESSAGES/misc.mo index f6d60e5..e1ab7ff 100644 Binary files a/locale/de/LC_MESSAGES/misc.mo and b/locale/de/LC_MESSAGES/misc.mo differ diff --git a/locale/de/LC_MESSAGES/misc.po b/locale/de/LC_MESSAGES/misc.po index 6432d03..abc7653 100644 --- a/locale/de/LC_MESSAGES/misc.po +++ b/locale/de/LC_MESSAGES/misc.po @@ -1,24 +1,83 @@ -# 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:25+0200\n" -"Language-Team: \n" +"POT-Creation-Date: 2020-08-10 00:59+0200\n" +"PO-Revision-Date: 2020-08-03 13:44+0000\n" +"Last-Translator: MarkusRost \n" +"Language-Team: German \n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.1\n" -"Last-Translator: \n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Language: de\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.1.1\n" +"X-Loco-Source-Locale: de_DE\n" +"Generated-By: pygettext.py 1.5\n" +"X-Loco-Parser: loco_parse_po\n" -#: misc.py:76 +#: src/misc.py:96 +msgid "Location" +msgstr "Wohnort" + +#: src/misc.py:96 +msgid "About me" +msgstr "„Über mich“-Abschnitt" + +#: src/misc.py:97 +msgid "Google link" +msgstr "Google-Link" + +#: src/misc.py:97 +msgid "Facebook link" +msgstr "Facebook-Link" + +#: src/misc.py:98 +msgid "Twitter link" +msgstr "Twitter-Link" + +#: src/misc.py:98 +msgid "Reddit link" +msgstr "Reddit-Link" + +#: src/misc.py:99 +msgid "Twitch link" +msgstr "Twitch-Link" + +#: src/misc.py:99 +msgid "PSN link" +msgstr "PSN-Link" + +#: src/misc.py:100 +msgid "VK link" +msgstr "VK-Link" + +#: src/misc.py:100 +msgid "XBL link" +msgstr "Xbox-Live-Link" + +#: src/misc.py:101 +msgid "Steam link" +msgstr "Steam-Link" + +#: src/misc.py:101 +msgid "Discord handle" +msgstr "Discord-Link" + +#: src/misc.py:102 +msgid "Battle.net handle" +msgstr "Battle.net-Link" + +#: src/misc.py:108 +msgid "Unknown" +msgstr "Unbekannt" + +#: src/misc.py:110 +msgid "unknown" +msgstr "unbekannt" + +#: src/misc.py:121 msgid "" "\n" "__And more__" diff --git a/locale/de/LC_MESSAGES/rc_formatters.mo b/locale/de/LC_MESSAGES/rc_formatters.mo new file mode 100644 index 0000000..c1d5651 Binary files /dev/null and b/locale/de/LC_MESSAGES/rc_formatters.mo differ diff --git a/locale/de/LC_MESSAGES/rcgcdw.po b/locale/de/LC_MESSAGES/rc_formatters.po similarity index 71% rename from locale/de/LC_MESSAGES/rcgcdw.po rename to locale/de/LC_MESSAGES/rc_formatters.po index 11946c4..4e8e39c 100644 --- a/locale/de/LC_MESSAGES/rcgcdw.po +++ b/locale/de/LC_MESSAGES/rc_formatters.po @@ -2,80 +2,122 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-03-17 20:53+0100\n" -"PO-Revision-Date: 2020-04-23 23:25+0200\n" -"Last-Translator: Frisk \n" +"POT-Creation-Date: 2020-08-10 16:45+0200\n" +"PO-Revision-Date: 2020-08-10 16:41+0000\n" +"Last-Translator: MarkusRost \n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.1.1\n" "X-Loco-Source-Locale: de_DE\n" "Generated-By: pygettext.py 1.5\n" -"X-Generator: Lokalize 19.12.3\n" "X-Loco-Parser: loco_parse_po\n" -#: rcgcdw.py:71 -msgid "Location" -msgstr "Wohnort" +#: src/formatters/rc.py:19 +msgid "director" +msgstr "Direktor" -#: rcgcdw.py:71 -msgid "About me" -msgstr "„Über mich“-Abschnitt" +#: src/formatters/rc.py:19 +msgid "bot" +msgstr "Bot" -#: rcgcdw.py:71 -msgid "Google link" -msgstr "Google-Link" +#: src/formatters/rc.py:19 +msgid "editor" +msgstr "editor" -#: rcgcdw.py:71 -msgid "Facebook link" -msgstr "Facebook-Link" +#: src/formatters/rc.py:19 +msgid "directors" +msgstr "Direktor" -#: rcgcdw.py:71 -msgid "Twitter link" -msgstr "Twitter-Link" +#: src/formatters/rc.py:19 +msgid "sysop" +msgstr "Administrator" -#: rcgcdw.py:71 -msgid "Reddit link" -msgstr "Reddit-Link" +#: src/formatters/rc.py:19 +msgid "bureaucrat" +msgstr "Bürokrat" -#: rcgcdw.py:71 -msgid "Twitch link" -msgstr "Twitch-Link" +#: src/formatters/rc.py:19 +msgid "reviewer" +msgstr "Prüfer" -#: rcgcdw.py:71 -msgid "PSN link" -msgstr "PSN-Link" +#: src/formatters/rc.py:20 +msgid "autoreview" +msgstr "Passive Sichter" -#: rcgcdw.py:71 -msgid "VK link" -msgstr "VK-Link" +#: src/formatters/rc.py:20 +msgid "autopatrol" +msgstr "autopatrol" -#: rcgcdw.py:71 -msgid "XBL link" -msgstr "Xbox-Live-Link" +#: src/formatters/rc.py:20 +msgid "wiki_guardian" +msgstr "Wiki Guardian" -#: rcgcdw.py:71 -msgid "Steam link" -msgstr "Steam-Link" +#: src/formatters/rc.py:20 +msgid "second" +msgid_plural "seconds" +msgstr[0] "Sekunde" +msgstr[1] "Sekunden" -#: rcgcdw.py:71 -msgid "Discord handle" -msgstr "Discord-Link" +#: src/formatters/rc.py:20 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "Minute" +msgstr[1] "Minuten" -#: rcgcdw.py:71 -msgid "Battle.net handle" -msgstr "Battle.net-Link" +#: src/formatters/rc.py:20 +msgid "hour" +msgid_plural "hours" +msgstr[0] "Stunde" +msgstr[1] "Stunden" -#: rcgcdw.py:172 rcgcdw.py:924 -msgid "Unknown" -msgstr "Unbekannt" +#: src/formatters/rc.py:20 +msgid "day" +msgid_plural "days" +msgstr[0] "Tag" +msgstr[1] "Tage" -#: rcgcdw.py:174 -msgid "unknown" -msgstr "unbekannt" +#: src/formatters/rc.py:20 +msgid "week" +msgid_plural "weeks" +msgstr[0] "Woche" +msgstr[1] "Wochen" -#: rcgcdw.py:244 +#: src/formatters/rc.py:20 +msgid "month" +msgid_plural "months" +msgstr[0] "Monat" +msgstr[1] "Monate" + +#: src/formatters/rc.py:20 +msgid "year" +msgid_plural "years" +msgstr[0] "Jahr" +msgstr[1] "Jahre" + +#: src/formatters/rc.py:20 +msgid "millennium" +msgid_plural "millennia" +msgstr[0] "Jahrtausend" +msgstr[1] "Jahrtausende" + +#: src/formatters/rc.py:20 +msgid "decade" +msgid_plural "decades" +msgstr[0] "Jahrzehnt" +msgstr[1] "Jahrzehnte" + +#: src/formatters/rc.py:20 +msgid "century" +msgid_plural "centuries" +msgstr[0] "Jahrhundert" +msgstr[1] "Jahrhunderte" + +#: src/formatters/rc.py:52 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" @@ -84,7 +126,7 @@ msgstr "" "[{author}]({author_url}) bearbeitete [{article}]({edit_link}){comment} " "({sign}{edit_size})" -#: rcgcdw.py:246 +#: src/formatters/rc.py:54 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" @@ -93,12 +135,12 @@ msgstr "" "[{author}]({author_url}) erstellte [{article}]({edit_link}){comment} ({sign}" "{edit_size})" -#: rcgcdw.py:249 +#: src/formatters/rc.py:57 #, python-brace-format msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" msgstr "[{author}]({author_url}) lud [{file}]({file_link}) hoch{comment}" -#: rcgcdw.py:256 +#: src/formatters/rc.py:64 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" @@ -106,7 +148,7 @@ msgstr "" "[{author}]({author_url}) setzte [{file}]({file_link}) auf eine alte Version " "zurück{comment}" -#: rcgcdw.py:260 +#: src/formatters/rc.py:68 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -115,12 +157,12 @@ msgstr "" "[{author}]({author_url}) lud eine neue Version von [{file}]({file_link}) " "hoch{comment}" -#: rcgcdw.py:263 +#: src/formatters/rc.py:71 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" msgstr "[{author}]({author_url}) löschte [{page}]({page_link}){comment}" -#: rcgcdw.py:267 +#: src/formatters/rc.py:75 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -129,15 +171,15 @@ msgstr "" "[{author}]({author_url}) löschte die Weiterleitung [{page}]({page_link}) " "durch Überschreiben{comment}" -#: rcgcdw.py:271 rcgcdw.py:276 +#: src/formatters/rc.py:79 src/formatters/rc.py:84 msgid "without making a redirect" msgstr "ohne eine Weiterleitung zu erstellen" -#: rcgcdw.py:271 rcgcdw.py:277 +#: src/formatters/rc.py:79 src/formatters/rc.py:85 msgid "with a redirect" msgstr "und erstellte eine Weiterleitung" -#: rcgcdw.py:272 +#: src/formatters/rc.py:80 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" @@ -146,7 +188,7 @@ msgstr "" "[{author}]({author_url}) verschob {redirect}*{article}* nach [{target}]" "({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:278 +#: src/formatters/rc.py:86 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " @@ -155,7 +197,7 @@ msgstr "" "[{author}]({author_url}) verschob {redirect}*{article}* nach [{target}]" "({target_url}) und überschrieb eine Weiterleitung {made_a_redirect}{comment}" -#: rcgcdw.py:283 +#: src/formatters/rc.py:91 #, python-brace-format msgid "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" @@ -164,32 +206,41 @@ msgstr "" "[{author}]({author_url}) verschob die Schutzeinstellungen von {redirect}" "*{article}* nach [{target}]({target_url}){comment}" -#: rcgcdw.py:294 rcgcdw.py:699 -msgid "infinity and beyond" -msgstr "alle Ewigkeit" +#: src/formatters/rc.py:102 src/formatters/rc.py:481 +msgid "for infinity and beyond" +msgstr "für alle Ewigkeit" -#: rcgcdw.py:311 +#: src/formatters/rc.py:112 src/formatters/rc.py:489 +#, python-brace-format +msgid "for {num} {translated_length}" +msgstr "für {num} {translated_length}" + +#: src/formatters/rc.py:120 src/formatters/rc.py:492 +msgid "until {}" +msgstr "bis {}" + +#: src/formatters/rc.py:124 msgid " on pages: " msgstr " auf Seiten: " -#: rcgcdw.py:318 rcgcdw.py:719 +#: src/formatters/rc.py:131 src/formatters/rc.py:503 msgid " and namespaces: " msgstr " und Namensräumen: " -#: rcgcdw.py:320 +#: src/formatters/rc.py:133 msgid " on namespaces: " msgstr " in Namensräumen: " -#: rcgcdw.py:332 +#: src/formatters/rc.py:145 #, python-brace-format msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) for {time}" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" "{restriction_desc}{comment}" msgstr "" -"[{author}]({author_url}) sperrte [{user}]({user_url}) für {time}" +"[{author}]({author_url}) sperrte [{user}]({user_url}) {time}" "{restriction_desc}{comment}" -#: rcgcdw.py:336 +#: src/formatters/rc.py:149 #, python-brace-format msgid "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" @@ -198,7 +249,7 @@ msgstr "" "[{author}]({author_url}) änderte die Sperreinstellungen für [{blocked_user}]" "({user_url}){comment}" -#: rcgcdw.py:340 +#: src/formatters/rc.py:153 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" @@ -206,7 +257,7 @@ msgstr "" "[{author}]({author_url}) hob die Sperre von [{blocked_user}]({user_url}) " "auf{comment}" -#: rcgcdw.py:343 +#: src/formatters/rc.py:156 #, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" @@ -214,11 +265,11 @@ msgstr "" "[{author}]({author_url}) hinterließ ein [Kommentar]({comment}) auf dem " "Profil von {target}" -#: rcgcdw.py:343 +#: src/formatters/rc.py:156 msgid "their own profile" msgstr "das eigene Profil" -#: rcgcdw.py:346 +#: src/formatters/rc.py:159 #, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target} " @@ -227,11 +278,12 @@ msgstr "" "[{author}]({author_url}) antwortete auf ein [Kommentar]({comment}) auf dem " "Profil von {target}" -#: rcgcdw.py:349 rcgcdw.py:355 rcgcdw.py:366 rcgcdw.py:370 +#: src/formatters/rc.py:162 src/formatters/rc.py:168 src/formatters/rc.py:179 +#: src/formatters/rc.py:183 msgid "their own" msgstr "sich selbst" -#: rcgcdw.py:352 +#: src/formatters/rc.py:165 #, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" @@ -239,46 +291,46 @@ msgstr "" "[{author}]({author_url}) bearbeitete ein [Kommentar]({comment}) auf dem " "Profil von {target}" -#: rcgcdw.py:358 +#: src/formatters/rc.py:171 #, python-brace-format -#| msgid "[{author}]({author_url}) deleted a comment on {target} profile" msgid "[{author}]({author_url}) purged a comment on {target} profile" msgstr "" -"[{author}]({author_url}) löschte ein Kommentar auf dem Profil von {target}" -" dauerhaft" +"[{author}]({author_url}) löschte ein Kommentar auf dem Profil von {target} " +"dauerhaft" -#: rcgcdw.py:368 +#: src/formatters/rc.py:181 #, 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:374 +#: src/formatters/rc.py:187 #, python-brace-format msgid "[{target}]({target_url})'s" msgstr "dem Profil von [{target}]({target_url})" -#: rcgcdw.py:374 +#: src/formatters/rc.py:187 #, python-brace-format msgid "[their own]({target_url})" msgstr "dem [eigenen Profil]({target_url})" -#: rcgcdw.py:375 +#: src/formatters/rc.py:188 #, 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:389 rcgcdw.py:391 rcgcdw.py:800 rcgcdw.py:802 +#: src/formatters/rc.py:202 src/formatters/rc.py:204 src/formatters/rc.py:581 +#: src/formatters/rc.py:583 msgid "none" msgstr "keine" -#: rcgcdw.py:397 rcgcdw.py:787 +#: src/formatters/rc.py:210 src/formatters/rc.py:568 msgid "System" msgstr "System" -#: rcgcdw.py:402 +#: src/formatters/rc.py:215 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " @@ -287,11 +339,12 @@ msgstr "" "[{author}]({author_url}) schützte [{article}]({article_url}) {settings}" "{comment}" -#: rcgcdw.py:404 rcgcdw.py:412 rcgcdw.py:810 rcgcdw.py:816 +#: src/formatters/rc.py:217 src/formatters/rc.py:225 src/formatters/rc.py:591 +#: src/formatters/rc.py:597 msgid " [cascading]" msgstr " [kaskadierend]" -#: rcgcdw.py:409 +#: src/formatters/rc.py:222 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" @@ -300,7 +353,7 @@ msgstr "" "[{author}]({author_url}) änderte den Schutzstatus von [{article}]" "({article_url}) {settings}{comment}" -#: rcgcdw.py:416 +#: src/formatters/rc.py:229 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" @@ -309,7 +362,7 @@ msgstr "" "[{author}]({author_url}) entfernte den Schutz von [{article}]({article_url})" "{comment}" -#: rcgcdw.py:420 +#: src/formatters/rc.py:233 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -324,7 +377,7 @@ msgstr[1] "" "[{author}]({author_url}) änderte die Sichtbarkeit von {amount} Versionen von " "[{article}]({article_url}){comment}" -#: rcgcdw.py:425 +#: src/formatters/rc.py:238 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -339,40 +392,40 @@ msgstr[1] "" "[{author}]({author_url}) importierte [{article}]({article_url}) mit {count} " "Versionen{comment}" -#: rcgcdw.py:430 +#: src/formatters/rc.py:243 #, 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:432 +#: src/formatters/rc.py:245 #, 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:434 +#: src/formatters/rc.py:247 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" msgstr "[{author}]({author_url}) importierte Interwiki{comment}" -#: rcgcdw.py:437 +#: src/formatters/rc.py:250 #, 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:440 +#: src/formatters/rc.py:254 #, 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:444 +#: src/formatters/rc.py:258 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -381,7 +434,35 @@ msgstr "" "[{author}]({author_url}) vereinigte Versionen von [{article}]({article_url}) " "in [{dest}]({dest_url}){comment}" -#: rcgcdw.py:448 +#: src/formatters/rc.py:261 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "Konto [{author}]({author_url}) wurde automtisch erstellt" + +#: src/formatters/rc.py:263 src/formatters/rc.py:271 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "Konto [{author}]({author_url}) wurde erstellt" + +#: src/formatters/rc.py:266 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" +"Konto [{article}]({article_url}) wurde von [{author}]({author_url}) " +"erstellt{comment}" + +#: src/formatters/rc.py:269 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" +"Konto [{article}]({article_url}) wurde von [{author}]({author_url}) erstellt " +"und das Passwort wurde per E-Mail zugesandt{comment}" + +#: src/formatters/rc.py:274 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -390,7 +471,7 @@ msgstr "" "[{author}]({author_url}) erstellte den [Interwiki-Präfix]({table_url}) " "{prefix} nach {website}" -#: rcgcdw.py:454 +#: src/formatters/rc.py:280 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -399,13 +480,13 @@ msgstr "" "[{author}]({author_url}) bearbeitete den [Interwiki-Präfix]({table_url}) " "{prefix} nach {website}" -#: rcgcdw.py:460 +#: src/formatters/rc.py:286 #, 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:463 +#: src/formatters/rc.py:289 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -414,14 +495,14 @@ msgstr "" "[{author}]({author_url}) änderte das Inhaltsmodell der Seite [{article}]" "({article_url}) von {old} zu {new}{comment}" -#: rcgcdw.py:467 +#: src/formatters/rc.py:293 #, 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})" +"[{author}]({author_url}) änderte das Sprite für [{article}]({article_url})" -#: rcgcdw.py:470 +#: src/formatters/rc.py:296 #, python-brace-format msgid "" "[{author}]({author_url}) created the sprite sheet for [{article}]" @@ -430,645 +511,535 @@ msgstr "" "[{author}]({author_url}) erstellte das Sprite-sheet für [{article}]" "({article_url})" -#: rcgcdw.py:473 +#: src/formatters/rc.py:299 #, 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})" +"[{author}]({author_url}) änderte das Stück für [{article}]({article_url})" -#: rcgcdw.py:478 +#: src/formatters/rc.py:302 #, python-brace-format msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) erstellte die Cargo-Tabelle „{table}“" -#: rcgcdw.py:480 +#: src/formatters/rc.py:304 #, python-brace-format msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) löschte die Cargo-Tabelle „{table}“" -#: rcgcdw.py:485 +#: src/formatters/rc.py:307 #, python-brace-format msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) erstellte die Cargo-Tabelle „{table}“ neu" -#: rcgcdw.py:490 +#: src/formatters/rc.py:310 #, python-brace-format msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) ersetzte die Cargo-Tabelle „{table}“" -#: rcgcdw.py:493 +#: src/formatters/rc.py:313 #, 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:497 +#: src/formatters/rc.py:317 #, 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:501 +#: src/formatters/rc.py:321 #, 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:504 +#: src/formatters/rc.py:324 #, 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:506 +#: src/formatters/rc.py:326 msgid "An action has been hidden by administration." msgstr "Eine Aktion wurde versteckt." -#: rcgcdw.py:515 rcgcdw.py:803 +#: src/formatters/rc.py:332 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" +"Unbekanntes Event `{event}` von [{author}]({author_url}), melde es auf dem " +"[Support-Server](<{support}>)." + +#: src/formatters/rc.py:348 src/formatters/rc.py:584 msgid "No description provided" msgstr "Keine Zusammenfassung angegeben" -#: rcgcdw.py:563 +#: src/formatters/rc.py:375 msgid "(N!) " msgstr "(N!) " -#: rcgcdw.py:564 +#: src/formatters/rc.py:376 msgid "m" msgstr "K" -#: rcgcdw.py:564 +#: src/formatters/rc.py:376 msgid "b" msgstr "B" -#: rcgcdw.py:583 rcgcdw.py:588 +#: src/formatters/rc.py:393 src/formatters/rc.py:398 msgid "__Only whitespace__" msgstr "__Nur Leerraum__" -#: rcgcdw.py:594 +#: src/formatters/rc.py:403 msgid "Removed" msgstr "Entfernt" -#: rcgcdw.py:597 +#: src/formatters/rc.py:405 msgid "Added" msgstr "Hinzugefügt" -#: rcgcdw.py:631 rcgcdw.py:669 +#: src/formatters/rc.py:439 src/formatters/rc.py:450 msgid "Options" msgstr "Optionen" -#: rcgcdw.py:631 +#: src/formatters/rc.py:439 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "([Vorschau]({link}) | [zurücksetzen]({undolink}))" -#: rcgcdw.py:634 +#: src/formatters/rc.py:444 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "Neue Dateiversion {name}" -#: rcgcdw.py:636 +#: src/formatters/rc.py:446 #, python-brace-format msgid "Reverted a version of {name}" msgstr "Setzte {name} auf eine alte Version zurück" -#: rcgcdw.py:638 +#: src/formatters/rc.py:448 #, python-brace-format msgid "Uploaded {name}" msgstr "Neue Datei {name}" -#: rcgcdw.py:654 -msgid "**No license!**" -msgstr "**Keine Lizenz!**" - -#: rcgcdw.py:666 -msgid "" -"\n" -"License: {}" -msgstr "" -"\n" -"Lizenz: {}" - -#: rcgcdw.py:669 +#: src/formatters/rc.py:450 #, python-brace-format msgid "([preview]({link}))" msgstr "([Vorschau]({link}))" -#: rcgcdw.py:673 +#: src/formatters/rc.py:455 #, python-brace-format msgid "Deleted page {article}" msgstr "Löschte {article}" -#: rcgcdw.py:676 +#: src/formatters/rc.py:458 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "Löschte die Weiterleitung {article} um Platz zu machen" -#: rcgcdw.py:680 +#: src/formatters/rc.py:462 msgid "No redirect has been made" msgstr "Die Erstellung einer Weiterleitung wurde unterdrückt" -#: rcgcdw.py:681 +#: src/formatters/rc.py:463 msgid "A redirect has been made" msgstr "Eine Weiterleitung wurde erstellt" -#: rcgcdw.py:682 +#: src/formatters/rc.py:464 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "Verschob {redirect}{article} nach {target}" -#: rcgcdw.py:685 +#: src/formatters/rc.py:467 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "" "Verschob {redirect}{article} nach {title} und überschrieb eine Weiterleitung" -#: rcgcdw.py:689 +#: src/formatters/rc.py:471 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "Verschob die Schutzeinstellungen von {redirect}{article} nach {title}" -#: rcgcdw.py:712 +#: src/formatters/rc.py:496 msgid "Blocked from editing the following pages: " msgstr "Bearbeiten von folgenden Seiten gesperrt: " -#: rcgcdw.py:721 +#: src/formatters/rc.py:505 msgid "Blocked from editing pages on following namespaces: " msgstr "Bearbeiten von Seiten in folgenden Namensräumen gesperrt: " -#: rcgcdw.py:735 +#: src/formatters/rc.py:516 msgid "Partial block details" msgstr "Teilweise Sperre" -#: rcgcdw.py:736 +#: src/formatters/rc.py:517 #, python-brace-format -msgid "Blocked {blocked_user} for {time}" -msgstr "Sperrte {blocked_user} für {time}" +msgid "Blocked {blocked_user} {time}" +msgstr "Sperrte {blocked_user} {time}" -#: rcgcdw.py:740 +#: src/formatters/rc.py:521 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "Änderte die Sperreinstellungen für {blocked_user}" -#: rcgcdw.py:744 +#: src/formatters/rc.py:525 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "Hob die Sperre von {blocked_user} auf" -#: rcgcdw.py:749 +#: src/formatters/rc.py:530 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "Hinterließ ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:751 +#: src/formatters/rc.py:532 msgid "Left a comment on their own profile" msgstr "Hinterließ ein Kommentar auf dem eigenen Profil" -#: rcgcdw.py:756 +#: src/formatters/rc.py:537 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "Antwortete auf ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:758 +#: src/formatters/rc.py:539 msgid "Replied to a comment on their own profile" msgstr "Antwortete auf ein Kommentar auf dem eigenen Profil" -#: rcgcdw.py:763 +#: src/formatters/rc.py:544 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "Bearbeitete ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:765 +#: src/formatters/rc.py:546 msgid "Edited a comment on their own profile" msgstr "Bearbeitete ein Kommentar auf dem eigenen Profil" -#: rcgcdw.py:768 +#: src/formatters/rc.py:549 #, python-brace-format msgid "Edited {target}'s profile" msgstr "Bearbeitete das Profil von {target}" -#: rcgcdw.py:768 +#: src/formatters/rc.py:549 msgid "Edited their own profile" msgstr "Bearbeitete das eigene Profil" -#: rcgcdw.py:770 +#: src/formatters/rc.py:551 #, python-brace-format msgid "Cleared the {field} field" msgstr "Entfernte den {field}" -#: rcgcdw.py:772 +#: src/formatters/rc.py:553 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "{field} geändert zu: {desc}" -#: rcgcdw.py:775 +#: src/formatters/rc.py:556 #, python-brace-format msgid "Purged a comment on {target}'s profile" msgstr "Löschte ein Kommentar auf dem Profil von {target} dauerhaft" -#: rcgcdw.py:781 +#: src/formatters/rc.py:562 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "Löschte ein Kommentar auf dem Profil von {target}" -#: rcgcdw.py:785 +#: src/formatters/rc.py:566 #, python-brace-format msgid "Changed group membership for {target}" msgstr "Änderte die Gruppenzugehörigkeit von {target}" -#: rcgcdw.py:789 +#: src/formatters/rc.py:570 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" -msgstr "{target} got autopromoted to a new usergroup" +msgstr "{target} wurde automatisch einer neuen Benutzergruppe zugeordnet" -#: rcgcdw.py:804 +#: src/formatters/rc.py:585 #, 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:808 +#: src/formatters/rc.py:589 #, python-brace-format msgid "Protected {target}" msgstr "Schützte {target}" -#: rcgcdw.py:814 +#: src/formatters/rc.py:595 #, python-brace-format msgid "Changed protection level for {article}" msgstr "Änderte den Schutzstatus von {article}" -#: rcgcdw.py:820 +#: src/formatters/rc.py:601 #, python-brace-format msgid "Removed protection from {article}" msgstr "Entfernte den Schutz von {article}" -#: rcgcdw.py:824 +#: src/formatters/rc.py:605 #, 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:829 +#: src/formatters/rc.py:610 #, 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:834 +#: src/formatters/rc.py:615 #, python-brace-format msgid "Restored {article}" msgstr "Stellte {article} wieder her" -#: rcgcdw.py:837 +#: src/formatters/rc.py:618 msgid "Changed visibility of log events" msgstr "Änderte die Sichtbarkeit eines Logbucheintrags" -#: rcgcdw.py:840 +#: src/formatters/rc.py:621 msgid "Imported interwiki" msgstr "Importierte Interwiki" -#: rcgcdw.py:843 +#: src/formatters/rc.py:624 #, python-brace-format msgid "Edited abuse filter number {number}" msgstr "Änderte Missbrauchsfilter {number}" -#: rcgcdw.py:846 +#: src/formatters/rc.py:627 #, python-brace-format msgid "Created abuse filter number {number}" msgstr "Erstellte Missbrauchsfilter {number}" -#: rcgcdw.py:849 +#: src/formatters/rc.py:630 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "Vereinigte Versionen von {article} in {dest}" -#: rcgcdw.py:853 +#: src/formatters/rc.py:634 +msgid "Created account automatically" +msgstr "Erstellte Konto automatisch" + +#: src/formatters/rc.py:637 src/formatters/rc.py:646 +msgid "Created account" +msgstr "Erstellte Konto" + +#: src/formatters/rc.py:640 +#, python-brace-format +msgid "Created account {article}" +msgstr "Erstellte Konto {article}" + +#: src/formatters/rc.py:643 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "Erstellte Konto {article} und das Passwort wurde per E-Mail zugesandt" + +#: src/formatters/rc.py:649 msgid "Added an entry to the interwiki table" msgstr "Fügte ein Interwiki-Präfix hinzu" -#: rcgcdw.py:854 rcgcdw.py:860 +#: src/formatters/rc.py:650 src/formatters/rc.py:656 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "Präfix: {prefix}, URL: {website} | {desc}" -#: rcgcdw.py:859 +#: src/formatters/rc.py:655 msgid "Edited an entry in interwiki table" msgstr "Änderte ein Interwiki-Präfix" -#: rcgcdw.py:865 +#: src/formatters/rc.py:661 msgid "Deleted an entry in interwiki table" msgstr "Entfernte ein Interwiki-Präfix" -#: rcgcdw.py:866 +#: src/formatters/rc.py:662 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "Präfix: {prefix} | {desc}" -#: rcgcdw.py:869 +#: src/formatters/rc.py:665 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "Änderte das Inhaltsmodell von {article}" -#: rcgcdw.py:870 +#: src/formatters/rc.py:666 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Modell geändert von {old} zu {new}: {reason}" -#: rcgcdw.py:875 +#: src/formatters/rc.py:671 #, python-brace-format msgid "Edited the sprite for {article}" -msgstr "Edited the sprite for {article}" +msgstr "Änderte das Sprite für {article}" -#: rcgcdw.py:878 +#: src/formatters/rc.py:674 #, python-brace-format msgid "Created the sprite sheet for {article}" -msgstr "Created the sprite sheet for {article}" +msgstr "Erstellte das Sprite-sheet für {article}" -#: rcgcdw.py:881 +#: src/formatters/rc.py:677 #, python-brace-format msgid "Edited the slice for {article}" -msgstr "Edited the slice for {article}" +msgstr "Änderte das Stück für {article}" -#: rcgcdw.py:887 +#: src/formatters/rc.py:681 #, python-brace-format msgid "Created the Cargo table \"{table}\"" msgstr "Erstellte die Cargo-Tabelle „{table}“" -#: rcgcdw.py:891 +#: src/formatters/rc.py:685 #, python-brace-format msgid "Deleted the Cargo table \"{table}\"" msgstr "Löschte die Cargo-Tabelle „{table}“" -#: rcgcdw.py:898 +#: src/formatters/rc.py:690 #, python-brace-format msgid "Recreated the Cargo table \"{table}\"" msgstr "Erstellte die Cargo-Tabelle „{table}“ neu" -#: rcgcdw.py:905 +#: src/formatters/rc.py:695 #, python-brace-format msgid "Replaced the Cargo table \"{table}\"" msgstr "Ersetzte die Cargo-Tabelle „{table}“" -#: rcgcdw.py:909 +#: src/formatters/rc.py:699 #, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "Erstellte die Markierung „{tag}“" -#: rcgcdw.py:913 +#: src/formatters/rc.py:703 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "Löschte die Markierung „{tag}“" -#: rcgcdw.py:917 +#: src/formatters/rc.py:707 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "Aktivierte die Markierung „{tag}“" -#: rcgcdw.py:920 +#: src/formatters/rc.py:710 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "Deaktivierte die Markierung „{tag}“" -#: rcgcdw.py:923 +#: src/formatters/rc.py:713 +#, fuzzy msgid "Action has been hidden by administration." msgstr "Aktion wurde versteckt" -#: rcgcdw.py:951 +#: src/formatters/rc.py:714 +msgid "Unknown" +msgstr "Unbekannt" + +#: src/formatters/rc.py:718 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "Unbekanntes Event `{event}`" + +#: src/formatters/rc.py:723 src/formatters/rc.py:725 +msgid "Report this on the support server" +msgstr "Melde es auf dem Support-Server" + +#: src/formatters/rc.py:742 msgid "Tags" msgstr "Markierungen" -#: rcgcdw.py:956 +#: src/formatters/rc.py:745 msgid "**Added**: " msgstr "**Hinzugefügt:** " -#: rcgcdw.py:956 +#: src/formatters/rc.py:745 msgid " and {} more\n" msgstr " und {} mehr\n" -#: rcgcdw.py:957 +#: src/formatters/rc.py:746 msgid "**Removed**: " msgstr "**Entfernt:** " -#: rcgcdw.py:957 +#: src/formatters/rc.py:746 msgid " and {} more" msgstr " und {} mehr" -#: rcgcdw.py:958 +#: src/formatters/rc.py:747 msgid "Changed categories" msgstr "Geänderte Kategorien" -#: rcgcdw.py:977 -msgid "~~hidden~~" -msgstr "~~versteckt~~" - -#: rcgcdw.py:983 -msgid "hidden" -msgstr "versteckt" - -#: rcgcdw.py:1050 rcgcdw.py:1052 rcgcdw.py:1054 rcgcdw.py:1056 rcgcdw.py:1058 -#: rcgcdw.py:1060 rcgcdw.py:1062 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "{value} (vgl. {avg})" -#: rcgcdw.py:1086 rcgcdw.py:1114 msgid "Daily overview" msgstr "Tägliche Übersicht" -#: rcgcdw.py:1088 msgid "No activity" msgstr "Keine Aktivität" -#: rcgcdw.py:1123 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " (eine Aktion)" msgstr[1] " ({} Aktionen)" -#: rcgcdw.py:1125 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " (eine Änderung)" msgstr[1] " ({} Änderungen)" -#: rcgcdw.py:1130 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC (eine Aktion)" msgstr[1] " UTC ({} Aktionen)" -#: rcgcdw.py:1132 rcgcdw.py:1133 rcgcdw.py:1137 msgid "But nobody came" msgstr "Keine Aktivität" -#: rcgcdw.py:1141 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Aktivster Benutzer" msgstr[1] "Aktivste Benutzer" -#: rcgcdw.py:1142 -msgid "Most edited article" -msgid_plural "Most edited articles" -msgstr[0] "Meist bearbeiteter Artikel" -msgstr[1] "Meist bearbeitete Artikel" - -#: rcgcdw.py:1143 msgid "Edits made" msgstr "Bearbeitungen" -#: rcgcdw.py:1143 msgid "New files" msgstr "Neue Dateien" -#: rcgcdw.py:1143 msgid "Admin actions" msgstr "Admin-Aktionen" -#: rcgcdw.py:1144 msgid "Bytes changed" msgstr "Bytes geändert" -#: rcgcdw.py:1144 -msgid "New articles" -msgstr "Neue Artikel" - -#: rcgcdw.py:1145 msgid "Unique contributors" msgstr "Einzelne Autoren" -#: rcgcdw.py:1146 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Aktivste Stunde" msgstr[1] "Aktivste Stunden" -#: rcgcdw.py:1147 msgid "Day score" msgstr "Tageswert" -#: rcgcdw.py:1291 -#, python-brace-format -msgid "Connection to {wiki} seems to be stable now." -msgstr "{wiki} scheint wieder erreichbar zu sein." +#, fuzzy +#~ msgid "Most edited article" +#~ msgid_plural "Most edited articles" +#~ msgstr[0] "Stellte {article} wieder her" +#~ msgstr[1] "Stellte {article} wieder her" -#: rcgcdw.py:1292 rcgcdw.py:1407 -msgid "Connection status" -msgstr "Verbindungsstatus" +#, fuzzy +#~ msgid "New articles" +#~ msgstr "Stellte {article} wieder her" -#: rcgcdw.py:1406 -#, python-brace-format -msgid "{wiki} seems to be down or unreachable." -msgstr "Das {wiki} scheint unerreichbar zu sein." - -#: rcgcdw.py:1465 -msgid "director" -msgstr "Direktor" - -#: rcgcdw.py:1465 -msgid "bot" -msgstr "Bot" - -#: rcgcdw.py:1465 -msgid "editor" -msgstr "editor" - -#: rcgcdw.py:1465 -msgid "directors" -msgstr "Direktor" - -#: rcgcdw.py:1465 -msgid "sysop" -msgstr "Administrator" - -#: rcgcdw.py:1465 -msgid "bureaucrat" -msgstr "Bürokrat" - -#: rcgcdw.py:1465 -msgid "reviewer" -msgstr "reviewer" - -#: rcgcdw.py:1466 -msgid "autoreview" -msgstr "autoreview" - -#: rcgcdw.py:1466 -msgid "autopatrol" -msgstr "autopatrol" - -#: rcgcdw.py:1466 -msgid "wiki_guardian" -msgstr "Wiki Guardian" - -#: rcgcdw.py:1466 -msgid "second" -msgid_plural "seconds" -msgstr[0] "Sekunde" -msgstr[1] "Sekunden" - -#: rcgcdw.py:1466 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "Minute" -msgstr[1] "Minuten" - -#: rcgcdw.py:1466 -msgid "hour" -msgid_plural "hours" -msgstr[0] "Stunde" -msgstr[1] "Stunden" - -#: rcgcdw.py:1466 -msgid "day" -msgid_plural "days" -msgstr[0] "Tag" -msgstr[1] "Tage" - -#: rcgcdw.py:1466 -msgid "week" -msgid_plural "weeks" -msgstr[0] "Woche" -msgstr[1] "Wochen" - -#: rcgcdw.py:1466 -msgid "month" -msgid_plural "months" -msgstr[0] "Monat" -msgstr[1] "Monate" - -#: rcgcdw.py:1466 -msgid "year" -msgid_plural "years" -msgstr[0] "Jahr" -msgstr[1] "Jahre" - -#: rcgcdw.py:1466 -msgid "millennium" -msgid_plural "millennia" -msgstr[0] "Jahrtausend" -msgstr[1] "Jahrtausende" - -#: rcgcdw.py:1466 -msgid "decade" -msgid_plural "decades" -msgstr[0] "Jahrzehnt" -msgstr[1] "Jahrzehnte" - -#: rcgcdw.py:1466 -msgid "century" -msgid_plural "centuries" -msgstr[0] "Jahrhundert" -msgstr[1] "Jahrhunderte" - -#~ msgid "Comment content" -#~ msgstr "Kommentarinhalt" +#~ msgid "**No license!**" +#~ msgstr "**Keine Lizenz!**" #~ msgid "" -#~ "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -#~ "[{target}]({target_url}){comment}" +#~ "\n" +#~ "License: {}" #~ msgstr "" -#~ "[{author}]({author_url}) verschob {redirect}*{article}* nach [{target}]" -#~ "({target_url}) und überschrieb eine Weiterleitung {made_a_redirect}" -#~ "{comment}" +#~ "\n" +#~ "Lizenz: {}" diff --git a/locale/de/LC_MESSAGES/rcgcdw.mo b/locale/de/LC_MESSAGES/rcgcdw.mo deleted file mode 100644 index 9828492..0000000 Binary files a/locale/de/LC_MESSAGES/rcgcdw.mo and /dev/null differ diff --git a/locale/de/LC_MESSAGES/wiki.mo b/locale/de/LC_MESSAGES/wiki.mo new file mode 100644 index 0000000..1199743 Binary files /dev/null and b/locale/de/LC_MESSAGES/wiki.mo differ diff --git a/locale/de/LC_MESSAGES/wiki.po b/locale/de/LC_MESSAGES/wiki.po new file mode 100644 index 0000000..4ddbe58 --- /dev/null +++ b/locale/de/LC_MESSAGES/wiki.po @@ -0,0 +1,37 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-10 01:01+0200\n" +"PO-Revision-Date: 2020-08-03 13:44+0000\n" +"Last-Translator: MarkusRost \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.1.1\n" +"X-Loco-Source-Locale: de_DE\n" +"Generated-By: pygettext.py 1.5\n" +"X-Loco-Parser: loco_parse_po\n" + +#: src/wiki.py:207 +msgid "~~hidden~~" +msgstr "~~versteckt~~" + +#: src/wiki.py:212 +msgid "hidden" +msgstr "versteckt" + +#, python-brace-format +#~ msgid "Connection to {wiki} seems to be stable now." +#~ msgstr "{wiki} scheint wieder erreichbar zu sein." + +#~ msgid "Connection status" +#~ msgstr "Verbindungsstatus" + +#, python-brace-format +#~ msgid "{wiki} seems to be down or unreachable." +#~ msgstr "Das {wiki} scheint unerreichbar zu sein." diff --git a/locale/en/LC_MESSAGES/discussions.mo b/locale/en/LC_MESSAGES/discussions.mo deleted file mode 100644 index 25fa1aa..0000000 Binary files a/locale/en/LC_MESSAGES/discussions.mo and /dev/null differ diff --git a/locale/en/LC_MESSAGES/discussions.po b/locale/en/LC_MESSAGES/discussions.po deleted file mode 100644 index ac22f72..0000000 --- a/locale/en/LC_MESSAGES/discussions.po +++ /dev/null @@ -1,90 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-06-23 14:54+0200\n" -"PO-Revision-Date: 2020-06-23 14:57+0200\n" -"Last-Translator: \n" -"Language-Team: \n" -"Language: en\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: discussions.py:56 -#, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "Replied to \"{title}\"" - -#: discussions.py:63 discussions.py:79 -msgid "unknown" -msgstr "unknown" - -#: discussions.py:68 -#, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "Replied to \"{title}\" on {user}'s Message Wall" - -#: discussions.py:72 -#, python-brace-format -msgid "Created \"{title}\"" -msgstr "Created \"{title}\"" - -#: discussions.py:86 -#, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "Created \"{title}\" on {user}'s Message Wall" - -#: discussions.py:99 -#, python-brace-format -msgid "Created a poll titled \"{title}\"" -msgstr "Created a poll titled \"{title}\"" - -#: discussions.py:104 -msgid "Option {}" -msgstr "Option {}" - -#: discussions.py:105 -#, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "__[View image]({image_url})__" - -#: discussions.py:118 -#, python-brace-format -#| msgid "" -#| "[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}f/p/{threadId}" -#| ">) in ${forumName}" -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}f/p/{threadId}>) " -"in {forumName}" -msgstr "" -"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}f/p/{threadId}>) " -"in {forumName}" - -#: discussions.py:121 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}f/p/{threadId}/r/" -"{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}" -msgstr "" -"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}f/p/{threadId}/r/" -"{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}" - -#: discussions.py:126 -#, python-brace-format -#| msgid "" -#| "[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}f/p/{threadId}" -#| ">) in ${forumName}" -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created a poll [{title}](<{url}f/p/" -"{threadId}>) in {forumName}" -msgstr "" -"[{author}](<{url}f/u/{creatorId}>) created a poll [{title}](<{url}f/p/" -"{threadId}>) in {forumName}" diff --git a/locale/en/LC_MESSAGES/misc.mo b/locale/en/LC_MESSAGES/misc.mo deleted file mode 100644 index 2a92917..0000000 Binary files a/locale/en/LC_MESSAGES/misc.mo and /dev/null differ diff --git a/locale/en/LC_MESSAGES/misc.po b/locale/en/LC_MESSAGES/misc.po deleted file mode 100644 index f1358ed..0000000 --- a/locale/en/LC_MESSAGES/misc.po +++ /dev/null @@ -1,27 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 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/en/LC_MESSAGES/rcgcdw.mo b/locale/en/LC_MESSAGES/rcgcdw.mo deleted file mode 100644 index 3ad4cda..0000000 Binary files a/locale/en/LC_MESSAGES/rcgcdw.mo and /dev/null differ diff --git a/locale/en/LC_MESSAGES/rcgcdw.po b/locale/en/LC_MESSAGES/rcgcdw.po deleted file mode 100644 index b2c4f6f..0000000 --- a/locale/en/LC_MESSAGES/rcgcdw.po +++ /dev/null @@ -1,1073 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-03-17 20:53+0100\n" -"PO-Revision-Date: 2020-03-17 20:55+0100\n" -"Last-Translator: Frisk \n" -"Language-Team: \n" -"Language: en\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 2.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: rcgcdw.py:71 -msgid "Location" -msgstr "Location" - -#: rcgcdw.py:71 -msgid "About me" -msgstr "About me" - -#: rcgcdw.py:71 -msgid "Google link" -msgstr "Google link" - -#: rcgcdw.py:71 -msgid "Facebook link" -msgstr "Facebook link" - -#: rcgcdw.py:71 -msgid "Twitter link" -msgstr "Twitter link" - -#: rcgcdw.py:71 -msgid "Reddit link" -msgstr "Reddit link" - -#: rcgcdw.py:71 -msgid "Twitch link" -msgstr "Twitch link" - -#: rcgcdw.py:71 -msgid "PSN link" -msgstr "PSN link" - -#: rcgcdw.py:71 -msgid "VK link" -msgstr "VK link" - -#: rcgcdw.py:71 -msgid "XBL link" -msgstr "XBL link" - -#: rcgcdw.py:71 -msgid "Steam link" -msgstr "Steam link" - -#: rcgcdw.py:71 -msgid "Discord handle" -msgstr "Discord handle" - -#: rcgcdw.py:71 -msgid "Battle.net handle" -msgstr "Battle.net handle" - -#: rcgcdw.py:172 rcgcdw.py:924 -msgid "Unknown" -msgstr "Unknown" - -#: rcgcdw.py:174 -msgid "unknown" -msgstr "unknown" - -#: rcgcdw.py:244 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" -"{edit_size})" -msgstr "" -"[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" -"{edit_size})" - -#: rcgcdw.py:246 -#, python-brace-format -msgid "" -"[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" -"{edit_size})" -msgstr "" -"[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" -"{edit_size})" - -#: rcgcdw.py:249 -#, python-brace-format -msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" -msgstr "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" - -#: rcgcdw.py:256 -#, python-brace-format -#| msgid "" -#| "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" -#| "{comment}" -msgid "" -"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" -msgstr "" -"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" - -#: rcgcdw.py:260 -#, python-brace-format -msgid "" -"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" -"{comment}" -msgstr "" -"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" -"{comment}" - -#: rcgcdw.py:263 -#, python-brace-format -msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" -msgstr "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" - -#: rcgcdw.py:267 -#, python-brace-format -msgid "" -"[{author}]({author_url}) deleted redirect by overwriting [{page}]" -"({page_link}){comment}" -msgstr "" -"[{author}]({author_url}) deleted redirect by overwriting [{page}]" -"({page_link}){comment}" - -#: rcgcdw.py:271 rcgcdw.py:276 -msgid "without making a redirect" -msgstr "without making a redirect" - -#: rcgcdw.py:271 rcgcdw.py:277 -msgid "with a redirect" -msgstr "with a redirect" - -#: rcgcdw.py:272 -#, 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:278 -#, 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:283 -#, python-brace-format -msgid "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" -msgstr "" -"[{author}]({author_url}) moved protection settings from {redirect}*{article}" -"* to [{target}]({target_url}){comment}" - -#: rcgcdw.py:294 rcgcdw.py:699 -msgid "infinity and beyond" -msgstr "infinity and beyond" - -#: rcgcdw.py:311 -msgid " on pages: " -msgstr " on pages: " - -#: rcgcdw.py:318 rcgcdw.py:719 -msgid " and namespaces: " -msgstr " and namespaces: " - -#: rcgcdw.py:320 -msgid " on namespaces: " -msgstr " on namespaces: " - -#: rcgcdw.py:332 -#, python-brace-format -msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) for {time}" -"{restriction_desc}{comment}" -msgstr "" -"[{author}]({author_url}) blocked [{user}]({user_url}) for {time}" -"{restriction_desc}{comment}" - -#: rcgcdw.py:336 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" -msgstr "" -"[{author}]({author_url}) changed block settings for [{blocked_user}]" -"({user_url}){comment}" - -#: rcgcdw.py:340 -#, 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:343 -#, 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:343 -msgid "their own profile" -msgstr "their own profile" - -#: rcgcdw.py:346 -#, python-brace-format -msgid "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target} " -"profile" -msgstr "" -"[{author}]({author_url}) replied to a [comment]({comment}) on {target} " -"profile" - -#: rcgcdw.py:349 rcgcdw.py:355 rcgcdw.py:366 rcgcdw.py:370 -msgid "their own" -msgstr "their own" - -#: rcgcdw.py:352 -#, 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:358 -#, python-brace-format -msgid "[{author}]({author_url}) purged a comment on {target} profile" -msgstr "[{author}]({author_url}) purged a comment on {target} profile" - -#: rcgcdw.py:368 -#, 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:374 -#, python-brace-format -msgid "[{target}]({target_url})'s" -msgstr "[{target}]({target_url})'s" - -#: rcgcdw.py:374 -#, python-brace-format -msgid "[their own]({target_url})" -msgstr "[their own]({target_url})" - -#: rcgcdw.py:375 -#, 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:389 rcgcdw.py:391 rcgcdw.py:800 rcgcdw.py:802 -msgid "none" -msgstr "none" - -#: rcgcdw.py:397 rcgcdw.py:787 -msgid "System" -msgstr "System" - -#: rcgcdw.py:402 -#, python-brace-format -msgid "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) protected [{article}]({article_url}) with the " -"following settings: {settings}{comment}" - -#: rcgcdw.py:404 rcgcdw.py:412 rcgcdw.py:810 rcgcdw.py:816 -msgid " [cascading]" -msgstr " [cascading]" - -#: rcgcdw.py:409 -#, python-brace-format -msgid "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" -msgstr "" -"[{author}]({author_url}) modified protection settings of [{article}]" -"({article_url}) to: {settings}{comment}" - -#: rcgcdw.py:416 -#, python-brace-format -msgid "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" -msgstr "" -"[{author}]({author_url}) removed protection from [{article}]({article_url})" -"{comment}" - -#: rcgcdw.py:420 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed visibility of revision on page [{article}]" -"({article_url}){comment}" -msgid_plural "" -"[{author}]({author_url}) changed visibility of {amount} revisions on page " -"[{article}]({article_url}){comment}" -msgstr[0] "" -"[{author}]({author_url}) changed visibility of revision on page [{article}]" -"({article_url}){comment}" -msgstr[1] "" -"[{author}]({author_url}) changed visibility of {amount} revisions on page " -"[{article}]({article_url}){comment}" - -#: rcgcdw.py:425 -#, python-brace-format -msgid "" -"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " -"revision{comment}" -msgid_plural "" -"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " -"revisions{comment}" -msgstr[0] "" -"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " -"revision{comment}" -msgstr[1] "" -"[{author}]({author_url}) imported [{article}]({article_url}) with {count} " -"revisions{comment}" - -#: rcgcdw.py:430 -#, python-brace-format -msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "[{author}]({author_url}) restored [{article}]({article_url}){comment}" - -#: rcgcdw.py:432 -#, 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:434 -#, python-brace-format -msgid "[{author}]({author_url}) imported interwiki{comment}" -msgstr "[{author}]({author_url}) imported interwiki{comment}" - -#: rcgcdw.py:437 -#, 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:440 -#, 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:444 -#, 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:448 -#, 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:454 -#, python-brace-format -msgid "" -"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " -"pointing to {website} with {prefix} prefix" -msgstr "" -"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " -"pointing to {website} with {prefix} prefix" - -#: rcgcdw.py:460 -#, 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:463 -#, python-brace-format -msgid "" -"[{author}]({author_url}) changed the content model of the page [{article}]" -"({article_url}) from {old} to {new}{comment}" -msgstr "" -"[{author}]({author_url}) changed the content model of the page [{article}]" -"({article_url}) from {old} to {new}{comment}" - -#: rcgcdw.py:467 -#, 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:470 -#, 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:473 -#, 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:478 -#, python-brace-format -msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) created the Cargo table \"{table}\"" - -#: rcgcdw.py:480 -#, python-brace-format -msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) deleted the Cargo table \"{table}\"" - -#: rcgcdw.py:485 -#, python-brace-format -msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) recreated the Cargo table \"{table}\"" - -#: rcgcdw.py:490 -#, python-brace-format -msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) replaced the Cargo table \"{table}\"" - -#: rcgcdw.py:493 -#, 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:497 -#, 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:501 -#, 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:504 -#, 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:506 -msgid "An action has been hidden by administration." -msgstr "An action has been hidden by administration." - -#: rcgcdw.py:515 rcgcdw.py:803 -msgid "No description provided" -msgstr "No description provided" - -#: rcgcdw.py:563 -msgid "(N!) " -msgstr "(N!) " - -#: rcgcdw.py:564 -msgid "m" -msgstr "m" - -#: rcgcdw.py:564 -msgid "b" -msgstr "b" - -#: rcgcdw.py:583 rcgcdw.py:588 -msgid "__Only whitespace__" -msgstr "__Only whitespace__" - -#: rcgcdw.py:594 -msgid "Removed" -msgstr "Removed" - -#: rcgcdw.py:597 -msgid "Added" -msgstr "Added" - -#: rcgcdw.py:631 rcgcdw.py:669 -msgid "Options" -msgstr "Options" - -#: rcgcdw.py:631 -#, python-brace-format -msgid "([preview]({link}) | [undo]({undolink}))" -msgstr "([preview]({link}) | [undo]({undolink}))" - -#: rcgcdw.py:634 -#, python-brace-format -msgid "Uploaded a new version of {name}" -msgstr "Uploaded a new version of {name}" - -#: rcgcdw.py:636 -#, python-brace-format -#| msgid "Uploaded a new version of {name}" -msgid "Reverted a version of {name}" -msgstr "Reverted a version of {name}" - -#: rcgcdw.py:638 -#, python-brace-format -msgid "Uploaded {name}" -msgstr "Uploaded {name}" - -#: rcgcdw.py:654 -msgid "**No license!**" -msgstr "**No license!**" - -#: rcgcdw.py:666 -msgid "" -"\n" -"License: {}" -msgstr "" -"\n" -"License: {}" - -#: rcgcdw.py:669 -#, python-brace-format -msgid "([preview]({link}))" -msgstr "([preview]({link}))" - -#: rcgcdw.py:673 -#, python-brace-format -msgid "Deleted page {article}" -msgstr "Deleted page {article}" - -#: rcgcdw.py:676 -#, python-brace-format -msgid "Deleted redirect {article} by overwriting" -msgstr "Deleted redirect {article} by overwriting" - -#: rcgcdw.py:680 -msgid "No redirect has been made" -msgstr "No redirect has been made" - -#: rcgcdw.py:681 -msgid "A redirect has been made" -msgstr "A redirect has been made" - -#: rcgcdw.py:682 -#, python-brace-format -msgid "Moved {redirect}{article} to {target}" -msgstr "Moved {redirect}{article} to {target}" - -#: rcgcdw.py:685 -#, python-brace-format -msgid "Moved {redirect}{article} to {title} over redirect" -msgstr "Moved {redirect}{article} to {title} over redirect" - -#: rcgcdw.py:689 -#, python-brace-format -msgid "Moved protection settings from {redirect}{article} to {title}" -msgstr "Moved protection settings from {redirect}{article} to {title}" - -#: rcgcdw.py:712 -msgid "Blocked from editing the following pages: " -msgstr "Blocked from editing the following pages: " - -#: rcgcdw.py:721 -msgid "Blocked from editing pages on following namespaces: " -msgstr "Blocked from editing pages on following namespaces: " - -#: rcgcdw.py:735 -msgid "Partial block details" -msgstr "Partial block details" - -#: rcgcdw.py:736 -#, python-brace-format -msgid "Blocked {blocked_user} for {time}" -msgstr "Blocked {blocked_user} for {time}" - -#: rcgcdw.py:740 -#, python-brace-format -msgid "Changed block settings for {blocked_user}" -msgstr "Changed block settings for {blocked_user}" - -#: rcgcdw.py:744 -#, python-brace-format -msgid "Unblocked {blocked_user}" -msgstr "Unblocked {blocked_user}" - -#: rcgcdw.py:749 -#, python-brace-format -msgid "Left a comment on {target}'s profile" -msgstr "Left a comment on {target}'s profile" - -#: rcgcdw.py:751 -msgid "Left a comment on their own profile" -msgstr "Left a comment on their own profile" - -#: rcgcdw.py:756 -#, python-brace-format -msgid "Replied to a comment on {target}'s profile" -msgstr "Replied to a comment on {target}'s profile" - -#: rcgcdw.py:758 -msgid "Replied to a comment on their own profile" -msgstr "Replied to a comment on their own profile" - -#: rcgcdw.py:763 -#, python-brace-format -msgid "Edited a comment on {target}'s profile" -msgstr "Edited a comment on {target}'s profile" - -#: rcgcdw.py:765 -msgid "Edited a comment on their own profile" -msgstr "Edited a comment on their own profile" - -#: rcgcdw.py:768 -#, python-brace-format -msgid "Edited {target}'s profile" -msgstr "Edited {target}'s profile" - -#: rcgcdw.py:768 -msgid "Edited their own profile" -msgstr "Edited their own profile" - -#: rcgcdw.py:770 -#, python-brace-format -msgid "Cleared the {field} field" -msgstr "Cleared the {field} field" - -#: rcgcdw.py:772 -#, python-brace-format -msgid "{field} field changed to: {desc}" -msgstr "{field} field changed to: {desc}" - -#: rcgcdw.py:775 -#, python-brace-format -msgid "Purged a comment on {target}'s profile" -msgstr "Purged a comment on {target}'s profile" - -#: rcgcdw.py:781 -#, python-brace-format -msgid "Deleted a comment on {target}'s profile" -msgstr "Deleted a comment on {target}'s profile" - -#: rcgcdw.py:785 -#, python-brace-format -msgid "Changed group membership for {target}" -msgstr "Changed group membership for {target}" - -#: rcgcdw.py:789 -#, python-brace-format -msgid "{target} got autopromoted to a new usergroup" -msgstr "{target} got autopromoted to a new usergroup" - -#: rcgcdw.py:804 -#, 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:808 -#, python-brace-format -msgid "Protected {target}" -msgstr "Protected {target}" - -#: rcgcdw.py:814 -#, python-brace-format -msgid "Changed protection level for {article}" -msgstr "Changed protection level for {article}" - -#: rcgcdw.py:820 -#, python-brace-format -msgid "Removed protection from {article}" -msgstr "Removed protection from {article}" - -#: rcgcdw.py:824 -#, 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:829 -#, 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:834 -#, python-brace-format -msgid "Restored {article}" -msgstr "Restored {article}" - -#: rcgcdw.py:837 -msgid "Changed visibility of log events" -msgstr "Changed visibility of log events" - -#: rcgcdw.py:840 -msgid "Imported interwiki" -msgstr "Imported interwiki" - -#: rcgcdw.py:843 -#, python-brace-format -msgid "Edited abuse filter number {number}" -msgstr "Edited abuse filter number {number}" - -#: rcgcdw.py:846 -#, python-brace-format -msgid "Created abuse filter number {number}" -msgstr "Created abuse filter number {number}" - -#: rcgcdw.py:849 -#, python-brace-format -msgid "Merged revision histories of {article} into {dest}" -msgstr "Merged revision histories of {article} into {dest}" - -#: rcgcdw.py:853 -msgid "Added an entry to the interwiki table" -msgstr "Added an entry to the interwiki table" - -#: rcgcdw.py:854 rcgcdw.py:860 -#, python-brace-format -msgid "Prefix: {prefix}, website: {website} | {desc}" -msgstr "Prefix: {prefix}, website: {website} | {desc}" - -#: rcgcdw.py:859 -msgid "Edited an entry in interwiki table" -msgstr "Edited an entry in interwiki table" - -#: rcgcdw.py:865 -msgid "Deleted an entry in interwiki table" -msgstr "Deleted an entry in interwiki table" - -#: rcgcdw.py:866 -#, python-brace-format -msgid "Prefix: {prefix} | {desc}" -msgstr "Prefix: {prefix} | {desc}" - -#: rcgcdw.py:869 -#, python-brace-format -msgid "Changed the content model of the page {article}" -msgstr "Changed the content model of the page {article}" - -#: rcgcdw.py:870 -#, python-brace-format -msgid "Model changed from {old} to {new}: {reason}" -msgstr "Model changed from {old} to {new}: {reason}" - -#: rcgcdw.py:875 -#, python-brace-format -msgid "Edited the sprite for {article}" -msgstr "Edited the sprite for {article}" - -#: rcgcdw.py:878 -#, python-brace-format -msgid "Created the sprite sheet for {article}" -msgstr "Created the sprite sheet for {article}" - -#: rcgcdw.py:881 -#, python-brace-format -msgid "Edited the slice for {article}" -msgstr "Edited the slice for {article}" - -#: rcgcdw.py:887 -#, python-brace-format -msgid "Created the Cargo table \"{table}\"" -msgstr "Created the Cargo table \"{table}\"" - -#: rcgcdw.py:891 -#, python-brace-format -msgid "Deleted the Cargo table \"{table}\"" -msgstr "Deleted the Cargo table \"{table}\"" - -#: rcgcdw.py:898 -#, python-brace-format -msgid "Recreated the Cargo table \"{table}\"" -msgstr "Recreated the Cargo table \"{table}\"" - -#: rcgcdw.py:905 -#, python-brace-format -msgid "Replaced the Cargo table \"{table}\"" -msgstr "Replaced the Cargo table \"{table}\"" - -#: rcgcdw.py:909 -#, python-brace-format -msgid "Created a tag \"{tag}\"" -msgstr "Created a tag \"{tag}\"" - -#: rcgcdw.py:913 -#, python-brace-format -msgid "Deleted a tag \"{tag}\"" -msgstr "Deleted a tag \"{tag}\"" - -#: rcgcdw.py:917 -#, python-brace-format -msgid "Activated a tag \"{tag}\"" -msgstr "Activated a tag \"{tag}\"" - -#: rcgcdw.py:920 -#, python-brace-format -msgid "Deactivated a tag \"{tag}\"" -msgstr "Deactivated a tag \"{tag}\"" - -#: rcgcdw.py:923 -msgid "Action has been hidden by administration." -msgstr "Action has been hidden by administration." - -#: rcgcdw.py:951 -msgid "Tags" -msgstr "Tags" - -#: rcgcdw.py:956 -msgid "**Added**: " -msgstr "**Added**: " - -#: rcgcdw.py:956 -msgid " and {} more\n" -msgstr " and {} more\n" - -#: rcgcdw.py:957 -msgid "**Removed**: " -msgstr "**Removed**: " - -#: rcgcdw.py:957 -msgid " and {} more" -msgstr " and {} more" - -#: rcgcdw.py:958 -msgid "Changed categories" -msgstr "Changed categories" - -#: rcgcdw.py:977 -msgid "~~hidden~~" -msgstr "~~hidden~~" - -#: rcgcdw.py:983 -msgid "hidden" -msgstr "hidden" - -#: rcgcdw.py:1050 rcgcdw.py:1052 rcgcdw.py:1054 rcgcdw.py:1056 rcgcdw.py:1058 -#: rcgcdw.py:1060 rcgcdw.py:1062 -#, python-brace-format -msgid "{value} (avg. {avg})" -msgstr "{value} (avg. {avg})" - -#: rcgcdw.py:1086 rcgcdw.py:1114 -msgid "Daily overview" -msgstr "Daily overview" - -#: rcgcdw.py:1088 -msgid "No activity" -msgstr "No activity" - -#: rcgcdw.py:1123 -msgid " ({} action)" -msgid_plural " ({} actions)" -msgstr[0] " ({} action)" -msgstr[1] " ({} actions)" - -#: rcgcdw.py:1125 -msgid " ({} edit)" -msgid_plural " ({} edits)" -msgstr[0] " ({} edit)" -msgstr[1] " ({} edits)" - -#: rcgcdw.py:1130 -msgid " UTC ({} action)" -msgid_plural " UTC ({} actions)" -msgstr[0] " UTC ({} action)" -msgstr[1] " UTC ({} actions)" - -#: rcgcdw.py:1132 rcgcdw.py:1133 rcgcdw.py:1137 -msgid "But nobody came" -msgstr "But nobody came" - -#: rcgcdw.py:1141 -msgid "Most active user" -msgid_plural "Most active users" -msgstr[0] "Most active user" -msgstr[1] "Most active users" - -#: rcgcdw.py:1142 -msgid "Most edited article" -msgid_plural "Most edited articles" -msgstr[0] "Most edited article" -msgstr[1] "Most edited articles" - -#: rcgcdw.py:1143 -msgid "Edits made" -msgstr "Edits made" - -#: rcgcdw.py:1143 -msgid "New files" -msgstr "New files" - -#: rcgcdw.py:1143 -msgid "Admin actions" -msgstr "Admin actions" - -#: rcgcdw.py:1144 -msgid "Bytes changed" -msgstr "Bytes changed" - -#: rcgcdw.py:1144 -msgid "New articles" -msgstr "New articles" - -#: rcgcdw.py:1145 -msgid "Unique contributors" -msgstr "Unique contributors" - -#: rcgcdw.py:1146 -msgid "Most active hour" -msgid_plural "Most active hours" -msgstr[0] "Most active hour" -msgstr[1] "Most active hours" - -#: rcgcdw.py:1147 -msgid "Day score" -msgstr "Day score" - -#: rcgcdw.py:1291 -#, python-brace-format -msgid "Connection to {wiki} seems to be stable now." -msgstr "Connection to {wiki} seems to be stable now." - -#: rcgcdw.py:1292 rcgcdw.py:1407 -msgid "Connection status" -msgstr "Connection status" - -#: rcgcdw.py:1406 -#, python-brace-format -msgid "{wiki} seems to be down or unreachable." -msgstr "{wiki} seems to be down or unreachable." - -#: rcgcdw.py:1465 -msgid "director" -msgstr "Director" - -#: rcgcdw.py:1465 -msgid "bot" -msgstr "Bot" - -#: rcgcdw.py:1465 -msgid "editor" -msgstr "Editor" - -#: rcgcdw.py:1465 -msgid "directors" -msgstr "Directors" - -#: rcgcdw.py:1465 -msgid "sysop" -msgstr "Administrator" - -#: rcgcdw.py:1465 -msgid "bureaucrat" -msgstr "Bureaucrat" - -#: rcgcdw.py:1465 -msgid "reviewer" -msgstr "Reviewer" - -#: rcgcdw.py:1466 -msgid "autoreview" -msgstr "Autoreview" - -#: rcgcdw.py:1466 -msgid "autopatrol" -msgstr "Autopatrol" - -#: rcgcdw.py:1466 -msgid "wiki_guardian" -msgstr "Wiki guardian" - -#: rcgcdw.py:1466 -msgid "second" -msgid_plural "seconds" -msgstr[0] "second" -msgstr[1] "seconds" - -#: rcgcdw.py:1466 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "minute" -msgstr[1] "minutes" - -#: rcgcdw.py:1466 -msgid "hour" -msgid_plural "hours" -msgstr[0] "hour" -msgstr[1] "hours" - -#: rcgcdw.py:1466 -msgid "day" -msgid_plural "days" -msgstr[0] "day" -msgstr[1] "days" - -#: rcgcdw.py:1466 -msgid "week" -msgid_plural "weeks" -msgstr[0] "week" -msgstr[1] "weeks" - -#: rcgcdw.py:1466 -msgid "month" -msgid_plural "months" -msgstr[0] "month" -msgstr[1] "months" - -#: rcgcdw.py:1466 -msgid "year" -msgid_plural "years" -msgstr[0] "year" -msgstr[1] "years" - -#: rcgcdw.py:1466 -msgid "millennium" -msgid_plural "millennia" -msgstr[0] "millennium" -msgstr[1] "millennia" - -#: rcgcdw.py:1466 -msgid "decade" -msgid_plural "decades" -msgstr[0] "decade" -msgstr[1] "decades" - -#: rcgcdw.py:1466 -msgid "century" -msgid_plural "centuries" -msgstr[0] "century" -msgstr[1] "centuries" - -#~ msgid "* and namespaces: *" -#~ msgstr "* and namespaces: *" - -#~ msgid "Comment content" -#~ msgstr "Comment content" - -#~ msgid "" -#~ "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -#~ "[{target}]({target_url}){comment}" -#~ msgstr "" -#~ "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -#~ "[{target}]({target_url}){comment}" - -#~ msgid "Unable to process the event" -#~ msgstr "Unable to process the event" - -#~ msgid "error" -#~ msgstr "error" diff --git a/locale/pl/LC_MESSAGES/discord.mo b/locale/pl/LC_MESSAGES/discord.mo new file mode 100644 index 0000000..f55b442 Binary files /dev/null and b/locale/pl/LC_MESSAGES/discord.mo differ diff --git a/locale/pl/LC_MESSAGES/discord.po b/locale/pl/LC_MESSAGES/discord.po new file mode 100644 index 0000000..99db503 --- /dev/null +++ b/locale/pl/LC_MESSAGES/discord.po @@ -0,0 +1,36 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDd package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: RcGcDd\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-10 16:46+0200\n" +"PO-Revision-Date: 2020-08-10 01:55+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3.1\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 " +"|| n%100>14) ? 1 : 2);\n" + +#: src/discord.py:25 +msgid "wiki deletion" +msgstr "" + +#: src/discord.py:25 src/discord.py:26 +msgid "wiki becoming inaccessible" +msgstr "" + +#: src/discord.py:27 +msgid "unknown error" +msgstr "" + +#: src/discord.py:28 +msgid "The webhook for {} has been removed due to {}." +msgstr "" diff --git a/locale/pl/LC_MESSAGES/discussion_formatters.mo b/locale/pl/LC_MESSAGES/discussion_formatters.mo new file mode 100644 index 0000000..68a2c2d Binary files /dev/null and b/locale/pl/LC_MESSAGES/discussion_formatters.mo differ diff --git a/locale/pl/LC_MESSAGES/discussion_formatters.po b/locale/pl/LC_MESSAGES/discussion_formatters.po new file mode 100644 index 0000000..3ca5f59 --- /dev/null +++ b/locale/pl/LC_MESSAGES/discussion_formatters.po @@ -0,0 +1,175 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-10 16:45+0200\n" +"PO-Revision-Date: 2020-08-10 16:41+0000\n" +"Last-Translator: Frisk The Evil Goat Overlord \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.1.1\n" + +#: src/formatters/discussions.py:21 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}f/p/{threadId}>) " +"in {forumName}" +msgstr "" +"[{author}]({author_url}) utworzył(a) [{title}](<{url}f/p/{threadId}>) w " +"{forumName}" + +#: src/formatters/discussions.py:23 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a poll [{title}](<{url}f/p/" +"{threadId}>) in {forumName}" +msgstr "" +"[{author}]({author_url}) utworzył(a) ankietę [{title}](<{url}f/p/{threadId}" +">) w {forumName}" + +#: src/formatters/discussions.py:28 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}f/p/{threadId}/r/" +"{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" +"[{author}]({author_url}) utworzył(a) [odpowiedź](<{url}f/p/{threadId}/r/" +"{postId}>) pod tematem [{title}](<{url}f/p/{threadId}>) w {forumName}" + +#: src/formatters/discussions.py:30 src/formatters/discussions.py:38 +#: src/formatters/discussions.py:96 src/formatters/discussions.py:108 +msgid "unknown" +msgstr "nieznany" + +#: src/formatters/discussions.py:34 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) utworzył(a) [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) na [tablicy wiadomości użytkownika/" +"użytkowniczki {user}](<{url}wiki/Message_Wall:{user_wall}>)" + +#: src/formatters/discussions.py:36 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) stworzył(-a) [odpowiedź](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) do [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) na [tablicy wiadomości {user}]" +"(<{url}wiki/Message_Wall:{user_wall}>)" + +#: src/formatters/discussions.py:40 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a [comment](<{url}wiki/{article}?" +"threadId={threadId}>) on [{article}](<{url}wiki/{article}>)" +msgstr "" +"[{author}]({author_url}) utworzył(-a) [komentarz](<{url}wiki/{article}?" +"commentId={commentId}>) w [{article}](<{url}wiki/{article}>)" + +#: src/formatters/discussions.py:42 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}wiki/{article}?" +"threadId={threadId}) to a [comment](<{url}wiki/{article}?threadId={threadId}" +"#{replyId}>) on [{article}](<{url}wiki/{article}>)" +msgstr "" +"[{author}]({author_url}) utworzył(-a) [odpowiedź](<{url}wiki/{article}?" +"threadId={threadId}) na [komentarz](<{url}wiki/{article}?" +"commentId={commentId}&replyId={replyId}>) w artykule [{article}](<{url}wiki/" +"{article}>)" + +#: src/formatters/discussions.py:48 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" +"Nieznane wydarzenie `{event}` wykonane przez [{author}]({author_url}), zgłoś " +"je na [serwerze wsparcia](<{support}>)." + +#: src/formatters/discussions.py:74 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "Utworzył(a) „{title}”" + +#: src/formatters/discussions.py:79 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "Utworzył(a) ankietę zatytułowaną „{title}”" + +#: src/formatters/discussions.py:84 +msgid "Option {}" +msgstr "Opcja {}" + +#: src/formatters/discussions.py:85 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[Zobacz zdjęcie]({image_url})__" + +#: src/formatters/discussions.py:93 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "Odpowiedział(a) w „{title}”" + +#: src/formatters/discussions.py:102 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "" +"Utworzył(a) „{title}” na tablicy wiadomości użytkownika/użytkowniczki {user}" + +#: src/formatters/discussions.py:106 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "" +"Odpowiedział(a) na „{title}” z tablicy wiadomości użytkownika/użytkowniczki " +"{user}" + +#: src/formatters/discussions.py:112 +#, python-brace-format +msgid "Commented on {article}" +msgstr "Skomentował(a) „{article}”" + +#: src/formatters/discussions.py:116 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "Odpowiedział(a) na komentarz w „{article}”" + +#: src/formatters/discussions.py:120 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "Nieznane wydarzenie `{event}`" + +#: src/formatters/discussions.py:125 src/formatters/discussions.py:127 +msgid "Report this on the support server" +msgstr "Zgłoś to na serwerze wsparcia" + +#, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) " +#~ "in {forumName}" +#~ msgstr "" +#~ "[{author}]({author_url}) utworzył(a) quiz [{title}](<{url}f/p/{threadId}" +#~ ">) w {forumName}" + +#, python-brace-format +#~ msgid "Created a quiz \"{title}\"" +#~ msgstr "Utworzył(a) quiz „{title}”" diff --git a/locale/pl/LC_MESSAGES/discussions.mo b/locale/pl/LC_MESSAGES/discussions.mo deleted file mode 100644 index a25426a..0000000 Binary files a/locale/pl/LC_MESSAGES/discussions.mo and /dev/null differ diff --git a/locale/pl/LC_MESSAGES/discussions.po b/locale/pl/LC_MESSAGES/discussions.po deleted file mode 100644 index 6bd9b94..0000000 --- a/locale/pl/LC_MESSAGES/discussions.po +++ /dev/null @@ -1,110 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-04 00:58+0200\n" -"PO-Revision-Date: 2020-07-04 01:12+0200\n" -"Last-Translator: \n" -"Language-Team: \n" -"Language: pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.3\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 " -"|| n%100>14) ? 1 : 2);\n" - -#: discussions.py:56 -#, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "Odpowiedział(a) w „{title}”" - -#: discussions.py:63 discussions.py:79 discussions.py:127 discussions.py:143 -msgid "unknown" -msgstr "nieznany" - -#: discussions.py:68 -#, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "" -"Odpowiedział(a) na „{title}” z tablicy wiadomości użytkownika/użytkowniczki " -"{user}" - -#: discussions.py:72 -#, python-brace-format -msgid "Created \"{title}\"" -msgstr "Utworzył(a) „{title}”" - -#: discussions.py:86 -#, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "" -"Utworzył(a) „{title}” na tablicy wiadomości użytkownika/użytkowniczki {user}" - -#: discussions.py:99 -#, python-brace-format -msgid "Created a poll titled \"{title}\"" -msgstr "Utworzył(a) ankietę zatytułowaną „{title}”" - -#: discussions.py:104 -msgid "Option {}" -msgstr "Opcja {}" - -#: discussions.py:105 -#, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "__[Zobacz zdjęcie]({image_url})__" - -#: discussions.py:121 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}f/p/{threadId}>) " -"in {forumName}" -msgstr "" -"[{author}](<{url}f/u/{creatorId}>) utworzył(a) [{title}](<{url}f/p/{threadId}" -">) w {forumName}" - -#: discussions.py:130 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{wikiurl}wiki/" -"Message_Wall:{user_wall}?threadId={threadid}>) on {user}'s Message Wall" -msgstr "" -"[{author}](<{url}f/u/{creatorId}>) utworzył(a) [{title}](<{wikiurl}wiki/" -"Message_Wall:{user_wall}?threadId={threadid}>) na tablicy wiadomości " -"użytkownika/użytkowniczki {user}" - -#: discussions.py:136 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}f/p/{threadId}/r/" -"{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}" -msgstr "" -"[{author}](<{url}f/u/{creatorId}>) utworzył(a) [odpowiedź](<{url}f/p/" -"{threadId}/r/{postId}>) pod tematem [{title}](<{url}f/p/{threadId}>) w " -"{forumName}" - -#: discussions.py:147 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) replied to [{title}](<{wikiurl}wiki/" -"Message_Wall:{user_wall}?threadId={threadid}#{replyId}>) on {user}'s Message " -"Wall" -msgstr "" -"[{author}](<{url}f/u/{creatorId}>) odpowiedział(a) na[{title}](<{wikiurl}" -"wiki/Message_Wall:{user_wall}?threadId={threadid}#{replyId}>) na tablicy " -"wiadomości użytkownika/użytkowniczki {user}" - -#: discussions.py:153 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created a poll [{title}](<{url}f/p/" -"{threadId}>) in {forumName}" -msgstr "" -"[{author}](<{url}f/u/{creatorId}>) utworzył(a) ankietę [{title}](<{url}f/p/" -"{threadId}>) w {forumName}" diff --git a/locale/pl/LC_MESSAGES/misc.mo b/locale/pl/LC_MESSAGES/misc.mo index d674b72..7847927 100644 Binary files a/locale/pl/LC_MESSAGES/misc.mo and b/locale/pl/LC_MESSAGES/misc.mo differ diff --git a/locale/pl/LC_MESSAGES/misc.po b/locale/pl/LC_MESSAGES/misc.po index 760567e..265758a 100644 --- a/locale/pl/LC_MESSAGES/misc.po +++ b/locale/pl/LC_MESSAGES/misc.po @@ -1,24 +1,85 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. +# Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. # msgid "" msgstr "" -"Project-Id-Version: \n" +"Project-Id-Version: RcGcDw\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" +"POT-Creation-Date: 2020-08-10 00:59+0200\n" +"PO-Revision-Date: 2020-03-17 20:57+0100\n" +"Last-Translator: Frisk \n" "Language-Team: \n" +"Language: pl\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" +"Generated-By: pygettext.py 1.5\n" +"X-Generator: Poedit 2.3\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" -#: misc.py:76 +#: src/misc.py:96 +msgid "Location" +msgstr "Lokacja" + +#: src/misc.py:96 +msgid "About me" +msgstr "O mnie" + +#: src/misc.py:97 +msgid "Google link" +msgstr "link Google" + +#: src/misc.py:97 +msgid "Facebook link" +msgstr "link Facebook" + +#: src/misc.py:98 +msgid "Twitter link" +msgstr "link Twitter" + +#: src/misc.py:98 +msgid "Reddit link" +msgstr "link Reddit" + +#: src/misc.py:99 +msgid "Twitch link" +msgstr "link Twitch" + +#: src/misc.py:99 +msgid "PSN link" +msgstr "link PSN" + +#: src/misc.py:100 +msgid "VK link" +msgstr "link VK" + +#: src/misc.py:100 +msgid "XBL link" +msgstr "link XBL" + +#: src/misc.py:101 +msgid "Steam link" +msgstr "link Steam" + +#: src/misc.py:101 +msgid "Discord handle" +msgstr "konto Discord" + +#: src/misc.py:102 +msgid "Battle.net handle" +msgstr "konto Battle.net" + +#: src/misc.py:108 +msgid "Unknown" +msgstr "Nieznana" + +#: src/misc.py:110 +msgid "unknown" +msgstr "nieznana sekcja" + +#: src/misc.py:121 msgid "" "\n" "__And more__" diff --git a/locale/pl/LC_MESSAGES/rc_formatters.mo b/locale/pl/LC_MESSAGES/rc_formatters.mo new file mode 100644 index 0000000..a2d8327 Binary files /dev/null and b/locale/pl/LC_MESSAGES/rc_formatters.mo differ diff --git a/locale/pl/LC_MESSAGES/rcgcdw.po b/locale/pl/LC_MESSAGES/rc_formatters.po similarity index 73% rename from locale/pl/LC_MESSAGES/rcgcdw.po rename to locale/pl/LC_MESSAGES/rc_formatters.po index 7bd3d15..c7be713 100644 --- a/locale/pl/LC_MESSAGES/rcgcdw.po +++ b/locale/pl/LC_MESSAGES/rc_formatters.po @@ -6,80 +6,131 @@ msgid "" msgstr "" "Project-Id-Version: RcGcDw\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-03-17 20:53+0100\n" -"PO-Revision-Date: 2020-03-17 20:57+0100\n" -"Last-Translator: Frisk \n" -"Language-Team: \n" +"POT-Creation-Date: 2020-08-10 16:45+0200\n" +"PO-Revision-Date: 2020-08-10 16:41+0000\n" +"Last-Translator: Frisk The Evil Goat Overlord \n" +"Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.1.1\n" "Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 2.3\n" -"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:71 -msgid "Location" -msgstr "Lokacja" +#: src/formatters/rc.py:19 +msgid "director" +msgstr "Dyrektor" -#: rcgcdw.py:71 -msgid "About me" -msgstr "O mnie" +#: src/formatters/rc.py:19 +msgid "bot" +msgstr "Bot" -#: rcgcdw.py:71 -msgid "Google link" -msgstr "link Google" +#: src/formatters/rc.py:19 +msgid "editor" +msgstr "Redaktor" -#: rcgcdw.py:71 -msgid "Facebook link" -msgstr "link Facebook" +#: src/formatters/rc.py:19 +msgid "directors" +msgstr "Dyrektorzy" -#: rcgcdw.py:71 -msgid "Twitter link" -msgstr "link Twitter" +#: src/formatters/rc.py:19 +msgid "sysop" +msgstr "Administrator" -#: rcgcdw.py:71 -msgid "Reddit link" -msgstr "link Reddit" +#: src/formatters/rc.py:19 +msgid "bureaucrat" +msgstr "Biurokrata" -#: rcgcdw.py:71 -msgid "Twitch link" -msgstr "link Twitch" +#: src/formatters/rc.py:19 +msgid "reviewer" +msgstr "Przeglądający" -#: rcgcdw.py:71 -msgid "PSN link" -msgstr "link PSN" +#: src/formatters/rc.py:20 +msgid "autoreview" +msgstr "Automatycznie przeglądający" -#: rcgcdw.py:71 -msgid "VK link" -msgstr "link VK" +#: src/formatters/rc.py:20 +msgid "autopatrol" +msgstr "Automatycznie zatwierdzający" -#: rcgcdw.py:71 -msgid "XBL link" -msgstr "link XBL" +#: src/formatters/rc.py:20 +msgid "wiki_guardian" +msgstr "Strażnik wiki" -#: rcgcdw.py:71 -msgid "Steam link" -msgstr "link Steam" +#: src/formatters/rc.py:20 +msgid "second" +msgid_plural "seconds" +msgstr[0] "sekunda" +msgstr[1] "sekundy" +msgstr[2] "sekund" -#: rcgcdw.py:71 -msgid "Discord handle" -msgstr "konto Discord" +#: src/formatters/rc.py:20 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "minuta" +msgstr[1] "minuty" +msgstr[2] "minut" -#: rcgcdw.py:71 -msgid "Battle.net handle" -msgstr "konto Battle.net" +#: src/formatters/rc.py:20 +msgid "hour" +msgid_plural "hours" +msgstr[0] "godzina" +msgstr[1] "godziny" +msgstr[2] "godzin" -#: rcgcdw.py:172 rcgcdw.py:924 -msgid "Unknown" -msgstr "Nieznana" +#: src/formatters/rc.py:20 +msgid "day" +msgid_plural "days" +msgstr[0] "dzień" +msgstr[1] "dni" +msgstr[2] "dni" -#: rcgcdw.py:174 -msgid "unknown" -msgstr "nieznana sekcja" +#: src/formatters/rc.py:20 +msgid "week" +msgid_plural "weeks" +msgstr[0] "tydzień" +msgstr[1] "tygodnie" +msgstr[2] "tygodni" -#: rcgcdw.py:244 +#: src/formatters/rc.py:20 +msgid "month" +msgid_plural "months" +msgstr[0] "miesiąc" +msgstr[1] "miesiące" +msgstr[2] "miesięcy" + +#: src/formatters/rc.py:20 +msgid "year" +msgid_plural "years" +msgstr[0] "rok" +msgstr[1] "lata" +msgstr[2] "lat" + +#: src/formatters/rc.py:20 +msgid "millennium" +msgid_plural "millennia" +msgstr[0] "tysiąclecie" +msgstr[1] "tysiąclecia" +msgstr[2] "tysiącleci" + +#: src/formatters/rc.py:20 +msgid "decade" +msgid_plural "decades" +msgstr[0] "dekada" +msgstr[1] "dekady" +msgstr[2] "dekad" + +#: src/formatters/rc.py:20 +msgid "century" +msgid_plural "centuries" +msgstr[0] "stulecie" +msgstr[1] "stulecia" +msgstr[2] "stuleci" + +#: src/formatters/rc.py:52 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" @@ -88,7 +139,7 @@ msgstr "" "[{author}]({author_url}) editował(-a) [{article}]({edit_link}){comment} " "({sign}{edit_size})" -#: rcgcdw.py:246 +#: src/formatters/rc.py:54 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" @@ -97,19 +148,19 @@ msgstr "" "[{author}]({author_url}) stworzył(-a) [{article}]({edit_link}){comment} " "({sign}{edit_size})" -#: rcgcdw.py:249 +#: src/formatters/rc.py:57 #, 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:256 +#: src/formatters/rc.py:64 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" msgstr "" "[{author}]({author_url}) wycofał(-a) wersję [{file}]({file_link}){comment}" -#: rcgcdw.py:260 +#: src/formatters/rc.py:68 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" @@ -118,12 +169,12 @@ msgstr "" "[{author}]({author_url}) przesłał(-a) nową wersję [{file}]({file_link})" "{comment}" -#: rcgcdw.py:263 +#: src/formatters/rc.py:71 #, 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:267 +#: src/formatters/rc.py:75 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" @@ -132,15 +183,15 @@ msgstr "" "[{author}]({author_url}) usunął/usunęła przekierowanie przez nadpisanie " "[{page}]({page_link}){comment}" -#: rcgcdw.py:271 rcgcdw.py:276 +#: src/formatters/rc.py:79 src/formatters/rc.py:84 msgid "without making a redirect" -msgstr "bez utworzenia przekierowania przekierowania" +msgstr "bez utworzenia przekierowania" -#: rcgcdw.py:271 rcgcdw.py:277 +#: src/formatters/rc.py:79 src/formatters/rc.py:85 msgid "with a redirect" msgstr "z przekierowaniem" -#: rcgcdw.py:272 +#: src/formatters/rc.py:80 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" @@ -149,7 +200,7 @@ msgstr "" "[{author}]({author_url}) przeniósł/przeniosła {redirect}*{article}* do " "[{target}]({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:278 +#: src/formatters/rc.py:86 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " @@ -158,7 +209,7 @@ msgstr "" "[{author}]({author_url}) przeniósł/przeniosła {redirect}*{article}* do " "przekierowania [{target}]({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:283 +#: src/formatters/rc.py:91 #, python-brace-format msgid "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" @@ -167,32 +218,41 @@ msgstr "" "[{author}]({author_url}) przeniósł/przeniosła ustawienia zabezpieczeń z " "{redirect}*{article}* do [{target}]({target_url}){comment}" -#: rcgcdw.py:294 rcgcdw.py:699 -msgid "infinity and beyond" -msgstr "wieczność" +#: src/formatters/rc.py:102 src/formatters/rc.py:481 +msgid "for infinity and beyond" +msgstr "na wieczność" -#: rcgcdw.py:311 +#: src/formatters/rc.py:112 src/formatters/rc.py:489 +#, python-brace-format +msgid "for {num} {translated_length}" +msgstr "na {num} {translated_length}" + +#: src/formatters/rc.py:120 src/formatters/rc.py:492 +msgid "until {}" +msgstr "do {}" + +#: src/formatters/rc.py:124 msgid " on pages: " msgstr " na stronach: " -#: rcgcdw.py:318 rcgcdw.py:719 +#: src/formatters/rc.py:131 src/formatters/rc.py:503 msgid " and namespaces: " msgstr " oraz przestrzeniach nazw: " -#: rcgcdw.py:320 +#: src/formatters/rc.py:133 msgid " on namespaces: " msgstr " na przestrzeniach nazw: " -#: rcgcdw.py:332 +#: src/formatters/rc.py:145 #, python-brace-format msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) for {time}" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" "{restriction_desc}{comment}" msgstr "" -"[{author}]({author_url}) zablokował(-a) [{user}]({user_url}) na {time}" +"[{author}]({author_url}) zablokował(-a) [{user}]({user_url}) {time}" "{restriction_desc}{comment}" -#: rcgcdw.py:336 +#: src/formatters/rc.py:149 #, python-brace-format msgid "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" @@ -201,25 +261,25 @@ msgstr "" "[{author}]({author_url}) zmienił(-a) ustawienia blokady dla [{blocked_user}]" "({user_url}){comment}" -#: rcgcdw.py:340 +#: src/formatters/rc.py:153 #, 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:343 +#: src/formatters/rc.py:156 #, 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:343 +#: src/formatters/rc.py:156 msgid "their own profile" msgstr "swoim własnym profilu" -#: rcgcdw.py:346 +#: src/formatters/rc.py:159 #, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target} " @@ -228,54 +288,56 @@ msgstr "" "[{author}]({author_url}) odpowiedział(-a) na [komentarz]({comment}) na " "{target}" -#: rcgcdw.py:349 rcgcdw.py:355 rcgcdw.py:366 rcgcdw.py:370 +#: src/formatters/rc.py:162 src/formatters/rc.py:168 src/formatters/rc.py:179 +#: src/formatters/rc.py:183 msgid "their own" msgstr "swój własny" -#: rcgcdw.py:352 +#: src/formatters/rc.py:165 #, 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:358 +#: src/formatters/rc.py:171 #, python-brace-format msgid "[{author}]({author_url}) purged a comment on {target} profile" msgstr "" "[{author}]({author_url}) usunął/usunęła permanentnie komentarz na {target}" -#: rcgcdw.py:368 +#: src/formatters/rc.py:181 #, 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:374 +#: src/formatters/rc.py:187 #, python-brace-format msgid "[{target}]({target_url})'s" msgstr "na profilu użytkownika [{target}]({target_url})" -#: rcgcdw.py:374 +#: src/formatters/rc.py:187 #, python-brace-format msgid "[their own]({target_url})" msgstr "na [swoim własnym profilu użytkownika]({target_url})" -#: rcgcdw.py:375 +#: src/formatters/rc.py:188 #, 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:389 rcgcdw.py:391 rcgcdw.py:800 rcgcdw.py:802 +#: src/formatters/rc.py:202 src/formatters/rc.py:204 src/formatters/rc.py:581 +#: src/formatters/rc.py:583 msgid "none" msgstr "brak" -#: rcgcdw.py:397 rcgcdw.py:787 +#: src/formatters/rc.py:210 src/formatters/rc.py:568 msgid "System" msgstr "System" -#: rcgcdw.py:402 +#: src/formatters/rc.py:215 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " @@ -284,11 +346,12 @@ msgstr "" "[{author}]({author_url}) zabezpieczył(-a) [{article}]({article_url}) z " "następującymi ustawieniami: {settings}{comment}" -#: rcgcdw.py:404 rcgcdw.py:412 rcgcdw.py:810 rcgcdw.py:816 +#: src/formatters/rc.py:217 src/formatters/rc.py:225 src/formatters/rc.py:591 +#: src/formatters/rc.py:597 msgid " [cascading]" msgstr " [kaskadowo]" -#: rcgcdw.py:409 +#: src/formatters/rc.py:222 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" @@ -297,7 +360,7 @@ msgstr "" "[{author}]({author_url}) modyfikował(-a) ustawienia zabezpieczeń [{article}]" "({article_url}) na: {settings}{comment}" -#: rcgcdw.py:416 +#: src/formatters/rc.py:229 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" @@ -306,7 +369,7 @@ msgstr "" "[{author}]({author_url}) usunął/usunęła zabezpieczenia z [{article}]" "({article_url}){comment}" -#: rcgcdw.py:420 +#: src/formatters/rc.py:233 #, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" @@ -324,7 +387,7 @@ msgstr[2] "" "[{author}]({author_url}) zmienił(-a) widoczność {amount} wersji strony " "[{article}]({article_url}){comment}" -#: rcgcdw.py:425 +#: src/formatters/rc.py:238 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -342,23 +405,23 @@ msgstr[2] "" "[{author}]({author_url}) zaimportował(-a) [{article}]({article_url}) {count} " "wersjami{comment}" -#: rcgcdw.py:430 +#: src/formatters/rc.py:243 #, 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:432 +#: src/formatters/rc.py:245 #, python-brace-format msgid "[{author}]({author_url}) changed visibility of log events{comment}" msgstr "[{author}]({author_url}) zmienił(-a) widoczność wydarzeń{comment}" -#: rcgcdw.py:434 +#: src/formatters/rc.py:247 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" msgstr "[{author}]({author_url}) zaimportował(-a) interwiki{comment}" -#: rcgcdw.py:437 +#: src/formatters/rc.py:250 #, python-brace-format msgid "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" @@ -366,7 +429,7 @@ msgstr "" "[{author}]({author_url}) edytował(-a) filtr nadużyć [numer {number}]" "({filter_url})" -#: rcgcdw.py:440 +#: src/formatters/rc.py:254 #, python-brace-format msgid "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" @@ -374,7 +437,7 @@ msgstr "" "[{author}]({author_url}) stworzył(-a) filtr nadużyć [numer {number}]" "({filter_url})" -#: rcgcdw.py:444 +#: src/formatters/rc.py:258 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" @@ -383,7 +446,35 @@ msgstr "" "[{author}]({author_url}) połączył(-a) historie zmian [{article}]" "({article_url}) z [{dest}]({dest_url}){comment}" -#: rcgcdw.py:448 +#: src/formatters/rc.py:261 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "Konto [{author}]({author_url}) zostało utworzone automatycznie" + +#: src/formatters/rc.py:263 src/formatters/rc.py:271 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "Konto [{author}]({author_url}) zostało utworzone" + +#: src/formatters/rc.py:266 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" +"Konto [{article}]({article_url}) zostało utworzone przez [{author}]" +"({author_url}){comment}" + +#: src/formatters/rc.py:269 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" +"Konto [{article}]({article_url}) zostało utworzone przez [{author}]" +"({author_url}) oraz hasło do konta zostało przesłane przez email {comment}" + +#: src/formatters/rc.py:274 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" @@ -392,7 +483,7 @@ msgstr "" "[{author}]({author_url}) dodał(-a) wpis do [tabeli interwiki]({table_url}), " "który prowadzi do {website} z prefixem {prefix}" -#: rcgcdw.py:454 +#: src/formatters/rc.py:280 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " @@ -401,7 +492,7 @@ msgstr "" "[{author}]({author_url}) edytował(-a) wpis w [tabeli interwiki]" "({table_url}), który prowadzi do {website} z prefixem {prefix}" -#: rcgcdw.py:460 +#: src/formatters/rc.py:286 #, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" @@ -409,7 +500,7 @@ msgstr "" "[{author}]({author_url}) usunął/usunęła wpis z [tabeli interwiki]" "({table_url})" -#: rcgcdw.py:463 +#: src/formatters/rc.py:289 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" @@ -418,14 +509,14 @@ msgstr "" "[{author}]({author_url}) zmienił(-a) model zawartości [{article}]" "({article_url}) z {old} na {new}{comment}" -#: rcgcdw.py:467 +#: src/formatters/rc.py:293 #, 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:470 +#: src/formatters/rc.py:296 #, python-brace-format msgid "" "[{author}]({author_url}) created the sprite sheet for [{article}]" @@ -433,276 +524,273 @@ msgid "" msgstr "" "[{author}]({author_url}) utworzył(-a) sprite sheet [{article}]({article_url})" -#: rcgcdw.py:473 +#: src/formatters/rc.py:299 #, 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:478 +#: src/formatters/rc.py:302 #, python-brace-format msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) utworzył(-a) tabelę Cargo \"{table}\"" -#: rcgcdw.py:480 +#: src/formatters/rc.py:304 #, python-brace-format msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) usunęł(-a) tabelę Cargo \"{table}\"" -#: rcgcdw.py:485 +#: src/formatters/rc.py:307 #, python-brace-format msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" msgstr "" "[{author}]({author_url}) utworzył(-a) ponownie tabelę Cargo \"{table}\"" -#: rcgcdw.py:490 +#: src/formatters/rc.py:310 #, python-brace-format msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) zastąpił(-a) tabelę Cargo \"{table}\"" -#: rcgcdw.py:493 +#: src/formatters/rc.py:313 #, 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:497 +#: src/formatters/rc.py:317 #, 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:501 +#: src/formatters/rc.py:321 #, 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:504 +#: src/formatters/rc.py:324 #, 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:506 +#: src/formatters/rc.py:326 msgid "An action has been hidden by administration." msgstr "Akcja została ukryta przez administrację." -#: rcgcdw.py:515 rcgcdw.py:803 +#: src/formatters/rc.py:332 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" +"Nieznane wydarzenie `{event}` wykonane przez [{author}]({author_url}), zgłoś " +"je na [serwerze wsparcia](<{support}>)." + +#: src/formatters/rc.py:348 src/formatters/rc.py:584 msgid "No description provided" msgstr "Nie podano opisu zmian" -#: rcgcdw.py:563 +#: src/formatters/rc.py:375 msgid "(N!) " msgstr "(N!) " -#: rcgcdw.py:564 +#: src/formatters/rc.py:376 msgid "m" msgstr "d" -#: rcgcdw.py:564 +#: src/formatters/rc.py:376 msgid "b" msgstr "b" -#: rcgcdw.py:583 rcgcdw.py:588 +#: src/formatters/rc.py:393 src/formatters/rc.py:398 msgid "__Only whitespace__" msgstr "__Tylko znaki niedrukowane__" -#: rcgcdw.py:594 +#: src/formatters/rc.py:403 msgid "Removed" msgstr "Usunięto" -#: rcgcdw.py:597 +#: src/formatters/rc.py:405 msgid "Added" msgstr "Dodano" -#: rcgcdw.py:631 rcgcdw.py:669 +#: src/formatters/rc.py:439 src/formatters/rc.py:450 msgid "Options" msgstr "Opcje" -#: rcgcdw.py:631 +#: src/formatters/rc.py:439 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "([podgląd]({link}) | [wycofaj]({undolink}))" -#: rcgcdw.py:634 +#: src/formatters/rc.py:444 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "Przesłał(a) nową wersję {name}" -#: rcgcdw.py:636 +#: src/formatters/rc.py:446 #, python-brace-format msgid "Reverted a version of {name}" msgstr "Wycofano wersję {name}" -#: rcgcdw.py:638 +#: src/formatters/rc.py:448 #, python-brace-format msgid "Uploaded {name}" msgstr "Przesłał(a) {name}" -#: rcgcdw.py:654 -msgid "**No license!**" -msgstr "**Brak licencji!**" - -#: rcgcdw.py:666 -msgid "" -"\n" -"License: {}" -msgstr "" -"\n" -"Licencja: {}" - -#: rcgcdw.py:669 +#: src/formatters/rc.py:450 #, python-brace-format msgid "([preview]({link}))" msgstr "([podgląd]({link}))" -#: rcgcdw.py:673 +#: src/formatters/rc.py:455 #, python-brace-format msgid "Deleted page {article}" msgstr "Usunął/usunęła {article}" -#: rcgcdw.py:676 +#: src/formatters/rc.py:458 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "" "Usunął/usunęła przekierowanie ({article}) aby utworzyć miejsce dla " "przenoszonej strony" -#: rcgcdw.py:680 +#: src/formatters/rc.py:462 msgid "No redirect has been made" msgstr "Nie utworzono przekierowania" -#: rcgcdw.py:681 +#: src/formatters/rc.py:463 msgid "A redirect has been made" msgstr "Zostało utworzone przekierowanie" -#: rcgcdw.py:682 +#: src/formatters/rc.py:464 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "Przeniósł/przeniosła {redirect}{article} do {target}" -#: rcgcdw.py:685 +#: src/formatters/rc.py:467 #, 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:689 +#: src/formatters/rc.py:471 #, python-brace-format msgid "Moved protection settings from {redirect}{article} to {title}" msgstr "Przeniesiono ustawienia zabezpieczeń z {redirect}{article} do {title}" -#: rcgcdw.py:712 +#: src/formatters/rc.py:496 msgid "Blocked from editing the following pages: " msgstr "Blokada przed edytowaniem następujących stron: " -#: rcgcdw.py:721 +#: src/formatters/rc.py:505 msgid "Blocked from editing pages on following namespaces: " msgstr "Blokada przed edytowaniem stron na następujących przestrzeniach nazw: " -#: rcgcdw.py:735 +#: src/formatters/rc.py:516 msgid "Partial block details" msgstr "Szczegóły częściowej blokady" -#: rcgcdw.py:736 +#: src/formatters/rc.py:517 #, python-brace-format -msgid "Blocked {blocked_user} for {time}" -msgstr "Zablokowano {blocked_user} na {time}" +msgid "Blocked {blocked_user} {time}" +msgstr "Zablokowano {blocked_user} {time}" -#: rcgcdw.py:740 +#: src/formatters/rc.py:521 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "Zmienił ustawienia blokady {blocked_user}" -#: rcgcdw.py:744 +#: src/formatters/rc.py:525 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "Odblokował {blocked_user}" -#: rcgcdw.py:749 +#: src/formatters/rc.py:530 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "Pozostawiono komentarz na profilu użytkownika {target}" -#: rcgcdw.py:751 +#: src/formatters/rc.py:532 msgid "Left a comment on their own profile" msgstr "Pozostawił(a) komentarz na swoim profilu" -#: rcgcdw.py:756 +#: src/formatters/rc.py:537 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "Odpowiedziano na komentarz na profilu użytkownika {target}" -#: rcgcdw.py:758 +#: src/formatters/rc.py:539 msgid "Replied to a comment on their own profile" msgstr "Odpowiedział(a) na komentarz na swoim profilu" -#: rcgcdw.py:763 +#: src/formatters/rc.py:544 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "Edytowano komentarz na profilu użytkownika {target}" -#: rcgcdw.py:765 +#: src/formatters/rc.py:546 msgid "Edited a comment on their own profile" msgstr "Edytował(a) komentarz na swoim profilu" -#: rcgcdw.py:768 +#: src/formatters/rc.py:549 #, python-brace-format msgid "Edited {target}'s profile" msgstr "Edytowano profil użytkownika {target}" -#: rcgcdw.py:768 +#: src/formatters/rc.py:549 msgid "Edited their own profile" msgstr "Edytował(a) swój profil" -#: rcgcdw.py:770 +#: src/formatters/rc.py:551 #, python-brace-format msgid "Cleared the {field} field" msgstr "Wyczyszczono pole {field}" -#: rcgcdw.py:772 +#: src/formatters/rc.py:553 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "pole \"{field}\" zostało zmienione na: {desc}" -#: rcgcdw.py:775 +#: src/formatters/rc.py:556 #, python-brace-format msgid "Purged a comment on {target}'s profile" msgstr "Usunął permanentnie komentarz na profilu użytkownika {target}" -#: rcgcdw.py:781 +#: src/formatters/rc.py:562 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "Usunął komentarz na profilu użytkownika {target}" -#: rcgcdw.py:785 +#: src/formatters/rc.py:566 #, python-brace-format msgid "Changed group membership for {target}" msgstr "Zmieniono przynależność do grup dla {target}" -#: rcgcdw.py:789 +#: src/formatters/rc.py:570 #, python-brace-format msgid "{target} got autopromoted to a new usergroup" msgstr "{target} automatycznie otrzymał nową grupę użytkownika" -#: rcgcdw.py:804 +#: src/formatters/rc.py:585 #, 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:808 +#: src/formatters/rc.py:589 #, python-brace-format msgid "Protected {target}" msgstr "Zabezpieczono {target}" -#: rcgcdw.py:814 +#: src/formatters/rc.py:595 #, python-brace-format msgid "Changed protection level for {article}" msgstr "Zmieniono poziom zabezpieczeń {article}" -#: rcgcdw.py:820 +#: src/formatters/rc.py:601 #, python-brace-format msgid "Removed protection from {article}" msgstr "Usunięto zabezpieczenie {article}" -#: rcgcdw.py:824 +#: src/formatters/rc.py:605 #, python-brace-format msgid "Changed visibility of revision on page {article} " msgid_plural "Changed visibility of {amount} revisions on page {article} " @@ -710,7 +798,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:829 +#: src/formatters/rc.py:610 #, python-brace-format msgid "Imported {article} with {count} revision" msgid_plural "Imported {article} with {count} revisions" @@ -718,411 +806,259 @@ msgstr[0] "Zaimportowano {article} z {count} wersją" msgstr[1] "Zaimportowano {article} z {count} wersjami" msgstr[2] "Zaimportowano {article} z {count} wersjami" -#: rcgcdw.py:834 +#: src/formatters/rc.py:615 #, python-brace-format msgid "Restored {article}" msgstr "Przywrócono {article}" -#: rcgcdw.py:837 +#: src/formatters/rc.py:618 msgid "Changed visibility of log events" msgstr "Zmieniono widoczność logów" -#: rcgcdw.py:840 +#: src/formatters/rc.py:621 msgid "Imported interwiki" msgstr "Zaimportowano interwiki" -#: rcgcdw.py:843 +#: src/formatters/rc.py:624 #, python-brace-format msgid "Edited abuse filter number {number}" msgstr "Edytowano filtr nadużyć numer {number}" -#: rcgcdw.py:846 +#: src/formatters/rc.py:627 #, python-brace-format msgid "Created abuse filter number {number}" msgstr "Utworzono filtr nadużyć numer {number}" -#: rcgcdw.py:849 +#: src/formatters/rc.py:630 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "Połączono historie {article} z {dest}" -#: rcgcdw.py:853 +#: src/formatters/rc.py:634 +msgid "Created account automatically" +msgstr "Konto zostało utworzone automatycznie" + +#: src/formatters/rc.py:637 src/formatters/rc.py:646 +msgid "Created account" +msgstr "Stworzono konto" + +#: src/formatters/rc.py:640 +#, python-brace-format +msgid "Created account {article}" +msgstr "Utworzono konto {article}" + +#: src/formatters/rc.py:643 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "Utworzono konto {article} oraz wysłano hasło z użyciem e-maila" + +#: src/formatters/rc.py:649 msgid "Added an entry to the interwiki table" msgstr "Dodano wpis do tabeli interwiki" -#: rcgcdw.py:854 rcgcdw.py:860 +#: src/formatters/rc.py:650 src/formatters/rc.py:656 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "Prefix: {prefix}, strona: {website} | {desc}" -#: rcgcdw.py:859 +#: src/formatters/rc.py:655 msgid "Edited an entry in interwiki table" msgstr "Edytowano wpis interwiki" -#: rcgcdw.py:865 +#: src/formatters/rc.py:661 msgid "Deleted an entry in interwiki table" msgstr "Usunięto wpis interwiki" -#: rcgcdw.py:866 +#: src/formatters/rc.py:662 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "Prefix: {prefix} | {desc}" -#: rcgcdw.py:869 +#: src/formatters/rc.py:665 #, python-brace-format msgid "Changed the content model of the page {article}" msgstr "Zmieniono model zawartości {article}" -#: rcgcdw.py:870 +#: src/formatters/rc.py:666 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Model został zmieniony z {old} na {new}: {reason}" -#: rcgcdw.py:875 +#: src/formatters/rc.py:671 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Edytowano sprite dla {article}" -#: rcgcdw.py:878 +#: src/formatters/rc.py:674 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Utworzono sprite sheet dla {article}" -#: rcgcdw.py:881 +#: src/formatters/rc.py:677 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Edytowano część sprite dla {article}" -#: rcgcdw.py:887 +#: src/formatters/rc.py:681 #, python-brace-format msgid "Created the Cargo table \"{table}\"" msgstr "Utworzono tabelę Cargo \"{table}\"" -#: rcgcdw.py:891 +#: src/formatters/rc.py:685 #, python-brace-format msgid "Deleted the Cargo table \"{table}\"" msgstr "Usunięto tabelę Cargo \"{table}\"" -#: rcgcdw.py:898 +#: src/formatters/rc.py:690 #, python-brace-format msgid "Recreated the Cargo table \"{table}\"" msgstr "Utworzono ponownie tabelę Cargo \"{table}\"" -#: rcgcdw.py:905 +#: src/formatters/rc.py:695 #, python-brace-format msgid "Replaced the Cargo table \"{table}\"" msgstr "Zastąpiono tabelę Cargo \"{table}\"" -#: rcgcdw.py:909 +#: src/formatters/rc.py:699 #, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "Utworzono tag \"{tag}\"" -#: rcgcdw.py:913 +#: src/formatters/rc.py:703 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "Usunięto tag \"{tag}\"" -#: rcgcdw.py:917 +#: src/formatters/rc.py:707 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "Aktywowano tag \"{tag}\"" -#: rcgcdw.py:920 +#: src/formatters/rc.py:710 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "Dezaktywowano tag \"{tag}\"" -#: rcgcdw.py:923 +#: src/formatters/rc.py:713 +#, fuzzy msgid "Action has been hidden by administration." -msgstr "Akcja została ukryta przez administrację." +msgstr "Akcja została ukryta przez administrację" -#: rcgcdw.py:951 +#: src/formatters/rc.py:714 +msgid "Unknown" +msgstr "Nieznana" + +#: src/formatters/rc.py:718 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "Nieznane wydarzenie `{event}`" + +#: src/formatters/rc.py:723 src/formatters/rc.py:725 +msgid "Report this on the support server" +msgstr "Zgłoś to na serwerze wsparcia" + +#: src/formatters/rc.py:742 msgid "Tags" msgstr "Tagi" -#: rcgcdw.py:956 +#: src/formatters/rc.py:745 msgid "**Added**: " msgstr "**Dodane**: " -#: rcgcdw.py:956 +#: src/formatters/rc.py:745 msgid " and {} more\n" msgstr " oraz {} innych\n" -#: rcgcdw.py:957 +#: src/formatters/rc.py:746 msgid "**Removed**: " msgstr "**Usunięte**: " -#: rcgcdw.py:957 +#: src/formatters/rc.py:746 msgid " and {} more" msgstr " oraz {} innych" -#: rcgcdw.py:958 +#: src/formatters/rc.py:747 msgid "Changed categories" msgstr "Zmienione kategorie" -#: rcgcdw.py:977 -msgid "~~hidden~~" -msgstr "~~ukryte~~" - -#: rcgcdw.py:983 -msgid "hidden" -msgstr "ukryte" - -#: rcgcdw.py:1050 rcgcdw.py:1052 rcgcdw.py:1054 rcgcdw.py:1056 rcgcdw.py:1058 -#: rcgcdw.py:1060 rcgcdw.py:1062 #, python-brace-format msgid "{value} (avg. {avg})" msgstr "{value} (średnio {avg})" -#: rcgcdw.py:1086 rcgcdw.py:1114 msgid "Daily overview" msgstr "Podsumowanie dnia" -#: rcgcdw.py:1088 msgid "No activity" msgstr "Brak aktywności" -#: rcgcdw.py:1123 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} akcja)" msgstr[1] " ({} akcje)" msgstr[2] " ({} akcji)" -#: rcgcdw.py:1125 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} edycja)" msgstr[1] " ({} edycje)" msgstr[2] " ({} edycji)" -#: rcgcdw.py:1130 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} akcja)" msgstr[1] " UTC ({} akcje)" msgstr[2] " UTC ({} akcji)" -#: rcgcdw.py:1132 rcgcdw.py:1133 rcgcdw.py:1137 msgid "But nobody came" msgstr "Ale nikt nie przyszedł" -#: rcgcdw.py:1141 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:1142 -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:1143 msgid "Edits made" msgstr "Zrobionych edycji" -#: rcgcdw.py:1143 msgid "New files" msgstr "Nowych plików" -#: rcgcdw.py:1143 msgid "Admin actions" msgstr "Akcji administratorskich" -#: rcgcdw.py:1144 msgid "Bytes changed" msgstr "Zmienionych bajtów" -#: rcgcdw.py:1144 -msgid "New articles" -msgstr "Nowych artykułów" - -#: rcgcdw.py:1145 msgid "Unique contributors" msgstr "Unikalnych edytujących" -#: rcgcdw.py:1146 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:1147 msgid "Day score" msgstr "Wynik dnia" -#: rcgcdw.py:1291 -#, python-brace-format -msgid "Connection to {wiki} seems to be stable now." -msgstr "Połączenie z {wiki} wygląda na stabilne." +#, fuzzy +#~ msgid "Most edited article" +#~ msgid_plural "Most edited articles" +#~ msgstr[0] "Przywrócono {article}" +#~ msgstr[1] "Przywrócono {article}" +#~ msgstr[2] "Przywrócono {article}" -#: rcgcdw.py:1292 rcgcdw.py:1407 -msgid "Connection status" -msgstr "Problem z połączeniem" +#, fuzzy +#~ msgid "New articles" +#~ msgstr "Przywrócono {article}" -#: rcgcdw.py:1406 -#, python-brace-format -msgid "{wiki} seems to be down or unreachable." -msgstr "{wiki} nie działa lub jest nieosiągalna." - -#: rcgcdw.py:1465 -msgid "director" -msgstr "Dyrektor" - -#: rcgcdw.py:1465 -msgid "bot" -msgstr "Bot" - -#: rcgcdw.py:1465 -msgid "editor" -msgstr "Redaktor" - -#: rcgcdw.py:1465 -msgid "directors" -msgstr "Dyrektorzy" - -#: rcgcdw.py:1465 -msgid "sysop" -msgstr "Administrator" - -#: rcgcdw.py:1465 -msgid "bureaucrat" -msgstr "Biurokrata" - -#: rcgcdw.py:1465 -msgid "reviewer" -msgstr "Przeglądający" - -#: rcgcdw.py:1466 -msgid "autoreview" -msgstr "Automatycznie przeglądający" - -#: rcgcdw.py:1466 -msgid "autopatrol" -msgstr "Automatycznie zatwierdzający" - -#: rcgcdw.py:1466 -msgid "wiki_guardian" -msgstr "Strażnik wiki" - -#: rcgcdw.py:1466 -msgid "second" -msgid_plural "seconds" -msgstr[0] "sekunda" -msgstr[1] "sekundy" -msgstr[2] "sekund" - -#: rcgcdw.py:1466 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "minuta" -msgstr[1] "minuty" -msgstr[2] "minut" - -#: rcgcdw.py:1466 -msgid "hour" -msgid_plural "hours" -msgstr[0] "godzina" -msgstr[1] "godziny" -msgstr[2] "godzin" - -#: rcgcdw.py:1466 -msgid "day" -msgid_plural "days" -msgstr[0] "dzień" -msgstr[1] "dni" -msgstr[2] "dni" - -#: rcgcdw.py:1466 -msgid "week" -msgid_plural "weeks" -msgstr[0] "tydzień" -msgstr[1] "tygodnie" -msgstr[2] "tygodni" - -#: rcgcdw.py:1466 -msgid "month" -msgid_plural "months" -msgstr[0] "miesiąc" -msgstr[1] "miesiące" -msgstr[2] "miesięcy" - -#: rcgcdw.py:1466 -msgid "year" -msgid_plural "years" -msgstr[0] "rok" -msgstr[1] "lata" -msgstr[2] "lat" - -#: rcgcdw.py:1466 -msgid "millennium" -msgid_plural "millennia" -msgstr[0] "tysiąclecie" -msgstr[1] "tysiąclecia" -msgstr[2] "tysiącleci" - -#: rcgcdw.py:1466 -msgid "decade" -msgid_plural "decades" -msgstr[0] "dekada" -msgstr[1] "dekady" -msgstr[2] "dekad" - -#: rcgcdw.py:1466 -msgid "century" -msgid_plural "centuries" -msgstr[0] "stulecie" -msgstr[1] "stulecia" -msgstr[2] "stuleci" - -#~ msgid "Comment content" -#~ msgstr "Zawartość komentarza" +#~ msgid "**No license!**" +#~ msgstr "**Brak licencji!**" #~ msgid "" -#~ "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " -#~ "[{target}]({target_url}){comment}" +#~ "\n" +#~ "License: {}" #~ msgstr "" -#~ "[{author}]({author_url}) przeniósł/przeniosła {redirect}*{article}* " -#~ "nadpisując przekierowanie do [{target}]({target_url}){comment}" - -#~ msgid "Unable to process the event" -#~ msgstr "Nie udało się odczytać wydarzenia" - -#~ msgid "error" -#~ msgstr "błąd" - -#~ msgid "{wiki} is back up!" -#~ msgstr "{wiki} jest ponownie osiągalna!" - -#~ msgid "Moved {article} to redirect page ({title})" -#~ msgstr "Przeniesiono {article} do przekierowania ({title})" - -#~ msgid "Removed the block on {blocked_user}" -#~ msgstr "Usunięto blokadę na {blocked_user}" - -#~ msgid "Removed a comment on {target}'s profile" -#~ msgstr "Usunięto komentarz na profilu użytkownika {target}" - -#~ msgid "Changed {target}'s user groups" -#~ msgstr "Zmieniono grupy użytkownika {target}" - -#~ msgid "Modified protection settings for {article}" -#~ msgstr "Zmodyfikowano ustawienia zabezpieczeń dla {article}" - -#~ msgid "Removed revision(s) from public view for {article}" -#~ msgstr "Usunięto edycje z widoku publicznego dla {article}" - -#~ msgid "Removed events" -#~ msgstr "Usunięto wydarzenia" - -#~ msgid "Added interwiki entry" -#~ msgstr "Dodano intwrwiki" - -#~ msgid "https://i.imgur.com/2jWQEt1.png" -#~ msgstr "https://i.imgur.com/2jWQEt1.png" +#~ "\n" +#~ "Licencja: {}" diff --git a/locale/pl/LC_MESSAGES/rcgcdw.mo b/locale/pl/LC_MESSAGES/rcgcdw.mo deleted file mode 100644 index 81f477b..0000000 Binary files a/locale/pl/LC_MESSAGES/rcgcdw.mo and /dev/null differ diff --git a/locale/pl/LC_MESSAGES/wiki.mo b/locale/pl/LC_MESSAGES/wiki.mo new file mode 100644 index 0000000..ba5317a Binary files /dev/null and b/locale/pl/LC_MESSAGES/wiki.mo differ diff --git a/locale/pl/LC_MESSAGES/wiki.po b/locale/pl/LC_MESSAGES/wiki.po new file mode 100644 index 0000000..101c514 --- /dev/null +++ b/locale/pl/LC_MESSAGES/wiki.po @@ -0,0 +1,39 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: RcGcDw\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-10 01:01+0200\n" +"PO-Revision-Date: 2020-03-17 20:57+0100\n" +"Last-Translator: Frisk \n" +"Language-Team: \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" +"X-Generator: Poedit 2.3\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#: src/wiki.py:207 +msgid "~~hidden~~" +msgstr "~~ukryte~~" + +#: src/wiki.py:212 +msgid "hidden" +msgstr "ukryte" + +#, python-brace-format +#~ msgid "Connection to {wiki} seems to be stable now." +#~ msgstr "Połączenie z {wiki} wygląda na stabilne." + +#~ msgid "Connection status" +#~ msgstr "Problem z połączeniem" + +#, python-brace-format +#~ msgid "{wiki} seems to be down or unreachable." +#~ msgstr "{wiki} nie działa lub jest nieosiągalna." diff --git a/locale/pt-br/LC_MESSAGES/.gitkeep b/locale/pt-br/LC_MESSAGES/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/locale/pt-br/LC_MESSAGES/discord.mo b/locale/pt-br/LC_MESSAGES/discord.mo new file mode 100644 index 0000000..5d4a608 Binary files /dev/null and b/locale/pt-br/LC_MESSAGES/discord.mo differ diff --git a/locale/pt-br/LC_MESSAGES/discord.po b/locale/pt-br/LC_MESSAGES/discord.po new file mode 100644 index 0000000..4e619ed --- /dev/null +++ b/locale/pt-br/LC_MESSAGES/discord.po @@ -0,0 +1,35 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the RcGcDd package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: RcGcDd\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-10 16:46+0200\n" +"PO-Revision-Date: 2020-08-10 01:53+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3.1\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: src/discord.py:25 +msgid "wiki deletion" +msgstr "" + +#: src/discord.py:25 src/discord.py:26 +msgid "wiki becoming inaccessible" +msgstr "" + +#: src/discord.py:27 +msgid "unknown error" +msgstr "" + +#: src/discord.py:28 +msgid "The webhook for {} has been removed due to {}." +msgstr "" diff --git a/locale/pt-br/LC_MESSAGES/discussion_formatters.mo b/locale/pt-br/LC_MESSAGES/discussion_formatters.mo new file mode 100644 index 0000000..1b96714 Binary files /dev/null and b/locale/pt-br/LC_MESSAGES/discussion_formatters.mo differ diff --git a/locale/pt-br/LC_MESSAGES/discussion_formatters.po b/locale/pt-br/LC_MESSAGES/discussion_formatters.po new file mode 100644 index 0000000..d32ff91 --- /dev/null +++ b/locale/pt-br/LC_MESSAGES/discussion_formatters.po @@ -0,0 +1,168 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Frisk , 2020. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-10 16:45+0200\n" +"PO-Revision-Date: 2020-08-10 14:11+0000\n" +"Last-Translator: Eduaddad \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt-br\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 4.1.1\n" + +#: src/formatters/discussions.py:21 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}f/p/{threadId}>) " +"in {forumName}" +msgstr "" +"Criado [{title}](<{url}f/p/{threadId}>) por [{author}](<{url}f/u/{creatorId}" +">) no {forumName}" + +#: src/formatters/discussions.py:23 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a poll [{title}](<{url}f/p/" +"{threadId}>) in {forumName}" +msgstr "" +"[{author}](<{url}f/u/{creatorId}>)criou uma enquete [{title}](<{url}f/p/" +"{threadId}>) no {forumName}" + +#: src/formatters/discussions.py:28 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}f/p/{threadId}/r/" +"{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}" +msgstr "" +"[{author}]({author_url}) criou uma [resposta](<{url}f/p/{threadId}/r/{postId}" +">) para [{title}](<{url}f/p/{threadId}>) em {forumName}" + +#: src/formatters/discussions.py:30 src/formatters/discussions.py:38 +#: src/formatters/discussions.py:96 src/formatters/discussions.py:108 +msgid "unknown" +msgstr "desconhecido" + +#: src/formatters/discussions.py:34 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/" +"Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) criou [{title}](<{url}wiki/Message_Wall:{user_wall}?" +"threadId={threadId}>) no mural de mensagens de [{user}(<{url}wiki/" +"Message_Wall:{user_wall}>)" + +#: src/formatters/discussions.py:36 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}) on [{user}'s Message Wall]" +"(<{url}wiki/Message_Wall:{user_wall}>)" +msgstr "" +"[{author}]({author_url}) criou uma [resposta](<{url}wiki/Message_Wall:" +"{user_wall}?threadId={threadId}#{replyId}>) para [{title}](<{url}wiki/" +"Message_Wall:{user_wall}?threadId={threadId}>) no mural de mensagens de " +"[{user}](<{url}wiki/Message_Wall:{user_wall}>)" + +#: src/formatters/discussions.py:40 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a [comment](<{url}wiki/{article}?" +"threadId={threadId}>) on [{article}](<{url}wiki/{article}>)" +msgstr "" +"[{author}]({author_url})criou um [comentário](<{url}wiki/{article}?" +"commentId={commentId}>) no [{article}](<{url}wiki/{article}>)" + +#: src/formatters/discussions.py:42 +#, fuzzy, python-brace-format +msgid "" +"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}wiki/{article}?" +"threadId={threadId}) to a [comment](<{url}wiki/{article}?threadId={threadId}" +"#{replyId}>) on [{article}](<{url}wiki/{article}>)" +msgstr "" +"[{author}]({author_url}) criou uma [resposta](<{url}wiki/{article}?" +"threadId={threadId}) para um [comentário](<{url}wiki/{article}?" +"commentId={commentId}&replyId={replyId}>) no [{article}](<{url}wiki/{article}" +">)" + +#: src/formatters/discussions.py:48 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." +msgstr "" + +#: src/formatters/discussions.py:74 +#, python-brace-format +msgid "Created \"{title}\"" +msgstr "Criado \"{title}\"" + +#: src/formatters/discussions.py:79 +#, python-brace-format +msgid "Created a poll \"{title}\"" +msgstr "Criou uma enquete \"{title}\"" + +#: src/formatters/discussions.py:84 +msgid "Option {}" +msgstr "Option {}" + +#: src/formatters/discussions.py:85 +#, python-brace-format +msgid "__[View image]({image_url})__" +msgstr "__[Ver imagem]({image_url})__" + +#: src/formatters/discussions.py:93 +#, python-brace-format +msgid "Replied to \"{title}\"" +msgstr "Respondido o \"{title}\"" + +#: src/formatters/discussions.py:102 +#, python-brace-format +msgid "Created \"{title}\" on {user}'s Message Wall" +msgstr "Criado \"{title}\" no mural de mensagem de {user}" + +#: src/formatters/discussions.py:106 +#, python-brace-format +msgid "Replied to \"{title}\" on {user}'s Message Wall" +msgstr "Respondeu a \"{title}\" no mural de mensagem de {user}" + +#: src/formatters/discussions.py:112 +#, python-brace-format +msgid "Commented on {article}" +msgstr "Comentou em {article}" + +#: src/formatters/discussions.py:116 +#, python-brace-format +msgid "Replied to a comment on {article}" +msgstr "Respondeu a um comentário em {article}" + +#: src/formatters/discussions.py:120 +#, python-brace-format +msgid "Unknown event `{event}`" +msgstr "" + +#: src/formatters/discussions.py:125 src/formatters/discussions.py:127 +msgid "Report this on the support server" +msgstr "" + +#, fuzzy, python-brace-format +#~ msgid "" +#~ "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) " +#~ "in {forumName}" +#~ msgstr "" +#~ "[{author}](<{url}f/u/{creatorId}>)criou uma enquete [{title}](<{url}f/p/" +#~ "{threadId}>) no {forumName}" + +#, python-brace-format +#~ msgid "Created a quiz \"{title}\"" +#~ msgstr "Criou uma enquete \"{title}\"" diff --git a/locale/pt-br/LC_MESSAGES/discussions.mo b/locale/pt-br/LC_MESSAGES/discussions.mo deleted file mode 100644 index b766170..0000000 Binary files a/locale/pt-br/LC_MESSAGES/discussions.mo and /dev/null differ diff --git a/locale/pt-br/LC_MESSAGES/discussions.po b/locale/pt-br/LC_MESSAGES/discussions.po deleted file mode 100644 index d9bc866..0000000 --- a/locale/pt-br/LC_MESSAGES/discussions.po +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Frisk , 2020. -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-04 00:58+0200\n" -"PO-Revision-Date: 2020-07-04 01:09+0200\n" -"Last-Translator: Frisk \n" -"Language-Team: \n" -"Language: en_US\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.3\n" - -#: discussions.py:56 -#, python-brace-format -msgid "Replied to \"{title}\"" -msgstr "Respondido o \"{title}\"" - -#: discussions.py:63 discussions.py:79 discussions.py:127 discussions.py:143 -msgid "unknown" -msgstr "desconhecido" - -#: discussions.py:68 -#, python-brace-format -msgid "Replied to \"{title}\" on {user}'s Message Wall" -msgstr "Respondeu a \"{title}\" no mural de mensagem de {user}" - -#: discussions.py:72 -#, python-brace-format -msgid "Created \"{title}\"" -msgstr "Criado \"{title}\"" - -#: discussions.py:86 -#, python-brace-format -msgid "Created \"{title}\" on {user}'s Message Wall" -msgstr "Criado \"{title}\" no mural de mensagem de {user}" - -#: discussions.py:99 -#, python-brace-format -msgid "Created a poll titled \"{title}\"" -msgstr "" - -#: discussions.py:104 -msgid "Option {}" -msgstr "" - -#: discussions.py:105 -#, python-brace-format -msgid "__[View image]({image_url})__" -msgstr "" - -#: discussions.py:121 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}f/p/{threadId}>) " -"in {forumName}" -msgstr "" -"Criado [{title}](<{url}f/p/{threadId}>) por [{author}](<{url}f/u/{creatorId}" -">) no {forumName}" - -#: discussions.py:130 -#, fuzzy, python-brace-format -#| msgid "" -#| "[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}f/p/{threadId}" -#| ">) in {forumName}" -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created [{title}](<{wikiurl}wiki/" -"Message_Wall:{user_wall}?threadId={threadid}>) on {user}'s Message Wall" -msgstr "" -"Criado [{title}](<{url}f/p/{threadId}>) por [{author}](<{url}f/u/{creatorId}" -">) no {forumName}" - -#: discussions.py:136 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}f/p/{threadId}/r/" -"{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}" -msgstr "" -"[Responder](<{url}f/p/{threadId}/r/{postId}>) por [{author}](<{url}f/u/" -"{creatorId}>) do [{title}](<{url}f/p/{threadId}>) do {forumName}" - -#: discussions.py:147 -#, fuzzy, python-brace-format -#| msgid "" -#| "[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}f/p/{threadId}" -#| ">) in {forumName}" -msgid "" -"[{author}](<{url}f/u/{creatorId}>) replied to [{title}](<{wikiurl}wiki/" -"Message_Wall:{user_wall}?threadId={threadid}#{replyId}>) on {user}'s Message " -"Wall" -msgstr "" -"Criado [{title}](<{url}f/p/{threadId}>) por [{author}](<{url}f/u/{creatorId}" -">) no {forumName}" - -#: discussions.py:153 -#, python-brace-format -msgid "" -"[{author}](<{url}f/u/{creatorId}>) created a poll [{title}](<{url}f/p/" -"{threadId}>) in {forumName}" -msgstr "" diff --git a/locale/pt-br/LC_MESSAGES/misc.mo b/locale/pt-br/LC_MESSAGES/misc.mo index b6dd340..87ed168 100644 Binary files a/locale/pt-br/LC_MESSAGES/misc.mo and b/locale/pt-br/LC_MESSAGES/misc.mo differ diff --git a/locale/pt-br/LC_MESSAGES/misc.po b/locale/pt-br/LC_MESSAGES/misc.po index 710038a..a043ccc 100644 --- a/locale/pt-br/LC_MESSAGES/misc.po +++ b/locale/pt-br/LC_MESSAGES/misc.po @@ -7,18 +7,79 @@ 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" +"POT-Creation-Date: 2020-08-10 00:59+0200\n" +"PO-Revision-Date: 2020-08-04 09:51+0000\n" +"Last-Translator: Eduaddad \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt-br\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.1\n" -"Last-Translator: \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.1.1\n" -#: misc.py:76 +#: src/misc.py:96 +msgid "Location" +msgstr "Localização" + +#: src/misc.py:96 +msgid "About me" +msgstr "Sobre mim" + +#: src/misc.py:97 +msgid "Google link" +msgstr "Link do Google" + +#: src/misc.py:97 +msgid "Facebook link" +msgstr "Facebook link" + +#: src/misc.py:98 +msgid "Twitter link" +msgstr "Link do Twitter" + +#: src/misc.py:98 +msgid "Reddit link" +msgstr "Link do Reddit" + +#: src/misc.py:99 +msgid "Twitch link" +msgstr "Link do Twitch" + +#: src/misc.py:99 +msgid "PSN link" +msgstr "Link do PSN" + +#: src/misc.py:100 +msgid "VK link" +msgstr "Link do VK" + +#: src/misc.py:100 +msgid "XBL link" +msgstr "Link do XBL" + +#: src/misc.py:101 +msgid "Steam link" +msgstr "Link do Steam" + +#: src/misc.py:101 +msgid "Discord handle" +msgstr "Link do Discord" + +#: src/misc.py:102 +msgid "Battle.net handle" +msgstr "Link do Battle.net" + +#: src/misc.py:108 +msgid "Unknown" +msgstr "Desconhecido" + +#: src/misc.py:110 +msgid "unknown" +msgstr "desconhecido" + +#: src/misc.py:121 msgid "" "\n" "__And more__" diff --git a/locale/pt-br/LC_MESSAGES/rc_formatters.mo b/locale/pt-br/LC_MESSAGES/rc_formatters.mo new file mode 100644 index 0000000..c65d770 Binary files /dev/null and b/locale/pt-br/LC_MESSAGES/rc_formatters.mo differ diff --git a/locale/pt-br/LC_MESSAGES/rcgcdw.po b/locale/pt-br/LC_MESSAGES/rc_formatters.po similarity index 57% rename from locale/pt-br/LC_MESSAGES/rcgcdw.po rename to locale/pt-br/LC_MESSAGES/rc_formatters.po index 8a0507c..720775d 100644 --- a/locale/pt-br/LC_MESSAGES/rcgcdw.po +++ b/locale/pt-br/LC_MESSAGES/rc_formatters.po @@ -7,298 +7,374 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-03-17 20:53+0100\n" -"PO-Revision-Date: 2020-03-18 13:37+0100\n" -"Last-Translator: Frisk \n" -"Language-Team: \n" -"Language: pt_BR\n" +"POT-Creation-Date: 2020-08-10 16:45+0200\n" +"PO-Revision-Date: 2020-08-10 00:04+0000\n" +"Last-Translator: Eduaddad \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt-br\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 2.3\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.1.1\n" -#: rcgcdw.py:71 -msgid "Location" -msgstr "Localização" +#: src/formatters/rc.py:19 +msgid "director" +msgstr "diretor" -#: rcgcdw.py:71 -msgid "About me" -msgstr "Sobre mim" +#: src/formatters/rc.py:19 +msgid "bot" +msgstr "robô" -#: rcgcdw.py:71 -msgid "Google link" -msgstr "Link do Google" +#: src/formatters/rc.py:19 +msgid "editor" +msgstr "editor" -#: rcgcdw.py:71 -msgid "Facebook link" -msgstr "Facebook link" +#: src/formatters/rc.py:19 +msgid "directors" +msgstr "diretores" -#: rcgcdw.py:71 -msgid "Twitter link" -msgstr "Link do Twitter" +#: src/formatters/rc.py:19 +msgid "sysop" +msgstr "administrador" -#: rcgcdw.py:71 -msgid "Reddit link" -msgstr "Link do Reddit" +#: src/formatters/rc.py:19 +msgid "bureaucrat" +msgstr "burocrata" -#: rcgcdw.py:71 -msgid "Twitch link" -msgstr "Link do Twitch" +#: src/formatters/rc.py:19 +msgid "reviewer" +msgstr "revisor" -#: rcgcdw.py:71 -msgid "PSN link" -msgstr "Link do PSN" +#: src/formatters/rc.py:20 +msgid "autoreview" +msgstr "revisão automática" -#: rcgcdw.py:71 -msgid "VK link" -msgstr "Link do VK" +#: src/formatters/rc.py:20 +msgid "autopatrol" +msgstr "patrulha automatica" -#: rcgcdw.py:71 -msgid "XBL link" -msgstr "Link do XBL" +#: src/formatters/rc.py:20 +msgid "wiki_guardian" +msgstr "guardião_wiki" -#: rcgcdw.py:71 -msgid "Steam link" -msgstr "Link do Steam" +#: src/formatters/rc.py:20 +msgid "second" +msgid_plural "seconds" +msgstr[0] "segundo" +msgstr[1] "segundos" -#: rcgcdw.py:71 -msgid "Discord handle" -msgstr "" +#: src/formatters/rc.py:20 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "minuto" +msgstr[1] "minutos" -#: rcgcdw.py:71 -msgid "Battle.net handle" -msgstr "" +#: src/formatters/rc.py:20 +msgid "hour" +msgid_plural "hours" +msgstr[0] "hora" +msgstr[1] "horas" -#: rcgcdw.py:172 rcgcdw.py:924 -msgid "Unknown" -msgstr "Desconhecido" +#: src/formatters/rc.py:20 +msgid "day" +msgid_plural "days" +msgstr[0] "dia" +msgstr[1] "dias" -#: rcgcdw.py:174 -#, fuzzy -#| msgid "Unknown" -msgid "unknown" -msgstr "Desconhecido" +#: src/formatters/rc.py:20 +msgid "week" +msgid_plural "weeks" +msgstr[0] "semana" +msgstr[1] "semanas" -#: rcgcdw.py:244 +#: src/formatters/rc.py:20 +msgid "month" +msgid_plural "months" +msgstr[0] "mês" +msgstr[1] "meses" + +#: src/formatters/rc.py:20 +msgid "year" +msgid_plural "years" +msgstr[0] "ano" +msgstr[1] "anos" + +#: src/formatters/rc.py:20 +msgid "millennium" +msgid_plural "millennia" +msgstr[0] "milénio" +msgstr[1] "milénios" + +#: src/formatters/rc.py:20 +msgid "decade" +msgid_plural "decades" +msgstr[0] "década" +msgstr[1] "décadas" + +#: src/formatters/rc.py:20 +msgid "century" +msgid_plural "centuries" +msgstr[0] "século" +msgstr[1] "séculos" + +#: src/formatters/rc.py:52 #, python-brace-format msgid "" "[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}" "{edit_size})" msgstr "" +"[{author}]({author_url}) editou [{article}]({edit_link}){comment} ({sign}" +"{edit_size})" -#: rcgcdw.py:246 +#: src/formatters/rc.py:54 #, python-brace-format msgid "" "[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}" "{edit_size})" msgstr "" +"[{author}]({author_url}) criou [{article}]({edit_link}){comment} ({sign}" +"{edit_size})" -#: rcgcdw.py:249 +#: src/formatters/rc.py:57 #, python-brace-format msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}" -msgstr "" +msgstr "[{author}]({author_url}) carregou [{file}]({file_link}){comment}" -#: rcgcdw.py:256 +#: src/formatters/rc.py:64 #, python-brace-format msgid "" "[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}" msgstr "" "[{author}]({author_url}) reverteu a versão do [{file}]({file_link}){comment}" -#: rcgcdw.py:260 +#: src/formatters/rc.py:68 #, python-brace-format msgid "" "[{author}]({author_url}) uploaded a new version of [{file}]({file_link})" "{comment}" msgstr "" +"[{author}]({author_url}) carregou a nova versão de [{file}]({file_link})" +"{comment}" -#: rcgcdw.py:263 +#: src/formatters/rc.py:71 #, python-brace-format msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}" -msgstr "" +msgstr "[{author}]({author_url}) excluiu [{page}]({page_link}){comment}" -#: rcgcdw.py:267 +#: src/formatters/rc.py:75 #, python-brace-format msgid "" "[{author}]({author_url}) deleted redirect by overwriting [{page}]" "({page_link}){comment}" msgstr "" +"[{author}]({author_url}) excluiu o redirecionamento substituindo [{page}]" +"({page_link}){comment}" -#: rcgcdw.py:271 rcgcdw.py:276 +#: src/formatters/rc.py:79 src/formatters/rc.py:84 msgid "without making a redirect" -msgstr "" +msgstr "sem fazer um redirecionamento" -#: rcgcdw.py:271 rcgcdw.py:277 +#: src/formatters/rc.py:79 src/formatters/rc.py:85 msgid "with a redirect" -msgstr "" +msgstr "com um redirecionamento" -#: rcgcdw.py:272 +#: src/formatters/rc.py:80 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* to [{target}]" "({target_url}) {made_a_redirect}{comment}" msgstr "" +"[{author}]({author_url}) moveu {redirect}*{article}* para [{target}]" +"({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:278 +#: src/formatters/rc.py:86 #, python-brace-format msgid "" "[{author}]({author_url}) moved {redirect}*{article}* over redirect to " "[{target}]({target_url}) {made_a_redirect}{comment}" msgstr "" +"[{author}]({author_url}) moveu {redirect}*{article}* sobre o " +"redirecionamento para [{target}]({target_url}) {made_a_redirect}{comment}" -#: rcgcdw.py:283 -#, fuzzy, python-brace-format -#| msgid "Moved protection settings from {redirect}{article} to {title}" +#: src/formatters/rc.py:91 +#, python-brace-format msgid "" "[{author}]({author_url}) moved protection settings from {redirect}*{article}" "* to [{target}]({target_url}){comment}" -msgstr "Configurações de proteção movidos de {redirect}{article} para {title}" +msgstr "" +"[{author}]({author_url}) moveu as configurações de proteção de {redirect}" +"*{article}* para [{target}]({target_url}){comment}" -#: rcgcdw.py:294 rcgcdw.py:699 -msgid "infinity and beyond" -msgstr "infinito e além" +#: src/formatters/rc.py:102 src/formatters/rc.py:481 +msgid "for infinity and beyond" +msgstr "para o infinito e além" -#: rcgcdw.py:311 +#: src/formatters/rc.py:112 src/formatters/rc.py:489 +#, python-brace-format +msgid "for {num} {translated_length}" +msgstr "para {num} {translated_length}" + +#: src/formatters/rc.py:120 src/formatters/rc.py:492 +msgid "until {}" +msgstr "até {}" + +#: src/formatters/rc.py:124 msgid " on pages: " msgstr " nas páginas: " -#: rcgcdw.py:318 rcgcdw.py:719 +#: src/formatters/rc.py:131 src/formatters/rc.py:503 msgid " and namespaces: " msgstr " e espaços nominais: " -#: rcgcdw.py:320 +#: src/formatters/rc.py:133 msgid " on namespaces: " msgstr " nos espaços nominais: " -#: rcgcdw.py:332 -#, fuzzy, python-brace-format -#| msgid "Changed block settings for {blocked_user}" +#: src/formatters/rc.py:145 +#, python-brace-format msgid "" -"[{author}]({author_url}) blocked [{user}]({user_url}) for {time}" +"[{author}]({author_url}) blocked [{user}]({user_url}) {time}" +"{restriction_desc}{comment}" +msgstr "" +"[{author}]({author_url}) bloqueou [{user}]({user_url}) {time}" "{restriction_desc}{comment}" -msgstr "Configurações de bloqueio alteradas para {blocked_user}" -#: rcgcdw.py:336 -#, fuzzy, python-brace-format -#| msgid "Changed block settings for {blocked_user}" +#: src/formatters/rc.py:149 +#, python-brace-format msgid "" "[{author}]({author_url}) changed block settings for [{blocked_user}]" "({user_url}){comment}" -msgstr "Configurações de bloqueio alteradas para {blocked_user}" +msgstr "" +"[{author}]({author_url}) mudou as configurações de bloqueio para " +"[{blocked_user}]({user_url}){comment}" -#: rcgcdw.py:340 +#: src/formatters/rc.py:153 #, python-brace-format msgid "" "[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}" msgstr "" +"[{author}]({author_url}) desbloqueou [{blocked_user}]({user_url}){comment}" -#: rcgcdw.py:343 -#, fuzzy, python-brace-format -#| msgid "Left a comment on {target}'s profile" +#: src/formatters/rc.py:156 +#, python-brace-format msgid "" "[{author}]({author_url}) left a [comment]({comment}) on {target} profile" -msgstr "Deixou um comentário no perfil de {target}" +msgstr "" +"[{author}]({author_url}) deixou um [comentário]({comment}) no perfil de " +"{target}" -#: rcgcdw.py:343 -#, fuzzy -#| msgid "Edited their own profile" +#: src/formatters/rc.py:156 msgid "their own profile" -msgstr "Editou seu próprio perfil" +msgstr "seu próprio perfil" -#: rcgcdw.py:346 -#, fuzzy, python-brace-format -#| msgid "Replied to a comment on {target}'s profile" +#: src/formatters/rc.py:159 +#, python-brace-format msgid "" "[{author}]({author_url}) replied to a [comment]({comment}) on {target} " "profile" -msgstr "Respondeu a um comentário no perfil de {target}" - -#: rcgcdw.py:349 rcgcdw.py:355 rcgcdw.py:366 rcgcdw.py:370 -msgid "their own" msgstr "" +"[{author}]({author_url}) respondeu a um [comentário]({comment}) no perfil de " +"{target}" -#: rcgcdw.py:352 -#, fuzzy, python-brace-format -#| msgid "Edited a comment on {target}'s profile" +#: src/formatters/rc.py:162 src/formatters/rc.py:168 src/formatters/rc.py:179 +#: src/formatters/rc.py:183 +msgid "their own" +msgstr "próprio" + +#: src/formatters/rc.py:165 +#, python-brace-format msgid "" "[{author}]({author_url}) edited a [comment]({comment}) on {target} profile" -msgstr "Editou um comentário no perfil de {target}" +msgstr "" +"[{author}]({author_url}) editou um [comentário]({comment}) no perfil de " +"{target}" -#: rcgcdw.py:358 +#: src/formatters/rc.py:171 #, python-brace-format msgid "[{author}]({author_url}) purged a comment on {target} profile" msgstr "[{author}]({author_url}) limpou um comentário no perfil {target}" -#: rcgcdw.py:368 -#, fuzzy, python-brace-format -#| msgid "Deleted a comment on {target}'s profile" +#: src/formatters/rc.py:181 +#, python-brace-format msgid "[{author}]({author_url}) deleted a comment on {target} profile" -msgstr "Excluiu um comentário no perfil de {target}" +msgstr "[{author}]({author_url}) excluiu um comentário no perfil de {target}" -#: rcgcdw.py:374 +#: src/formatters/rc.py:187 #, python-brace-format msgid "[{target}]({target_url})'s" -msgstr "" +msgstr "[{target}]({target_url})" -#: rcgcdw.py:374 +#: src/formatters/rc.py:187 #, python-brace-format msgid "[their own]({target_url})" -msgstr "" +msgstr "[seu próprio]({target_url})" -#: rcgcdw.py:375 +#: src/formatters/rc.py:188 #, python-brace-format msgid "" "[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*" msgstr "" +"[{author}]({author_url}) editou o {field} no perfil de {target}. *({desc})*" -#: rcgcdw.py:389 rcgcdw.py:391 rcgcdw.py:800 rcgcdw.py:802 +#: src/formatters/rc.py:202 src/formatters/rc.py:204 src/formatters/rc.py:581 +#: src/formatters/rc.py:583 msgid "none" msgstr "nenhum" -#: rcgcdw.py:397 rcgcdw.py:787 +#: src/formatters/rc.py:210 src/formatters/rc.py:568 msgid "System" msgstr "Sistema" -#: rcgcdw.py:402 +#: src/formatters/rc.py:215 #, python-brace-format msgid "" "[{author}]({author_url}) protected [{article}]({article_url}) with the " "following settings: {settings}{comment}" msgstr "" +"[{author}]({author_url})protegeu [{article}]({article_url}) com as seguintes " +"configurações: {settings}{comment}" -#: rcgcdw.py:404 rcgcdw.py:412 rcgcdw.py:810 rcgcdw.py:816 +#: src/formatters/rc.py:217 src/formatters/rc.py:225 src/formatters/rc.py:591 +#: src/formatters/rc.py:597 msgid " [cascading]" msgstr " [em cascata]" -#: rcgcdw.py:409 +#: src/formatters/rc.py:222 #, python-brace-format msgid "" "[{author}]({author_url}) modified protection settings of [{article}]" "({article_url}) to: {settings}{comment}" msgstr "" +"[{author}]({author_url}) modificou as configurações de proteção de " +"[{article}]({article_url}) para: {settings}{comment}" -#: rcgcdw.py:416 +#: src/formatters/rc.py:229 #, python-brace-format msgid "" "[{author}]({author_url}) removed protection from [{article}]({article_url})" "{comment}" msgstr "" +"[{author}]({author_url}) removeu a proteção para [{article}]({article_url})" +"{comment}" -#: rcgcdw.py:420 -#, fuzzy, python-brace-format -#| msgid "Changed visibility of revision on page {article} " -#| msgid_plural "Changed visibility of {amount} revisions on page {article} " +#: src/formatters/rc.py:233 +#, python-brace-format msgid "" "[{author}]({author_url}) changed visibility of revision on page [{article}]" "({article_url}){comment}" msgid_plural "" "[{author}]({author_url}) changed visibility of {amount} revisions on page " "[{article}]({article_url}){comment}" -msgstr[0] "Visibilidade alterada da revisão na página {article} " -msgstr[1] "Visibilidade alterada de {amount} revisões na página {article} " +msgstr[0] "" +"[{author}]({author_url}) mudou a visibilidade da revisão na página[{article}]" +"({article_url}){comment}" +msgstr[1] "" +"[{author}]({author_url}) mudou a visibilidade da revisão {amount} na página " +"[{article}]({article_url}){comment}" -#: rcgcdw.py:425 +#: src/formatters/rc.py:238 #, python-brace-format msgid "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " @@ -307,715 +383,654 @@ msgid_plural "" "[{author}]({author_url}) imported [{article}]({article_url}) with {count} " "revisions{comment}" msgstr[0] "" +"[{author}]({author_url}) importou [{article}]({article_url}) com {count} " +"revisão{comment}" msgstr[1] "" +"[{author}]({author_url}) importou [{article}]({article_url}) com {count} " +"revisões{comment}" -#: rcgcdw.py:430 +#: src/formatters/rc.py:243 #, python-brace-format msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}" -msgstr "" +msgstr "[{author}]({author_url}) restaurou [{article}]({article_url}){comment}" -#: rcgcdw.py:432 -#, fuzzy, python-brace-format -#| msgid "Changed visibility of log events" +#: src/formatters/rc.py:245 +#, python-brace-format msgid "[{author}]({author_url}) changed visibility of log events{comment}" -msgstr "Visibilidade alterada de eventos de registros" +msgstr "" +"[{author}]({author_url}) mudou a visibilidade dos eventos de " +"registro{comment}" -#: rcgcdw.py:434 +#: src/formatters/rc.py:247 #, python-brace-format msgid "[{author}]({author_url}) imported interwiki{comment}" -msgstr "" +msgstr "[{author}]({author_url}) importou a interwiki{comment}" -#: rcgcdw.py:437 -#, fuzzy, python-brace-format -#| msgid "Edited abuse filter number {number}" +#: src/formatters/rc.py:250 +#, python-brace-format msgid "" "[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})" -msgstr "Número de filtro de abuso editado {number}" +msgstr "" +"[{author}]({author_url}) editou o filtro de abuso [number {number}]" +"({filter_url})" -#: rcgcdw.py:440 -#, fuzzy, python-brace-format -#| msgid "Created abuse filter number {number}" +#: src/formatters/rc.py:254 +#, python-brace-format msgid "" "[{author}]({author_url}) created abuse filter [number {number}]({filter_url})" -msgstr "Criado filtro de abuso número {number}" +msgstr "" +"[{author}]({author_url}) criou o filtro de abuso [number {number}]" +"({filter_url})" -#: rcgcdw.py:444 +#: src/formatters/rc.py:258 #, python-brace-format msgid "" "[{author}]({author_url}) merged revision histories of [{article}]" "({article_url}) into [{dest}]({dest_url}){comment}" msgstr "" +"[{author}]({author_url}) mesclou o histórico de revisão de [{article}]" +"({article_url}) para [{dest}]({dest_url}){comment}" -#: rcgcdw.py:448 +#: src/formatters/rc.py:261 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created automatically" +msgstr "Conta [{author}]({author_url}) foi criada automaticamente" + +#: src/formatters/rc.py:263 src/formatters/rc.py:271 +#, python-brace-format +msgid "Account [{author}]({author_url}) was created" +msgstr "Conta [{author}]({author_url}) foi criada" + +#: src/formatters/rc.py:266 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url})" +"{comment}" +msgstr "" +"Conta [{article}]({article_url}) foi criada por [{author}]({author_url})" +"{comment}" + +#: src/formatters/rc.py:269 +#, python-brace-format +msgid "" +"Account [{article}]({article_url}) was created by [{author}]({author_url}) " +"and password was sent by email{comment}" +msgstr "" +"Conta [{article}]({article_url}) foi criada por [{author}]({author_url}) e a " +"senha foi enviada por e-mail{comment}" + +#: src/formatters/rc.py:274 #, python-brace-format msgid "" "[{author}]({author_url}) added an entry to the [interwiki table]" "({table_url}) pointing to {website} with {prefix} prefix" msgstr "" +"[{author}]({author_url}) adicionou uma entrada à [tabela de interwiki]" +"({table_url}) apontando para {website} com o prefixo {prefix}" -#: rcgcdw.py:454 +#: src/formatters/rc.py:280 #, python-brace-format msgid "" "[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) " "pointing to {website} with {prefix} prefix" msgstr "" +"[{author}]({author_url}) editou uma entrada na [tabela de Interwiki]" +"({table_url}) apontando para {website} com o prefixo {prefix}" -#: rcgcdw.py:460 -#, fuzzy, python-brace-format -#| msgid "Deleted an entry in interwiki table" +#: src/formatters/rc.py:286 +#, python-brace-format msgid "" "[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})" -msgstr "Excluiu uma entrada na tabela interwiki" +msgstr "" +"[{author}]({author_url}) excluiu uma entrada na [tabela de Interwiki]" +"({table_url})" -#: rcgcdw.py:463 +#: src/formatters/rc.py:289 #, python-brace-format msgid "" "[{author}]({author_url}) changed the content model of the page [{article}]" "({article_url}) from {old} to {new}{comment}" msgstr "" +"[{author}]({author_url}) mudou o modelo de conteúdo da página [{article}]" +"({article_url}) de {old} para {new}{comment}" -#: rcgcdw.py:467 +#: src/formatters/rc.py:293 #, python-brace-format msgid "" "[{author}]({author_url}) edited the sprite for [{article}]({article_url})" msgstr "" +"[{author}]({author_url}) editou o sprite para [{article}]({article_url})" -#: rcgcdw.py:470 -#, fuzzy, python-brace-format -#| msgid "Created the sprite sheet for {article}" +#: src/formatters/rc.py:296 +#, python-brace-format msgid "" "[{author}]({author_url}) created the sprite sheet for [{article}]" "({article_url})" -msgstr "Criou a folha de sprites para {article}" +msgstr "" +"[{author}]({author_url})criou a folha de sprite para [{article}]" +"({article_url})" -#: rcgcdw.py:473 +#: src/formatters/rc.py:299 #, python-brace-format msgid "" "[{author}]({author_url}) edited the slice for [{article}]({article_url})" -msgstr "" +msgstr "[{author}]({author_url}) editou a peça para [{article}]({article_url})" -#: rcgcdw.py:478 +#: src/formatters/rc.py:302 #, python-brace-format msgid "[{author}]({author_url}) created the Cargo table \"{table}\"" msgstr "[{author}]({author_url}) criou tabela no Cargo \"{table}\"" -#: rcgcdw.py:480 +#: src/formatters/rc.py:304 #, python-brace-format msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) excluiu a tabela no Cargo \"{table}\"" +msgstr "[{author}]({author_url}) excluiu a tabela no Cargo \"{table}\"" -#: rcgcdw.py:485 +#: src/formatters/rc.py:307 #, python-brace-format msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) recriou a tabela no Cargo \"{table}\"" +msgstr "[{author}]({author_url}) recriou a tabela no Cargo \"{table}\"" -#: rcgcdw.py:490 +#: src/formatters/rc.py:310 #, python-brace-format msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\"" -msgstr "[{author}]({author_url}) substituiu a tabela no Cargo \"{table}\"" +msgstr "[{author}]({author_url}) substituiu a tabela no Cargo \"{table}\"" -#: rcgcdw.py:493 +#: src/formatters/rc.py:313 #, python-brace-format msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\"" -msgstr "" +msgstr "[{author}]({author_url}) criou a [marcação]({tag_url}) \"{tag}\"" -#: rcgcdw.py:497 +#: src/formatters/rc.py:317 #, python-brace-format msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\"" -msgstr "" +msgstr "[{author}]({author_url}) excluiu a [marcação]({tag_url}) \"{tag}\"" -#: rcgcdw.py:501 +#: src/formatters/rc.py:321 #, python-brace-format msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\"" -msgstr "" +msgstr "[{author}]({author_url}) ativou a [marcação]({tag_url}) \"{tag}\"" -#: rcgcdw.py:504 +#: src/formatters/rc.py:324 #, python-brace-format msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\"" -msgstr "" +msgstr "[{author}]({author_url}) desativou a [marcação]({tag_url}) \"{tag}\"" -#: rcgcdw.py:506 +#: src/formatters/rc.py:326 msgid "An action has been hidden by administration." +msgstr "Uma ação foi ocultada pela administração." + +#: src/formatters/rc.py:332 +#, python-brace-format +msgid "" +"Unknown event `{event}` by [{author}]({author_url}), report it on the " +"[support server](<{support}>)." msgstr "" -#: rcgcdw.py:515 rcgcdw.py:803 +#: src/formatters/rc.py:348 src/formatters/rc.py:584 msgid "No description provided" msgstr "Nenhuma descrição fornecida" -#: rcgcdw.py:563 +#: src/formatters/rc.py:375 msgid "(N!) " msgstr "(N!) " -#: rcgcdw.py:564 +#: src/formatters/rc.py:376 msgid "m" msgstr "m" -#: rcgcdw.py:564 +#: src/formatters/rc.py:376 msgid "b" msgstr "b" -#: rcgcdw.py:583 rcgcdw.py:588 +#: src/formatters/rc.py:393 src/formatters/rc.py:398 msgid "__Only whitespace__" msgstr "__Apenas espaço em branco__" -#: rcgcdw.py:594 +#: src/formatters/rc.py:403 msgid "Removed" msgstr "Removido" -#: rcgcdw.py:597 +#: src/formatters/rc.py:405 msgid "Added" msgstr "Adicionado" -#: rcgcdw.py:631 rcgcdw.py:669 +#: src/formatters/rc.py:439 src/formatters/rc.py:450 msgid "Options" msgstr "Opções" -#: rcgcdw.py:631 +#: src/formatters/rc.py:439 #, python-brace-format msgid "([preview]({link}) | [undo]({undolink}))" msgstr "([visualização]({link}) | [desfazer]({undolink}))" -#: rcgcdw.py:634 +#: src/formatters/rc.py:444 #, python-brace-format msgid "Uploaded a new version of {name}" msgstr "Carregou uma nova versão de {name}" -#: rcgcdw.py:636 +#: src/formatters/rc.py:446 #, python-brace-format msgid "Reverted a version of {name}" msgstr "Reverteu uma versão do {name}" -#: rcgcdw.py:638 +#: src/formatters/rc.py:448 #, python-brace-format msgid "Uploaded {name}" msgstr "Carregado {name}" -#: rcgcdw.py:654 -msgid "**No license!**" -msgstr "* * Sem licença!* *" - -#: rcgcdw.py:666 -msgid "" -"\n" -"License: {}" -msgstr "" -"\n" -"Licença: {}" - -#: rcgcdw.py:669 +#: src/formatters/rc.py:450 #, python-brace-format msgid "([preview]({link}))" msgstr "([visualização]({link}))" -#: rcgcdw.py:673 +#: src/formatters/rc.py:455 #, python-brace-format msgid "Deleted page {article}" msgstr "Página {article} excluída" -#: rcgcdw.py:676 +#: src/formatters/rc.py:458 #, python-brace-format msgid "Deleted redirect {article} by overwriting" msgstr "Redirecionado {article} excluído por sobrescrevendo" -#: rcgcdw.py:680 +#: src/formatters/rc.py:462 msgid "No redirect has been made" msgstr "Nenhum redirecionamento foi feito" -#: rcgcdw.py:681 +#: src/formatters/rc.py:463 msgid "A redirect has been made" msgstr "Foi feito um redirecionamento" -#: rcgcdw.py:682 +#: src/formatters/rc.py:464 #, python-brace-format msgid "Moved {redirect}{article} to {target}" msgstr "Movido {redirect}{article} para {target}" -#: rcgcdw.py:685 +#: src/formatters/rc.py:467 #, python-brace-format msgid "Moved {redirect}{article} to {title} over redirect" msgstr "Movido {redirect}{article} para {title} ao redirecionar" -#: rcgcdw.py:689 +#: src/formatters/rc.py:471 #, 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:712 +#: src/formatters/rc.py:496 msgid "Blocked from editing the following pages: " msgstr "Bloqueado de editar as seguintes páginas: " -#: rcgcdw.py:721 +#: src/formatters/rc.py:505 msgid "Blocked from editing pages on following namespaces: " msgstr "Bloqueado de editar páginas nos seguintes espaços nominais: " -#: rcgcdw.py:735 +#: src/formatters/rc.py:516 msgid "Partial block details" msgstr "Detalhes do bloqueio parcial" -#: rcgcdw.py:736 +#: src/formatters/rc.py:517 #, python-brace-format -msgid "Blocked {blocked_user} for {time}" -msgstr "Bloqueado {blocked_user} por {time}" +msgid "Blocked {blocked_user} {time}" +msgstr "Bloqueado {blocked_user} {time}" -#: rcgcdw.py:740 +#: src/formatters/rc.py:521 #, python-brace-format msgid "Changed block settings for {blocked_user}" msgstr "Configurações de bloqueio alteradas para {blocked_user}" -#: rcgcdw.py:744 +#: src/formatters/rc.py:525 #, python-brace-format msgid "Unblocked {blocked_user}" msgstr "Desbloqueado {blocked_user}" -#: rcgcdw.py:749 +#: src/formatters/rc.py:530 #, python-brace-format msgid "Left a comment on {target}'s profile" msgstr "Deixou um comentário no perfil de {target}" -#: rcgcdw.py:751 +#: src/formatters/rc.py:532 msgid "Left a comment on their own profile" msgstr "Deixou um comentário em seu próprio perfil" -#: rcgcdw.py:756 +#: src/formatters/rc.py:537 #, python-brace-format msgid "Replied to a comment on {target}'s profile" msgstr "Respondeu a um comentário no perfil de {target}" -#: rcgcdw.py:758 +#: src/formatters/rc.py:539 msgid "Replied to a comment on their own profile" msgstr "Respondeu a um comentário em seu próprio perfil" -#: rcgcdw.py:763 +#: src/formatters/rc.py:544 #, python-brace-format msgid "Edited a comment on {target}'s profile" msgstr "Editou um comentário no perfil de {target}" -#: rcgcdw.py:765 +#: src/formatters/rc.py:546 msgid "Edited a comment on their own profile" msgstr "Editou um comentário em seu próprio perfil" -#: rcgcdw.py:768 +#: src/formatters/rc.py:549 #, python-brace-format msgid "Edited {target}'s profile" msgstr "Editado perfil {target}" -#: rcgcdw.py:768 +#: src/formatters/rc.py:549 msgid "Edited their own profile" msgstr "Editou seu próprio perfil" -#: rcgcdw.py:770 +#: src/formatters/rc.py:551 #, python-brace-format msgid "Cleared the {field} field" -msgstr "" +msgstr "Limpo o campo {field}" -#: rcgcdw.py:772 +#: src/formatters/rc.py:553 #, python-brace-format msgid "{field} field changed to: {desc}" msgstr "campo {field} alterado para: {desc}" -#: rcgcdw.py:775 +#: src/formatters/rc.py:556 #, python-brace-format msgid "Purged a comment on {target}'s profile" msgstr "Eliminou um comentário no perfil de {target}" -#: rcgcdw.py:781 +#: src/formatters/rc.py:562 #, python-brace-format msgid "Deleted a comment on {target}'s profile" msgstr "Excluiu um comentário no perfil de {target}" -#: rcgcdw.py:785 +#: src/formatters/rc.py:566 #, python-brace-format msgid "Changed group membership for {target}" msgstr "Alterado grupo do membro de {target}" -#: rcgcdw.py:789 +#: src/formatters/rc.py:570 #, 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:804 +#: src/formatters/rc.py:585 #, 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:808 +#: src/formatters/rc.py:589 #, python-brace-format msgid "Protected {target}" msgstr "Protegido {target}" -#: rcgcdw.py:814 +#: src/formatters/rc.py:595 #, python-brace-format msgid "Changed protection level for {article}" msgstr "Nível de proteção alterado para {article}" -#: rcgcdw.py:820 +#: src/formatters/rc.py:601 #, python-brace-format msgid "Removed protection from {article}" msgstr "Removida a proteção de {article}" -#: rcgcdw.py:824 +#: src/formatters/rc.py:605 #, 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:829 +#: src/formatters/rc.py:610 #, 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:834 +#: src/formatters/rc.py:615 #, python-brace-format msgid "Restored {article}" msgstr "Página {article} excluída" -#: rcgcdw.py:837 +#: src/formatters/rc.py:618 msgid "Changed visibility of log events" msgstr "Visibilidade alterada de eventos de registros" -#: rcgcdw.py:840 +#: src/formatters/rc.py:621 msgid "Imported interwiki" msgstr "Interwiki importado" -#: rcgcdw.py:843 +#: src/formatters/rc.py:624 #, python-brace-format msgid "Edited abuse filter number {number}" msgstr "Número de filtro de abuso editado {number}" -#: rcgcdw.py:846 +#: src/formatters/rc.py:627 #, python-brace-format msgid "Created abuse filter number {number}" msgstr "Criado filtro de abuso número {number}" -#: rcgcdw.py:849 +#: src/formatters/rc.py:630 #, python-brace-format msgid "Merged revision histories of {article} into {dest}" msgstr "Históricos de revisão mesclados de {article} em {dest}" -#: rcgcdw.py:853 +#: src/formatters/rc.py:634 +msgid "Created account automatically" +msgstr "Conta criada automaticamente" + +#: src/formatters/rc.py:637 src/formatters/rc.py:646 +msgid "Created account" +msgstr "Conta criada" + +#: src/formatters/rc.py:640 +#, python-brace-format +msgid "Created account {article}" +msgstr "Conta criada {article}" + +#: src/formatters/rc.py:643 +#, python-brace-format +msgid "Created account {article} and password was sent by email" +msgstr "Conta criada {article} e a senha foi enviada por e-mail" + +#: src/formatters/rc.py:649 msgid "Added an entry to the interwiki table" msgstr "Adicionado uma entrada para a tabela interwiki" -#: rcgcdw.py:854 rcgcdw.py:860 +#: src/formatters/rc.py:650 src/formatters/rc.py:656 #, python-brace-format msgid "Prefix: {prefix}, website: {website} | {desc}" msgstr "Prefixo: {prefix}, site: {website} | {desc}" -#: rcgcdw.py:859 +#: src/formatters/rc.py:655 msgid "Edited an entry in interwiki table" msgstr "Editou uma entrada na tabela interwiki" -#: rcgcdw.py:865 +#: src/formatters/rc.py:661 msgid "Deleted an entry in interwiki table" msgstr "Excluiu uma entrada na tabela interwiki" -#: rcgcdw.py:866 +#: src/formatters/rc.py:662 #, python-brace-format msgid "Prefix: {prefix} | {desc}" msgstr "Prefixo: {prefix} | {desc}" -#: rcgcdw.py:869 +#: src/formatters/rc.py:665 #, 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:870 +#: src/formatters/rc.py:666 #, python-brace-format msgid "Model changed from {old} to {new}: {reason}" msgstr "Modelo alterado de {old} para {new}: {reason}" -#: rcgcdw.py:875 +#: src/formatters/rc.py:671 #, python-brace-format msgid "Edited the sprite for {article}" msgstr "Editou o sprite para {article}" -#: rcgcdw.py:878 +#: src/formatters/rc.py:674 #, python-brace-format msgid "Created the sprite sheet for {article}" msgstr "Criou a folha de sprites para {article}" -#: rcgcdw.py:881 +#: src/formatters/rc.py:677 #, python-brace-format msgid "Edited the slice for {article}" msgstr "Editou a fatia de {article}" -#: rcgcdw.py:887 +#: src/formatters/rc.py:681 #, python-brace-format msgid "Created the Cargo table \"{table}\"" msgstr "Criou a tabela no Cargo \"{table}\"" -#: rcgcdw.py:891 +#: src/formatters/rc.py:685 #, python-brace-format msgid "Deleted the Cargo table \"{table}\"" msgstr "Excluiu a tabela no Cargo \"{table}\"" -#: rcgcdw.py:898 +#: src/formatters/rc.py:690 #, python-brace-format msgid "Recreated the Cargo table \"{table}\"" msgstr "Recriou a tabela no Cargo \"{table}\"" -#: rcgcdw.py:905 +#: src/formatters/rc.py:695 #, python-brace-format msgid "Replaced the Cargo table \"{table}\"" msgstr "Substituiu a tabela no Cargo \"{table}\"" -#: rcgcdw.py:909 +#: src/formatters/rc.py:699 #, python-brace-format msgid "Created a tag \"{tag}\"" msgstr "Criei uma etiqueta \"{tag}\"" -#: rcgcdw.py:913 +#: src/formatters/rc.py:703 #, python-brace-format msgid "Deleted a tag \"{tag}\"" msgstr "Excluiu uma etiqueta \"{tag}\"" -#: rcgcdw.py:917 +#: src/formatters/rc.py:707 #, python-brace-format msgid "Activated a tag \"{tag}\"" msgstr "Ativou uma etiqueta \"{tag}\"" -#: rcgcdw.py:920 +#: src/formatters/rc.py:710 #, python-brace-format msgid "Deactivated a tag \"{tag}\"" msgstr "Desativou uma etiqueta \"{tag}\"" -#: rcgcdw.py:923 +#: src/formatters/rc.py:713 +#, fuzzy msgid "Action has been hidden by administration." +msgstr "A ação foi ocultada pela administração" + +#: src/formatters/rc.py:714 +msgid "Unknown" +msgstr "Desconhecido" + +#: src/formatters/rc.py:718 +#, python-brace-format +msgid "Unknown event `{event}`" msgstr "" -#: rcgcdw.py:951 +#: src/formatters/rc.py:723 src/formatters/rc.py:725 +msgid "Report this on the support server" +msgstr "" + +#: src/formatters/rc.py:742 msgid "Tags" msgstr "Etiquetas" -#: rcgcdw.py:956 +#: src/formatters/rc.py:745 msgid "**Added**: " msgstr "**Adicionado**: " -#: rcgcdw.py:956 +#: src/formatters/rc.py:745 msgid " and {} more\n" msgstr " e {} mais\n" -#: rcgcdw.py:957 +#: src/formatters/rc.py:746 msgid "**Removed**: " msgstr "**Removida**: " -#: rcgcdw.py:957 +#: src/formatters/rc.py:746 msgid " and {} more" msgstr " e {} mais" -#: rcgcdw.py:958 +#: src/formatters/rc.py:747 msgid "Changed categories" msgstr "Mudanças de categorias" -#: rcgcdw.py:977 -msgid "~~hidden~~" -msgstr "" - -#: rcgcdw.py:983 -msgid "hidden" -msgstr "" - -#: rcgcdw.py:1050 rcgcdw.py:1052 rcgcdw.py:1054 rcgcdw.py:1056 rcgcdw.py:1058 -#: rcgcdw.py:1060 rcgcdw.py:1062 #, python-brace-format msgid "{value} (avg. {avg})" -msgstr "" +msgstr "{value} (med. {avg})" -#: rcgcdw.py:1086 rcgcdw.py:1114 msgid "Daily overview" msgstr "Visão geral diária" -#: rcgcdw.py:1088 msgid "No activity" msgstr "Sem atividade" -#: rcgcdw.py:1123 msgid " ({} action)" msgid_plural " ({} actions)" msgstr[0] " ({} açao)" msgstr[1] " ({} ações)" -#: rcgcdw.py:1125 msgid " ({} edit)" msgid_plural " ({} edits)" msgstr[0] " ({} editado)" msgstr[1] " ({} edições)" -#: rcgcdw.py:1130 msgid " UTC ({} action)" msgid_plural " UTC ({} actions)" msgstr[0] " UTC ({} ação)" msgstr[1] " UTC ({} ações)" -#: rcgcdw.py:1132 rcgcdw.py:1133 rcgcdw.py:1137 msgid "But nobody came" msgstr "Mas ninguém veio" -#: rcgcdw.py:1141 msgid "Most active user" msgid_plural "Most active users" msgstr[0] "Usuário mais ativo" msgstr[1] "Usuários mais ativos" -#: rcgcdw.py:1142 -msgid "Most edited article" -msgid_plural "Most edited articles" -msgstr[0] "Artigo mais editado" -msgstr[1] "Artigos mais editados" - -#: rcgcdw.py:1143 msgid "Edits made" msgstr "Edições feitas" -#: rcgcdw.py:1143 msgid "New files" msgstr "Novos arquivos" -#: rcgcdw.py:1143 msgid "Admin actions" msgstr "Ações de administração" -#: rcgcdw.py:1144 msgid "Bytes changed" msgstr "Bytes alterados" -#: rcgcdw.py:1144 -msgid "New articles" -msgstr "Novos artigos" - -#: rcgcdw.py:1145 msgid "Unique contributors" msgstr "Contribuidores exclusivos" -#: rcgcdw.py:1146 msgid "Most active hour" msgid_plural "Most active hours" msgstr[0] "Hora mais ativa" msgstr[1] "Horas mais ativas" -#: rcgcdw.py:1147 msgid "Day score" msgstr "Pontuação do dia" -#: rcgcdw.py:1291 -#, python-brace-format -msgid "Connection to {wiki} seems to be stable now." -msgstr "A conexão com {wiki} parece estar estável agora." +#, fuzzy +#~ msgid "Most edited article" +#~ msgid_plural "Most edited articles" +#~ msgstr[0] "Página {article} excluída" +#~ msgstr[1] "Página {article} excluída" -#: rcgcdw.py:1292 rcgcdw.py:1407 -msgid "Connection status" -msgstr "Status da conexão" +#, fuzzy +#~ msgid "New articles" +#~ msgstr "Página {article} excluída" -#: rcgcdw.py:1406 -#, python-brace-format -msgid "{wiki} seems to be down or unreachable." -msgstr "{wiki} parece estar inativo ou inacessível." +#~ msgid "**No license!**" +#~ msgstr "* * Sem licença!* *" -#: rcgcdw.py:1465 -msgid "director" -msgstr "diretor" - -#: rcgcdw.py:1465 -msgid "bot" -msgstr "robô" - -#: rcgcdw.py:1465 -msgid "editor" -msgstr "editor" - -#: rcgcdw.py:1465 -msgid "directors" -msgstr "diretores" - -#: rcgcdw.py:1465 -msgid "sysop" -msgstr "administrador" - -#: rcgcdw.py:1465 -msgid "bureaucrat" -msgstr "burocrata" - -#: rcgcdw.py:1465 -msgid "reviewer" -msgstr "revisor" - -#: rcgcdw.py:1466 -msgid "autoreview" -msgstr "revisão automática" - -#: rcgcdw.py:1466 -msgid "autopatrol" -msgstr "patrulha automatica" - -#: rcgcdw.py:1466 -msgid "wiki_guardian" -msgstr "guardião_wiki" - -#: rcgcdw.py:1466 -msgid "second" -msgid_plural "seconds" -msgstr[0] "segundo" -msgstr[1] "segundos" - -#: rcgcdw.py:1466 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "minuto" -msgstr[1] "minutos" - -#: rcgcdw.py:1466 -msgid "hour" -msgid_plural "hours" -msgstr[0] "hora" -msgstr[1] "horas" - -#: rcgcdw.py:1466 -msgid "day" -msgid_plural "days" -msgstr[0] "dia" -msgstr[1] "dias" - -#: rcgcdw.py:1466 -msgid "week" -msgid_plural "weeks" -msgstr[0] "semana" -msgstr[1] "semanas" - -#: rcgcdw.py:1466 -msgid "month" -msgid_plural "months" -msgstr[0] "" -msgstr[1] "" - -#: rcgcdw.py:1466 -msgid "year" -msgid_plural "years" -msgstr[0] "ano" -msgstr[1] "anos" - -#: rcgcdw.py:1466 -msgid "millennium" -msgid_plural "millennia" -msgstr[0] "milénio" -msgstr[1] "milénios" - -#: rcgcdw.py:1466 -msgid "decade" -msgid_plural "decades" -msgstr[0] "década" -msgstr[1] "décadas" - -#: rcgcdw.py:1466 -msgid "century" -msgid_plural "centuries" -msgstr[0] "século" -msgstr[1] "séculos" - -#~ msgid "Unable to process the event" -#~ msgstr "Não é possível processar o evento" - -#~ msgid "error" -#~ msgstr "erro" +#~ msgid "" +#~ "\n" +#~ "License: {}" +#~ msgstr "" +#~ "\n" +#~ "Licença: {}" diff --git a/locale/pt-br/LC_MESSAGES/rcgcdw.mo b/locale/pt-br/LC_MESSAGES/rcgcdw.mo deleted file mode 100644 index faca48a..0000000 Binary files a/locale/pt-br/LC_MESSAGES/rcgcdw.mo and /dev/null differ diff --git a/locale/pt-br/LC_MESSAGES/wiki.mo b/locale/pt-br/LC_MESSAGES/wiki.mo new file mode 100644 index 0000000..40b333c Binary files /dev/null and b/locale/pt-br/LC_MESSAGES/wiki.mo differ diff --git a/locale/pt-br/LC_MESSAGES/wiki.po b/locale/pt-br/LC_MESSAGES/wiki.po new file mode 100644 index 0000000..d79181f --- /dev/null +++ b/locale/pt-br/LC_MESSAGES/wiki.po @@ -0,0 +1,39 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-10 01:01+0200\n" +"PO-Revision-Date: 2020-08-04 09:51+0000\n" +"Last-Translator: Eduaddad \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt-br\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.1.1\n" + +#: src/wiki.py:207 +msgid "~~hidden~~" +msgstr "~~ocultado~~" + +#: src/wiki.py:212 +msgid "hidden" +msgstr "oculto" + +#, python-brace-format +#~ msgid "Connection to {wiki} seems to be stable now." +#~ msgstr "A conexão com {wiki} parece estar estável agora." + +#~ msgid "Connection status" +#~ msgstr "Status da conexão" + +#, python-brace-format +#~ msgid "{wiki} seems to be down or unreachable." +#~ msgstr "{wiki} parece estar inativo ou inacessível." diff --git a/requirements.txt b/requirements.txt index c92d56c..945fadf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ beautifulsoup4 >= 4.6.0; python_version >= '3.6' -requests >= 2.18.4 aiohttp >= 3.6.2 lxml >= 4.2.1 \ No newline at end of file diff --git a/scripts/generate_translations.sh b/scripts/generate_translations.sh new file mode 100644 index 0000000..94d500a --- /dev/null +++ b/scripts/generate_translations.sh @@ -0,0 +1,18 @@ +cd .. +xgettext -L Python --package-name=RcGcDb -o locale/templates/discussion_formatters.pot src/formatters/discussions.py +xgettext -L Python --package-name=RcGcDb -o locale/templates/rc_formatters.pot src/formatters/rc.py +xgettext -L Python --package-name=RcGcDb -o locale/templates/wiki.pot src/wiki.py +xgettext -L Python --package-name=RcGcDb -o locale/templates/discord.pot src/discord.py +xgettext -L Python --package-name=RcGcDb -o locale/templates/misc.pot src/misc.py + +declare -a StringArray=("discussion_formatters" "rc_formatters" "discord" "wiki" "misc") +for language in de pl pt-br +do + for file in ${StringArray[@]}; do + msgmerge -U locale/$language/LC_MESSAGES/$file.po locale/templates/$file.pot + done + msgmerge -o locale/$language/LC_MESSAGES/discussion_formatters.po ~/PycharmProjects/RcGcDw/locale/$language/LC_MESSAGES/discussion_formatters.po locale/$language/LC_MESSAGES/discussion_formatters.po + msgmerge -o locale/$language/LC_MESSAGES/rc_formatters.po ~/PycharmProjects/RcGcDw/locale/$language/LC_MESSAGES/rc_formatters.po locale/$language/LC_MESSAGES/rc_formatters.po + msgmerge -o locale/$language/LC_MESSAGES/wiki.po ~/PycharmProjects/RcGcDw/locale/$language/LC_MESSAGES/rc.po locale/$language/LC_MESSAGES/wiki.po + msgmerge -o locale/$language/LC_MESSAGES/misc.po ~/PycharmProjects/RcGcDw/locale/$language/LC_MESSAGES/misc.po locale/$language/LC_MESSAGES/misc.po +done diff --git a/src/bot.py b/src/bot.py index 6f0b563..4089ffd 100644 --- a/src/bot.py +++ b/src/bot.py @@ -2,21 +2,21 @@ import aiohttp import asyncio import logging.config import signal -import sys import traceback -from collections import defaultdict - -import requests +from collections import defaultdict, namedtuple +from typing import Generator +from contextlib import asynccontextmanager from src.argparser import command_line_args from src.config import settings from src.database import db_cursor from src.exceptions import * -from src.misc import get_paths +from src.misc import get_paths, get_domain from src.msgqueue import messagequeue from src.queue_handler import DBHandler from src.wiki import Wiki, process_cats, process_mwmsgs, essential_info, essential_feeds -from src.discord import DiscordMessage, formatter_exception_logger, msg_sender_exception_logger +from src.discord import DiscordMessage, generic_msg_sender_exception_logger +from src.wiki_ratelimiter import RateLimiter logging.config.dictConfig(settings["logging"]) logger = logging.getLogger("rcgcdb.bot") @@ -34,20 +34,135 @@ mw_msgs: dict = {} # will have the type of id: tuple # Reasons for this: 1. we require amount of wikis to calculate the cooldown between requests # 2. Easier to code -for wiki in db_cursor.execute('SELECT DISTINCT wiki FROM rcgcdw'): - all_wikis[wiki] = Wiki() +for db_wiki in db_cursor.execute('SELECT wiki, rcid FROM rcgcdw GROUP BY wiki ORDER BY ROWID'): + all_wikis[db_wiki["wiki"]] = Wiki() # populate all_wikis + all_wikis[db_wiki["wiki"]].rc_active = db_wiki["rcid"] + +queue_limit = settings.get("queue_limit", 30) +QueuedWiki = namedtuple("QueuedWiki", ['url', 'amount']) + +class LimitedList(list): + def __init__(self, *args): + list.__init__(self, *args) + + def append(self, object) -> None: + if len(self) < queue_limit: + self.insert(len(self), object) + return + raise ListFull + + +class RcQueue: + def __init__(self): + self.domain_list = {} + self.to_remove = [] + + async def start_group(self, group, initial_wikis): + """Starts a task for given domain group""" + if group not in self.domain_list: + self.domain_list[group] = {"task": asyncio.create_task(scan_group(group), name=group), "last_rowid": 0, "query": LimitedList(initial_wikis), "rate_limiter": RateLimiter()} + else: + raise KeyError + + async def remove_wiki_from_group(self, wiki): + """Removes a wiki from query of given domain group""" + logger.debug(f"Removing {wiki} from group queue.") + group = get_domain(wiki) + self[group]["query"] = [x for x in self[group]["query"] if x.url == wiki] + if not self[group]["query"]: # if there is no wiki left in the queue, get rid of the task + logger.debug(f"{group} no longer has any wikis queued!") + all_wikis[wiki].rc_active = -1 + self[group]["task"].cancel() + del self.domain_list[group] + + @asynccontextmanager + async def retrieve_next_queued(self, group) -> Generator[QueuedWiki, None, None]: + """Retrives next wiki in the queue for given domain""" + try: + yield self.domain_list[group]["query"][0] + except asyncio.CancelledError: + raise + except: + if command_line_args.debug: + logger.exception("RC Group exception") + shutdown(asyncio.get_event_loop()) + else: + logger.exception("Group task returned error") + await generic_msg_sender_exception_logger(traceback.format_exc(), "Group task error logger", Group=group) + else: + self.domain_list[group]["query"].pop(0) + + + @staticmethod + def filter_rc_active(wiki_obj): + return wiki_obj[1].rc_active > -1 + + async def update_queues(self): + """Makes a round on rcgcdw DB and looks for updates to the queues in self.domain_list""" + try: + fetch_all = db_cursor.execute( + 'SELECT ROWID, webhook, wiki, lang, display, wikiid, rcid FROM rcgcdw WHERE rcid != -1 GROUP BY wiki ORDER BY ROWID') + self.to_remove = [x[0] for x in filter(self.filter_rc_active, all_wikis.items())] # first populate this list and remove wikis that are still in the db, clean up the rest + full = [] + for db_wiki in fetch_all.fetchall(): + domain = get_domain(db_wiki["wiki"]) + try: + if db_wiki["wiki"] not in all_wikis: + raise AssertionError + self.to_remove.remove(db_wiki["wiki"]) + except AssertionError: + all_wikis[db_wiki["wiki"]] = Wiki() + all_wikis[db_wiki["wiki"]].rc_active = db_wiki["rcid"] + except ValueError: + pass + try: + current_domain: dict = self[domain] + if not db_wiki["ROWID"] < current_domain["last_rowid"]: + current_domain["query"].append(QueuedWiki(db_wiki["wiki"], 20)) + except KeyError: + await self.start_group(domain, db_wiki) + logger.info("A new domain group has been added since last time, adding it to the domain_list and starting a task...") + except ListFull: + full.append(domain) + current_domain["last_rowid"] = db_wiki["ROWID"] + continue + for wiki in self.to_remove: + await self.remove_wiki_from_group(wiki) + for group, data in self.domain_list.items(): + if group not in full: + self[group]["last_rowid"] = 0 # iter reached the end without being stuck on full list + logger.debug("Current domain_list structure: {}".format(self.domain_list)) + except: + if command_line_args.debug: + logger.exception("Queue error!") + shutdown(asyncio.get_event_loop()) + else: + logger.exception("Exception on queue updater") + await generic_msg_sender_exception_logger(traceback.format_exc(), "Queue updator") + + + def __getitem__(self, item): + """Returns the query of given domain group""" + return self.domain_list[item] + + def __setitem__(self, key, value): + self.domain_list[key] = value + + +rcqueue = RcQueue() # Start queueing logic - -def calculate_delay() -> float: +def calculate_delay_for_group(group_length: int) -> float: """Calculate the delay between fetching each wiki to avoid rate limits""" min_delay = 60 / settings["max_requests_per_minute"] - if (len(all_wikis) * min_delay) < settings["minimal_cooldown_per_wiki_in_sec"]: - return settings["minimal_cooldown_per_wiki_in_sec"] / len(all_wikis) + if group_length == 0: + group_length = 1 + if (group_length * min_delay) < settings["minimal_cooldown_per_wiki_in_sec"]: + return settings["minimal_cooldown_per_wiki_in_sec"] / group_length else: - return min_delay + return 0.0 def generate_targets(wiki_url: str) -> defaultdict: @@ -62,129 +177,110 @@ def generate_targets(wiki_url: str) -> defaultdict: return combinations +async def generate_domain_groups(): + """Generate a list of wikis per domain (fandom.com, wikipedia.org etc.)""" + domain_wikis = defaultdict(list) + fetch_all = db_cursor.execute('SELECT ROWID, webhook, wiki, lang, display, wikiid, rcid FROM rcgcdw WHERE rcid != -1 GROUP BY wiki ORDER BY ROWID ASC') + for db_wiki in fetch_all.fetchall(): + domain_wikis[get_domain(db_wiki["wiki"])].append(QueuedWiki(db_wiki["wiki"], 20)) + for group, db_wikis in domain_wikis.items(): + yield group, db_wikis + + +async def scan_group(group: str): + rate_limiter = rcqueue[group]["rate_limiter"] + while True: + try: + async with rcqueue.retrieve_next_queued(group) as queued_wiki: # acquire next wiki in queue + logger.debug("Wiki {}".format(queued_wiki.url)) + local_wiki = all_wikis[queued_wiki.url] # set a reference to a wiki object from memory + extended = False + if local_wiki.mw_messages is None: + extended = True + async with aiohttp.ClientSession(headers=settings["header"], + timeout=aiohttp.ClientTimeout(3.0)) as session: + try: + wiki_response = await local_wiki.fetch_wiki(extended, queued_wiki.url, session, rate_limiter, amount=queued_wiki.amount) + await local_wiki.check_status(queued_wiki.url, wiki_response.status) + except (WikiServerError, WikiError): + logger.error("Exeption when fetching the wiki") + continue # ignore this wiki if it throws errors + try: + recent_changes_resp = await wiki_response.json() + if "error" in recent_changes_resp or "errors" in recent_changes_resp: + error = recent_changes_resp.get("error", recent_changes_resp["errors"]) + if error["code"] == "readapidenied": + await local_wiki.fail_add(queued_wiki.url, 410) + continue + raise WikiError + recent_changes = recent_changes_resp['query']['recentchanges'] + recent_changes.reverse() + except aiohttp.ContentTypeError: + logger.exception("Wiki seems to be resulting in non-json content.") + await local_wiki.fail_add(queued_wiki.url, 410) + continue + except: + logger.exception("On loading json of response.") + continue + if extended: + await process_mwmsgs(recent_changes_resp, local_wiki, mw_msgs) + if local_wiki.rc_active == 0: # new wiki, just get the last rc to not spam the channel + if len(recent_changes) > 0: + local_wiki.rc_active = recent_changes[-1]["rcid"] + DBHandler.add(queued_wiki.url, recent_changes[-1]["rcid"]) + else: + local_wiki.rc_active = 0 + DBHandler.add(queued_wiki.url, 0) + DBHandler.update_db() + continue + categorize_events = {} + targets = generate_targets(queued_wiki.url) + paths = get_paths(queued_wiki.url, recent_changes_resp) + new_events = 0 + for change in recent_changes: + if change["rcid"] > local_wiki.rc_active and queued_wiki.amount != 450: + new_events += 1 + if new_events == 20: + # call the function again with max limit for more results, ignore the ones in this request + logger.debug("There were too many new events, queuing wiki with 450 limit.") + rcqueue[group]["query"].insert(1, QueuedWiki(queued_wiki.url, 450)) + break + await process_cats(change, local_wiki, mw_msgs, categorize_events) + else: # If we broke from previous loop (too many changes) don't execute sending messages here + for change in recent_changes: # Yeah, second loop since the categories require to be all loaded up + if change["rcid"] > local_wiki.rc_active: + for target in targets.items(): + try: + await essential_info(change, categorize_events, local_wiki, target, paths, + recent_changes_resp, rate_limiter) + except asyncio.CancelledError: + raise + except: + if command_line_args.debug: + logger.exception("Exception on RC formatter") + raise + else: + logger.exception("Exception on RC formatter") + await generic_msg_sender_exception_logger(traceback.format_exc(), "Exception in RC formatter", Wiki=queued_wiki.url, Change=str(change)[0:1000]) + if recent_changes: + local_wiki.rc_active = change["rcid"] + DBHandler.add(queued_wiki.url, change["rcid"]) + delay_between_wikis = calculate_delay_for_group(len(rcqueue[group]["query"])) # TODO Find a way to not execute it every wiki + await asyncio.sleep(delay_between_wikis) + DBHandler.update_db() + except asyncio.CancelledError: + return + + async def wiki_scanner(): """Wiki scanner is spawned as a task which purpose is to continuously run over wikis in the DB, fetching recent changes to add messages based on the changes to message queue later handled by message_sender coroutine.""" try: + async for group, db_wikis in generate_domain_groups(): # First scan + await rcqueue.start_group(group, db_wikis) while True: - calc_delay = calculate_delay() - fetch_all = db_cursor.execute( - 'SELECT webhook, wiki, lang, display, wikiid, rcid, postid FROM rcgcdw GROUP BY wiki') - for db_wiki in fetch_all.fetchall(): - logger.debug("Wiki {}".format(db_wiki["wiki"])) - if db_wiki["wiki"] not in all_wikis: - logger.info("Registering new wiki locally: {}".format(db_wiki["wiki"])) - all_wikis[db_wiki["wiki"]] = Wiki() - local_wiki = all_wikis[db_wiki["wiki"]] # set a reference to a wiki object from memory - if db_wiki["rcid"] != -1: - extended = False - if local_wiki.mw_messages is None: - extended = True - async with aiohttp.ClientSession(headers=settings["header"], - timeout=aiohttp.ClientTimeout(3.0)) as session: - try: - wiki_response = await local_wiki.fetch_wiki(extended, db_wiki["wiki"], session) - await local_wiki.check_status(db_wiki["wiki"], wiki_response.status) - except (WikiServerError, WikiError): - logger.error("Exeption when fetching the wiki") - continue # ignore this wiki if it throws errors - try: - recent_changes_resp = await wiki_response.json() - if "error" in recent_changes_resp or "errors" in recent_changes_resp: - error = recent_changes_resp.get("error", recent_changes_resp["errors"]) - if error["code"] == "readapidenied": - await local_wiki.fail_add(db_wiki["wiki"], 410) - continue - raise WikiError - recent_changes = recent_changes_resp['query']['recentchanges'] - recent_changes.reverse() - except aiohttp.ContentTypeError: - logger.exception("Wiki seems to be resulting in non-json content.") - await local_wiki.fail_add(db_wiki["wiki"], 410) - continue - except: - logger.exception("On loading json of response.") - continue - if extended: - await process_mwmsgs(recent_changes_resp, local_wiki, mw_msgs) - if db_wiki["rcid"] is None: # new wiki, just get the last rc to not spam the channel - if len(recent_changes) > 0: - DBHandler.add(db_wiki["wiki"], recent_changes[-1]["rcid"]) - else: - DBHandler.add(db_wiki["wiki"], 0) - DBHandler.update_db() - continue - categorize_events = {} - targets = generate_targets(db_wiki["wiki"]) - paths = get_paths(db_wiki["wiki"], recent_changes_resp) - for change in recent_changes: - await process_cats(change, local_wiki, mw_msgs, categorize_events) - for change in recent_changes: # Yeah, second loop since the categories require to be all loaded up - if change["rcid"] > db_wiki["rcid"]: - for target in targets.items(): - try: - await essential_info(change, categorize_events, local_wiki, db_wiki, - target, paths, recent_changes_resp) - except: - if command_line_args.debug: - raise # reraise the issue - else: - logger.exception("Exception on RC formatter") - await formatter_exception_logger(db_wiki["wiki"], change, traceback.format_exc()) - if recent_changes: - DBHandler.add(db_wiki["wiki"], change["rcid"]) - await asyncio.sleep(delay=2.0) # temporary measure until rate limiting is not implemented - if db_wiki["wikiid"] is not None: - header = settings["header"] - header["Accept"] = "application/hal+json" - async with aiohttp.ClientSession(headers=header, - timeout=aiohttp.ClientTimeout(3.0)) as session: - try: - feeds_response = await local_wiki.fetch_feeds(db_wiki["wikiid"], session) - except (WikiServerError, WikiError): - logger.error("Exeption when fetching the wiki") - continue # ignore this wiki if it throws errors - try: - discussion_feed_resp = await feeds_response.json(encoding="UTF-8") - if "title" in discussion_feed_resp: - error = discussion_feed_resp["error"] - if error == "site doesn't exists": - db_cursor.execute("UPDATE rcgcdw SET wikiid = ? WHERE wiki = ?", - (None, db_wiki["wiki"],)) - DBHandler.update_db() - continue - raise WikiError - discussion_feed = discussion_feed_resp["_embedded"]["doc:posts"] - discussion_feed.reverse() - except aiohttp.ContentTypeError: - logger.exception("Wiki seems to be resulting in non-json content.") - continue - except: - logger.exception("On loading json of response.") - continue - if db_wiki["postid"] is None: # new wiki, just get the last post to not spam the channel - if len(discussion_feed) > 0: - DBHandler.add(db_wiki["wiki"], discussion_feed[-1]["id"], True) - else: - DBHandler.add(db_wiki["wiki"], "0", True) - DBHandler.update_db() - continue - targets = generate_targets(db_wiki["wiki"]) - for post in discussion_feed: - if post["id"] > db_wiki["postid"]: - for target in targets.items(): - try: - await essential_feeds(post, db_wiki, target) - except: - if command_line_args.debug: - raise # reraise the issue - else: - logger.exception("Exception on Feeds formatter") - await formatter_exception_logger(db_wiki["wiki"], post, traceback.format_exc()) - if discussion_feed: - DBHandler.add(db_wiki["wiki"], post["id"], True) - await asyncio.sleep(delay=calc_delay) - DBHandler.update_db() + await asyncio.sleep(20.0) + await rcqueue.update_queues() except asyncio.CancelledError: raise @@ -194,35 +290,111 @@ async def message_sender(): try: while True: await messagequeue.resend_msgs() + except asyncio.CancelledError: + pass except: if command_line_args.debug: logger.exception("Exception on DC message sender") - raise # reraise the issue + shutdown(loop=asyncio.get_event_loop()) else: logger.exception("Exception on DC message sender") - await msg_sender_exception_logger(traceback.format_exc()) + await generic_msg_sender_exception_logger(traceback.format_exc(), "Message sender exception") + +async def discussion_handler(): + try: + while True: + fetch_all = db_cursor.execute( + 'SELECT wiki, wikiid, postid FROM rcgcdw WHERE wikiid IS NOT NULL') + for db_wiki in fetch_all.fetchall(): + header = settings["header"] + header["Accept"] = "application/hal+json" + async with aiohttp.ClientSession(headers=header, + timeout=aiohttp.ClientTimeout(3.0)) as session: + try: + local_wiki = all_wikis[db_wiki["wiki"]] # set a reference to a wiki object from memory + except KeyError: + local_wiki = all_wikis[db_wiki["wiki"]] = Wiki() + try: + feeds_response = await local_wiki.fetch_feeds(db_wiki["wikiid"], session) + except (WikiServerError, WikiError): + logger.error("Exeption when fetching the wiki") + continue # ignore this wiki if it throws errors + try: + discussion_feed_resp = await feeds_response.json(encoding="UTF-8") + if "title" in discussion_feed_resp: + error = discussion_feed_resp["error"] + if error == "site doesn't exists": + db_cursor.execute("UPDATE rcgcdw SET wikiid = ? WHERE wiki = ?", + (None, db_wiki["wiki"],)) + DBHandler.update_db() + continue + raise WikiError + discussion_feed = discussion_feed_resp["_embedded"]["doc:posts"] + discussion_feed.reverse() + except aiohttp.ContentTypeError: + logger.exception("Wiki seems to be resulting in non-json content.") + continue + except: + logger.exception("On loading json of response.") + continue + if db_wiki["postid"] is None: # new wiki, just get the last post to not spam the channel + if len(discussion_feed) > 0: + DBHandler.add(db_wiki["wikiid"], discussion_feed[-1]["id"], True) + else: + DBHandler.add(db_wiki["wikiid"], "0", True) + DBHandler.update_db() + continue + targets = generate_targets(db_wiki["wiki"]) + for post in discussion_feed: + if post["id"] > db_wiki["postid"]: + for target in targets.items(): + try: + await essential_feeds(post, db_wiki, target) + except asyncio.CancelledError: + raise + except: + if command_line_args.debug: + logger.exception("Exception on Feeds formatter") + shutdown(loop=asyncio.get_event_loop()) + else: + logger.exception("Exception on Feeds formatter") + await generic_msg_sender_exception_logger(traceback.format_exc(), "Exception in feed formatter", Post=str(post)[0:1000], Wiki=db_wiki["wiki"]) + if discussion_feed: + DBHandler.add(db_wiki["wikiid"], post["id"], True) + await asyncio.sleep(delay=2.0) # hardcoded really doesn't need much more + DBHandler.update_db() + except asyncio.CancelledError: + pass + except: + if command_line_args.debug: + raise # reraise the issue + else: + logger.exception("Exception on Feeds formatter") + await generic_msg_sender_exception_logger(traceback.format_exc(), "Discussion handler task exception", Wiki=db_wiki["wiki"]) + def shutdown(loop, signal=None): DBHandler.update_db() if len(messagequeue) > 0: logger.warning("Some messages are still queued!") - loop.stop() - logger.info("Script has shut down due to signal {}.".format(signal)) for task in asyncio.all_tasks(loop): logger.debug("Killing task {}".format(task.get_name())) task.cancel() - sys.exit(0) + loop.run_until_complete(asyncio.gather(*asyncio.all_tasks(loop))) + loop.stop() + logger.info("Script has shut down due to signal {}.".format(signal)) + # sys.exit(0) -def global_exception_handler(loop, context): - """Global exception handler for asyncio, lets us know when something crashes""" - msg = context.get("exception", context["message"]) - logger.error("Global exception handler: {}".format(msg)) - if command_line_args.debug is False: - requests.post("https://discord.com/api/webhooks/"+settings["monitoring_webhook"], data=repr(DiscordMessage("compact", "monitoring", [settings["monitoring_webhook"]], wiki=None, content="[RcGcDb] Global exception handler: {}".format(msg))), headers={'Content-Type': 'application/json'}) - else: - shutdown(loop) +# def global_exception_handler(loop, context): +# """Global exception handler for asyncio, lets us know when something crashes""" +# msg = context.get("exception", context["message"]) +# logger.error("Global exception handler: {}".format(msg)) +# if command_line_args.debug is False: +# requests.post("https://discord.com/api/webhooks/"+settings["monitoring_webhook"], data=repr(DiscordMessage("compact", "monitoring", [settings["monitoring_webhook"]], wiki=None, content="[RcGcDb] Global exception handler: {}".format(msg))), headers={'Content-Type': 'application/json'}) +# else: +# shutdown(loop) async def main_loop(): @@ -235,14 +407,15 @@ async def main_loop(): except AttributeError: logger.info("Running on Windows, some things may not work as they should.") signals = (signal.SIGBREAK, signal.SIGTERM, signal.SIGINT) - loop.set_exception_handler(global_exception_handler) + # loop.set_exception_handler(global_exception_handler) try: - task1 = asyncio.create_task(wiki_scanner()) - task2 = asyncio.create_task(message_sender()) + task1 = asyncio.create_task(wiki_scanner(), name="Wiki RC scanner") + task2 = asyncio.create_task(message_sender(), name="Discord message sender") + task3 = asyncio.create_task(discussion_handler(), name="Discussion handler") await task1 await task2 + await task3 except KeyboardInterrupt: shutdown(loop) - -asyncio.run(main_loop(), debug=command_line_args.debug) +asyncio.run(main_loop(), debug=False) diff --git a/src/discord.py b/src/discord.py index 5bf5a3e..a58083d 100644 --- a/src/discord.py +++ b/src/discord.py @@ -21,9 +21,7 @@ default_header["X-RateLimit-Precision"] = "millisecond" # User facing webhook functions async def wiki_removal(wiki_url, status): for observer in db_cursor.execute('SELECT webhook, lang FROM rcgcdw WHERE wiki = ?', (wiki_url,)): - def _(string: str) -> str: - """Our own translation string to make it compatible with async""" - return langs[observer["lang"]].gettext(string) + _ = langs[observer["lang"]]["discord"].gettext reasons = {410: _("wiki deletion"), 404: _("wiki deletion"), 401: _("wiki becoming inaccessible"), 402: _("wiki becoming inaccessible"), 403: _("wiki becoming inaccessible")} reason = reasons.get(status, _("unknown error")) @@ -110,23 +108,13 @@ async def wiki_removal_monitor(wiki_url, status): await send_to_discord_webhook_monitoring(DiscordMessage("compact", "webhook/remove", content="Removing {} because {}.".format(wiki_url, status), webhook_url=[None], wiki=None)) -async def formatter_exception_logger(wiki_url, change, exception): - """Creates a Discord message reporting a crash in RC formatter area""" +async def generic_msg_sender_exception_logger(exception: str, title: str, **kwargs): + """Creates a Discord message reporting a crash""" message = DiscordMessage("embed", "bot/exception", [None], wiki=None) message["description"] = exception - message["title"] = "RC Exception Report" - change = str(change)[0:1000] - message.add_field("Wiki URL", wiki_url) - message.add_field("Change", change) - message.finish_embed() - await send_to_discord_webhook_monitoring(message) - - -async def msg_sender_exception_logger(exception): - """Creates a Discord message reporting a crash in RC formatter area""" - message = DiscordMessage("embed", "bot/exception", [None], wiki=None) - message["description"] = exception - message["title"] = "MSGSENDER Exception Report" + message["title"] = title + for key, value in kwargs: + message.add_field(key, value) message.finish_embed() await send_to_discord_webhook_monitoring(message) diff --git a/src/exceptions.py b/src/exceptions.py index 6fde0c1..0d54bb6 100644 --- a/src/exceptions.py +++ b/src/exceptions.py @@ -14,4 +14,10 @@ class WikiUnauthorizedError(Exception): pass class OtherWikiError(Exception): + pass + +class QueueEmpty(Exception): + pass + +class ListFull(Exception): pass \ No newline at end of file diff --git a/src/formatters/discussions.py b/src/formatters/discussions.py index 6a54551..b5647d1 100644 --- a/src/formatters/discussions.py +++ b/src/formatters/discussions.py @@ -6,12 +6,14 @@ from src.config import settings from src.misc import link_formatter, create_article_path, escape_formatting from src.discord import DiscordMessage from src.msgqueue import send_to_discord +from src.i18n import langs logger = logging.getLogger("rcgcdw.discussion_formatters") -async def feeds_compact_formatter(post_type, post, message_target, wiki, _): +async def feeds_compact_formatter(post_type, post, message_target, wiki): """Compact formatter for Fandom discussions.""" + _ = langs[message_target[0][0]]["discussion_formatters"].gettext message = None if post_type == "FORUM": author = post["createdBy"]["name"] @@ -25,14 +27,14 @@ async def feeds_compact_formatter(post_type, post, message_target, wiki, _): if post_type == "FORUM": if not post["isReply"]: thread_funnel = post.get("funnel") - msg_text = "[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in {forumName}" + msg_text = _("[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in {forumName}") if thread_funnel == "POLL": - msg_text = "[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in {forumName}" + msg_text = _("[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in {forumName}") elif thread_funnel == "QUIZ": - msg_text = "[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in {forumName}" + msg_text = _("[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in {forumName}") elif thread_funnel != "TEXT": logger.warning("No entry for {event} with params: {params}".format(event=thread_funnel, params=post)) - message = _(msg_text).format(author=author, author_url=author_url, title=post["title"], url=wiki, threadId=post["threadId"], forumName=post["forumName"]) + message = msg_text.format(author=author, author_url=author_url, title=post["title"], url=wiki, threadId=post["threadId"], forumName=post["forumName"]) else: message = _("[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}").format(author=author, author_url=author_url, url=wiki, threadId=post["threadId"], postId=post["id"], title=post["_embedded"]["thread"][0]["title"], forumName=post["forumName"]) elif post_type == "WALL": @@ -58,8 +60,9 @@ async def feeds_compact_formatter(post_type, post, message_target, wiki, _): await send_to_discord(DiscordMessage("compact", "discussion", message_target[1], content=message, wiki=wiki)) -async def feeds_embed_formatter(post_type, post, message_target, wiki, _): +async def feeds_embed_formatter(post_type, post, message_target, wiki): """Embed formatter for Fandom discussions.""" + _ = langs[message_target[0][0]]["discussion_formatters"].gettext embed = DiscordMessage("embed", "discussion", message_target[1], wiki=wiki) if post_type == "FORUM": embed.set_author(post["createdBy"]["name"], "{url}f/u/{creatorId}".format(url=wiki, creatorId=post["creatorId"]), icon_url=post["createdBy"]["avatarUrl"]) diff --git a/src/formatters/rc.py b/src/formatters/rc.py index bfcc2dd..73b7248 100644 --- a/src/formatters/rc.py +++ b/src/formatters/rc.py @@ -9,6 +9,7 @@ from src.config import settings from src.misc import link_formatter, create_article_path, parse_link, profile_field_name, ContentParser from src.discord import DiscordMessage from src.msgqueue import send_to_discord +from src.i18n import langs from bs4 import BeautifulSoup @@ -18,9 +19,11 @@ if 1 == 2: # additional translation strings in unreachable code print(_("director"), _("bot"), _("editor"), _("directors"), _("sysop"), _("bureaucrat"), _("reviewer"), _("autoreview"), _("autopatrol"), _("wiki_guardian"), ngettext("second", "seconds", 1), ngettext("minute", "minutes", 1), ngettext("hour", "hours", 1), ngettext("day", "days", 1), ngettext("week", "weeks", 1), ngettext("month", "months",1), ngettext("year", "years", 1), ngettext("millennium", "millennia", 1), ngettext("decade", "decades", 1), ngettext("century", "centuries", 1)) -async def compact_formatter(action, change, parsed_comment, categories, recent_changes, message_target, _, ngettext, paths, +async def compact_formatter(action, change, parsed_comment, categories, recent_changes, message_target, paths, rate_limiter, additional_data=None): """Recent Changes compact formatter, part of RcGcDw""" + _ = langs[message_target[0][0]]["rc_formatters"].gettext + ngettext = langs[message_target[0][0]]["rc_formatters"].ngettext if additional_data is None: additional_data = {"namespaces": {}, "tags": {}} WIKI_API_PATH = paths[0] @@ -185,7 +188,7 @@ async def compact_formatter(action, change, parsed_comment, categories, recent_c content = _("[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*").format(author=author, author_url=author_url, target=target, - field=profile_field_name(change["logparams"]['4:section'], False, _), + field=profile_field_name(change["logparams"]['4:section'], False, message_target[0][0]), desc=BeautifulSoup(change["parsedcomment"], "lxml").get_text()) elif action in ("rights/rights", "rights/autopromote"): link = link_formatter(create_article_path("User:{user}".format(user=change["title"].split(":")[1]), WIKI_ARTICLE_PATH)) @@ -330,8 +333,10 @@ async def compact_formatter(action, change, parsed_comment, categories, recent_c await send_to_discord(DiscordMessage("compact", action, message_target[1], content=content, wiki=WIKI_SCRIPT_PATH)) -async def embed_formatter(action, change, parsed_comment, categories, recent_changes, message_target, _, ngettext, paths, additional_data=None): +async def embed_formatter(action, change, parsed_comment, categories, recent_changes, message_target, paths, rate_limiter, additional_data=None): """Recent Changes embed formatter, part of RcGcDw""" + _ = langs[message_target[0][0]]["rc_formatters"].gettext + ngettext = langs[message_target[0][0]]["rc_formatters"].ngettext if additional_data is None: additional_data = {"namespaces": {}, "tags": {}} WIKI_API_PATH = paths[0] @@ -374,14 +379,14 @@ async def embed_formatter(action, change, parsed_comment, categories, recent_cha changed_content = await recent_changes.safe_request( "{wiki}?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format( wiki=WIKI_API_PATH, diff=change["revid"] - ), "compare", "*") + ), rate_limiter, "compare", "*") else: changed_content = await recent_changes.safe_request( "{wiki}?action=compare&format=json&fromrev={oldrev}&torev={diff}&topst=1&prop=diff".format( wiki=WIKI_API_PATH, diff=change["revid"],oldrev=change["old_revid"] - ), "compare", "*") + ), rate_limiter, "compare", "*") if changed_content: - EditDiff = ContentParser(_) + EditDiff = ContentParser(message_target[0][0]) EditDiff.feed(changed_content) if EditDiff.small_prev_del: if EditDiff.small_prev_del.replace("~~", "").isspace(): @@ -404,7 +409,7 @@ async def embed_formatter(action, change, parsed_comment, categories, recent_cha license = None urls = await recent_changes.safe_request( "{wiki}?action=query&format=json&prop=imageinfo&list=&meta=&titles={filename}&iiprop=timestamp%7Curl%7Carchivename&iilimit=5".format( - wiki=WIKI_API_PATH, filename=change["title"]), "query", "pages") + wiki=WIKI_API_PATH, filename=change["title"]), rate_limiter, "query", "pages") link = create_article_path(change["title"], WIKI_ARTICLE_PATH) additional_info_retrieved = False if urls is not None: @@ -520,21 +525,21 @@ async def embed_formatter(action, change, parsed_comment, categories, recent_cha embed["title"] = _("Unblocked {blocked_user}").format(blocked_user=user) elif action == "curseprofile/comment-created": if settings["appearance"]["embed"]["show_edit_changes"]: - parsed_comment = await recent_changes.pull_comment(change["logparams"]["4:comment_id"], WIKI_API_PATH) + parsed_comment = await recent_changes.pull_comment(change["logparams"]["4:comment_id"], WIKI_API_PATH, rate_limiter) link = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]), WIKI_ARTICLE_PATH) 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": if settings["appearance"]["embed"]["show_edit_changes"]: - parsed_comment = await recent_changes.pull_comment(change["logparams"]["4:comment_id"], WIKI_API_PATH) + parsed_comment = await recent_changes.pull_comment(change["logparams"]["4:comment_id"], WIKI_API_PATH, rate_limiter) link = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]), WIKI_ARTICLE_PATH) 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": if settings["appearance"]["embed"]["show_edit_changes"]: - parsed_comment = await recent_changes.pull_comment(change["logparams"]["4:comment_id"], WIKI_API_PATH) + parsed_comment = await recent_changes.pull_comment(change["logparams"]["4:comment_id"], WIKI_API_PATH, rate_limiter) link = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]), WIKI_ARTICLE_PATH) embed["title"] = _("Edited a comment on {target}'s profile").format(target=change["title"].split(':')[1]) if change["title"].split(':')[1] != \ change["user"] else _( @@ -543,9 +548,9 @@ async def embed_formatter(action, change, parsed_comment, categories, recent_cha link = create_article_path("UserProfile:{target}".format(target=change["title"].split(':')[1]), WIKI_ARTICLE_PATH) embed["title"] = _("Edited {target}'s profile").format(target=change["title"].split(':')[1]) if change["user"] != change["title"].split(':')[1] else _("Edited their own profile") if not change["parsedcomment"]: # If the field is empty - parsed_comment = _("Cleared the {field} field").format(field=profile_field_name(change["logparams"]['4:section'], True, _)) + parsed_comment = _("Cleared the {field} field").format(field=profile_field_name(change["logparams"]['4:section'], True, message_target[0][0])) else: - parsed_comment = _("{field} field changed to: {desc}").format(field=profile_field_name(change["logparams"]['4:section'], True, _), desc=BeautifulSoup(change["parsedcomment"], "lxml").get_text()) + parsed_comment = _("{field} field changed to: {desc}").format(field=profile_field_name(change["logparams"]['4:section'], True, message_target[0][0]), desc=BeautifulSoup(change["parsedcomment"], "lxml").get_text()) elif action == "curseprofile/comment-purged": link = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]), WIKI_ARTICLE_PATH) embed["title"] = _("Purged a comment on {target}'s profile").format(target=change["title"].split(':')[1]) diff --git a/src/i18n.py b/src/i18n.py index 68fa965..d8af4ed 100644 --- a/src/i18n.py +++ b/src/i18n.py @@ -1,19 +1,17 @@ import sys, logging, gettext +from collections import defaultdict logger = logging.getLogger("rcgcdb.i18n") +supported_languages = ('de', 'pl', 'pt-br') +translated_files = ('wiki', 'misc', 'discord', 'rc_formatters', 'discussion_formatters') try: - en = gettext.translation('rcgcdw', localedir='locale', languages=["en"]) - de = gettext.translation('rcgcdw', localedir='locale', languages=["de"]) - pl = gettext.translation('rcgcdw', localedir='locale', languages=["pl"]) - ptbr = gettext.translation('rcgcdw', localedir='locale', languages=["pt-br"]) - #ru = gettext.translation('rcgcdw', localedir='locale', languages=["ru"]) - #uk = gettext.translation('rcgcdw', localedir='locale', languages=["uk"]) - #fr = gettext.translation('rcgcdw', localedir='locale', languages=["fr"]) - langs = {"en": en, "de": de, "pl": pl, "pt-br": ptbr} - #langs = {"en": en, "de": de, "pl": pl, "pt-br": ptbr, "ru": ru, "uk": uk, "fr": fr} + langs = defaultdict(dict) + for lang in supported_languages: + for file in translated_files: + langs[lang][file] = gettext.translation(file, localedir='locale', languages=[lang]) + for file in translated_files: + langs["en"][file] = gettext.NullTranslations() except FileNotFoundError: logger.critical("No language files have been found. Make sure locale folder is located in the directory.") sys.exit(1) - -#ngettext = en.ngettext \ No newline at end of file diff --git a/src/misc.py b/src/misc.py index c8fcc3a..eea1814 100644 --- a/src/misc.py +++ b/src/misc.py @@ -3,6 +3,7 @@ import base64, re import logging from urllib.parse import urlparse, urlunparse +from src.i18n import langs logger = logging.getLogger("rcgcdw.misc") @@ -17,6 +18,12 @@ def get_paths(wiki: str, request) -> tuple: return WIKI_API_PATH, WIKI_SCRIPT_PATH, WIKI_ARTICLE_PATH, WIKI_JUST_DOMAIN +def get_domain(url: str) -> str: + """Get domain of given URL""" + parsed_url = urlparse(url) + return ".".join(urlunparse((*parsed_url[0:2], "", "", "", "")).split(".")[-2:]) # something like gamepedia.com, fandom.com + + class LinkParser(HTMLParser): new_string = "" @@ -84,7 +91,8 @@ def create_article_path(article: str, WIKI_ARTICLE_PATH: str) -> str: return WIKI_ARTICLE_PATH.replace("$1", article) -def profile_field_name(name, embed, _): +def profile_field_name(name, embed, lang): + _ = langs[lang]["misc"].gettext profile_fields = {"profile-location": _("Location"), "profile-aboutme": _("About me"), "profile-link-google": _("Google link"), "profile-link-facebook": _("Facebook link"), "profile-link-twitter": _("Twitter link"), "profile-link-reddit": _("Reddit link"), @@ -108,9 +116,9 @@ class ContentParser(HTMLParser): small_prev_del = "" added = False - def __init__(self, _): + def __init__(self, lang): super().__init__() - self.more = _("\n__And more__") + self.more = langs[lang]["misc"].gettext("\n__And more__") self.ins_length = len(self.more) self.del_length = len(self.more) diff --git a/src/queue_handler.py b/src/queue_handler.py index d218d00..473588b 100644 --- a/src/queue_handler.py +++ b/src/queue_handler.py @@ -16,8 +16,11 @@ class UpdateDB: def update_db(self): for update in self.updated: - update_type = "postid" if update[2] is not None else "rcid" - db_cursor.execute("UPDATE rcgcdw SET {} = ? WHERE wiki = ?".format(update_type), (update[1],update[0],)) + if update[2] is None: + sql = "UPDATE rcgcdw SET rcid = ? WHERE wiki = ? AND rcid != -1" + else: + sql = "UPDATE rcgcdw SET postid = ? WHERE wikiid = ?" + db_cursor.execute(sql, (update[1], update[0],)) db_connection.commit() self.clear_list() diff --git a/src/request_tracking.py b/src/request_tracking.py deleted file mode 100644 index 13843ad..0000000 --- a/src/request_tracking.py +++ /dev/null @@ -1,23 +0,0 @@ -import aiohttp -import logging -from src.config import settings - -logger = logging.getLogger("rcgcdb.request_tracking") - -class WikiRequestTracking: - def __init__(self): - self.current_timeout = 0 - - async def add_timeout(self, time: float): - self.current_timeout += time - - def is_fandom(self, url): - if any(x in url for x in ("fandom.com", "gamepedia.com", "wikia.org")): - return True - return False - -async def on_request_start(session, trace_config_ctx, params): - if - -trace_config = aiohttp.TraceConfig() -trace_config.on_request_start.append(on_request_start) \ No newline at end of file diff --git a/src/wiki.py b/src/wiki.py index 7a1dd47..346bcd5 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -7,6 +7,7 @@ from src.formatters.rc import embed_formatter, compact_formatter from src.formatters.discussions import feeds_embed_formatter, feeds_compact_formatter from src.misc import parse_link from src.i18n import langs +from src.wiki_ratelimiter import RateLimiter import src.discord import asyncio from src.config import settings @@ -23,12 +24,12 @@ class Wiki: mw_messages: int = None fail_times: int = 0 # corresponding to amount of times connection with wiki failed for client reasons (400-499) session: aiohttp.ClientSession = None - + rc_active: int = 0 @staticmethod - async def fetch_wiki(extended, script_path, session: aiohttp.ClientSession) -> aiohttp.ClientResponse: + async def fetch_wiki(extended, script_path, session: aiohttp.ClientSession, ratelimiter: RateLimiter, amount=20) -> aiohttp.ClientResponse: + await ratelimiter.timeout_wait() url_path = script_path + "api.php" - amount = 20 if extended: params = {"action": "query", "format": "json", "uselang": "content", "list": "tags|recentchanges", "meta": "allmessages|siteinfo", @@ -45,6 +46,7 @@ class Wiki: "rclimit": amount, "rctype": "edit|new|log|categorize", "siprop": "namespaces|general"} try: response = await session.get(url_path, params=params) + ratelimiter.timeout_add(1.0) except (aiohttp.ClientConnectionError, aiohttp.ServerTimeoutError, asyncio.TimeoutError): logger.exception("A connection error occurred while requesting {}".format(url_path)) raise WikiServerError @@ -63,10 +65,12 @@ class Wiki: return response @staticmethod - async def safe_request(url, *keys): + async def safe_request(url, ratelimiter, *keys): + await ratelimiter.timeout_wait() try: async with aiohttp.ClientSession(headers=settings["header"], timeout=aiohttp.ClientTimeout(3.0)) as session: request = await session.get(url, allow_redirects=False) + ratelimiter.timeout_add(1.0) request.raise_for_status() json_request = await request.json(encoding="UTF-8") except (aiohttp.ClientConnectionError, aiohttp.ServerTimeoutError, asyncio.TimeoutError): @@ -108,11 +112,11 @@ class Wiki: logger.warning('{} rows affected by DELETE FROM rcgcdw WHERE wiki = "{}"'.format(db_cursor.rowcount, wiki_url)) db_connection.commit() - async def pull_comment(self, comment_id, WIKI_API_PATH): + async def pull_comment(self, comment_id, WIKI_API_PATH, rate_limiter): try: comment = await self.safe_request( "{wiki}?action=comment&do=getRaw&comment_id={comment}&format=json".format(wiki=WIKI_API_PATH, - comment=comment_id), "text") + comment=comment_id), rate_limiter, "text") logger.debug("Got the following comment from the API: {}".format(comment)) if comment is None: raise TypeError @@ -186,20 +190,16 @@ async def process_mwmsgs(wiki_response: dict, local_wiki: Wiki, mw_msgs: dict): local_wiki.mw_messages = key # db_wiki: webhook, wiki, lang, display, wikiid, rcid, postid -async def essential_info(change: dict, changed_categories, local_wiki: Wiki, db_wiki: tuple, target: tuple, paths: tuple, request: dict): +async def essential_info(change: dict, changed_categories, local_wiki: Wiki, target: tuple, paths: tuple, request: dict, + rate_limiter: RateLimiter): """Prepares essential information for both embed and compact message format.""" - def _(string: str) -> str: - """Our own translation string to make it compatible with async""" - return lang.gettext(string) - - lang = langs[target[0][0]] - ngettext = lang.ngettext + _ = langs[target[0][0]]["wiki"].gettext # recent_changes = RecentChangesClass() # TODO Look into replacing RecentChangesClass with local_wiki changed_categories = changed_categories.get(change["revid"], None) logger.debug("List of categories in essential_info: {}".format(changed_categories)) appearance_mode = embed_formatter if target[0][1] > 0 else compact_formatter if "actionhidden" in change or "suppressed" in change: # if event is hidden using suppression - await appearance_mode("suppressed", change, "", changed_categories, local_wiki, target, _, ngettext, paths) + await appearance_mode("suppressed", change, "", changed_categories, local_wiki, target, paths, rate_limiter) return if "commenthidden" not in change: parsed_comment = parse_link(paths[3], change["parsedcomment"]) @@ -223,16 +223,11 @@ async def essential_info(change: dict, changed_categories, local_wiki: Wiki, db_ additional_data["tags"][tag["name"]] = (BeautifulSoup(tag["displayname"], "lxml")).get_text() except KeyError: additional_data["tags"][tag["name"]] = None # Tags with no displ - await appearance_mode(identification_string, change, parsed_comment, changed_categories, local_wiki, target, _, ngettext, paths, additional_data=additional_data) + await appearance_mode(identification_string, change, parsed_comment, changed_categories, local_wiki, target, paths, rate_limiter, additional_data=additional_data) async def essential_feeds(change: dict, db_wiki: tuple, target: tuple): """Prepares essential information for both embed and compact message format.""" - def _(string: str) -> str: - """Our own translation string to make it compatible with async""" - return lang.gettext(string) - - lang = langs[target[0][0]] appearance_mode = feeds_embed_formatter if target[0][1] > 0 else feeds_compact_formatter identification_string = change["_embedded"]["thread"][0]["containerType"] - await appearance_mode(identification_string, change, target, db_wiki["wiki"], _) + await appearance_mode(identification_string, change, target, db_wiki["wiki"]) diff --git a/src/wiki_ratelimiter.py b/src/wiki_ratelimiter.py new file mode 100644 index 0000000..21acbd5 --- /dev/null +++ b/src/wiki_ratelimiter.py @@ -0,0 +1,19 @@ +import logging, time, asyncio + +logger = logging.getLogger("rcgcdw.ratelimiter") + +class RateLimiter: + def __init__(self): + self.timeout_until = 0 + + def timeout_add(self, timeout: float): + """This function sets a new timeout""" + self.timeout_until = time.time() + timeout + logger.debug("Added {} timeout".format(timeout)) + + async def timeout_wait(self): + """This awaitable calculates the time to wait according to timeout_until, does not wait if it's past the timeout to not skip a cycle""" + calculated_timeout = self.timeout_until - time.time() + logger.debug("Waiting {}".format(calculated_timeout)) + if calculated_timeout > 0: + await asyncio.sleep(calculated_timeout)