Merge branch 'testing' into 'multiple-webhooks'

# Conflicts:
#   src/discussion_formatters.py
This commit is contained in:
MarkusRost 2020-08-05 01:07:59 +00:00
commit 4de6cb1927
20 changed files with 1381 additions and 1378 deletions

View file

@ -10,4 +10,5 @@ test:
- mv settings.json.example settings.json
- python3.6 start.py --test
only:
- testing
- testing
- merge_requests

View file

@ -3,16 +3,18 @@ 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 <piotrex43@protonmail.ch>\n"
"PO-Revision-Date: 2020-08-03 13:44+0000\n"
"Last-Translator: MarkusRost <sukramxro@gmail.com>\n"
"Language-Team: German <https://weblate.frisk.space/projects/rcgcdw/main/de/>"
"\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
@ -419,7 +421,7 @@ msgstr ""
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
#, python-brace-format
@ -435,7 +437,7 @@ msgstr ""
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
#, python-brace-format
@ -678,7 +680,7 @@ msgstr "Änderte die Gruppenzugehörigkeit von {target}"
#: rcgcdw.py:789
#, 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
#, python-brace-format
@ -778,17 +780,17 @@ msgstr "Modell geändert von {old} zu {new}: {reason}"
#: rcgcdw.py:875
#, 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
#, 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
#, 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
#, python-brace-format
@ -988,11 +990,11 @@ msgstr "Bürokrat"
#: rcgcdw.py:1465
msgid "reviewer"
msgstr "reviewer"
msgstr "Prüfer"
#: rcgcdw.py:1466
msgid "autoreview"
msgstr "autoreview"
msgstr "Passive Sichter"
#: rcgcdw.py:1466
msgid "autopatrol"

Binary file not shown.

Binary file not shown.

View file

@ -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 <EMAIL@ADDRESS>, 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__"

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,997 @@
# 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 <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-07-04 00:46+0200\n"
"PO-Revision-Date: 2020-08-04 09:51+0000\n"
"Last-Translator: Frisk The Evil Goat Overlord <piotrex43@protonmail.ch>\n"
"Language-Team: Lolcat <https://weblate.frisk.space/projects/rcgcdw/main/lol/>"
"\n"
"Language: lol\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.1.1\n"
#: rcgcdw.py:77
msgid "Location"
msgstr "Der place"
#: rcgcdw.py:77
msgid "About me"
msgstr "Abot me"
#: rcgcdw.py:77
msgid "Google link"
msgstr ""
#: rcgcdw.py:77
msgid "Facebook link"
msgstr ""
#: rcgcdw.py:77
msgid "Twitter link"
msgstr ""
#: rcgcdw.py:77
msgid "Reddit link"
msgstr ""
#: rcgcdw.py:77
msgid "Twitch link"
msgstr ""
#: rcgcdw.py:77
msgid "PSN link"
msgstr ""
#: rcgcdw.py:77
msgid "VK link"
msgstr ""
#: rcgcdw.py:77
msgid "XBL link"
msgstr ""
#: rcgcdw.py:77
msgid "Steam link"
msgstr ""
#: rcgcdw.py:77
msgid "Discord handle"
msgstr ""
#: rcgcdw.py:77
msgid "Battle.net handle"
msgstr ""
#: rcgcdw.py:122 rcgcdw.py:838
msgid "Unknown"
msgstr ""
#: rcgcdw.py:124
msgid "unknown"
msgstr ""
#: rcgcdw.py:162
#, python-brace-format
msgid ""
"[{author}]({author_url}) edited [{article}]({edit_link}){comment} ({sign}"
"{edit_size})"
msgstr ""
"[{author}]({author_url}) rearranged lettwers of "
"[{article}]({edit_link}){comment} ({sign}{edit_size})"
#: rcgcdw.py:164
#, python-brace-format
msgid ""
"[{author}]({author_url}) created [{article}]({edit_link}){comment} ({sign}"
"{edit_size})"
msgstr ""
#: rcgcdw.py:167
#, python-brace-format
msgid "[{author}]({author_url}) uploaded [{file}]({file_link}){comment}"
msgstr ""
#: rcgcdw.py:174
#, python-brace-format
msgid ""
"[{author}]({author_url}) reverted a version of [{file}]({file_link}){comment}"
msgstr ""
#: rcgcdw.py:178
#, python-brace-format
msgid ""
"[{author}]({author_url}) uploaded a new version of [{file}]({file_link})"
"{comment}"
msgstr ""
#: rcgcdw.py:181
#, python-brace-format
msgid "[{author}]({author_url}) deleted [{page}]({page_link}){comment}"
msgstr ""
#: rcgcdw.py:185
#, python-brace-format
msgid ""
"[{author}]({author_url}) deleted redirect by overwriting [{page}]"
"({page_link}){comment}"
msgstr ""
#: rcgcdw.py:189 rcgcdw.py:194
msgid "without making a redirect"
msgstr ""
#: rcgcdw.py:189 rcgcdw.py:195
msgid "with a redirect"
msgstr ""
#: rcgcdw.py:190
#, python-brace-format
msgid ""
"[{author}]({author_url}) moved {redirect}*{article}* to [{target}]"
"({target_url}) {made_a_redirect}{comment}"
msgstr ""
#: rcgcdw.py:196
#, python-brace-format
msgid ""
"[{author}]({author_url}) moved {redirect}*{article}* over redirect to "
"[{target}]({target_url}) {made_a_redirect}{comment}"
msgstr ""
#: rcgcdw.py:201
#, python-brace-format
msgid ""
"[{author}]({author_url}) moved protection settings from {redirect}*{article}"
"* to [{target}]({target_url}){comment}"
msgstr ""
#: rcgcdw.py:212 rcgcdw.py:616
msgid "infinity and beyond"
msgstr ""
#: rcgcdw.py:229
msgid " on pages: "
msgstr ""
#: rcgcdw.py:236 rcgcdw.py:636
msgid " and namespaces: "
msgstr ""
#: rcgcdw.py:238
msgid " on namespaces: "
msgstr ""
#: rcgcdw.py:250
#, python-brace-format
msgid ""
"[{author}]({author_url}) blocked [{user}]({user_url}) for {time}"
"{restriction_desc}{comment}"
msgstr ""
#: rcgcdw.py:254
#, python-brace-format
msgid ""
"[{author}]({author_url}) changed block settings for [{blocked_user}]"
"({user_url}){comment}"
msgstr ""
#: rcgcdw.py:258
#, python-brace-format
msgid ""
"[{author}]({author_url}) unblocked [{blocked_user}]({user_url}){comment}"
msgstr ""
#: rcgcdw.py:261
#, python-brace-format
msgid ""
"[{author}]({author_url}) left a [comment]({comment}) on {target} profile"
msgstr ""
#: rcgcdw.py:261
msgid "their own profile"
msgstr ""
#: rcgcdw.py:264
#, python-brace-format
msgid ""
"[{author}]({author_url}) replied to a [comment]({comment}) on {target} "
"profile"
msgstr ""
#: rcgcdw.py:267 rcgcdw.py:273 rcgcdw.py:284 rcgcdw.py:288
msgid "their own"
msgstr ""
#: rcgcdw.py:270
#, python-brace-format
msgid ""
"[{author}]({author_url}) edited a [comment]({comment}) on {target} profile"
msgstr ""
#: rcgcdw.py:276
#, python-brace-format
msgid "[{author}]({author_url}) purged a comment on {target} profile"
msgstr ""
#: rcgcdw.py:286
#, python-brace-format
msgid "[{author}]({author_url}) deleted a comment on {target} profile"
msgstr ""
#: rcgcdw.py:292
#, python-brace-format
msgid "[{target}]({target_url})'s"
msgstr ""
#: rcgcdw.py:292
#, python-brace-format
msgid "[their own]({target_url})"
msgstr ""
#: rcgcdw.py:293
#, python-brace-format
msgid ""
"[{author}]({author_url}) edited the {field} on {target} profile. *({desc})*"
msgstr ""
#: rcgcdw.py:307 rcgcdw.py:309 rcgcdw.py:714 rcgcdw.py:716
msgid "none"
msgstr ""
#: rcgcdw.py:315 rcgcdw.py:701
msgid "System"
msgstr ""
#: rcgcdw.py:320
#, python-brace-format
msgid ""
"[{author}]({author_url}) protected [{article}]({article_url}) with the "
"following settings: {settings}{comment}"
msgstr ""
#: rcgcdw.py:322 rcgcdw.py:330 rcgcdw.py:724 rcgcdw.py:730
msgid " [cascading]"
msgstr ""
#: rcgcdw.py:327
#, python-brace-format
msgid ""
"[{author}]({author_url}) modified protection settings of [{article}]"
"({article_url}) to: {settings}{comment}"
msgstr ""
#: rcgcdw.py:334
#, python-brace-format
msgid ""
"[{author}]({author_url}) removed protection from [{article}]({article_url})"
"{comment}"
msgstr ""
#: rcgcdw.py:338
#, python-brace-format
msgid ""
"[{author}]({author_url}) changed visibility of revision on page [{article}]"
"({article_url}){comment}"
msgid_plural ""
"[{author}]({author_url}) changed visibility of {amount} revisions on page "
"[{article}]({article_url}){comment}"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:343
#, python-brace-format
msgid ""
"[{author}]({author_url}) imported [{article}]({article_url}) with {count} "
"revision{comment}"
msgid_plural ""
"[{author}]({author_url}) imported [{article}]({article_url}) with {count} "
"revisions{comment}"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:348
#, python-brace-format
msgid "[{author}]({author_url}) restored [{article}]({article_url}){comment}"
msgstr ""
#: rcgcdw.py:350
#, python-brace-format
msgid "[{author}]({author_url}) changed visibility of log events{comment}"
msgstr ""
#: rcgcdw.py:352
#, python-brace-format
msgid "[{author}]({author_url}) imported interwiki{comment}"
msgstr ""
#: rcgcdw.py:355
#, python-brace-format
msgid ""
"[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})"
msgstr ""
#: rcgcdw.py:359
#, python-brace-format
msgid ""
"[{author}]({author_url}) created abuse filter [number {number}]({filter_url})"
msgstr ""
#: rcgcdw.py:363
#, python-brace-format
msgid ""
"[{author}]({author_url}) merged revision histories of [{article}]"
"({article_url}) into [{dest}]({dest_url}){comment}"
msgstr ""
#: rcgcdw.py:367
#, python-brace-format
msgid ""
"[{author}]({author_url}) added an entry to the [interwiki table]"
"({table_url}) pointing to {website} with {prefix} prefix"
msgstr ""
#: rcgcdw.py:373
#, python-brace-format
msgid ""
"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) "
"pointing to {website} with {prefix} prefix"
msgstr ""
#: rcgcdw.py:379
#, python-brace-format
msgid ""
"[{author}]({author_url}) deleted an entry in [interwiki table]({table_url})"
msgstr ""
#: rcgcdw.py:382
#, python-brace-format
msgid ""
"[{author}]({author_url}) changed the content model of the page [{article}]"
"({article_url}) from {old} to {new}{comment}"
msgstr ""
#: rcgcdw.py:386
#, python-brace-format
msgid ""
"[{author}]({author_url}) edited the sprite for [{article}]({article_url})"
msgstr ""
#: rcgcdw.py:389
#, python-brace-format
msgid ""
"[{author}]({author_url}) created the sprite sheet for [{article}]"
"({article_url})"
msgstr ""
#: rcgcdw.py:392
#, python-brace-format
msgid ""
"[{author}]({author_url}) edited the slice for [{article}]({article_url})"
msgstr ""
#: rcgcdw.py:397
#, python-brace-format
msgid "[{author}]({author_url}) created the Cargo table \"{table}\""
msgstr ""
#: rcgcdw.py:399
#, python-brace-format
msgid "[{author}]({author_url}) deleted the Cargo table \"{table}\""
msgstr ""
#: rcgcdw.py:404
#, python-brace-format
msgid "[{author}]({author_url}) recreated the Cargo table \"{table}\""
msgstr ""
#: rcgcdw.py:409
#, python-brace-format
msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\""
msgstr ""
#: rcgcdw.py:412
#, python-brace-format
msgid "[{author}]({author_url}) created a [tag]({tag_url}) \"{tag}\""
msgstr ""
#: rcgcdw.py:416
#, python-brace-format
msgid "[{author}]({author_url}) deleted a [tag]({tag_url}) \"{tag}\""
msgstr ""
#: rcgcdw.py:420
#, python-brace-format
msgid "[{author}]({author_url}) activated a [tag]({tag_url}) \"{tag}\""
msgstr ""
#: rcgcdw.py:423
#, python-brace-format
msgid "[{author}]({author_url}) deactivated a [tag]({tag_url}) \"{tag}\""
msgstr ""
#: rcgcdw.py:425
msgid "An action has been hidden by administration."
msgstr ""
#: rcgcdw.py:435 rcgcdw.py:717
msgid "No description provided"
msgstr ""
#: rcgcdw.py:482
msgid "(N!) "
msgstr ""
#: rcgcdw.py:483
msgid "m"
msgstr ""
#: rcgcdw.py:483
msgid "b"
msgstr ""
#: rcgcdw.py:500 rcgcdw.py:505
msgid "__Only whitespace__"
msgstr ""
#: rcgcdw.py:510
msgid "Removed"
msgstr ""
#: rcgcdw.py:512
msgid "Added"
msgstr ""
#: rcgcdw.py:546 rcgcdw.py:585
msgid "Options"
msgstr ""
#: rcgcdw.py:546
#, python-brace-format
msgid "([preview]({link}) | [undo]({undolink}))"
msgstr ""
#: rcgcdw.py:551
#, python-brace-format
msgid "Uploaded a new version of {name}"
msgstr ""
#: rcgcdw.py:553
#, python-brace-format
msgid "Reverted a version of {name}"
msgstr ""
#: rcgcdw.py:555
#, python-brace-format
msgid "Uploaded {name}"
msgstr ""
#: rcgcdw.py:571
msgid "**No license!**"
msgstr ""
#: rcgcdw.py:583
msgid ""
"\n"
"License: {}"
msgstr ""
#: rcgcdw.py:585
#, python-brace-format
msgid "([preview]({link}))"
msgstr ""
#: rcgcdw.py:590
#, python-brace-format
msgid "Deleted page {article}"
msgstr ""
#: rcgcdw.py:593
#, python-brace-format
msgid "Deleted redirect {article} by overwriting"
msgstr ""
#: rcgcdw.py:597
msgid "No redirect has been made"
msgstr ""
#: rcgcdw.py:598
msgid "A redirect has been made"
msgstr ""
#: rcgcdw.py:599
#, python-brace-format
msgid "Moved {redirect}{article} to {target}"
msgstr ""
#: rcgcdw.py:602
#, python-brace-format
msgid "Moved {redirect}{article} to {title} over redirect"
msgstr ""
#: rcgcdw.py:606
#, python-brace-format
msgid "Moved protection settings from {redirect}{article} to {title}"
msgstr ""
#: rcgcdw.py:629
msgid "Blocked from editing the following pages: "
msgstr ""
#: rcgcdw.py:638
msgid "Blocked from editing pages on following namespaces: "
msgstr ""
#: rcgcdw.py:649
msgid "Partial block details"
msgstr ""
#: rcgcdw.py:650
#, python-brace-format
msgid "Blocked {blocked_user} for {time}"
msgstr ""
#: rcgcdw.py:654
#, python-brace-format
msgid "Changed block settings for {blocked_user}"
msgstr ""
#: rcgcdw.py:658
#, python-brace-format
msgid "Unblocked {blocked_user}"
msgstr ""
#: rcgcdw.py:663
#, python-brace-format
msgid "Left a comment on {target}'s profile"
msgstr ""
#: rcgcdw.py:665
msgid "Left a comment on their own profile"
msgstr ""
#: rcgcdw.py:670
#, python-brace-format
msgid "Replied to a comment on {target}'s profile"
msgstr ""
#: rcgcdw.py:672
msgid "Replied to a comment on their own profile"
msgstr ""
#: rcgcdw.py:677
#, python-brace-format
msgid "Edited a comment on {target}'s profile"
msgstr ""
#: rcgcdw.py:679
msgid "Edited a comment on their own profile"
msgstr ""
#: rcgcdw.py:682
#, python-brace-format
msgid "Edited {target}'s profile"
msgstr ""
#: rcgcdw.py:682
msgid "Edited their own profile"
msgstr ""
#: rcgcdw.py:684
#, python-brace-format
msgid "Cleared the {field} field"
msgstr ""
#: rcgcdw.py:686
#, python-brace-format
msgid "{field} field changed to: {desc}"
msgstr ""
#: rcgcdw.py:689
#, python-brace-format
msgid "Purged a comment on {target}'s profile"
msgstr ""
#: rcgcdw.py:695
#, python-brace-format
msgid "Deleted a comment on {target}'s profile"
msgstr ""
#: rcgcdw.py:699
#, python-brace-format
msgid "Changed group membership for {target}"
msgstr ""
#: rcgcdw.py:703
#, python-brace-format
msgid "{target} got autopromoted to a new usergroup"
msgstr ""
#: rcgcdw.py:718
#, python-brace-format
msgid "Groups changed from {old_groups} to {new_groups}{reason}"
msgstr ""
#: rcgcdw.py:722
#, python-brace-format
msgid "Protected {target}"
msgstr ""
#: rcgcdw.py:728
#, python-brace-format
msgid "Changed protection level for {article}"
msgstr ""
#: rcgcdw.py:734
#, python-brace-format
msgid "Removed protection from {article}"
msgstr ""
#: rcgcdw.py:738
#, python-brace-format
msgid "Changed visibility of revision on page {article} "
msgid_plural "Changed visibility of {amount} revisions on page {article} "
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:743
#, python-brace-format
msgid "Imported {article} with {count} revision"
msgid_plural "Imported {article} with {count} revisions"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:748
#, python-brace-format
msgid "Restored {article}"
msgstr ""
#: rcgcdw.py:751
msgid "Changed visibility of log events"
msgstr ""
#: rcgcdw.py:754
msgid "Imported interwiki"
msgstr ""
#: rcgcdw.py:757
#, python-brace-format
msgid "Edited abuse filter number {number}"
msgstr ""
#: rcgcdw.py:760
#, python-brace-format
msgid "Created abuse filter number {number}"
msgstr ""
#: rcgcdw.py:763
#, python-brace-format
msgid "Merged revision histories of {article} into {dest}"
msgstr ""
#: rcgcdw.py:767
msgid "Added an entry to the interwiki table"
msgstr ""
#: rcgcdw.py:768 rcgcdw.py:774
#, python-brace-format
msgid "Prefix: {prefix}, website: {website} | {desc}"
msgstr ""
#: rcgcdw.py:773
msgid "Edited an entry in interwiki table"
msgstr ""
#: rcgcdw.py:779
msgid "Deleted an entry in interwiki table"
msgstr ""
#: rcgcdw.py:780
#, python-brace-format
msgid "Prefix: {prefix} | {desc}"
msgstr ""
#: rcgcdw.py:783
#, python-brace-format
msgid "Changed the content model of the page {article}"
msgstr ""
#: rcgcdw.py:784
#, python-brace-format
msgid "Model changed from {old} to {new}: {reason}"
msgstr ""
#: rcgcdw.py:789
#, python-brace-format
msgid "Edited the sprite for {article}"
msgstr ""
#: rcgcdw.py:792
#, python-brace-format
msgid "Created the sprite sheet for {article}"
msgstr ""
#: rcgcdw.py:795
#, python-brace-format
msgid "Edited the slice for {article}"
msgstr ""
#: rcgcdw.py:801
#, python-brace-format
msgid "Created the Cargo table \"{table}\""
msgstr ""
#: rcgcdw.py:805
#, python-brace-format
msgid "Deleted the Cargo table \"{table}\""
msgstr ""
#: rcgcdw.py:812
#, python-brace-format
msgid "Recreated the Cargo table \"{table}\""
msgstr ""
#: rcgcdw.py:819
#, python-brace-format
msgid "Replaced the Cargo table \"{table}\""
msgstr ""
#: rcgcdw.py:823
#, python-brace-format
msgid "Created a tag \"{tag}\""
msgstr ""
#: rcgcdw.py:827
#, python-brace-format
msgid "Deleted a tag \"{tag}\""
msgstr ""
#: rcgcdw.py:831
#, python-brace-format
msgid "Activated a tag \"{tag}\""
msgstr ""
#: rcgcdw.py:834
#, python-brace-format
msgid "Deactivated a tag \"{tag}\""
msgstr ""
#: rcgcdw.py:837
msgid "Action has been hidden by administration."
msgstr ""
#: rcgcdw.py:857
msgid "Tags"
msgstr ""
#: rcgcdw.py:860
msgid "**Added**: "
msgstr ""
#: rcgcdw.py:860
msgid " and {} more\n"
msgstr ""
#: rcgcdw.py:861
msgid "**Removed**: "
msgstr ""
#: rcgcdw.py:861
msgid " and {} more"
msgstr ""
#: rcgcdw.py:862
msgid "Changed categories"
msgstr ""
#: rcgcdw.py:879
msgid "~~hidden~~"
msgstr ""
#: rcgcdw.py:885
msgid "hidden"
msgstr ""
#: rcgcdw.py:955 rcgcdw.py:957 rcgcdw.py:959 rcgcdw.py:961 rcgcdw.py:963
#: rcgcdw.py:965 rcgcdw.py:967
#, python-brace-format
msgid "{value} (avg. {avg})"
msgstr ""
#: rcgcdw.py:987
msgid "Daily overview"
msgstr ""
#: rcgcdw.py:995
msgid "No activity"
msgstr ""
#: rcgcdw.py:1019
msgid " ({} action)"
msgid_plural " ({} actions)"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1021
msgid " ({} edit)"
msgid_plural " ({} edits)"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1026
msgid " UTC ({} action)"
msgid_plural " UTC ({} actions)"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1028 rcgcdw.py:1029 rcgcdw.py:1033
msgid "But nobody came"
msgstr ""
#: rcgcdw.py:1036
msgid "Most active user"
msgid_plural "Most active users"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1037
msgid "Most edited article"
msgid_plural "Most edited articles"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1038
msgid "Edits made"
msgstr ""
#: rcgcdw.py:1038
msgid "New files"
msgstr ""
#: rcgcdw.py:1038
msgid "Admin actions"
msgstr ""
#: rcgcdw.py:1039
msgid "Bytes changed"
msgstr ""
#: rcgcdw.py:1039
msgid "New articles"
msgstr ""
#: rcgcdw.py:1040
msgid "Unique contributors"
msgstr ""
#: rcgcdw.py:1041
msgid "Most active hour"
msgid_plural "Most active hours"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1042
msgid "Day score"
msgstr ""
#: rcgcdw.py:1165
#, python-brace-format
msgid "Connection to {wiki} seems to be stable now."
msgstr ""
#: rcgcdw.py:1166 rcgcdw.py:1281
msgid "Connection status"
msgstr ""
#: rcgcdw.py:1280
#, python-brace-format
msgid "{wiki} seems to be down or unreachable."
msgstr ""
#: rcgcdw.py:1355
msgid "director"
msgstr ""
#: rcgcdw.py:1355
msgid "bot"
msgstr ""
#: rcgcdw.py:1355
msgid "editor"
msgstr ""
#: rcgcdw.py:1355
msgid "directors"
msgstr ""
#: rcgcdw.py:1355
msgid "sysop"
msgstr ""
#: rcgcdw.py:1355
msgid "bureaucrat"
msgstr ""
#: rcgcdw.py:1355
msgid "reviewer"
msgstr ""
#: rcgcdw.py:1356
msgid "autoreview"
msgstr ""
#: rcgcdw.py:1356
msgid "autopatrol"
msgstr ""
#: rcgcdw.py:1356
msgid "wiki_guardian"
msgstr ""
#: rcgcdw.py:1356
msgid "second"
msgid_plural "seconds"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1356
msgid "minute"
msgid_plural "minutes"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1356
msgid "hour"
msgid_plural "hours"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1356
msgid "day"
msgid_plural "days"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1356
msgid "week"
msgid_plural "weeks"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1356
msgid "month"
msgid_plural "months"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1356
msgid "year"
msgid_plural "years"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1356
msgid "millennium"
msgid_plural "millennia"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1356
msgid "decade"
msgid_plural "decades"
msgstr[0] ""
msgstr[1] ""
#: rcgcdw.py:1356
msgid "century"
msgid_plural "centuries"
msgstr[0] ""
msgstr[1] ""

View file

@ -7,17 +7,18 @@ 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 <piotrex43@protonmail.ch>\n"
"Language-Team: \n"
"PO-Revision-Date: 2020-08-03 00:52+0000\n"
"Last-Translator: Frisk The Evil Goat Overlord <furrtrex43@protonmail.ch>\n"
"Language-Team: Polish <https://weblate.frisk.space/projects/rcgcdw/main/pl/>"
"\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"
@ -134,7 +135,7 @@ msgstr ""
#: rcgcdw.py:271 rcgcdw.py:276
msgid "without making a redirect"
msgstr "bez utworzenia przekierowania przekierowania"
msgstr "bez utworzenia przekierowania"
#: rcgcdw.py:271 rcgcdw.py:277
msgid "with a redirect"

View file

@ -7,15 +7,16 @@ 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 <piotrex43@protonmail.ch>\n"
"Language-Team: \n"
"Language: en_US\n"
"PO-Revision-Date: 2020-08-04 09:51+0000\n"
"Last-Translator: Eduaddad <duduaddad@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://weblate.frisk.space/projects/"
"rcgcdw/discussions/pt_BR/>\n"
"Language: pt-br\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.3\n"
"X-Generator: Weblate 4.1.1\n"
#: discussions.py:56
#, python-brace-format
@ -44,16 +45,16 @@ msgstr "Criado \"{title}\" no mural de mensagem de {user}"
#: discussions.py:99
#, python-brace-format
msgid "Created a poll titled \"{title}\""
msgstr ""
msgstr "Criou uma enquete intitulada \"{title}\""
#: discussions.py:104
msgid "Option {}"
msgstr ""
msgstr "Option {}"
#: discussions.py:105
#, python-brace-format
msgid "__[View image]({image_url})__"
msgstr ""
msgstr "__[Ver imagem]({image_url})__"
#: discussions.py:121
#, python-brace-format
@ -61,20 +62,18 @@ 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}"
"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}"
#, 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 ""
"Criado [{title}](<{url}f/p/{threadId}>) por [{author}](<{url}f/u/{creatorId}"
">) no {forumName}"
"[{author}](<{url}f/u/{creatorId}>) criou [{title}](<{wikiurl}wiki/"
"Message_Wall:{user_wall}?threadId={threadid}>) no mural de mensagens de "
"{user}"
#: discussions.py:136
#, python-brace-format
@ -86,17 +85,15 @@ msgstr ""
"{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}"
#, 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 ""
"Criado [{title}](<{url}f/p/{threadId}>) por [{author}](<{url}f/u/{creatorId}"
">) no {forumName}"
"[{author}](<{url}f/u/{creatorId}>) respondeu [{title}](<{wikiurl}wiki/"
"Message_Wall:{user_wall}?threadId={threadid}#{replyId}>) no mural de "
"mensagens de {user}"
#: discussions.py:153
#, python-brace-format
@ -104,3 +101,5 @@ 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}"

View file

@ -8,15 +8,16 @@ 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 <piotrex43@protonmail.ch>\n"
"Language-Team: \n"
"Language: pt_BR\n"
"PO-Revision-Date: 2020-08-04 09:51+0000\n"
"Last-Translator: Eduaddad <duduaddad@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://weblate.frisk.space/projects/"
"rcgcdw/main/pt_BR/>\n"
"Language: pt-br\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"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"
@ -64,21 +65,19 @@ msgstr "Link do Steam"
#: rcgcdw.py:71
msgid "Discord handle"
msgstr ""
msgstr "Link do Discord"
#: rcgcdw.py:71
msgid "Battle.net handle"
msgstr ""
msgstr "Link do Battle.net"
#: rcgcdw.py:172 rcgcdw.py:924
msgid "Unknown"
msgstr "Desconhecido"
#: rcgcdw.py:174
#, fuzzy
#| msgid "Unknown"
msgid "unknown"
msgstr "Desconhecido"
msgstr "desconhecido"
#: rcgcdw.py:244
#, python-brace-format
@ -86,6 +85,8 @@ 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
#, python-brace-format
@ -93,11 +94,13 @@ 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
#, 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
#, python-brace-format
@ -112,11 +115,13 @@ 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
#, 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
#, python-brace-format
@ -124,14 +129,16 @@ 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
msgid "without making a redirect"
msgstr ""
msgstr "sem fazer um redirecionamento"
#: rcgcdw.py:271 rcgcdw.py:277
msgid "with a redirect"
msgstr ""
msgstr "com um redirecionamento"
#: rcgcdw.py:272
#, python-brace-format
@ -139,6 +146,8 @@ 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
#, python-brace-format
@ -146,14 +155,17 @@ 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}"
#, 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"
@ -172,58 +184,62 @@ msgid " on namespaces: "
msgstr " nos espaços nominais: "
#: rcgcdw.py:332
#, fuzzy, python-brace-format
#| msgid "Changed block settings for {blocked_user}"
#, python-brace-format
msgid ""
"[{author}]({author_url}) blocked [{user}]({user_url}) for {time}"
"{restriction_desc}{comment}"
msgstr "Configurações de bloqueio alteradas para {blocked_user}"
msgstr ""
"[{author}]({author_url}) bloqueou [{user}]({user_url}) por "
"{time}{restriction_desc}{comment}"
#: rcgcdw.py:336
#, fuzzy, python-brace-format
#| msgid "Changed block settings for {blocked_user}"
#, 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
#, 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"
#, 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"
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"
#, 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}"
msgstr ""
"[{author}]({author_url}) respondeu a um [comentário]({comment}) no perfil de "
"{target}"
#: rcgcdw.py:349 rcgcdw.py:355 rcgcdw.py:366 rcgcdw.py:370
msgid "their own"
msgstr ""
msgstr "próprio"
#: rcgcdw.py:352
#, fuzzy, python-brace-format
#| msgid "Edited a comment on {target}'s profile"
#, 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
#, python-brace-format
@ -231,26 +247,26 @@ 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"
#, 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
#, python-brace-format
msgid "[{target}]({target_url})'s"
msgstr ""
msgstr "[{target}]({target_url})"
#: rcgcdw.py:374
#, python-brace-format
msgid "[their own]({target_url})"
msgstr ""
msgstr "[seu próprio]({target_url})"
#: rcgcdw.py:375
#, 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
msgid "none"
@ -266,6 +282,8 @@ 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
msgid " [cascading]"
@ -277,6 +295,8 @@ 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
#, python-brace-format
@ -284,19 +304,23 @@ 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} "
#, 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
#, python-brace-format
@ -307,37 +331,44 @@ 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
#, 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"
#, 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
#, 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}"
#, 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}"
#, 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
#, python-brace-format
@ -345,6 +376,8 @@ 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
#, python-brace-format
@ -352,6 +385,8 @@ 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
#, python-brace-format
@ -359,13 +394,16 @@ 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"
#, 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
#, python-brace-format
@ -373,26 +411,30 @@ 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
#, 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}"
#, 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
#, 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
#, python-brace-format
@ -402,41 +444,41 @@ msgstr "[{author}]({author_url}) criou tabela no Cargo \"{table}\""
#: rcgcdw.py:480
#, 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
#, 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
#, 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
#, 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
#, 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
#, 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
#, 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
msgid "An action has been hidden by administration."
msgstr ""
msgstr "Uma ação foi ocultada pela administração."
#: rcgcdw.py:515 rcgcdw.py:803
msgid "No description provided"
@ -606,7 +648,7 @@ msgstr "Editou seu próprio perfil"
#: rcgcdw.py:770
#, python-brace-format
msgid "Cleared the {field} field"
msgstr ""
msgstr "Limpo o campo {field}"
#: rcgcdw.py:772
#, python-brace-format
@ -784,7 +826,7 @@ msgstr "Desativou uma etiqueta \"{tag}\""
#: rcgcdw.py:923
msgid "Action has been hidden by administration."
msgstr ""
msgstr "A ação foi ocultada pela administração."
#: rcgcdw.py:951
msgid "Tags"
@ -812,17 +854,17 @@ msgstr "Mudanças de categorias"
#: rcgcdw.py:977
msgid "~~hidden~~"
msgstr ""
msgstr "~~ocultado~~"
#: rcgcdw.py:983
msgid "hidden"
msgstr ""
msgstr "oculto"
#: 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"
@ -987,8 +1029,8 @@ msgstr[1] "semanas"
#: rcgcdw.py:1466
msgid "month"
msgid_plural "months"
msgstr[0] ""
msgstr[1] ""
msgstr[0] "mês"
msgstr[1] "meses"
#: rcgcdw.py:1466
msgid "year"

View file

@ -5,86 +5,90 @@
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Project-Id-Version: PACKAGE 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"
"POT-Creation-Date: 2020-07-04 00:58+0200\n"
"PO-Revision-Date: 2020-08-04 09:51+0000\n"
"Last-Translator: Dianliang233 <dianliang233@gmail.com>\n"
"Language-Team: Chinese (Simplified) <https://weblate.frisk.space/projects/"
"rcgcdw/discussions/zh_Hans/>\n"
"Language: zh_Hans\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.1.1\n"
#: discussions.py:56
#, python-brace-format
msgid "Replied to \"{title}\""
msgstr "Replied to \"{title}\""
msgstr "回复了“{title}”"
#: discussions.py:63 discussions.py:79
#: discussions.py:63 discussions.py:79 discussions.py:127 discussions.py:143
msgid "unknown"
msgstr "unknown"
msgstr "未知"
#: discussions.py:68
#, python-brace-format
msgid "Replied to \"{title}\" on {user}'s Message Wall"
msgstr "Replied to \"{title}\" on {user}'s Message Wall"
msgstr ""
#: discussions.py:72
#, python-brace-format
msgid "Created \"{title}\""
msgstr "Created \"{title}\""
msgstr ""
#: discussions.py:86
#, python-brace-format
msgid "Created \"{title}\" on {user}'s Message Wall"
msgstr "Created \"{title}\" on {user}'s Message Wall"
msgstr ""
#: discussions.py:99
#, python-brace-format
msgid "Created a poll titled \"{title}\""
msgstr "Created a poll titled \"{title}\""
msgstr ""
#: discussions.py:104
msgid "Option {}"
msgstr "Option {}"
msgstr ""
#: 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 [{title}](<{url}f/p/{threadId}>) "
"in {forumName}"
msgstr ""
#: 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 ""
#: 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}>) created a [reply](<{url}f/p/{threadId}/r/"
"{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}"
#: discussions.py:126
#: 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 ""
#: discussions.py:153
#, 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}"

View file

@ -0,0 +1,28 @@
# 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 <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-07-04 00:57+0200\n"
"PO-Revision-Date: 2020-08-04 09:51+0000\n"
"Last-Translator: Dianliang233 <dianliang233@gmail.com>\n"
"Language-Team: Chinese (Simplified) <https://weblate.frisk.space/projects/"
"rcgcdw/misc/zh_Hans/>\n"
"Language: zh_Hans\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.1.1\n"
#: misc.py:143
msgid ""
"\n"
"__And more__"
msgstr ""
"\n"
"__还有更多__"

View file

@ -0,0 +1,28 @@
# 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 <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-07-04 00:57+0200\n"
"PO-Revision-Date: 2020-08-04 09:51+0000\n"
"Last-Translator: Dianliang233 <dianliang233@gmail.com>\n"
"Language-Team: Chinese (Traditional) <https://weblate.frisk.space/projects/"
"rcgcdw/misc/zh_Hant/>\n"
"Language: zh_Hant\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.1.1\n"
#: misc.py:143
msgid ""
"\n"
"__And more__"
msgstr ""
"\n"
"__還有更多__"

View file

@ -12,119 +12,124 @@ _ = disc.gettext
discussion_logger = logging.getLogger("rcgcdw.discussion_formatter")
def embed_formatter(post, post_type):
"""Embed formatter for Fandom discussions."""
embed = DiscordMessage("embed", "discussion", settings["fandom_discussions"]["webhookURL"][int(post["id"]) % len(settings["fandom_discussions"]["webhookURL"])])
embed.set_author(post["createdBy"]["name"], "{wikiurl}f/u/{creatorId}".format(
wikiurl=settings["fandom_discussions"]["wiki_url"], creatorId=post["creatorId"]), icon_url=post["createdBy"]["avatarUrl"])
discussion_post_type = post["_embedded"]["thread"][0].get("containerType", "FORUM") # Can be FORUM, ARTICLE_COMMENT or WALL on UCP
if post_type == "TEXT":
if post["isReply"]:
if discussion_post_type == "FORUM":
embed.event_type = "discussion/forum/reply"
embed["title"] = _("Replied to \"{title}\"").format(title=post["_embedded"]["thread"][0]["title"])
embed["url"] = "{wikiurl}f/p/{threadId}/r/{postId}".format(
wikiurl=settings["fandom_discussions"]["wiki_url"], threadId=post["threadId"], postId=post["id"])
elif discussion_post_type == "ARTICLE_COMMENT":
discussion_logger.warning("Article comments are not yet implemented. For reasons see https://gitlab.com/piotrex43/RcGcDw/-/issues/126#note_366480037")
return
elif discussion_post_type == "WALL":
user_wall = _("unknown") # Fail safe
embed.event_type = "discussion/wall/reply"
if post["forumName"].endswith(' Message Wall'):
user_wall = post["forumName"][:-13]
embed["url"] = "{wikiurl}wiki/Message_Wall:{user_wall}?threadId={threadid}#{replyId}".format(wikiurl=settings["fandom_discussions"]["wiki_url"], user_wall=quote_plus(user_wall.replace(" ", "_")), threadid=post["threadId"], replyId=post["id"])
embed["title"] = _("Replied to \"{title}\" on {user}'s Message Wall").format(title=post["_embedded"]["thread"][0]["title"], user=user_wall)
else:
if discussion_post_type == "FORUM":
embed.event_type = "discussion/forum/post"
embed["title"] = _("Created \"{title}\"").format(title=post["title"])
embed["url"] = "{wikiurl}f/p/{threadId}".format(wikiurl=settings["fandom_discussions"]["wiki_url"],
threadId=post["threadId"])
elif discussion_post_type == "ARTICLE_COMMENT":
discussion_logger.warning("Article comments are not yet implemented. For reasons see https://gitlab.com/piotrex43/RcGcDw/-/issues/126#note_366480037")
return
elif discussion_post_type == "WALL":
user_wall = _("unknown") # Fail safe
embed.event_type = "discussion/wall/post"
if post["forumName"].endswith(' Message Wall'):
user_wall = post["forumName"][:-13]
embed["url"] = "{wikiurl}wiki/Message_Wall:{user_wall}?threadId={threadid}".format(
wikiurl=settings["fandom_discussions"]["wiki_url"], user_wall=quote_plus(user_wall.replace(" ", "_")),
threadid=post["threadId"])
embed["title"] = _("Created \"{title}\" on {user}'s Message Wall").format(title=post["_embedded"]["thread"][0]["title"], user=user_wall)
if settings["fandom_discussions"]["appearance"]["embed"]["show_content"]:
if post.get("jsonModel") is not None:
npost = DiscussionsFromHellParser(post)
embed["description"] = npost.parse()
if npost.image_last:
embed["image"]["url"] = npost.image_last
embed["description"] = embed["description"].replace(npost.image_last, "")
else: # Fallback when model is not available
embed["description"] = post.get("rawContent", "")
elif post_type == "POLL":
embed.event_type = "discussion/forum/poll"
poll = post["poll"]
embed["title"] = _("Created a poll titled \"{title}\"").format(title=poll["question"])
image_type = False
if poll["answers"][0]["image"] is not None:
image_type = True
for num, option in enumerate(poll["answers"]):
embed.add_field(option["text"] if image_type is True else _("Option {}").format(num+1),
option["text"] if image_type is False else _("__[View image]({image_url})__").format(image_url=option["image"]["url"]),
inline=True)
embed["footer"]["text"] = post["forumName"]
embed["timestamp"] = datetime.datetime.fromtimestamp(post["creationDate"]["epochSecond"], tz=datetime.timezone.utc).isoformat()
embed.finish_embed()
send_to_discord(embed)
def compact_formatter(post, post_type):
def compact_formatter(post_type, post):
"""Compact formatter for Fandom discussions."""
message = None
discussion_post_type = post["_embedded"]["thread"][0].get("containerType",
"FORUM") # Can be FORUM, ARTICLE_COMMENT or WALL on UCP
if post_type == "TEXT":
if post_type == "FORUM":
author = post["createdBy"]["name"]
author_url = "<{url}f/u/{creatorId}>".format(url=settings["fandom_discussions"]["wiki_url"], creatorId=post["creatorId"])
elif post["creatorIp"]:
author = post["creatorIp"][1:]
author_url = "<{url}wiki/Special:Contributions{creatorIp}>".format(url=settings["fandom_discussions"]["wiki_url"], creatorIp=post["creatorIp"])
else:
author = post["createdBy"]["name"]
author_url = "<{url}wiki/User:{author}>".format(url=settings["fandom_discussions"]["wiki_url"], author=author)
if post_type == "FORUM":
if not post["isReply"]:
if discussion_post_type == "FORUM":
message = _("[{author}](<{url}f/u/{creatorId}>) created [{title}](<{url}f/p/{threadId}>) in {forumName}").format(
author=post["createdBy"]["name"], url=settings["fandom_discussions"]["wiki_url"], creatorId=post["creatorId"], title=post["title"], threadId=post["threadId"], forumName=post["forumName"])
elif discussion_post_type == "ARTICLE_COMMENT":
discussion_logger.warning("Article comments are not yet implemented. For reasons see https://gitlab.com/piotrex43/RcGcDw/-/issues/126#note_366480037")
return
elif discussion_post_type == "WALL":
user_wall = _("unknown") # Fail safe
if post["forumName"].endswith(' Message Wall'):
user_wall = post["forumName"][:-13]
message = _("[{author}](<{url}f/u/{creatorId}>) created [{title}](<{wikiurl}wiki/Message_Wall:{user_wall}?threadId={threadid}>) on {user}'s Message Wall").format(
author=post["createdBy"]["name"], url=settings["fandom_discussions"]["wiki_url"], creatorId=post["creatorId"], title=post["_embedded"]["thread"][0]["title"], user=user_wall,
wikiurl=settings["fandom_discussions"]["wiki_url"], user_wall=quote_plus(user_wall.replace(" ", "_")), threadid=post["threadId"]
)
thread_funnel = post.get("funnel")
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}"
elif thread_funnel != "TEXT":
discussion_logger.warning("The type of {} is an unknown discussion post type. Please post an issue on the project page to have it added https://gitlab.com/piotrex43/RcGcDw/-/issues.".format(thread_funnel))
message = _(msg_text).format(author=author, author_url=author_url, title=post["title"], url=settings["fandom_discussions"]["wiki_url"], threadId=post["threadId"], forumName=post["forumName"])
else:
if discussion_post_type == "FORUM":
message = _("[{author}](<{url}f/u/{creatorId}>) created a [reply](<{url}f/p/{threadId}/r/{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}").format(
author=post["createdBy"]["name"], url=settings["fandom_discussions"]["wiki_url"], creatorId=post["creatorId"], threadId=post["threadId"], postId=post["id"], title=post["_embedded"]["thread"][0]["title"], forumName=post["forumName"]
)
elif discussion_post_type == "ARTICLE_COMMENT":
discussion_logger.warning("Article comments are not yet implemented. For reasons see https://gitlab.com/piotrex43/RcGcDw/-/issues/126#note_366480037")
return
elif discussion_post_type == "WALL":
user_wall = _("unknown") # Fail safe
if post["forumName"].endswith(' Message Wall'):
user_wall = post["forumName"][:-13]
message = _(
"[{author}](<{url}f/u/{creatorId}>) replied to [{title}](<{wikiurl}wiki/Message_Wall:{user_wall}?threadId={threadid}#{replyId}>) on {user}'s Message Wall").format(
author=post["createdBy"]["name"], url=settings["fandom_discussions"]["wiki_url"], creatorId=post["creatorId"], title=post["_embedded"]["thread"][0]["title"], user=user_wall,
wikiurl=settings["fandom_discussions"]["wiki_url"], user_wall=quote_plus(user_wall.replace(" ", "_")), threadid=post["threadId"], replyId=post["id"])
elif post_type == "POLL":
message = _(
"[{author}](<{url}f/u/{creatorId}>) created a poll [{title}](<{url}f/p/{threadId}>) in {forumName}").format(
author=post["createdBy"]["name"], url=settings["fandom_discussions"]["wiki_url"],
creatorId=post["creatorId"], title=post["title"], threadId=post["threadId"], forumName=post["forumName"])
message = _("[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}").format(author=author, author_url=author_url, url=settings["fandom_discussions"]["wiki_url"], threadId=post["threadId"], postId=post["id"], title=post["_embedded"]["thread"][0]["title"], forumName=post["forumName"])
elif post_type == "WALL":
user_wall = _("unknown") # Fail safe
if post["forumName"].endswith(' Message Wall'):
user_wall = post["forumName"][:-13]
if not post["isReply"]:
message = _("[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/Message_Wall:{user_wall}>)").format(author=author, author_url=author_url, title=post["title"], url=settings["fandom_discussions"]["wiki_url"], user=user_wall, user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"])
else:
message = _("[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/Message_Wall:{user_wall}?threadId={threadId}) on [{user}'s Message Wall](<{url}wiki/Message_Wall:{user_wall}>)").format(author=author, author_url=author_url, url=settings["fandom_discussions"]["wiki_url"], title=post["_embedded"]["thread"][0]["title"], user=user_wall, user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"], replyId=post["id"])
elif post_type == "ARTICLE_COMMENT":
discussion_logger.warning("Article comments are not yet implemented. For reasons see https://gitlab.com/piotrex43/RcGcDw/-/issues/126#note_366480037")
article_page = _("unknown") # No page known
if not post["isReply"]:
message = _("[{author}]({author_url}) created a [comment](<{url}wiki/{article}?commentId={commentId}>) on [{article}](<{url}wiki/{article}>)").format(author=author, author_url=author_url, url=settings["fandom_discussions"]["wiki_url"], article=article_page, commentId=post["threadId"])
else:
message = _("[{author}]({author_url}) created a [reply](<{url}wiki/{article}?threadId={threadId}) to a [comment](<{url}wiki/{article}?commentId={commentId}&replyId={replyId}>) on [{article}](<{url}wiki/{article}>)").format(author=author, author_url=author_url, url=settings["fandom_discussions"]["wiki_url"], article=article_page, commentId=post["threadId"], replyId=post["id"])
else:
discussion_logger.warning("The type of {} is an unknown discussion post type. Please post an issue on the project page to have it added https://gitlab.com/piotrex43/RcGcDw/-/issues.".format(post_type))
send_to_discord(DiscordMessage("compact", "discussion", settings["fandom_discussions"]["webhookURL"][int(post["id"]) % len(settings["fandom_discussions"]["webhookURL"])], content=message))
def embed_formatter(post_type, post):
"""Embed formatter for Fandom discussions."""
embed = DiscordMessage("embed", "discussion", settings["fandom_discussions"]["webhookURL"][int(post["id"]) % len(settings["fandom_discussions"]["webhookURL"])])
if post_type == "FORUM":
embed.set_author(post["createdBy"]["name"], "{url}f/u/{creatorId}".format(url=settings["fandom_discussions"]["wiki_url"], creatorId=post["creatorId"]), icon_url=post["createdBy"]["avatarUrl"])
elif post["creatorIp"]:
embed.set_author(post["creatorIp"][1:], "{url}wiki/Special:Contributions{creatorIp}".format(url=settings["fandom_discussions"]["wiki_url"], creatorIp=post["creatorIp"]))
else:
embed.set_author(post["createdBy"]["name"], "{url}wiki/User:{creator}".format(url=settings["fandom_discussions"]["wiki_url"], creator=post["createdBy"]["name"]), icon_url=post["createdBy"]["avatarUrl"])
if settings["fandom_discussions"]["appearance"]["embed"]["show_content"]:
if post.get("jsonModel") is not None:
npost = DiscussionsFromHellParser(post)
embed["description"] = npost.parse()
if npost.image_last:
embed["image"]["url"] = npost.image_last
embed["description"] = embed["description"].replace(npost.image_last, "")
else: # Fallback when model is not available
embed["description"] = post.get("rawContent", "")
embed["footer"]["text"] = post["forumName"]
embed["timestamp"] = datetime.datetime.fromtimestamp(post["creationDate"]["epochSecond"], tz=datetime.timezone.utc).isoformat()
if post_type == "FORUM":
if not post["isReply"]:
embed["url"] = "{url}f/p/{threadId}".format(url=settings["fandom_discussions"]["wiki_url"], threadId=post["threadId"])
embed["title"] = _("Created \"{title}\"").format(title=post["title"])
thread_funnel = post.get("funnel")
if thread_funnel == "POLL":
embed.event_type = "discussion/forum/poll"
poll = post["poll"]
embed["title"] = _("Created a poll \"{title}\"").format(title=poll["question"])
image_type = False
if poll["answers"][0]["image"] is not None:
image_type = True
for num, option in enumerate(poll["answers"]):
embed.add_field(option["text"] if image_type is True else _("Option {}").format(num+1),
option["text"] if image_type is False else _("__[View image]({image_url})__").format(image_url=option["image"]["url"]),
inline=True)
elif thread_funnel == "TEXT":
embed.event_type = "discussion/forum/post"
else:
discussion_logger.warning("The type of {} is an unknown discussion post type. Please post an issue on the project page to have it added https://gitlab.com/piotrex43/RcGcDw/-/issues.".format(thread_funnel))
else:
embed.event_type = "discussion/forum/reply"
embed["title"] = _("Replied to \"{title}\"").format(title=post["_embedded"]["thread"][0]["title"])
embed["url"] = "{url}f/p/{threadId}/r/{postId}".format(url=settings["fandom_discussions"]["wiki_url"], threadId=post["threadId"], postId=post["id"])
elif post_type == "WALL":
user_wall = _("unknown") # Fail safe
if post["forumName"].endswith(' Message Wall'):
user_wall = post["forumName"][:-13]
if not post["isReply"]:
embed.event_type = "discussion/wall/post"
embed["url"] = "{url}wiki/Message_Wall:{user_wall}?threadId={threadId}".format(url=settings["fandom_discussions"]["wiki_url"], user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"])
embed["title"] = _("Created \"{title}\" on {user}'s Message Wall").format(title=post["title"], user=user_wall)
else:
embed.event_type = "discussion/wall/reply"
embed["url"] = "{url}wiki/Message_Wall:{user_wall}?threadId={threadId}#{replyId}".format(url=settings["fandom_discussions"]["wiki_url"], user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"], replyId=post["id"])
embed["title"] = _("Replied to \"{title}\" on {user}'s Message Wall").format(title=post["_embedded"]["thread"][0]["title"], user=user_wall)
elif post_type == "ARTICLE_COMMENT":
discussion_logger.warning("Article comments are not yet implemented. For reasons see https://gitlab.com/piotrex43/RcGcDw/-/issues/126#note_366480037")
article_page = _("unknown") # No page known
if not post["isReply"]:
embed.event_type = "discussion/comment/post"
# embed["url"] = "{url}wiki/{article}?commentId={commentId}".format(url=settings["fandom_discussions"]["wiki_url"], article=quote_plus(article_page.replace(" ", "_")), commentId=post["threadId"])
embed["title"] = _("Commented on {article}").format(article=article_page)
else:
embed.event_type = "discussion/comment/reply"
# embed["url"] = "{url}wiki/{article}?commentId={commentId}&replyId={replyId}".format(url=settings["fandom_discussions"]["wiki_url"], article=quote_plus(article_page.replace(" ", "_")), commentId=post["threadId"], replyId=post["id"])
embed["title"] = _("Replied to a comment on {article}").format(article=article_page)
embed["footer"]["text"] = article_page
else:
discussion_logger.warning("The type of {} is an unknown discussion post type. Please post an issue on the project page to have it added https://gitlab.com/piotrex43/RcGcDw/-/issues.".format(post_type))
embed.finish_embed()
send_to_discord(embed)
class DiscussionsFromHellParser:
"""This class converts fairly convoluted Fandom jsonModal of a discussion post into Markdown formatted usable thing. Takes string, returns string.
Kudos to MarkusRost for allowing me to implement this formatter based on his code in Wiki-Bot."""

View file

@ -22,11 +22,11 @@ from src.configloader import settings
from src.discussion_formatters import embed_formatter, compact_formatter
from src.misc import datafile, messagequeue
from src.session import session
from src.i18n import disc
# Initialize translation
t = gettext.translation('discussions', localedir='locale', languages=[settings["lang"]])
_ = t.gettext
_ = disc.gettext
# Create a custom logger
@ -67,13 +67,8 @@ def fetch_discussions():
def parse_discussion_post(post):
"""Initial post recognition & handling"""
post_type = post.get("funnel", "TEXT")
if post_type == "TEXT":
formatter(post, post_type)
elif post_type == "POLL":
formatter(post, post_type)
else:
discussion_logger.warning("The type of {} is an unknown discussion post type. Please post an issue on the project page to have it added https://gitlab.com/piotrex43/RcGcDw/-/issues.")
post_type = post["_embedded"]["thread"][0]["containerType"]
formatter(post_type, post)
def safe_request(url):

View file

@ -5,8 +5,12 @@ logger = logging.getLogger("rcgcdw.i18n")
# Setup translation
try:
lang = gettext.translation('rcgcdw', localedir='locale', languages=[settings["lang"]])
disc = gettext.translation('discussions', localedir='locale', languages=[settings["lang"]])
if settings["lang"] != "en":
lang = gettext.translation('rcgcdw', localedir='locale', languages=[settings["lang"]])
disc = gettext.translation('discussions', localedir='locale', languages=[settings["lang"]])
misc = gettext.translation('misc', localedir='locale', languages=[settings["lang"]])
else:
lang, disc, misc = gettext.NullTranslations(), gettext.NullTranslations(), gettext.NullTranslations()
except FileNotFoundError:
logger.critical("No language files have been found. Make sure locale folder is located in the directory.")
sys.exit(1)

View file

@ -22,12 +22,9 @@ from urllib.parse import urlparse, urlunparse
import requests
from collections import defaultdict
from src.configloader import settings
import gettext
from src.i18n import misc
# Initialize translation
t = gettext.translation('misc', localedir='locale', languages=[settings["lang"]])
_ = t.gettext
_ = misc.gettext
# Create a custom logger