mirror of
https://gitlab.com/chicken-riders/RcGcDw.git
synced 2025-02-23 00:24:09 +00:00
Merge branch 'testing' into 'master'
1.14 Closes #202, #215, #216, #218, #219, and #222 See merge request piotrex43/RcGcDw!93
This commit is contained in:
commit
62fe1008da
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -9,6 +9,7 @@ lastchange.txt
|
||||||
/venv/
|
/venv/
|
||||||
/lokalize-scripts/
|
/lokalize-scripts/
|
||||||
/venvv/
|
/venvv/
|
||||||
|
/.idea/
|
||||||
__pycache__
|
__pycache__
|
||||||
*.bat
|
*.bat
|
||||||
*.code-workspace
|
*.code-workspace
|
||||||
|
|
|
@ -1,17 +1,47 @@
|
||||||
image: python:3.6-alpine
|
image: python:3.7-alpine
|
||||||
|
|
||||||
include:
|
include:
|
||||||
- template: Code-Quality.gitlab-ci.yml
|
- template: Code-Quality.gitlab-ci.yml
|
||||||
|
|
||||||
|
variables:
|
||||||
|
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- test
|
||||||
|
- pytest
|
||||||
|
|
||||||
|
cache:
|
||||||
|
paths:
|
||||||
|
- settings.json
|
||||||
|
- .cache/pip
|
||||||
|
- venv/
|
||||||
|
|
||||||
test:
|
test:
|
||||||
type: test
|
stage: test
|
||||||
script:
|
script:
|
||||||
- apk add libxml2-dev libxslt-dev libxml2 gcc musl-dev linux-headers
|
- apk add libxml2-dev libxslt-dev libxml2 gcc musl-dev linux-headers
|
||||||
- pip3.6 install -r requirements.txt
|
- pip3.7 install virtualenv
|
||||||
|
- virtualenv venv
|
||||||
|
- source venv/bin/activate
|
||||||
|
- pip3.7 install -r requirements.txt
|
||||||
- sed -i -e "s/111111111111111111/$DISCORD1/g" settings.json.example
|
- sed -i -e "s/111111111111111111/$DISCORD1/g" settings.json.example
|
||||||
- sed -i -e "s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/$DISCORD2/g" settings.json.example
|
- sed -i -e "s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/$DISCORD2/g" settings.json.example
|
||||||
- mv settings.json.example settings.json
|
- mv settings.json.example settings.json
|
||||||
- python3.6 start.py --test
|
- python3.7 start.py --test
|
||||||
only:
|
only:
|
||||||
- testing
|
- testing
|
||||||
- merge_requests
|
|
||||||
|
pytest:
|
||||||
|
stage: pytest
|
||||||
|
needs: ['test']
|
||||||
|
script:
|
||||||
|
- source venv/bin/activate
|
||||||
|
- pip3.7 install -U pytest
|
||||||
|
- pytest --junitxml=report.xml
|
||||||
|
artifacts:
|
||||||
|
when: always
|
||||||
|
reports:
|
||||||
|
junit: report.xml
|
||||||
|
only:
|
||||||
|
- testing
|
||||||
|
|
||||||
|
|
|
@ -9,4 +9,4 @@ If you contribute, I ask of you to create merge requests based on testing branch
|
||||||
`testing `- testing branch is what all of my hosted scripts run. It is used to test the code before merging it with master branch.
|
`testing `- testing branch is what all of my hosted scripts run. It is used to test the code before merging it with master branch.
|
||||||
|
|
||||||
## Translations ##
|
## Translations ##
|
||||||
If you speak in other languages than English, you are more than welcome to. There are several ways you can contribute your translation, first the easiest one is to signup at [our weblate instance](https://weblate.frisk.space) and [contact me directly with request to review your account](https://minecraft.gamepedia.com/User:Frisk#Contact). You can also contact me so I send you the translation files you can fill in. If you know how .po files work, you are also free to send Merge Requests with translated files.
|
If you speak in other languages than English, you are more than welcome to. There are several ways you can contribute your translation, first the easiest one is to signup at [our weblate instance](https://translate.wikibot.de) and [contact me directly with request to review your account](https://minecraft.gamepedia.com/User:Frisk#Contact). You can also contact me so I send you the translation files you can fill in. If you know how .po files work, you are also free to send Merge Requests with translated files.
|
||||||
|
|
16
README.md
16
README.md
|
@ -11,7 +11,7 @@
|
||||||
* Very customizable
|
* Very customizable
|
||||||
|
|
||||||
### Dependencies ###
|
### Dependencies ###
|
||||||
* **Python 3.6+**
|
* **Python 3.7+**
|
||||||
* requests 2.18.4+
|
* requests 2.18.4+
|
||||||
* beautifulsoup 4.6.0+
|
* beautifulsoup 4.6.0+
|
||||||
* schedule 0.5.0+
|
* schedule 0.5.0+
|
||||||
|
@ -31,15 +31,23 @@
|
||||||
* MarkusRost – German translation
|
* MarkusRost – German translation
|
||||||
* JSBM – French translation
|
* JSBM – French translation
|
||||||
* [Eduaddad](https://eduardoaddad.com.br) – Brazilian Portuguese translation
|
* [Eduaddad](https://eduardoaddad.com.br) – Brazilian Portuguese translation
|
||||||
* BabylonAS and Russian Minecraft Wiki community – Russian translation
|
* BabylonAS, Philo and Russian Minecraft Wiki community – Russian translation
|
||||||
* Mak_and_Iv – Ukrainian translation
|
* Mak_and_Iv – Ukrainian translation
|
||||||
|
* Tamara Carvallo – Spanish translation
|
||||||
|
* Lakejason0 - Simplified Chinese translation
|
||||||
|
|
||||||
Thank you!
|
Thank you!
|
||||||
|
|
||||||
[](https://weblate.frisk.space/engage/rcgcdw/?utm_source=widget)
|
[](https://translate.wikibot.de/engage/rcgcdw/?utm_source=widget)
|
||||||
|
|
||||||
### Other extensions/compatible programs ###
|
### Extensions/compatible programs ###
|
||||||
* [Wiki Utilities](https://github.com/Sidemen19/Wiki-Utilities) – an integration that allows wiki administrators to revert edits, block editors, and delete pages on the wiki by reacting to messages created by RcGcDw/RcGcDb. Author: [Sidemen19](https://github.com/Sidemen19)
|
* [Wiki Utilities](https://github.com/Sidemen19/Wiki-Utilities) – an integration that allows wiki administrators to revert edits, block editors, and delete pages on the wiki by reacting to messages created by RcGcDw/RcGcDb. Author: [Sidemen19](https://github.com/Sidemen19)
|
||||||
|
|
||||||
|
### Alternatives ###
|
||||||
|
There are various alternatives to RcGcDw you may want to consider if for some reason RcGcDw doesn't satisfy your needs:
|
||||||
|
* [Wiki-Bot](https://wiki.wikibot.de/wiki/Wiki-Bot_Wiki) - while it's not exactly an alternative since Wiki-Bot is running a modified version of RcGcDw in the backend, you can use its rcscript feature to add a webhook for your wiki and have it work similarly to how RcGcDw does without hosting anything on your own,
|
||||||
|
* [Extension:Discord](https://www.mediawiki.org/wiki/Extension:Discord) - MediaWiki extension to do the same thing,
|
||||||
|
* [Extension:DiscordNotifications](https://www.mediawiki.org/wiki/Extension:DiscordNotifications) - another MediaWiki extension with the same goal.
|
||||||
|
|
||||||
### Wiki ###
|
### Wiki ###
|
||||||
For more information, check the [wiki](https://gitlab.com/piotrex43/RcGcDw/wikis/Home)!
|
For more information, check the [wiki](https://gitlab.com/piotrex43/RcGcDw/wikis/Home)!
|
151
docs/API spec.md
Normal file
151
docs/API spec.md
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
## About
|
||||||
|
This is a specification for RcGcDw API extending formatters and allowing to add additional pre and post processing hooks for message contents.
|
||||||
|
This document assumes you have at least a basic understanding of Python, concept of classes, objects and decorators.
|
||||||
|
|
||||||
|
### Pre-processing hook
|
||||||
|
A class allowing to change the raw event values obtained for a change via query.recentchanges endpoint on the wiki and/or execute additional actions each time given event gets read. This type of hook executes before a formatter.
|
||||||
|
|
||||||
|
### Formatters
|
||||||
|
Formatters allow specifying how does a Discord message look like depending on message mode (embed, compact) and type of the event that had happened on the wiki (new, edit etc).
|
||||||
|
If formatter for given event is not registered, the script will look for formatter for event "generic" and if this is also not found it will throw a warning.
|
||||||
|
|
||||||
|
### Post-processing hook
|
||||||
|
A class allowing to change the message content and/or execute additional actions after message has been processed by the formatter. This type of hook executes after a formatter.
|
||||||
|
|
||||||
|
## File structure
|
||||||
|
Directory with extensions is specified by setting `extensions_dir` in settings.json.
|
||||||
|
The directory with hooks and formatters needs to be below root directory (directory in which start.py is located) and every directory inside it needs to be a Python package importing its child packages and modules.
|
||||||
|
|
||||||
|
.
|
||||||
|
├── extensions
|
||||||
|
│ ├── base
|
||||||
|
│ │ ├── abusefilter.py
|
||||||
|
│ │ ├── my_formatters.py
|
||||||
|
│ │ ├── \_\_init\_\_.py
|
||||||
|
│ ├── hooks
|
||||||
|
│ │ ├── my_hooks.py
|
||||||
|
│ │ ├── \_\_init\_\_.py
|
||||||
|
│ ├── \_\_init\_\_.py
|
||||||
|
├── start.py
|
||||||
|
|
||||||
|
## API
|
||||||
|
api object exposes various data which allows to extend the usefulness of what can be then sent to Discord. It also contains
|
||||||
|
common functions that can be used to interact with the script and the wiki.
|
||||||
|
|
||||||
|
### Formatter
|
||||||
|
**Path**: `src.api.formatter`
|
||||||
|
_Formatter module implements two decorators: `embed` and `compact`. Both of them can take the following keyword arguments:_
|
||||||
|
- `event` - string - event type for formatter, in case the event is a [log event](https://www.mediawiki.org/wiki/Manual:Log_actions) it's constructed by taking log_type and combining it with log_action with / character in between (for example `upload/overwrite`). If the event however is not a log event but action like edit, the type will consist only of `type` value.
|
||||||
|
- `aliases` - list[str] - list of strings containing all the events given event should alias for, it helps in case you want the same function be used for multiple event types.
|
||||||
|
|
||||||
|
Both `event` and `aliases` arguments are optional in formatters. However, every formatter needs to have some kind of event specified. If it's not specified in the decorator, a fallback method will be used which constructs event type in format `{func.__module__}/{func.__name__.split("_", 1)[1]}`, in other terms taking the name of the file in which formatter is defined as first part and entire function name after first _ character as second part. Note that this fallback works only for log events.
|
||||||
|
There are also additional, made up event types that are special cases, they are listed below:
|
||||||
|
- `abuselog` – reserved for AbuseFilter filter logs
|
||||||
|
- `discussion/{post_type.lower()}` – reserved for Fandom's Discussion/Feeds integration
|
||||||
|
- `suppressed` – reserved for logs that were [suppressed](https://www.mediawiki.org/wiki/Special:MyLanguage/Help:RevisionDelete) and cannot be read by the script
|
||||||
|
|
||||||
|
Formatter decorator registers a Python function and calls it each time a specific event is being processed from the wiki. Function is then called with Context and change arguments where context is [Context object](#Context) and change is a dict object containing the body of a change.
|
||||||
|
Every formatter **must** return a DiscordMessage object.
|
||||||
|
|
||||||
|
#### Usage
|
||||||
|
|
||||||
|
```python
|
||||||
|
from src.discord.message import DiscordMessage
|
||||||
|
from src.api import formatter
|
||||||
|
from src.i18n import formatters_i18n
|
||||||
|
from src.api.context import Context
|
||||||
|
from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, \
|
||||||
|
clean_link
|
||||||
|
|
||||||
|
# Setup translation function which is used to translate english strings to other languages
|
||||||
|
_ = formatters_i18n.gettext
|
||||||
|
|
||||||
|
# Call a decorator and register embed_sprite_sprite function for all sprite/sprite events
|
||||||
|
@formatter.embed(event="sprite/sprite")
|
||||||
|
def embed_sprite_sprite(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
# Create DiscordMessage object which constructs Discord embed content
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
# embed_helper function can be used to automatically populate DiscordMessage object with some common useful information such as setting author name/url, adding fields for tags/categories, or setting default description
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Edited the sprite for {article}").format(article=sanitize_to_markdown(change["title"]))
|
||||||
|
# return populated DiscordMessage object
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="sprite/sprite")
|
||||||
|
def compact_sprite_sprite(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
content = _("[{author}]({author_url}) edited the sprite for [{article}]({article_url})").format(author=author,
|
||||||
|
author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change[
|
||||||
|
"title"]),
|
||||||
|
article_url=link)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Client
|
||||||
|
**Path**: `src.api.client.Client`
|
||||||
|
_Client is a class containing most of usable methods and communication layer with the core functionality._
|
||||||
|
Client consists of the following fields:
|
||||||
|
- `WIKI_API_PATH` - string - URL path leading to API (`WIKI_DOMAIN/api.php`)
|
||||||
|
- `WIKI_ARTICLE_PATH` - string - URL path leading to article path (`WIKI_DOMAIN/articlepath`)
|
||||||
|
- `WIKI_SCRIPT_PATH` - string - URL path leading to script path of the wiki (`WIKI_DOMAIN/`)
|
||||||
|
- `WIKI_JUST_DOMAIN` - string - URL path leading just to the wiki domain (`WIKI_DOMAIN`)
|
||||||
|
- `content_parser` - class - a reference to HTMLParser implementation that parses edit diffs
|
||||||
|
- `tags` - dict - a container storing all [tags](https://www.mediawiki.org/wiki/Manual:Tags) the wiki has configured
|
||||||
|
- `namespaces` - dict - a dictionary of [namespaces](https://www.mediawiki.org/wiki/Manual:Namespace) on the wiki
|
||||||
|
- `LinkParser` - class - a class of LinkParser which is usually used to parse parsed_comment from events including turning URLs into Markdown links
|
||||||
|
Client consists of the following methods:
|
||||||
|
- `refresh_internal_data()` - requests namespaces, tags and MediaWiki messages to be retrieved and updated in internal storage
|
||||||
|
- `parse_links(text: str)` - parses links using LinkParser object
|
||||||
|
- `pull_curseprofile_comment(comment_id: Union[str, int])` - allows retrieving CurseProfile comment from wikis originated from Gamepedia
|
||||||
|
- `make_api_request(params: Union[str, OrderedDict], *json_path: str, timeout: int = 10, allow_redirects: bool = False)` - allows to make a request to the wiki with parameters specified in params argument, json_path additionally allows to provide a list of strings that will be iterated over and json path of the result of this iteration returned. Timeout in float (seconds) can be added to limit the time for response, allow_redirects can be set to disallow or allow redirects
|
||||||
|
- `get_formatters()` - returns a dictionary of all formatters in format of `{'eventtype': func}`
|
||||||
|
- `get_ipmapper()` - returns ip mapper which tracks edit counts of IP editors
|
||||||
|
|
||||||
|
### Context
|
||||||
|
**Path**: `src.api.context.Context`
|
||||||
|
_Context is a class which objects of are only used as first argument of formatter definitions._
|
||||||
|
Context can consist of the following fields:
|
||||||
|
- `client` - [Client](#Client) object
|
||||||
|
- `webhook_url` - string - webhook url for given formatter
|
||||||
|
- `message_type` - string - can be either `embed` or `compact`
|
||||||
|
- `categories` - {"new": set(), "removed": set()} - each set containing strings of added or removed categories for given page
|
||||||
|
- `parsedcomment` - string - contains escaped and Markdown parsed summary (parsed_comment) of a log/edit action
|
||||||
|
- `event` - string - action called, should be the same as formatter event action
|
||||||
|
- `comment_page` - dict - containing `fullUrl` and `article` with strings both to full article url and its name
|
||||||
|
|
||||||
|
### Util
|
||||||
|
**Path**: `src.api.util`
|
||||||
|
_Util is a module with a few common functions that can be useful for generating Discord messages, parsing changes in formatting and more._
|
||||||
|
Util provides the following functionalities:
|
||||||
|
- `clean_link(link: str)` – returns a string wrapped with <> brackets, so the link given as a string doesn't embed in Discord
|
||||||
|
- `sanitize_to_markdown(text: str)` – returns a string with Discord Markdown characters escaped
|
||||||
|
- `sanitize_to_url(text: str)` – returns a string that should be safe to be part of URL with special characters either escaped or encoded
|
||||||
|
- `parse_mediawiki_changes(ctx: Context, content: str, embed: DiscordMessage)` – populates embed with two new fields "Added" and "Removed" containing diff of changes within content argument retrieved using action=compare request between two revisions
|
||||||
|
- `create_article_path(article: str)` – returns a string with URL leading to an article page (basically taking into account wiki's article path)
|
||||||
|
- `compact_author(ctx: Context, content: dict)` – returns two strings - first containing the name of the author with hide_ips setting taken into account and second a URL leading to author's contribution page, this makes it easier for compact formatters to include author detail in messages
|
||||||
|
- `embed_helper(ctx: Context, message: DiscordMessage, change: dict, set_user=True, set_edit_meta=True, set_desc=True)` – a function populating the message (Discord embed message) with most essential fields accordingly. Populating includes the following fields: author, author_url, category and tags fields, description
|
||||||
|
|
||||||
|
### DiscordMessage
|
||||||
|
**Path**: `src.discord.message.DiscordMessage`
|
||||||
|
_DiscordMessage is a class taking care of creation of Discord messages that can be sent via send_to_discord function later on._
|
||||||
|
DiscordMessage object when created with message_type == embed will take all assignments and reads using object[key] as ones reading/setting the actual embed object.
|
||||||
|
DiscordMessage consists of the following:
|
||||||
|
- `__init__(message_type: str, event_type: str, webhook_url: str, content=None)` – constructor which takes message type (can be either `embed` or `compact`), event_type (for example `protect/protect`), webhook_url (full URL of webhook message is intended to be sent to), content optional parameter used in compact messages as main body
|
||||||
|
- `set_author(name, url, icon_url="")` – a method that can be used to set username, URL to their profile and optionally an icon for the embed
|
||||||
|
- `add_field(name, value, inline=False)` – a method to add a field with given name and value, optional inline argument can be set if field should be inline
|
||||||
|
- `set_avatar(url)` – sets avatar for WEBHOOK MESSAGE (not to be confused with actual embed)
|
||||||
|
- `set_name(name)` – sets name for WEBHOOK MESSAGE
|
||||||
|
- `set_link(link)` – equivalent to object["link"] = link for embed messages
|
||||||
|
|
||||||
|
### Language support
|
||||||
|
RcGcDw implements i18n with gettext and already exposes Translations instance with its `src.i18` module. formatters_i18n variable is used for instance of all formatters inside base directory.
|
||||||
|
|
||||||
|
### Pre/post hooks
|
||||||
|
**Path**: `src.api.hook`
|
||||||
|
There are two decorator functions available in the module: `pre_hook` and `post_hook`. They don't take arguments and simply register the function as a hook.
|
||||||
|
Pre-hook functions take the following arguments: `context` ([Context object](#Context)) and `change` (dict object with change).
|
||||||
|
Post-hook functions take the following arguments: `message` ([Discord message object](#DiscordMessage)), `metadata` ([Discord message metadata](#DiscordMessageMetadata)), `context` ([Context object](#Context)) and `change` (dictionary of main change body)
|
17
extensions/__init__.py
Normal file
17
extensions/__init__.py
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import extensions.base
|
||||||
|
import extensions.hooks
|
26
extensions/base/__init__.py
Normal file
26
extensions/base/__init__.py
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import extensions.base.mediawiki
|
||||||
|
import extensions.base.abusefilter
|
||||||
|
import extensions.base.managewiki
|
||||||
|
import extensions.base.cargo
|
||||||
|
import extensions.base.datadump
|
||||||
|
import extensions.base.sprite
|
||||||
|
import extensions.base.translate
|
||||||
|
import extensions.base.discussions
|
||||||
|
import extensions.base.curseprofile
|
||||||
|
import extensions.base.interwiki
|
||||||
|
import extensions.base.renameuser
|
125
extensions/base/abusefilter.py
Normal file
125
extensions/base/abusefilter.py
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import ipaddress
|
||||||
|
import logging
|
||||||
|
from src.discord.message import DiscordMessage
|
||||||
|
from src.api import formatter
|
||||||
|
from src.i18n import formatters_i18n
|
||||||
|
from src.api.context import Context
|
||||||
|
from src.api.util import embed_helper, sanitize_to_url, parse_mediawiki_changes, clean_link, compact_author, \
|
||||||
|
create_article_path, sanitize_to_markdown
|
||||||
|
from src.configloader import settings
|
||||||
|
|
||||||
|
_ = formatters_i18n.gettext
|
||||||
|
ngettext = formatters_i18n.ngettext
|
||||||
|
|
||||||
|
abusefilter_results = {"": _("None"), "warn": _("Warning issued"), "block": _("**Blocked user**"), "tag": _("Tagged the edit"), "disallow": _("Disallowed the action"), "rangeblock": _("**IP range blocked**"), "throttle": _("Throttled actions"), "blockautopromote": _("Removed autoconfirmed group"), "degroup": _("**Removed from privileged groups**")}
|
||||||
|
abusefilter_actions = {"edit": _("Edit"), "upload": _("Upload"), "move": _("Move"), "stashupload": _("Stash upload"), "delete": _("Deletion"), "createaccount": _("Account creation"), "autocreateaccount": _("Auto account creation")}
|
||||||
|
|
||||||
|
logger = logging.getLogger("extensions.base")
|
||||||
|
|
||||||
|
# AbuseFilter - https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:AbuseFilter
|
||||||
|
# Processing Abuselog LOG events, separate from RC logs
|
||||||
|
|
||||||
|
def abuse_filter_format_user(change):
|
||||||
|
author = change["user"]
|
||||||
|
if settings.get("hide_ips", False):
|
||||||
|
try:
|
||||||
|
ipaddress.ip_address(change["user"])
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
author = _("Unregistered user")
|
||||||
|
return author
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="abuselog")
|
||||||
|
def embed_abuselog(ctx: Context, change: dict):
|
||||||
|
action = "abuselog/{}".format(change["result"])
|
||||||
|
embed = DiscordMessage(ctx.message_type, action, ctx.webhook_url)
|
||||||
|
author = abuse_filter_format_user(change)
|
||||||
|
embed["title"] = _("{user} triggered \"{abuse_filter}\"").format(user=author, abuse_filter=sanitize_to_markdown(change["filter"]))
|
||||||
|
embed.add_field(_("Performed"), abusefilter_actions.get(change["action"], _("Unknown")))
|
||||||
|
embed.add_field(_("Action taken"), abusefilter_results.get(change["result"], _("Unknown")))
|
||||||
|
embed.add_field(_("Title"), sanitize_to_markdown(change.get("title", _("Unknown"))))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="abuselog")
|
||||||
|
def compact_abuselog(ctx: Context, change: dict):
|
||||||
|
action = "abuselog/{}".format(change["result"])
|
||||||
|
author_url = clean_link(create_article_path("User:{user}".format(user=change["user"])))
|
||||||
|
author = abuse_filter_format_user(change)
|
||||||
|
message = _("[{author}]({author_url}) triggered *{abuse_filter}*, performing the action \"{action}\" on *[{target}]({target_url})* - action taken: {result}.").format(
|
||||||
|
author=author, author_url=author_url, abuse_filter=sanitize_to_markdown(change["filter"]),
|
||||||
|
action=abusefilter_actions.get(change["action"], _("Unknown")), target=change.get("title", _("Unknown")),
|
||||||
|
target_url=clean_link(create_article_path(sanitize_to_url(change.get("title", _("Unknown"))))),
|
||||||
|
result=abusefilter_results.get(change["result"], _("Unknown")))
|
||||||
|
return DiscordMessage(ctx.message_type, action, ctx.webhook_url, content=message)
|
||||||
|
|
||||||
|
# abusefilter/modify - AbuseFilter filter modification
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="abusefilter/modify")
|
||||||
|
def embed_abuselog_modify(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(
|
||||||
|
"Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'],
|
||||||
|
historyid=change["logparams"]["historyId"]))
|
||||||
|
embed["title"] = _("Edited abuse filter number {number}").format(number=change["logparams"]['newId'])
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="abusefilter/modify")
|
||||||
|
def compact_abuselog_modify(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
link = clean_link(create_article_path(
|
||||||
|
"Special:AbuseFilter/history/{number}/diff/prev/{historyid}".format(number=change["logparams"]['newId'],
|
||||||
|
historyid=change["logparams"][
|
||||||
|
"historyId"])))
|
||||||
|
|
||||||
|
content = _("[{author}]({author_url}) edited abuse filter [number {number}]({filter_url})").format(author=author,
|
||||||
|
author_url=author_url,
|
||||||
|
number=change[
|
||||||
|
"logparams"][
|
||||||
|
'newId'],
|
||||||
|
filter_url=link)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# abusefilter/create - AbuseFilter filter creation
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="abusefilter/create")
|
||||||
|
def embed_abuselog_create(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path("Special:AbuseFilter/{number}".format(number=change["logparams"]['newId']))
|
||||||
|
embed["title"] = _("Created abuse filter number {number}").format(number=change["logparams"]['newId'])
|
||||||
|
return embed
|
||||||
|
|
||||||
|
@formatter.compact(event="abusefilter/create")
|
||||||
|
def compact_abuselog_create(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
link = clean_link(
|
||||||
|
create_article_path("Special:AbuseFilter/{number}".format(number=change["logparams"]['newId'])))
|
||||||
|
content = _("[{author}]({author_url}) created abuse filter [number {number}]({filter_url})").format(author=author,
|
||||||
|
author_url=author_url,
|
||||||
|
number=change[
|
||||||
|
"logparams"][
|
||||||
|
'newId'],
|
||||||
|
filter_url=link)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
115
extensions/base/cargo.py
Normal file
115
extensions/base/cargo.py
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import re
|
||||||
|
from src.discord.message import DiscordMessage
|
||||||
|
from src.api import formatter
|
||||||
|
from src.i18n import formatters_i18n
|
||||||
|
from src.api.context import Context
|
||||||
|
from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown
|
||||||
|
|
||||||
|
_ = formatters_i18n.gettext
|
||||||
|
ngettext = formatters_i18n.ngettext
|
||||||
|
|
||||||
|
|
||||||
|
# Cargo - https://www.mediawiki.org/wiki/Extension:Cargo
|
||||||
|
# cargo/createtable - Creation of Cargo table
|
||||||
|
|
||||||
|
@formatter.embed(event="cargo/createtable")
|
||||||
|
def embed_cargo_createtable(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"]))
|
||||||
|
embed["url"] = table.group(2)
|
||||||
|
embed["title"] = _("Created the Cargo table \"{table}\"").format(table=table.group(1))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="cargo/createtable")
|
||||||
|
def compact_cargo_createtable(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"]))
|
||||||
|
content = _("[{author}]({author_url}) created the Cargo table \"{table}\"").format(author=author,
|
||||||
|
author_url=author_url,
|
||||||
|
table=table)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
|
||||||
|
# cargo/recreatetable - Recreating a Cargo table
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="cargo/recreatetable")
|
||||||
|
def embed_cargo_recreatetable(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"]))
|
||||||
|
embed["url"] = table.group(2)
|
||||||
|
embed["title"] = _("Recreated the Cargo table \"{table}\"").format(table=table.group(1))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="cargo/recreatetable")
|
||||||
|
def compact_cargo_recreatetable(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"]))
|
||||||
|
content = _("[{author}]({author_url}) recreated the Cargo table \"{table}\"").format(author=author,
|
||||||
|
author_url=author_url,
|
||||||
|
table=table)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
|
||||||
|
# cargo/replacetable - Replacing a Cargo table
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="cargo/replacetable")
|
||||||
|
def embed_cargo_replacetable(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"]))
|
||||||
|
embed["url"] = table.group(2)
|
||||||
|
embed["title"] = _("Replaced the Cargo table \"{table}\"").format(table=table.group(1))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="cargo/replacetable")
|
||||||
|
def compact_cargo_replacetable(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
table = re.search(r"\[(.*?)]\(<(.*?)>\)", ctx.client.parse_links(change["logparams"]["0"]))
|
||||||
|
content = _("[{author}]({author_url}) replaced the Cargo table \"{table}\"").format(author=author,
|
||||||
|
author_url=author_url,
|
||||||
|
table=table)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
|
||||||
|
# cargo/deletetable - Deleting a table in Cargo
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="cargo/deletetable")
|
||||||
|
def embed_cargo_deletetable(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path("Special:CargoTables")
|
||||||
|
embed["title"] = _("Deleted the Cargo table \"{table}\"").format(table=sanitize_to_markdown(change["logparams"]["0"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="cargo/deletetable")
|
||||||
|
def compact_cargo_deletetable(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
content = _("[{author}]({author_url}) deleted the Cargo table \"{table}\"").format(author=author,
|
||||||
|
author_url=author_url,
|
||||||
|
table=sanitize_to_markdown(change["logparams"]["0"]))
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
234
extensions/base/curseprofile.py
Normal file
234
extensions/base/curseprofile.py
Normal file
|
@ -0,0 +1,234 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from src.configloader import settings
|
||||||
|
from src.discord.message import DiscordMessage
|
||||||
|
from src.api import formatter
|
||||||
|
from src.i18n import formatters_i18n
|
||||||
|
from src.api.context import Context
|
||||||
|
from src.api.util import embed_helper, clean_link, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url
|
||||||
|
from src.misc import profile_field_name
|
||||||
|
|
||||||
|
_ = formatters_i18n.gettext
|
||||||
|
ngettext = formatters_i18n.ngettext
|
||||||
|
|
||||||
|
|
||||||
|
# CurseProfile - https://help.fandom.com/wiki/Extension:CurseProfile
|
||||||
|
# curseprofile/profile-edited - Editing user profile
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="curseprofile/profile-edited")
|
||||||
|
def embed_curseprofile_profile_edited(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
target_user = change["title"].split(':', 1)[1]
|
||||||
|
if target_user != change["user"]:
|
||||||
|
embed["title"] = _("Edited {target}'s profile").format(target=sanitize_to_markdown(target_user))
|
||||||
|
else:
|
||||||
|
embed["title"] = _("Edited their own profile")
|
||||||
|
if ctx.parsedcomment is None: # If the field is empty
|
||||||
|
embed["description"] = _("Cleared the {field} field").format(field=profile_field_name(change["logparams"]['4:section'], True))
|
||||||
|
else:
|
||||||
|
embed["description"] = _("{field} field changed to: {desc}").format(field=profile_field_name(change["logparams"]['4:section'], True), desc=ctx.parsedcomment)
|
||||||
|
embed["url"] = create_article_path("UserProfile:" + sanitize_to_url(target_user))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="curseprofile/profile-edited")
|
||||||
|
def compact_curseprofile_profile_edited(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
target_user = change["title"].split(':', 1)[1]
|
||||||
|
link = clean_link(create_article_path("UserProfile:" + sanitize_to_url(target_user)))
|
||||||
|
if target_user != author:
|
||||||
|
if ctx.parsedcomment is None: # If the field is empty
|
||||||
|
edit_clear_message = _("[{author}]({author_url}) cleared the {field} on [{target}]({target_url})'s profile.")
|
||||||
|
else:
|
||||||
|
edit_clear_message = _("[{author}]({author_url}) edited the {field} on [{target}]({target_url})'s profile. *({desc})*")
|
||||||
|
content = edit_clear_message.format(author=author, author_url=author_url, target=sanitize_to_markdown(target_user), target_url=link,
|
||||||
|
field=profile_field_name(change["logparams"]['4:section'], False), desc=ctx.parsedcomment)
|
||||||
|
else:
|
||||||
|
if ctx.parsedcomment is None: # If the field is empty
|
||||||
|
edit_clear_message = _("[{author}]({author_url}) cleared the {field} on [their own]({target_url}) profile.")
|
||||||
|
else:
|
||||||
|
edit_clear_message = _("[{author}]({author_url}) edited the {field} on [their own]({target_url}) profile. *({desc})*")
|
||||||
|
content = edit_clear_message.format(author=author, author_url=author_url, target_url=link,
|
||||||
|
field=profile_field_name(change["logparams"]['4:section'], False), desc=ctx.parsedcomment)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
|
||||||
|
# curseprofile/comment-created - Creating comment on user profile
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="curseprofile/comment-created")
|
||||||
|
def embed_curseprofile_comment_created(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
target_user = change["title"].split(':', 1)[1]
|
||||||
|
if target_user != change["user"]:
|
||||||
|
embed["title"] = _("Left a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user))
|
||||||
|
else:
|
||||||
|
embed["title"] = _("Left a comment on their own profile")
|
||||||
|
if settings["appearance"]["embed"]["show_edit_changes"]:
|
||||||
|
embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"])
|
||||||
|
embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="curseprofile/comment-created")
|
||||||
|
def compact_curseprofile_comment_created(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
target_user = change["title"].split(':', 1)[1]
|
||||||
|
link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])))
|
||||||
|
if target_user != author:
|
||||||
|
content = _("[{author}]({author_url}) left a [comment]({comment}) on {target}'s profile.").format(
|
||||||
|
author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user))
|
||||||
|
else:
|
||||||
|
content = _("[{author}]({author_url}) left a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
|
||||||
|
# curseprofile/comment-edited - Editing comment on user profile
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="curseprofile/comment-edited")
|
||||||
|
def embed_curseprofile_comment_edited(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
target_user = change["title"].split(':', 1)[1]
|
||||||
|
if target_user != change["user"]:
|
||||||
|
embed["title"] = _("Edited a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user))
|
||||||
|
else:
|
||||||
|
embed["title"] = _("Edited a comment on their own profile")
|
||||||
|
if settings["appearance"]["embed"]["show_edit_changes"]:
|
||||||
|
embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"])
|
||||||
|
embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="curseprofile/comment-edited")
|
||||||
|
def compact_curseprofile_comment_edited(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
target_user = change["title"].split(':', 1)[1]
|
||||||
|
link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])))
|
||||||
|
if target_user != author:
|
||||||
|
content = _("[{author}]({author_url}) edited a [comment]({comment}) on {target}'s profile.").format(
|
||||||
|
author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user))
|
||||||
|
else:
|
||||||
|
content = _("[{author}]({author_url}) edited a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
|
||||||
|
# curseprofile/comment-replied - Replying to comment on user profile
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="curseprofile/comment-replied")
|
||||||
|
def embed_curseprofile_comment_replied(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
target_user = change["title"].split(':', 1)[1]
|
||||||
|
if target_user != change["user"]:
|
||||||
|
embed["title"] = _("Replied to a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user))
|
||||||
|
else:
|
||||||
|
embed["title"] = _("Replied to a comment on their own profile")
|
||||||
|
if settings["appearance"]["embed"]["show_edit_changes"]:
|
||||||
|
embed["description"] = ctx.client.pull_curseprofile_comment(change["logparams"]["4:comment_id"])
|
||||||
|
embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="curseprofile/comment-replied")
|
||||||
|
def compact_curseprofile_comment_replied(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
target_user = change["title"].split(':', 1)[1]
|
||||||
|
link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])))
|
||||||
|
if target_user != author:
|
||||||
|
content = _("[{author}]({author_url}) replied to a [comment]({comment}) on {target}'s profile.").format(
|
||||||
|
author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user))
|
||||||
|
else:
|
||||||
|
content = _("[{author}]({author_url}) replied to a [comment]({comment}) on their own profile.").format(author=author, author_url=author_url, comment=link)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
|
||||||
|
# curseprofile/comment-deleted - Deleting comment on user profile
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="curseprofile/comment-deleted")
|
||||||
|
def embed_curseprofile_comment_deleted(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
target_user = change["title"].split(':', 1)[1]
|
||||||
|
if target_user != change["user"]:
|
||||||
|
embed["title"] = _("Deleted a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user))
|
||||||
|
else:
|
||||||
|
embed["title"] = _("Deleted a comment on their own profile")
|
||||||
|
if ctx.parsedcomment is not None:
|
||||||
|
embed["description"] = ctx.parsedcomment
|
||||||
|
if "4:comment_id" in change["logparams"]:
|
||||||
|
embed["url"] = create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"]))
|
||||||
|
else:
|
||||||
|
embed["url"] = create_article_path("UserProfile:" + sanitize_to_url(target_user))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="curseprofile/comment-deleted")
|
||||||
|
def compact_curseprofile_comment_deleted(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
target_user = change["title"].split(':', 1)[1]
|
||||||
|
if "4:comment_id" in change["logparams"]:
|
||||||
|
link = clean_link(create_article_path("Special:CommentPermalink/{commentid}".format(commentid=change["logparams"]["4:comment_id"])))
|
||||||
|
else:
|
||||||
|
link = clean_link(create_article_path("UserProfile:" + sanitize_to_url(target_user)))
|
||||||
|
parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*"
|
||||||
|
if target_user != author:
|
||||||
|
content = _("[{author}]({author_url}) deleted a [comment]({comment}) on {target}'s profile.{reason}").format(
|
||||||
|
author=author, author_url=author_url, comment=link, target=sanitize_to_markdown(target_user), reason=parsed_comment)
|
||||||
|
else:
|
||||||
|
content = _("[{author}]({author_url}) deleted a [comment]({comment}) on their own profile.{reason}").format(
|
||||||
|
author=author, author_url=author_url, comment=link, reason=parsed_comment)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
|
||||||
|
# curseprofile/comment-purged - Purging comment on user profile
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="curseprofile/comment-purged")
|
||||||
|
def embed_curseprofile_comment_purged(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
target_user = change["title"].split(':', 1)[1]
|
||||||
|
if target_user != change["user"]:
|
||||||
|
embed["title"] = _("Purged a comment on {target}'s profile").format(target=sanitize_to_markdown(target_user))
|
||||||
|
else:
|
||||||
|
embed["title"] = _("Purged a comment on their own profile")
|
||||||
|
if ctx.parsedcomment is not None:
|
||||||
|
embed["description"] = ctx.parsedcomment
|
||||||
|
embed["url"] = create_article_path("UserProfile:" + sanitize_to_url(target_user))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="curseprofile/comment-purged")
|
||||||
|
def compact_curseprofile_comment_purged(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
target_user = change["title"].split(':', 1)[1]
|
||||||
|
link = clean_link(create_article_path("UserProfile:" + sanitize_to_url(target_user)))
|
||||||
|
parsed_comment = "" if ctx.parsedcomment is None else " *(" + ctx.parsedcomment + ")*"
|
||||||
|
if target_user != author:
|
||||||
|
content = _("[{author}]({author_url}) purged a comment on [{target}]({link})'s profile.{reason}").format(
|
||||||
|
author=author, author_url=author_url, link=link, target=sanitize_to_markdown(target_user), reason=parsed_comment)
|
||||||
|
else:
|
||||||
|
content = _("[{author}]({author_url}) purged a comment on [their own]({link}) profile.{reason}").format(author=author, author_url=author_url, link=link)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content, reason=parsed_comment)
|
71
extensions/base/datadump.py
Normal file
71
extensions/base/datadump.py
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from src.discord.message import DiscordMessage
|
||||||
|
from src.api import formatter
|
||||||
|
from src.i18n import formatters_i18n
|
||||||
|
from src.api.context import Context
|
||||||
|
from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, compact_summary
|
||||||
|
|
||||||
|
_ = formatters_i18n.gettext
|
||||||
|
ngettext = formatters_i18n.ngettext
|
||||||
|
|
||||||
|
|
||||||
|
# DataDumps - https://www.mediawiki.org/wiki/Extension:DataDump
|
||||||
|
# datadump/generate - Generating a dump of wiki
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="datadump/generate")
|
||||||
|
def embed_datadump_generate(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["title"] = _("Generated {file} dump").format(file=change["logparams"]["filename"])
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="mdatadump/generate")
|
||||||
|
def compact_datadump_generate(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
content = _("[{author}]({author_url}) generated *{file}* dump{comment}").format(
|
||||||
|
author=author, author_url=author_url, file=sanitize_to_markdown(change["logparams"]["filename"]),
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# datadump/delete - Deleting a dump of a wiki
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="datadump/delete")
|
||||||
|
def embed_datadump_delete(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["title"] = _("Deleted {file} dump").format(file=sanitize_to_markdown(change["logparams"]["filename"]))
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="mdatadump/delete")
|
||||||
|
def compact_datadump_delete(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
content = _("[{author}]({author_url}) deleted *{file}* dump{comment}").format(
|
||||||
|
author=author, author_url=author_url, file=sanitize_to_markdown(change["logparams"]["filename"]),
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
368
extensions/base/discussions.py
Normal file
368
extensions/base/discussions.py
Normal file
|
@ -0,0 +1,368 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# Discussions - Custom Fandom technology which apparently doesn't have any documentation or homepage, not even open-source, go figure
|
||||||
|
|
||||||
|
import json
|
||||||
|
import datetime, logging
|
||||||
|
import gettext
|
||||||
|
from urllib.parse import quote_plus
|
||||||
|
|
||||||
|
from src.configloader import settings
|
||||||
|
from src.api.util import create_article_path, clean_link, sanitize_to_markdown
|
||||||
|
from src.api.context import Context
|
||||||
|
from src.discord.queue import send_to_discord
|
||||||
|
from src.discord.message import DiscordMessage, DiscordMessageMetadata
|
||||||
|
from src.api import formatter
|
||||||
|
from src.i18n import formatters_i18n
|
||||||
|
|
||||||
|
_ = formatters_i18n.gettext
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger("rcgcdw.discussion_formatter")
|
||||||
|
|
||||||
|
|
||||||
|
class DiscussionsFromHellParser:
|
||||||
|
"""This class converts fairly convoluted Fandom jsonModal of a discussion post into Markdown formatted usable thing.
|
||||||
|
Takes string, returns string. Kudos to MarkusRost for allowing me to implement this formatter based on his code in Wiki-Bot."""
|
||||||
|
|
||||||
|
def __init__(self, post):
|
||||||
|
self.post = post
|
||||||
|
self.jsonModal = json.loads(post.get("jsonModel", "{}"))
|
||||||
|
self.markdown_text = ""
|
||||||
|
self.item_num = 1
|
||||||
|
self.image_last = None
|
||||||
|
|
||||||
|
def parse(self) -> str:
|
||||||
|
"""Main parsing logic"""
|
||||||
|
self.parse_content(self.jsonModal["content"])
|
||||||
|
if len(self.markdown_text) > 2000:
|
||||||
|
self.markdown_text = self.markdown_text[0:2000] + "…"
|
||||||
|
return self.markdown_text
|
||||||
|
|
||||||
|
def parse_content(self, content, ctype=None):
|
||||||
|
self.image_last = None
|
||||||
|
for item in content:
|
||||||
|
if ctype == "bulletList":
|
||||||
|
self.markdown_text += "\t• "
|
||||||
|
if ctype == "orderedList":
|
||||||
|
self.markdown_text += "\t{num}. ".format(num=self.item_num)
|
||||||
|
self.item_num += 1
|
||||||
|
if item["type"] == "text":
|
||||||
|
if "marks" in item:
|
||||||
|
prefix, suffix = self.convert_marks(item["marks"])
|
||||||
|
self.markdown_text = "{old}{pre}{text}{suf}".format(old=self.markdown_text, pre=prefix,
|
||||||
|
text=sanitize_to_markdown(item["text"]),
|
||||||
|
suf=suffix)
|
||||||
|
else:
|
||||||
|
if ctype == "code_block":
|
||||||
|
self.markdown_text += item["text"] # ignore formatting on preformatted text which cannot have additional formatting anyways
|
||||||
|
else:
|
||||||
|
self.markdown_text += sanitize_to_markdown(item["text"])
|
||||||
|
elif item["type"] == "paragraph":
|
||||||
|
if "content" in item:
|
||||||
|
self.parse_content(item["content"], item["type"])
|
||||||
|
self.markdown_text += "\n"
|
||||||
|
elif item["type"] == "openGraph":
|
||||||
|
if not item["attrs"]["wasAddedWithInlineLink"]:
|
||||||
|
self.markdown_text = "{old}{link}\n".format(old=self.markdown_text, link=item["attrs"]["url"])
|
||||||
|
elif item["type"] == "image":
|
||||||
|
try:
|
||||||
|
logger.debug(item["attrs"]["id"])
|
||||||
|
if item["attrs"]["id"] is not None:
|
||||||
|
self.markdown_text = "{old}{img_url}\n".format(old=self.markdown_text, img_url=
|
||||||
|
self.post["_embedded"]["contentImages"][int(item["attrs"]["id"])]["url"])
|
||||||
|
self.image_last = self.post["_embedded"]["contentImages"][int(item["attrs"]["id"])]["url"]
|
||||||
|
except (IndexError, ValueError):
|
||||||
|
logger.warning("Image {} not found.".format(item["attrs"]["id"]))
|
||||||
|
logger.debug(self.markdown_text)
|
||||||
|
elif item["type"] == "code_block":
|
||||||
|
self.markdown_text += "```\n"
|
||||||
|
if "content" in item:
|
||||||
|
self.parse_content(item["content"], item["type"])
|
||||||
|
self.markdown_text += "\n```\n"
|
||||||
|
elif item["type"] == "bulletList":
|
||||||
|
if "content" in item:
|
||||||
|
self.parse_content(item["content"], item["type"])
|
||||||
|
elif item["type"] == "orderedList":
|
||||||
|
self.item_num = 1
|
||||||
|
if "content" in item:
|
||||||
|
self.parse_content(item["content"], item["type"])
|
||||||
|
elif item["type"] == "listItem":
|
||||||
|
self.parse_content(item["content"], item["type"])
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def convert_marks(marks):
|
||||||
|
prefix = ""
|
||||||
|
suffix = ""
|
||||||
|
for mark in marks:
|
||||||
|
if mark["type"] == "mention":
|
||||||
|
prefix += "["
|
||||||
|
suffix = "]({wiki}f/u/{userid}){suffix}".format(wiki=settings["fandom_discussions"]["wiki_url"],
|
||||||
|
userid=mark["attrs"]["userId"], suffix=suffix)
|
||||||
|
elif mark["type"] == "strong":
|
||||||
|
prefix += "**"
|
||||||
|
suffix = "**{suffix}".format(suffix=suffix)
|
||||||
|
elif mark["type"] == "link":
|
||||||
|
prefix += "["
|
||||||
|
suffix = "]({link}){suffix}".format(link=mark["attrs"]["href"], suffix=suffix)
|
||||||
|
elif mark["type"] == "em":
|
||||||
|
prefix += "_"
|
||||||
|
suffix = "_" + suffix
|
||||||
|
return prefix, suffix
|
||||||
|
|
||||||
|
|
||||||
|
def common_discussions(post: dict, embed: DiscordMessage):
|
||||||
|
"""A method to setup embeds with common info shared between all types of discussion posts"""
|
||||||
|
if settings["fandom_discussions"]["appearance"]["embed"]["show_content"]:
|
||||||
|
if post.get("jsonModel") is not None:
|
||||||
|
npost = DiscussionsFromHellParser(post)
|
||||||
|
embed["description"] = npost.parse()
|
||||||
|
if npost.image_last:
|
||||||
|
embed["image"]["url"] = npost.image_last
|
||||||
|
embed["description"] = embed["description"].replace(npost.image_last, "")
|
||||||
|
else: # Fallback when model is not available
|
||||||
|
embed["description"] = post.get("rawContent", "")
|
||||||
|
embed["footer"]["text"] = post["forumName"]
|
||||||
|
embed["timestamp"] = datetime.datetime.fromtimestamp(post["creationDate"]["epochSecond"],
|
||||||
|
tz=datetime.timezone.utc).isoformat()
|
||||||
|
|
||||||
|
# discussion/forum - Discussions on the "forum" available via "Discuss" button
|
||||||
|
|
||||||
|
@formatter.embed(event="discussion/forum")
|
||||||
|
def embed_discussion_forum(ctx: Context, post: dict):
|
||||||
|
embed = DiscordMessage("embed", "discussion", settings["fandom_discussions"]["webhookURL"])
|
||||||
|
common_discussions(post, embed)
|
||||||
|
author = _("unknown") # Fail safe
|
||||||
|
if post["createdBy"]["name"]:
|
||||||
|
author = post["createdBy"]["name"]
|
||||||
|
embed.set_author(author, "{url}f/u/{creatorId}".format(url=settings["fandom_discussions"]["wiki_url"],
|
||||||
|
creatorId=post["creatorId"]),
|
||||||
|
icon_url=post["createdBy"]["avatarUrl"])
|
||||||
|
if not post["isReply"]:
|
||||||
|
embed["url"] = "{url}f/p/{threadId}".format(url=settings["fandom_discussions"]["wiki_url"],
|
||||||
|
threadId=post["threadId"])
|
||||||
|
embed["title"] = _("Created \"{title}\"").format(title=post["title"])
|
||||||
|
thread_funnel = post.get("funnel")
|
||||||
|
if thread_funnel == "POLL":
|
||||||
|
embed.event_type = "discussion/forum/poll"
|
||||||
|
embed["title"] = _("Created a poll \"{title}\"").format(title=post["title"])
|
||||||
|
if settings["fandom_discussions"]["appearance"]["embed"]["show_content"]:
|
||||||
|
poll = post["poll"]
|
||||||
|
image_type = False
|
||||||
|
if poll["answers"][0]["image"] is not None:
|
||||||
|
image_type = True
|
||||||
|
for num, option in enumerate(poll["answers"]):
|
||||||
|
embed.add_field(option["text"] if image_type is True else _("Option {}").format(num + 1),
|
||||||
|
option["text"] if image_type is False else _(
|
||||||
|
"__[View image]({image_url})__").format(image_url=option["image"]["url"]),
|
||||||
|
inline=True)
|
||||||
|
elif thread_funnel == "QUIZ":
|
||||||
|
embed.event_type = "discussion/forum/quiz"
|
||||||
|
embed["title"] = _("Created a quiz \"{title}\"").format(title=post["title"])
|
||||||
|
if settings["fandom_discussions"]["appearance"]["embed"]["show_content"]:
|
||||||
|
quiz = post["_embedded"]["quizzes"][0]
|
||||||
|
embed["description"] = quiz["title"]
|
||||||
|
if quiz["image"] is not None:
|
||||||
|
embed["image"]["url"] = quiz["image"]
|
||||||
|
elif thread_funnel == "TEXT":
|
||||||
|
embed.event_type = "discussion/forum/post"
|
||||||
|
else:
|
||||||
|
logger.warning(
|
||||||
|
"The type of {} is an unknown discussion post type. Please post an issue on the project page to have it added https://gitlab.com/piotrex43/RcGcDw/-/issues.".format(
|
||||||
|
thread_funnel))
|
||||||
|
embed.event_type = "unknown"
|
||||||
|
if post["_embedded"]["thread"][0]["tags"]:
|
||||||
|
tag_displayname = []
|
||||||
|
for tag in post["_embedded"]["thread"][0]["tags"]:
|
||||||
|
tag_displayname.append("[{title}]({url})".format(title=tag["articleTitle"], url=create_article_path(
|
||||||
|
quote_plus(tag["articleTitle"].replace(" ", "_"), "/:?=&"))))
|
||||||
|
if len(", ".join(tag_displayname)) > 1000:
|
||||||
|
embed.add_field(formatters_i18n.pgettext("Fandom discussions Tags/Forums", "Tags"), formatters_i18n.pgettext("Fandom discussions amount of Tags/Forums", "{} tags").format(len(post["_embedded"]["thread"][0]["tags"])))
|
||||||
|
else:
|
||||||
|
embed.add_field(formatters_i18n.pgettext("Fandom discussions Tags/Forums", "Tags"), ", ".join(tag_displayname))
|
||||||
|
else:
|
||||||
|
embed.event_type = "discussion/forum/reply"
|
||||||
|
embed["title"] = _("Replied to \"{title}\"").format(title=post["_embedded"]["thread"][0]["title"])
|
||||||
|
embed["url"] = "{url}f/p/{threadId}/r/{postId}".format(url=settings["fandom_discussions"]["wiki_url"],
|
||||||
|
threadId=post["threadId"], postId=post["id"])
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="discussion/forum")
|
||||||
|
def compact_discussion_forum(ctx: Context, post: dict):
|
||||||
|
message = None
|
||||||
|
author = _("unknown") # Fail safe
|
||||||
|
if post["createdBy"]["name"]:
|
||||||
|
author = post["createdBy"]["name"]
|
||||||
|
author_url = "<{url}f/u/{creatorId}>".format(url=settings["fandom_discussions"]["wiki_url"],
|
||||||
|
creatorId=post["creatorId"])
|
||||||
|
if not post["isReply"]:
|
||||||
|
thread_funnel = post.get("funnel")
|
||||||
|
msg_text = _("[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in {forumName}")
|
||||||
|
if thread_funnel == "POLL":
|
||||||
|
event_type = "discussion/forum/poll"
|
||||||
|
msg_text = _("[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in {forumName}")
|
||||||
|
elif thread_funnel == "QUIZ":
|
||||||
|
event_type = "discussion/forum/quiz"
|
||||||
|
msg_text = _("[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in {forumName}")
|
||||||
|
elif thread_funnel == "TEXT":
|
||||||
|
event_type = "discussion/forum/post"
|
||||||
|
else:
|
||||||
|
logger.warning(
|
||||||
|
"The type of {} is an unknown discussion post type. Please post an issue on the project page to have it added https://gitlab.com/piotrex43/RcGcDw/-/issues.".format(
|
||||||
|
thread_funnel))
|
||||||
|
event_type = "unknown"
|
||||||
|
message = msg_text.format(author=author, author_url=author_url, title=post["title"],
|
||||||
|
url=settings["fandom_discussions"]["wiki_url"], threadId=post["threadId"],
|
||||||
|
forumName=post["forumName"])
|
||||||
|
else:
|
||||||
|
event_type = "discussion/forum/reply"
|
||||||
|
message = _(
|
||||||
|
"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) to [{title}](<{url}f/p/{threadId}>) in {forumName}").format(
|
||||||
|
author=author, author_url=author_url, url=settings["fandom_discussions"]["wiki_url"],
|
||||||
|
threadId=post["threadId"], postId=post["id"], title=post["_embedded"]["thread"][0]["title"],
|
||||||
|
forumName=post["forumName"])
|
||||||
|
return DiscordMessage("compact", event_type, ctx.webhook_url, content=message)
|
||||||
|
|
||||||
|
# discussion/wall - Wall posts/replies
|
||||||
|
|
||||||
|
|
||||||
|
def compact_author_discussions(post: dict):
|
||||||
|
"""A common function for a few discussion related foramtters, it's formatting author's name and URL to their profile"""
|
||||||
|
author = _("unknown") # Fail safe
|
||||||
|
if post["creatorIp"]:
|
||||||
|
author = post["creatorIp"][1:] if settings.get("hide_ips", False) is False else _("Unregistered user")
|
||||||
|
author_url = "<{url}wiki/Special:Contributions{creatorIp}>".format(url=settings["fandom_discussions"]["wiki_url"],
|
||||||
|
creatorIp=post["creatorIp"])
|
||||||
|
else:
|
||||||
|
if post["createdBy"]["name"]:
|
||||||
|
author = post["createdBy"]["name"]
|
||||||
|
author_url = clean_link(create_article_path("User:{user}".format(user=author)))
|
||||||
|
else:
|
||||||
|
author_url = "<{url}f/u/{creatorId}>".format(url=settings["fandom_discussions"]["wiki_url"],
|
||||||
|
creatorId=post["creatorId"])
|
||||||
|
return author, author_url
|
||||||
|
|
||||||
|
|
||||||
|
def embed_author_discussions(post: dict, embed: DiscordMessage):
|
||||||
|
author = _("unknown") # Fail safe
|
||||||
|
if post["creatorIp"]:
|
||||||
|
author = post["creatorIp"][1:]
|
||||||
|
embed.set_author(author if settings.get("hide_ips", False) is False else _("Unregistered user"),
|
||||||
|
"{url}wiki/Special:Contributions{creatorIp}".format(
|
||||||
|
url=settings["fandom_discussions"]["wiki_url"], creatorIp=post["creatorIp"]))
|
||||||
|
else:
|
||||||
|
if post["createdBy"]["name"]:
|
||||||
|
author = post["createdBy"]["name"]
|
||||||
|
embed.set_author(author, "{url}wiki/User:{creator}".format(url=settings["fandom_discussions"]["wiki_url"],
|
||||||
|
creator=author.replace(" ", "_")),
|
||||||
|
icon_url=post["createdBy"]["avatarUrl"])
|
||||||
|
else:
|
||||||
|
embed.set_author(author, "{url}f/u/{creatorId}".format(url=settings["fandom_discussions"]["wiki_url"],
|
||||||
|
creatorId=post["creatorId"]),
|
||||||
|
icon_url=post["createdBy"]["avatarUrl"])
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="discussion/wall")
|
||||||
|
def embed_discussion_wall(ctx: Context, post: dict):
|
||||||
|
embed = DiscordMessage("embed", "discussion", settings["fandom_discussions"]["webhookURL"])
|
||||||
|
common_discussions(post, embed)
|
||||||
|
embed_author_discussions(post, embed)
|
||||||
|
user_wall = _("unknown") # Fail safe
|
||||||
|
if post["forumName"].endswith(' Message Wall'):
|
||||||
|
user_wall = post["forumName"][:-13]
|
||||||
|
if not post["isReply"]:
|
||||||
|
embed.event_type = "discussion/wall/post"
|
||||||
|
embed["url"] = "{url}wiki/Message_Wall:{user_wall}?threadId={threadId}".format(
|
||||||
|
url=settings["fandom_discussions"]["wiki_url"], user_wall=quote_plus(user_wall.replace(" ", "_")),
|
||||||
|
threadId=post["threadId"])
|
||||||
|
embed["title"] = _("Created \"{title}\" on {user}'s Message Wall").format(title=post["title"], user=user_wall)
|
||||||
|
else:
|
||||||
|
embed.event_type = "discussion/wall/reply"
|
||||||
|
embed["url"] = "{url}wiki/Message_Wall:{user_wall}?threadId={threadId}#{replyId}".format(
|
||||||
|
url=settings["fandom_discussions"]["wiki_url"], user_wall=quote_plus(user_wall.replace(" ", "_")),
|
||||||
|
threadId=post["threadId"], replyId=post["id"])
|
||||||
|
embed["title"] = _("Replied to \"{title}\" on {user}'s Message Wall").format(
|
||||||
|
title=post["_embedded"]["thread"][0]["title"], user=user_wall)
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="discussion/wall")
|
||||||
|
def compact_discussion_wall(ctx: Context, post: dict):
|
||||||
|
author, author_url = compact_author_discussions(post)
|
||||||
|
user_wall = _("unknown") # Fail safe
|
||||||
|
if post["forumName"].endswith(' Message Wall'):
|
||||||
|
user_wall = post["forumName"][:-13]
|
||||||
|
if not post["isReply"]:
|
||||||
|
event_type = "discussion/wall/post"
|
||||||
|
message = _(
|
||||||
|
"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/Message_Wall:{user_wall}>)").format(
|
||||||
|
author=author, author_url=author_url, title=post["title"], url=settings["fandom_discussions"]["wiki_url"],
|
||||||
|
user=user_wall, user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"])
|
||||||
|
else:
|
||||||
|
event_type = "discussion/wall/reply"
|
||||||
|
message = _(
|
||||||
|
"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/Message_Wall:{user_wall}>)").format(
|
||||||
|
author=author, author_url=author_url, url=settings["fandom_discussions"]["wiki_url"],
|
||||||
|
title=post["_embedded"]["thread"][0]["title"], user=user_wall,
|
||||||
|
user_wall=quote_plus(user_wall.replace(" ", "_")), threadId=post["threadId"], replyId=post["id"])
|
||||||
|
return DiscordMessage("compact", event_type, ctx.webhook_url, content=message)
|
||||||
|
|
||||||
|
# discussion/article_comment - Article comments
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="discussion/article_comment")
|
||||||
|
def embed_discussion_article_comment(ctx: Context, post: dict):
|
||||||
|
embed = DiscordMessage("embed", "discussion", settings["fandom_discussions"]["webhookURL"])
|
||||||
|
common_discussions(post, embed)
|
||||||
|
embed_author_discussions(post, embed)
|
||||||
|
article_paths = ctx.comment_page
|
||||||
|
if article_paths is None:
|
||||||
|
article_page = {"title": _("unknown"), "fullUrl": settings["fandom_discussions"]["wiki_url"]} # No page known
|
||||||
|
if not post["isReply"]:
|
||||||
|
embed.event_type = "discussion/comment/post"
|
||||||
|
embed["url"] = "{url}?commentId={commentId}".format(url=article_paths["fullUrl"], commentId=post["threadId"])
|
||||||
|
embed["title"] = _("Commented on {article}").format(article=article_paths["title"])
|
||||||
|
else:
|
||||||
|
embed.event_type = "discussion/comment/reply"
|
||||||
|
embed["url"] = "{url}?commentId={commentId}&replyId={replyId}".format(url=article_paths["fullUrl"],
|
||||||
|
commentId=post["threadId"],
|
||||||
|
replyId=post["id"])
|
||||||
|
embed["title"] = _("Replied to a comment on {article}").format(article=article_paths["title"])
|
||||||
|
embed["footer"]["text"] = article_paths["title"]
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="discussion/article_comment")
|
||||||
|
def compact_discussion_article_comment(ctx: Context, post: dict):
|
||||||
|
author, author_url = compact_author_discussions(post)
|
||||||
|
article_paths = ctx.comment_page
|
||||||
|
if article_paths is None:
|
||||||
|
article_paths = {"title": _("unknown"), "fullUrl": settings["fandom_discussions"]["wiki_url"]} # No page known
|
||||||
|
article_paths["fullUrl"] = article_paths["fullUrl"].replace(")", "\)").replace("()", "\(")
|
||||||
|
if not post["isReply"]:
|
||||||
|
event_type = "discussion/comment/post"
|
||||||
|
message = _(
|
||||||
|
"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) on [{article}](<{url}>)").format(
|
||||||
|
author=author, author_url=author_url, url=article_paths["fullUrl"], article=article_paths["title"],
|
||||||
|
commentId=post["threadId"])
|
||||||
|
else:
|
||||||
|
event_type = "discussion/comment/reply"
|
||||||
|
message = _(
|
||||||
|
"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on [{article}](<{url}>)").format(
|
||||||
|
author=author, author_url=author_url, url=article_paths["fullUrl"], article=article_paths["title"],
|
||||||
|
commentId=post["threadId"], replyId=post["id"])
|
||||||
|
return DiscordMessage("compact", event_type, ctx.webhook_url, content=message)
|
108
extensions/base/interwiki.py
Normal file
108
extensions/base/interwiki.py
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from src.discord.message import DiscordMessage
|
||||||
|
from src.api import formatter
|
||||||
|
from src.i18n import formatters_i18n
|
||||||
|
from src.api.context import Context
|
||||||
|
from src.api.util import embed_helper, clean_link, compact_author, create_article_path, sanitize_to_url, compact_summary
|
||||||
|
|
||||||
|
_ = formatters_i18n.gettext
|
||||||
|
ngettext = formatters_i18n.ngettext
|
||||||
|
|
||||||
|
|
||||||
|
# Interwiki - https://www.mediawiki.org/wiki/Extension:Interwiki
|
||||||
|
# interwiki/iw_add - Added entry to interwiki table
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="interwiki/iw_add", mode="embed")
|
||||||
|
def embed_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change, set_desc=False)
|
||||||
|
embed["url"] = create_article_path("Special:Interwiki")
|
||||||
|
embed["title"] = _("Added an entry to the interwiki table")
|
||||||
|
embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment,
|
||||||
|
prefix=change["logparams"]['0'],
|
||||||
|
website=change["logparams"]['1'])
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="interwiki/iw_add")
|
||||||
|
def compact_interwiki_iw_add(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
link = clean_link(create_article_path("Special:Interwiki"))
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) added an entry to the [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format(
|
||||||
|
author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'],
|
||||||
|
website=change["logparams"]['1'], table_url=link)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
|
||||||
|
# interwiki/iw_edit - Editing interwiki entry
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="interwiki/iw_edit", mode="embed")
|
||||||
|
def embed_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change, set_desc=False)
|
||||||
|
embed["url"] = create_article_path("Special:Interwiki")
|
||||||
|
embed["title"] = _("Edited an entry in interwiki table")
|
||||||
|
embed["description"] = _("Prefix: {prefix}, website: {website} | {desc}").format(desc=ctx.parsedcomment,
|
||||||
|
prefix=change["logparams"]['0'],
|
||||||
|
website=change["logparams"]['1'])
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="interwiki/iw_edit")
|
||||||
|
def compact_interwiki_iw_edit(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
link = clean_link(create_article_path("Special:Interwiki"))
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) edited an entry in [interwiki table]({table_url}) pointing to {website} with {prefix} prefix").format(
|
||||||
|
author=author, author_url=author_url, desc=parsed_comment, prefix=change["logparams"]['0'],
|
||||||
|
website=change["logparams"]['1'], table_url=link)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
|
||||||
|
# interwiki/iw_delete - Deleting interwiki entry
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="interwiki/iw_delete", mode="embed")
|
||||||
|
def embed_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change, set_desc=False)
|
||||||
|
embed["url"] = create_article_path("Special:Interwiki")
|
||||||
|
embed["title"] = _("Deleted an entry in interwiki table")
|
||||||
|
embed["description"] = _("Prefix: {prefix} | {desc}").format(desc=ctx.parsedcomment,
|
||||||
|
prefix=change["logparams"]['0'])
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="interwiki/iw_delete")
|
||||||
|
def compact_interwiki_iw_delete(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
link = clean_link(create_article_path("Special:Interwiki"))
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
content = _("[{author}]({author_url}) deleted an entry in [interwiki table]({table_url}){desc}").format(
|
||||||
|
author=author,
|
||||||
|
author_url=author_url,
|
||||||
|
table_url=link,
|
||||||
|
desc=parsed_comment)
|
||||||
|
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
229
extensions/base/managewiki.py
Normal file
229
extensions/base/managewiki.py
Normal file
|
@ -0,0 +1,229 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from src.discord.message import DiscordMessage
|
||||||
|
from src.api import formatter
|
||||||
|
from src.i18n import formatters_i18n
|
||||||
|
from src.api.context import Context
|
||||||
|
from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, compact_summary
|
||||||
|
|
||||||
|
_ = formatters_i18n.gettext
|
||||||
|
ngettext = formatters_i18n.ngettext
|
||||||
|
|
||||||
|
|
||||||
|
# ManageWiki - https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:ManageWiki
|
||||||
|
# managewiki/settings - Changing wiki settings
|
||||||
|
|
||||||
|
@formatter.embed(event="managewiki/settings")
|
||||||
|
def embed_managewiki_settings(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Changed wiki settings")
|
||||||
|
if change["logparams"].get("changes", ""):
|
||||||
|
embed.add_field("Setting", sanitize_to_markdown(change["logparams"].get("changes")))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="managewiki/settings")
|
||||||
|
def compact_managewiki_settings(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
content = _("[{author}]({author_url}) changed wiki settings{reason}".format(author=author, author_url=author_url, reason=parsed_comment))
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# managewiki/delete - Deleting a wiki
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="managewiki/delete")
|
||||||
|
def embed_managewiki_delete(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Deleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown")))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="managewiki/delete")
|
||||||
|
def compact_managewiki_delete(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
content = _("[{author}]({author_url}) deleted a wiki *{wiki_name}*{comment}").format(author=author,
|
||||||
|
author_url=author_url,
|
||||||
|
wiki_name=change[
|
||||||
|
"logparams"].get("wiki",
|
||||||
|
_("Unknown")),
|
||||||
|
comment=parsed_comment)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# managewiki/delete-group - Deleting a group
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="managewiki/delete-group")
|
||||||
|
def embed_managewiki_delete_group(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
group = change["title"].split("/")[-1]
|
||||||
|
embed["title"] = _("Deleted a \"{group}\" user group").format(wiki=group)
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="managewiki/delete-group")
|
||||||
|
def compact_managewiki_delete_group(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
group = change["title"].split("/")[-1]
|
||||||
|
content = _("[{author}]({author_url}) deleted a usergroup *{group}*{comment}").format(author=author,
|
||||||
|
author_url=author_url,
|
||||||
|
group=group,
|
||||||
|
comment=parsed_comment)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# managewiki/lock - Locking a wiki
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="managewiki/lock")
|
||||||
|
def embed_managewiki_lock(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Locked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown")))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="managewiki/lock")
|
||||||
|
def compact_managewiki_lock(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
content = _("[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}").format(
|
||||||
|
author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", _("Unknown")),
|
||||||
|
comment=parsed_comment)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# managewiki/namespaces - Modirying a wiki namespace
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="managewiki/namespaces")
|
||||||
|
def embed_managewiki_namespaces(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Modified \"{namespace_name}\" namespace").format(
|
||||||
|
namespace_name=change["logparams"].get("namespace", _("Unknown")))
|
||||||
|
embed.add_field(_('Wiki'), change["logparams"].get("wiki", _("Unknown")))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="managewiki/namespaces")
|
||||||
|
def compact_managewiki_namespaces(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
content = _("[{author}]({author_url}) modified namespace *{namespace_name}* on *{wiki_name}*{comment}").format(
|
||||||
|
author=author, author_url=author_url, namespace_name=change["logparams"].get("namespace", _("Unknown")),
|
||||||
|
wiki_name=change["logparams"].get("wiki", _("Unknown")), comment=parsed_comment)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# managewiki/namespaces-delete - Deleteing a namespace
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="managewiki/namespaces-delete")
|
||||||
|
def embed_managewiki_namespaces_delete(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Deleted a \"{namespace_name}\" namespace").format(
|
||||||
|
namespace_name=change["logparams"].get("namespace", _("Unknown")))
|
||||||
|
embed.add_field(_('Wiki'), change["logparams"].get("wiki", _("Unknown")))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="managewiki/namespaces-delete")
|
||||||
|
def compact_managewiki_namespaces_delete(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) deleted a namespace *{namespace_name}* on *{wiki_name}*{comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
namespace_name=change["logparams"].get("namespace", _("Unknown")),
|
||||||
|
wiki_name=change["logparams"].get("wiki", _("Unknown")), comment=parsed_comment)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# managewiki/rights - Modifying user groups
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="managewiki/rights")
|
||||||
|
def embed_managewiki_rights(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
group_name = change["title"].split("/permissions/", 1)[1]
|
||||||
|
embed["title"] = _("Modified \"{usergroup_name}\" usergroup").format(usergroup_name=group_name)
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="managewiki/rights")
|
||||||
|
def compact_managewiki_rights(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
group_name = change["title"].split("/permissions/", 1)[1]
|
||||||
|
content = _("[{author}]({author_url}) modified user group *{group_name}*{comment}").format(
|
||||||
|
author=author, author_url=author_url, group_name=group_name, comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# managewiki/undelete - Restoring a wiki
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="managewiki/undelete")
|
||||||
|
def embed_managewiki_undelete(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Undeleted a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown")))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="managewiki/undelete")
|
||||||
|
def compact_managewiki_undelete(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
content = _("[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}").format(
|
||||||
|
author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", _("Unknown")),
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# managewiki/unlock - Unlocking a wiki
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="managewiki/unlock")
|
||||||
|
def embed_managewiki_unlock(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Unlocked a \"{wiki}\" wiki").format(wiki=change["logparams"].get("wiki", _("Unknown")))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="managewiki/unlock")
|
||||||
|
def compact_managewiki_unlock(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
content = _("[{author}]({author_url}) unlocked a wiki *{wiki_name}*{comment}").format(
|
||||||
|
author=author, author_url=author_url, wiki_name=change["logparams"].get("wiki", _("Unknown")),
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
1189
extensions/base/mediawiki.py
Normal file
1189
extensions/base/mediawiki.py
Normal file
File diff suppressed because it is too large
Load diff
70
extensions/base/renameuser.py
Normal file
70
extensions/base/renameuser.py
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from src.discord.message import DiscordMessage
|
||||||
|
from src.api import formatter
|
||||||
|
from src.i18n import formatters_i18n
|
||||||
|
from src.api.context import Context
|
||||||
|
from src.api.util import embed_helper, compact_summary, clean_link, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url
|
||||||
|
|
||||||
|
_ = formatters_i18n.gettext
|
||||||
|
ngettext = formatters_i18n.ngettext
|
||||||
|
|
||||||
|
|
||||||
|
# Renameuser - https://www.mediawiki.org/wiki/Extension:Renameuser
|
||||||
|
# renameuser/renameuser - Renaming a user
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="renameuser/renameuser")
|
||||||
|
def embed_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
edits = change["logparams"]["edits"]
|
||||||
|
if edits > 0:
|
||||||
|
embed["title"] = ngettext("Renamed user \"{old_name}\" with {edits} edit to \"{new_name}\"",
|
||||||
|
"Renamed user \"{old_name}\" with {edits} edits to \"{new_name}\"", edits).format(
|
||||||
|
old_name=sanitize_to_markdown(change["logparams"]["olduser"]), edits=edits,
|
||||||
|
new_name=sanitize_to_markdown(change["logparams"]["newuser"]))
|
||||||
|
else:
|
||||||
|
embed["title"] = _("Renamed user \"{old_name}\" to \"{new_name}\"").format(
|
||||||
|
old_name=sanitize_to_markdown(change["logparams"]["olduser"]),
|
||||||
|
new_name=sanitize_to_markdown(change["logparams"]["newuser"]))
|
||||||
|
embed["url"] = create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="renameuser/renameuser")
|
||||||
|
def compact_renameuser_renameuser(ctx: Context, change: dict) -> DiscordMessage:
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
link = clean_link(create_article_path("User:" + sanitize_to_url(change["logparams"]["newuser"])))
|
||||||
|
edits = change["logparams"]["edits"]
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
if edits > 0:
|
||||||
|
content = ngettext(
|
||||||
|
"[{author}]({author_url}) renamed user *{old_name}* with {edits} edit to [{new_name}]({link}){comment}",
|
||||||
|
"[{author}]({author_url}) renamed user *{old_name}* with {edits} edits to [{new_name}]({link}){comment}",
|
||||||
|
edits).format(
|
||||||
|
author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]),
|
||||||
|
edits=edits,
|
||||||
|
new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
content = _("[{author}]({author_url}) renamed user *{old_name}* to [{new_name}]({link}){comment}").format(
|
||||||
|
author=author, author_url=author_url, old_name=sanitize_to_markdown(change["logparams"]["olduser"]),
|
||||||
|
new_name=sanitize_to_markdown(change["logparams"]["newuser"]), link=link, comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
91
extensions/base/sprite.py
Normal file
91
extensions/base/sprite.py
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from src.discord.message import DiscordMessage
|
||||||
|
from src.api import formatter
|
||||||
|
from src.i18n import formatters_i18n
|
||||||
|
from src.api.context import Context
|
||||||
|
from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, \
|
||||||
|
clean_link
|
||||||
|
|
||||||
|
_ = formatters_i18n.gettext
|
||||||
|
ngettext = formatters_i18n.ngettext
|
||||||
|
|
||||||
|
|
||||||
|
# SpriteSheet - https://www.mediawiki.org/wiki/Extension:SpriteSheet
|
||||||
|
# sprite/sprite - Editing a sprite
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="sprite/sprite")
|
||||||
|
def embed_sprite_sprite(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Edited the sprite for {article}").format(article=sanitize_to_markdown(change["title"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="sprite/sprite")
|
||||||
|
def compact_sprite_sprite(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
content = _("[{author}]({author_url}) edited the sprite for [{article}]({article_url})").format(author=author,
|
||||||
|
author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change[
|
||||||
|
"title"]),
|
||||||
|
article_url=link)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# sprite/sheet - Creating a sprite sheet
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="sprite/sheet")
|
||||||
|
def embed_sprite_sheet(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Created the sprite sheet for {article}").format(article=sanitize_to_markdown(change["title"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="sprite/sheet")
|
||||||
|
def compact_sprite_sheet(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
content = _("[{author}]({author_url}) created the sprite sheet for [{article}]({article_url})").format(author=author, author_url=author_url, article=sanitize_to_markdown(change["title"]), article_url=link)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# sprite/slice - Editing a slice
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="sprite/slice")
|
||||||
|
def embed_sprite_slice(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Edited the slice for {article}").format(article=sanitize_to_markdown(change["title"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
@formatter.compact(event="sprite/slice")
|
||||||
|
def compact_sprite_slice(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
content = _("[{author}]({author_url}) edited the slice for [{article}]({article_url})").format(author=author,
|
||||||
|
author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change[
|
||||||
|
"title"]),
|
||||||
|
article_url=link)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
482
extensions/base/translate.py
Normal file
482
extensions/base/translate.py
Normal file
|
@ -0,0 +1,482 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from src.discord.message import DiscordMessage
|
||||||
|
from src.api import formatter
|
||||||
|
from src.i18n import formatters_i18n
|
||||||
|
from src.api.context import Context
|
||||||
|
from src.api.util import embed_helper, compact_author, create_article_path, sanitize_to_markdown, sanitize_to_url, \
|
||||||
|
clean_link, compact_summary
|
||||||
|
|
||||||
|
_ = formatters_i18n.gettext
|
||||||
|
ngettext = formatters_i18n.ngettext
|
||||||
|
|
||||||
|
# I cried when I realized I have to migrate Translate extension logs, but this way I atone for my countless sins
|
||||||
|
# Translate - https://www.mediawiki.org/wiki/Extension:Translate
|
||||||
|
# pagetranslation/mark - Marking a page for translation
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="pagetranslation/mark")
|
||||||
|
def embed_pagetranslation_mark(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
link = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
if "?" in link:
|
||||||
|
embed["url"] = link + "&oldid={}".format(change["logparams"]["revision"])
|
||||||
|
else:
|
||||||
|
embed["url"] = link + "?oldid={}".format(change["logparams"]["revision"])
|
||||||
|
embed["title"] = _("Marked \"{article}\" for translation").format(article=sanitize_to_markdown(change["title"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="pagetranslation/mark")
|
||||||
|
def compact_pagetranslation_mark(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
link = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
if "?" in link:
|
||||||
|
link = link + "&oldid={}".format(change["logparams"]["revision"])
|
||||||
|
else:
|
||||||
|
link = link + "?oldid={}".format(change["logparams"]["revision"])
|
||||||
|
link = clean_link(link)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
content = _("[{author}]({author_url}) marked [{article}]({article_url}) for translation{comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# pagetranslation/unmark - Removing a page from translation system
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="pagetranslation/unmark")
|
||||||
|
def embed_pagetranslation_unmark(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Removed \"{article}\" from the translation system").format(article=sanitize_to_markdown(change["title"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="pagetranslation/unmark")
|
||||||
|
def compact_pagetranslation_unmark(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) removed [{article}]({article_url}) from the translation system{comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# pagetranslation/moveok - Completed moving translation page
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="pagetranslation/moveok")
|
||||||
|
def embed_pagetranslation_moveok(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["logparams"]["target"]))
|
||||||
|
embed["title"] = _("Completed moving translation pages from \"{article}\" to \"{target}\"").format(
|
||||||
|
article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="pagetranslation/moveok")
|
||||||
|
def compact_pagetranslation_moveok(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"])))
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) completed moving translation pages from *{article}* to [{target}]({target_url}){comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"]),
|
||||||
|
target_url=link, comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# pagetranslation/movenok - Failed while moving translation page
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="pagetranslation/movenok")
|
||||||
|
def embed_pagetranslation_movenok(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Encountered a problem while moving \"{article}\" to \"{target}\"").format(
|
||||||
|
article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="pagetranslation/movenok")
|
||||||
|
def compact_pagetranslation_movenok(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
target_url = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"])))
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) encountered a problem while moving [{article}]({article_url}) to [{target}]({target_url}){comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url,
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# pagetranslation/deletefnok - Failure in deletion of translatable page
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="pagetranslation/deletefnok")
|
||||||
|
def embed_pagetranslation_deletefnok(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Failed to delete \"{article}\" which belongs to translatable page \"{target}\"").format(
|
||||||
|
article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="pagetranslation/deletefnok")
|
||||||
|
def compact_pagetranslation_deletefnok(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
target_url = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"])))
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) failed to delete [{article}]({article_url}) which belongs to translatable page [{target}]({target_url}){comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url,
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# pagetranslation/deletelok - Completion in deleting a page?
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="pagetranslation/deletelok")
|
||||||
|
def embed_pagetranslation_deletelok(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Completed deletion of translation page \"{article}\"").format(
|
||||||
|
article=sanitize_to_markdown(change["title"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="pagetranslation/deletelok")
|
||||||
|
def compact_pagetranslation_deletelok(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) completed deletion of translation page [{article}]({article_url}){comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# pagetranslation/deletelnok - Failure in deletion of article belonging to a translation page
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="pagetranslation/deletelnok")
|
||||||
|
def embed_pagetranslation_deletelnok(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Failed to delete \"{article}\" which belongs to translation page \"{target}\"").format(
|
||||||
|
article=sanitize_to_markdown(change["title"]), target=sanitize_to_markdown(change["logparams"]["target"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="pagetranslation/deletelnok")
|
||||||
|
def compact_pagetranslation_deletelnok(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
target_url = clean_link(create_article_path(sanitize_to_url(change["logparams"]["target"])))
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) failed to delete [{article}]({article_url}) which belongs to translation page [{target}]({target_url}){comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
target=sanitize_to_markdown(change["logparams"]["target"]), target_url=target_url,
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# pagetranslation/encourage - Encouraging to translate an article
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="pagetranslation/encourage")
|
||||||
|
def embed_pagetranslation_encourage(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Encouraged translation of \"{article}\"").format(article=sanitize_to_markdown(change["title"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="pagetranslation/encourage")
|
||||||
|
def compact_pagetranslation_encourage(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
content = _("[{author}]({author_url}) encouraged translation of [{article}]({article_url}){comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# pagetranslation/discourage - Discouraging to translate an article
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="pagetranslation/discourage")
|
||||||
|
def embed_pagetranslation_discourage(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Discouraged translation of \"{article}\"").format(article=sanitize_to_markdown(change["title"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="pagetranslation/discourage")
|
||||||
|
def compact_pagetranslation_discourage(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
content = _("[{author}]({author_url}) discouraged translation of [{article}]({article_url}){comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# pagetranslation/prioritylanguages - Changing the priority of translations?
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="pagetranslation/prioritylanguages")
|
||||||
|
def embed_pagetranslation_prioritylanguages(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
if "languages" in change["logparams"]:
|
||||||
|
languages = "`, `".join(change["logparams"]["languages"].split(","))
|
||||||
|
if change["logparams"]["force"] == "on":
|
||||||
|
embed["title"] = _("Limited languages for \"{article}\" to `{languages}`").format(article=sanitize_to_markdown(change["title"]),
|
||||||
|
languages=languages)
|
||||||
|
else:
|
||||||
|
embed["title"] = _("Priority languages for \"{article}\" set to `{languages}`").format(
|
||||||
|
article=sanitize_to_markdown(change["title"]), languages=languages)
|
||||||
|
else:
|
||||||
|
embed["title"] = _("Removed priority languages from \"{article}\"").format(article=sanitize_to_markdown(change["title"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="pagetranslation/prioritylanguages")
|
||||||
|
def compact_pagetranslation_prioritylanguages(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
if "languages" in change["logparams"]:
|
||||||
|
languages = "`, `".join(change["logparams"]["languages"].split(","))
|
||||||
|
if change["logparams"]["force"] == "on":
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) limited languages for [{article}]({article_url}) to `{languages}`{comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
languages=languages, comment=parsed_comment
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) set the priority languages for [{article}]({article_url}) to `{languages}`{comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
languages=languages, comment=parsed_comment
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) removed priority languages from [{article}]({article_url}){comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
|
||||||
|
# pagetranslation/associate - Adding an article to translation group
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="pagetranslation/associate")
|
||||||
|
def embed_pagetranslation_associate(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Added translatable page \"{article}\" to aggregate group \"{group}\"").format(
|
||||||
|
article=sanitize_to_markdown(change["title"]), group=change["logparams"]["aggregategroup"])
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="pagetranslation/associate")
|
||||||
|
def compact_pagetranslation_associate(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) added translatable page [{article}]({article_url}) to aggregate group \"{group}\"{comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
group=change["logparams"]["aggregategroup"], comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# pagetranslation/dissociate - Removing an article from translation group
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="pagetranslation/dissociate")
|
||||||
|
def embed_pagetranslation_dissociate(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Removed translatable page \"{article}\" from aggregate group \"{group}\"").format(
|
||||||
|
article=sanitize_to_markdown(change["title"]), group=change["logparams"]["aggregategroup"])
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="pagetranslation/dissociate")
|
||||||
|
def compact_pagetranslation_dissociate(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) removed translatable page [{article}]({article_url}) from aggregate group \"{group}\"{comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
group=change["logparams"]["aggregategroup"], comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# translationreview/message - Reviewing translation
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="translationreview/message")
|
||||||
|
def embed_translationreview_message(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
link = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
if "?" in link:
|
||||||
|
embed["url"] = link + "&oldid={}".format(change["logparams"]["revision"])
|
||||||
|
else:
|
||||||
|
embed["url"] = link + "?oldid={}".format(change["logparams"]["revision"])
|
||||||
|
embed["title"] = _("Reviewed translation \"{article}\"").format(article=sanitize_to_markdown(change["title"]))
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="translationreview/message")
|
||||||
|
def compact_translationreview_message(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
if "?" in link:
|
||||||
|
link = link + "&oldid={}".format(change["logparams"]["revision"])
|
||||||
|
else:
|
||||||
|
link = link + "?oldid={}".format(change["logparams"]["revision"])
|
||||||
|
link = clean_link(link)
|
||||||
|
content = _("[{author}]({author_url}) reviewed translation [{article}]({article_url}){comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# translationreview/group - Changing of state for group translation?
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.embed(event="translationreview/group")
|
||||||
|
def embed_translationreview_group(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
embed["title"] = _("Changed the state of `{language}` translations of \"{article}\"").format(
|
||||||
|
language=change["logparams"]["language"], article=sanitize_to_markdown(change["title"]))
|
||||||
|
if "old-state" in change["logparams"]:
|
||||||
|
embed.add_field(_("Old state"), change["logparams"]["old-state"], inline=True)
|
||||||
|
embed.add_field(_("New state"), change["logparams"]["new-state"], inline=True)
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="translationreview/group")
|
||||||
|
def compact_translationreview_group(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
if "old-state" in change["logparams"]:
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) changed the state of `{language}` translations of [{article}]({article_url}) from `{old_state}` to `{new_state}`{comment}").format(
|
||||||
|
author=author, author_url=author_url, language=change["logparams"]["language"],
|
||||||
|
article=sanitize_to_markdown(change["logparams"]["group-label"]), article_url=link,
|
||||||
|
old_state=change["logparams"]["old-state"], new_state=change["logparams"]["new-state"],
|
||||||
|
comment=parsed_comment
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) changed the state of `{language}` translations of [{article}]({article_url}) to `{new_state}`{comment}").format(
|
||||||
|
author=author, author_url=author_url, language=change["logparams"]["language"],
|
||||||
|
article=sanitize_to_markdown(change["logparams"]["group-label"]), article_url=link,
|
||||||
|
new_state=change["logparams"]["new-state"], comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
||||||
|
|
||||||
|
# pagelang/pagelang - Changing the language of a page
|
||||||
|
|
||||||
|
|
||||||
|
def get_languages(change):
|
||||||
|
old_lang = "`{}`".format(change["logparams"]["oldlanguage"])
|
||||||
|
if change["logparams"]["oldlanguage"][-5:] == "[def]":
|
||||||
|
old_lang = "`{}` {}".format(change["logparams"]["oldlanguage"][:-5], _("(default)"))
|
||||||
|
new_lang = "`{}`".format(change["logparams"]["newlanguage"])
|
||||||
|
if change["logparams"]["newlanguage"][-5:] == "[def]":
|
||||||
|
new_lang = "`{}` {}".format(change["logparams"]["oldlanguage"][:-5], _("(default)"))
|
||||||
|
return old_lang, new_lang
|
||||||
|
|
||||||
|
@formatter.embed(event="pagelang/pagelang")
|
||||||
|
def embed_pagelang_pagelang(ctx: Context, change: dict):
|
||||||
|
embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url)
|
||||||
|
embed_helper(ctx, embed, change)
|
||||||
|
embed["url"] = create_article_path(sanitize_to_url(change["title"]))
|
||||||
|
old_lang, new_lang = get_languages(change)
|
||||||
|
embed["title"] = _("Changed the language of \"{article}\"").format(article=sanitize_to_markdown(change["title"]))
|
||||||
|
embed.add_field(_("Old language"), old_lang, inline=True)
|
||||||
|
embed.add_field(_("New language"), new_lang, inline=True)
|
||||||
|
return embed
|
||||||
|
|
||||||
|
|
||||||
|
@formatter.compact(event="pagelang/pagelang")
|
||||||
|
def compact_pagelang_pagelang(ctx: Context, change: dict):
|
||||||
|
author, author_url = compact_author(ctx, change)
|
||||||
|
parsed_comment = compact_summary(ctx)
|
||||||
|
link = clean_link(create_article_path(sanitize_to_url(change["title"])))
|
||||||
|
old_lang, new_lang = get_languages(change)
|
||||||
|
content = _(
|
||||||
|
"[{author}]({author_url}) changed the language of [{article}]({article_url}) from {old_lang} to {new_lang}{comment}").format(
|
||||||
|
author=author, author_url=author_url,
|
||||||
|
article=sanitize_to_markdown(change["title"]), article_url=link,
|
||||||
|
old_lang=old_lang, new_lang=new_lang, comment=parsed_comment
|
||||||
|
)
|
||||||
|
return DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url, content=content)
|
16
extensions/hooks/__init__.py
Normal file
16
extensions/hooks/__init__.py
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import extensions.hooks.example_hook
|
133
extensions/hooks/edit_alerts.py
Normal file
133
extensions/hooks/edit_alerts.py
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from src.api.hook import post_hook
|
||||||
|
from src.configloader import settings
|
||||||
|
|
||||||
|
# {
|
||||||
|
# "hooks": {
|
||||||
|
# "edit_alerts": [
|
||||||
|
# {
|
||||||
|
# "content": "DISCORD MARKDOWN TEXT",
|
||||||
|
# "allowed_mentions": {
|
||||||
|
# "users": ["USERID"],
|
||||||
|
# "roles": ["ROLEID"]
|
||||||
|
# },
|
||||||
|
# "requirements": [
|
||||||
|
# {
|
||||||
|
# "action": [
|
||||||
|
# "edit",
|
||||||
|
# "delete/delete",
|
||||||
|
# "delete"
|
||||||
|
# ],
|
||||||
|
# "user": [
|
||||||
|
# "USERNAME",
|
||||||
|
# "@__anon__",
|
||||||
|
# "@__user__"
|
||||||
|
# ],
|
||||||
|
# "title": [
|
||||||
|
# "PAGETITLE"
|
||||||
|
# ],
|
||||||
|
# "tags": [
|
||||||
|
# ["EDIT TAG", "AND EDIT TAG"],
|
||||||
|
# ["OR EDIT TAG"]
|
||||||
|
# ],
|
||||||
|
# "categories": [
|
||||||
|
# {
|
||||||
|
# "added": [
|
||||||
|
# ["CATEGORY", "AND CATEGORY"],
|
||||||
|
# ["OR CATEGORY"]
|
||||||
|
# ],
|
||||||
|
# "removed": [
|
||||||
|
# ["CATEGORY", "AND CATEGORY"],
|
||||||
|
# ["OR CATEGORY"]
|
||||||
|
# ]
|
||||||
|
# }
|
||||||
|
# ]
|
||||||
|
# }
|
||||||
|
# ]
|
||||||
|
# }
|
||||||
|
# ]
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
edit_alerts = settings.get("hooks", {}).get("edit_alerts", [])
|
||||||
|
|
||||||
|
|
||||||
|
class RequirementNotMet(Exception):
|
||||||
|
"""Exception raised when the requirement is not met and another requirement must be processed"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def check_group_requirements(change_data: list, settings_data: list):
|
||||||
|
"""This function resolves group discussions and raises RequirementNotMet when requirement is not met"""
|
||||||
|
if settings_data:
|
||||||
|
for required_group in settings_data:
|
||||||
|
# test all items in required_group are in change_data (one group fulfills the requirement) return the function
|
||||||
|
for required_item in required_group:
|
||||||
|
if required_item not in change_data:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
raise RequirementNotMet
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@post_hook
|
||||||
|
def edit_alerts_hook(message, metadata, context, change):
|
||||||
|
# For every alert in edit_alerts, they can have different functions and so on
|
||||||
|
for alert in edit_alerts:
|
||||||
|
# For every requirement, if one of the requirements passes the alert gets executed
|
||||||
|
for requirement in alert.get("requirements", []):
|
||||||
|
try:
|
||||||
|
req_action = requirement.get("action", [])
|
||||||
|
# If current action isn't in config for this requirement AND current event type is not in the requirements in settings skip this requirement
|
||||||
|
if req_action and context.event not in req_action and context.event.split('/', 1)[0] not in req_action:
|
||||||
|
raise RequirementNotMet
|
||||||
|
req_user = requirement.get("user", [])
|
||||||
|
# If current user is not in config AND checkings for anon and user fail
|
||||||
|
if req_user and change["user"] not in req_user and ("@__anon__" if "anon" in change else "@__user__") not in req_user:
|
||||||
|
raise RequirementNotMet
|
||||||
|
req_title = requirement.get("title", [])
|
||||||
|
if req_title and change["title"] not in req_title:
|
||||||
|
raise RequirementNotMet
|
||||||
|
check_group_requirements(change.get("tags", []), requirement.get("tags", []))
|
||||||
|
if requirement.get("categories", []):
|
||||||
|
for req_cats in requirement.get("categories", []):
|
||||||
|
try:
|
||||||
|
check_group_requirements(context.categories.new, req_cats.get("added", []))
|
||||||
|
check_group_requirements(context.categories.removed, req_cats.get("removed", []))
|
||||||
|
except RequirementNotMet:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
raise RequirementNotMet
|
||||||
|
except RequirementNotMet:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
message.webhook_object["content"] = (message.webhook_object.get("content", "") or "") + alert["content"]
|
||||||
|
allowed_mentions = message.webhook_object["allowed_mentions"]
|
||||||
|
if alert.get("allowed_mentions", {}).get("users", []):
|
||||||
|
if not allowed_mentions.get("users", []):
|
||||||
|
allowed_mentions["users"] = []
|
||||||
|
allowed_mentions["users"].extend(alert["allowed_mentions"]["users"])
|
||||||
|
if alert.get("allowed_mentions", {}).get("roles", []):
|
||||||
|
if not allowed_mentions.get("roles", []):
|
||||||
|
allowed_mentions["roles"] = []
|
||||||
|
allowed_mentions["roles"].extend(alert["allowed_mentions"]["roles"])
|
28
extensions/hooks/example_hook.py
Normal file
28
extensions/hooks/example_hook.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from src.api.hook import pre_hook, post_hook
|
||||||
|
|
||||||
|
|
||||||
|
@pre_hook
|
||||||
|
def example_pre_hook(context, change):
|
||||||
|
if context.event == "edit":
|
||||||
|
print("I'm an edit with {} bytes changed!".format(change.get("newlen", 0) - change.get("oldlen", 0)))
|
||||||
|
|
||||||
|
|
||||||
|
@post_hook
|
||||||
|
def example_post_hook(message, metadata, context, change):
|
||||||
|
print("Our Discord message looks as follows: ")
|
||||||
|
print(message)
|
38
extensions/hooks/usertalk.py
Normal file
38
extensions/hooks/usertalk.py
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# This file is part of Recent changes Goat compatible Discord webhook (RcGcDw).
|
||||||
|
#
|
||||||
|
# RcGcDw is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# RcGcDw is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with RcGcDw. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from src.api.hook import post_hook
|
||||||
|
from src.configloader import settings
|
||||||
|
|
||||||
|
# {
|
||||||
|
# "hooks": {
|
||||||
|
# "usertalk": {
|
||||||
|
# "USERNAME": "USERID"
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
discord_users = settings.get("hooks", {}).get("usertalk", {})
|
||||||
|
|
||||||
|
@post_hook
|
||||||
|
def usertalk_hook(message, metadata, context, change):
|
||||||
|
if discord_users and change["ns"] in [2, 3, 202] and not "/" in change["title"]:
|
||||||
|
username = change["title"].split(':', 1)[1]
|
||||||
|
if discord_users.get(username, "") and username != change["user"]:
|
||||||
|
message.webhook_object["content"] = (message.webhook_object.get("content", "") or "") + " <@{}>".format(discord_users[username])
|
||||||
|
if message.webhook_object["allowed_mentions"].get("users", []):
|
||||||
|
if discord_users[username] not in message.webhook_object["allowed_mentions"]["users"]:
|
||||||
|
message.webhook_object["allowed_mentions"]["users"].append(discord_users[username])
|
||||||
|
else:
|
||||||
|
message.webhook_object["allowed_mentions"]["users"] = [discord_users[username]]
|
Binary file not shown.
|
@ -1,184 +0,0 @@
|
||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
||||||
# This file is distributed under the same license as the RcGcDw package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: RcGcDw\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2020-11-30 11:58+0100\n"
|
|
||||||
"PO-Revision-Date: 2020-12-30 13:26+0000\n"
|
|
||||||
"Last-Translator: Creeper <thisisacreeper0101@gmail.com>\n"
|
|
||||||
"Language-Team: Bengali <https://translate.wikibot.de/projects/rcgcdw/"
|
|
||||||
"discussion_formatters/bn/>\n"
|
|
||||||
"Language: bn\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
|
||||||
"X-Generator: Weblate 4.2.1\n"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:25 src/discussion_formatters.py:81
|
|
||||||
msgid "Unregistered user"
|
|
||||||
msgstr "রেজিস্টার না করা ব্যাবহারকারি"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:34
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) {forumName}তে [{title}](<{url}f/p/{threadId}>) "
|
|
||||||
"বানিয়েছে"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:36
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) {forumName}এ পোল [{title}](<{url}f/p/{threadId}>) "
|
|
||||||
"বানিয়েছে"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:38
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) {forumName}তে একটি কুইজ [{title}](<{url}f/p/"
|
|
||||||
"{threadId}>) বানিয়েছে"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:43
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) "
|
|
||||||
"to [{title}](<{url}f/p/{threadId}>) in {forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) {forumName}এ [{title}](<{url}f/p/{threadId}>)তে একটি"
|
|
||||||
" [উত্তর](<{url}f/p/{threadId}/r/{postId}>) দিয়েছে"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:45 src/discussion_formatters.py:54
|
|
||||||
#: src/discussion_formatters.py:137 src/discussion_formatters.py:150
|
|
||||||
msgid "unknown"
|
|
||||||
msgstr "অজানা"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:49
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) [{user}এর মেসেজ ওয়ালে](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}>)এ [{title}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}>) বানিয়েছে"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:51
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]"
|
|
||||||
"(<{url}wiki/Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) [{user}এর মেসেজ ওয়ালে](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}>) [{title}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}>)তে একটি [উত্তর](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}#{replyId}>) দিয়েছে"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:57
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) "
|
|
||||||
"on [{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) [{article}](<{url}>)এ একটি "
|
|
||||||
"[কমেন্ট](<{url}?commentId={commentId}>) লিখেছে"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:62
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}"
|
|
||||||
"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on "
|
|
||||||
"[{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) [{article}](<{url}>)এর একটি "
|
|
||||||
"[কমেন্ট](<{url}?commentId={commentId}>)এ একটি "
|
|
||||||
"[উত্তর](<{url}?commentId={commentId}&replyId={replyId}>) দিয়েছে"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:70
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"Unknown event `{event}` by [{author}]({author_url}), report it on the "
|
|
||||||
"[support server](<{support}>)."
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url})দ্বারা অজানা ঘটনা `{event}` , [সাহায্য "
|
|
||||||
"সার্ভারে](<{support}>) রিপোর্ট করুন।"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:98
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\""
|
|
||||||
msgstr "\"{title}\" বানানো হলো"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:102
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a poll \"{title}\""
|
|
||||||
msgstr "পোল \"{title}\" বানানো হলো"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:109
|
|
||||||
msgid "Option {}"
|
|
||||||
msgstr "বিকল্প {}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:110
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "__[View image]({image_url})__"
|
|
||||||
msgstr "__[চিত্র দেখুন]({image_url})__"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:114
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a quiz \"{title}\""
|
|
||||||
msgstr "একটি কুইজ \"{title}\" বানানো হলো"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:129 src/discussion_formatters.py:131
|
|
||||||
msgid "Tags"
|
|
||||||
msgstr "ট্যাগ"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:129
|
|
||||||
msgid "{} tags"
|
|
||||||
msgstr "{}টি ট্যাগ"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:134
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\""
|
|
||||||
msgstr "\"{title}\"এ উত্তর দেওয়া হলো"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:143
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr "{user}এর মেসেজ ওয়ালে \"{title}\" বানানো হলো"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:147
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr "{user}এর মেসেজ ওয়ালের \"{title}\"তে উত্তর দেওয়া হলো"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:154
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Commented on {article}"
|
|
||||||
msgstr "{article}এ কমেন্ট করা হলো"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:158
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to a comment on {article}"
|
|
||||||
msgstr "{article}এর একটি কমেন্টে উত্তর দেওয়া হলো"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:162
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Unknown event `{event}`"
|
|
||||||
msgstr "অজানা ঘটনা `{event}`"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:168 src/discussion_formatters.py:170
|
|
||||||
msgid "Report this on the support server"
|
|
||||||
msgstr "এটিকে সাহায্য সার্ভারে রিপোর্ট করুন"
|
|
BIN
locale/bn/LC_MESSAGES/formatters.mo
Normal file
BIN
locale/bn/LC_MESSAGES/formatters.mo
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
Binary file not shown.
|
@ -1,185 +0,0 @@
|
||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: \n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2020-12-23 00:28+0100\n"
|
|
||||||
"PO-Revision-Date: 2020-12-13 14:30+0000\n"
|
|
||||||
"Last-Translator: Frisk The Evil Goat Overlord <piotrex43@protonmail.ch>\n"
|
|
||||||
"Language-Team: German <https://translate.wikibot.de/projects/rcgcdw/"
|
|
||||||
"discussion_formatters-1/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.2.1\n"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:21 src/discussion_formatters.py:56
|
|
||||||
#: src/discussion_formatters.py:67 src/discussion_formatters.py:95
|
|
||||||
#: src/discussion_formatters.py:163 src/discussion_formatters.py:176
|
|
||||||
msgid "unknown"
|
|
||||||
msgstr "Unbekannt"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:27 src/discussion_formatters.py:102
|
|
||||||
msgid "Unregistered user"
|
|
||||||
msgstr "Nicht angemeldeter Benutzer"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:39
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) erstellte [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:42
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) erstellte eine Umfrage [{title}](<{url}f/p/"
|
|
||||||
"{threadId}>) in {forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:45
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) erstellte ein Quiz [{title}](<{url}f/p/{threadId}>) "
|
|
||||||
"in {forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:54
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) "
|
|
||||||
"to [{title}](<{url}f/p/{threadId}>) in {forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) erstellte eine [Antwort](<{url}f/p/{threadId}/r/"
|
|
||||||
"{postId}>) zu [{title}](<{url}f/p/{threadId}>) in {forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:61
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) erstellte [{title}](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}>) auf der [Nachrichtenseite von {user}]"
|
|
||||||
"(<{url}wiki/Message_Wall:{user_wall}>)"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:64
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]"
|
|
||||||
"(<{url}wiki/Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) erstellte eine [Antwort](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}#{replyId}>) auf [{title}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}>) auf der [Nachrichtenseite von "
|
|
||||||
"{user}](<{url}wiki/Message_Wall:{user_wall}>)"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:72
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) "
|
|
||||||
"on [{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) erstellte ein [Kommentar](<{url}?"
|
|
||||||
"commentId={commentId}>) zu [{article}](<{url}>)"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:78
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}"
|
|
||||||
"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on "
|
|
||||||
"[{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) erstellte eine [Antwort](<{url}?"
|
|
||||||
"commentId={commentId}&replyId={replyId}>) auf ein [Kommentar](<{url}?"
|
|
||||||
"commentId={commentId}>) zu [{article}](<{url}>)"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:86
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"Unknown event `{event}` by [{author}]({author_url}), report it on the "
|
|
||||||
"[support server](<{support}>)."
|
|
||||||
msgstr ""
|
|
||||||
"Unbekanntes Event `{event}` von [{author}]({author_url}), melde es auf dem "
|
|
||||||
"[Support-Server](<{support}>)."
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:123
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\""
|
|
||||||
msgstr "Erstellte „{title}“"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:127
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a poll \"{title}\""
|
|
||||||
msgstr "Erstellte eine Umfrage „{title}“"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:134
|
|
||||||
msgid "Option {}"
|
|
||||||
msgstr "Option {}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:135
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "__[View image]({image_url})__"
|
|
||||||
msgstr "__[Bild öffnen]({image_url})__"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:139
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a quiz \"{title}\""
|
|
||||||
msgstr "Erstellte ein Quiz „{title}“"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:155 src/discussion_formatters.py:157
|
|
||||||
msgid "Tags"
|
|
||||||
msgstr "Tags"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:155
|
|
||||||
msgid "{} tags"
|
|
||||||
msgstr "{} Tags"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:160
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\""
|
|
||||||
msgstr "Antwortete auf „{title}“"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:169
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr "Erstellte „{title}“ auf der Nachrichtenseite von {user}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:173
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr "Antwortete auf „{title}“ auf der Nachrichtenseite von {user}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:180
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Commented on {article}"
|
|
||||||
msgstr "Kommentierte zu „{article}“"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:184
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to a comment on {article}"
|
|
||||||
msgstr "Antwortete auf ein Kommentar zu „{article}“"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:188
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Unknown event `{event}`"
|
|
||||||
msgstr "Unbekanntes Event `{event}`"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:194 src/discussion_formatters.py:196
|
|
||||||
msgid "Report this on the support server"
|
|
||||||
msgstr "Melde es auf dem Support-Server"
|
|
BIN
locale/de/LC_MESSAGES/formatters.mo
Normal file
BIN
locale/de/LC_MESSAGES/formatters.mo
Normal file
Binary file not shown.
1999
locale/de/LC_MESSAGES/formatters.po
Normal file
1999
locale/de/LC_MESSAGES/formatters.po
Normal file
File diff suppressed because it is too large
Load diff
|
@ -2,7 +2,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-11-28 23:45+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: 2020-08-03 13:44+0000\n"
|
"PO-Revision-Date: 2020-08-03 13:44+0000\n"
|
||||||
"Last-Translator: MarkusRost <>\n"
|
"Last-Translator: MarkusRost <>\n"
|
||||||
"Language-Team: German <https://weblate.frisk.space/projects/rcgcdw/main/de/"
|
"Language-Team: German <https://weblate.frisk.space/projects/rcgcdw/main/de/"
|
||||||
|
@ -69,7 +69,7 @@ msgstr "Discord-Link"
|
||||||
msgid "Battle.net handle"
|
msgid "Battle.net handle"
|
||||||
msgstr "Battle.net-Link"
|
msgstr "Battle.net-Link"
|
||||||
|
|
||||||
#: src/misc.py:119
|
#: src/misc.py:139
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"__And more__"
|
"__And more__"
|
||||||
|
@ -77,10 +77,10 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"__Und mehr__"
|
"__Und mehr__"
|
||||||
|
|
||||||
#: src/misc.py:276
|
#: src/misc.py:328
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Unbekannt"
|
msgstr "Unbekannt"
|
||||||
|
|
||||||
#: src/misc.py:278
|
#: src/misc.py:330
|
||||||
msgid "unknown"
|
msgid "unknown"
|
||||||
msgstr "unbekannt"
|
msgstr "unbekannt"
|
||||||
|
|
Binary file not shown.
|
@ -3,8 +3,8 @@ msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2021-04-14 16:24+0200\n"
|
"POT-Creation-Date: 2021-04-14 16:24+0200\n"
|
||||||
"PO-Revision-Date: 2020-12-29 15:21+0000\n"
|
"PO-Revision-Date: 2021-05-06 14:10+0000\n"
|
||||||
"Last-Translator: MarkusRost <sukramxro@gmail.com>\n"
|
"Last-Translator: magiczocker <jan-frederik-kriete@t-online.de>\n"
|
||||||
"Language-Team: German <https://translate.wikibot.de/projects/rcgcdw/"
|
"Language-Team: German <https://translate.wikibot.de/projects/rcgcdw/"
|
||||||
"rc_formatters/de/>\n"
|
"rc_formatters/de/>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
|
@ -12,7 +12,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.2.1\n"
|
"X-Generator: Weblate 4.6\n"
|
||||||
"X-Loco-Source-Locale: de_DE\n"
|
"X-Loco-Source-Locale: de_DE\n"
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
"X-Loco-Parser: loco_parse_po\n"
|
"X-Loco-Parser: loco_parse_po\n"
|
||||||
|
@ -601,20 +601,23 @@ msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\""
|
||||||
msgstr "[{author}]({author_url}) ersetzte die Cargo-Tabelle „{table}“"
|
msgstr "[{author}]({author_url}) ersetzte die Cargo-Tabelle „{table}“"
|
||||||
|
|
||||||
#: src/rc_formatters.py:436
|
#: src/rc_formatters.py:436
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}"
|
"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"[{author}]({author_url}) erstellte eine [Markierung]({tag_url}) „{tag}“"
|
"[{author}]({author_url}) erstellte eine [Markierung]({tag_url}) "
|
||||||
|
"„{tag}“{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:441
|
#: src/rc_formatters.py:441
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}"
|
"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}"
|
||||||
msgstr "[{author}]({author_url}) löschte eine [Markierung]({tag_url}) „{tag}“"
|
msgstr ""
|
||||||
|
"[{author}]({author_url}) löschte eine [Markierung]({tag_url}) "
|
||||||
|
"„{tag}“{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:443
|
#: src/rc_formatters.py:443
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed "
|
"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed "
|
||||||
"it from {count} revision or log entry{comment}"
|
"it from {count} revision or log entry{comment}"
|
||||||
|
@ -622,25 +625,27 @@ msgid_plural ""
|
||||||
"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed "
|
"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed "
|
||||||
"it from {count} revisions and/or log entries{comment}"
|
"it from {count} revisions and/or log entries{comment}"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
"[{author}]({author_url}) importierte [{article}]({article_url}) mit einer "
|
"[{author}]({author_url}) löschte die [Markierung]({tag_url}) „{tag}“ und "
|
||||||
"Version{comment}"
|
"entfernte diese von {count} Version oder Logeintrag{comment}"
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
"[{author}]({author_url}) importierte [{article}]({article_url}) mit {count} "
|
"[{author}]({author_url}) löschte die [Markierung]({tag_url}) „{tag}“ und "
|
||||||
"Versionen{comment}"
|
"entfernte diese von {count} Versionen und/oder Logeinträgen{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:449
|
#: src/rc_formatters.py:449
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}"
|
"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"[{author}]({author_url}) aktivierte eine [Markierung]({tag_url}) „{tag}“"
|
"[{author}]({author_url}) aktivierte eine [Markierung]({tag_url}) "
|
||||||
|
"„{tag}“{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:452
|
#: src/rc_formatters.py:452
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}"
|
"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"[{author}]({author_url}) deaktivierte eine [Markierung]({tag_url}) „{tag}“"
|
"[{author}]({author_url}) deaktivierte eine [Markierung]({tag_url}) "
|
||||||
|
"„{tag}“{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:454
|
#: src/rc_formatters.py:454
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
@ -658,7 +663,7 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}"
|
||||||
msgstr "[{author}]({author_url}) sperrte das Wiki *{wiki_name}*{comment}"
|
msgstr "[{author}]({author_url}) sperrte das Wiki *{wiki_name}*{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:462
|
#: src/rc_formatters.py:462
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"[{author}]({author_url}) modified namespace *{namespace_name}* on "
|
"[{author}]({author_url}) modified namespace *{namespace_name}* on "
|
||||||
"*{wiki_name}*{comment}"
|
"*{wiki_name}*{comment}"
|
||||||
|
@ -683,9 +688,11 @@ msgstr ""
|
||||||
"*{comment}"
|
"*{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:477
|
#: src/rc_formatters.py:477
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}"
|
msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}"
|
||||||
msgstr "[{author}]({author_url}) löschte das Wiki *{wiki_name}*{comment}"
|
msgstr ""
|
||||||
|
"[{author}]({author_url}) hat das Wiki *{wiki_name}* wiederhergestellt "
|
||||||
|
"{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:481
|
#: src/rc_formatters.py:481
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
@ -1303,33 +1310,32 @@ msgid "Replaced the Cargo table \"{table}\""
|
||||||
msgstr "Ersetzte die Cargo-Tabelle „{table}“"
|
msgstr "Ersetzte die Cargo-Tabelle „{table}“"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1121
|
#: src/rc_formatters.py:1121
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Created the tag \"{tag}\""
|
msgid "Created the tag \"{tag}\""
|
||||||
msgstr "Erstellte die Markierung „{tag}“"
|
msgstr "Erstellte die Markierung „{tag}“"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1125
|
#: src/rc_formatters.py:1125
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Deleted the tag \"{tag}\""
|
msgid "Deleted the tag \"{tag}\""
|
||||||
msgstr "Löschte die Markierung „{tag}“"
|
msgstr "Löschte die Markierung „{tag}“"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1127
|
#: src/rc_formatters.py:1127
|
||||||
#, fuzzy
|
|
||||||
msgid "Removed from"
|
msgid "Removed from"
|
||||||
msgstr "Entfernt"
|
msgstr "Entfernt von"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1127
|
#: src/rc_formatters.py:1127
|
||||||
msgid "{} revision or log entry"
|
msgid "{} revision or log entry"
|
||||||
msgid_plural "{} revisions and/or log entries"
|
msgid_plural "{} revisions and/or log entries"
|
||||||
msgstr[0] ""
|
msgstr[0] "{} Version oder Logeintrag"
|
||||||
msgstr[1] ""
|
msgstr[1] "{} Versionen und/oder Logeinträge"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1131
|
#: src/rc_formatters.py:1131
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Activated the tag \"{tag}\""
|
msgid "Activated the tag \"{tag}\""
|
||||||
msgstr "Aktivierte die Markierung „{tag}“"
|
msgstr "Aktivierte die Markierung „{tag}“"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1134
|
#: src/rc_formatters.py:1134
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Deactivated the tag \"{tag}\""
|
msgid "Deactivated the tag \"{tag}\""
|
||||||
msgstr "Deaktivierte die Markierung „{tag}“"
|
msgstr "Deaktivierte die Markierung „{tag}“"
|
||||||
|
|
||||||
|
@ -1348,7 +1354,7 @@ msgid "Locked a \"{wiki}\" wiki"
|
||||||
msgstr "Sperrte das Wiki „{wiki}“"
|
msgstr "Sperrte das Wiki „{wiki}“"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1147
|
#: src/rc_formatters.py:1147
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Modified \"{namespace_name}\" namespace"
|
msgid "Modified \"{namespace_name}\" namespace"
|
||||||
msgstr "Bearbeitete den Namensraum „{namespace_name}“"
|
msgstr "Bearbeitete den Namensraum „{namespace_name}“"
|
||||||
|
|
||||||
|
@ -1367,9 +1373,9 @@ msgid "Modified \"{usergroup_name}\" usergroup"
|
||||||
msgstr "Bearbeitete die Benutzergruppe „{usergroup_name}“"
|
msgstr "Bearbeitete die Benutzergruppe „{usergroup_name}“"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1160
|
#: src/rc_formatters.py:1160
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Undeleted a \"{wiki}\" wiki"
|
msgid "Undeleted a \"{wiki}\" wiki"
|
||||||
msgstr "Löschte das Wiki „{wiki}“"
|
msgstr "Das „{wiki}“ Wiki wiederhergestellt"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1163
|
#: src/rc_formatters.py:1163
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
|
Binary file not shown.
|
@ -2,199 +2,190 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-12-23 00:28+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: 2020-09-03 13:14+0200\n"
|
"PO-Revision-Date: 2021-05-21 18:18+0000\n"
|
||||||
"Last-Translator: MarkusRost <>\n"
|
"Last-Translator: MarkusRost <sukramxro@gmail.com>\n"
|
||||||
"Language-Team: German <https://weblate.frisk.space/projects/rcgcdw/main/de/"
|
"Language-Team: German <https://translate.wikibot.de/projects/rcgcdw/main/de/"
|
||||||
">\n"
|
">\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Poedit 2.4.1\n"
|
"X-Generator: Weblate 4.6\n"
|
||||||
"X-Loco-Source-Locale: de_DE\n"
|
"X-Loco-Source-Locale: de_DE\n"
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
"X-Loco-Parser: loco_parse_po\n"
|
"X-Loco-Parser: loco_parse_po\n"
|
||||||
|
|
||||||
#: src/rcgcdw.py:115 src/rcgcdw.py:117 src/rcgcdw.py:119 src/rcgcdw.py:121
|
#: src/rcgcdw.py:117
|
||||||
#: src/rcgcdw.py:123 src/rcgcdw.py:125 src/rcgcdw.py:127
|
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{value} (avg. {avg})"
|
msgid "{value} (avg. {avg})"
|
||||||
msgstr "{value} (vgl. {avg})"
|
msgstr "{value} (vgl. {avg})"
|
||||||
|
|
||||||
#: src/rcgcdw.py:147
|
#: src/rcgcdw.py:136
|
||||||
msgid "Daily overview"
|
msgid "Daily overview"
|
||||||
msgstr "Tägliche Übersicht"
|
msgstr "Tägliche Übersicht"
|
||||||
|
|
||||||
#: src/rcgcdw.py:154
|
#: src/rcgcdw.py:143
|
||||||
msgid "No activity"
|
msgid "No activity"
|
||||||
msgstr "Keine Aktivität"
|
msgstr "Keine Aktivität"
|
||||||
|
|
||||||
#: src/rcgcdw.py:178
|
#: src/rcgcdw.py:167
|
||||||
msgid " ({} action)"
|
msgid " ({} action)"
|
||||||
msgid_plural " ({} actions)"
|
msgid_plural " ({} actions)"
|
||||||
msgstr[0] " (eine Aktion)"
|
msgstr[0] " (eine Aktion)"
|
||||||
msgstr[1] " ({} Aktionen)"
|
msgstr[1] " ({} Aktionen)"
|
||||||
|
|
||||||
#: src/rcgcdw.py:180
|
#: src/rcgcdw.py:169
|
||||||
msgid " ({} edit)"
|
msgid " ({} edit)"
|
||||||
msgid_plural " ({} edits)"
|
msgid_plural " ({} edits)"
|
||||||
msgstr[0] " (eine Änderung)"
|
msgstr[0] " (eine Änderung)"
|
||||||
msgstr[1] " ({} Änderungen)"
|
msgstr[1] " ({} Änderungen)"
|
||||||
|
|
||||||
#: src/rcgcdw.py:185
|
#: src/rcgcdw.py:174
|
||||||
msgid " UTC ({} action)"
|
msgid " UTC ({} action)"
|
||||||
msgid_plural " UTC ({} actions)"
|
msgid_plural " UTC ({} actions)"
|
||||||
msgstr[0] " UTC (eine Aktion)"
|
msgstr[0] " UTC (eine Aktion)"
|
||||||
msgstr[1] " UTC ({} Aktionen)"
|
msgstr[1] " UTC ({} Aktionen)"
|
||||||
|
|
||||||
#: src/rcgcdw.py:187 src/rcgcdw.py:188 src/rcgcdw.py:192
|
#: src/rcgcdw.py:176 src/rcgcdw.py:179
|
||||||
msgid "But nobody came"
|
msgid "But nobody came"
|
||||||
msgstr "Keine Aktivität"
|
msgstr "Keine Aktivität"
|
||||||
|
|
||||||
#: src/rcgcdw.py:195
|
#: src/rcgcdw.py:183
|
||||||
msgid "Most active user"
|
msgid "Most active user"
|
||||||
msgid_plural "Most active users"
|
msgid_plural "Most active users"
|
||||||
msgstr[0] "Aktivster Benutzer"
|
msgstr[0] "Aktivster Benutzer"
|
||||||
msgstr[1] "Aktivste Benutzer"
|
msgstr[1] "Aktivste Benutzer"
|
||||||
|
|
||||||
#: src/rcgcdw.py:196
|
#: src/rcgcdw.py:184
|
||||||
msgid "Most edited article"
|
msgid "Most edited article"
|
||||||
msgid_plural "Most edited articles"
|
msgid_plural "Most edited articles"
|
||||||
msgstr[0] "Meist bearbeiteter Artikel"
|
msgstr[0] "Meist bearbeiteter Artikel"
|
||||||
msgstr[1] "Meist bearbeitete Artikel"
|
msgstr[1] "Meist bearbeitete Artikel"
|
||||||
|
|
||||||
#: src/rcgcdw.py:197
|
#: src/rcgcdw.py:185
|
||||||
msgid "Edits made"
|
msgid "Edits made"
|
||||||
msgstr "Bearbeitungen"
|
msgstr "Bearbeitungen"
|
||||||
|
|
||||||
#: src/rcgcdw.py:197
|
#: src/rcgcdw.py:185
|
||||||
msgid "New files"
|
msgid "New files"
|
||||||
msgstr "Neue Dateien"
|
msgstr "Neue Dateien"
|
||||||
|
|
||||||
#: src/rcgcdw.py:197
|
#: src/rcgcdw.py:186
|
||||||
msgid "Admin actions"
|
msgid "Admin actions"
|
||||||
msgstr "Admin-Aktionen"
|
msgstr "Admin-Aktionen"
|
||||||
|
|
||||||
#: src/rcgcdw.py:198
|
#: src/rcgcdw.py:186
|
||||||
msgid "Bytes changed"
|
msgid "Bytes changed"
|
||||||
msgstr "Bytes geändert"
|
msgstr "Bytes geändert"
|
||||||
|
|
||||||
#: src/rcgcdw.py:198
|
#: src/rcgcdw.py:187
|
||||||
msgid "New articles"
|
msgid "New articles"
|
||||||
msgstr "Neue Artikel"
|
msgstr "Neue Artikel"
|
||||||
|
|
||||||
#: src/rcgcdw.py:199
|
#: src/rcgcdw.py:187
|
||||||
msgid "Unique contributors"
|
msgid "Unique contributors"
|
||||||
msgstr "Einzelne Autoren"
|
msgstr "Einzelne Autoren"
|
||||||
|
|
||||||
#: src/rcgcdw.py:200
|
#: src/rcgcdw.py:188
|
||||||
msgid "Most active hour"
|
msgid "Most active hour"
|
||||||
msgid_plural "Most active hours"
|
msgid_plural "Most active hours"
|
||||||
msgstr[0] "Aktivste Stunde"
|
msgstr[0] "Aktivste Stunde"
|
||||||
msgstr[1] "Aktivste Stunden"
|
msgstr[1] "Aktivste Stunden"
|
||||||
|
|
||||||
#: src/rcgcdw.py:201
|
#: src/rcgcdw.py:189
|
||||||
msgid "Day score"
|
msgid "Day score"
|
||||||
msgstr "Tageswert"
|
msgstr "Tageswert"
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#: src/rcgcdw.py:223
|
||||||
msgid "director"
|
msgid "~~hidden~~"
|
||||||
msgstr "Direktor"
|
msgstr "~~versteckt~~"
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#: src/rcgcdw.py:225
|
||||||
msgid "bot"
|
msgid "No description provided"
|
||||||
msgstr "Bot"
|
msgstr "Keine Zusammenfassung angegeben"
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#: src/rcgcdw.py:228
|
||||||
msgid "editor"
|
msgid "hidden"
|
||||||
msgstr "editor"
|
msgstr "versteckt"
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#~ msgid "director"
|
||||||
msgid "directors"
|
#~ msgstr "Direktor"
|
||||||
msgstr "Direktor"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#~ msgid "bot"
|
||||||
msgid "sysop"
|
#~ msgstr "Bot"
|
||||||
msgstr "Administrator"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#~ msgid "editor"
|
||||||
msgid "bureaucrat"
|
#~ msgstr "editor"
|
||||||
msgstr "Bürokrat"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#~ msgid "directors"
|
||||||
msgid "reviewer"
|
#~ msgstr "Direktor"
|
||||||
msgstr "Prüfer"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "sysop"
|
||||||
msgid "autoreview"
|
#~ msgstr "Administrator"
|
||||||
msgstr "Passive Sichter"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "bureaucrat"
|
||||||
msgid "autopatrol"
|
#~ msgstr "Bürokrat"
|
||||||
msgstr "autopatrol"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "reviewer"
|
||||||
msgid "wiki_guardian"
|
#~ msgstr "Prüfer"
|
||||||
msgstr "Wiki Guardian"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "autoreview"
|
||||||
msgid "second"
|
#~ msgstr "Passive Sichter"
|
||||||
msgid_plural "seconds"
|
|
||||||
msgstr[0] "Sekunde"
|
|
||||||
msgstr[1] "Sekunden"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "autopatrol"
|
||||||
msgid "minute"
|
#~ msgstr "autopatrol"
|
||||||
msgid_plural "minutes"
|
|
||||||
msgstr[0] "Minute"
|
|
||||||
msgstr[1] "Minuten"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "wiki_guardian"
|
||||||
msgid "hour"
|
#~ msgstr "Wiki Guardian"
|
||||||
msgid_plural "hours"
|
|
||||||
msgstr[0] "Stunde"
|
|
||||||
msgstr[1] "Stunden"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "second"
|
||||||
msgid "day"
|
#~ msgid_plural "seconds"
|
||||||
msgid_plural "days"
|
#~ msgstr[0] "Sekunde"
|
||||||
msgstr[0] "Tag"
|
#~ msgstr[1] "Sekunden"
|
||||||
msgstr[1] "Tage"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "minute"
|
||||||
msgid "week"
|
#~ msgid_plural "minutes"
|
||||||
msgid_plural "weeks"
|
#~ msgstr[0] "Minute"
|
||||||
msgstr[0] "Woche"
|
#~ msgstr[1] "Minuten"
|
||||||
msgstr[1] "Wochen"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "hour"
|
||||||
msgid "month"
|
#~ msgid_plural "hours"
|
||||||
msgid_plural "months"
|
#~ msgstr[0] "Stunde"
|
||||||
msgstr[0] "Monat"
|
#~ msgstr[1] "Stunden"
|
||||||
msgstr[1] "Monate"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "day"
|
||||||
msgid "year"
|
#~ msgid_plural "days"
|
||||||
msgid_plural "years"
|
#~ msgstr[0] "Tag"
|
||||||
msgstr[0] "Jahr"
|
#~ msgstr[1] "Tage"
|
||||||
msgstr[1] "Jahre"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "week"
|
||||||
msgid "millennium"
|
#~ msgid_plural "weeks"
|
||||||
msgid_plural "millennia"
|
#~ msgstr[0] "Woche"
|
||||||
msgstr[0] "Jahrtausend"
|
#~ msgstr[1] "Wochen"
|
||||||
msgstr[1] "Jahrtausende"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "month"
|
||||||
msgid "decade"
|
#~ msgid_plural "months"
|
||||||
msgid_plural "decades"
|
#~ msgstr[0] "Monat"
|
||||||
msgstr[0] "Jahrzehnt"
|
#~ msgstr[1] "Monate"
|
||||||
msgstr[1] "Jahrzehnte"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "year"
|
||||||
msgid "century"
|
#~ msgid_plural "years"
|
||||||
msgid_plural "centuries"
|
#~ msgstr[0] "Jahr"
|
||||||
msgstr[0] "Jahrhundert"
|
#~ msgstr[1] "Jahre"
|
||||||
msgstr[1] "Jahrhunderte"
|
|
||||||
|
#~ msgid "millennium"
|
||||||
|
#~ msgid_plural "millennia"
|
||||||
|
#~ msgstr[0] "Jahrtausend"
|
||||||
|
#~ msgstr[1] "Jahrtausende"
|
||||||
|
|
||||||
|
#~ msgid "decade"
|
||||||
|
#~ msgid_plural "decades"
|
||||||
|
#~ msgstr[0] "Jahrzehnt"
|
||||||
|
#~ msgstr[1] "Jahrzehnte"
|
||||||
|
|
||||||
|
#~ msgid "century"
|
||||||
|
#~ msgid_plural "centuries"
|
||||||
|
#~ msgstr[0] "Jahrhundert"
|
||||||
|
#~ msgstr[1] "Jahrhunderte"
|
||||||
|
|
Binary file not shown.
|
@ -7,19 +7,25 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-12-23 00:28+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: 2020-11-20 09:22+0000\n"
|
"PO-Revision-Date: 2021-07-30 10:44+0000\n"
|
||||||
"Last-Translator: MarkusRost <sukramxro@gmail.com>\n"
|
"Last-Translator: MarkusRost <sukramxro@gmail.com>\n"
|
||||||
"Language-Team: German <https://weblate.frisk.space/projects/rcgcdw/redaction/"
|
"Language-Team: German <https://translate.wikibot.de/projects/rcgcdw/"
|
||||||
"de/>\n"
|
"redaction/de/>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.2.1\n"
|
"X-Generator: Weblate 4.6.2\n"
|
||||||
|
|
||||||
#: src/discord/redaction.py:62 src/discord/redaction.py:65
|
#: src/discord/redaction.py:77
|
||||||
#: src/discord/redaction.py:70
|
msgid "hidden"
|
||||||
msgid "Removed"
|
msgstr "versteckt"
|
||||||
msgstr "Versteckt"
|
|
||||||
|
#: src/discord/redaction.py:80 src/discord/redaction.py:85
|
||||||
|
msgid "~~hidden~~"
|
||||||
|
msgstr "~~versteckt~~"
|
||||||
|
|
||||||
|
#~ msgid "Removed"
|
||||||
|
#~ msgstr "Versteckt"
|
||||||
|
|
Binary file not shown.
BIN
locale/es/LC_MESSAGES/formatters.mo
Normal file
BIN
locale/es/LC_MESSAGES/formatters.mo
Normal file
Binary file not shown.
2013
locale/es/LC_MESSAGES/formatters.po
Normal file
2013
locale/es/LC_MESSAGES/formatters.po
Normal file
File diff suppressed because it is too large
Load diff
|
@ -7,11 +7,11 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-11-18 14:13+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: 2020-11-28 22:44+0000\n"
|
"PO-Revision-Date: 2020-11-28 22:44+0000\n"
|
||||||
"Last-Translator: Tamara Carvallo <carvallotamara@hotmail.com>\n"
|
"Last-Translator: Tamara Carvallo <carvallotamara@hotmail.com>\n"
|
||||||
"Language-Team: Spanish <https://weblate.frisk.space/projects/rcgcdw/misc/es/>"
|
"Language-Team: Spanish <https://weblate.frisk.space/projects/rcgcdw/misc/es/"
|
||||||
"\n"
|
">\n"
|
||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -71,7 +71,7 @@ msgstr "ID de Discord"
|
||||||
msgid "Battle.net handle"
|
msgid "Battle.net handle"
|
||||||
msgstr "Cuenta en Battle.net"
|
msgstr "Cuenta en Battle.net"
|
||||||
|
|
||||||
#: src/misc.py:114
|
#: src/misc.py:139
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"__And more__"
|
"__And more__"
|
||||||
|
@ -79,10 +79,10 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"__Y más__"
|
"__Y más__"
|
||||||
|
|
||||||
#: src/misc.py:271
|
#: src/misc.py:328
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Desconocido"
|
msgstr "Desconocido"
|
||||||
|
|
||||||
#: src/misc.py:273
|
#: src/misc.py:330
|
||||||
msgid "unknown"
|
msgid "unknown"
|
||||||
msgstr "desconocido"
|
msgstr "desconocido"
|
||||||
|
|
|
@ -7,11 +7,11 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-11-18 14:13+0100\n"
|
"POT-Creation-Date: 2021-04-14 16:24+0200\n"
|
||||||
"PO-Revision-Date: 2020-12-06 14:17+0000\n"
|
"PO-Revision-Date: 2020-12-06 14:17+0000\n"
|
||||||
"Last-Translator: Tamara Carvallo <carvallotamara@hotmail.com>\n"
|
"Last-Translator: Tamara Carvallo <carvallotamara@hotmail.com>\n"
|
||||||
"Language-Team: Spanish <https://translate.wikibot.de/projects/rcgcdw/rc/es/>"
|
"Language-Team: Spanish <https://translate.wikibot.de/projects/rcgcdw/rc/es/"
|
||||||
"\n"
|
">\n"
|
||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -19,24 +19,24 @@ msgstr ""
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.2.1\n"
|
"X-Generator: Weblate 4.2.1\n"
|
||||||
|
|
||||||
#: src/rc.py:319
|
#: src/rc.py:322
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{wiki} seems to be down or unreachable."
|
msgid "{wiki} seems to be down or unreachable."
|
||||||
msgstr "{wiki} parece estar caído o no alcanzable."
|
msgstr "{wiki} parece estar caído o no alcanzable."
|
||||||
|
|
||||||
#: src/rc.py:320 src/rc.py:332
|
#: src/rc.py:323 src/rc.py:335
|
||||||
msgid "Connection status"
|
msgid "Connection status"
|
||||||
msgstr "Estado de la conexión"
|
msgstr "Estado de la conexión"
|
||||||
|
|
||||||
#: src/rc.py:330
|
#: src/rc.py:333
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Connection to {wiki} seems to be stable now."
|
msgid "Connection to {wiki} seems to be stable now."
|
||||||
msgstr "La conexión a {wiki} parece estar estable ahora."
|
msgstr "La conexión a {wiki} parece estar estable ahora."
|
||||||
|
|
||||||
#: src/rc.py:401
|
#: src/rc.py:404
|
||||||
msgid "~~hidden~~"
|
msgid "~~hidden~~"
|
||||||
msgstr "~~oculto~~"
|
msgstr "~~oculto~~"
|
||||||
|
|
||||||
#: src/rc.py:405
|
#: src/rc.py:408
|
||||||
msgid "hidden"
|
msgid "hidden"
|
||||||
msgstr "oculto"
|
msgstr "oculto"
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-11-30 11:58+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: 2020-12-06 14:17+0000\n"
|
"PO-Revision-Date: 2020-12-06 14:17+0000\n"
|
||||||
"Last-Translator: Tamara Carvallo <carvallotamara@hotmail.com>\n"
|
"Last-Translator: Tamara Carvallo <carvallotamara@hotmail.com>\n"
|
||||||
"Language-Team: Spanish <https://translate.wikibot.de/projects/rcgcdw/"
|
"Language-Team: Spanish <https://translate.wikibot.de/projects/rcgcdw/"
|
||||||
|
@ -19,7 +19,13 @@ msgstr ""
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.2.1\n"
|
"X-Generator: Weblate 4.2.1\n"
|
||||||
|
|
||||||
#: src/discord/redaction.py:59 src/discord/redaction.py:62
|
#: src/discord/redaction.py:77
|
||||||
#: src/discord/redaction.py:67
|
msgid "hidden"
|
||||||
msgid "Removed"
|
msgstr ""
|
||||||
msgstr "Eliminado"
|
|
||||||
|
#: src/discord/redaction.py:80 src/discord/redaction.py:85
|
||||||
|
msgid "~~hidden~~"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Removed"
|
||||||
|
#~ msgstr "Eliminado"
|
||||||
|
|
Binary file not shown.
|
@ -1,178 +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: 2020-12-23 00:28+0100\n"
|
|
||||||
"PO-Revision-Date: 2020-07-04 01:08+0200\n"
|
|
||||||
"Last-Translator: \n"
|
|
||||||
"Language-Team: \n"
|
|
||||||
"Language: fr\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Generator: Poedit 2.3\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:21 src/discussion_formatters.py:56
|
|
||||||
#: src/discussion_formatters.py:67 src/discussion_formatters.py:95
|
|
||||||
#: src/discussion_formatters.py:163 src/discussion_formatters.py:176
|
|
||||||
msgid "unknown"
|
|
||||||
msgstr "inconnu"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:27 src/discussion_formatters.py:102
|
|
||||||
msgid "Unregistered user"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:39
|
|
||||||
#, fuzzy, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/"
|
|
||||||
"{creatorId}>) dans {forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:42
|
|
||||||
#, fuzzy, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/"
|
|
||||||
"{creatorId}>) dans {forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:45
|
|
||||||
#, fuzzy, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/"
|
|
||||||
"{creatorId}>) dans {forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:54
|
|
||||||
#, fuzzy, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) "
|
|
||||||
"to [{title}](<{url}f/p/{threadId}>) in {forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[Réponse](<{url}f/p/{threadId}/r/{postId}>) de [{author}](<{url}f/u/"
|
|
||||||
"{creatorId}>) à [{title}](<{url}f/p/{threadId}>) dans {forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:61
|
|
||||||
#, fuzzy, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
"Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/"
|
|
||||||
"{creatorId}>) dans {forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:64
|
|
||||||
#, fuzzy, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]"
|
|
||||||
"(<{url}wiki/Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
"Création de [{title}](<{url}f/p/{threadId}>) par [{author}](<{url}f/u/"
|
|
||||||
"{creatorId}>) dans {forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:72
|
|
||||||
#, fuzzy, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) "
|
|
||||||
"on [{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[Réponse](<{url}f/p/{threadId}/r/{postId}>) de [{author}](<{url}f/u/"
|
|
||||||
"{creatorId}>) à [{title}](<{url}f/p/{threadId}>) dans {forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:78
|
|
||||||
#, fuzzy, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}"
|
|
||||||
"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on "
|
|
||||||
"[{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[Réponse](<{url}f/p/{threadId}/r/{postId}>) de [{author}](<{url}f/u/"
|
|
||||||
"{creatorId}>) à [{title}](<{url}f/p/{threadId}>) dans {forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:86
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"Unknown event `{event}` by [{author}]({author_url}), report it on the "
|
|
||||||
"[support server](<{support}>)."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:123
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\""
|
|
||||||
msgstr "Création de {title}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:127
|
|
||||||
#, fuzzy, python-brace-format
|
|
||||||
msgid "Created a poll \"{title}\""
|
|
||||||
msgstr "Création de {title}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:134
|
|
||||||
msgid "Option {}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:135
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "__[View image]({image_url})__"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:139
|
|
||||||
#, fuzzy, python-brace-format
|
|
||||||
msgid "Created a quiz \"{title}\""
|
|
||||||
msgstr "Création de {title}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:155 src/discussion_formatters.py:157
|
|
||||||
msgid "Tags"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:155
|
|
||||||
msgid "{} tags"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:160
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\""
|
|
||||||
msgstr "A répondu à « {title} »"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:169
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr "Création de « {title} » sur le mur de {user}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:173
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr "Réponse à « {title} » sur le mur de {user}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:180
|
|
||||||
#, fuzzy, python-brace-format
|
|
||||||
msgid "Commented on {article}"
|
|
||||||
msgstr "Création de {title}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:184
|
|
||||||
#, fuzzy, python-brace-format
|
|
||||||
msgid "Replied to a comment on {article}"
|
|
||||||
msgstr "A répondu à « {title} »"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:188
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Unknown event `{event}`"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:194 src/discussion_formatters.py:196
|
|
||||||
msgid "Report this on the support server"
|
|
||||||
msgstr ""
|
|
BIN
locale/fr/LC_MESSAGES/formatters.mo
Normal file
BIN
locale/fr/LC_MESSAGES/formatters.mo
Normal file
Binary file not shown.
1811
locale/fr/LC_MESSAGES/formatters.po
Normal file
1811
locale/fr/LC_MESSAGES/formatters.po
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
@ -6,7 +6,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-11-28 23:45+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: 2020-03-17 21:40+0100\n"
|
"PO-Revision-Date: 2020-03-17 21:40+0100\n"
|
||||||
"Last-Translator: Frisk <>\n"
|
"Last-Translator: Frisk <>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
|
@ -72,7 +72,7 @@ msgstr ""
|
||||||
msgid "Battle.net handle"
|
msgid "Battle.net handle"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/misc.py:119
|
#: src/misc.py:139
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"__And more__"
|
"__And more__"
|
||||||
|
@ -80,11 +80,11 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"__Et plus__"
|
"__Et plus__"
|
||||||
|
|
||||||
#: src/misc.py:276
|
#: src/misc.py:328
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Inconnu"
|
msgstr "Inconnu"
|
||||||
|
|
||||||
#: src/misc.py:278
|
#: src/misc.py:330
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "unknown"
|
msgid "unknown"
|
||||||
msgstr "Inconnu"
|
msgstr "Inconnu"
|
||||||
|
|
Binary file not shown.
|
@ -7,17 +7,17 @@ msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-12-23 00:28+0100\n"
|
"POT-Creation-Date: 2020-12-23 00:28+0100\n"
|
||||||
"PO-Revision-Date: 2020-03-17 21:40+0100\n"
|
"PO-Revision-Date: 2021-05-06 14:10+0000\n"
|
||||||
"Last-Translator: Frisk <>\n"
|
"Last-Translator: Arnaud0865 <Arnaud2.8583@gmail.com>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: French <https://translate.wikibot.de/projects/rcgcdw/rc/fr/>\n"
|
||||||
"Language: fr\n"
|
"Language: fr\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
|
"X-Generator: Weblate 4.6\n"
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
"X-Generator: Poedit 2.3\n"
|
|
||||||
"X-Poedit-Basepath: ../../..\n"
|
"X-Poedit-Basepath: ../../..\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
|
||||||
"X-Poedit-SearchPath-0: rcgcdw.pot\n"
|
"X-Poedit-SearchPath-0: rcgcdw.pot\n"
|
||||||
|
|
||||||
#: src/rc.py:322
|
#: src/rc.py:322
|
||||||
|
@ -36,8 +36,8 @@ msgstr "La connexion avec {wiki} semble stable maintenant."
|
||||||
|
|
||||||
#: src/rc.py:404
|
#: src/rc.py:404
|
||||||
msgid "~~hidden~~"
|
msgid "~~hidden~~"
|
||||||
msgstr ""
|
msgstr "~~caché~~"
|
||||||
|
|
||||||
#: src/rc.py:408
|
#: src/rc.py:408
|
||||||
msgid "hidden"
|
msgid "hidden"
|
||||||
msgstr ""
|
msgstr "caché"
|
||||||
|
|
Binary file not shown.
|
@ -7,17 +7,18 @@ msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2021-04-14 16:24+0200\n"
|
"POT-Creation-Date: 2021-04-14 16:24+0200\n"
|
||||||
"PO-Revision-Date: 2020-03-17 21:40+0100\n"
|
"PO-Revision-Date: 2021-05-06 14:10+0000\n"
|
||||||
"Last-Translator: Frisk <>\n"
|
"Last-Translator: magiczocker <jan-frederik-kriete@t-online.de>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: French <https://translate.wikibot.de/projects/rcgcdw/"
|
||||||
|
"rc_formatters/fr/>\n"
|
||||||
"Language: fr\n"
|
"Language: fr\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
|
"X-Generator: Weblate 4.6\n"
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
"X-Generator: Poedit 2.3\n"
|
|
||||||
"X-Poedit-Basepath: ../../..\n"
|
"X-Poedit-Basepath: ../../..\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
|
||||||
"X-Poedit-SearchPath-0: rcgcdw.pot\n"
|
"X-Poedit-SearchPath-0: rcgcdw.pot\n"
|
||||||
|
|
||||||
#: src/rc_formatters.py:28
|
#: src/rc_formatters.py:28
|
||||||
|
@ -1287,9 +1288,9 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rc_formatters.py:1195
|
#: src/rc_formatters.py:1195
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Completed deletion of translation page \"{article}\""
|
msgid "Completed deletion of translation page \"{article}\""
|
||||||
msgstr "Modification de la visibilité d'une révision de la page {article} "
|
msgstr "Modification de la visibilité d'une révision de la page {article}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1198
|
#: src/rc_formatters.py:1198
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
|
|
@ -6,7 +6,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-12-23 00:28+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: 2020-12-13 14:30+0000\n"
|
"PO-Revision-Date: 2020-12-13 14:30+0000\n"
|
||||||
"Last-Translator: magiczocker <jan-frederik-kriete@t-online.de>\n"
|
"Last-Translator: magiczocker <jan-frederik-kriete@t-online.de>\n"
|
||||||
"Language-Team: French <https://translate.wikibot.de/projects/rcgcdw/main/fr/"
|
"Language-Team: French <https://translate.wikibot.de/projects/rcgcdw/main/fr/"
|
||||||
|
@ -21,184 +21,175 @@ msgstr ""
|
||||||
"X-Poedit-Basepath: ../../..\n"
|
"X-Poedit-Basepath: ../../..\n"
|
||||||
"X-Poedit-SearchPath-0: rcgcdw.pot\n"
|
"X-Poedit-SearchPath-0: rcgcdw.pot\n"
|
||||||
|
|
||||||
#: src/rcgcdw.py:115 src/rcgcdw.py:117 src/rcgcdw.py:119 src/rcgcdw.py:121
|
#: src/rcgcdw.py:117
|
||||||
#: src/rcgcdw.py:123 src/rcgcdw.py:125 src/rcgcdw.py:127
|
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{value} (avg. {avg})"
|
msgid "{value} (avg. {avg})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:147
|
#: src/rcgcdw.py:136
|
||||||
msgid "Daily overview"
|
msgid "Daily overview"
|
||||||
msgstr "Résumé de la journée"
|
msgstr "Résumé de la journée"
|
||||||
|
|
||||||
#: src/rcgcdw.py:154
|
#: src/rcgcdw.py:143
|
||||||
msgid "No activity"
|
msgid "No activity"
|
||||||
msgstr "Aucune activité"
|
msgstr "Aucune activité"
|
||||||
|
|
||||||
#: src/rcgcdw.py:178
|
#: src/rcgcdw.py:167
|
||||||
msgid " ({} action)"
|
msgid " ({} action)"
|
||||||
msgid_plural " ({} actions)"
|
msgid_plural " ({} actions)"
|
||||||
msgstr[0] " ({} action)"
|
msgstr[0] " ({} action)"
|
||||||
msgstr[1] " ({} actions)"
|
msgstr[1] " ({} actions)"
|
||||||
|
|
||||||
#: src/rcgcdw.py:180
|
#: src/rcgcdw.py:169
|
||||||
msgid " ({} edit)"
|
msgid " ({} edit)"
|
||||||
msgid_plural " ({} edits)"
|
msgid_plural " ({} edits)"
|
||||||
msgstr[0] " ({} modification)"
|
msgstr[0] " ({} modification)"
|
||||||
msgstr[1] " ({} modifications)"
|
msgstr[1] " ({} modifications)"
|
||||||
|
|
||||||
#: src/rcgcdw.py:185
|
#: src/rcgcdw.py:174
|
||||||
msgid " UTC ({} action)"
|
msgid " UTC ({} action)"
|
||||||
msgid_plural " UTC ({} actions)"
|
msgid_plural " UTC ({} actions)"
|
||||||
msgstr[0] " UTC ({} action)"
|
msgstr[0] " UTC ({} action)"
|
||||||
msgstr[1] " UTC ({} actions)"
|
msgstr[1] " UTC ({} actions)"
|
||||||
|
|
||||||
#: src/rcgcdw.py:187 src/rcgcdw.py:188 src/rcgcdw.py:192
|
#: src/rcgcdw.py:176 src/rcgcdw.py:179
|
||||||
msgid "But nobody came"
|
msgid "But nobody came"
|
||||||
msgstr "Aucune activité"
|
msgstr "Aucune activité"
|
||||||
|
|
||||||
#: src/rcgcdw.py:195
|
#: src/rcgcdw.py:183
|
||||||
msgid "Most active user"
|
msgid "Most active user"
|
||||||
msgid_plural "Most active users"
|
msgid_plural "Most active users"
|
||||||
msgstr[0] "Membre le plus actif"
|
msgstr[0] "Membre le plus actif"
|
||||||
msgstr[1] "Membres les plus actifs"
|
msgstr[1] "Membres les plus actifs"
|
||||||
|
|
||||||
#: src/rcgcdw.py:196
|
#: src/rcgcdw.py:184
|
||||||
msgid "Most edited article"
|
msgid "Most edited article"
|
||||||
msgid_plural "Most edited articles"
|
msgid_plural "Most edited articles"
|
||||||
msgstr[0] "Article le plus modifié"
|
msgstr[0] "Article le plus modifié"
|
||||||
msgstr[1] "Articles les plus modifiés"
|
msgstr[1] "Articles les plus modifiés"
|
||||||
|
|
||||||
#: src/rcgcdw.py:197
|
#: src/rcgcdw.py:185
|
||||||
msgid "Edits made"
|
msgid "Edits made"
|
||||||
msgstr "Modifications effectuées"
|
msgstr "Modifications effectuées"
|
||||||
|
|
||||||
#: src/rcgcdw.py:197
|
#: src/rcgcdw.py:185
|
||||||
msgid "New files"
|
msgid "New files"
|
||||||
msgstr "Nouveaux fichiers"
|
msgstr "Nouveaux fichiers"
|
||||||
|
|
||||||
#: src/rcgcdw.py:197
|
#: src/rcgcdw.py:186
|
||||||
msgid "Admin actions"
|
msgid "Admin actions"
|
||||||
msgstr "Actions d'administrateur"
|
msgstr "Actions d'administrateur"
|
||||||
|
|
||||||
#: src/rcgcdw.py:198
|
#: src/rcgcdw.py:186
|
||||||
msgid "Bytes changed"
|
msgid "Bytes changed"
|
||||||
msgstr "Octets modifiés"
|
msgstr "Octets modifiés"
|
||||||
|
|
||||||
#: src/rcgcdw.py:198
|
#: src/rcgcdw.py:187
|
||||||
msgid "New articles"
|
msgid "New articles"
|
||||||
msgstr "Nouveaux articles"
|
msgstr "Nouveaux articles"
|
||||||
|
|
||||||
#: src/rcgcdw.py:199
|
#: src/rcgcdw.py:187
|
||||||
msgid "Unique contributors"
|
msgid "Unique contributors"
|
||||||
msgstr "Contributeurs uniques"
|
msgstr "Contributeurs uniques"
|
||||||
|
|
||||||
#: src/rcgcdw.py:200
|
#: src/rcgcdw.py:188
|
||||||
msgid "Most active hour"
|
msgid "Most active hour"
|
||||||
msgid_plural "Most active hours"
|
msgid_plural "Most active hours"
|
||||||
msgstr[0] "Heure la plus active"
|
msgstr[0] "Heure la plus active"
|
||||||
msgstr[1] "Heures les plus actives"
|
msgstr[1] "Heures les plus actives"
|
||||||
|
|
||||||
#: src/rcgcdw.py:201
|
#: src/rcgcdw.py:189
|
||||||
msgid "Day score"
|
msgid "Day score"
|
||||||
msgstr "Score du jour"
|
msgstr "Score du jour"
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#: src/rcgcdw.py:223
|
||||||
msgid "director"
|
msgid "~~hidden~~"
|
||||||
msgstr "Directeur"
|
msgstr ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#: src/rcgcdw.py:225
|
||||||
msgid "bot"
|
msgid "No description provided"
|
||||||
msgstr "Robot"
|
msgstr ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#: src/rcgcdw.py:228
|
||||||
msgid "editor"
|
msgid "hidden"
|
||||||
msgstr "editor"
|
msgstr ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#~ msgid "director"
|
||||||
msgid "directors"
|
#~ msgstr "Directeur"
|
||||||
msgstr "Directeur"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#~ msgid "bot"
|
||||||
msgid "sysop"
|
#~ msgstr "Robot"
|
||||||
msgstr "Administrateur"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#~ msgid "editor"
|
||||||
msgid "bureaucrat"
|
#~ msgstr "editor"
|
||||||
msgstr "Bureaucrate"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#~ msgid "directors"
|
||||||
msgid "reviewer"
|
#~ msgstr "Directeur"
|
||||||
msgstr "reviewer"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "sysop"
|
||||||
msgid "autoreview"
|
#~ msgstr "Administrateur"
|
||||||
msgstr "autoreview"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "bureaucrat"
|
||||||
msgid "autopatrol"
|
#~ msgstr "Bureaucrate"
|
||||||
msgstr "autopatrol"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "reviewer"
|
||||||
msgid "wiki_guardian"
|
#~ msgstr "reviewer"
|
||||||
msgstr "Gardien du wiki"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "autoreview"
|
||||||
msgid "second"
|
#~ msgstr "autoreview"
|
||||||
msgid_plural "seconds"
|
|
||||||
msgstr[0] "seconde"
|
|
||||||
msgstr[1] "secondes"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "autopatrol"
|
||||||
msgid "minute"
|
#~ msgstr "autopatrol"
|
||||||
msgid_plural "minutes"
|
|
||||||
msgstr[0] "minute"
|
|
||||||
msgstr[1] "minutes"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "wiki_guardian"
|
||||||
msgid "hour"
|
#~ msgstr "Gardien du wiki"
|
||||||
msgid_plural "hours"
|
|
||||||
msgstr[0] "heure"
|
|
||||||
msgstr[1] "heures"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "second"
|
||||||
msgid "day"
|
#~ msgid_plural "seconds"
|
||||||
msgid_plural "days"
|
#~ msgstr[0] "seconde"
|
||||||
msgstr[0] "jour"
|
#~ msgstr[1] "secondes"
|
||||||
msgstr[1] "jours"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "minute"
|
||||||
msgid "week"
|
#~ msgid_plural "minutes"
|
||||||
msgid_plural "weeks"
|
#~ msgstr[0] "minute"
|
||||||
msgstr[0] "semaine"
|
#~ msgstr[1] "minutes"
|
||||||
msgstr[1] "semaines"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "hour"
|
||||||
msgid "month"
|
#~ msgid_plural "hours"
|
||||||
msgid_plural "months"
|
#~ msgstr[0] "heure"
|
||||||
msgstr[0] "mois"
|
#~ msgstr[1] "heures"
|
||||||
msgstr[1] "mois"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "day"
|
||||||
msgid "year"
|
#~ msgid_plural "days"
|
||||||
msgid_plural "years"
|
#~ msgstr[0] "jour"
|
||||||
msgstr[0] "année"
|
#~ msgstr[1] "jours"
|
||||||
msgstr[1] "années"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "week"
|
||||||
msgid "millennium"
|
#~ msgid_plural "weeks"
|
||||||
msgid_plural "millennia"
|
#~ msgstr[0] "semaine"
|
||||||
msgstr[0] "millénaire"
|
#~ msgstr[1] "semaines"
|
||||||
msgstr[1] "millénaires"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "month"
|
||||||
msgid "decade"
|
#~ msgid_plural "months"
|
||||||
msgid_plural "decades"
|
#~ msgstr[0] "mois"
|
||||||
msgstr[0] "décennie"
|
#~ msgstr[1] "mois"
|
||||||
msgstr[1] "décennies"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "year"
|
||||||
msgid "century"
|
#~ msgid_plural "years"
|
||||||
msgid_plural "centuries"
|
#~ msgstr[0] "année"
|
||||||
msgstr[0] "centenaire"
|
#~ msgstr[1] "années"
|
||||||
msgstr[1] "centenaires"
|
|
||||||
|
#~ msgid "millennium"
|
||||||
|
#~ msgid_plural "millennia"
|
||||||
|
#~ msgstr[0] "millénaire"
|
||||||
|
#~ msgstr[1] "millénaires"
|
||||||
|
|
||||||
|
#~ msgid "decade"
|
||||||
|
#~ msgid_plural "decades"
|
||||||
|
#~ msgstr[0] "décennie"
|
||||||
|
#~ msgstr[1] "décennies"
|
||||||
|
|
||||||
|
#~ msgid "century"
|
||||||
|
#~ msgid_plural "centuries"
|
||||||
|
#~ msgstr[0] "centenaire"
|
||||||
|
#~ msgstr[1] "centenaires"
|
||||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-12-23 00:28+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: 2021-04-14 14:22+0000\n"
|
"PO-Revision-Date: 2021-04-14 14:22+0000\n"
|
||||||
"Last-Translator: Arnaud0865 <Arnaud2.8583@gmail.com>\n"
|
"Last-Translator: Arnaud0865 <Arnaud2.8583@gmail.com>\n"
|
||||||
"Language-Team: French <https://translate.wikibot.de/projects/rcgcdw/"
|
"Language-Team: French <https://translate.wikibot.de/projects/rcgcdw/"
|
||||||
|
@ -19,7 +19,13 @@ msgstr ""
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 4.4.2\n"
|
"X-Generator: Weblate 4.4.2\n"
|
||||||
|
|
||||||
#: src/discord/redaction.py:62 src/discord/redaction.py:65
|
#: src/discord/redaction.py:77
|
||||||
#: src/discord/redaction.py:70
|
msgid "hidden"
|
||||||
msgid "Removed"
|
msgstr ""
|
||||||
msgstr "Retiré"
|
|
||||||
|
#: src/discord/redaction.py:80 src/discord/redaction.py:85
|
||||||
|
msgid "~~hidden~~"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Removed"
|
||||||
|
#~ msgstr "Retiré"
|
||||||
|
|
Binary file not shown.
|
@ -1,185 +0,0 @@
|
||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
||||||
# This file is distributed under the same license as the RcGcDw package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: RcGcDw\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2020-12-23 00:28+0100\n"
|
|
||||||
"PO-Revision-Date: 2020-12-13 14:30+0000\n"
|
|
||||||
"Last-Translator: MarkusRost <sukramxro@gmail.com>\n"
|
|
||||||
"Language-Team: Hindi <https://translate.wikibot.de/projects/rcgcdw/"
|
|
||||||
"discussion_formatters-1/hi/>\n"
|
|
||||||
"Language: hi\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
|
||||||
"X-Generator: Weblate 4.2.1\n"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:21 src/discussion_formatters.py:56
|
|
||||||
#: src/discussion_formatters.py:67 src/discussion_formatters.py:95
|
|
||||||
#: src/discussion_formatters.py:163 src/discussion_formatters.py:176
|
|
||||||
msgid "unknown"
|
|
||||||
msgstr "अनजान"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:27 src/discussion_formatters.py:102
|
|
||||||
msgid "Unregistered user"
|
|
||||||
msgstr "अनरेजिसटर्ड सदस्य"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:39
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) ने {forumName} में [{title}](<{url}f/p/{threadId}>) "
|
|
||||||
"बनाया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:42
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) ने {forumName} में पॉल [{title}](<{url}f/p/{threadId}"
|
|
||||||
">) बनाया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:45
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) ने {forumName} में क्विज़ [{title}](<{url}f/p/{threadId}"
|
|
||||||
">) बनाया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:54
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) "
|
|
||||||
"to [{title}](<{url}f/p/{threadId}>) in {forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) ने {forumName} में [{title}](<{url}f/p/{threadId}>) पर "
|
|
||||||
"[जवाब](<{url}f/p/{threadId}/r/{postId}>) दिया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:61
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) ने [{user} के मैसेज वॉल](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}>) पर [{title}](<{url}wiki/Message_Wall:{user_wall}?"
|
|
||||||
"threadId={threadId}>) बनाया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:64
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]"
|
|
||||||
"(<{url}wiki/Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) ने [{user} के मैसेज वॉल](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}>) के [{title}](<{url}wiki/Message_Wall:{user_wall}?"
|
|
||||||
"threadId={threadId}>) पर [जवाब](<{url}wiki/Message_Wall:{user_wall}?"
|
|
||||||
"threadId={threadId}#{replyId}>) दिया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:72
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) "
|
|
||||||
"on [{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) ने [{article}](<{url}>) पर [कमेंट](<{url}?"
|
|
||||||
"commentId={commentId}>) किया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:78
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}"
|
|
||||||
"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on "
|
|
||||||
"[{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) ने [{article}](<{url}>) के एक [कमेंट](<{url}?"
|
|
||||||
"commentId={commentId}>) पर [जवाब](<{url}?commentId={commentId}"
|
|
||||||
"&replyId={replyId}>) दिया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:86
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"Unknown event `{event}` by [{author}]({author_url}), report it on the "
|
|
||||||
"[support server](<{support}>)."
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) द्वारा अनजान घटना `{event}`, [सहायता सर्वर](<{support}"
|
|
||||||
">) पर रिपोर्ट करें।"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:123
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\""
|
|
||||||
msgstr "\"{title}\" बनाया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:127
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a poll \"{title}\""
|
|
||||||
msgstr "पॉल \"{title}\" बनाया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:134
|
|
||||||
msgid "Option {}"
|
|
||||||
msgstr "विकल्प {}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:135
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "__[View image]({image_url})__"
|
|
||||||
msgstr "__[चित्र देखें]({image_url})__"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:139
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a quiz \"{title}\""
|
|
||||||
msgstr "एक क्विज़ \"{title}\" बनाया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:155 src/discussion_formatters.py:157
|
|
||||||
msgid "Tags"
|
|
||||||
msgstr "टैग"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:155
|
|
||||||
msgid "{} tags"
|
|
||||||
msgstr "{} टैग"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:160
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\""
|
|
||||||
msgstr "\"{title}\" पर जवाब दिया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:169
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr "{user} के मैसेज वॉल पर \"{title}\" बनाया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:173
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr "{user} के मैसेज वॉल के \"{title}\" पर जवाब दिया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:180
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Commented on {article}"
|
|
||||||
msgstr "{article} पर कमेंट किया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:184
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to a comment on {article}"
|
|
||||||
msgstr "{article} के एक कमेंट पर जवाब दिया"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:188
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Unknown event `{event}`"
|
|
||||||
msgstr "अनजान घटना `{event}`"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:194 src/discussion_formatters.py:196
|
|
||||||
msgid "Report this on the support server"
|
|
||||||
msgstr "इसे सहायता सर्वर पर रिपोर्ट करें"
|
|
BIN
locale/hi/LC_MESSAGES/formatters.mo
Normal file
BIN
locale/hi/LC_MESSAGES/formatters.mo
Normal file
Binary file not shown.
2096
locale/hi/LC_MESSAGES/formatters.po
Normal file
2096
locale/hi/LC_MESSAGES/formatters.po
Normal file
File diff suppressed because it is too large
Load diff
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-11-29 00:05+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: 2020-11-25 10:16+0000\n"
|
"PO-Revision-Date: 2020-11-25 10:16+0000\n"
|
||||||
"Last-Translator: Creeper <thisisacreeper0101@gmail.com>\n"
|
"Last-Translator: Creeper <thisisacreeper0101@gmail.com>\n"
|
||||||
"Language-Team: Hindi <https://weblate.frisk.space/projects/rcgcdw/misc/hi/>\n"
|
"Language-Team: Hindi <https://weblate.frisk.space/projects/rcgcdw/misc/hi/>\n"
|
||||||
|
@ -70,7 +70,7 @@ msgstr "डिस्कॉर्ड अकाउंट"
|
||||||
msgid "Battle.net handle"
|
msgid "Battle.net handle"
|
||||||
msgstr "Battle.net अकाउंट"
|
msgstr "Battle.net अकाउंट"
|
||||||
|
|
||||||
#: src/misc.py:119
|
#: src/misc.py:139
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"__And more__"
|
"__And more__"
|
||||||
|
@ -78,10 +78,10 @@ msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"__और काफी कुछ__"
|
"__और काफी कुछ__"
|
||||||
|
|
||||||
#: src/misc.py:276
|
#: src/misc.py:328
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "अनजान"
|
msgstr "अनजान"
|
||||||
|
|
||||||
#: src/misc.py:278
|
#: src/misc.py:330
|
||||||
msgid "unknown"
|
msgid "unknown"
|
||||||
msgstr "अनजान"
|
msgstr "अनजान"
|
||||||
|
|
Binary file not shown.
|
@ -8,7 +8,7 @@ msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2021-04-14 16:24+0200\n"
|
"POT-Creation-Date: 2021-04-14 16:24+0200\n"
|
||||||
"PO-Revision-Date: 2020-12-30 13:26+0000\n"
|
"PO-Revision-Date: 2021-05-06 14:10+0000\n"
|
||||||
"Last-Translator: Creeper <thisisacreeper0101@gmail.com>\n"
|
"Last-Translator: Creeper <thisisacreeper0101@gmail.com>\n"
|
||||||
"Language-Team: Hindi <https://translate.wikibot.de/projects/rcgcdw/"
|
"Language-Team: Hindi <https://translate.wikibot.de/projects/rcgcdw/"
|
||||||
"rc_formatters/hi/>\n"
|
"rc_formatters/hi/>\n"
|
||||||
|
@ -17,7 +17,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 4.2.1\n"
|
"X-Generator: Weblate 4.6\n"
|
||||||
|
|
||||||
#: src/rc_formatters.py:28
|
#: src/rc_formatters.py:28
|
||||||
msgid "None"
|
msgid "None"
|
||||||
|
@ -593,19 +593,22 @@ msgid "[{author}]({author_url}) replaced the Cargo table \"{table}\""
|
||||||
msgstr "[{author}]({author_url}) ने कार्गो टेबल \"{table}\" को बदल दिया"
|
msgstr "[{author}]({author_url}) ने कार्गो टेबल \"{table}\" को बदल दिया"
|
||||||
|
|
||||||
#: src/rc_formatters.py:436
|
#: src/rc_formatters.py:436
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}"
|
"[{author}]({author_url}) created the [tag]({tag_url}) \"{tag}\"{comment}"
|
||||||
msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" बनाया"
|
msgstr ""
|
||||||
|
"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" बनाया{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:441
|
#: src/rc_formatters.py:441
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}"
|
"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\"{comment}"
|
||||||
msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिलीट किया"
|
msgstr ""
|
||||||
|
"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिलीट "
|
||||||
|
"किया{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:443
|
#: src/rc_formatters.py:443
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed "
|
"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed "
|
||||||
"it from {count} revision or log entry{comment}"
|
"it from {count} revision or log entry{comment}"
|
||||||
|
@ -613,24 +616,27 @@ msgid_plural ""
|
||||||
"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed "
|
"[{author}]({author_url}) deleted the [tag]({tag_url}) \"{tag}\" and removed "
|
||||||
"it from {count} revisions and/or log entries{comment}"
|
"it from {count} revisions and/or log entries{comment}"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
"[{author}]({author_url}) ने [{article}]({article_url}) को {count} रिवीशन के "
|
"[{author}]({author_url}) ने [टैग]({tag_url}) \"{tag}\" को डिलीट किया और इसे "
|
||||||
"साथ ({article_url}) इम्पोर्ट किया{comment}"
|
"{count} रिवीशन या लॉग एंट्री से हटाया{comment}"
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
"[{author}]({author_url}) ने [{article}]({article_url}) को {count} रिवीशनों के "
|
"[{author}]({author_url}) ने [टैग]({tag_url}) \"{tag}\" को डिलीट किया और इसे "
|
||||||
"साथ ({article_url}) इम्पोर्ट किया{comment}"
|
"{count} रिवीशनों या लॉग एंट्रियों से हटाया{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:449
|
#: src/rc_formatters.py:449
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}"
|
"[{author}]({author_url}) activated the [tag]({tag_url}) \"{tag}\"{comment}"
|
||||||
msgstr "[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को ऐक्टिवेट किया"
|
msgstr ""
|
||||||
|
"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को सक्रीय "
|
||||||
|
"किया{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:452
|
#: src/rc_formatters.py:452
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}"
|
"[{author}]({author_url}) deactivated the [tag]({tag_url}) \"{tag}\"{comment}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को डिऐक्टिवेट किया"
|
"[{author}]({author_url}) ने एक [टैग]({tag_url}) \"{tag}\" को अक्रीय "
|
||||||
|
"किया{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:454
|
#: src/rc_formatters.py:454
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
@ -648,12 +654,12 @@ msgid "[{author}]({author_url}) locked a wiki *{wiki_name}*{comment}"
|
||||||
msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* के लॉक किया{comment}"
|
msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* के लॉक किया{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:462
|
#: src/rc_formatters.py:462
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"[{author}]({author_url}) modified namespace *{namespace_name}* on "
|
"[{author}]({author_url}) modified namespace *{namespace_name}* on "
|
||||||
"*{wiki_name}*{comment}"
|
"*{wiki_name}*{comment}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"[{author}]({author_url}) ने *{wiki_name}* पर एक नेमस्पेस *{namespace_name}* को "
|
"[{author}]({author_url}) ने *{wiki_name}* पर नेमस्पेस *{namespace_name}* को "
|
||||||
"मॉडिफाइ किया{comment}"
|
"मॉडिफाइ किया{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:467
|
#: src/rc_formatters.py:467
|
||||||
|
@ -672,9 +678,9 @@ msgstr ""
|
||||||
"[{author}]({author_url}) ने यूज़र ग्रुप *{group_name}* को मॉडिफाइ किया{comment}"
|
"[{author}]({author_url}) ने यूज़र ग्रुप *{group_name}* को मॉडिफाइ किया{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:477
|
#: src/rc_formatters.py:477
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}"
|
msgid "[{author}]({author_url}) undeleted a wiki *{wiki_name}*{comment}"
|
||||||
msgstr "[{author}]({author_url}) ने विकी *{wiki_name}* को डिलीट किया{comment}"
|
msgstr "[{author}]({author_url}) ने विकि *{wiki_name}* को अनडिलीट किया{comment}"
|
||||||
|
|
||||||
#: src/rc_formatters.py:481
|
#: src/rc_formatters.py:481
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
@ -1290,35 +1296,34 @@ msgid "Replaced the Cargo table \"{table}\""
|
||||||
msgstr "कोर्गो टेबल \"{table}\" को बदला गया"
|
msgstr "कोर्गो टेबल \"{table}\" को बदला गया"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1121
|
#: src/rc_formatters.py:1121
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Created the tag \"{tag}\""
|
msgid "Created the tag \"{tag}\""
|
||||||
msgstr "टैग \"{tag}\" बनाया गया"
|
msgstr "टैग \"{tag}\" बनाया गया"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1125
|
#: src/rc_formatters.py:1125
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Deleted the tag \"{tag}\""
|
msgid "Deleted the tag \"{tag}\""
|
||||||
msgstr "टैग \"{tag}\" को डिलीट किया गया"
|
msgstr "टैग \"{tag}\" को डिलीट किया गया"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1127
|
#: src/rc_formatters.py:1127
|
||||||
#, fuzzy
|
|
||||||
msgid "Removed from"
|
msgid "Removed from"
|
||||||
msgstr "हटाया गया"
|
msgstr "इससे हटाया गया"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1127
|
#: src/rc_formatters.py:1127
|
||||||
msgid "{} revision or log entry"
|
msgid "{} revision or log entry"
|
||||||
msgid_plural "{} revisions and/or log entries"
|
msgid_plural "{} revisions and/or log entries"
|
||||||
msgstr[0] ""
|
msgstr[0] "{} रिवीशन और/या लॉग एंट्री"
|
||||||
msgstr[1] ""
|
msgstr[1] "{} रिवीशन और/या लॉग एंट्रियाँ"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1131
|
#: src/rc_formatters.py:1131
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Activated the tag \"{tag}\""
|
msgid "Activated the tag \"{tag}\""
|
||||||
msgstr "टैग \"{tag}\" को ऐक्टिवेट किया गया"
|
msgstr "टैग \"{tag}\" को सक्रीय किया गया"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1134
|
#: src/rc_formatters.py:1134
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Deactivated the tag \"{tag}\""
|
msgid "Deactivated the tag \"{tag}\""
|
||||||
msgstr "टैग \"{tag}\" को डिऐक्टिवेट किया गया"
|
msgstr "टैग \"{tag}\" को अक्रीय किया गया"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1137
|
#: src/rc_formatters.py:1137
|
||||||
msgid "Changed wiki settings"
|
msgid "Changed wiki settings"
|
||||||
|
@ -1335,7 +1340,7 @@ msgid "Locked a \"{wiki}\" wiki"
|
||||||
msgstr "\"{wiki}\" विकी को लॉक किया गया"
|
msgstr "\"{wiki}\" विकी को लॉक किया गया"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1147
|
#: src/rc_formatters.py:1147
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Modified \"{namespace_name}\" namespace"
|
msgid "Modified \"{namespace_name}\" namespace"
|
||||||
msgstr "\"{namespace_name}\" नेमस्पेस को मॉडिफाइ किया गया"
|
msgstr "\"{namespace_name}\" नेमस्पेस को मॉडिफाइ किया गया"
|
||||||
|
|
||||||
|
@ -1354,9 +1359,9 @@ msgid "Modified \"{usergroup_name}\" usergroup"
|
||||||
msgstr "\"{usergroup_name}\" यूज़रग्रुप को मॉडिफाइ किया गया"
|
msgstr "\"{usergroup_name}\" यूज़रग्रुप को मॉडिफाइ किया गया"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1160
|
#: src/rc_formatters.py:1160
|
||||||
#, fuzzy, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Undeleted a \"{wiki}\" wiki"
|
msgid "Undeleted a \"{wiki}\" wiki"
|
||||||
msgstr "\"{wiki}\" विकी को डिलीट किया गया"
|
msgstr "\"{wiki}\" विकि को अनडिलीट किया गया"
|
||||||
|
|
||||||
#: src/rc_formatters.py:1163
|
#: src/rc_formatters.py:1163
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
|
Binary file not shown.
|
@ -7,199 +7,190 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-12-23 00:28+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: 2020-12-06 14:17+0000\n"
|
"PO-Revision-Date: 2021-07-11 12:33+0000\n"
|
||||||
"Last-Translator: Creeper <thisisacreeper0101@gmail.com>\n"
|
"Last-Translator: Creeper <thisisacreeper0101@gmail.com>\n"
|
||||||
"Language-Team: Hindi <https://translate.wikibot.de/projects/rcgcdw/main/hi/"
|
"Language-Team: Hindi <https://translate.wikibot.de/projects/rcgcdw/main/hi/>"
|
||||||
">\n"
|
"\n"
|
||||||
"Language: hi\n"
|
"Language: hi\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 4.2.1\n"
|
"X-Generator: Weblate 4.6.2\n"
|
||||||
|
|
||||||
#: src/rcgcdw.py:115 src/rcgcdw.py:117 src/rcgcdw.py:119 src/rcgcdw.py:121
|
#: src/rcgcdw.py:117
|
||||||
#: src/rcgcdw.py:123 src/rcgcdw.py:125 src/rcgcdw.py:127
|
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{value} (avg. {avg})"
|
msgid "{value} (avg. {avg})"
|
||||||
msgstr "{value} (औसत {avg})"
|
msgstr "{value} (औसत {avg})"
|
||||||
|
|
||||||
#: src/rcgcdw.py:147
|
#: src/rcgcdw.py:136
|
||||||
msgid "Daily overview"
|
msgid "Daily overview"
|
||||||
msgstr "दैनिक अवलोकन"
|
msgstr "दैनिक अवलोकन"
|
||||||
|
|
||||||
#: src/rcgcdw.py:154
|
#: src/rcgcdw.py:143
|
||||||
msgid "No activity"
|
msgid "No activity"
|
||||||
msgstr "कोई ऐक्टिविटी नहीं थी"
|
msgstr "कोई ऐक्टिविटी नहीं थी"
|
||||||
|
|
||||||
#: src/rcgcdw.py:178
|
#: src/rcgcdw.py:167
|
||||||
msgid " ({} action)"
|
msgid " ({} action)"
|
||||||
msgid_plural " ({} actions)"
|
msgid_plural " ({} actions)"
|
||||||
msgstr[0] " ({} एक्शन)"
|
msgstr[0] " ({} एक्शन)"
|
||||||
msgstr[1] " ({} एक्शन)"
|
msgstr[1] " ({} एक्शन)"
|
||||||
|
|
||||||
#: src/rcgcdw.py:180
|
#: src/rcgcdw.py:169
|
||||||
msgid " ({} edit)"
|
msgid " ({} edit)"
|
||||||
msgid_plural " ({} edits)"
|
msgid_plural " ({} edits)"
|
||||||
msgstr[0] " ({} सम्पादना)"
|
msgstr[0] " ({} सम्पादना)"
|
||||||
msgstr[1] " ({} सम्पादनाएँ)"
|
msgstr[1] " ({} सम्पादनाएँ)"
|
||||||
|
|
||||||
#: src/rcgcdw.py:185
|
#: src/rcgcdw.py:174
|
||||||
msgid " UTC ({} action)"
|
msgid " UTC ({} action)"
|
||||||
msgid_plural " UTC ({} actions)"
|
msgid_plural " UTC ({} actions)"
|
||||||
msgstr[0] " UTC ({} एक्शन)"
|
msgstr[0] " UTC ({} एक्शन)"
|
||||||
msgstr[1] " UTC ({} एक्शन)"
|
msgstr[1] " UTC ({} एक्शन)"
|
||||||
|
|
||||||
#: src/rcgcdw.py:187 src/rcgcdw.py:188 src/rcgcdw.py:192
|
#: src/rcgcdw.py:176 src/rcgcdw.py:179
|
||||||
msgid "But nobody came"
|
msgid "But nobody came"
|
||||||
msgstr "पर कोई नहीं आया"
|
msgstr "पर कोई नहीं आया"
|
||||||
|
|
||||||
#: src/rcgcdw.py:195
|
#: src/rcgcdw.py:183
|
||||||
msgid "Most active user"
|
msgid "Most active user"
|
||||||
msgid_plural "Most active users"
|
msgid_plural "Most active users"
|
||||||
msgstr[0] "सबसे सक्रीय सदस्य"
|
msgstr[0] "सबसे सक्रीय सदस्य"
|
||||||
msgstr[1] "सबसे सक्रीय सदस्य"
|
msgstr[1] "सबसे सक्रीय सदस्य"
|
||||||
|
|
||||||
#: src/rcgcdw.py:196
|
#: src/rcgcdw.py:184
|
||||||
msgid "Most edited article"
|
msgid "Most edited article"
|
||||||
msgid_plural "Most edited articles"
|
msgid_plural "Most edited articles"
|
||||||
msgstr[0] "सबसे ज़्यादा सम्पादित किया गया आर्टिकल"
|
msgstr[0] "सबसे ज़्यादा सम्पादित किया गया आर्टिकल"
|
||||||
msgstr[1] "सबसे ज़्यादा सम्पादित किए गए आर्टिकल"
|
msgstr[1] "सबसे ज़्यादा सम्पादित किए गए आर्टिकल"
|
||||||
|
|
||||||
#: src/rcgcdw.py:197
|
#: src/rcgcdw.py:185
|
||||||
msgid "Edits made"
|
msgid "Edits made"
|
||||||
msgstr "दिए गए सम्पादनाएँ"
|
msgstr "दिए गए सम्पादनाएँ"
|
||||||
|
|
||||||
#: src/rcgcdw.py:197
|
#: src/rcgcdw.py:185
|
||||||
msgid "New files"
|
msgid "New files"
|
||||||
msgstr "नए चित्र"
|
msgstr "नए चित्र"
|
||||||
|
|
||||||
#: src/rcgcdw.py:197
|
#: src/rcgcdw.py:186
|
||||||
msgid "Admin actions"
|
msgid "Admin actions"
|
||||||
msgstr "एडमिन एक्शन"
|
msgstr "एडमिन एक्शन"
|
||||||
|
|
||||||
#: src/rcgcdw.py:198
|
#: src/rcgcdw.py:186
|
||||||
msgid "Bytes changed"
|
msgid "Bytes changed"
|
||||||
msgstr "बदले गए बाइट"
|
msgstr "बदले गए बाइट"
|
||||||
|
|
||||||
#: src/rcgcdw.py:198
|
#: src/rcgcdw.py:187
|
||||||
msgid "New articles"
|
msgid "New articles"
|
||||||
msgstr "नए आर्टिकल"
|
msgstr "नए आर्टिकल"
|
||||||
|
|
||||||
#: src/rcgcdw.py:199
|
#: src/rcgcdw.py:187
|
||||||
msgid "Unique contributors"
|
msgid "Unique contributors"
|
||||||
msgstr "विशेष सदस्य"
|
msgstr "विशेष सदस्य"
|
||||||
|
|
||||||
#: src/rcgcdw.py:200
|
#: src/rcgcdw.py:188
|
||||||
msgid "Most active hour"
|
msgid "Most active hour"
|
||||||
msgid_plural "Most active hours"
|
msgid_plural "Most active hours"
|
||||||
msgstr[0] "सबसे सक्रीय घंटा"
|
msgstr[0] "सबसे सक्रीय घंटा"
|
||||||
msgstr[1] "सबसे सक्रीय घंटे"
|
msgstr[1] "सबसे सक्रीय घंटे"
|
||||||
|
|
||||||
#: src/rcgcdw.py:201
|
#: src/rcgcdw.py:189
|
||||||
msgid "Day score"
|
msgid "Day score"
|
||||||
msgstr "दिन का स्कोर"
|
msgstr "दिन का स्कोर"
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#: src/rcgcdw.py:223
|
||||||
msgid "director"
|
msgid "~~hidden~~"
|
||||||
msgstr "निर्देशक"
|
msgstr "~~छिपाया गया~~"
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#: src/rcgcdw.py:225
|
||||||
msgid "bot"
|
msgid "No description provided"
|
||||||
msgstr "बॉट"
|
msgstr "कोई विवरण नहीं दिया गया"
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#: src/rcgcdw.py:228
|
||||||
msgid "editor"
|
msgid "hidden"
|
||||||
msgstr "सम्पादक"
|
msgstr "छिपाया गया"
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#~ msgid "director"
|
||||||
msgid "directors"
|
#~ msgstr "निर्देशक"
|
||||||
msgstr "निर्देशक"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#~ msgid "bot"
|
||||||
msgid "sysop"
|
#~ msgstr "बॉट"
|
||||||
msgstr "साइसॉप"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#~ msgid "editor"
|
||||||
msgid "bureaucrat"
|
#~ msgstr "सम्पादक"
|
||||||
msgstr "ब्यूरोक्रैट"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#~ msgid "directors"
|
||||||
msgid "reviewer"
|
#~ msgstr "निर्देशक"
|
||||||
msgstr "रिव्युअर"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "sysop"
|
||||||
msgid "autoreview"
|
#~ msgstr "साइसॉप"
|
||||||
msgstr "ऑटोरिव्यु"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "bureaucrat"
|
||||||
msgid "autopatrol"
|
#~ msgstr "ब्यूरोक्रैट"
|
||||||
msgstr "ऑटोपैट्रॉल"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "reviewer"
|
||||||
msgid "wiki_guardian"
|
#~ msgstr "रिव्युअर"
|
||||||
msgstr "विकी_संरक्षक"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "autoreview"
|
||||||
msgid "second"
|
#~ msgstr "ऑटोरिव्यु"
|
||||||
msgid_plural "seconds"
|
|
||||||
msgstr[0] "सेकंड"
|
|
||||||
msgstr[1] "सेकंड"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "autopatrol"
|
||||||
msgid "minute"
|
#~ msgstr "ऑटोपैट्रॉल"
|
||||||
msgid_plural "minutes"
|
|
||||||
msgstr[0] "मिनट"
|
|
||||||
msgstr[1] "मिनट"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "wiki_guardian"
|
||||||
msgid "hour"
|
#~ msgstr "विकी_संरक्षक"
|
||||||
msgid_plural "hours"
|
|
||||||
msgstr[0] "घंटा"
|
|
||||||
msgstr[1] "घंटे"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "second"
|
||||||
msgid "day"
|
#~ msgid_plural "seconds"
|
||||||
msgid_plural "days"
|
#~ msgstr[0] "सेकंड"
|
||||||
msgstr[0] "दिन"
|
#~ msgstr[1] "सेकंड"
|
||||||
msgstr[1] "दिन"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "minute"
|
||||||
msgid "week"
|
#~ msgid_plural "minutes"
|
||||||
msgid_plural "weeks"
|
#~ msgstr[0] "मिनट"
|
||||||
msgstr[0] "हफ्ता"
|
#~ msgstr[1] "मिनट"
|
||||||
msgstr[1] "हफ्तें"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "hour"
|
||||||
msgid "month"
|
#~ msgid_plural "hours"
|
||||||
msgid_plural "months"
|
#~ msgstr[0] "घंटा"
|
||||||
msgstr[0] "महीना"
|
#~ msgstr[1] "घंटे"
|
||||||
msgstr[1] "महीनें"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "day"
|
||||||
msgid "year"
|
#~ msgid_plural "days"
|
||||||
msgid_plural "years"
|
#~ msgstr[0] "दिन"
|
||||||
msgstr[0] "साल"
|
#~ msgstr[1] "दिन"
|
||||||
msgstr[1] "साल"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "week"
|
||||||
msgid "millennium"
|
#~ msgid_plural "weeks"
|
||||||
msgid_plural "millennia"
|
#~ msgstr[0] "हफ्ता"
|
||||||
msgstr[0] "सहस्त्राब्द"
|
#~ msgstr[1] "हफ्तें"
|
||||||
msgstr[1] "सहस्त्राब्द"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "month"
|
||||||
msgid "decade"
|
#~ msgid_plural "months"
|
||||||
msgid_plural "decades"
|
#~ msgstr[0] "महीना"
|
||||||
msgstr[0] "दशक"
|
#~ msgstr[1] "महीनें"
|
||||||
msgstr[1] "दशक"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "year"
|
||||||
msgid "century"
|
#~ msgid_plural "years"
|
||||||
msgid_plural "centuries"
|
#~ msgstr[0] "साल"
|
||||||
msgstr[0] "शताब्दी"
|
#~ msgstr[1] "साल"
|
||||||
msgstr[1] "शताब्दियाँ"
|
|
||||||
|
#~ msgid "millennium"
|
||||||
|
#~ msgid_plural "millennia"
|
||||||
|
#~ msgstr[0] "सहस्त्राब्द"
|
||||||
|
#~ msgstr[1] "सहस्त्राब्द"
|
||||||
|
|
||||||
|
#~ msgid "decade"
|
||||||
|
#~ msgid_plural "decades"
|
||||||
|
#~ msgstr[0] "दशक"
|
||||||
|
#~ msgstr[1] "दशक"
|
||||||
|
|
||||||
|
#~ msgid "century"
|
||||||
|
#~ msgid_plural "centuries"
|
||||||
|
#~ msgstr[0] "शताब्दी"
|
||||||
|
#~ msgstr[1] "शताब्दियाँ"
|
||||||
|
|
||||||
#~ msgid "None"
|
#~ msgid "None"
|
||||||
#~ msgstr "कुछ नहीं"
|
#~ msgstr "कुछ नहीं"
|
||||||
|
@ -759,9 +750,6 @@ msgstr[1] "शताब्दियाँ"
|
||||||
#~ msgid "Title"
|
#~ msgid "Title"
|
||||||
#~ msgstr "शीर्षक"
|
#~ msgstr "शीर्षक"
|
||||||
|
|
||||||
#~ msgid "No description provided"
|
|
||||||
#~ msgstr "कोई विवरण नहीं दिया गया"
|
|
||||||
|
|
||||||
#~ msgid "(N!) "
|
#~ msgid "(N!) "
|
||||||
#~ msgstr "(न!) "
|
#~ msgstr "(न!) "
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-12-23 00:28+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: 2020-11-27 13:07+0000\n"
|
"PO-Revision-Date: 2020-11-27 13:07+0000\n"
|
||||||
"Last-Translator: Creeper <thisisacreeper0101@gmail.com>\n"
|
"Last-Translator: Creeper <thisisacreeper0101@gmail.com>\n"
|
||||||
"Language-Team: Hindi <https://translate.wikibot.de/projects/rcgcdw/redaction/"
|
"Language-Team: Hindi <https://translate.wikibot.de/projects/rcgcdw/redaction/"
|
||||||
|
@ -19,7 +19,13 @@ msgstr ""
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 4.2.1\n"
|
"X-Generator: Weblate 4.2.1\n"
|
||||||
|
|
||||||
#: src/discord/redaction.py:62 src/discord/redaction.py:65
|
#: src/discord/redaction.py:77
|
||||||
#: src/discord/redaction.py:70
|
msgid "hidden"
|
||||||
msgid "Removed"
|
msgstr ""
|
||||||
msgstr "हटाया गया"
|
|
||||||
|
#: src/discord/redaction.py:80 src/discord/redaction.py:85
|
||||||
|
msgid "~~hidden~~"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Removed"
|
||||||
|
#~ msgstr "हटाया गया"
|
||||||
|
|
Binary file not shown.
|
@ -1,159 +0,0 @@
|
||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
||||||
# This file is distributed under the same license as the RcGcDw package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: RcGcDw\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2020-11-30 11:58+0100\n"
|
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
||||||
"Last-Translator: Automatically generated\n"
|
|
||||||
"Language-Team: none\n"
|
|
||||||
"Language: it\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:25 src/discussion_formatters.py:81
|
|
||||||
msgid "Unregistered user"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:34
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:36
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:38
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:43
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) "
|
|
||||||
"to [{title}](<{url}f/p/{threadId}>) in {forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:45 src/discussion_formatters.py:54
|
|
||||||
#: src/discussion_formatters.py:137 src/discussion_formatters.py:150
|
|
||||||
msgid "unknown"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:49
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:51
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]"
|
|
||||||
"(<{url}wiki/Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:57
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) "
|
|
||||||
"on [{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:62
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}"
|
|
||||||
"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on "
|
|
||||||
"[{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:70
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"Unknown event `{event}` by [{author}]({author_url}), report it on the "
|
|
||||||
"[support server](<{support}>)."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:98
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:102
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a poll \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:109
|
|
||||||
msgid "Option {}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:110
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "__[View image]({image_url})__"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:114
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a quiz \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:129 src/discussion_formatters.py:131
|
|
||||||
msgid "Tags"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:129
|
|
||||||
msgid "{} tags"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:134
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:143
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:147
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:154
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Commented on {article}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:158
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to a comment on {article}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:162
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Unknown event `{event}`"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:168 src/discussion_formatters.py:170
|
|
||||||
msgid "Report this on the support server"
|
|
||||||
msgstr ""
|
|
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
@ -1,159 +0,0 @@
|
||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
||||||
# This file is distributed under the same license as the RcGcDw package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: RcGcDw\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2020-11-30 11:58+0100\n"
|
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
||||||
"Last-Translator: Automatically generated\n"
|
|
||||||
"Language-Team: none\n"
|
|
||||||
"Language: ja\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:25 src/discussion_formatters.py:81
|
|
||||||
msgid "Unregistered user"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:34
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:36
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:38
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:43
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) "
|
|
||||||
"to [{title}](<{url}f/p/{threadId}>) in {forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:45 src/discussion_formatters.py:54
|
|
||||||
#: src/discussion_formatters.py:137 src/discussion_formatters.py:150
|
|
||||||
msgid "unknown"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:49
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:51
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]"
|
|
||||||
"(<{url}wiki/Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:57
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) "
|
|
||||||
"on [{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:62
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}"
|
|
||||||
"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on "
|
|
||||||
"[{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:70
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"Unknown event `{event}` by [{author}]({author_url}), report it on the "
|
|
||||||
"[support server](<{support}>)."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:98
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:102
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a poll \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:109
|
|
||||||
msgid "Option {}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:110
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "__[View image]({image_url})__"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:114
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a quiz \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:129 src/discussion_formatters.py:131
|
|
||||||
msgid "Tags"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:129
|
|
||||||
msgid "{} tags"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:134
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:143
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:147
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:154
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Commented on {article}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:158
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to a comment on {article}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:162
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Unknown event `{event}`"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:168 src/discussion_formatters.py:170
|
|
||||||
msgid "Report this on the support server"
|
|
||||||
msgstr ""
|
|
BIN
locale/ja/LC_MESSAGES/formatters.mo
Normal file
BIN
locale/ja/LC_MESSAGES/formatters.mo
Normal file
Binary file not shown.
1612
locale/ja/LC_MESSAGES/formatters.po
Normal file
1612
locale/ja/LC_MESSAGES/formatters.po
Normal file
File diff suppressed because it is too large
Load diff
BIN
locale/ja/LC_MESSAGES/misc.mo
Normal file
BIN
locale/ja/LC_MESSAGES/misc.mo
Normal file
Binary file not shown.
|
@ -8,76 +8,81 @@ msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-11-30 11:58+0100\n"
|
"POT-Creation-Date: 2020-11-30 11:58+0100\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: 2021-07-11 12:33+0000\n"
|
||||||
"Last-Translator: Automatically generated\n"
|
"Last-Translator: しぃ <lzmashili@icloud.com>\n"
|
||||||
"Language-Team: none\n"
|
"Language-Team: Japanese <https://translate.wikibot.de/projects/rcgcdw/misc/"
|
||||||
|
"ja/>\n"
|
||||||
"Language: ja\n"
|
"Language: ja\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"X-Generator: Weblate 4.6.2\n"
|
||||||
|
|
||||||
#: src/misc.py:45
|
#: src/misc.py:45
|
||||||
msgid "Location"
|
msgid "Location"
|
||||||
msgstr ""
|
msgstr "ロケーション"
|
||||||
|
|
||||||
#: src/misc.py:45
|
#: src/misc.py:45
|
||||||
msgid "About me"
|
msgid "About me"
|
||||||
msgstr ""
|
msgstr "私について"
|
||||||
|
|
||||||
#: src/misc.py:45
|
#: src/misc.py:45
|
||||||
msgid "Google link"
|
msgid "Google link"
|
||||||
msgstr ""
|
msgstr "Googleのリンク"
|
||||||
|
|
||||||
#: src/misc.py:45
|
#: src/misc.py:45
|
||||||
msgid "Facebook link"
|
msgid "Facebook link"
|
||||||
msgstr ""
|
msgstr "Facebookのリンク"
|
||||||
|
|
||||||
#: src/misc.py:45
|
#: src/misc.py:45
|
||||||
msgid "Twitter link"
|
msgid "Twitter link"
|
||||||
msgstr ""
|
msgstr "Twitterのリンク"
|
||||||
|
|
||||||
#: src/misc.py:45
|
#: src/misc.py:45
|
||||||
msgid "Reddit link"
|
msgid "Reddit link"
|
||||||
msgstr ""
|
msgstr "Redditのリンク"
|
||||||
|
|
||||||
#: src/misc.py:45
|
#: src/misc.py:45
|
||||||
msgid "Twitch link"
|
msgid "Twitch link"
|
||||||
msgstr ""
|
msgstr "Twitchのリンク"
|
||||||
|
|
||||||
#: src/misc.py:45
|
#: src/misc.py:45
|
||||||
msgid "PSN link"
|
msgid "PSN link"
|
||||||
msgstr ""
|
msgstr "PSNのリンク"
|
||||||
|
|
||||||
#: src/misc.py:45
|
#: src/misc.py:45
|
||||||
msgid "VK link"
|
msgid "VK link"
|
||||||
msgstr ""
|
msgstr "VKのリンク"
|
||||||
|
|
||||||
#: src/misc.py:45
|
#: src/misc.py:45
|
||||||
msgid "XBL link"
|
msgid "XBL link"
|
||||||
msgstr ""
|
msgstr "XBLのリンク"
|
||||||
|
|
||||||
#: src/misc.py:45
|
#: src/misc.py:45
|
||||||
msgid "Steam link"
|
msgid "Steam link"
|
||||||
msgstr ""
|
msgstr "Steamのリンク"
|
||||||
|
|
||||||
#: src/misc.py:45
|
#: src/misc.py:45
|
||||||
msgid "Discord handle"
|
msgid "Discord handle"
|
||||||
msgstr ""
|
msgstr "Discordアカウントへのリンク"
|
||||||
|
|
||||||
#: src/misc.py:45
|
#: src/misc.py:45
|
||||||
msgid "Battle.net handle"
|
msgid "Battle.net handle"
|
||||||
msgstr ""
|
msgstr "Battle.net アカウントへのリンク"
|
||||||
|
|
||||||
#: src/misc.py:119
|
#: src/misc.py:119
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"__And more__"
|
"__And more__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"__その他色々__"
|
||||||
|
|
||||||
#: src/misc.py:276
|
#: src/misc.py:276
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr ""
|
msgstr "不明"
|
||||||
|
|
||||||
#: src/misc.py:278
|
#: src/misc.py:278
|
||||||
msgid "unknown"
|
msgid "unknown"
|
||||||
msgstr ""
|
msgstr "不明"
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -8,14 +8,16 @@ msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-11-30 11:58+0100\n"
|
"POT-Creation-Date: 2020-11-30 11:58+0100\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: 2021-07-11 12:33+0000\n"
|
||||||
"Last-Translator: Automatically generated\n"
|
"Last-Translator: しぃ <lzmashili@icloud.com>\n"
|
||||||
"Language-Team: none\n"
|
"Language-Team: Japanese <https://translate.wikibot.de/projects/rcgcdw/main/"
|
||||||
|
"ja/>\n"
|
||||||
"Language: ja\n"
|
"Language: ja\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"X-Generator: Weblate 4.6.2\n"
|
||||||
|
|
||||||
#: src/rc_formatters.py:28
|
#: src/rc_formatters.py:28
|
||||||
msgid "None"
|
msgid "None"
|
||||||
|
@ -732,7 +734,7 @@ msgstr ""
|
||||||
|
|
||||||
#: src/rc_formatters.py:661 src/rc_formatters.py:948
|
#: src/rc_formatters.py:661 src/rc_formatters.py:948
|
||||||
msgid "No description provided"
|
msgid "No description provided"
|
||||||
msgstr ""
|
msgstr "説明はありません"
|
||||||
|
|
||||||
#: src/rc_formatters.py:685
|
#: src/rc_formatters.py:685
|
||||||
msgid "(N!) "
|
msgid "(N!) "
|
||||||
|
|
Binary file not shown.
|
@ -8,15 +8,18 @@ msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-11-30 11:58+0100\n"
|
"POT-Creation-Date: 2020-11-30 11:58+0100\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: 2021-07-11 12:33+0000\n"
|
||||||
"Last-Translator: Automatically generated\n"
|
"Last-Translator: しぃ <lzmashili@icloud.com>\n"
|
||||||
"Language-Team: none\n"
|
"Language-Team: Japanese <https://translate.wikibot.de/projects/rcgcdw/"
|
||||||
|
"redaction/ja/>\n"
|
||||||
"Language: ja\n"
|
"Language: ja\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"X-Generator: Weblate 4.6.2\n"
|
||||||
|
|
||||||
#: src/discord/redaction.py:59 src/discord/redaction.py:62
|
#: src/discord/redaction.py:59 src/discord/redaction.py:62
|
||||||
#: src/discord/redaction.py:67
|
#: src/discord/redaction.py:67
|
||||||
msgid "Removed"
|
msgid "Removed"
|
||||||
msgstr ""
|
msgstr "削除"
|
||||||
|
|
Binary file not shown.
|
@ -1,162 +0,0 @@
|
||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
||||||
# This file is distributed under the same license as the RcGcDw package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: RcGcDw\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2020-11-18 14:13+0100\n"
|
|
||||||
"PO-Revision-Date: 2020-11-27 13:07+0000\n"
|
|
||||||
"Last-Translator: Yongmin Hong <revi@pobox.com>\n"
|
|
||||||
"Language-Team: Korean <https://translate.wikibot.de/projects/rcgcdw/"
|
|
||||||
"discussion_formatters-1/ko/>\n"
|
|
||||||
"Language: ko\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
|
||||||
"X-Generator: Weblate 4.2.1\n"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:25 src/discussion_formatters.py:81
|
|
||||||
msgid "Unregistered user"
|
|
||||||
msgstr "비등록 사용자"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:34
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:36
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:38
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:43
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) "
|
|
||||||
"to [{title}](<{url}f/p/{threadId}>) in {forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:45 src/discussion_formatters.py:54
|
|
||||||
#: src/discussion_formatters.py:137 src/discussion_formatters.py:150
|
|
||||||
msgid "unknown"
|
|
||||||
msgstr "알 수 없음"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:49
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:51
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]"
|
|
||||||
"(<{url}wiki/Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:57
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) "
|
|
||||||
"on [{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:62
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}"
|
|
||||||
"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on "
|
|
||||||
"[{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:70
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"Unknown event `{event}` by [{author}]({author_url}), report it on the "
|
|
||||||
"[support server](<{support}>)."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:98
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:102
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a poll \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:109
|
|
||||||
msgid "Option {}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:110
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "__[View image]({image_url})__"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:114
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a quiz \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:129 src/discussion_formatters.py:131
|
|
||||||
msgid "Tags"
|
|
||||||
msgstr "태그"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:129
|
|
||||||
msgid "{} tags"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:134
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:143
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:147
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:154
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Commented on {article}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:158
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to a comment on {article}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:162
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Unknown event `{event}`"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:168 src/discussion_formatters.py:170
|
|
||||||
msgid "Report this on the support server"
|
|
||||||
msgstr ""
|
|
BIN
locale/ko/LC_MESSAGES/formatters.mo
Normal file
BIN
locale/ko/LC_MESSAGES/formatters.mo
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
@ -1,160 +0,0 @@
|
||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
||||||
# This file is distributed under the same license as the RcGcDw package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: RcGcDw\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2020-12-23 00:28+0100\n"
|
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
||||||
"Last-Translator: Automatically generated\n"
|
|
||||||
"Language-Team: none\n"
|
|
||||||
"Language: lol\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:21 src/discussion_formatters.py:56
|
|
||||||
#: src/discussion_formatters.py:67 src/discussion_formatters.py:95
|
|
||||||
#: src/discussion_formatters.py:163 src/discussion_formatters.py:176
|
|
||||||
msgid "unknown"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:27 src/discussion_formatters.py:102
|
|
||||||
msgid "Unregistered user"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:39
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:42
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:45
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:54
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) "
|
|
||||||
"to [{title}](<{url}f/p/{threadId}>) in {forumName}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:61
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:64
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]"
|
|
||||||
"(<{url}wiki/Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:72
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) "
|
|
||||||
"on [{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:78
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}"
|
|
||||||
"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on "
|
|
||||||
"[{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:86
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"Unknown event `{event}` by [{author}]({author_url}), report it on the "
|
|
||||||
"[support server](<{support}>)."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:123
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:127
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a poll \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:134
|
|
||||||
msgid "Option {}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:135
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "__[View image]({image_url})__"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:139
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a quiz \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:155 src/discussion_formatters.py:157
|
|
||||||
msgid "Tags"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:155
|
|
||||||
msgid "{} tags"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:160
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\""
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:169
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:173
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:180
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Commented on {article}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:184
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to a comment on {article}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:188
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Unknown event `{event}`"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:194 src/discussion_formatters.py:196
|
|
||||||
msgid "Report this on the support server"
|
|
||||||
msgstr ""
|
|
1680
locale/lol/LC_MESSAGES/formatters.po
Normal file
1680
locale/lol/LC_MESSAGES/formatters.po
Normal file
File diff suppressed because it is too large
Load diff
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-11-28 23:45+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: Automatically generated\n"
|
"Last-Translator: Automatically generated\n"
|
||||||
"Language-Team: none\n"
|
"Language-Team: none\n"
|
||||||
|
@ -68,16 +68,16 @@ msgstr ""
|
||||||
msgid "Battle.net handle"
|
msgid "Battle.net handle"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/misc.py:119
|
#: src/misc.py:139
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"__And more__"
|
"__And more__"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/misc.py:276
|
#: src/misc.py:328
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/misc.py:278
|
#: src/misc.py:330
|
||||||
msgid "unknown"
|
msgid "unknown"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
Binary file not shown.
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-12-23 00:28+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: 2020-08-16 19:13+0000\n"
|
"PO-Revision-Date: 2020-08-16 19:13+0000\n"
|
||||||
"Last-Translator: Frisk The Evil Goat Overlord <>\n"
|
"Last-Translator: Frisk The Evil Goat Overlord <>\n"
|
||||||
"Language-Team: Lolcat <https://weblate.frisk.space/projects/rcgcdw/main/lol/"
|
"Language-Team: Lolcat <https://weblate.frisk.space/projects/rcgcdw/main/lol/"
|
||||||
|
@ -19,187 +19,119 @@ msgstr ""
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.1.1\n"
|
"X-Generator: Weblate 4.1.1\n"
|
||||||
|
|
||||||
#: src/rcgcdw.py:115 src/rcgcdw.py:117 src/rcgcdw.py:119 src/rcgcdw.py:121
|
#: src/rcgcdw.py:117
|
||||||
#: src/rcgcdw.py:123 src/rcgcdw.py:125 src/rcgcdw.py:127
|
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{value} (avg. {avg})"
|
msgid "{value} (avg. {avg})"
|
||||||
msgstr "{value} (mor or less. {avg})"
|
msgstr "{value} (mor or less. {avg})"
|
||||||
|
|
||||||
#: src/rcgcdw.py:147
|
#: src/rcgcdw.py:136
|
||||||
msgid "Daily overview"
|
msgid "Daily overview"
|
||||||
msgstr "Morn' newz"
|
msgstr "Morn' newz"
|
||||||
|
|
||||||
#: src/rcgcdw.py:154
|
#: src/rcgcdw.py:143
|
||||||
msgid "No activity"
|
msgid "No activity"
|
||||||
msgstr "No food"
|
msgstr "No food"
|
||||||
|
|
||||||
#: src/rcgcdw.py:178
|
#: src/rcgcdw.py:167
|
||||||
msgid " ({} action)"
|
msgid " ({} action)"
|
||||||
msgid_plural " ({} actions)"
|
msgid_plural " ({} actions)"
|
||||||
msgstr[0] " ({} action)"
|
msgstr[0] " ({} action)"
|
||||||
msgstr[1] " ({} actionz)"
|
msgstr[1] " ({} actionz)"
|
||||||
|
|
||||||
#: src/rcgcdw.py:180
|
#: src/rcgcdw.py:169
|
||||||
msgid " ({} edit)"
|
msgid " ({} edit)"
|
||||||
msgid_plural " ({} edits)"
|
msgid_plural " ({} edits)"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:185
|
#: src/rcgcdw.py:174
|
||||||
msgid " UTC ({} action)"
|
msgid " UTC ({} action)"
|
||||||
msgid_plural " UTC ({} actions)"
|
msgid_plural " UTC ({} actions)"
|
||||||
msgstr[0] " UTC ({} action)"
|
msgstr[0] " UTC ({} action)"
|
||||||
msgstr[1] " UTC ({} actionz)"
|
msgstr[1] " UTC ({} actionz)"
|
||||||
|
|
||||||
#: src/rcgcdw.py:187 src/rcgcdw.py:188 src/rcgcdw.py:192
|
#: src/rcgcdw.py:176 src/rcgcdw.py:179
|
||||||
msgid "But nobody came"
|
msgid "But nobody came"
|
||||||
msgstr "No one brot food 😾"
|
msgstr "No one brot food 😾"
|
||||||
|
|
||||||
#: src/rcgcdw.py:195
|
#: src/rcgcdw.py:183
|
||||||
msgid "Most active user"
|
msgid "Most active user"
|
||||||
msgid_plural "Most active users"
|
msgid_plural "Most active users"
|
||||||
msgstr[0] "Most skilld cat"
|
msgstr[0] "Most skilld cat"
|
||||||
msgstr[1] "Most skilld cats"
|
msgstr[1] "Most skilld cats"
|
||||||
|
|
||||||
#: src/rcgcdw.py:196
|
#: src/rcgcdw.py:184
|
||||||
msgid "Most edited article"
|
msgid "Most edited article"
|
||||||
msgid_plural "Most edited articles"
|
msgid_plural "Most edited articles"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:197
|
#: src/rcgcdw.py:185
|
||||||
msgid "Edits made"
|
msgid "Edits made"
|
||||||
msgstr "edtz did"
|
msgstr "edtz did"
|
||||||
|
|
||||||
#: src/rcgcdw.py:197
|
#: src/rcgcdw.py:185
|
||||||
msgid "New files"
|
msgid "New files"
|
||||||
msgstr "new picturz"
|
msgstr "new picturz"
|
||||||
|
|
||||||
#: src/rcgcdw.py:197
|
#: src/rcgcdw.py:186
|
||||||
msgid "Admin actions"
|
msgid "Admin actions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:198
|
#: src/rcgcdw.py:186
|
||||||
msgid "Bytes changed"
|
msgid "Bytes changed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:198
|
#: src/rcgcdw.py:187
|
||||||
msgid "New articles"
|
msgid "New articles"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:199
|
#: src/rcgcdw.py:187
|
||||||
msgid "Unique contributors"
|
msgid "Unique contributors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:200
|
#: src/rcgcdw.py:188
|
||||||
msgid "Most active hour"
|
msgid "Most active hour"
|
||||||
msgid_plural "Most active hours"
|
msgid_plural "Most active hours"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:201
|
#: src/rcgcdw.py:189
|
||||||
msgid "Day score"
|
msgid "Day score"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#: src/rcgcdw.py:223
|
||||||
msgid "director"
|
msgid "~~hidden~~"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
#: src/rcgcdw.py:225
|
||||||
msgid "bot"
|
msgid "No description provided"
|
||||||
msgstr "robut"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
|
||||||
msgid "editor"
|
|
||||||
msgstr "editur"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
|
||||||
msgid "directors"
|
|
||||||
msgstr "directurs"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
|
||||||
msgid "sysop"
|
|
||||||
msgstr "admen"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
|
||||||
msgid "bureaucrat"
|
|
||||||
msgstr "burocrat"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:243
|
|
||||||
msgid "reviewer"
|
|
||||||
msgstr "reviver"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
|
||||||
msgid "autoreview"
|
|
||||||
msgstr "autureviver"
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
|
||||||
msgid "autopatrol"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#: src/rcgcdw.py:228
|
||||||
msgid "wiki_guardian"
|
msgid "hidden"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "bot"
|
||||||
msgid "second"
|
#~ msgstr "robut"
|
||||||
msgid_plural "seconds"
|
|
||||||
msgstr[0] ""
|
|
||||||
msgstr[1] ""
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "editor"
|
||||||
msgid "minute"
|
#~ msgstr "editur"
|
||||||
msgid_plural "minutes"
|
|
||||||
msgstr[0] ""
|
|
||||||
msgstr[1] ""
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "directors"
|
||||||
msgid "hour"
|
#~ msgstr "directurs"
|
||||||
msgid_plural "hours"
|
|
||||||
msgstr[0] ""
|
|
||||||
msgstr[1] ""
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "sysop"
|
||||||
msgid "day"
|
#~ msgstr "admen"
|
||||||
msgid_plural "days"
|
|
||||||
msgstr[0] ""
|
|
||||||
msgstr[1] ""
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "bureaucrat"
|
||||||
msgid "week"
|
#~ msgstr "burocrat"
|
||||||
msgid_plural "weeks"
|
|
||||||
msgstr[0] ""
|
|
||||||
msgstr[1] ""
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "reviewer"
|
||||||
msgid "month"
|
#~ msgstr "reviver"
|
||||||
msgid_plural "months"
|
|
||||||
msgstr[0] ""
|
|
||||||
msgstr[1] ""
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
#~ msgid "autoreview"
|
||||||
msgid "year"
|
#~ msgstr "autureviver"
|
||||||
msgid_plural "years"
|
|
||||||
msgstr[0] ""
|
|
||||||
msgstr[1] ""
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
|
||||||
msgid "millennium"
|
|
||||||
msgid_plural "millennia"
|
|
||||||
msgstr[0] ""
|
|
||||||
msgstr[1] ""
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
|
||||||
msgid "decade"
|
|
||||||
msgid_plural "decades"
|
|
||||||
msgstr[0] ""
|
|
||||||
msgstr[1] ""
|
|
||||||
|
|
||||||
#: src/rcgcdw.py:244
|
|
||||||
msgid "century"
|
|
||||||
msgid_plural "centuries"
|
|
||||||
msgstr[0] ""
|
|
||||||
msgstr[1] ""
|
|
||||||
|
|
||||||
#~ msgid "Location"
|
#~ msgid "Location"
|
||||||
#~ msgstr "Der place"
|
#~ msgstr "Der place"
|
||||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: RcGcDw\n"
|
"Project-Id-Version: RcGcDw\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-12-23 00:28+0100\n"
|
"POT-Creation-Date: 2021-07-11 14:32+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: Automatically generated\n"
|
"Last-Translator: Automatically generated\n"
|
||||||
"Language-Team: none\n"
|
"Language-Team: none\n"
|
||||||
|
@ -16,7 +16,10 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
#: src/discord/redaction.py:62 src/discord/redaction.py:65
|
#: src/discord/redaction.py:77
|
||||||
#: src/discord/redaction.py:70
|
msgid "hidden"
|
||||||
msgid "Removed"
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/discord/redaction.py:80 src/discord/redaction.py:85
|
||||||
|
msgid "~~hidden~~"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
Binary file not shown.
|
@ -1,186 +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: 2020-12-23 00:28+0100\n"
|
|
||||||
"PO-Revision-Date: 2020-12-13 14:30+0000\n"
|
|
||||||
"Last-Translator: MarkusRost <sukramxro@gmail.com>\n"
|
|
||||||
"Language-Team: Polish <https://translate.wikibot.de/projects/rcgcdw/"
|
|
||||||
"discussion_formatters-1/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.2.1\n"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:21 src/discussion_formatters.py:56
|
|
||||||
#: src/discussion_formatters.py:67 src/discussion_formatters.py:95
|
|
||||||
#: src/discussion_formatters.py:163 src/discussion_formatters.py:176
|
|
||||||
msgid "unknown"
|
|
||||||
msgstr "nieznany"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:27 src/discussion_formatters.py:102
|
|
||||||
msgid "Unregistered user"
|
|
||||||
msgstr "Niezarejestrowany użytkownik"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:39
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) stworzył(a) [{title}](<{url}f/p/{threadId}>) w "
|
|
||||||
"{forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:42
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a poll [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) stworzył(a) ankietę [{title}](<{url}f/p/{threadId}"
|
|
||||||
">) w {forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:45
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a quiz [{title}](<{url}f/p/{threadId}>) in "
|
|
||||||
"{forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) stworzył(a) quiz [{title}](<{url}f/p/{threadId}>) w "
|
|
||||||
"{forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:54
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}f/p/{threadId}/r/{postId}>) "
|
|
||||||
"to [{title}](<{url}f/p/{threadId}>) in {forumName}"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) dodał(a) [odpowiedź](<{url}f/p/{threadId}/r/{postId}"
|
|
||||||
">) pod tematem [{title}](<{url}f/p/{threadId}>) w {forumName}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:61
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created [{title}](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}>) on [{user}'s Message Wall](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) zostawił(a) [{title}](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}>) na [tablicy wiadomości {user}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}>)"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:64
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}#{replyId}>) to [{title}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}>) on [{user}'s Message Wall]"
|
|
||||||
"(<{url}wiki/Message_Wall:{user_wall}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) dodał(a) [odpowiedź](<{url}wiki/Message_Wall:"
|
|
||||||
"{user_wall}?threadId={threadId}#{replyId}>) do [{title}](<{url}wiki/"
|
|
||||||
"Message_Wall:{user_wall}?threadId={threadId}>) na [tablicy wiadomości {user}]"
|
|
||||||
"(<{url}wiki/Message_Wall:{user_wall}>)"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:72
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [comment](<{url}?commentId={commentId}>) "
|
|
||||||
"on [{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) dodał(a) [komentarz](<{url}?commentId={commentId}>) "
|
|
||||||
"w [{article}](<{url}>)"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:78
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"[{author}]({author_url}) created a [reply](<{url}?commentId={commentId}"
|
|
||||||
"&replyId={replyId}>) to a [comment](<{url}?commentId={commentId}>) on "
|
|
||||||
"[{article}](<{url}>)"
|
|
||||||
msgstr ""
|
|
||||||
"[{author}]({author_url}) dodał(a) [odpowiedź](<{url}?commentId={commentId}"
|
|
||||||
"&replyId={replyId}>) na [komentarz](<{url}?commentId={commentId}>) w "
|
|
||||||
"artykule [{article}](<{url}>)"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:86
|
|
||||||
#, python-brace-format
|
|
||||||
msgid ""
|
|
||||||
"Unknown event `{event}` by [{author}]({author_url}), report it on the "
|
|
||||||
"[support server](<{support}>)."
|
|
||||||
msgstr ""
|
|
||||||
"Nieznane wydarzenie `{event}` wykonane przez [{author}]({author_url}), zgłoś "
|
|
||||||
"je na [serwerze wsparcia](<{support}>)."
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:123
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\""
|
|
||||||
msgstr "Stworzył(a) „{title}”"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:127
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a poll \"{title}\""
|
|
||||||
msgstr "Stworzył(a) ankietę zatytułowaną „{title}”"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:134
|
|
||||||
msgid "Option {}"
|
|
||||||
msgstr "Opcja {}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:135
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "__[View image]({image_url})__"
|
|
||||||
msgstr "__[Zobacz zdjęcie]({image_url})__"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:139
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created a quiz \"{title}\""
|
|
||||||
msgstr "Stworzył(a) quiz „{title}”"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:155 src/discussion_formatters.py:157
|
|
||||||
msgid "Tags"
|
|
||||||
msgstr "Fora"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:155
|
|
||||||
msgid "{} tags"
|
|
||||||
msgstr "{} tagów"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:160
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\""
|
|
||||||
msgstr "Odpowiedział(a) w „{title}”"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:169
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Created \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr "Stworzył(a) „{title}” na tablicy wiadomości {user}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:173
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to \"{title}\" on {user}'s Message Wall"
|
|
||||||
msgstr "Odpowiedział(a) na „{title}” z tablicy wiadomości {user}"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:180
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Commented on {article}"
|
|
||||||
msgstr "Skomentował(a) „{article}”"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:184
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Replied to a comment on {article}"
|
|
||||||
msgstr "Odpowiedział(a) na komentarz w „{article}”"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:188
|
|
||||||
#, python-brace-format
|
|
||||||
msgid "Unknown event `{event}`"
|
|
||||||
msgstr "Nieznane wydarzenie `{event}`"
|
|
||||||
|
|
||||||
#: src/discussion_formatters.py:194 src/discussion_formatters.py:196
|
|
||||||
msgid "Report this on the support server"
|
|
||||||
msgstr "Zgłoś to na serwerze wsparcia"
|
|
BIN
locale/pl/LC_MESSAGES/formatters.mo
Normal file
BIN
locale/pl/LC_MESSAGES/formatters.mo
Normal file
Binary file not shown.
2012
locale/pl/LC_MESSAGES/formatters.po
Normal file
2012
locale/pl/LC_MESSAGES/formatters.po
Normal file
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue