From a2e37a7707bcd6e2f0a4d3fa4fe1687210566cea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Pito=C5=84?= Date: Sun, 24 Sep 2023 14:52:00 +0200 Subject: [PATCH] Admin translation tweaks (#1636) --- .../src/components/options/edit-details.js | 4 +- .../profile/moderation/avatar-controls.js | 4 +- misago/admin/forms.py | 2 +- misago/categories/admin/forms.py | 4 +- misago/conf/admin/forms/analytics.py | 8 +- misago/conf/admin/forms/general.py | 2 +- misago/conf/admin/forms/notifications.py | 4 +- misago/conf/admin/forms/oauth2.py | 2 +- misago/conf/admin/forms/threads.py | 2 +- misago/conf/admin/forms/users.py | 16 +- misago/graphql/admin/versioncheck.py | 4 +- misago/locale/en/LC_MESSAGES/django.po | 262 +- misago/locale/en/LC_MESSAGES/djangojs.po | 9 +- misago/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 11500 bytes misago/locale/hu/LC_MESSAGES/django.po | 11939 ++++++++++++++++ misago/locale/pl/LC_MESSAGES/django.mo | Bin 4334 -> 145773 bytes misago/locale/pl/LC_MESSAGES/django.po | 2692 ++-- misago/locale/pl/LC_MESSAGES/djangojs.mo | Bin 526 -> 5530 bytes misago/locale/pl/LC_MESSAGES/djangojs.po | 230 +- misago/menus/admin/forms.py | 2 +- misago/oauth2/exceptions.py | 2 +- .../oauth2/tests/test_oauth2_complete_view.py | 11 +- .../tests/test_user_creation_from_data.py | 9 +- .../tests/test_user_update_with_data.py | 10 +- misago/oauth2/user.py | 10 +- misago/socialauth/admin/forms/base.py | 2 +- misago/static/misago/js/misago.js | 2 +- misago/static/misago/js/misago.js.map | 2 +- misago/templates/misago/acl_debug.html | 2 +- .../misago/admin/attachments/list.html | 4 +- .../misago/admin/attachmenttypes/list.html | 4 +- .../misago/admin/dashboard/checks.html | 6 +- .../misago/admin/dashboard/index.html | 2 +- .../misago/admin/errorpages/404.html | 2 +- .../misago/admin/socialauth/form.html | 2 +- .../misago/admin/socialauth/list.html | 4 +- .../templates/misago/admin/themes/import.html | 2 +- misago/templates/misago/admin/users/edit.html | 2 +- misago/templates/misago/errorpages/404.html | 8 +- misago/themes/admin/forms.py | 2 +- misago/threads/admin/__init__.py | 3 +- misago/threads/admin/views/attachments.py | 2 +- misago/threads/admin/views/attachmenttypes.py | 2 +- misago/users/admin/forms.py | 16 +- misago/users/admin/tests/test_ranks.py | 4 +- .../users/tests/test_user_changeemail_api.py | 3 +- misago/users/tests/test_user_create_api.py | 6 +- misago/users/urls/__init__.py | 2 +- 48 files changed, 13879 insertions(+), 1433 deletions(-) create mode 100644 misago/locale/hu/LC_MESSAGES/django.mo create mode 100644 misago/locale/hu/LC_MESSAGES/django.po diff --git a/frontend/src/components/options/edit-details.js b/frontend/src/components/options/edit-details.js index 0c36138f16..1c0f1317e5 100644 --- a/frontend/src/components/options/edit-details.js +++ b/frontend/src/components/options/edit-details.js @@ -12,7 +12,9 @@ export default class extends React.Component { } onSuccess = () => { - snackbar.info(pgettext("edit details", "Your details have been updated.")) + snackbar.info( + pgettext("profile details form", "Your details have been updated.") + ) } render() { diff --git a/frontend/src/components/profile/moderation/avatar-controls.js b/frontend/src/components/profile/moderation/avatar-controls.js index be86efae35..32bde4096d 100644 --- a/frontend/src/components/profile/moderation/avatar-controls.js +++ b/frontend/src/components/profile/moderation/avatar-controls.js @@ -106,7 +106,7 @@ export default class extends Form { label={pgettext("profile avatar moderation field", "User message")} helpText={pgettext( "profile avatar moderation field", - "Optional message for user explaining why he/she is prohibited form changing avatar." + "Optional message for user explaining why they are prohibited from changing their avatar." )} for="id_avatar_lock_user_message" > @@ -124,7 +124,7 @@ export default class extends Form { label={pgettext("profile avatar moderation field", "Staff message")} helpText={pgettext( "profile avatar moderation field", - "Optional message for forum team members explaining why user is prohibited form changing avatar." + "Optional message for forum team members explaining why the user is prohibited form changing their avatar." )} for="id_avatar_lock_staff_message" > diff --git a/misago/admin/forms.py b/misago/admin/forms.py index 7425505cbf..8f108af775 100644 --- a/misago/admin/forms.py +++ b/misago/admin/forms.py @@ -44,7 +44,7 @@ def ColorField(**kwargs): flags=re.IGNORECASE, message=pgettext_lazy( "admin color field", - "Value must be a 7-character string specifying an RGB color in a hexadecimal format.", + 'Value must be a 7-character string specifying an RGB color in a hexadecimal format (eg.: "#F5A9B8").', ), ) ], diff --git a/misago/categories/admin/forms.py b/misago/categories/admin/forms.py index d935496cae..b2d3ea813c 100644 --- a/misago/categories/admin/forms.py +++ b/misago/categories/admin/forms.py @@ -91,7 +91,7 @@ class CategoryFormBase(forms.ModelForm): required=False, help_text=pgettext_lazy( "admin category form", - "Optional CSS class used to customize this category's appearance from templates.", + "Optional CSS class used to customize this category's appearance from themes.", ), ) is_closed = YesNoSwitch( @@ -250,7 +250,7 @@ def clean(self): if moving_to_child and not data.get("move_children_to"): message = pgettext_lazy( "admin category form", - "You are trying to move this category threads to a child category that will be deleted together with this category.", + "You are trying to move this category threads to a child category that will also be deleted.", ) raise forms.ValidationError(message) diff --git a/misago/conf/admin/forms/analytics.py b/misago/conf/admin/forms/analytics.py index d6b7a784e8..1281d2ba06 100644 --- a/misago/conf/admin/forms/analytics.py +++ b/misago/conf/admin/forms/analytics.py @@ -22,10 +22,10 @@ class AnalyticsSettingsForm(SettingsForm): required=False, ) google_site_verification = forms.CharField( - label=pgettext_lazy("admin analytics settings form", "Site verification token"), + label=pgettext_lazy("admin analytics settings form", "Site verification code"), help_text=pgettext_lazy( "admin analytics settings form", - "This token was extracted from uploaded site verification file. To change it, upload new verification file.", + "This code was extracted from the uploaded site verification file. To change it, upload new verification file.", ), required=False, disabled=True, @@ -49,7 +49,7 @@ def clean_google_site_verification_file(self): if upload.content_type != "text/html": raise forms.ValidationError( pgettext_lazy( - "admin analytics settings form", "Submitted file type is not HTML." + "admin analytics settings form", "Uploaded file type is not HTML." ) ) @@ -59,7 +59,7 @@ def clean_google_site_verification_file(self): raise forms.ValidationError( pgettext_lazy( "admin analytics settings form", - "Submitted file doesn't contain a verification code.", + "Uploaded file doesn't contain a verification code.", ) ) diff --git a/misago/conf/admin/forms/general.py b/misago/conf/admin/forms/general.py index 97818b6ed1..4d5f1009fc 100644 --- a/misago/conf/admin/forms/general.py +++ b/misago/conf/admin/forms/general.py @@ -150,7 +150,7 @@ class GeneralSettingsForm(SettingsForm): ), help_text=pgettext_lazy( "admin general settings form", - "Hiding the link to the ACP from user menus reduces risk of malicious actors gaining access to admin session for admin users who are sharing their PC with others or who are logging in to the site in public spaces.", + "Hiding the link to the ACP from user menus reduces risk of malicious actors gaining access to admin session for admin users who are sharing their device with others or who are logging in to the site in public spaces.", ), ) diff --git a/misago/conf/admin/forms/notifications.py b/misago/conf/admin/forms/notifications.py index a93076ff2e..2367a66a77 100644 --- a/misago/conf/admin/forms/notifications.py +++ b/misago/conf/admin/forms/notifications.py @@ -19,7 +19,7 @@ class NotificationsSettingsForm(SettingsForm): watch_started_threads = forms.TypedChoiceField( label=pgettext_lazy( "admin notifications settings form", - "Notify about new replies in threads started by the user", + "Notify about new replies in threads started by them", ), choices=ThreadNotifications.choices, widget=forms.RadioSelect(), @@ -28,7 +28,7 @@ class NotificationsSettingsForm(SettingsForm): watch_replied_threads = forms.TypedChoiceField( label=pgettext_lazy( "admin notifications settings form", - "Notify about new replies in threads replied to by the user", + "Notify about new replies in threads replied to by them", ), choices=ThreadNotifications.choices, widget=forms.RadioSelect(), diff --git a/misago/conf/admin/forms/oauth2.py b/misago/conf/admin/forms/oauth2.py index decfd617ed..a69d4309db 100644 --- a/misago/conf/admin/forms/oauth2.py +++ b/misago/conf/admin/forms/oauth2.py @@ -76,7 +76,7 @@ class OAuth2SettingsForm(SettingsForm): label=pgettext_lazy("admin oauth2 settings form", "Login form URL"), help_text=pgettext_lazy( "admin oauth2 settings form", - "Address to login form on provider's server that users will be redirected to.", + "Address of the login form on provider's server that users will be redirected to.", ), max_length=500, required=False, diff --git a/misago/conf/admin/forms/threads.py b/misago/conf/admin/forms/threads.py index 7057bce6c3..8865cc2ff5 100644 --- a/misago/conf/admin/forms/threads.py +++ b/misago/conf/admin/forms/threads.py @@ -111,7 +111,7 @@ class ThreadsSettingsForm(SettingsForm): label=pgettext_lazy("admin threads settings form", "Maximum orphans"), help_text=pgettext_lazy( "admin threads settings form", - "If number of posts to be displayed on the last page is less or equal to number specified in this setting, those posts will instead be displayed on previous page, reducing the total number of pages in thread.", + "This setting prevents situations when the last page of a thread contains very few items. If number of posts to be displayed on the last page is less or equal to number specified in this setting, those posts will instead be appended to the previous page, reducing number of thread's pages.", ), min_value=0, ) diff --git a/misago/conf/admin/forms/users.py b/misago/conf/admin/forms/users.py index 5fc42f5633..2264fd0f6f 100644 --- a/misago/conf/admin/forms/users.py +++ b/misago/conf/admin/forms/users.py @@ -1,5 +1,5 @@ from django import forms -from django.utils.translation import pgettext_lazy +from django.utils.translation import npgettext_lazy, pgettext_lazy from ....admin.forms import YesNoSwitch from ....core.validators import validate_image_square @@ -100,7 +100,7 @@ class UsersSettingsForm(SettingsForm): label=pgettext_lazy("admin users settings form", "Allow custom avatar uploads"), help_text=pgettext_lazy( "admin users settings form", - "Turning this option off will forbid forum users from uploading custom avatars. Good for forums adressed at young users.", + "Turning this option off will forbid forum users from uploading custom avatars.", ), ) avatar_upload_limit = forms.IntegerField( @@ -142,11 +142,11 @@ class UsersSettingsForm(SettingsForm): ) default_gravatar_fallback = forms.ChoiceField( label=pgettext_lazy( - "admin users settings form", "Fallback for default gravatar" + "admin users settings form", "Fallback for default Gravatar" ), help_text=pgettext_lazy( "admin users settings form", - "Select which avatar to use when user has no gravatar associated with their e-mail address.", + "Select which avatar to use when user has no Gravatar associated with their e-mail address.", ), choices=[ ( @@ -236,7 +236,7 @@ class UsersSettingsForm(SettingsForm): label=pgettext_lazy("admin users settings form", "Maximum orphans"), help_text=pgettext_lazy( "admin users settings form", - "If number of users to be displayed on the last page is less or equal to number specified in this setting, those users will instead be displayed on previous page, reducing the total number of pages on the list.", + "This setting prevents situations when the last page of a users list contains very few items. If number of users to be displayed on the last page is less or equal to number specified in this setting, those users will instead be appended to the previous page, reducing number of list's pages.", ), min_value=0, ) @@ -244,7 +244,7 @@ class UsersSettingsForm(SettingsForm): top_posters_ranking_length = forms.IntegerField( label=pgettext_lazy( "admin users settings form", - "Maximum age in days of posts that should count to the ranking", + "Maximum age in days of posts that should count to the ranking position", ), min_value=1, ) @@ -307,9 +307,11 @@ def clean_blank_avatar(self): min_size = max(settings.MISAGO_AVATARS_SIZES) if upload.image.width < min_size: raise forms.ValidationError( - pgettext_lazy( + npgettext_lazy( "admin users settings form", + "Uploaded image's edge should be at least %(size)s pixel long.", "Uploaded image's edge should be at least %(size)s pixels long.", + min_size, ) % {"size": min_size} ) diff --git a/misago/graphql/admin/versioncheck.py b/misago/graphql/admin/versioncheck.py index 9f5267f455..018fa91eab 100644 --- a/misago/graphql/admin/versioncheck.py +++ b/misago/graphql/admin/versioncheck.py @@ -30,7 +30,7 @@ def get_unreleased_error(): ), "description": pgettext( "admin version check", - "Unreleased versions of Misago can lack security features and there is no supported way to upgrade them to release versions later.", + "Unreleased versions of Misago can contain serious breaking bugs or miss security features. They are also unsupported and it may be impossible to upgrade them to released version later.", ), } @@ -48,7 +48,7 @@ def check_version_with_api(): ), "description": pgettext( "admin version check", - "Version check feature relies on the API operated by the Python Package Index (pypi.org) API to retrieve latest Misago release version.", + "Version check feature relies on the API operated by the Python Package Index (pypi.org) to retrieve the latest Misago release version.", ), } diff --git a/misago/locale/en/LC_MESSAGES/django.po b/misago/locale/en/LC_MESSAGES/django.po index 22db55f0cc..cb1bc9d5d8 100644 --- a/misago/locale/en/LC_MESSAGES/django.po +++ b/misago/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-01 11:49+0000\n" +"POT-Creation-Date: 2023-09-24 12:16+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -136,7 +136,7 @@ msgstr "" msgctxt "admin color field" msgid "" "Value must be a 7-character string specifying an RGB color in a hexadecimal " -"format." +"format (eg.: \"#F5A9B8\")." msgstr "" #: admin/forms.py:67 templates/misago/admin/users/edit.html:145 @@ -248,8 +248,7 @@ msgstr "" #: categories/admin/forms.py:94 msgctxt "admin category form" msgid "" -"Optional CSS class used to customize this category's appearance from " -"templates." +"Optional CSS class used to customize this category's appearance from themes." msgstr "" #: categories/admin/forms.py:98 @@ -375,7 +374,7 @@ msgstr "" msgctxt "admin category form" msgid "" "You are trying to move this category threads to a child category that will " -"be deleted together with this category." +"also be deleted." msgstr "" #: categories/admin/forms.py:264 @@ -648,14 +647,14 @@ msgstr "" #: conf/admin/forms/analytics.py:25 msgctxt "admin analytics settings form" -msgid "Site verification token" +msgid "Site verification code" msgstr "" #: conf/admin/forms/analytics.py:28 msgctxt "admin analytics settings form" msgid "" -"This token was extracted from uploaded site verification file. To change it, " -"upload new verification file." +"This code was extracted from the uploaded site verification file. To change " +"it, upload new verification file." msgstr "" #: conf/admin/forms/analytics.py:35 @@ -672,12 +671,12 @@ msgstr "" #: conf/admin/forms/analytics.py:52 msgctxt "admin analytics settings form" -msgid "Submitted file type is not HTML." +msgid "Uploaded file type is not HTML." msgstr "" #: conf/admin/forms/analytics.py:62 msgctxt "admin analytics settings form" -msgid "Submitted file doesn't contain a verification code." +msgid "Uploaded file doesn't contain a verification code." msgstr "" #: conf/admin/forms/captcha.py:21 @@ -930,7 +929,7 @@ msgstr "" msgctxt "admin general settings form" msgid "" "Hiding the link to the ACP from user menus reduces risk of malicious actors " -"gaining access to admin session for admin users who are sharing their PC " +"gaining access to admin session for admin users who are sharing their device " "with others or who are logging in to the site in public spaces." msgstr "" @@ -944,12 +943,12 @@ msgstr "" #: conf/admin/forms/notifications.py:22 msgctxt "admin notifications settings form" -msgid "Notify about new replies in threads started by the user" +msgid "Notify about new replies in threads started by them" msgstr "" #: conf/admin/forms/notifications.py:31 msgctxt "admin notifications settings form" -msgid "Notify about new replies in threads replied to by the user" +msgid "Notify about new replies in threads replied to by them" msgstr "" #: conf/admin/forms/notifications.py:41 @@ -1036,7 +1035,8 @@ msgstr "" #: conf/admin/forms/oauth2.py:79 msgctxt "admin oauth2 settings form" msgid "" -"Address to login form on provider's server that users will be redirected to." +"Address of the login form on provider's server that users will be redirected " +"to." msgstr "" #: conf/admin/forms/oauth2.py:86 @@ -1287,9 +1287,10 @@ msgstr "" #: conf/admin/forms/threads.py:114 msgctxt "admin threads settings form" msgid "" -"If number of posts to be displayed on the last page is less or equal to " -"number specified in this setting, those posts will instead be displayed on " -"previous page, reducing the total number of pages in thread." +"This setting prevents situations when the last page of a thread contains " +"very few items. If number of posts to be displayed on the last page is less " +"or equal to number specified in this setting, those posts will instead be " +"appended to the previous page, reducing number of thread's pages." msgstr "" #: conf/admin/forms/threads.py:121 @@ -1392,7 +1393,7 @@ msgstr "" msgctxt "admin users settings form" msgid "" "Turning this option off will forbid forum users from uploading custom " -"avatars. Good for forums adressed at young users." +"avatars." msgstr "" #: conf/admin/forms/users.py:108 @@ -1427,13 +1428,13 @@ msgstr "" #: conf/admin/forms/users.py:145 msgctxt "admin users settings form" -msgid "Fallback for default gravatar" +msgid "Fallback for default Gravatar" msgstr "" #: conf/admin/forms/users.py:149 msgctxt "admin users settings form" msgid "" -"Select which avatar to use when user has no gravatar associated with their e-" +"Select which avatar to use when user has no Gravatar associated with their e-" "mail address." msgstr "" @@ -1508,14 +1509,15 @@ msgstr "" #: conf/admin/forms/users.py:239 msgctxt "admin users settings form" msgid "" -"If number of users to be displayed on the last page is less or equal to " -"number specified in this setting, those users will instead be displayed on " -"previous page, reducing the total number of pages on the list." +"This setting prevents situations when the last page of a users list contains " +"very few items. If number of users to be displayed on the last page is less " +"or equal to number specified in this setting, those users will instead be " +"appended to the previous page, reducing number of list's pages." msgstr "" #: conf/admin/forms/users.py:247 msgctxt "admin users settings form" -msgid "Maximum age in days of posts that should count to the ranking" +msgid "Maximum age in days of posts that should count to the ranking position" msgstr "" #: conf/admin/forms/users.py:253 @@ -1573,10 +1575,12 @@ msgstr "" #: conf/admin/forms/users.py:312 #, python-format msgctxt "admin users settings form" -msgid "Uploaded image's edge should be at least %(size)s pixels long." -msgstr "" +msgid "Uploaded image's edge should be at least %(size)s pixel long." +msgid_plural "Uploaded image's edge should be at least %(size)s pixels long." +msgstr[0] "" +msgstr[1] "" -#: conf/admin/forms/users.py:328 +#: conf/admin/forms/users.py:330 msgctxt "admin users settings form" msgid "This value must be lower than number of users per page." msgstr "" @@ -1667,8 +1671,9 @@ msgstr "" #: graphql/admin/versioncheck.py:33 msgctxt "admin version check" msgid "" -"Unreleased versions of Misago can lack security features and there is no " -"supported way to upgrade them to release versions later." +"Unreleased versions of Misago can contain serious breaking bugs or miss " +"security features. They are also unsupported and it may be impossible to " +"upgrade them to released version later." msgstr "" #: graphql/admin/versioncheck.py:47 @@ -1682,7 +1687,7 @@ msgstr "" msgctxt "admin version check" msgid "" "Version check feature relies on the API operated by the Python Package Index " -"(pypi.org) API to retrieve latest Misago release version." +"(pypi.org) to retrieve the latest Misago release version." msgstr "" #: graphql/admin/versioncheck.py:76 @@ -1976,7 +1981,8 @@ msgstr "" #: menus/admin/forms.py:28 msgctxt "admin menu item form" -msgid "If you want to set custom value for link's \"class\"." +msgid "" +"Optional. Additional CSS class to include in link's \"class\" HTML attribute." msgstr "" #: menus/admin/forms.py:33 @@ -2177,7 +2183,7 @@ msgstr "" #: oauth2/exceptions.py:104 msgctxt "oauth2 error" -msgid "JSON sent by the OAuth2 provider did not contain a user id." +msgid "JSON sent by the OAuth2 provider did not contain a user ID." msgstr "" #: oauth2/exceptions.py:112 @@ -2192,14 +2198,17 @@ msgctxt "oauth2 error" msgid "User profile retrieved from the OAuth2 provider did not validate." msgstr "" -#: oauth2/user.py:98 +#: oauth2/user.py:100 msgctxt "oauth2 error" -msgid "This e-mail address is not available." +msgid "" +"Your e-mail address returned by the provider is not available for use on " +"this site." msgstr "" -#: oauth2/user.py:105 +#: oauth2/user.py:110 msgctxt "oauth2 error" -msgid "This username is not available." +msgid "" +"Your username returned by the provider is not available for use on this site." msgstr "" #: search/api.py:18 @@ -2255,10 +2264,11 @@ msgstr "" #: socialauth/admin/forms/base.py:50 msgctxt "admin social auth provider form" msgid "" -"Enabling this option will result in the user being signed in if their forum " -"account was registered using same e-mail address as used on the social site. " -"Otherwise they will be asked to specify a different e-mail to continue sign " -"in using social site." +"This setting controls handling of e-mail collisions that occur when e-mail " +"address returned from social site is already stored in the forum's database. " +"Enabling this option will result in the user being signed in to pre-existing " +"account. Otherwise they will be asked to specify a different e-mail to " +"complete the sign in using social site." msgstr "" #: socialauth/admin/forms/base.py:59 socialauth/admin/forms/base.py:61 @@ -2364,10 +2374,7 @@ msgstr "" #: templates/misago/acl_debug.html:5 #, python-format msgctxt "debug toolbar user acl" -msgid "" -"\n" -" %(user)s roles\n" -" " +msgid "%(user)s roles" msgstr "" #: templates/misago/acl_debug.html:9 @@ -2616,25 +2623,30 @@ msgstr "" #: templates/misago/admin/attachments/list.html:59 msgctxt "admin orphaned attachment" -msgid "None" +msgid "This attachment is not associated with any existing post." +msgstr "" + +#: templates/misago/admin/attachments/list.html:60 +msgctxt "admin orphaned attachment" +msgid "Orphaned" msgstr "" -#: templates/misago/admin/attachments/list.html:66 +#: templates/misago/admin/attachments/list.html:68 msgctxt "admin attachments" msgid "Delete" msgstr "" -#: templates/misago/admin/attachments/list.html:76 +#: templates/misago/admin/attachments/list.html:78 msgctxt "admin attachments" msgid "No attachments matching criteria exist." msgstr "" -#: templates/misago/admin/attachments/list.html:78 +#: templates/misago/admin/attachments/list.html:80 msgctxt "admin attachments" msgid "No attachments exist." msgstr "" -#: templates/misago/admin/attachments/list.html:113 +#: templates/misago/admin/attachments/list.html:115 msgctxt "admin attachments" msgid "Are you sure you want to delete this attachment?" msgstr "" @@ -2691,7 +2703,7 @@ msgstr "" #: templates/misago/admin/attachmenttypes/list.html:33 msgctxt "admin attachments types list item" -msgid "Uploading new files of this type is disabled" +msgid "Uploading new files of this type is disabled." msgstr "" #: templates/misago/admin/attachmenttypes/list.html:34 @@ -2701,7 +2713,7 @@ msgstr "" #: templates/misago/admin/attachmenttypes/list.html:37 msgctxt "admin attachments types list item" -msgid "Uploading and downloading files of this type is disabled" +msgid "Uploading and downloading files of this type is disabled." msgstr "" #: templates/misago/admin/attachmenttypes/list.html:38 @@ -3352,7 +3364,7 @@ msgstr "" #: templates/misago/admin/dashboard/checks.html:82 msgctxt "admin site address check" -msgid "Links in e-mails sentby Misago will be broken." +msgid "Links in e-mails sent by Misago may be broken." msgstr "" #: templates/misago/admin/dashboard/checks.html:102 @@ -3376,7 +3388,7 @@ msgstr "" msgctxt "admin cache check" msgid "" "This will cause degraded performance and increased CPU usage by the site, " -"possibly leading to increased hosting costs." +"leading to worse user experience and increased hosting costs." msgstr "" #: templates/misago/admin/dashboard/checks.html:133 @@ -3563,7 +3575,7 @@ msgstr "" #: templates/misago/admin/errorpages/404.html:16 msgctxt "admin error 404" msgid "" -"The link you clicked was incorrect or the page has been moved or deleted." +"The link you've followed was incorrect or the page has been moved or deleted." msgstr "" #: templates/misago/admin/errorpages/csrf_failure.html:5 @@ -4104,6 +4116,7 @@ msgid "Enabled login methods" msgstr "" #: templates/misago/admin/socialauth/list.html:15 +#: templates/misago/admin/socialauth/list.html:115 msgctxt "admin social auth providers list" msgid "Provider" msgstr "" @@ -4152,15 +4165,10 @@ msgid "" msgstr "" #: templates/misago/admin/socialauth/list.html:109 -msgctxt "admin social auth providers" +msgctxt "admin social auth providers list" msgid "Setup new login method" msgstr "" -#: templates/misago/admin/socialauth/list.html:115 -msgctxt "admin social auth providers" -msgid "Provider" -msgstr "" - #: templates/misago/admin/socialauth/list.html:128 msgctxt "admin social auth providers" msgid "Setup login with this provider" @@ -4436,7 +4444,7 @@ msgid "Import theme" msgstr "" #: templates/misago/admin/themes/import.html:23 -msgctxt "admin theme import" +msgctxt "admin theme import submit" msgid "Import" msgstr "" @@ -4711,7 +4719,8 @@ msgstr "" #: templates/misago/admin/users/edit.html:264 msgctxt "admin user form" msgid "" -"No additional action is required. This account will be deleted automatically." +"No additional action is required. This account will be deleted automatically " +"when process is completed." msgstr "" #: templates/misago/admin/users/edit.html:307 @@ -5211,9 +5220,10 @@ msgstr "" #: templates/misago/errorpages/404.html:9 #: templates/misago/errorpages/404.html:18 #: templates/misago/errorpages/404.html:23 +#: templates/misago/errorpages/404.html:38 msgctxt "error 404 page" msgid "" -"The link you clicked was incorrect or the page has been moved or deleted." +"The link you've followed was incorrect or the page has been moved or deleted." msgstr "" #: templates/misago/errorpages/404.html:37 @@ -5221,12 +5231,6 @@ msgctxt "error 404 page" msgid "Requested page could not be found." msgstr "" -#: templates/misago/errorpages/404.html:38 -msgctxt "error 404 page" -msgid "" -"The link you followed was incorrect or the page has been moved or deleted." -msgstr "" - #: templates/misago/errorpages/405.html:5 #: templates/misago/errorpages/405.html:13 #: templates/misago/errorpages/405.html:14 @@ -6794,7 +6798,7 @@ msgstr "" #: themes/admin/forms.py:200 msgctxt "admin theme css form" msgid "" -"Should be an correct filename and include the .css extension. It will be " +"Should be a correct filename and include the .css extension. It will be " "lowercased." msgstr "" @@ -7036,9 +7040,9 @@ msgctxt "admin node" msgid "Attachment types" msgstr "" -#: threads/admin/__init__.py:45 +#: threads/admin/__init__.py:46 msgctxt "admin node" -msgid "Specify what files may be uploaded on the forum." +msgid "Specify what files may be uploaded as part of user posts." msgstr "" #: threads/admin/forms.py:8 @@ -7166,7 +7170,7 @@ msgstr "" #: threads/admin/views/attachments.py:15 msgctxt "admin attachments" -msgid "Requested attachment could not be found." +msgid "Requested attachment does not exist." msgstr "" #: threads/admin/views/attachments.py:28 @@ -7232,7 +7236,7 @@ msgstr "" #: threads/admin/views/attachmenttypes.py:16 msgctxt "admin attachments types" -msgid "Requested attachment type could not be found." +msgid "Requested attachment type does not exist." msgstr "" #: threads/admin/views/attachmenttypes.py:39 @@ -9768,19 +9772,19 @@ msgstr "" #: users/admin/forms.py:107 msgctxt "admin user form" -msgid "Change password to" +msgid "Set new password" msgstr "" #: users/admin/forms.py:114 msgctxt "admin user form" -msgid "Lock avatar" +msgid "Lock avatar changes" msgstr "" #: users/admin/forms.py:117 msgctxt "admin user form" msgid "" -"Setting this to yes will stop user from changing his/her avatar, and will " -"reset his/her avatar to procedurally generated one." +"Setting this to yes will stop user from changing their avatar, and will " +"reset their avatar to procedurally generated one." msgstr "" #: users/admin/forms.py:121 users/admin/forms.py:152 @@ -9791,7 +9795,7 @@ msgstr "" #: users/admin/forms.py:124 msgctxt "admin user form" msgid "" -"Optional message for user explaining why he/she is banned form changing " +"Optional message for user explaining why they are banned form changing " "avatar." msgstr "" @@ -9809,7 +9813,7 @@ msgstr "" #: users/admin/forms.py:145 msgctxt "admin user form" -msgid "Lock signature" +msgid "Lock signature changes" msgstr "" #: users/admin/forms.py:148 @@ -10037,87 +10041,87 @@ msgid "" "others through dedicated page on forum users list." msgstr "" -#: users/admin/forms.py:541 +#: users/admin/forms.py:543 msgctxt "admin rank form" -msgid "This name collides with other rank." +msgid "There's already an other rank with this name." msgstr "" -#: users/admin/forms.py:549 +#: users/admin/forms.py:552 msgctxt "admin ban users form" msgid "Values to ban" msgstr "" -#: users/admin/forms.py:554 +#: users/admin/forms.py:557 msgctxt "admin ban users form" msgid "User message" msgstr "" -#: users/admin/forms.py:559 +#: users/admin/forms.py:562 msgctxt "admin ban users form" msgid "Optional message displayed to users instead of default one." msgstr "" -#: users/admin/forms.py:564 users/admin/forms.py:579 +#: users/admin/forms.py:567 users/admin/forms.py:582 msgctxt "admin ban users form" msgid "Message can't be longer than 1000 characters." msgstr "" -#: users/admin/forms.py:569 +#: users/admin/forms.py:572 msgctxt "admin ban users form" msgid "Team message" msgstr "" -#: users/admin/forms.py:574 +#: users/admin/forms.py:577 msgctxt "admin ban users form" msgid "Optional ban message for moderators and administrators." msgstr "" -#: users/admin/forms.py:584 +#: users/admin/forms.py:587 msgctxt "admin ban users form" msgid "Expiration date" msgstr "" -#: users/admin/forms.py:593 +#: users/admin/forms.py:596 msgctxt "admin ban users form" msgid "Usernames" msgstr "" -#: users/admin/forms.py:594 +#: users/admin/forms.py:597 msgctxt "admin ban users form" msgid "E-mails" msgstr "" -#: users/admin/forms.py:595 +#: users/admin/forms.py:598 msgctxt "admin ban users form" msgid "E-mail domains" msgstr "" -#: users/admin/forms.py:601 +#: users/admin/forms.py:604 msgctxt "admin ban users form" msgid "IP addresses" msgstr "" -#: users/admin/forms.py:605 +#: users/admin/forms.py:608 msgctxt "admin ban users form" msgid "First segment of IP addresses" msgstr "" -#: users/admin/forms.py:611 +#: users/admin/forms.py:614 msgctxt "admin ban users form" msgid "First two segments of IP addresses" msgstr "" -#: users/admin/forms.py:619 +#: users/admin/forms.py:622 msgctxt "admin ban form" msgid "Check type" msgstr "" -#: users/admin/forms.py:624 +#: users/admin/forms.py:627 msgctxt "admin ban form" msgid "Restrict this ban to registrations" msgstr "" -#: users/admin/forms.py:627 +#: users/admin/forms.py:630 msgctxt "admin ban form" msgid "" "Changing this to yes will make this ban check be only performed on " @@ -10126,12 +10130,12 @@ msgid "" "existing users." msgstr "" -#: users/admin/forms.py:631 +#: users/admin/forms.py:634 msgctxt "admin ban form" msgid "Banned value" msgstr "" -#: users/admin/forms.py:635 +#: users/admin/forms.py:638 msgctxt "admin ban form" msgid "" "This value is case-insensitive and accepts asterisk (*) for partial matches. " @@ -10139,122 +10143,122 @@ msgid "" "beginning with \"83.\"." msgstr "" -#: users/admin/forms.py:639 +#: users/admin/forms.py:642 msgctxt "admin ban form" msgid "Banned value can't be longer than 250 characters." msgstr "" -#: users/admin/forms.py:644 +#: users/admin/forms.py:647 msgctxt "admin ban form" msgid "User message" msgstr "" -#: users/admin/forms.py:649 +#: users/admin/forms.py:652 msgctxt "admin ban form" msgid "Optional message displayed to user instead of default one." msgstr "" -#: users/admin/forms.py:654 users/admin/forms.py:668 +#: users/admin/forms.py:657 users/admin/forms.py:671 msgctxt "admin ban form" msgid "Message can't be longer than 1000 characters." msgstr "" -#: users/admin/forms.py:659 +#: users/admin/forms.py:662 msgctxt "admin ban form" msgid "Team message" msgstr "" -#: users/admin/forms.py:663 +#: users/admin/forms.py:666 msgctxt "admin ban form" msgid "Optional ban message for moderators and administrators." msgstr "" -#: users/admin/forms.py:673 +#: users/admin/forms.py:676 msgctxt "admin ban form" msgid "Expiration date" msgstr "" -#: users/admin/forms.py:695 +#: users/admin/forms.py:698 msgctxt "admin ban form" msgid "Banned value is too vague." msgstr "" -#: users/admin/forms.py:703 +#: users/admin/forms.py:706 msgctxt "admin bans filter form" msgid "Type" msgstr "" -#: users/admin/forms.py:706 +#: users/admin/forms.py:709 msgctxt "admin bans type filter choice" msgid "All bans" msgstr "" -#: users/admin/forms.py:707 +#: users/admin/forms.py:710 msgctxt "admin bans type filter choice" msgid "Usernames" msgstr "" -#: users/admin/forms.py:708 +#: users/admin/forms.py:711 msgctxt "admin bans filter form" msgid "E-mails" msgstr "" -#: users/admin/forms.py:709 +#: users/admin/forms.py:712 msgctxt "admin bans type filter choice" msgid "IPs" msgstr "" -#: users/admin/forms.py:713 +#: users/admin/forms.py:716 msgctxt "admin bans filter form" msgid "Banned value begins with" msgstr "" -#: users/admin/forms.py:717 +#: users/admin/forms.py:720 msgctxt "admin bans filter form" msgid "Registration only" msgstr "" -#: users/admin/forms.py:720 +#: users/admin/forms.py:723 msgctxt "admin bans registration filter choice" msgid "Any" msgstr "" -#: users/admin/forms.py:721 +#: users/admin/forms.py:724 msgctxt "admin bans registration filter choice" msgid "Yes" msgstr "" -#: users/admin/forms.py:722 +#: users/admin/forms.py:725 msgctxt "admin bans registration filter choice" msgid "No" msgstr "" -#: users/admin/forms.py:726 +#: users/admin/forms.py:729 msgctxt "admin bans filter form" msgid "State" msgstr "" -#: users/admin/forms.py:729 +#: users/admin/forms.py:732 msgctxt "admin bans state filter choice" msgid "Any" msgstr "" -#: users/admin/forms.py:730 +#: users/admin/forms.py:733 msgctxt "admin bans state filter choice" msgid "Active" msgstr "" -#: users/admin/forms.py:731 +#: users/admin/forms.py:734 msgctxt "admin bans state filter choice" msgid "Expired" msgstr "" -#: users/admin/forms.py:767 +#: users/admin/forms.py:770 msgctxt "admin data download request form" msgid "Usernames or emails" msgstr "" -#: users/admin/forms.py:770 +#: users/admin/forms.py:773 msgctxt "admin data download request form" msgid "" "Enter every item in new line. Duplicates will be ignored. This field is case " @@ -10263,7 +10267,7 @@ msgid "" "notification will be sent to every user once their download is ready." msgstr "" -#: users/admin/forms.py:784 +#: users/admin/forms.py:787 #, python-format msgctxt "admin data download request form" msgid "" @@ -10271,22 +10275,22 @@ msgid "" "%(show_value)s)." msgstr "" -#: users/admin/forms.py:804 +#: users/admin/forms.py:807 msgctxt "admin data download request form" msgid "One or more specified users could not be found." msgstr "" -#: users/admin/forms.py:813 +#: users/admin/forms.py:816 msgctxt "admin data download requests filter form" msgid "Status" msgstr "" -#: users/admin/forms.py:818 +#: users/admin/forms.py:821 msgctxt "admin data download requests filter form" msgid "User" msgstr "" -#: users/admin/forms.py:822 +#: users/admin/forms.py:825 msgctxt "admin data download requests filter form" msgid "Requested by" msgstr "" diff --git a/misago/locale/en/LC_MESSAGES/djangojs.po b/misago/locale/en/LC_MESSAGES/djangojs.po index c8be432a6c..b0fcb4cc36 100644 --- a/misago/locale/en/LC_MESSAGES/djangojs.po +++ b/misago/locale/en/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-01 11:49+0000\n" +"POT-Creation-Date: 2023-09-24 12:16+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1785,7 +1785,7 @@ msgid "Delete my account" msgstr "" #: static/misago/js/misago.js:1 -msgctxt "edit details" +msgctxt "profile details form" msgid "Your details have been updated." msgstr "" @@ -2203,11 +2203,6 @@ msgctxt "profile details edit btn" msgid "Edit" msgstr "" -#: static/misago/js/misago.js:1 -msgctxt "profile details form" -msgid "Your details have been updated." -msgstr "" - #: static/misago/js/misago.js:1 msgctxt "profile details form" msgid "%(username)s's details have been updated." diff --git a/misago/locale/hu/LC_MESSAGES/django.mo b/misago/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..988c056505dee317e251a0c04eae979a96b0ea9a GIT binary patch literal 11500 zcmchdYiu0Xb;lvw*3k!-g^IXpziic_0gAZ!&;|+GqA#Fd`ap^{ zh1&rAojZ@6rIwV0A|2@RzcYL1-gD3SpU1tczkdJN7agvE_F>v9?{XY@aQiL%;d<^? z$N4ExgYu{jz6Wf9W8m}PPVkq(JHgjM{yA^*=iT5RrT2dZ%KLu_%6oqU-U0ptDE)p2 z^3VBi{=665wmo_NAyE3?1O7DlQSdnU39tmd2>t^2JK#g$UxE9;58RgYdo;zD!Tmh{ z9{3>mzS|vV8k_~C|MQ@He;Ird{8#WP@FYUs4ZaF~68uB(KJdrj&w}@|=#PR2!Cl~U z;632yz$tJI6#2dnO8;#r?_uyBP=il^KM#Hj90$Lb;x?4vIy z0?xiKk>{J>Joj&bp9eque#iM0@Ef4WKXq3!p}pgjLPSOvch%KNu{z;QzG32+Da zZBT*#oZjF0!9=b-pxEP4a1U4p`RBaCA6frzgEQc_L6P_N4`CDVQy?NaEl}3?BFI1I z%lttEXB|8V{t5UZ_+BQF{;z-sz;A#o-T7NkfjN`<0s~Oi^HuPE@GVfr`w=KSf8ggF=PbAYiobjf{0R65Afh-w0Qu+q zJAatUxf9_qsq+9Raz6~pI!}TO>3kX#K6OCp|0VF*cc2GQ{N*kN7rYzfk#ipiHJwMm z!{8}U#(fEd`p#F=@7Gei3_?|>4~ifCIS3VLCjK%93J+cYw}G#KVz)1WqW3pIi6egsik-d-iXHw7l=a?)km8>^ zz|-J7DC_^ik|)hTms)tagk1kxqlUGf`1Q+Jdd&H8L$ez1b!X-0{C$T z6Zx-#gdFEPpxEsPpxE=DKo9&k@DcDckWJS86;S%U4T^qlLCIqGouKez1{ArU28G|N zp!EMDDEfF66uG|zhTt76TKYc^iX2}6MIT>I?_W>ve-Avt^FIb(1Ml3O$hi)FlKbBW z<-NB-;mNH`ehc^!Q0CtWie2}DB6kH8y}kfqa_6@|;low%UEu$KW1#b~B<^hkg(rJK zS;q>9YMfsLW!=9C9tN*~V(%Y=GX4k06F)itid;*e^sj;2!RNs{z+X-8e;pKkyatM1 ze>cUqz;|#j*P{to{bEk*|4)H*vE2RyD84aIyNz~^CS%F^7HJ~KahjpYh01Kq7yZb! zmsYc%5{}A8%w^XlYtppCG>K1g-JXE;bH!(gqjG(mR-%br0ve`s%CuW)r)aaZRhq;z zi8Z2cXl1Xt6vgJ*C3+H@y0m55XK2~Az=wCzJlfIpq3E%me%=TY8^tfg)^goTBUISy zOp3z$Cuu7*KYb=#kxMwV&3+;mflt$>X;oU2CYRXv2<@QUa2=ybOglsqUph;Bj3(Eo zX!~f-(d0Tn+hIQ?ek>n_cf$2&X^+$75-v4p!p(Qno}pzI6m%--jc`@2leE*c3EC3P znd#_Qht5$ih)lKQ95bGYjf#LuY^u&|)s5{R71xbwMwqndedxs!RE zvqo1{;Co#@wY;v117rw!7&%MEB;PE#J>x8~fLLk2s=}mW)=Qq7sw#KY&Rvnc33o@l znBP{P4Sb%k1XwM($BaK8O=09sb+cuHdIWrj)Gm-LxSeXlM6kq#}3Ih*q%aroz zW~NJD9ZYHmxWNg}ZZ=t^uKn6ItLv(jAZ(7!c%CIT1W~QPuGA9N9gtL=cWtN7wjtKQ zmy~X`!l0wQ4Js%MoO+Z>+@qSf!vB5buu^wBW|-jVtU1Rk+7}z?3N2DPc}142+?e>Y zGFs>)Q02BBJw@OVc80twn>=WBRm+4;*LrU>vQruZ&%1Gb>v@ius1mxZm^d(cpum5C z#ic82g>4^}W-)A(c*pDul^YRK0`q9`XZ_d^UKDn38-*>cmgUyPM?^KFH9P0SEeW|R z1T@#LsWjk>t6|B}iBAt`CLw~TTs4tf^9fx87aTpqDNTZ~F?yuBYAj2afE&&X}k>V;upm1Hn9%R3UjD3r*Y(;ZLC2 zev+gxH93gVQxZU44N4DTqd7lX#}s75SIiQ2#US*SsFYYKC(R&|Y)Ks%OG29jC=E-j zsq;aK5y1wE;)9V~&1z`eJiOKkZQWq=yR8Ze7O)SGllgH0KgPQwWx_BB^H?L^7LCnR zGWy#1?onb5Du|@ZlC9!dv}tBGDt=+A(`qU;d-7aVP^ZokMJD3oqcUysy)Add((NYMgEe{)F$AiJ8pb7|a#@+qtiVEoAL9`fseJ8TE?1oB36+L;x{6(* zKD})9EN)dCDrccxcM>0l)|Wn_Y9MDu0v^_t@pT;QN}WuIp#qyBhX;F{U0*g-(Yvfe zECy7Hh`(tEaidiCoBNi0b2Ej1(*K64{j}>1miX7{y0otC0Hfq2 zeQp?`Ya$}EMHblS9kau$&>XY}N<+Nv$QZRi__B~h>(2IuiI zw!oQevL~0oEc2F}swuZ6?*v|1hhsB-;CGurJ4#M4hQCaYOoZiX=IANM+Dro8*b#~z z@iTGBsPG)MB*rXzL8ZX~%HS2dM;Z0b3E2!6Ixg7aw)h}FX&H=mCUiLll9ZR6uWb6w zATt+6JZo6RK$bIMuu5o~n5#~lV?CICTAi6WIzMw_R-KzYyEJ!taXTdmb;ra)RCB8n zN7}V$VmX*r+s~YyI7_ydcP5S@(6rh+wfDh^sfQ<~_Nb}-)BE;*Y>I2UY$PU@L+wYN zoG?wR_IbbCJ~nQ<^Q~WN!_SFjqnp#}WZSQ4sx)8is>g9Fnx34b#{ls#&g?zEO5Kr0~{GehN z9}qS>zRt*eO z>#w8H(H`>k*Q-Iqyg?lEyjRmAfg&akZkW?q?5}m4`TNf$OiJFB+aYRiSVhWqldXdE8iav?BKjB0n%Fjjd~zO|Y7ecrs@e7% zxVUeaHAWi<5~7&K^?K8FRl3rzcsw=GJ%Y0WiSSYcU>Xh)OidQTjc?c5z>@Jmvzk(+sSqPJJvUL> zhCwS)AfbeTwj43*wqdxUcv%-j>Oi+R=s^s-4pT03z^eyhS%a%a|1!ivv^ZA%%Msd+ zl)MR1AyaHqf4u$+NM9acbvBkI0{d*+hW4MH=UOpRG;@@hJ>g4Fiw9=f>t zazl)sh1cSW%EaBrzT=&`8+OOGnl2iTQ$y!E@vI4k(+`@Fqks$Wn-ibfrV9M zNU&stvLtm<^DLb^^~@lqpmsMJKsq$6n7)!4n) z6I18w)~W(^m>Px^1{fShK|zk$nom#bQ3mL+z63^T#M{cRHQ0H#ekgX!{ps zaqu~4QDa&zyZT7dlK&1++z(?lpVJrli-t?50#t+OJE^lE`jLNvYP-A z8eGelGFb+ zU)0?S`|D-2Bu7I|`z~Y7XORv`1~(9UumVc5 zv>qhiQEgH$a@K=lqMrP~?BX6Rv_xsu_W0g69m6Au$Vr;O+~WN_z}?6v6~nyCY;8El z>FF|_X>-R=)re0}ur_ciji#iKApRJeSm2I?OY#+I7bB9NBn=0iP=RAdoQKyS$XaLv zza(cmmYg}r<9DT+TyJr(!d}hya8Z7PNL+l}Dnr6q`i`Ywi5jTs%;C!7{gwg=L0Nf!t!{e4C7YJn z{!#o=43M0Mf&nDrr;WN^&6C5X@8m(udK^E5$gXRF;@mX&Jt+xhgUCgiO`;DWuNVMG zKbSW&Phzq`P=L7`&QbDFq-H6j7o3iSC<~MjD0Pt3D*iB;iFXUGw*UWRh~$O%<8Gi2 z!7t5`TGUFIVM%G?B+zZ_Ep~vJk&#Vi9LQdFeYj6?>no=x68n=J(Qr207jlpu9>kUw K68dDx#`#}s?wYm$ literal 0 HcmV?d00001 diff --git a/misago/locale/hu/LC_MESSAGES/django.po b/misago/locale/hu/LC_MESSAGES/django.po new file mode 100644 index 0000000000..0bd09a6018 --- /dev/null +++ b/misago/locale/hu/LC_MESSAGES/django.po @@ -0,0 +1,11939 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# uwnyuD, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-09 12:55+0000\n" +"PO-Revision-Date: 2023-07-01 08:52+0000\n" +"Last-Translator: uwnyuD, 2023\n" +"Language-Team: Hungarian (https://app.transifex.com/misago/teams/65369/hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: acl/admin/__init__.py:24 +msgctxt "admin node" +msgid "Permissions" +msgstr "Engedélyek" + +#: acl/admin/forms.py:9 +msgctxt "admin role form" +msgid "Role name" +msgstr "Csoport név" + +#: acl/admin/views.py:15 +msgctxt "admin roles" +msgid "Requested role does not exist." +msgstr "A kért csoport nem létezik." + +#: acl/admin/views.py:52 categories/admin/views/perms.py:65 +msgctxt "admin form" +msgid "Form contains errors." +msgstr "Az űrlap hibákat tartalmaz." + +#: acl/admin/views.py:64 +#, python-format +msgctxt "admin roles" +msgid "New role \"%(name)s\" has been saved." +msgstr "Az új \"%(name)s\" csoport mentése megtörtént." + +#: acl/admin/views.py:68 +#, python-format +msgctxt "admin roles" +msgid "Role \"%(name)s\" has been changed." +msgstr "A \"%(name)s\" csoport megváltozott." + +#: acl/admin/views.py:75 +#, python-format +msgctxt "admin roles" +msgid "Role \"%(name)s\" is special role and can't be deleted." +msgstr "A %(name)s különleges csoport, és nem törölhető." + +#: acl/admin/views.py:81 +#, python-format +msgctxt "admin roles" +msgid "Role \"%(name)s\" has been deleted." +msgstr "A \"%(name)s\" csoport törölve." + +#: acl/migrations/0003_default_roles.py:10 +msgctxt "role name" +msgid "Member" +msgstr "Felhasználó" + +#: acl/migrations/0003_default_roles.py:48 +msgctxt "role name" +msgid "Guest" +msgstr "Látogató" + +#: acl/migrations/0003_default_roles.py:78 +#: users/migrations/0004_default_ranks.py:29 +msgctxt "role name" +msgid "Moderator" +msgstr "Moderátor" + +#: acl/migrations/0003_default_roles.py:133 +msgctxt "role name" +msgid "Renaming users" +msgstr "Felhasználók átnevezése" + +#: acl/migrations/0003_default_roles.py:141 +msgctxt "role name" +msgid "Banning users" +msgstr "Felhasználók kitiltása" + +#: acl/migrations/0003_default_roles.py:155 +#: users/migrations/0004_default_ranks.py:34 +msgctxt "role name" +msgid "Deleting users" +msgstr "Felhasználók törlése" + +#: acl/migrations/0003_default_roles.py:166 +msgctxt "role name" +msgid "Can't be blocked" +msgstr "Nem lehet letiltani" + +#: acl/migrations/0003_default_roles.py:174 +#: users/migrations/0004_default_ranks.py:30 +#: users/migrations/0004_default_ranks.py:37 +msgctxt "role name" +msgid "Private threads" +msgstr "Privát témák" + +#: acl/migrations/0003_default_roles.py:189 +#: users/migrations/0004_default_ranks.py:32 +msgctxt "role name" +msgid "Private threads moderator" +msgstr "Privát témák moderátora" + +#: acl/panels.py:8 +msgctxt "debug toolbar" +msgid "Misago User ACL" +msgstr "A Miasago felhasználó engedélyei" + +#: acl/panels.py:17 +msgctxt "debug toolbar" +msgid "Anonymous user" +msgstr "Névtelen felhasználó" + +#: admin/admin.py:6 +msgctxt "admin node" +msgid "Dashboard" +msgstr "Irányítópult" + +#: admin/auth.py:31 +msgctxt "admin auth" +msgid "Your admin session has expired." +msgstr "Az adminisztrátori munkamenet lejárt." + +#: admin/forms.py:47 +msgctxt "admin color field" +msgid "" +"Value must be a 7-character string specifying an RGB color in a hexadecimal " +"format (eg.: \"#F5A9B8\")." +msgstr "" + +#: admin/forms.py:67 templates/misago/admin/users/edit.html:145 +#: templates/misago/admin/users/edit.html:163 +#: templates/misago/admin/users/edit.html:278 +msgctxt "admin yesno switch" +msgid "Yes" +msgstr "Igen" + +#: admin/forms.py:68 templates/misago/admin/users/edit.html:149 +#: templates/misago/admin/users/edit.html:167 +#: templates/misago/admin/users/edit.html:282 +msgctxt "admin yesno switch" +msgid "No" +msgstr "Nem" + +#: admin/views/auth.py:40 +msgctxt "admin auth" +msgid "Your admin session has been closed." +msgstr "Az adminisztrátori munkamenetét lezárták." + +#: admin/views/generic/list.py:39 +msgctxt "admin lists" +msgid "Selected: 0" +msgstr "Kiválasztva: 0" + +#: admin/views/generic/list.py:40 +msgctxt "admin lists" +msgid "Select items" +msgstr "Válassza ki az elemeket" + +#: admin/views/generic/list.py:289 admin/views/generic/list.py:296 +msgctxt "admin lists" +msgid "You have to select one or more items." +msgstr "Ki kell választani egy vagy több elemet." + +#: admin/views/generic/list.py:311 +msgctxt "admin lists" +msgid "Action is not allowed." +msgstr "A művelet nem megengedett." + +#: apiv2/decorators.py:13 +msgctxt "apiv2" +msgid "You have to sign in to access this page." +msgstr "Az oldal eléréséhez be kell jelentkeznie." + +#: apiv2/decorators.py:16 +msgctxt "apiv2" +msgid "You have to sign in to perform this action." +msgstr "A művelet végrehajtásához be kell jelentkeznie." + +#: categories/admin/__init__.py:65 +msgctxt "admin node" +msgid "Categories" +msgstr "Kategóriák" + +#: categories/admin/__init__.py:72 +msgctxt "admin node" +msgid "Category permissions" +msgstr "Kategória engedélyek" + +#: categories/admin/forms.py:50 +msgctxt "admin category form" +msgid "Name" +msgstr "Név" + +#: categories/admin/forms.py:54 +msgctxt "admin category form" +msgid "Short name" +msgstr "Rövid név" + +#: categories/admin/forms.py:58 +msgctxt "admin category form" +msgid "" +"Optional, alternative or abbreviated name (eg. abbreviation) used on threads" +" list." +msgstr "" +"Opcionális, alternatív vagy rövidített név (pl. rövidítés), amelyet a témák " +"listáján használnak." + +#: categories/admin/forms.py:63 +msgctxt "admin category form" +msgid "Color" +msgstr "Szín" + +#: categories/admin/forms.py:67 +msgctxt "admin category form" +msgid "Optional but recommended, should be in hex format, eg. #F5A9B8." +msgstr "" +"Nem kötelező, de ajánlott, hexadecimális formátumban kell lennie, pl. " +"#F5A9B8." + +#: categories/admin/forms.py:74 +msgctxt "admin category form" +msgid "Entered value is not a valid color." +msgstr "A megadott érték nem érvényes szín." + +#: categories/admin/forms.py:80 +msgctxt "admin category form" +msgid "Description" +msgstr "Leírás" + +#: categories/admin/forms.py:86 +msgctxt "admin category form" +msgid "Optional description explaining category intented purpose." +msgstr "Opcionális leírás, amely elmagyarázza a kategória célját." + +#: categories/admin/forms.py:90 +msgctxt "admin category form" +msgid "CSS class" +msgstr "" + +#: categories/admin/forms.py:94 +msgctxt "admin category form" +msgid "" +"Optional CSS class used to customize this category's appearance from themes." +msgstr "" + +#: categories/admin/forms.py:98 +msgctxt "admin category form" +msgid "Closed category" +msgstr "Lezárt kategória" + +#: categories/admin/forms.py:102 +msgctxt "admin category form" +msgid "Only members with valid permissions can post in closed categories." +msgstr "" +"Csak érvényes engedéllyel rendelkező tagok posztolhatnak zárt kategóriákban." + +#: categories/admin/forms.py:106 +msgctxt "admin category form" +msgid "Threads" +msgstr "Témák" + +#: categories/admin/forms.py:110 +msgctxt "admin category form" +msgid "All threads started in this category will require moderator approval." +msgstr "" +"Az ebben a kategóriában indított összes témához moderátor jóváhagyása " +"szükséges." + +#: categories/admin/forms.py:114 +msgctxt "admin category form" +msgid "Replies" +msgstr "Válaszok" + +#: categories/admin/forms.py:118 +msgctxt "admin category form" +msgid "All replies posted in this category will require moderator approval." +msgstr "" +"Az ebben a kategóriában közzétett összes válaszhoz moderátor jóváhagyása " +"szükséges." + +#: categories/admin/forms.py:122 +msgctxt "admin category form" +msgid "Edits" +msgstr "Szerkesztések" + +#: categories/admin/forms.py:126 +msgctxt "admin category form" +msgid "" +"Will make all edited replies return to unapproved state for moderator to " +"review." +msgstr "" +"A szerkesztett válaszokat visszaállítja nem jóváhagyott állapotba, hogy a " +"moderátor felülvizsgálja." + +#: categories/admin/forms.py:130 +msgctxt "admin category form" +msgid "Thread age" +msgstr "A téma kora" + +#: categories/admin/forms.py:134 +msgctxt "admin category form" +msgid "" +"Prune thread if number of days since its creation is greater than specified." +" Enter 0 to disable this pruning criteria." +msgstr "" +"Metsze meg a témát, ha a létrehozása óta eltelt napok száma nagyobb a " +"megadottnál. Írjon be 0-t a metszési feltétel letiltásához." + +#: categories/admin/forms.py:138 +msgctxt "admin category form" +msgid "Last reply" +msgstr "Utolsó válasz" + +#: categories/admin/forms.py:142 +msgctxt "admin category form" +msgid "" +"Prune thread if number of days since last reply is greater than specified. " +"Enter 0 to disable this pruning criteria." +msgstr "" +"Metsze meg a témát, ha az utolsó válasz óta eltelt napok száma nagyobb a " +"megadottnál. Írjon be 0-t a metszési feltétel letiltásához." + +#: categories/admin/forms.py:168 +msgctxt "admin category form" +msgid "Permissions cannot be copied from category into itself." +msgstr "Az engedélyek nem másolhatók át a kategóriából önmagába." + +#: categories/admin/forms.py:177 +msgctxt "admin category form" +msgid "Category cannot act as archive for itself." +msgstr "A kategória önmagában nem működhet archívumként." + +#: categories/admin/forms.py:200 +msgctxt "admin category form" +msgid "Parent category" +msgstr "Szülő kategória" + +#: categories/admin/forms.py:206 +msgctxt "admin category form" +msgid "Copy permissions" +msgstr "Engedélyek másolása" + +#: categories/admin/forms.py:209 +msgctxt "admin category form" +msgid "" +"You can replace this category permissions with permissions copied from " +"category selected here." +msgstr "" +"Ezt a kategóriát lecserélheti az itt kiválasztott kategóriából másolt " +"engedélyekre." + +#: categories/admin/forms.py:213 +msgctxt "admin category form" +msgid "Don't copy permissions" +msgstr "Ne másoljon engedélyeket" + +#: categories/admin/forms.py:218 +msgctxt "admin category form" +msgid "Archive" +msgstr "Archívum" + +#: categories/admin/forms.py:221 +msgctxt "admin category form" +msgid "" +"Instead of being deleted, pruned threads can be moved to designated " +"category." +msgstr "Törlés helyett a levágott témák áthelyezhetők a kijelölt kategóriába." + +#: categories/admin/forms.py:225 +msgctxt "admin category form" +msgid "Don't archive pruned threads" +msgstr "Ne archiválja a lemetszett témákat" + +#: categories/admin/forms.py:245 +msgctxt "admin category form" +msgid "You are trying to move this category threads to itself." +msgstr "Ön megpróbálja áthelyezni a kategória témáit önmagába." + +#: categories/admin/forms.py:253 +msgctxt "admin category form" +msgid "" +"You are trying to move this category threads to a child category that will " +"also be deleted." +msgstr "" + +#: categories/admin/forms.py:264 +msgctxt "admin category form" +msgid "Move category threads to" +msgstr "Kategóriatémák áthelyezése ide" + +#: categories/admin/forms.py:267 categories/admin/forms.py:281 +msgctxt "admin category form" +msgid "Delete with category" +msgstr "Törlés kategóriával" + +#: categories/admin/forms.py:279 +msgctxt "admin category form" +msgid "Move child categories to" +msgstr "Gyermekkategóriák áthelyezése ide" + +#: categories/admin/forms.py:289 +msgctxt "admin category role form" +msgid "Role name" +msgstr "Csoport név" + +#: categories/admin/forms.py:300 categories/admin/forms.py:315 +msgctxt "admin permissions form" +msgid "Role" +msgstr "Csoport" + +#: categories/admin/forms.py:304 categories/admin/forms.py:319 +msgctxt "admin permissions form" +msgid "No access" +msgstr "Nincs hozzáférés" + +#: categories/admin/views/categories.py:18 +msgctxt "admin categories" +msgid "Requested category does not exist." +msgstr "A kért kategória nem létezik." + +#: categories/admin/views/categories.py:99 +#, python-format +msgctxt "admin categories" +msgid "New category \"%(name)s\" has been saved." +msgstr "Az új \"%(name)s\" kategória mentése megtörtént." + +#: categories/admin/views/categories.py:105 +#, python-format +msgctxt "admin categories" +msgid "Category \"%(name)s\" has been edited." +msgstr "A \"%(name)s\" kategória szerkesztve." + +#: categories/admin/views/categories.py:111 +#, python-format +msgctxt "admin categories" +msgid "Category \"%(name)s\" has been deleted." +msgstr "A \"%(name)s\" kategória törölve." + +#: categories/admin/views/categories.py:164 +#, python-format +msgctxt "admin categories" +msgid "Category \"%(name)s\" has been moved below \"%(other)s\"." +msgstr "A \"%(name)s\" kategória átkerült a \"%(other)s\" alá." + +#: categories/admin/views/categories.py:183 +#, python-format +msgctxt "admin categories" +msgid "Category \"%(name)s\" has been moved above \"%(other)s\"." +msgstr "A \"%(name)s\" kategória átkerült a \"%(other)s\" fölé." + +#: categories/admin/views/perms.py:24 +msgctxt "admin categories roles" +msgid "Requested role does not exist." +msgstr "A kért csoport nem létezik." + +#: categories/admin/views/perms.py:78 +#, python-format +msgctxt "admin categories roles" +msgid "New role \"%(name)s\" has been saved." +msgstr "Az új \"%(name)s\" csoport mentése megtörtént." + +#: categories/admin/views/perms.py:84 +#, python-format +msgctxt "admin categories roles" +msgid "Role \"%(name)s\" has been changed." +msgstr "A \"%(name)s\" csoport megváltozott." + +#: categories/admin/views/perms.py:93 +#, python-format +msgctxt "admin categories roles" +msgid "Role \"%(name)s\" is special role and can't be deleted." +msgstr "" + +#: categories/admin/views/perms.py:100 +#, python-format +msgctxt "admin categories roles" +msgid "Role \"%(name)s\" has been deleted." +msgstr "" + +#: categories/admin/views/perms.py:149 +#, python-format +msgctxt "admin categories roles" +msgid "Category %(name)s permissions have been changed." +msgstr "" + +#: categories/admin/views/perms.py:161 +msgctxt "admin categories" +msgid "Change permissions" +msgstr "" + +#: categories/admin/views/perms.py:176 +msgctxt "admin categories" +msgid "No categories exist." +msgstr "" + +#: categories/admin/views/perms.py:218 +#, python-format +msgctxt "admin categories roles" +msgid "Category permissions for role %(name)s have been changed." +msgstr "" + +#: categories/admin/views/perms.py:230 +msgctxt "admin roles" +msgid "Categories permissions" +msgstr "" + +#: categories/migrations/0002_default_categories.py:32 +msgid "First category" +msgstr "Első kategória" + +#: categories/migrations/0003_categories_roles.py:10 +msgid "See only" +msgstr "Lásd csak" + +#: categories/migrations/0003_categories_roles.py:18 +msgid "Read only" +msgstr "Csak olvasható" + +#: categories/migrations/0003_categories_roles.py:33 +msgid "Reply to threads" +msgstr "Válasz a témákra" + +#: categories/migrations/0003_categories_roles.py:51 +msgid "Start and reply threads" +msgstr "Témák indítása és hozzászólás témákhoz" + +#: categories/migrations/0003_categories_roles.py:71 +#: categories/migrations/0003_categories_roles.py:117 +msgid "Moderator" +msgstr "Moderátor" + +#: categories/migrations/0006_moderation_queue_roles.py:10 +msgid "In moderation queue" +msgstr "" + +#: categories/migrations/0007_best_answers_roles.py:11 +msgid "Q&A user" +msgstr "K&V felhasználó" + +#: categories/migrations/0007_best_answers_roles.py:23 +msgid "Q&A moderator" +msgstr "K&V moderátor" + +#: categories/permissions.py:13 +msgctxt "categories permission" +msgid "Category access" +msgstr "Kategória hozzáférés" + +#: categories/permissions.py:16 +msgctxt "categories permission" +msgid "Can see category" +msgstr "A kategória látható" + +#: categories/permissions.py:19 +msgctxt "categories permission" +msgid "Can see category contents" +msgstr "Megtekintheti a kategória tartalmát" + +#: categories/permissions.py:125 +#, python-format +msgctxt "categories permission" +msgid "You don't have permission to browse \"%(category)s\" contents." +msgstr "Nincs engedélye a \"%(category)s\" tartalmának böngészésére." + +#: conf/admin/__init__.py:52 +msgctxt "admin node" +msgid "Settings" +msgstr "beállítások" + +#: conf/admin/__init__.py:59 +msgctxt "admin node" +msgid "General" +msgstr "Általános" + +#: conf/admin/__init__.py:61 +msgctxt "admin node" +msgid "Change forum details like name, description or footer." +msgstr "" +"Módosítsa a fórum részleteit, például a nevet, a leírást vagy a láblécet." + +#: conf/admin/__init__.py:67 users/admin/__init__.py:74 +msgctxt "admin node" +msgid "Users" +msgstr "Felhasználók" + +#: conf/admin/__init__.py:70 +msgctxt "admin node" +msgid "Customize user accounts default behavior and features availability." +msgstr "" +"Testreszabhatja a felhasználói fiókok alapértelmezett viselkedését és a " +"szolgáltatások elérhetőségét." + +#: conf/admin/__init__.py:77 +msgctxt "admin node" +msgid "Captcha" +msgstr "" + +#: conf/admin/__init__.py:80 +msgctxt "admin node" +msgid "Setup protection against automatic registrations on the site." +msgstr "Állítsa be az automatikus regisztráció elleni védelmet az oldalon." + +#: conf/admin/__init__.py:87 +msgctxt "admin node" +msgid "Threads" +msgstr "Témák" + +#: conf/admin/__init__.py:89 +msgctxt "admin node" +msgid "Threads, posts, polls and attachments options." +msgstr "Témák, posztok, szavazások és mellékletek beállításai." + +#: conf/admin/__init__.py:96 +msgctxt "admin node" +msgid "Notifications" +msgstr "Értesítések" + +#: conf/admin/__init__.py:99 +msgctxt "admin node" +msgid "" +"Those settings control default notification preferences of new user accounts" +" and storage time of existing notifications." +msgstr "" +"Ezek a beállítások szabályozzák az új felhasználói fiókok alapértelmezett " +"értesítési beállításait és a meglévő értesítések tárolási idejét." + +#: conf/admin/__init__.py:106 +msgctxt "admin node" +msgid "OAuth2" +msgstr "" + +#: conf/admin/__init__.py:109 +msgctxt "admin node" +msgid "Enable OAuth2 client and connect your site to existing auth provider." +msgstr "" + +#: conf/admin/__init__.py:116 +msgctxt "admin node" +msgid "Analytics" +msgstr "" + +#: conf/admin/__init__.py:119 +msgctxt "admin node" +msgid "Enable Google Analytics or setup Google Site Verification." +msgstr "" + +#: conf/admin/forms/analytics.py:17 +msgctxt "admin analytics settings form" +msgid "Tracking ID" +msgstr "" + +#: conf/admin/forms/analytics.py:20 +msgctxt "admin analytics settings form" +msgid "" +"Setting the Tracking ID will result in gtag.js file being included in your " +"site's HTML markup, enabling Google Analytics integration." +msgstr "" + +#: conf/admin/forms/analytics.py:25 +msgctxt "admin analytics settings form" +msgid "Site verification code" +msgstr "" + +#: conf/admin/forms/analytics.py:28 +msgctxt "admin analytics settings form" +msgid "" +"This code was extracted from the uploaded site verification file. To change " +"it, upload new verification file." +msgstr "" + +#: conf/admin/forms/analytics.py:35 +msgctxt "admin analytics settings form" +msgid "Upload site verification file" +msgstr "" + +#: conf/admin/forms/analytics.py:39 +msgctxt "admin analytics settings form" +msgid "" +"Site verification file can be downloaded from Search Console's \"Ownership " +"verification\" page." +msgstr "" + +#: conf/admin/forms/analytics.py:52 +msgctxt "admin analytics settings form" +msgid "Uploaded file type is not HTML." +msgstr "" + +#: conf/admin/forms/analytics.py:62 +msgctxt "admin analytics settings form" +msgid "Uploaded file doesn't contain a verification code." +msgstr "" + +#: conf/admin/forms/captcha.py:21 +msgctxt "admin captcha settings form" +msgid "Enable CAPTCHA" +msgstr "" + +#: conf/admin/forms/captcha.py:23 +msgctxt "admin captcha type field choice" +msgid "No CAPTCHA" +msgstr "" + +#: conf/admin/forms/captcha.py:24 +msgctxt "admin captcha type field choice" +msgid "reCaptcha" +msgstr "" + +#: conf/admin/forms/captcha.py:27 +msgctxt "admin captcha type field choice" +msgid "Question and answer" +msgstr "" + +#: conf/admin/forms/captcha.py:34 +msgctxt "admin captcha settings form" +msgid "Site key" +msgstr "" + +#: conf/admin/forms/captcha.py:39 +msgctxt "admin captcha settings form" +msgid "Secret key" +msgstr "" + +#: conf/admin/forms/captcha.py:45 +msgctxt "admin captcha settings form" +msgid "Test question" +msgstr "" + +#: conf/admin/forms/captcha.py:50 +msgctxt "admin captcha settings form" +msgid "Question help text" +msgstr "" + +#: conf/admin/forms/captcha.py:55 +msgctxt "admin captcha settings form" +msgid "Valid answers" +msgstr "" + +#: conf/admin/forms/captcha.py:58 +msgctxt "admin captcha settings form" +msgid "Enter each answer in new line. Answers are case-insensitive." +msgstr "" + +#: conf/admin/forms/captcha.py:68 +msgctxt "admin captcha settings form" +msgid "Validate new registrations against SFS database" +msgstr "" + +#: conf/admin/forms/captcha.py:72 +msgctxt "admin captcha settings form" +msgid "" +"Turning this option on will result in Misago validating new user's e-mail " +"and IP address against SFS database." +msgstr "" + +#: conf/admin/forms/captcha.py:77 +msgctxt "admin captcha settings form" +msgid "Minimum SFS confidence required" +msgstr "" + +#: conf/admin/forms/captcha.py:81 +msgctxt "admin captcha settings form" +msgid "" +"SFS compares user e-mail and IP address with database of known spammers and " +"assigns the confidence score in range of 0 to 100 that user is a spammer " +"themselves. If this score is equal or higher than specified, Misago will " +"block user from registering and ban their IP address for 24 hours." +msgstr "" + +#: conf/admin/forms/captcha.py:96 +msgctxt "admin captcha settings form" +msgid "You need to enter site key if selected CAPTCHA type is reCaptcha." +msgstr "" + +#: conf/admin/forms/captcha.py:105 +msgctxt "admin captcha settings form" +msgid "You need to enter secret key if selected CAPTCHA type is reCaptcha." +msgstr "" + +#: conf/admin/forms/captcha.py:115 +msgctxt "admin captcha settings form" +msgid "You need to set question if selected CAPTCHA type is Q&A." +msgstr "" + +#: conf/admin/forms/captcha.py:124 +msgctxt "admin captcha settings form" +msgid "You need to set question answers if selected CAPTCHA type is Q&A." +msgstr "" + +#: conf/admin/forms/general.py:28 +msgctxt "admin general settings form" +msgid "Forum name" +msgstr "" + +#: conf/admin/forms/general.py:33 +msgctxt "admin general settings form" +msgid "Forum address" +msgstr "" + +#: conf/admin/forms/general.py:38 +msgctxt "admin general settings form" +msgid "Page title" +msgstr "" + +#: conf/admin/forms/general.py:43 +msgctxt "admin general settings form" +msgid "Meta Description" +msgstr "" + +#: conf/admin/forms/general.py:46 +msgctxt "admin general settings form" +msgid "" +"Short description of your forum that search and social sites may display " +"next to link to your forum's index." +msgstr "" + +#: conf/admin/forms/general.py:52 +msgctxt "admin general settings form" +msgid "Header text" +msgstr "" + +#: conf/admin/forms/general.py:55 +msgctxt "admin general settings form" +msgid "This text will be displayed in page header on forum index." +msgstr "" + +#: conf/admin/forms/general.py:61 +msgctxt "admin general settings form" +msgid "Header message" +msgstr "" + +#: conf/admin/forms/general.py:64 +msgctxt "admin general settings form" +msgid "" +"This message will be displayed in page header on forum index, under the " +"header text." +msgstr "" + +#: conf/admin/forms/general.py:72 +msgctxt "admin general settings form" +msgid "Large logo" +msgstr "" + +#: conf/admin/forms/general.py:75 +msgctxt "admin general settings form" +msgid "" +"Image that will be displayed in forum navbar instead of a small logo or " +"text." +msgstr "" + +#: conf/admin/forms/general.py:80 +msgctxt "admin general settings form" +msgid "Delete large logo image" +msgstr "" + +#: conf/admin/forms/general.py:84 +msgctxt "admin general settings form" +msgid "Small logo" +msgstr "" + +#: conf/admin/forms/general.py:87 +msgctxt "admin general settings form" +msgid "" +"Image that will be displayed in the forum navbar next to the logo text if a " +"large logo was not uploaded." +msgstr "" + +#: conf/admin/forms/general.py:92 +msgctxt "admin general settings form" +msgid "Delete small logo image" +msgstr "" + +#: conf/admin/forms/general.py:96 +msgctxt "admin general settings form" +msgid "Text logo" +msgstr "" + +#: conf/admin/forms/general.py:99 +msgctxt "admin general settings form" +msgid "" +"Text displayed in forum navbar. If a small logo image was uploaded, this " +"text will be displayed right next to it. If a large logo was uploaded, it " +"will replace both the small logo and the text." +msgstr "" + +#: conf/admin/forms/general.py:106 +msgctxt "admin general settings form" +msgid "Image" +msgstr "" + +#: conf/admin/forms/general.py:109 +msgctxt "admin general settings form" +msgid "" +"Custom image that will appear next to links to your forum posted on social " +"sites. Facebook recommends that this image should be 1200 pixels wide and " +"630 pixels tall." +msgstr "" + +#: conf/admin/forms/general.py:114 +msgctxt "admin general settings form" +msgid "Delete image" +msgstr "" + +#: conf/admin/forms/general.py:119 +msgctxt "admin general settings form" +msgid "Replace image with avatar on user profiles" +msgstr "" + +#: conf/admin/forms/general.py:124 +msgctxt "admin general settings form" +msgid "Replace image with avatar on threads" +msgstr "" + +#: conf/admin/forms/general.py:129 +#: templates/misago/admin/conf/general_settings.html:60 +msgctxt "admin general settings form" +msgid "Forum footnote" +msgstr "" + +#: conf/admin/forms/general.py:131 +msgctxt "admin general settings form" +msgid "Short message displayed in forum footer." +msgstr "" + +#: conf/admin/forms/general.py:137 +msgctxt "admin general settings form" +msgid "E-mails footer" +msgstr "" + +#: conf/admin/forms/general.py:140 +msgctxt "admin general settings form" +msgid "Optional short message included at the end of e-mails sent by forum." +msgstr "" + +#: conf/admin/forms/general.py:149 +msgctxt "admin general settings form" +msgid "" +"Display the link to the Admin Control Panel in the administrator's user menu" +msgstr "" + +#: conf/admin/forms/general.py:153 +msgctxt "admin general settings form" +msgid "" +"Hiding the link to the ACP from user menus reduces risk of malicious actors " +"gaining access to admin session for admin users who are sharing their device" +" with others or who are logging in to the site in public spaces." +msgstr "" + +#: conf/admin/forms/general.py:163 +#, python-format +msgctxt "admin general settings form" +msgid "" +"Misago uses this setting to build links in e-mails sent to site users. " +"Address under which site is running appears to be \"%(address)s\"." +msgstr "" + +#: conf/admin/forms/notifications.py:22 +msgctxt "admin notifications settings form" +msgid "Notify about new replies in threads started by them" +msgstr "" + +#: conf/admin/forms/notifications.py:31 +msgctxt "admin notifications settings form" +msgid "Notify about new replies in threads replied to by them" +msgstr "" + +#: conf/admin/forms/notifications.py:41 +msgctxt "admin notifications settings form" +msgid "" +"Notify about new replies in new private threads started by followed users" +msgstr "" + +#: conf/admin/forms/notifications.py:50 +msgctxt "admin notifications settings form" +msgid "Notify about new replies in new private threads started by other users" +msgstr "" + +#: conf/admin/forms/notifications.py:60 +msgctxt "admin notifications settings form" +msgid "Notify about new private threads started by followed users" +msgstr "" + +#: conf/admin/forms/notifications.py:69 +msgctxt "admin notifications settings form" +msgid "Notify about new private threads started by other users" +msgstr "" + +#: conf/admin/forms/notifications.py:79 +msgctxt "admin notifications settings form" +msgid "Delete notifications older than (in days)" +msgstr "" + +#: conf/admin/forms/notifications.py:83 +msgctxt "admin notifications settings form" +msgid "" +"Misago automatically deletes notifications older than the specified age." +msgstr "" + +#: conf/admin/forms/oauth2.py:40 +msgctxt "admin oauth2 settings form" +msgid "Enable OAuth2 client" +msgstr "" + +#: conf/admin/forms/oauth2.py:43 +msgctxt "admin oauth2 settings form" +msgid "" +"Enabling OAuth2 will make login option redirect users to the OAuth provider " +"configured below. It will also disable option to register on forum, change " +"username, email or password, as those features will be delegated to the 3rd " +"party site." +msgstr "" + +#: conf/admin/forms/oauth2.py:47 +msgctxt "admin oauth2 settings form" +msgid "Provider name" +msgstr "" + +#: conf/admin/forms/oauth2.py:50 +msgctxt "admin oauth2 settings form" +msgid "Name of the OAuth 2 provider to be displayed by interface." +msgstr "" + +#: conf/admin/forms/oauth2.py:56 +msgctxt "admin oauth2 settings form" +msgid "Client ID" +msgstr "" + +#: conf/admin/forms/oauth2.py:61 +msgctxt "admin oauth2 settings form" +msgid "Client Secret" +msgstr "" + +#: conf/admin/forms/oauth2.py:66 +msgctxt "admin oauth2 settings form" +msgid "Scopes" +msgstr "" + +#: conf/admin/forms/oauth2.py:69 +msgctxt "admin oauth2 settings form" +msgid "List of scopes to request from provider, separated with spaces." +msgstr "" + +#: conf/admin/forms/oauth2.py:76 +msgctxt "admin oauth2 settings form" +msgid "Login form URL" +msgstr "" + +#: conf/admin/forms/oauth2.py:79 +msgctxt "admin oauth2 settings form" +msgid "" +"Address of the login form on provider's server that users will be redirected" +" to." +msgstr "" + +#: conf/admin/forms/oauth2.py:86 +msgctxt "admin oauth2 settings form" +msgid "Access token retrieval URL" +msgstr "" + +#: conf/admin/forms/oauth2.py:89 +msgctxt "admin oauth2 settings form" +msgid "" +"URL that will be called after user completes the login process and " +"authorization code is sent back to your site. This URL is expected to take " +"this code and return the access token that will be next used to retrieve " +"user data." +msgstr "" + +#: conf/admin/forms/oauth2.py:96 +msgctxt "admin oauth2 settings form" +msgid "Extra HTTP headers in token request" +msgstr "" + +#: conf/admin/forms/oauth2.py:100 +msgctxt "admin oauth2 settings form" +msgid "" +"List of extra headers to include in a HTTP request made to retrieve the " +"access token. Example header is \"Header-name: value\". Specify each header " +"on separate line." +msgstr "" + +#: conf/admin/forms/oauth2.py:107 +msgctxt "admin oauth2 settings form" +msgid "JSON path to access token" +msgstr "" + +#: conf/admin/forms/oauth2.py:110 +msgctxt "admin oauth2 settings form" +msgid "" +"Name of key containing the access token in JSON returned by the provider. If" +" token is nested, use period (\".\") for path, eg: \"result.token\" will " +"retrieve the token from \"token\" key nested in \"result\"." +msgstr "" + +#: conf/admin/forms/oauth2.py:117 +msgctxt "admin oauth2 settings form" +msgid "User data URL" +msgstr "" + +#: conf/admin/forms/oauth2.py:122 +msgctxt "admin oauth2 settings form" +msgid "Request method" +msgstr "" + +#: conf/admin/forms/oauth2.py:130 +msgctxt "admin oauth2 settings form" +msgid "Access token location" +msgstr "" + +#: conf/admin/forms/oauth2.py:136 +msgctxt "admin oauth2 token location choice" +msgid "Query string" +msgstr "" + +#: conf/admin/forms/oauth2.py:143 +msgctxt "admin oauth2 token location choice" +msgid "HTTP header" +msgstr "" + +#: conf/admin/forms/oauth2.py:150 +msgctxt "admin oauth2 token location choice" +msgid "HTTP header (Bearer)" +msgstr "" + +#: conf/admin/forms/oauth2.py:157 +msgctxt "admin oauth2 settings form" +msgid "Access token name" +msgstr "" + +#: conf/admin/forms/oauth2.py:163 +msgctxt "admin oauth2 settings form" +msgid "Extra HTTP headers in user request" +msgstr "" + +#: conf/admin/forms/oauth2.py:167 +msgctxt "admin oauth2 settings form" +msgid "" +"List of extra headers to include in a HTTP request made to retrieve the user" +" profile. Example header is \"Header-name: value\". Specify each header on " +"separate line." +msgstr "" + +#: conf/admin/forms/oauth2.py:177 +msgctxt "admin oauth2 settings form" +msgid "Send a welcoming e-mail to users on their first sign-ons" +msgstr "" + +#: conf/admin/forms/oauth2.py:183 +msgctxt "admin oauth2 settings form" +msgid "User ID path" +msgstr "" + +#: conf/admin/forms/oauth2.py:188 +msgctxt "admin oauth2 settings form" +msgid "User name path" +msgstr "" + +#: conf/admin/forms/oauth2.py:193 +msgctxt "admin oauth2 settings form" +msgid "User e-mail path" +msgstr "" + +#: conf/admin/forms/oauth2.py:198 +msgctxt "admin oauth2 settings form" +msgid "User avatar URL path" +msgstr "" + +#: conf/admin/forms/oauth2.py:201 +msgctxt "admin oauth2 settings form" +msgid "Optional, leave empty to don't download avatar from provider." +msgstr "" + +#: conf/admin/forms/oauth2.py:238 +msgctxt "admin oauth2 settings form" +msgid "" +"You need to complete the configuration before you will be able to enable " +"OAuth 2 on your site." +msgstr "" + +#: conf/admin/forms/oauth2.py:255 +#, python-format +msgctxt "admin oauth2 settings form" +msgid "\"%(header)s\" is not a valid header. It's missing a colon (\":\")." +msgstr "" + +#: conf/admin/forms/oauth2.py:266 +#, python-format +msgctxt "admin oauth2 settings form" +msgid "" +"\"%(header)s\" is not a valid header. It's missing a header name before the " +"colon (\":\")." +msgstr "" + +#: conf/admin/forms/oauth2.py:275 +#, python-format +msgctxt "admin oauth2 settings form" +msgid "\"%(header)s\" header is entered more than once." +msgstr "" + +#: conf/admin/forms/oauth2.py:284 +#, python-format +msgctxt "admin oauth2 settings form" +msgid "" +"\"%(header)s\" is not a valid header. It's missing a header value after the " +"colon (\":\")." +msgstr "" + +#: conf/admin/forms/threads.py:27 +msgctxt "admin threads settings form" +msgid "Daily post limit per user" +msgstr "" + +#: conf/admin/forms/threads.py:30 +msgctxt "admin threads settings form" +msgid "" +"Daily limit of posts that may be posted by single user. Fail-safe for " +"situations when forum is flooded by spam bots. Change to 0 to remove the " +"limit." +msgstr "" + +#: conf/admin/forms/threads.py:36 +msgctxt "admin threads settings form" +msgid "Hourly post limit per user" +msgstr "" + +#: conf/admin/forms/threads.py:40 +msgctxt "admin threads settings form" +msgid "" +"Hourly limit of posts that may be posted by single user. Fail-safe for " +"situations when forum is flooded by spam bots. Change to 0 to remove the " +"limit." +msgstr "" + +#: conf/admin/forms/threads.py:46 +msgctxt "admin threads settings form" +msgid "Maximum number of attachments per post" +msgstr "" + +#: conf/admin/forms/threads.py:52 +msgctxt "admin threads settings form" +msgid "Maximum allowed post length" +msgstr "" + +#: conf/admin/forms/threads.py:58 +msgctxt "admin threads settings form" +msgid "Minimum required post length" +msgstr "" + +#: conf/admin/forms/threads.py:64 +msgctxt "admin threads settings form" +msgid "Maximum allowed thread title length" +msgstr "" + +#: conf/admin/forms/threads.py:71 +msgctxt "admin threads settings form" +msgid "Minimum required thread title length" +msgstr "" + +#: conf/admin/forms/threads.py:78 +msgctxt "admin threads settings form" +msgid "Unused attachments lifetime" +msgstr "" + +#: conf/admin/forms/threads.py:82 +msgctxt "admin threads settings form" +msgid "" +"Period of time (in hours) after which user-uploaded files that weren't " +"attached to any post are deleted from disk." +msgstr "" + +#: conf/admin/forms/threads.py:88 +msgctxt "admin threads settings form" +msgid "Read-tracker cutoff" +msgstr "" + +#: conf/admin/forms/threads.py:91 +msgctxt "admin threads settings form" +msgid "" +"Controls amount of data used by read-tracking system. All content older than" +" number of days specified in this setting is considered old and read, even " +"if the opposite is true for the user. Active forums can try lowering this " +"value while less active ones may wish to increase it instead." +msgstr "" + +#: conf/admin/forms/threads.py:99 +msgctxt "admin threads settings form" +msgid "Number of threads displayed on a single page" +msgstr "" + +#: conf/admin/forms/threads.py:106 +msgctxt "admin threads settings form" +msgid "Number of posts displayed on a single page" +msgstr "" + +#: conf/admin/forms/threads.py:111 +msgctxt "admin threads settings form" +msgid "Maximum orphans" +msgstr "" + +#: conf/admin/forms/threads.py:114 +msgctxt "admin threads settings form" +msgid "" +"This setting prevents situations when the last page of a thread contains " +"very few items. If number of posts to be displayed on the last page is less " +"or equal to number specified in this setting, those posts will instead be " +"appended to the previous page, reducing number of thread's pages." +msgstr "" + +#: conf/admin/forms/threads.py:121 +msgctxt "admin threads settings form" +msgid "Maximum number of events displayed on a single page" +msgstr "" + +#: conf/admin/forms/threads.py:127 +msgctxt "admin threads settings form" +msgid "Permission denied" +msgstr "" + +#: conf/admin/forms/threads.py:130 +msgctxt "admin threads settings form" +msgid "" +"Attachments proxy will display this image in place of default one when user " +"tries to access attachment they have no permission to see." +msgstr "" + +#: conf/admin/forms/threads.py:136 +msgctxt "admin threads settings form" +msgid "Delete custom permission denied image" +msgstr "" + +#: conf/admin/forms/threads.py:141 +msgctxt "admin threads settings form" +msgid "Not found" +msgstr "" + +#: conf/admin/forms/threads.py:144 +msgctxt "admin threads settings form" +msgid "" +"Attachments proxy will display this image in place of default one when user " +"tries to access attachment that doesn't exist." +msgstr "" + +#: conf/admin/forms/threads.py:150 +msgctxt "admin threads settings form" +msgid "Delete custom not found image" +msgstr "" + +#: conf/admin/forms/threads.py:164 +msgctxt "admin threads settings form" +msgid "This value must be lower than number of posts per page." +msgstr "" + +#: conf/admin/forms/users.py:38 +msgctxt "admin users settings form" +msgid "Require new accounts activation" +msgstr "" + +#: conf/admin/forms/users.py:45 +msgctxt "admin users account activation field choice" +msgid "No activation required" +msgstr "" + +#: conf/admin/forms/users.py:52 +msgctxt "admin users account activation field choice" +msgid "Activation token sent to user e-mail" +msgstr "" + +#: conf/admin/forms/users.py:59 +msgctxt "admin users account activation field choice" +msgid "Activation by administrator" +msgstr "" + +#: conf/admin/forms/users.py:66 +msgctxt "admin users account activation field choice" +msgid "Disable new registrations" +msgstr "" + +#: conf/admin/forms/users.py:75 +msgctxt "admin users settings form" +msgid "" +"Delete new inactive accounts if they weren't activated within this number of" +" days" +msgstr "" + +#: conf/admin/forms/users.py:79 +msgctxt "admin users settings form" +msgid "Enter 0 to never delete inactive new accounts." +msgstr "" + +#: conf/admin/forms/users.py:86 +msgctxt "admin users settings form" +msgid "Minimum allowed username length" +msgstr "" + +#: conf/admin/forms/users.py:93 +msgctxt "admin users settings form" +msgid "Maximum allowed username length" +msgstr "" + +#: conf/admin/forms/users.py:100 +msgctxt "admin users settings form" +msgid "Allow custom avatar uploads" +msgstr "" + +#: conf/admin/forms/users.py:103 +msgctxt "admin users settings form" +msgid "" +"Turning this option off will forbid forum users from uploading custom " +"avatars." +msgstr "" + +#: conf/admin/forms/users.py:108 +msgctxt "admin users settings form" +msgid "Maximum size of uploaded avatar" +msgstr "" + +#: conf/admin/forms/users.py:112 +msgctxt "admin users settings form" +msgid "Enter maximum allowed file size (in KB) for avatar uploads." +msgstr "" + +#: conf/admin/forms/users.py:117 +msgctxt "admin users settings form" +msgid "Default avatar" +msgstr "" + +#: conf/admin/forms/users.py:123 +msgctxt "admin users default avatar choice" +msgid "Individual" +msgstr "" + +#: conf/admin/forms/users.py:130 +msgctxt "admin users default avatar choice" +msgid "Gravatar" +msgstr "" + +#: conf/admin/forms/users.py:137 +msgctxt "admin users default avatar choice" +msgid "Random avatar from gallery" +msgstr "" + +#: conf/admin/forms/users.py:145 +msgctxt "admin users settings form" +msgid "Fallback for default Gravatar" +msgstr "" + +#: conf/admin/forms/users.py:149 +msgctxt "admin users settings form" +msgid "" +"Select which avatar to use when user has no Gravatar associated with their " +"e-mail address." +msgstr "" + +#: conf/admin/forms/users.py:154 +msgctxt "admin users gravatar fallback choice" +msgid "Individual" +msgstr "" + +#: conf/admin/forms/users.py:159 +msgctxt "admin users gravatar fallback choice" +msgid "Random avatar from gallery" +msgstr "" + +#: conf/admin/forms/users.py:166 +msgctxt "admin users settings form" +msgid "Blank avatar" +msgstr "" + +#: conf/admin/forms/users.py:169 +msgctxt "admin users settings form" +msgid "" +"Blank avatar is displayed in the interface when user's avatar is not " +"available: when user was deleted or is guest. Uploaded image should be a " +"square." +msgstr "" + +#: conf/admin/forms/users.py:174 +msgctxt "admin users settings form" +msgid "Delete custom blank avatar" +msgstr "" + +#: conf/admin/forms/users.py:180 +msgctxt "admin users settings form" +msgid "Maximum allowed signature length" +msgstr "" + +#: conf/admin/forms/users.py:187 +msgctxt "admin users settings form" +msgid "Started threads" +msgstr "" + +#: conf/admin/forms/users.py:189 conf/admin/forms/users.py:210 +msgctxt "admin users settings form" +msgid "Don't watch" +msgstr "" + +#: conf/admin/forms/users.py:194 conf/admin/forms/users.py:215 +msgctxt "admin users default subscription choice" +msgid "Put on watched threads list" +msgstr "" + +#: conf/admin/forms/users.py:201 conf/admin/forms/users.py:222 +msgctxt "admin users default subscription choice" +msgid "Put on watched threads list and e-mail user when somebody replies" +msgstr "" + +#: conf/admin/forms/users.py:208 +msgctxt "admin users settings form" +msgid "Replied threads" +msgstr "" + +#: conf/admin/forms/users.py:231 +msgctxt "admin users settings form" +msgid "Number of users displayed on a single page" +msgstr "" + +#: conf/admin/forms/users.py:236 +msgctxt "admin users settings form" +msgid "Maximum orphans" +msgstr "" + +#: conf/admin/forms/users.py:239 +msgctxt "admin users settings form" +msgid "" +"This setting prevents situations when the last page of a users list contains" +" very few items. If number of users to be displayed on the last page is less" +" or equal to number specified in this setting, those users will instead be " +"appended to the previous page, reducing number of list's pages." +msgstr "" + +#: conf/admin/forms/users.py:247 +msgctxt "admin users settings form" +msgid "Maximum age in days of posts that should count to the ranking position" +msgstr "" + +#: conf/admin/forms/users.py:253 +msgctxt "admin users settings form" +msgid "Maximum number of ranked users" +msgstr "" + +#: conf/admin/forms/users.py:260 +msgctxt "admin users settings form" +msgid "Allow users to download their data" +msgstr "" + +#: conf/admin/forms/users.py:266 +msgctxt "admin users settings form" +msgid "Maximum age in hours of data downloads before they expire" +msgstr "" + +#: conf/admin/forms/users.py:270 +msgctxt "admin users settings form" +msgid "" +"Data downloads older than specified will have their files deleted and will " +"be marked as expired." +msgstr "" + +#: conf/admin/forms/users.py:277 +msgctxt "admin users settings form" +msgid "Allow users to delete their own accounts" +msgstr "" + +#: conf/admin/forms/users.py:282 +msgctxt "admin users settings form" +msgid "IP storage time" +msgstr "" + +#: conf/admin/forms/users.py:285 +msgctxt "admin users settings form" +msgid "" +"Number of days for which users IP addresses are stored in forum database. " +"Enter zero to store registered IP addresses forever. Deleting user account " +"always deletes the IP addresses associated with it." +msgstr "" + +#: conf/admin/forms/users.py:291 +msgctxt "admin users settings form" +msgid "Anonymous username" +msgstr "" + +#: conf/admin/forms/users.py:294 +msgctxt "admin users settings form" +msgid "" +"This username is displayed instead of delete user's actual name next to " +"their content." +msgstr "" + +#: conf/admin/forms/users.py:312 +#, python-format +msgctxt "admin users settings form" +msgid "Uploaded image's edge should be at least %(size)s pixel long." +msgid_plural "Uploaded image's edge should be at least %(size)s pixels long." +msgstr[0] "" +msgstr[1] "" + +#: conf/admin/forms/users.py:330 +msgctxt "admin users settings form" +msgid "This value must be lower than number of users per page." +msgstr "" + +#: conf/admin/views.py:42 +msgctxt "admin settings" +msgid "Settings have been saved." +msgstr "" + +#: core/errorpages.py:51 +msgctxt "api" +msgid "Permission denied." +msgstr "" + +#: core/errorpages.py:81 +msgctxt "social auth" +msgid "" +"A problem was encountered when disconnecting your account from the remote " +"site." +msgstr "" + +#: core/errorpages.py:85 +msgctxt "social auth" +msgid "" +"You are not allowed to disconnect your account from the other site, because " +"currently it's the only way to sign in to your account." +msgstr "" + +#: core/errorpages.py:90 +#, python-format +msgctxt "social auth" +msgid "A problem was encountered when signing you in using %(backend)s." +msgstr "" + +#: core/errorpages.py:95 +msgctxt "social auth" +msgid "The sign in process has been canceled by user." +msgstr "" + +#: core/errorpages.py:99 +msgctxt "social auth" +msgid "The other service could not be reached." +msgstr "" + +#: core/errorpages.py:108 +msgctxt "social auth" +msgid "Unexpected problem has been encountered during sign in process." +msgstr "" + +#: core/errorpages.py:131 +msgctxt "api" +msgid "" +"Your request was rejected because your browser didn't send the CSRF cookie, " +"or the cookie sent was invalid." +msgstr "" + +#: core/rest_permissions.py:10 +msgctxt "api" +msgid "This action is not available to guests." +msgstr "" + +#: core/templatetags/misago_pagetitle.py:11 +#, python-format +msgctxt "page number in title" +msgid "page: %(page)s" +msgstr "" + +#: core/validators.py:10 +msgctxt "sluggable validator" +msgid "Value has to contain alpha-numerical characters." +msgstr "" + +#: core/validators.py:13 +msgctxt "sluggable validator" +msgid "Value is too long." +msgstr "" + +#: core/validators.py:29 +msgctxt "image validator" +msgid "Uploaded image is not a square." +msgstr "" + +#: graphql/admin/versioncheck.py:29 +msgctxt "admin version check" +msgid "The site is running using unreleased version of Misago." +msgstr "" + +#: graphql/admin/versioncheck.py:33 +msgctxt "admin version check" +msgid "" +"Unreleased versions of Misago can contain serious breaking bugs or miss " +"security features. They are also unsupported and it may be impossible to " +"upgrade them to released version later." +msgstr "" + +#: graphql/admin/versioncheck.py:47 +msgctxt "admin version check" +msgid "Failed to connect to pypi.org API. Try again later." +msgstr "" + +#: graphql/admin/versioncheck.py:51 +#: templates/misago/admin/dashboard/checks.html:17 +#: templates/misago/admin/dashboard/index.html:33 +msgctxt "admin version check" +msgid "" +"Version check feature relies on the API operated by the Python Package Index" +" (pypi.org) to retrieve the latest Misago release version." +msgstr "" + +#: graphql/admin/versioncheck.py:76 +msgctxt "admin version check" +msgid "The site is running updated version of Misago." +msgstr "" + +#: graphql/admin/versioncheck.py:79 +#, python-format +msgctxt "admin version check" +msgid "Misago %(version)s is latest release." +msgstr "" + +#: graphql/admin/versioncheck.py:87 +msgctxt "admin version check" +msgid "The site is running outdated version of Misago." +msgstr "" + +#: graphql/admin/versioncheck.py:91 +#, python-format +msgctxt "admin version check" +msgid "" +"The site is running Misago version %(version)s while version %(latest)s is " +"available." +msgstr "" + +#: icons/admin/__init__.py:15 +msgctxt "admin node" +msgid "Icons" +msgstr "" + +#: icons/admin/__init__.py:17 +msgctxt "admin node" +msgid "Upload favicon and application icon for the site." +msgstr "" + +#: icons/admin/forms.py:21 icons/admin/forms.py:33 +msgctxt "admin icons form" +msgid "Upload image" +msgstr "" + +#: icons/admin/forms.py:24 +msgctxt "admin icons form" +msgid "Uploaded image should be a square that is 48px wide and tall." +msgstr "" + +#: icons/admin/forms.py:29 icons/admin/forms.py:41 +msgctxt "admin icons form" +msgid "Delete custom icon" +msgstr "" + +#: icons/admin/forms.py:36 +msgctxt "admin icons form" +msgid "Uploaded image should be square at least 180px wide and tall." +msgstr "" + +#: icons/admin/forms.py:127 +#, python-format +msgctxt "admin icons form" +msgid "Uploaded image's edge should be at least %(size)s pixels long." +msgstr "" + +#: icons/admin/forms.py:137 +msgctxt "admin icons form" +msgid "Uploaded image was not gif, jpeg or png." +msgstr "" + +#: icons/admin/views.py:18 +msgctxt "admin icons" +msgid "Icons have been updated." +msgstr "" + +#: legal/admin/__init__.py:35 +msgctxt "admin node" +msgid "Legal agreements" +msgstr "" + +#: legal/admin/__init__.py:37 +msgctxt "admin node" +msgid "Set terms of service and privacy policy contents." +msgstr "" + +#: legal/admin/forms.py:12 legal/admin/forms.py:76 +msgctxt "admin agreement form" +msgid "Type" +msgstr "" + +#: legal/admin/forms.py:16 +msgctxt "admin agreement form" +msgid "Title" +msgstr "" + +#: legal/admin/forms.py:19 +msgctxt "admin agreement form" +msgid "Optional, leave empty for agreement to be named after its type." +msgstr "" + +#: legal/admin/forms.py:24 +msgctxt "admin agreement form" +msgid "Active for its type" +msgstr "" + +#: legal/admin/forms.py:27 +msgctxt "admin agreement form" +msgid "" +"If other agreement is already active for this type, it will be unset and " +"replaced with this one. Misago will ask users who didn't accept this " +"agreement to do so before allowing them to continue using the site." +msgstr "" + +#: legal/admin/forms.py:31 +msgctxt "admin agreement form" +msgid "Link" +msgstr "" + +#: legal/admin/forms.py:34 +msgctxt "admin agreement form" +msgid "If your agreement is located on other page, enter here a link to it." +msgstr "" + +#: legal/admin/forms.py:39 +msgctxt "admin agreement form" +msgid "Text" +msgstr "" + +#: legal/admin/forms.py:42 +msgctxt "admin agreement form" +msgid "You can use Markdown syntax for rich text elements." +msgstr "" + +#: legal/admin/forms.py:58 +msgctxt "admin agreement form" +msgid "Please fill in agreement link or text." +msgstr "" + +#: legal/admin/forms.py:78 +msgctxt "admin agreement type field choice" +msgid "All types" +msgstr "" + +#: legal/admin/forms.py:82 +msgctxt "admin agreement form" +msgid "Content" +msgstr "" + +#: legal/admin/views.py:17 +msgctxt "admin agreements" +msgid "Requested agreement does not exist." +msgstr "" + +#: legal/admin/views.py:32 +msgctxt "admin agreements ordering choice" +msgid "From newest" +msgstr "" + +#: legal/admin/views.py:33 +msgctxt "admin agreements ordering choice" +msgid "From oldest" +msgstr "" + +#: legal/admin/views.py:36 +msgctxt "admin agreements" +msgid "With agreements: 0" +msgstr "" + +#: legal/admin/views.py:37 +msgctxt "admin agreements" +msgid "Select agreements" +msgstr "" + +#: legal/admin/views.py:41 +msgctxt "admin agreements" +msgid "Delete agreements" +msgstr "" + +#: legal/admin/views.py:43 +msgctxt "admin agreements" +msgid "Are you sure you want to delete those agreements?" +msgstr "" + +#: legal/admin/views.py:57 +msgctxt "admin agreements" +msgid "Selected agreements have been deleted." +msgstr "" + +#: legal/admin/views.py:63 +#, python-format +msgctxt "admin agreements" +msgid "New agreement \"%(title)s\" has been saved." +msgstr "" + +#: legal/admin/views.py:76 +#, python-format +msgctxt "admin agreements" +msgid "Agreement \"%(title)s\" has been edited." +msgstr "" + +#: legal/admin/views.py:93 +#, python-format +msgctxt "admin agreements" +msgid "Agreement \"%(title)s\" has been deleted." +msgstr "" + +#: legal/admin/views.py:104 +#, python-format +msgctxt "admin agreements" +msgid "Agreement \"%(title)s\" has been set as active for type \"%(type)s\"." +msgstr "" + +#: legal/admin/views.py:118 +#, python-format +msgctxt "admin agreements" +msgid "Agreement \"%(title)s\" has been disabled." +msgstr "" + +#: legal/api.py:18 +msgctxt "agreement submit" +msgid "You have already accepted this agreement." +msgstr "" + +#: legal/api.py:29 +msgctxt "agreement submit" +msgid "You need to submit a valid choice." +msgstr "" + +#: legal/models.py:42 +msgctxt "agreement type choice" +msgid "Terms of service" +msgstr "" + +#: legal/models.py:43 +msgctxt "agreement type choice" +msgid "Privacy policy" +msgstr "" + +#: markup/finalize.py:24 +#, python-format +msgctxt "quote title" +msgid "%(title)s has written:" +msgstr "" + +#: markup/finalize.py:28 +msgctxt "quote title" +msgid "Quoted message:" +msgstr "" + +#: markup/finalize.py:34 +msgctxt "spoiler" +msgid "Reveal spoiler" +msgstr "" + +#: menus/admin/__init__.py:31 +msgctxt "admin node" +msgid "Menu items" +msgstr "" + +#: menus/admin/__init__.py:34 +msgctxt "admin node" +msgid "Use those options to add custom items to the navbar and footer menus." +msgstr "" + +#: menus/admin/forms.py:10 +msgctxt "admin menu item form" +msgid "Title" +msgstr "" + +#: menus/admin/forms.py:12 +msgctxt "admin menu item form" +msgid "URL" +msgstr "" + +#: menus/admin/forms.py:14 +msgctxt "admin menu item form" +msgid "URL where this item will point to." +msgstr "" + +#: menus/admin/forms.py:18 +msgctxt "admin menu item form" +msgid "Menu" +msgstr "" + +#: menus/admin/forms.py:21 +msgctxt "admin menu item form" +msgid "Menu in which this item will be displayed." +msgstr "" + +#: menus/admin/forms.py:25 +msgctxt "admin menu item form" +msgid "CSS class" +msgstr "" + +#: menus/admin/forms.py:28 +msgctxt "admin menu item form" +msgid "" +"Optional. Additional CSS class to include in link's \"class\" HTML " +"attribute." +msgstr "" + +#: menus/admin/forms.py:33 +msgctxt "admin menu item form" +msgid "Open this link in new window" +msgstr "" + +#: menus/admin/forms.py:36 +msgctxt "admin menu item form" +msgid "" +"Enabling this option will result in the target=\"_blank\" attribute being " +"added to this link's HTML element." +msgstr "" + +#: menus/admin/forms.py:41 +msgctxt "admin menu item form" +msgid "Rel attribute" +msgstr "" + +#: menus/admin/forms.py:44 +msgctxt "admin menu item form" +msgid "Optional \"rel\" attribute that this item will use (ex. \"nofollow\")." +msgstr "" + +#: menus/admin/views.py:17 +msgctxt "admin menu items" +msgid "Requested menu item does not exist." +msgstr "" + +#: menus/admin/views.py:32 +msgctxt "admin menu items" +msgid "Delete items" +msgstr "" + +#: menus/admin/views.py:34 +msgctxt "admin menu items" +msgid "Are you sure you want to delete those menu items?" +msgstr "" + +#: menus/admin/views.py:44 +msgctxt "admin menu items" +msgid "Selected menu items have been deleted." +msgstr "" + +#: menus/admin/views.py:50 +#, python-format +msgctxt "admin menu items" +msgid "New menu item %(item)s has been saved." +msgstr "" + +#: menus/admin/views.py:62 +#, python-format +msgctxt "admin menu items" +msgid "Menu item %(item)s has been edited." +msgstr "" + +#: menus/admin/views.py:76 +#, python-format +msgctxt "admin menu items" +msgid "Menu item %(item)s has been deleted." +msgstr "" + +#: menus/admin/views.py:96 +#, python-format +msgctxt "admin menu items" +msgid "Menu item %(item)s has been moved after %(other)s." +msgstr "" + +#: menus/admin/views.py:118 +#, python-format +msgctxt "admin menu items" +msgid "Menu item %(item)s has been moved before %(other)s." +msgstr "" + +#: menus/models.py:10 +msgctxt "menu choice" +msgid "Navbar and footer" +msgstr "" + +#: menus/models.py:11 templates/misago/admin/menuitems/list.html:41 +msgctxt "menu choice" +msgid "Navbar" +msgstr "" + +#: menus/models.py:12 templates/misago/admin/menuitems/list.html:46 +msgctxt "menu choice" +msgid "Footer" +msgstr "" + +#: notifications/permissions.py:15 +msgctxt "notifications permission" +msgid "You must be signed in to access your notifications." +msgstr "" + +#: notifications/registry.py:143 +#, python-format +msgctxt "notification replied" +msgid "%(actor)s replied to %(thread)s" +msgstr "" + +#: notifications/registry.py:180 +#, python-format +msgctxt "notification invited" +msgid "%(actor)s invited you to %(thread)s" +msgstr "" + +#: notifications/threads.py:30 +msgctxt "notification type" +msgid "Don't notify" +msgstr "" + +#: notifications/threads.py:31 +msgctxt "notification type" +msgid "Notify on site only" +msgstr "" + +#: notifications/threads.py:33 +msgctxt "notification type" +msgid "Notify on site and with e-mail" +msgstr "" + +#: notifications/threads.py:136 +#, python-format +msgctxt "new thread reply email subject" +msgid "%(thread)s - new reply by %(user)s" +msgstr "" + +#: notifications/threads.py:262 +#, python-format +msgctxt "new private thread email subject" +msgid "%(user)s has invited you to participate in private thread \"%(thread)s\"" +msgstr "" + +#: oauth2/exceptions.py:14 +msgctxt "oauth2 error" +msgid "The OAuth2 process was canceled by the provider." +msgstr "" + +#: oauth2/exceptions.py:23 +msgctxt "oauth2 error" +msgid "The OAuth2 session is missing state." +msgstr "" + +#: oauth2/exceptions.py:28 +msgctxt "oauth2 error" +msgid "The OAuth2 state was not sent by the provider." +msgstr "" + +#: oauth2/exceptions.py:35 +msgctxt "oauth2 error" +msgid "" +"The OAuth2 state sent by the provider did not match one in the session." +msgstr "" + +#: oauth2/exceptions.py:45 +msgctxt "oauth2 error" +msgid "The OAuth2 authorization code was not sent by the provider." +msgstr "" + +#: oauth2/exceptions.py:56 +msgctxt "oauth2 error" +msgid "Failed to connect to the OAuth2 provider to retrieve an access token." +msgstr "" + +#: oauth2/exceptions.py:63 +msgctxt "oauth2 error" +msgid "The OAuth2 provider responded with error for an access token request." +msgstr "" + +#: oauth2/exceptions.py:70 +msgctxt "oauth2 error" +msgid "" +"The OAuth2 provider did not respond with a valid JSON for an access token " +"request." +msgstr "" + +#: oauth2/exceptions.py:77 +msgctxt "oauth2 error" +msgid "JSON sent by the OAuth2 provider did not contain an access token." +msgstr "" + +#: oauth2/exceptions.py:84 +msgctxt "oauth2 error" +msgid "Failed to connect to the OAuth2 provider to retrieve user profile." +msgstr "" + +#: oauth2/exceptions.py:91 +msgctxt "oauth2 error" +msgid "The OAuth2 provider responded with error for user profile request." +msgstr "" + +#: oauth2/exceptions.py:98 +msgctxt "oauth2 error" +msgid "" +"The OAuth2 provider did not respond with a valid JSON for user profile " +"request." +msgstr "" + +#: oauth2/exceptions.py:104 +msgctxt "oauth2 error" +msgid "JSON sent by the OAuth2 provider did not contain a user ID." +msgstr "" + +#: oauth2/exceptions.py:112 +msgctxt "oauth2 error" +msgid "" +"User account associated with the profile from the OAuth2 provider was " +"deactivated by the site administrator." +msgstr "" + +#: oauth2/exceptions.py:121 +msgctxt "oauth2 error" +msgid "User profile retrieved from the OAuth2 provider did not validate." +msgstr "" + +#: oauth2/user.py:100 +msgctxt "oauth2 error" +msgid "" +"Your e-mail address returned by the provider is not available for use on " +"this site." +msgstr "" + +#: oauth2/user.py:110 +msgctxt "oauth2 error" +msgid "" +"Your username returned by the provider is not available for use on this " +"site." +msgstr "" + +#: search/api.py:18 +msgctxt "search api" +msgid "You don't have permission to search site." +msgstr "" + +#: search/permissions.py:10 +msgctxt "search permission" +msgid "Search" +msgstr "" + +#: search/permissions.py:13 +msgctxt "search permission" +msgid "Can search site" +msgstr "" + +#: search/views.py:13 search/views.py:24 +msgctxt "search view" +msgid "You don't have permission to search site." +msgstr "" + +#: socialauth/admin/__init__.py:40 +msgctxt "admin node" +msgid "Social login" +msgstr "" + +#: socialauth/admin/__init__.py:43 +msgctxt "admin node" +msgid "Enable users to sign on and login using their social profile." +msgstr "" + +#: socialauth/admin/forms/base.py:11 +msgctxt "admin social auth provider form" +msgid "Button text" +msgstr "" + +#: socialauth/admin/forms/base.py:15 +msgctxt "admin social auth provider form" +msgid "Button color" +msgstr "" + +#: socialauth/admin/forms/base.py:19 +msgctxt "admin social auth provider form" +msgid "Enable this provider" +msgstr "" + +#: socialauth/admin/forms/base.py:46 +msgctxt "admin social auth provider form" +msgid "Associate existing users by email" +msgstr "" + +#: socialauth/admin/forms/base.py:50 +msgctxt "admin social auth provider form" +msgid "" +"This setting controls handling of e-mail collisions that occur when e-mail " +"address returned from social site is already stored in the forum's database." +" Enabling this option will result in the user being signed in to pre-" +"existing account. Otherwise they will be asked to specify a different e-mail" +" to complete the sign in using social site." +msgstr "" + +#: socialauth/admin/forms/base.py:59 socialauth/admin/forms/base.py:61 +msgid "This field is required." +msgstr "" + +#: socialauth/admin/forms/facebook.py:9 +msgctxt "admin social auth facebook form" +msgid "App ID" +msgstr "" + +#: socialauth/admin/forms/facebook.py:13 +msgctxt "admin social auth facebook form" +msgid "App Secret" +msgstr "" + +#: socialauth/admin/forms/github.py:9 +msgctxt "admin social auth github form" +msgid "Client ID" +msgstr "" + +#: socialauth/admin/forms/github.py:13 +msgctxt "admin social auth github form" +msgid "Client Secret" +msgstr "" + +#: socialauth/admin/forms/google.py:9 +msgctxt "admin social auth google form" +msgid "Client ID" +msgstr "" + +#: socialauth/admin/forms/google.py:13 +msgctxt "admin social auth google form" +msgid "Client Secret" +msgstr "" + +#: socialauth/admin/forms/twitter.py:9 +msgctxt "admin social auth twitter form" +msgid "Consumer API key" +msgstr "" + +#: socialauth/admin/forms/twitter.py:14 +msgctxt "admin social auth twitter form" +msgid "Consumer API secret key" +msgstr "" + +#: socialauth/admin/views.py:16 +msgctxt "admin social auth providers" +msgid "Requested social login provider does not exist." +msgstr "" + +#: socialauth/admin/views.py:64 +#, python-format +msgctxt "admin social auth providers" +msgid "Login with %(provider)s has been updated." +msgstr "" + +#: socialauth/admin/views.py:76 +#, python-format +msgctxt "admin social auth providers" +msgid "Login with %(provider)s has been disabled." +msgstr "" + +#: socialauth/admin/views.py:99 +#, python-format +msgctxt "admin social auth providers" +msgid "Login with %(provider)s has been moved after %(other)s." +msgstr "" + +#: socialauth/admin/views.py:123 +#, python-format +msgctxt "admin social auth providers" +msgid "Login with %(provider)s has been moved before %(other)s." +msgstr "" + +#: socialauth/pipeline.py:89 +#, python-format +msgctxt "social auth" +msgid "" +"The e-mail address associated with your %(backend)s account is not available" +" for use on this site." +msgstr "" + +#: socialauth/pipeline.py:99 +#, python-format +msgctxt "social auth" +msgid "" +"Your account has to be activated by site administrator before you will be " +"able to sign in with %(backend)s." +msgstr "" + +#: socialauth/pipeline.py:225 +msgctxt "social auth" +msgid "Please try resubmitting the form." +msgstr "" + +#: socialauth/views.py:26 +#, python-format +msgctxt "social auth" +msgid "This feature has been disabled. Please use %(provider)s to sign in." +msgstr "" + +#: templates/misago/acl_debug.html:5 +#, python-format +msgctxt "debug toolbar user acl" +msgid "%(user)s roles" +msgstr "" + +#: templates/misago/acl_debug.html:9 +msgctxt "debug toolbar user acl" +msgid "Anonymous roles" +msgstr "" + +#: templates/misago/acl_debug.html:15 +msgctxt "debug toolbar user acl" +msgid "Role" +msgstr "" + +#: templates/misago/acl_debug.html:16 +msgctxt "debug toolbar user acl" +msgid "Permissions" +msgstr "" + +#: templates/misago/acl_debug.html:30 +msgctxt "debug toolbar user acl" +msgid "Current ACL" +msgstr "" + +#: templates/misago/acl_debug.html:34 +msgctxt "debug toolbar user acl" +msgid "Key" +msgstr "" + +#: templates/misago/acl_debug.html:35 +msgctxt "debug toolbar user acl" +msgid "Value" +msgstr "" + +#: templates/misago/activation/done.html:5 +msgctxt "account activation page" +msgid "Account activated" +msgstr "" + +#: templates/misago/activation/done.html:19 +msgctxt "account activation page" +msgid "" +"You can now sign in to finish setting up your account and to participate in " +"or start new discussions." +msgstr "" + +#: templates/misago/activation/error.html:5 +msgctxt "account activation page" +msgid "Activation error" +msgstr "" + +#: templates/misago/activation/error.html:18 +msgctxt "account activation page" +msgid "Can't activate account." +msgstr "" + +#: templates/misago/activation/error.html:22 +msgctxt "account activation page" +msgid "Request another activation link." +msgstr "" + +#: templates/misago/activation/request.html:5 +#: templates/misago/activation/request.html:18 +msgctxt "account activation page" +msgid "Request activation link" +msgstr "" + +#: templates/misago/activation/request.html:32 +msgctxt "account activation page" +msgid "" +"The site administrator may impose a requirement on newly registered accounts" +" to be activated before users will be able to sign in." +msgstr "" + +#: templates/misago/activation/request.html:35 +msgctxt "account activation page" +msgid "" +"Depending on the time of registration, you will be able to activate your " +"account by clicking a special activation link. This link will be valid only " +"for your browser, for seven days or until your account is activated." +msgstr "" + +#: templates/misago/activation/request.html:38 +msgctxt "account activation page" +msgid "" +"To receive this link, enter your account's e-mail address in the form and " +"press the \"Send link\" button." +msgstr "" + +#: templates/misago/activation/request.html:56 +msgctxt "account activation page" +msgid "To request a new activation link please enable JavaScript." +msgstr "" + +#: templates/misago/activation/stopped.html:5 +msgctxt "account activation page" +msgid "Activation failed" +msgstr "" + +#: templates/misago/activation/stopped.html:19 +msgctxt "account activation page" +msgid "Your account can't be activated at this time." +msgstr "" + +#: templates/misago/admin/agreements/form.html:9 +#: templates/misago/admin/agreements/form.html:40 +msgctxt "admin agreement form" +msgid "New agreement" +msgstr "" + +#: templates/misago/admin/agreements/form.html:29 +msgctxt "admin agreement form" +msgid "View on site" +msgstr "" + +#: templates/misago/admin/agreements/form.html:38 +msgctxt "admin agreement form" +msgid "Edit agreement" +msgstr "" + +#: templates/misago/admin/agreements/form.html:48 +msgctxt "admin agreement form" +msgid "Basic settings" +msgstr "" + +#: templates/misago/admin/agreements/form.html:58 +msgctxt "admin agreement form" +msgid "Agreement contents" +msgstr "" + +#: templates/misago/admin/agreements/form.html:61 +msgctxt "admin agreement form" +msgid "Fill in one of the fields." +msgstr "" + +#: templates/misago/admin/agreements/list.html:9 +msgctxt "admin agreements" +msgid "New agreement" +msgstr "" + +#: templates/misago/admin/agreements/list.html:17 +msgctxt "admin agreements list" +msgid "Agreement" +msgstr "" + +#: templates/misago/admin/agreements/list.html:19 +msgctxt "admin agreements list" +msgid "Type" +msgstr "" + +#: templates/misago/admin/agreements/list.html:20 +msgctxt "admin agreements list" +msgid "Created" +msgstr "" + +#: templates/misago/admin/agreements/list.html:21 +msgctxt "admin agreements list" +msgid "Modified" +msgstr "" + +#: templates/misago/admin/agreements/list.html:41 +msgctxt "admin agreements list item" +msgid "Users are required to accept this agreement to use the site" +msgstr "" + +#: templates/misago/admin/agreements/list.html:42 +msgctxt "admin active agreement" +msgid "Active" +msgstr "" + +#: templates/misago/admin/agreements/list.html:60 +#, python-format +msgctxt "admin agreements list item" +msgid "%(created_on)s by %(created_by)s" +msgstr "" + +#: templates/misago/admin/agreements/list.html:78 +#, python-format +msgctxt "admin agreements list item" +msgid "%(last_modified_on)s by %(last_modified_by)s" +msgstr "" + +#: templates/misago/admin/agreements/list.html:82 +msgctxt "admin never modified agreement" +msgid "never" +msgstr "" + +#: templates/misago/admin/agreements/list.html:95 +msgctxt "admin agreements" +msgid "Set as active" +msgstr "" + +#: templates/misago/admin/agreements/list.html:102 +msgctxt "admin agreements" +msgid "Disable agreement" +msgstr "" + +#: templates/misago/admin/agreements/list.html:107 +msgctxt "admin agreements" +msgid "Edit agreement" +msgstr "" + +#: templates/misago/admin/agreements/list.html:112 +msgctxt "admin agreements" +msgid "Remove agreement" +msgstr "" + +#: templates/misago/admin/agreements/list.html:124 +msgctxt "admin agreements" +msgid "No agreements matching criteria exist." +msgstr "" + +#: templates/misago/admin/agreements/list.html:126 +msgctxt "admin agreements" +msgid "No agreements are set." +msgstr "" + +#: templates/misago/admin/agreements/list.html:137 +msgctxt "admin agreements" +msgid "Are you sure you want to set this agreement as active for its type?" +msgstr "" + +#: templates/misago/admin/agreements/list.html:141 +msgctxt "admin agreements" +msgid "Are you sure you want to disable this agreement?" +msgstr "" + +#: templates/misago/admin/agreements/list.html:145 +msgctxt "admin agreements" +msgid "Are you sure you want to remove this agreement?" +msgstr "" + +#: templates/misago/admin/attachments/list.html:7 +msgctxt "admin attachments list" +msgid "Attachment" +msgstr "" + +#: templates/misago/admin/attachments/list.html:8 +msgctxt "admin attachments list" +msgid "Thread" +msgstr "" + +#: templates/misago/admin/attachments/list.html:48 +#, python-format +msgctxt "admin attachments list item" +msgid "%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s." +msgstr "" + +#: templates/misago/admin/attachments/list.html:59 +msgctxt "admin orphaned attachment" +msgid "This attachment is not associated with any existing post." +msgstr "" + +#: templates/misago/admin/attachments/list.html:60 +msgctxt "admin orphaned attachment" +msgid "Orphaned" +msgstr "" + +#: templates/misago/admin/attachments/list.html:68 +msgctxt "admin attachments" +msgid "Delete" +msgstr "" + +#: templates/misago/admin/attachments/list.html:78 +msgctxt "admin attachments" +msgid "No attachments matching criteria exist." +msgstr "" + +#: templates/misago/admin/attachments/list.html:80 +msgctxt "admin attachments" +msgid "No attachments exist." +msgstr "" + +#: templates/misago/admin/attachments/list.html:115 +msgctxt "admin attachments" +msgid "Are you sure you want to delete this attachment?" +msgstr "" + +#: templates/misago/admin/attachmenttypes/form.html:9 +msgctxt "admin attachment type form" +msgid "New type" +msgstr "" + +#: templates/misago/admin/attachmenttypes/form.html:26 +msgctxt "admin attachment type form" +msgid "Edit attachment type" +msgstr "" + +#: templates/misago/admin/attachmenttypes/form.html:28 +msgctxt "admin attachment type form" +msgid "New attachment type" +msgstr "" + +#: templates/misago/admin/attachmenttypes/form.html:36 +msgctxt "admin attachment type form" +msgid "Basic options" +msgstr "" + +#: templates/misago/admin/attachmenttypes/form.html:47 +msgctxt "admin attachment type form" +msgid "Availability" +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:9 +msgctxt "admin attachments types" +msgid "New type" +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:16 +msgctxt "admin attachments types list" +msgid "Type" +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:18 +msgctxt "admin attachments types list" +msgid "Extensions" +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:19 +msgctxt "admin attachments types list" +msgid "Mimetypes" +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:20 +msgctxt "admin attachments types list" +msgid "Files" +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:33 +msgctxt "admin attachments types list item" +msgid "Uploading new files of this type is disabled." +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:34 +msgctxt "admin attachments type uploads disabled" +msgid "Limited" +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:37 +msgctxt "admin attachments types list item" +msgid "Uploading and downloading files of this type is disabled." +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:38 +msgctxt "admin attachments type disabled" +msgid "Disabled" +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:57 +msgctxt "admin attachments type mimetypes not set" +msgid "Not set" +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:70 +msgctxt "admin attachments types" +msgid "Edit type" +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:75 +msgctxt "admin attachments types" +msgid "Delete type" +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:86 +msgctxt "admin attachments types" +msgid "No attachment types are set." +msgstr "" + +#: templates/misago/admin/attachmenttypes/list.html:95 +msgctxt "admin attachments types" +msgid "Are you sure you want to delete this attachment type?" +msgstr "" + +#: templates/misago/admin/bans/form.html:9 +#: templates/misago/admin/bans/form.html:28 +msgctxt "admin ban form" +msgid "New ban" +msgstr "" + +#: templates/misago/admin/bans/form.html:26 +msgctxt "admin ban form" +msgid "Edit ban" +msgstr "" + +#: templates/misago/admin/bans/form.html:36 +msgctxt "admin ban form" +msgid "Ban settings" +msgstr "" + +#: templates/misago/admin/bans/form.html:47 +msgctxt "admin ban form" +msgid "Messages" +msgstr "" + +#: templates/misago/admin/bans/form.html:61 +msgctxt "admin ban expires choice" +msgid "Never" +msgstr "" + +#: templates/misago/admin/bans/form.html:62 +msgctxt "admin ban expires choice" +msgid "Set date" +msgstr "" + +#: templates/misago/admin/bans/list.html:9 +msgctxt "admin bans" +msgid "New ban" +msgstr "" + +#: templates/misago/admin/bans/list.html:16 +msgctxt "admin bans list" +msgid "Ban" +msgstr "" + +#: templates/misago/admin/bans/list.html:18 +msgctxt "admin bans list" +msgid "Type" +msgstr "" + +#: templates/misago/admin/bans/list.html:19 +msgctxt "admin bans list" +msgid "Expires on" +msgstr "" + +#: templates/misago/admin/bans/list.html:36 +msgctxt "admin ban registration only" +msgid "Registration only" +msgstr "" + +#: templates/misago/admin/bans/list.html:41 +msgctxt "admin ban expired status" +msgid "Expired" +msgstr "" + +#: templates/misago/admin/bans/list.html:54 +msgctxt "admin ban never expires" +msgid "Never" +msgstr "" + +#: templates/misago/admin/bans/list.html:65 +msgctxt "admin bans" +msgid "Edit ban" +msgstr "" + +#: templates/misago/admin/bans/list.html:70 +msgctxt "admin bans" +msgid "Remove ban" +msgstr "" + +#: templates/misago/admin/bans/list.html:82 +msgctxt "admin bans" +msgid "No bans matching criteria exist." +msgstr "" + +#: templates/misago/admin/bans/list.html:84 +msgctxt "admin bans" +msgid "No bans are set." +msgstr "" + +#: templates/misago/admin/bans/list.html:95 +msgctxt "admin bans" +msgid "Are you sure you want to remove this ban?" +msgstr "" + +#: templates/misago/admin/base.html:7 templates/misago/admin/login.html:6 +msgctxt "admin title" +msgid "Misago Administration" +msgstr "" + +#: templates/misago/admin/categories/delete.html:6 +#, python-format +msgctxt "admin category form" +msgid "Delete category: %(category)s" +msgstr "" + +#: templates/misago/admin/categories/delete.html:21 +#: templates/misago/admin/categories/delete.html:39 +msgctxt "admin category form" +msgid "Delete category" +msgstr "" + +#: templates/misago/admin/categories/delete.html:27 +msgctxt "admin category form" +msgid "Category contents" +msgstr "" + +#: templates/misago/admin/categories/form.html:9 +#: templates/misago/admin/categories/form.html:46 +msgctxt "admin category form" +msgid "New category" +msgstr "" + +#: templates/misago/admin/categories/form.html:29 +msgctxt "admin categories" +msgid "Edit permissions" +msgstr "" + +#: templates/misago/admin/categories/form.html:35 +#: templates/misago/admin/categoryroles/categoryroles.html:30 +msgctxt "admin categories" +msgid "View on site" +msgstr "" + +#: templates/misago/admin/categories/form.html:44 +msgctxt "admin category form" +msgid "Edit category" +msgstr "" + +#: templates/misago/admin/categories/form.html:54 +msgctxt "admin category form" +msgid "Display and position" +msgstr "" + +#: templates/misago/admin/categories/form.html:67 +msgctxt "admin category form" +msgid "Behavior" +msgstr "" + +#: templates/misago/admin/categories/form.html:76 +msgctxt "admin category form" +msgid "Content approval" +msgstr "" + +#: templates/misago/admin/categories/form.html:86 +msgctxt "admin category form" +msgid "Prune threads" +msgstr "" + +#: templates/misago/admin/categories/list.html:9 +msgctxt "admin categories" +msgid "New category" +msgstr "" + +#: templates/misago/admin/categories/list.html:17 +msgctxt "admin categories list" +msgid "Category" +msgstr "" + +#: templates/misago/admin/categories/list.html:18 +msgctxt "admin categories list" +msgid "Label" +msgstr "" + +#: templates/misago/admin/categories/list.html:19 +msgctxt "admin categories list" +msgid "CSS class" +msgstr "" + +#: templates/misago/admin/categories/list.html:20 +msgctxt "admin categories list" +msgid "Threads" +msgstr "" + +#: templates/misago/admin/categories/list.html:21 +msgctxt "admin categories list" +msgid "Posts" +msgstr "" + +#: templates/misago/admin/categories/list.html:53 +msgctxt "admin category css class" +msgid "Not set" +msgstr "" + +#: templates/misago/admin/categories/list.html:66 +msgctxt "admin categories" +msgid "Move down" +msgstr "" + +#: templates/misago/admin/categories/list.html:80 +msgctxt "admin categories" +msgid "Move up" +msgstr "" + +#: templates/misago/admin/categories/list.html:102 +#: templates/misago/admin/categoryroles/categoryroles.html:24 +msgctxt "admin categories" +msgid "Edit category" +msgstr "" + +#: templates/misago/admin/categories/list.html:105 +msgctxt "admin categories" +msgid "Delete category" +msgstr "" + +#: templates/misago/admin/categories/list.html:115 +msgctxt "admin categories" +msgid "No categories are set." +msgstr "" + +#: templates/misago/admin/categoryroles/categoryroles.html:6 +#, python-format +msgctxt "admin category roles form" +msgid "%(category)s: Permissions" +msgstr "" + +#: templates/misago/admin/categoryroles/categoryroles.html:37 +msgctxt "admin category roles form" +msgid "Change permissions" +msgstr "" + +#: templates/misago/admin/categoryroles/categoryroles.html:59 +msgctxt "admin category roles form" +msgid "Are you sure you want to abandon changes?" +msgstr "" + +#: templates/misago/admin/categoryroles/form.html:9 +#: templates/misago/admin/categoryroles/form.html:28 +msgctxt "admin category role form" +msgid "New category role" +msgstr "" + +#: templates/misago/admin/categoryroles/form.html:26 +msgctxt "admin category role form" +msgid "Edit category role" +msgstr "" + +#: templates/misago/admin/categoryroles/form.html:36 +msgctxt "admin category role form" +msgid "Basic settings" +msgstr "" + +#: templates/misago/admin/categoryroles/list.html:9 +msgctxt "admin categories roles" +msgid "New role" +msgstr "" + +#: templates/misago/admin/categoryroles/list.html:16 +msgctxt "admin categories roles list" +msgid "Roles" +msgstr "" + +#: templates/misago/admin/categoryroles/list.html:34 +msgctxt "admin categories roles" +msgid "Edit role" +msgstr "" + +#: templates/misago/admin/categoryroles/list.html:39 +msgctxt "admin categories roles" +msgid "Delete role" +msgstr "" + +#: templates/misago/admin/categoryroles/list.html:50 +msgctxt "admin categories roles" +msgid "No category roles are set." +msgstr "" + +#: templates/misago/admin/categoryroles/list.html:59 +msgctxt "admin categories roles" +msgid "Are you sure you want to delete this role?" +msgstr "" + +#: templates/misago/admin/categoryroles/rolecategories.html:6 +#, python-format +msgctxt "admin role categories form" +msgid "%(role)s: Category permissions" +msgstr "" + +#: templates/misago/admin/categoryroles/rolecategories.html:24 +#: templates/misago/admin/roles/list.html:42 +msgctxt "admin roles" +msgid "Edit role" +msgstr "" + +#: templates/misago/admin/categoryroles/rolecategories.html:31 +msgctxt "admin role categories form" +msgid "Change permissions" +msgstr "" + +#: templates/misago/admin/categoryroles/rolecategories.html:56 +msgctxt "admin role categories form" +msgid "Are you sure you want to abandon changes?" +msgstr "" + +#: templates/misago/admin/conf/analytics_settings.html:8 +msgctxt "admin captcha settings form" +msgid "Google Analytics and Search Console" +msgstr "" + +#: templates/misago/admin/conf/captcha_settings.html:8 +msgctxt "admin captcha settings form" +msgid "Basic settings" +msgstr "" + +#: templates/misago/admin/conf/captcha_settings.html:16 +msgctxt "admin captcha settings form" +msgid "reCAPTCHA" +msgstr "" + +#: templates/misago/admin/conf/captcha_settings.html:25 +msgctxt "admin captcha settings form" +msgid "Question and answer" +msgstr "" + +#: templates/misago/admin/conf/captcha_settings.html:35 +msgctxt "admin captcha settings form" +msgid "Stop Forum Spam" +msgstr "" + +#: templates/misago/admin/conf/form.html:16 +msgctxt "admin settings form" +msgid "Change settings" +msgstr "" + +#: templates/misago/admin/conf/form.html:27 +msgctxt "admin settings form" +msgid "Form was completed with errors." +msgstr "" + +#: templates/misago/admin/conf/form.html:37 +msgctxt "admin settings form" +msgid "Save changes" +msgstr "" + +#: templates/misago/admin/conf/general_settings.html:8 +msgctxt "admin general settings form" +msgid "Site details" +msgstr "" + +#: templates/misago/admin/conf/general_settings.html:17 +msgctxt "admin general settings form" +msgid "Logo" +msgstr "" + +#: templates/misago/admin/conf/general_settings.html:35 +msgctxt "admin general settings form" +msgid "Open Graph image" +msgstr "" + +#: templates/misago/admin/conf/general_settings.html:49 +msgctxt "admin general settings form" +msgid "Forum index" +msgstr "" + +#: templates/misago/admin/conf/general_settings.html:69 +msgctxt "admin general settings form" +msgid "Admin Control Panel" +msgstr "" + +#: templates/misago/admin/conf/index.html:5 +msgctxt "admin settings" +msgid "Settings" +msgstr "" + +#: templates/misago/admin/conf/notifications_settings.html:8 +msgctxt "admin notifications settings form" +msgid "Default notifications settings" +msgstr "" + +#: templates/misago/admin/conf/notifications_settings.html:9 +msgctxt "admin notifications settings form" +msgid "Those settings are applied only to newly created user accounts." +msgstr "" + +#: templates/misago/admin/conf/notifications_settings.html:22 +msgctxt "admin notifications settings form" +msgid "Performance settings" +msgstr "" + +#: templates/misago/admin/conf/oauth2_settings.html:8 +msgctxt "admin oauth2 settings form" +msgid "Basic settings" +msgstr "" + +#: templates/misago/admin/conf/oauth2_settings.html:19 +msgctxt "admin oauth2 settings form" +msgid "Initializing login" +msgstr "" + +#: templates/misago/admin/conf/oauth2_settings.html:28 +msgctxt "admin oauth2 settings form" +msgid "Retrieving access token" +msgstr "" + +#: templates/misago/admin/conf/oauth2_settings.html:38 +msgctxt "admin oauth2 settings form" +msgid "Retrieving user data" +msgstr "" + +#: templates/misago/admin/conf/oauth2_settings.html:50 +msgctxt "admin oauth2 settings form" +msgid "New user sign-ons" +msgstr "" + +#: templates/misago/admin/conf/oauth2_settings.html:58 +msgctxt "admin oauth2 settings form" +msgid "User JSON mappings" +msgstr "" + +#: templates/misago/admin/conf/oauth2_settings.html:61 +msgctxt "admin oauth2 settings form" +msgid "" +"Path to value is a key under which it can be found in the JSON with user " +"data returned by the provider. If this key is nested under other key, use " +"full path and separate keys with periods (\".\")." +msgstr "" + +#: templates/misago/admin/conf/oauth2_settings.html:66 +msgctxt "admin oauth2 settings form" +msgid "For example, for given JSON with user data:" +msgstr "" + +#: templates/misago/admin/conf/oauth2_settings.html:81 +msgctxt "admin oauth2 settings form" +msgid "Those paths should be used:" +msgstr "" + +#: templates/misago/admin/conf/oauth2_settings.html:86 +msgctxt "admin oauth2 settings form" +msgid "User ID" +msgstr "" + +#: templates/misago/admin/conf/oauth2_settings.html:87 +msgctxt "admin oauth2 settings form" +msgid "User name" +msgstr "" + +#: templates/misago/admin/conf/oauth2_settings.html:88 +msgctxt "admin oauth2 settings form" +msgid "User e-mail" +msgstr "" + +#: templates/misago/admin/conf/oauth2_settings.html:89 +msgctxt "admin oauth2 settings form" +msgid "User avatar" +msgstr "" + +#: templates/misago/admin/conf/threads_settings.html:8 +msgctxt "admin threads settings form" +msgid "Posting" +msgstr "" + +#: templates/misago/admin/conf/threads_settings.html:26 +msgctxt "admin threads settings form" +msgid "Threads lists" +msgstr "" + +#: templates/misago/admin/conf/threads_settings.html:34 +msgctxt "admin threads settings form" +msgid "Thread pages" +msgstr "" + +#: templates/misago/admin/conf/threads_settings.html:44 +msgctxt "admin threads settings form" +msgid "Read-tracker" +msgstr "" + +#: templates/misago/admin/conf/threads_settings.html:52 +msgctxt "admin threads settings form" +msgid "Attachment error images" +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:9 +msgctxt "admin users settings form" +msgid "Note" +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:10 +#, python-format +msgctxt "admin users settings form" +msgid "" +"OAuth2 client is enabled. On site registration, password and account " +"deletion features have been disabled and delegated to the %(provider)s." +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:16 +msgctxt "admin users settings form" +msgid "New accounts" +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:25 +msgctxt "admin users settings form" +msgid "Usernames" +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:35 +msgctxt "admin users settings form" +msgid "Avatars" +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:51 +msgctxt "admin users settings form" +msgid "Signatures" +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:59 +msgctxt "admin users settings form" +msgid "Data downloads" +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:68 +msgctxt "admin users settings form" +msgid "Own account deletion" +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:76 +msgctxt "admin users settings form" +msgid "IP addresses" +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:84 +msgctxt "admin users settings form" +msgid "Default subscription preferences" +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:87 +msgctxt "admin users settings form" +msgid "Deprecation warning" +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:88 +msgctxt "admin users settings form" +msgid "" +"The thread subscriptions feature has been replaced with notifications and " +"will be removed in a future version of Misago. Please use the notification " +"settings instead." +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:100 +msgctxt "admin users settings form" +msgid "Users lists" +msgstr "" + +#: templates/misago/admin/conf/users_settings.html:109 +msgctxt "admin users settings form" +msgid "Top posters ranking" +msgstr "" + +#: templates/misago/admin/dashboard/analytics.html:7 +#: templates/misago/admin/dashboard/index.html:40 +msgctxt "admin analytics" +msgid "Analytics" +msgstr "" + +#: templates/misago/admin/dashboard/analytics.html:14 +msgctxt "admin analytics" +msgid "Loading..." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:5 +msgctxt "admin checks title" +msgid "System checks" +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:12 +msgctxt "admin version check" +msgid "Loading..." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:16 +#: templates/misago/admin/dashboard/index.html:32 +msgctxt "admin version check" +msgid "Checking Misago version used by the site..." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:30 +msgctxt "admin debug check" +msgid "The site is running in DEBUG mode." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:31 +msgctxt "admin debug check" +msgid "" +"Error pages displayed in DEBUG mode will expose site configuration details " +"like secrets and tokens to all visitors. This is MAJOR security risk." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:48 +msgctxt "admin site address check" +msgid "Forum address is not configured." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:49 +msgctxt "admin site address check" +msgid "Links in e-mails sent by Misago will be broken." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:69 +msgctxt "admin site address check" +msgid "Configured forum address appears to be incorrect." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:77 +#, python-format +msgctxt "admin site address check" +msgid "" +"Your forum address is set to %(configured_address)s while correct value " +"appears to be %(correct_address)s." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:82 +msgctxt "admin site address check" +msgid "Links in e-mails sent by Misago may be broken." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:102 +msgctxt "admin https check" +msgid "The site is not running over HTTPS." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:103 +msgctxt "admin https check" +msgid "" +"Browsers may warn users visiting the site about it being insecure. Search " +"engines will lower its position in search results." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:117 +msgctxt "admin cache check" +msgid "Cache is disabled." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:118 +msgctxt "admin cache check" +msgid "" +"This will cause degraded performance and increased CPU usage by the site, " +"leading to worse user experience and increased hosting costs." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:133 +#, python-format +msgctxt "admin data downloads check" +msgid "There is %(downloads)s unprocessed data download request." +msgid_plural "There are %(downloads)s unprocessed data download requests." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/admin/dashboard/checks.html:139 +msgctxt "admin data downloads check" +msgid "" +"Cron task that should process user data download requests is not running." +msgstr "" + +#: templates/misago/admin/dashboard/checks.html:156 +#, python-format +msgctxt "admin inactive users check" +msgid "There is %(users)s inactive user accounts." +msgid_plural "There are %(users)s inactive users accounts." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/admin/dashboard/checks.html:162 +msgctxt "admin inactive users check" +msgid "" +"The site may be targeted by bots, is not sending activation e-mails, or is " +"not configured to delete inactive user accounts." +msgstr "" + +#: templates/misago/admin/dashboard/index.html:5 +#: templates/misago/admin/dashboard/index.html:11 +msgctxt "admin dashboard" +msgid "Dashboard" +msgstr "" + +#: templates/misago/admin/dashboard/index.html:28 +msgctxt "admin version check" +msgid "Version check is currently unavailable due to an error." +msgstr "" + +#: templates/misago/admin/dashboard/index.html:29 +msgctxt "admin version check" +msgid "Misago admin API did not answer or answered with an error." +msgstr "" + +#: templates/misago/admin/dashboard/index.html:42 +msgctxt "admin analytics" +msgid "User registrations" +msgstr "" + +#: templates/misago/admin/dashboard/index.html:43 +msgctxt "admin analytics" +msgid "User deletions" +msgstr "" + +#: templates/misago/admin/dashboard/index.html:44 +msgctxt "admin analytics" +msgid "Threads started" +msgstr "" + +#: templates/misago/admin/dashboard/index.html:45 +msgctxt "admin analytics" +msgid "Posts" +msgstr "" + +#: templates/misago/admin/dashboard/index.html:46 +msgctxt "admin analytics" +msgid "Attachments uploaded" +msgstr "" + +#: templates/misago/admin/dashboard/index.html:47 +msgctxt "admin analytics" +msgid "Data download requests" +msgstr "" + +#: templates/misago/admin/dashboard/index.html:49 +msgctxt "admin analytics" +msgid "Site analytics are currently unavailable due to an error." +msgstr "" + +#: templates/misago/admin/dashboard/totals.html:7 +msgctxt "admin dashboard totals" +msgid "Users" +msgstr "" + +#: templates/misago/admin/dashboard/totals.html:19 +msgctxt "admin dashboard totals" +msgid "Threads" +msgstr "" + +#: templates/misago/admin/dashboard/totals.html:31 +msgctxt "admin dashboard totals" +msgid "Posts" +msgstr "" + +#: templates/misago/admin/dashboard/totals.html:43 +msgctxt "admin dashboard totals" +msgid "Attachments" +msgstr "" + +#: templates/misago/admin/datadownloads/form.html:6 +#: templates/misago/admin/datadownloads/form.html:11 +msgctxt "admin data download request form" +msgid "Request new data downloads" +msgstr "" + +#: templates/misago/admin/datadownloads/list.html:9 +msgctxt "admin data downloads" +msgid "New downloads" +msgstr "" + +#: templates/misago/admin/datadownloads/list.html:17 +msgctxt "admin data downloads list" +msgid "User" +msgstr "" + +#: templates/misago/admin/datadownloads/list.html:18 +msgctxt "admin data downloads list" +msgid "Status" +msgstr "" + +#: templates/misago/admin/datadownloads/list.html:19 +msgctxt "admin data downloads list" +msgid "Requested on" +msgstr "" + +#: templates/misago/admin/datadownloads/list.html:21 +msgctxt "admin data downloads list" +msgid "Requested by" +msgstr "" + +#: templates/misago/admin/datadownloads/list.html:32 +#: templates/misago/admin/datadownloads/list.html:51 +#: templates/misago/admin/datadownloads/list.html:54 +#: templates/misago/admin/users/edit.html:38 +#: templates/misago/admin/users/list.html:32 +msgctxt "admin user avatar" +msgid "Avatar" +msgstr "" + +#: templates/misago/admin/datadownloads/list.html:70 +#: templates/misago/admin/datadownloads/list.html:74 +msgctxt "admin data download button" +msgid "Download" +msgstr "" + +#: templates/misago/admin/datadownloads/list.html:84 +msgctxt "admin data downloads" +msgid "No data downloads matching criteria exist." +msgstr "" + +#: templates/misago/admin/datadownloads/list.html:86 +msgctxt "admin data downloads" +msgid "No data downloads exist." +msgstr "" + +#: templates/misago/admin/errorpages/403.html:5 +msgctxt "admin error 403" +msgid "Page not available" +msgstr "" + +#: templates/misago/admin/errorpages/403.html:12 +msgctxt "admin error 403" +msgid "Requested page is not available" +msgstr "" + +#: templates/misago/admin/errorpages/403.html:18 +msgctxt "admin error 403" +msgid "You don't have permission to access this page." +msgstr "" + +#: templates/misago/admin/errorpages/404.html:5 +msgctxt "admin error 404" +msgid "Page not found" +msgstr "" + +#: templates/misago/admin/errorpages/404.html:12 +msgctxt "admin error 404" +msgid "Requested page could not be found" +msgstr "" + +#: templates/misago/admin/errorpages/404.html:16 +msgctxt "admin error 404" +msgid "" +"The link you've followed was incorrect or the page has been moved or " +"deleted." +msgstr "" + +#: templates/misago/admin/errorpages/csrf_failure.html:5 +#: templates/misago/admin/errorpages/csrf_failure.html:14 +#: templates/misago/admin/errorpages/csrf_failure_authenticated.html:5 +#: templates/misago/admin/errorpages/csrf_failure_authenticated.html:12 +msgctxt "admin csrf error" +msgid "Form submission rejected" +msgstr "" + +#: templates/misago/admin/errorpages/csrf_failure_message.html:3 +msgctxt "admin csrf error" +msgid "" +"Your form submission was rejected because your browser didn't send the CSRF " +"cookie, or the cookie sent was invalid." +msgstr "" + +#: templates/misago/admin/errorpages/csrf_failure_message.html:6 +msgctxt "admin csrf error" +msgid "This is usually a result of one of following problems:" +msgstr "" + +#: templates/misago/admin/errorpages/csrf_failure_message.html:9 +msgctxt "admin csrf error" +msgid "Your browser is configured to don't accept or send any cookies." +msgstr "" + +#: templates/misago/admin/errorpages/csrf_failure_message.html:12 +msgctxt "admin csrf error" +msgid "" +"The form was sent after being opened in the browser for a long time (eg. few" +" days) and cookie token has expired." +msgstr "" + +#: templates/misago/admin/errorpages/csrf_failure_message.html:15 +msgctxt "admin csrf error" +msgid "" +"The site is configured to use the HTTPS, but this form was sent over the the" +" HTTP." +msgstr "" + +#: templates/misago/admin/errorpages/csrf_failure_message.html:16 +msgctxt "admin csrf error" +msgid "" +"If you are an owner of this site, please check if the HTTPS certificate used" +" by the site is valid and accepted by the browser." +msgstr "" + +#: templates/misago/admin/generic/filter_form.html:7 +msgctxt "admin list filters" +msgid "Filter" +msgstr "" + +#: templates/misago/admin/generic/filter_form.html:17 +msgctxt "admin list filters" +msgid "Clear filters" +msgstr "" + +#: templates/misago/admin/generic/form.html:25 +msgctxt "admin form" +msgid "Form was completed with errors." +msgstr "" + +#: templates/misago/admin/generic/form.html:36 +msgctxt "admin form" +msgid "Cancel" +msgstr "" + +#: templates/misago/admin/generic/form.html:42 +msgctxt "admin form action" +msgid "Save and keep editing" +msgstr "" + +#: templates/misago/admin/generic/form.html:45 +msgctxt "admin form action" +msgid "Save changes" +msgstr "" + +#: templates/misago/admin/generic/form.html:49 +msgctxt "admin form action" +msgid "Save and add another" +msgstr "" + +#: templates/misago/admin/generic/form.html:52 +msgctxt "admin form action" +msgid "Save" +msgstr "" + +#: templates/misago/admin/generic/list.html:87 +msgctxt "admin list filters" +msgid "Filters" +msgstr "" + +#: templates/misago/admin/generic/list.html:90 +#: templates/misago/admin/generic/list.html:105 +msgctxt "admin list filters" +msgid "Close" +msgstr "" + +#: templates/misago/admin/generic/list.html:108 +msgctxt "admin list filters" +msgid "Done" +msgstr "" + +#: templates/misago/admin/generic/mass_actions.html:10 +msgctxt "admin list" +msgid "With selected:" +msgstr "" + +#: templates/misago/admin/generic/order_by.html:5 +msgctxt "admin list ordering" +msgid "Sort:" +msgstr "" + +#: templates/misago/admin/generic/order_by.html:10 +msgctxt "admin list ordering" +msgid "Change sorting to:" +msgstr "" + +#: templates/misago/admin/generic/paginator.html:4 +msgctxt "admin paginator" +msgid "Go to first page" +msgstr "" + +#: templates/misago/admin/generic/paginator.html:5 +#: templates/misago/admin/generic/paginator.html:9 +msgctxt "admin paginator" +msgid "First" +msgstr "" + +#: templates/misago/admin/generic/paginator.html:13 +msgctxt "admin paginator" +msgid "Go to previous page" +msgstr "" + +#: templates/misago/admin/generic/paginator.html:22 +msgctxt "admin paginator" +msgid "Go to next page" +msgstr "" + +#: templates/misago/admin/generic/paginator.html:25 +msgctxt "admin paginator" +msgid "Go to last page" +msgstr "" + +#: templates/misago/admin/generic/paginator.html:26 +#: templates/misago/admin/generic/paginator.html:33 +msgctxt "admin paginator" +msgid "Last" +msgstr "" + +#: templates/misago/admin/generic/paginator.html:38 +#, python-format +msgctxt "admin paginator" +msgid "Page %(page)s of %(pages)s" +msgstr "" + +#: templates/misago/admin/icons.html:8 +msgctxt "admin icons form" +msgid "Favicon" +msgstr "" + +#: templates/misago/admin/icons.html:11 +msgctxt "admin icons form" +msgid "" +"Favicon is small icon that internet browsers display next to your site in " +"its interface." +msgstr "" + +#: templates/misago/admin/icons.html:68 +msgctxt "admin icons form" +msgid "Apple Touch Icon" +msgstr "" + +#: templates/misago/admin/icons.html:71 +msgctxt "admin icons form" +msgid "" +"Apple devices and Safari web browser will use this image to represent the " +"site in its interfaces." +msgstr "" + +#: templates/misago/admin/login.html:6 +msgctxt "admin login form" +msgid "Log in" +msgstr "" + +#: templates/misago/admin/login.html:6 +msgctxt "admin title" +msgid "Django Administration" +msgstr "" + +#: templates/misago/admin/login.html:24 +msgctxt "admin login form" +msgid "Administration" +msgstr "" + +#: templates/misago/admin/login.html:29 +msgctxt "admin login form" +msgid "Please try again." +msgstr "" + +#: templates/misago/admin/login.html:48 +msgctxt "admin login form" +msgid "Username or e-mail" +msgstr "" + +#: templates/misago/admin/login.html:53 +msgctxt "admin login form" +msgid "Password" +msgstr "" + +#: templates/misago/admin/login.html:57 +msgctxt "admin login form" +msgid "Sign in" +msgstr "" + +#: templates/misago/admin/login.html:60 +msgctxt "admin login form" +msgid "Return to site" +msgstr "" + +#: templates/misago/admin/menuitems/form.html:9 +#: templates/misago/admin/menuitems/form.html:33 +msgctxt "admin menu item form" +msgid "New menu item" +msgstr "" + +#: templates/misago/admin/menuitems/form.html:31 +msgctxt "admin menu item form" +msgid "Edit menu item" +msgstr "" + +#: templates/misago/admin/menuitems/form.html:41 +msgctxt "admin menu item form" +msgid "Basic settings" +msgstr "" + +#: templates/misago/admin/menuitems/form.html:50 +msgctxt "admin menu item form" +msgid "Behavior and appearance" +msgstr "" + +#: templates/misago/admin/menuitems/list.html:9 +msgctxt "admin menu items" +msgid "New menu item" +msgstr "" + +#: templates/misago/admin/menuitems/list.html:16 +msgctxt "admin menu items list" +msgid "Item" +msgstr "" + +#: templates/misago/admin/menuitems/list.html:18 +msgctxt "admin menu items list" +msgid "CSS Class" +msgstr "" + +#: templates/misago/admin/menuitems/list.html:19 +msgctxt "admin menu items list" +msgid "Target" +msgstr "" + +#: templates/misago/admin/menuitems/list.html:20 +msgctxt "admin menu items list" +msgid "Rel" +msgstr "" + +#: templates/misago/admin/menuitems/list.html:40 +msgctxt "admin menu items" +msgid "Is displayed on the forum navbar." +msgstr "" + +#: templates/misago/admin/menuitems/list.html:45 +msgctxt "admin menu items" +msgid "Is displayed on the forum footer." +msgstr "" + +#: templates/misago/admin/menuitems/list.html:54 +msgctxt "admin menu item css class" +msgid "Not set" +msgstr "" + +#: templates/misago/admin/menuitems/list.html:72 +msgctxt "admin menu items" +msgid "Move down" +msgstr "" + +#: templates/misago/admin/menuitems/list.html:86 +msgctxt "admin menu items" +msgid "Move up" +msgstr "" + +#: templates/misago/admin/menuitems/list.html:103 +msgctxt "admin menu items" +msgid "Edit item" +msgstr "" + +#: templates/misago/admin/menuitems/list.html:108 +msgctxt "admin menu items" +msgid "Remove item" +msgstr "" + +#: templates/misago/admin/menuitems/list.html:119 +msgctxt "admin menu items" +msgid "No menu items are set." +msgstr "" + +#: templates/misago/admin/menuitems/list.html:129 +msgctxt "admin menu items" +msgid "Are you sure you want to remove this menu item?" +msgstr "" + +#: templates/misago/admin/navbar.html:12 +msgctxt "admin navbar" +msgid "GitHub" +msgstr "" + +#: templates/misago/admin/navbar.html:16 +msgctxt "admin navbar" +msgid "Support forum" +msgstr "" + +#: templates/misago/admin/navbar.html:20 +msgctxt "admin navbar" +msgid "Site index" +msgstr "" + +#: templates/misago/admin/navbar.html:24 +msgctxt "admin navbar" +msgid "Your avatar" +msgstr "" + +#: templates/misago/admin/navbar.html:29 +msgctxt "admin navbar" +msgid "Edit your account" +msgstr "" + +#: templates/misago/admin/navbar.html:35 +msgctxt "admin navbar" +msgid "Close admin session" +msgstr "" + +#: templates/misago/admin/navbar.html:41 +msgctxt "admin navbar" +msgid "Log out completely" +msgstr "" + +#: templates/misago/admin/ranks/form.html:9 +#: templates/misago/admin/ranks/form.html:40 +msgctxt "admin rank form" +msgid "New rank" +msgstr "" + +#: templates/misago/admin/ranks/form.html:29 +msgctxt "admin ranks" +msgid "View on site" +msgstr "" + +#: templates/misago/admin/ranks/form.html:38 +msgctxt "admin rank form" +msgid "Edit rank" +msgstr "" + +#: templates/misago/admin/ranks/form.html:48 +msgctxt "admin rank form" +msgid "Name and description" +msgstr "" + +#: templates/misago/admin/ranks/form.html:58 +msgctxt "admin rank form" +msgid "Permissions" +msgstr "" + +#: templates/misago/admin/ranks/form.html:66 +msgctxt "admin rank form" +msgid "Display and visibility" +msgstr "" + +#: templates/misago/admin/ranks/list.html:9 +msgctxt "admin ranks" +msgid "New rank" +msgstr "" + +#: templates/misago/admin/ranks/list.html:17 +msgctxt "admin ranks list" +msgid "Rank" +msgstr "" + +#: templates/misago/admin/ranks/list.html:19 +msgctxt "admin ranks list" +msgid "Title" +msgstr "" + +#: templates/misago/admin/ranks/list.html:20 +msgctxt "admin ranks list" +msgid "CSS class" +msgstr "" + +#: templates/misago/admin/ranks/list.html:45 +msgctxt "admin ranks" +msgid "Has dedicated page on users list" +msgstr "" + +#: templates/misago/admin/ranks/list.html:46 +msgctxt "admin rank has tab status" +msgid "Tab" +msgstr "" + +#: templates/misago/admin/ranks/list.html:50 +msgctxt "admin ranks" +msgid "This is default rank assigned to new members" +msgstr "" + +#: templates/misago/admin/ranks/list.html:51 +msgctxt "admin rank is default status" +msgid "Default" +msgstr "" + +#: templates/misago/admin/ranks/list.html:59 +msgctxt "admin rank user title" +msgid "Not set" +msgstr "" + +#: templates/misago/admin/ranks/list.html:66 +msgctxt "admin rank css class" +msgid "Not set" +msgstr "" + +#: templates/misago/admin/ranks/list.html:74 +msgctxt "admin ranks" +msgid "Move down" +msgstr "" + +#: templates/misago/admin/ranks/list.html:88 +msgctxt "admin ranks" +msgid "Move up" +msgstr "" + +#: templates/misago/admin/ranks/list.html:105 +msgctxt "admin ranks" +msgid "List users" +msgstr "" + +#: templates/misago/admin/ranks/list.html:111 +msgctxt "admin ranks" +msgid "Set as default" +msgstr "" + +#: templates/misago/admin/ranks/list.html:116 +msgctxt "admin ranks" +msgid "Edit rank" +msgstr "" + +#: templates/misago/admin/ranks/list.html:121 +msgctxt "admin ranks" +msgid "Delete rank" +msgstr "" + +#: templates/misago/admin/ranks/list.html:132 +msgctxt "admin ranks" +msgid "No user ranks are set." +msgstr "" + +#: templates/misago/admin/ranks/list.html:141 +msgctxt "admin ranks" +msgid "Are you sure you want to delete this rank?" +msgstr "" + +#: templates/misago/admin/roles/form.html:9 +#: templates/misago/admin/roles/form.html:28 +msgctxt "admin role form" +msgid "New role" +msgstr "" + +#: templates/misago/admin/roles/form.html:26 +msgctxt "admin role form" +msgid "Edit role" +msgstr "" + +#: templates/misago/admin/roles/form.html:36 +msgctxt "admin role form" +msgid "Basic settings" +msgstr "" + +#: templates/misago/admin/roles/list.html:9 +msgctxt "admin roles" +msgid "New role" +msgstr "" + +#: templates/misago/admin/roles/list.html:16 +msgctxt "admin roles list" +msgid "Role" +msgstr "" + +#: templates/misago/admin/roles/list.html:39 +msgctxt "admin roles" +msgid "Users with role" +msgstr "" + +#: templates/misago/admin/roles/list.html:47 +msgctxt "admin roles" +msgid "Delete role" +msgstr "" + +#: templates/misago/admin/roles/list.html:58 +msgctxt "admin roles" +msgid "No user roles are set." +msgstr "" + +#: templates/misago/admin/roles/list.html:67 +msgctxt "admin roles" +msgid "Are you sure you want to delete this role?" +msgstr "" + +#: templates/misago/admin/socialauth/form.html:17 +msgctxt "admin social auth provider form" +msgid "Edit social login" +msgstr "" + +#: templates/misago/admin/socialauth/form.html:19 +msgctxt "admin social auth provider form" +msgid "Setup social login" +msgstr "" + +#: templates/misago/admin/socialauth/form.html:27 +msgctxt "admin social auth provider form" +msgid "General" +msgstr "" + +#: templates/misago/admin/socialauth/form.html:40 +msgctxt "admin social auth provider form" +msgid "Button appearance" +msgstr "" + +#: templates/misago/admin/socialauth/list.html:8 +msgctxt "admin social auth providers" +msgid "Enabled login methods" +msgstr "" + +#: templates/misago/admin/socialauth/list.html:15 +#: templates/misago/admin/socialauth/list.html:115 +msgctxt "admin social auth providers list" +msgid "Provider" +msgstr "" + +#: templates/misago/admin/socialauth/list.html:32 +msgctxt "admin social auth provider" +msgid "Move down" +msgstr "" + +#: templates/misago/admin/socialauth/list.html:46 +msgctxt "admin social auth provider" +msgid "Move up" +msgstr "" + +#: templates/misago/admin/socialauth/list.html:63 +msgctxt "admin social auth provider" +msgid "Change settings" +msgstr "" + +#: templates/misago/admin/socialauth/list.html:68 +msgctxt "admin social auth provider" +msgid "Disable login" +msgstr "" + +#: templates/misago/admin/socialauth/list.html:79 +msgctxt "admin social auth providers" +msgid "No social login methods are enabled." +msgstr "" + +#: templates/misago/admin/socialauth/list.html:88 +msgctxt "admin social auth providers" +msgid "Are you sure you want to disable this social login provider?" +msgstr "" + +#: templates/misago/admin/socialauth/list.html:97 +msgctxt "admin social auth providers" +msgid "Note" +msgstr "" + +#: templates/misago/admin/socialauth/list.html:98 +#, python-format +msgctxt "admin social auth providers" +msgid "" +"OAuth2 client is enabled. Social authentication has been disabled with login" +" and registration delegated to the %(provider)s." +msgstr "" + +#: templates/misago/admin/socialauth/list.html:109 +msgctxt "admin social auth providers list" +msgid "Setup new login method" +msgstr "" + +#: templates/misago/admin/socialauth/list.html:128 +msgctxt "admin social auth providers" +msgid "Setup login with this provider" +msgstr "" + +#: templates/misago/admin/socialauth/list.html:129 +msgctxt "admin social auth providers" +msgid "Setup" +msgstr "" + +#: templates/misago/admin/socialauth/list.html:136 +msgctxt "admin social auth providers" +msgid "No new login providers are available for setup." +msgstr "" + +#: templates/misago/admin/themes/assets/css-editor-form.html:9 +#: templates/misago/admin/themes/assets/css-editor-form.html:41 +msgctxt "admin theme css form" +msgid "New CSS" +msgstr "" + +#: templates/misago/admin/themes/assets/css-editor-form.html:39 +msgctxt "admin theme css form" +msgid "Edit CSS" +msgstr "" + +#: templates/misago/admin/themes/assets/css-editor-form.html:58 +msgctxt "admin theme css form" +msgid "Save and keep editing" +msgstr "" + +#: templates/misago/admin/themes/assets/css-editor-form.html:60 +msgctxt "admin theme css form" +msgid "Save changes" +msgstr "" + +#: templates/misago/admin/themes/assets/css-editor-form.html:62 +msgctxt "admin theme css form" +msgid "Save" +msgstr "" + +#: templates/misago/admin/themes/assets/css-editor-form.html:69 +msgctxt "admin theme css form" +msgid "Cancel" +msgstr "" + +#: templates/misago/admin/themes/assets/css-link-form.html:9 +#: templates/misago/admin/themes/assets/css-link-form.html:31 +msgctxt "admin theme css link form" +msgid "New CSS link" +msgstr "" + +#: templates/misago/admin/themes/assets/css-link-form.html:29 +msgctxt "admin theme css link form" +msgid "Edit CSS link" +msgstr "" + +#: templates/misago/admin/themes/assets/css-link-form.html:44 +msgctxt "admin theme css link form" +msgid "Cancel" +msgstr "" + +#: templates/misago/admin/themes/assets/css.html:7 +msgctxt "admin theme assets" +msgid "CSS files" +msgstr "" + +#: templates/misago/admin/themes/assets/css.html:12 +msgctxt "admin theme assets" +msgid "Upload" +msgstr "" + +#: templates/misago/admin/themes/assets/css.html:17 +msgctxt "admin theme assets" +msgid "Link" +msgstr "" + +#: templates/misago/admin/themes/assets/css.html:22 +msgctxt "admin theme assets" +msgid "Create" +msgstr "" + +#: templates/misago/admin/themes/assets/css.html:31 +msgid "Name" +msgstr "Név" + +#: templates/misago/admin/themes/assets/css.html:32 +msgid "Modified" +msgstr "Módosított" + +#: templates/misago/admin/themes/assets/css.html:33 +msgid "Size" +msgstr "Méret" + +#: templates/misago/admin/themes/assets/css.html:68 +msgid "Move down" +msgstr "Mozgatás le" + +#: templates/misago/admin/themes/assets/css.html:73 +msgid "Move up" +msgstr "Mozgatás fel" + +#: templates/misago/admin/themes/assets/css.html:80 +#: templates/misago/admin/themes/assets/css.html:84 +#: users/admin/djangoadmin.py:72 +msgid "Edit" +msgstr "Szerkesztés" + +#: templates/misago/admin/themes/assets/css.html:94 +msgid "This theme has no CSS files." +msgstr "" + +#: templates/misago/admin/themes/assets/css.html:103 +msgid "Delete selected" +msgstr "Kijelöltek eltávolítása" + +#: templates/misago/admin/themes/assets/list.html:6 +msgctxt "admin theme assets" +msgid "Assets" +msgstr "" + +#: templates/misago/admin/themes/assets/list.html:22 +msgctxt "admin themes" +msgid "Edit theme" +msgstr "" + +#: templates/misago/admin/themes/assets/list.html:44 +msgctxt "admin theme assets" +msgid "Are you sure you want to delete selected items?" +msgstr "" + +#: templates/misago/admin/themes/assets/media.html:7 +msgctxt "admin theme media assets" +msgid "Media" +msgstr "" + +#: templates/misago/admin/themes/assets/media.html:12 +msgctxt "admin theme media assets" +msgid "Upload" +msgstr "" + +#: templates/misago/admin/themes/assets/media.html:21 +msgctxt "admin theme media assets" +msgid "Name" +msgstr "" + +#: templates/misago/admin/themes/assets/media.html:22 +msgctxt "admin theme media assets" +msgid "Modified" +msgstr "" + +#: templates/misago/admin/themes/assets/media.html:23 +msgctxt "admin theme media assets" +msgid "Size" +msgstr "" + +#: templates/misago/admin/themes/assets/media.html:24 +msgctxt "admin theme media assets" +msgid "Type" +msgstr "" + +#: templates/misago/admin/themes/assets/media.html:25 +msgctxt "admin theme media assets" +msgid "Dimensions" +msgstr "" + +#: templates/misago/admin/themes/assets/media.html:70 +msgctxt "admin theme media assets" +msgid "This theme has no media." +msgstr "" + +#: templates/misago/admin/themes/assets/media.html:79 +msgctxt "admin theme media assets" +msgid "Delete selected" +msgstr "" + +#: templates/misago/admin/themes/assets/upload-css.html:6 +msgctxt "admin theme css upload form" +msgid "Upload CSS" +msgstr "" + +#: templates/misago/admin/themes/assets/upload-css.html:7 +msgctxt "admin theme css upload form" +msgid "Close" +msgstr "" + +#: templates/misago/admin/themes/assets/upload-css.html:15 +msgctxt "admin theme css upload form" +msgid "Select CSS files to upload" +msgstr "" + +#: templates/misago/admin/themes/assets/upload-css.html:20 +msgctxt "admin theme css upload form" +msgid "Cancel" +msgstr "" + +#: templates/misago/admin/themes/assets/upload-css.html:21 +msgctxt "admin theme css upload form" +msgid "Upload" +msgstr "" + +#: templates/misago/admin/themes/assets/upload-media.html:6 +msgctxt "admin theme media upload form" +msgid "Upload media" +msgstr "" + +#: templates/misago/admin/themes/assets/upload-media.html:7 +msgctxt "admin theme media upload form" +msgid "Close" +msgstr "" + +#: templates/misago/admin/themes/assets/upload-media.html:15 +msgctxt "admin theme media upload form" +msgid "Select media files to upload" +msgstr "" + +#: templates/misago/admin/themes/assets/upload-media.html:18 +msgctxt "admin theme media upload form" +msgid "" +"Media files are primarily image and font files that can be linked to from " +"the CSS, but files of any type can be uploaded using this option." +msgstr "" + +#: templates/misago/admin/themes/assets/upload-media.html:21 +msgctxt "admin theme media upload form" +msgid "" +"Theme CSS that use the \"url()\" to point to media files will be updated " +"automatically." +msgstr "" + +#: templates/misago/admin/themes/assets/upload-media.html:26 +msgctxt "admin theme media upload form" +msgid "Cancel" +msgstr "" + +#: templates/misago/admin/themes/assets/upload-media.html:27 +msgctxt "admin theme media upload form" +msgid "Upload" +msgstr "" + +#: templates/misago/admin/themes/form.html:9 +#: templates/misago/admin/themes/form.html:40 +msgctxt "admin theme form" +msgid "New theme" +msgstr "" + +#: templates/misago/admin/themes/form.html:29 +#: templates/misago/admin/themes/list.html:63 +msgctxt "admin themes" +msgid "Edit assets" +msgstr "" + +#: templates/misago/admin/themes/form.html:38 +msgctxt "admin theme form" +msgid "Edit theme" +msgstr "" + +#: templates/misago/admin/themes/form.html:48 +msgctxt "admin theme form" +msgid "Settings" +msgstr "" + +#: templates/misago/admin/themes/form.html:57 +msgctxt "admin theme form" +msgid "Additional information (optional)" +msgstr "" + +#: templates/misago/admin/themes/import.html:6 +#: templates/misago/admin/themes/import.html:11 +#: templates/misago/admin/themes/list.html:9 +msgctxt "admin themes" +msgid "Import theme" +msgstr "" + +#: templates/misago/admin/themes/import.html:23 +msgctxt "admin theme import submit" +msgid "Import" +msgstr "" + +#: templates/misago/admin/themes/list.html:15 +msgctxt "admin themes" +msgid "Create theme" +msgstr "" + +#: templates/misago/admin/themes/list.html:22 +msgctxt "admin themes list" +msgid "Theme" +msgstr "" + +#: templates/misago/admin/themes/list.html:51 +msgctxt "admin theme active status" +msgid "Active" +msgstr "" + +#: templates/misago/admin/themes/list.html:68 +msgctxt "admin themes" +msgid "Edit information" +msgstr "" + +#: templates/misago/admin/themes/list.html:72 +msgctxt "admin themes" +msgid "Create child theme" +msgstr "" + +#: templates/misago/admin/themes/list.html:78 +msgctxt "admin themes" +msgid "Set as active" +msgstr "" + +#: templates/misago/admin/themes/list.html:86 +msgctxt "admin themes" +msgid "Export theme" +msgstr "" + +#: templates/misago/admin/themes/list.html:94 +msgctxt "admin themes" +msgid "Delete theme" +msgstr "" + +#: templates/misago/admin/themes/list.html:109 +msgctxt "admin themes" +msgid "" +"Are you sure you want to delete this theme? Deleting theme will also delete " +"its child themes." +msgstr "" + +#: templates/misago/admin/users/ban.html:6 +#: templates/misago/admin/users/ban.html:83 +msgctxt "admin ban users form" +msgid "Ban users" +msgstr "" + +#: templates/misago/admin/users/ban.html:11 +msgctxt "admin ban users form" +msgid "Ban selected users" +msgstr "" + +#: templates/misago/admin/users/ban.html:22 +msgctxt "admin ban users form" +msgid "Users" +msgstr "" + +#: templates/misago/admin/users/ban.html:28 +msgctxt "admin ban users list" +msgid "User" +msgstr "" + +#: templates/misago/admin/users/ban.html:29 +msgctxt "admin ban users list" +msgid "E-mail" +msgstr "" + +#: templates/misago/admin/users/ban.html:30 +msgctxt "admin ban users list" +msgid "IP address" +msgstr "" + +#: templates/misago/admin/users/ban.html:38 +msgid "Avatar" +msgstr "Avatár" + +#: templates/misago/admin/users/ban.html:51 +#: templates/misago/admin/users/list.html:85 +msgctxt "admin user ip deleted" +msgid "IP removed" +msgstr "" + +#: templates/misago/admin/users/ban.html:62 +msgctxt "admin ban users form" +msgid "Ban settings" +msgstr "" + +#: templates/misago/admin/users/ban.html:71 +msgctxt "admin ban users form" +msgid "Messages" +msgstr "" + +#: templates/misago/admin/users/ban.html:92 +msgctxt "admin ban users form" +msgid "Never" +msgstr "" + +#: templates/misago/admin/users/ban.html:93 +msgctxt "admin ban users form" +msgid "Set date" +msgstr "" + +#: templates/misago/admin/users/edit.html:23 +msgctxt "admin users" +msgid "View on site" +msgstr "" + +#: templates/misago/admin/users/edit.html:31 +msgctxt "admin user form" +msgid "Edit user" +msgstr "" + +#: templates/misago/admin/users/edit.html:44 +#: templates/misago/admin/users/list.html:47 +msgctxt "admin users list item" +msgid "Can use admin control panel and manage other administrators" +msgstr "" + +#: templates/misago/admin/users/edit.html:45 +#: templates/misago/admin/users/list.html:48 +msgctxt "admin user super admin status" +msgid "Super Admin" +msgstr "" + +#: templates/misago/admin/users/edit.html:48 +#: templates/misago/admin/users/list.html:51 +msgctxt "admin users list item" +msgid "Can use admin control panel" +msgstr "" + +#: templates/misago/admin/users/edit.html:49 +#: templates/misago/admin/users/list.html:52 +msgctxt "admin user admin status" +msgid "Admin" +msgstr "" + +#: templates/misago/admin/users/edit.html:53 +#: templates/misago/admin/users/list.html:56 +msgctxt "admin users list item" +msgid "Requires activation by administrator" +msgstr "" + +#: templates/misago/admin/users/edit.html:54 +#: templates/misago/admin/users/edit.html:58 +#: templates/misago/admin/users/list.html:57 +#: templates/misago/admin/users/list.html:61 +msgctxt "admin user inactive status" +msgid "Inactive" +msgstr "" + +#: templates/misago/admin/users/edit.html:57 +#: templates/misago/admin/users/list.html:60 +msgctxt "admin users list item" +msgid "Has to activate their account" +msgstr "" + +#: templates/misago/admin/users/edit.html:62 +#: templates/misago/admin/users/list.html:65 +msgctxt "admin users list item" +msgid "Account scheduled for deletion" +msgstr "" + +#: templates/misago/admin/users/edit.html:63 +#: templates/misago/admin/users/list.html:66 +msgctxt "admin user deleted status" +msgid "Deleted" +msgstr "" + +#: templates/misago/admin/users/edit.html:66 +#: templates/misago/admin/users/list.html:69 +msgctxt "admin users list item" +msgid "Account disabled" +msgstr "" + +#: templates/misago/admin/users/edit.html:67 +#: templates/misago/admin/users/list.html:70 +msgctxt "admin user disabled status" +msgid "Disabled" +msgstr "" + +#: templates/misago/admin/users/edit.html:92 +#, python-format +msgctxt "admin user stats" +msgid "%(posts)s post" +msgid_plural "%(posts)s posts" +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/admin/users/edit.html:99 +#, python-format +msgctxt "admin user stats" +msgid "%(threads)s thread" +msgid_plural "%(threads)s threads" +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/admin/users/edit.html:110 +#: templates/misago/admin/users/new.html:18 +msgctxt "admin user form" +msgid "Basic account settings" +msgstr "" + +#: templates/misago/admin/users/edit.html:129 +msgctxt "admin user form" +msgid "Administrator status" +msgstr "" + +#: templates/misago/admin/users/edit.html:136 +msgctxt "admin user form" +msgid "Only superusers can change other users administrator status." +msgstr "" + +#: templates/misago/admin/users/edit.html:180 +#: templates/misago/admin/users/new.html:37 +msgctxt "admin user form" +msgid "Sign-in credentials" +msgstr "" + +#: templates/misago/admin/users/edit.html:184 +msgctxt "admin user form" +msgid "" +"This user has not set account password and uses other service to " +"authenticate." +msgstr "" + +#: templates/misago/admin/users/edit.html:195 +msgctxt "admin user form" +msgid "Avatar" +msgstr "" + +#: templates/misago/admin/users/edit.html:205 +msgctxt "admin user form" +msgid "Signature" +msgstr "" + +#: templates/misago/admin/users/edit.html:228 +msgctxt "admin user form" +msgid "Forum options" +msgstr "" + +#: templates/misago/admin/users/edit.html:237 +msgctxt "admin user form" +msgid "Automatic subscription preferences (deprecated)" +msgstr "" + +#: templates/misago/admin/users/edit.html:246 +msgctxt "admin user form" +msgid "Notifications preferences" +msgstr "" + +#: templates/misago/admin/users/edit.html:259 +msgctxt "admin user form" +msgid "Account status" +msgstr "" + +#: templates/misago/admin/users/edit.html:263 +msgctxt "admin user form" +msgid "" +"This user is deleting their account. It has been deactivated for the " +"duration of the process." +msgstr "" + +#: templates/misago/admin/users/edit.html:264 +msgctxt "admin user form" +msgid "" +"No additional action is required. This account will be deleted automatically" +" when process is completed." +msgstr "" + +#: templates/misago/admin/users/edit.html:307 +msgctxt "admin user form" +msgid "Agreements" +msgstr "" + +#: templates/misago/admin/users/edit.html:312 +msgctxt "admin user agreements list" +msgid "Agreement" +msgstr "" + +#: templates/misago/admin/users/edit.html:313 +msgctxt "admin user agreements list" +msgid "Type" +msgstr "" + +#: templates/misago/admin/users/edit.html:314 +msgctxt "admin user agreements list" +msgid "Accepted on" +msgstr "" + +#: templates/misago/admin/users/edit.html:337 +msgctxt "admin user agreements list" +msgid "This user didn't accept any agreements." +msgstr "" + +#: templates/misago/admin/users/list.html:9 +msgctxt "admin users" +msgid "New user" +msgstr "" + +#: templates/misago/admin/users/list.html:17 +msgctxt "admin users list" +msgid "User" +msgstr "" + +#: templates/misago/admin/users/list.html:19 +msgctxt "admin users list" +msgid "Rank" +msgstr "" + +#: templates/misago/admin/users/list.html:20 +msgctxt "admin users list" +msgid "Registration" +msgstr "" + +#: templates/misago/admin/users/list.html:21 +msgctxt "admin users list" +msgid "Posts" +msgstr "" + +#: templates/misago/admin/users/list.html:94 +msgctxt "admin users" +msgid "Edit user" +msgstr "" + +#: templates/misago/admin/users/list.html:95 +msgctxt "admin users" +msgid "Edit" +msgstr "" + +#: templates/misago/admin/users/list.html:103 +msgctxt "admin users" +msgid "No users matching criteria exist." +msgstr "" + +#: templates/misago/admin/users/list.html:111 +msgctxt "admin users filter form" +msgid "You can include wildcard (\"*\") in username and email search:" +msgstr "" + +#: templates/misago/admin/users/list.html:114 +msgctxt "admin users filter form" +msgid "\"admin*\" will find both \"admin\" and \"administrator\"." +msgstr "" + +#: templates/misago/admin/users/list.html:117 +msgctxt "admin users filter form" +msgid "\"*chan\" will match both \"chan\" and \"marichan\"." +msgstr "" + +#: templates/misago/admin/users/list.html:120 +msgctxt "admin users filter form" +msgid "\"*son*\" will match \"son\", \"song\", \"firstson\" and \"firstsong\"." +msgstr "" + +#: templates/misago/admin/users/new.html:6 +#: templates/misago/admin/users/new.html:11 +msgctxt "admin user form" +msgid "New user" +msgstr "" + +#: templates/misago/admin/users/new.html:47 +msgctxt "admin user form" +msgid "Save user" +msgstr "" + +#: templates/misago/categories/base.html:7 +#: templates/misago/categories/base.html:29 +#: templates/misago/categories/base.html:38 +#: templates/misago/categories/header.html:35 +msgctxt "categories page" +msgid "Categories" +msgstr "" + +#: templates/misago/categories/base.html:18 +#, python-format +msgid "" +"There is %(categories)s main category currenty available on the " +"%(forum_name)s." +msgid_plural "" +"There are %(categories)s main categories currenty available on the " +"%(forum_name)s." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/categories/base.html:49 +#: templates/misago/categories/base.html:62 +#, python-format +msgctxt "categories page" +msgid "" +"There is %(categories)s main category currenty available on the " +"%(forum_name)s." +msgid_plural "" +"There are %(categories)s main categories currenty available on the " +"%(forum_name)s." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/categories/body.html:15 +msgctxt "categories page" +msgid "No categories exist or you don't have permission to see them." +msgstr "" + +#: templates/misago/categories/icon.html:4 +msgctxt "category status icon" +msgid "This category has no new posts. (closed)" +msgstr "" + +#: templates/misago/categories/icon.html:10 +msgctxt "category status icon" +msgid "This category has new posts. (closed)" +msgstr "" + +#: templates/misago/categories/icon.html:18 +msgctxt "category status icon" +msgid "This category has no new posts." +msgstr "" + +#: templates/misago/categories/icon.html:24 +msgctxt "category status icon" +msgid "This category has new posts." +msgstr "" + +#: templates/misago/categories/last_thread.html:54 +msgctxt "category last reply" +msgid "This category is empty. No threads were posted within it so far." +msgstr "" + +#: templates/misago/categories/last_thread.html:68 +msgctxt "category last reply" +msgid "This category is private. You can see only your own threads within it." +msgstr "" + +#: templates/misago/categories/last_thread.html:82 +msgctxt "category last reply" +msgid "This category is protected. You can't browse it's contents." +msgstr "" + +#: templates/misago/categories/stats.html:5 +#, python-format +msgctxt "category stats" +msgid "%(threads)s thread" +msgid_plural "%(threads)s threads" +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/categories/stats.html:12 +#, python-format +msgctxt "category stats" +msgid "%(posts)s post" +msgid_plural "%(posts)s posts" +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/emails/activation/by_admin.html:6 +#: templates/misago/emails/activation/by_admin.txt:6 +#, python-format +msgctxt "account activated email" +msgid "%(user)s, your account has been activated by forum administrator." +msgstr "" + +#: templates/misago/emails/activation/by_admin.html:12 +msgctxt "account activated email from admin sign in cta link" +msgid "this form" +msgstr "" + +#: templates/misago/emails/activation/by_admin.html:14 +#, python-format +msgctxt "account activated email from admin sign in cta" +msgid "You can now sign in to it using %(login_form)s." +msgstr "" + +#: templates/misago/emails/activation/by_admin.txt:10 +msgctxt "account activated email" +msgid "You can now sign in to it using the form below:" +msgstr "" + +#: templates/misago/emails/activation/by_user.html:6 +#: templates/misago/emails/activation/by_user.txt:6 +#, python-format +msgctxt "account activation email" +msgid "%(user)s, to activate your account click the below link:" +msgstr "" + +#: templates/misago/emails/activation/by_user.html:11 +msgctxt "account activation email cta link" +msgid "Activate my account!" +msgstr "" + +#: templates/misago/emails/base.txt:12 +#, python-format +msgctxt "email footer" +msgid "Sent from %(settings.forum_address)s" +msgstr "" + +#: templates/misago/emails/change_email.html:6 +#: templates/misago/emails/change_email.txt:6 +#, python-format +msgctxt "confirm email change email" +msgid "" +"%(user)s, you are receiving this message because you have changed your " +"e-mail address." +msgstr "" + +#: templates/misago/emails/change_email.html:11 +#: templates/misago/emails/change_email.txt:10 +msgctxt "confirm email change email" +msgid "To confirm this change, click the link below:" +msgstr "" + +#: templates/misago/emails/change_email.html:16 +msgctxt "confirm email change email cta" +msgid "Save changes" +msgstr "" + +#: templates/misago/emails/change_password.html:6 +#: templates/misago/emails/change_password.txt:6 +#, python-format +msgctxt "confirm password change email" +msgid "" +"%(user)s, you are receiving this message because you have changed your " +"password." +msgstr "" + +#: templates/misago/emails/change_password.html:11 +#: templates/misago/emails/change_password.txt:10 +msgctxt "confirm password change email" +msgid "To confirm this change, click the link below:" +msgstr "" + +#: templates/misago/emails/change_password.html:16 +msgctxt "confirm password change email cta" +msgid "Save changes" +msgstr "" + +#: templates/misago/emails/change_password_form_link.html:6 +#: templates/misago/emails/change_password_form_link.txt:6 +#, python-format +msgctxt "change forgotten password email" +msgid "" +"%(user)s, you are receiving this message because you want to change " +"forgotten password for your forum account." +msgstr "" + +#: templates/misago/emails/change_password_form_link.html:11 +#: templates/misago/emails/change_password_form_link.txt:10 +msgctxt "change forgotten password email" +msgid "To change your account password click the link below:" +msgstr "" + +#: templates/misago/emails/change_password_form_link.html:16 +msgctxt "change forgotten password email cta" +msgid "Set new password" +msgstr "" + +#: templates/misago/emails/data_download.html:6 +#: templates/misago/emails/data_download.txt:6 +#, python-format +msgctxt "data download ready email" +msgid "" +"%(user)s, you are receiving this message because your data is ready for " +"download." +msgstr "" + +#: templates/misago/emails/data_download.html:11 +msgctxt "data download ready email cta" +msgid "Download data" +msgstr "" + +#: templates/misago/emails/data_download.html:14 +#: templates/misago/emails/data_download.txt:15 +#, python-format +msgctxt "data download ready email" +msgid "" +"This link will remain active for %(expires_in)s hour from the time this " +"message has been sent." +msgid_plural "" +"This link will remain active for %(expires_in)s hours from the time this " +"message has been sent." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/emails/data_download.txt:10 +msgctxt "data download ready email" +msgid "To download your data, click the following link:" +msgstr "" + +#: templates/misago/emails/privatethread/added.html:9 +#, python-format +msgctxt "new private thread email" +msgid "" +"%(user)s, you are receiving this message because %(sender)s has invited you " +"to participate in private thread %(thread)s." +msgstr "" + +#: templates/misago/emails/privatethread/added.html:14 +#: templates/misago/emails/privatethread/added.txt:10 +msgctxt "new private thread email" +msgid "To read this thread click the link below:" +msgstr "" + +#: templates/misago/emails/privatethread/added.txt:6 +#, python-format +msgctxt "new private thread email" +msgid "" +"%(user)s, you are receiving this message because %(sender)s has invited you " +"to participate in private thread \"%(thread)s\"." +msgstr "" + +#: templates/misago/emails/register/complete.html:6 +#: templates/misago/emails/register/complete.txt:6 +#: templates/misago/emails/register/inactive.txt:6 +#, python-format +msgctxt "welcome email" +msgid "%(user)s, thank you for joining us!" +msgstr "" + +#: templates/misago/emails/register/complete.html:12 +#: templates/misago/emails/register/complete.txt:10 +msgctxt "welcome email" +msgid "" +"You may now join discussion on our forums. Why not spend a minute or two to " +"have a look around and share your opinions and knowledge with rest of " +"community?" +msgstr "" + +#: templates/misago/emails/register/complete.html:18 +msgctxt "welcome email complete sign in cta link" +msgid "this form" +msgstr "" + +#: templates/misago/emails/register/complete.html:20 +#, python-format +msgctxt "welcome email complete sign in cta" +msgid "You can always sign in to your account using %(login_form)s." +msgstr "" + +#: templates/misago/emails/register/complete.txt:14 +msgctxt "welcome email" +msgid "You can always sign in to your account using the form below:" +msgstr "" + +#: templates/misago/emails/register/inactive.html:7 +#: templates/misago/emails/register/inactive.txt:10 +msgctxt "welcome email" +msgid "" +"Before you will be able to join discussion on our forums, one of our " +"administrators will have to activate your account." +msgstr "" + +#: templates/misago/emails/register/inactive.html:12 +#: templates/misago/emails/register/inactive.txt:15 +msgctxt "welcome email" +msgid "" +"This may take a while, but you will receive e-mail with notification once it" +" happens." +msgstr "" + +#: templates/misago/emails/register/inactive.html:17 +#: templates/misago/emails/register/inactive.txt:20 +msgctxt "welcome email" +msgid "Thank you for your patience and see you soon!" +msgstr "" + +#: templates/misago/emails/register/inactive.html:22 +#: templates/misago/emails/register/inactive.txt:25 +msgctxt "welcome email" +msgid "" +"Before you will be able to join discussion on our forums, you have to " +"activate your account. To do so, simply click the link below:" +msgstr "" + +#: templates/misago/emails/register/inactive.html:27 +msgctxt "welcome email activate link" +msgid "Activate my account!" +msgstr "" + +#: templates/misago/emails/register/inactive.html:31 +msgctxt "welcome email inactive sign in cta link" +msgid "this form" +msgstr "" + +#: templates/misago/emails/register/inactive.html:33 +#, python-format +msgctxt "welcome email inactive sign in cta" +msgid "" +"Once your account is activated, you can always sign in to it using " +"%(login_form)s." +msgstr "" + +#: templates/misago/emails/register/inactive.txt:30 +msgctxt "welcome email" +msgid "" +"Once your account is activated, you can always sign in to it using the form " +"below:" +msgstr "" + +#: templates/misago/emails/thread/reply.html:9 +#, python-format +msgctxt "new thread reply email" +msgid "" +"%(sender)s has posted a new reply to the %(thread)s thread that you are " +"watching." +msgstr "" + +#: templates/misago/emails/thread/reply.html:14 +#: templates/misago/emails/thread/reply.txt:10 +msgctxt "new thread reply email" +msgid "You can read this reply by clicking on the following link:" +msgstr "" + +#: templates/misago/emails/thread/reply.html:18 +msgctxt "new thread reply email cta" +msgid "Go to reply" +msgstr "" + +#: templates/misago/emails/thread/reply.html:22 +#: templates/misago/emails/thread/reply.txt:13 +msgctxt "new thread reply email" +msgid "" +"To stop receiving e-mails with new reply notifications for this thread, " +"click here:" +msgstr "" + +#: templates/misago/emails/thread/reply.html:25 +msgctxt "new thread reply email" +msgid "Disable e-mail notifications for this thread" +msgstr "" + +#: templates/misago/emails/thread/reply.txt:6 +#, python-format +msgctxt "new thread reply email" +msgid "" +"%(sender)s has posted a new reply to the \"%(thread)s\" thread that you are " +"watching." +msgstr "" + +#: templates/misago/errorpages/403.html:5 +#: templates/misago/errorpages/403.html:17 +#: templates/misago/errorpages/403.html:18 +msgctxt "error 403 page" +msgid "Page not available" +msgstr "" + +#: templates/misago/errorpages/403.html:12 +#: templates/misago/errorpages/403.html:25 +#: templates/misago/errorpages/403.html:34 +#: templates/misago/errorpages/403.html:53 +msgctxt "error 403 page" +msgid "You don't have permission to access this page." +msgstr "" + +#: templates/misago/errorpages/403.html:49 +msgctxt "error 403 page" +msgid "This page is not available." +msgstr "" + +#: templates/misago/errorpages/404.html:5 +#: templates/misago/errorpages/404.html:13 +#: templates/misago/errorpages/404.html:14 +msgctxt "error 404 page" +msgid "Page not found" +msgstr "" + +#: templates/misago/errorpages/404.html:9 +#: templates/misago/errorpages/404.html:18 +#: templates/misago/errorpages/404.html:23 +#: templates/misago/errorpages/404.html:38 +msgctxt "error 404 page" +msgid "" +"The link you've followed was incorrect or the page has been moved or " +"deleted." +msgstr "" + +#: templates/misago/errorpages/404.html:37 +msgctxt "error 404 page" +msgid "Requested page could not be found." +msgstr "" + +#: templates/misago/errorpages/405.html:5 +#: templates/misago/errorpages/405.html:13 +#: templates/misago/errorpages/405.html:14 +msgctxt "error 405 page" +msgid "Wrong way" +msgstr "" + +#: templates/misago/errorpages/405.html:9 +#: templates/misago/errorpages/405.html:18 +#: templates/misago/errorpages/405.html:23 +#: templates/misago/errorpages/405.html:38 +msgctxt "error 405 page" +msgid "This page should be reached via form submission or pressing button." +msgstr "" + +#: templates/misago/errorpages/405.html:37 +msgctxt "error 405 page" +msgid "Page reached in wrong way." +msgstr "" + +#: templates/misago/errorpages/ban_message.html:15 +#, python-format +msgid "This ban expires on %(expires_on)s." +msgstr "" + +#: templates/misago/errorpages/ban_message.html:19 +msgctxt "error banned message" +msgid "This ban is permanent." +msgstr "" + +#: templates/misago/errorpages/banned.html:5 +msgctxt "error banned page" +msgid "You are banned" +msgstr "" + +#: templates/misago/errorpages/banned.html:9 +msgctxt "error banned page" +msgid "You are banned from accessing this page." +msgstr "" + +#: templates/misago/errorpages/csrf_failure.html:5 +msgctxt "error csrf page" +msgid "Request blocked" +msgstr "" + +#: templates/misago/errorpages/csrf_failure.html:9 +msgctxt "error csrf page" +msgid "" +"This is usually caused by your browser not accepting or using outdated " +"cookies. Check your browser configuration and try again." +msgstr "" + +#: templates/misago/errorpages/csrf_failure.html:23 +msgctxt "error csrf page" +msgid "Suspicious request blocked." +msgstr "" + +#: templates/misago/errorpages/csrf_failure.html:24 +msgctxt "error csrf page" +msgid "" +"This is usually caused by your browser not accepting or using outdated " +"cookies." +msgstr "" + +#: templates/misago/errorpages/csrf_failure.html:25 +msgctxt "error csrf page" +msgid "Check your browser configuration and try again." +msgstr "" + +#: templates/misago/errorpages/csrf_failure_authenticated.html:5 +msgctxt "error csrf authenticated page" +msgid "Request blocked" +msgstr "" + +#: templates/misago/errorpages/csrf_failure_authenticated.html:18 +msgctxt "error csrf authenticated page" +msgid "Suspicious request blocked." +msgstr "" + +#: templates/misago/errorpages/csrf_failure_authenticated.html:19 +msgctxt "error csrf authenticated page" +msgid "" +"This is usually caused by your browser not accepting or using outdated " +"cookies." +msgstr "" + +#: templates/misago/errorpages/csrf_failure_authenticated.html:20 +msgctxt "error csrf authenticated page" +msgid "Check your browser configuration and try again." +msgstr "" + +#: templates/misago/errorpages/oauth2.html:5 +#: templates/misago/errorpages/oauth2.html:13 +#: templates/misago/errorpages/oauth2.html:16 +#: templates/misago/errorpages/oauth2.html:36 +#, python-format +msgctxt "error oauth2 page" +msgid "Could not sign in with %(provider)s" +msgstr "" + +#: templates/misago/errorpages/oauth2.html:45 +msgctxt "error oauth2 page" +msgid "Please try again." +msgstr "" + +#: templates/misago/errorpages/oauth2.html:48 +msgctxt "error oauth2 page cta" +msgid "Sign in" +msgstr "" + +#: templates/misago/errorpages/oauth2_profile.html:16 +#, python-format +msgctxt "error oauth2 profile page" +msgid "Could not sign in with %(provider)s" +msgstr "" + +#: templates/misago/errorpages/oauth2_profile.html:23 +msgctxt "error oauth2 profile page" +msgid "Found problems:" +msgstr "" + +#: templates/misago/errorpages/social.html:5 +#: templates/misago/errorpages/social.html:11 +#: templates/misago/errorpages/social.html:12 +msgctxt "error social auth page" +msgid "Problem with sign in" +msgstr "" + +#: templates/misago/errorpages/social.html:37 +msgctxt "error social auth page" +msgid "" +"Please try again or use another method to sign in if the problem persists." +msgstr "" + +#: templates/misago/footer.html:9 +msgctxt "forum footer" +msgid "For complete experience please enable JavaScript." +msgstr "" + +#: templates/misago/footer.html:29 +msgctxt "forum footer" +msgid "Terms of service" +msgstr "" + +#: templates/misago/footer.html:34 +msgctxt "forum footer" +msgid "Privacy policy" +msgstr "" + +#: templates/misago/forgottenpassword/error.html:7 +msgctxt "set new password error page" +msgid "Set new password error" +msgstr "" + +#: templates/misago/forgottenpassword/error.html:9 +msgctxt "forgotten password error page" +msgid "Change forgotten password error" +msgstr "" + +#: templates/misago/forgottenpassword/error.html:25 +msgctxt "set new password error page" +msgid "Can't set new password." +msgstr "" + +#: templates/misago/forgottenpassword/error.html:27 +msgctxt "forgotten password error page" +msgid "Can't change forgotten password." +msgstr "" + +#: templates/misago/forgottenpassword/error.html:32 +msgctxt "forgotten password error page cta" +msgid "Request another password change link." +msgstr "" + +#: templates/misago/forgottenpassword/form.html:7 +#: templates/misago/forgottenpassword/form.html:25 +msgctxt "set new password form page" +msgid "Set new password" +msgstr "" + +#: templates/misago/forgottenpassword/form.html:9 +#: templates/misago/forgottenpassword/form.html:27 +msgctxt "forgotten password form page" +msgid "Change forgotten password" +msgstr "" + +#: templates/misago/forgottenpassword/form.html:50 +msgctxt "forgotten password form page" +msgid "To reset your password please enable JavaScript." +msgstr "" + +#: templates/misago/forgottenpassword/request.html:7 +#: templates/misago/forgottenpassword/request.html:25 +msgctxt "set new password page" +msgid "Set new password" +msgstr "" + +#: templates/misago/forgottenpassword/request.html:9 +#: templates/misago/forgottenpassword/request.html:27 +msgctxt "forgotten password page" +msgid "Change forgotten password" +msgstr "" + +#: templates/misago/forgottenpassword/request.html:43 +msgctxt "set new password page" +msgid "" +"Your user account has no password set for it because it was created with " +"other service." +msgstr "" + +#: templates/misago/forgottenpassword/request.html:44 +msgctxt "set new password page" +msgid "" +"To set password for your account, you can use special secure form that will " +"be available by special link valid only for your browser, for seven days or " +"until your password is set." +msgstr "" + +#: templates/misago/forgottenpassword/request.html:46 +msgctxt "forgotten password page" +msgid "" +"Because user passwords are processed in an irreversible way before being " +"saved to database, it is not possible for us to simply send you your " +"password." +msgstr "" + +#: templates/misago/forgottenpassword/request.html:47 +msgctxt "forgotten password page" +msgid "" +"Instead, you can change your password using special secure form that will be" +" available by special link valid only for your browser, for seven days or " +"until your password is changed." +msgstr "" + +#: templates/misago/forgottenpassword/request.html:50 +msgctxt "forgotten password page" +msgid "" +"To receive this link, enter your account's e-mail addres in form and press " +"the \"Send link\" button." +msgstr "" + +#: templates/misago/forgottenpassword/request.html:68 +msgctxt "forgotten password page" +msgid "To request new password reset link please enable JavaScript." +msgstr "" + +#: templates/misago/navbar.html:40 +msgctxt "navbar" +msgid "Open search" +msgstr "" + +#: templates/misago/navbar.html:51 +msgctxt "navbar" +msgid "Open private threads" +msgstr "" + +#: templates/misago/navbar.html:57 +msgctxt "navbar" +msgid "Open notifications" +msgstr "" + +#: templates/misago/navbar.html:62 +msgctxt "navbar" +msgid "Open your options" +msgstr "" + +#: templates/misago/navbar.html:68 templates/misago/navbar.html:72 +msgctxt "cta" +msgid "Sign in" +msgstr "" + +#: templates/misago/navbar.html:75 +msgctxt "cta" +msgid "Register" +msgstr "" + +#: templates/misago/notifications.html:5 +#: templates/misago/notifications.html:18 +msgctxt "notifications page" +msgid "Notifications" +msgstr "" + +#: templates/misago/notifications.html:36 +msgctxt "notifications page" +msgid "Enable JavaScript" +msgstr "" + +#: templates/misago/notifications.html:37 +msgctxt "notifications page" +msgid "" +"You need to enable JavaScript in your browser to see your notifications." +msgstr "" + +#: templates/misago/notifications.html:45 +msgctxt "notifications page" +msgid "Loading..." +msgstr "" + +#: templates/misago/notifications_disabled.html:5 +#: templates/misago/notifications_disabled.html:18 +msgctxt "notifications disabled page" +msgid "E-mail notifications disabled page" +msgstr "" + +#: templates/misago/notifications_disabled.html:19 +msgctxt "notifications disabled page" +msgid "" +"You will no longer receive e-mail notifications when someone replies to this" +" thread." +msgstr "" + +#: templates/misago/notifications_disabled.html:20 +msgctxt "notifications disabled page" +msgid "" +"If you change your mind and want to re-enable e-mail notifications, visit " +"the thread's page and adjust your notification settings." +msgstr "" + +#: templates/misago/notifications_disabled.html:23 +msgctxt "notifications disabled page" +msgid "Go to thread" +msgstr "" + +#: templates/misago/notifications_disabled.html:26 +msgctxt "notifications disabled page" +msgid "Go to forum home" +msgstr "" + +#: templates/misago/options/credentials_changed.html:5 +#: templates/misago/options/credentials_error.html:5 +msgctxt "credentials changed page" +msgid "Change sign-in credentials" +msgstr "" + +#: templates/misago/options/credentials_changed.html:19 +msgctxt "credentials changed page" +msgid "From now you will need to use new credentials when signing in." +msgstr "" + +#: templates/misago/options/credentials_error.html:18 +msgctxt "credentials changed error page" +msgid "Change confirmation link is invalid." +msgstr "" + +#: templates/misago/options/credentials_error.html:19 +msgctxt "credentials changed error page" +msgid "" +"The confirmation link belongs to other user, was already used, or has " +"expired." +msgstr "" + +#: templates/misago/options/credentials_error.html:22 +msgctxt "credentials changed page cta" +msgid "Request another activation link." +msgstr "" + +#: templates/misago/options/noscript.html:5 +#: templates/misago/options/noscript.html:21 +msgctxt "change options page" +msgid "Change your options" +msgstr "" + +#: templates/misago/options/noscript.html:49 +msgctxt "change options page" +msgid "Enable JavaScript" +msgstr "" + +#: templates/misago/options/noscript.html:50 +msgctxt "change options page" +msgid "You need to enable JavaScript in your browser to change your options." +msgstr "" + +#: templates/misago/options/noscript.html:58 +msgctxt "change options page" +msgid "Loading..." +msgstr "" + +#: templates/misago/participants.html:30 +msgctxt "private thread participants" +msgid "Add participant" +msgstr "" + +#: templates/misago/participants.html:36 +#, python-format +msgctxt "private thread participants" +msgid "This thread has %(users)s participant." +msgid_plural "This thread has %(users)s participants." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/poll/info.html:4 +#, python-format +msgctxt "thread poll" +msgid "%(votes)s vote." +msgid_plural "%(votes)s votes." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/poll/info.html:15 +#, python-format +msgctxt "thread poll" +msgid "Voting ends on %(ends_on)s." +msgstr "" + +#: templates/misago/poll/info.html:22 +msgctxt "thread poll" +msgid "Votes are public." +msgstr "" + +#: templates/misago/poll/info.html:36 +#, python-format +msgctxt "thread poll" +msgid "Started by %(poster)s on %(posted_on)s." +msgstr "" + +#: templates/misago/poll/results.html:21 templates/misago/poll/results.html:31 +#, python-format +msgctxt "thread poll" +msgid "%(votes)s vote, %(proc)s%% of total." +msgid_plural "%(votes)s votes, %(proc)s%% of total." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/poll/results.html:41 +msgctxt "thread poll" +msgid "You've voted on this choice." +msgstr "" + +#: templates/misago/poll/results.html:55 +msgctxt "thread poll" +msgid "Vote" +msgstr "" + +#: templates/misago/poll/results.html:62 +msgctxt "thread poll" +msgid "See votes" +msgstr "" + +#: templates/misago/poll/results.html:69 +msgctxt "thread poll" +msgid "Edit" +msgstr "" + +#: templates/misago/poll/results.html:76 +msgctxt "thread poll" +msgid "Delete" +msgstr "" + +#: templates/misago/poll/voting.html:24 +#, python-format +msgctxt "thread poll" +msgid "You can select %(choices)s choice." +msgid_plural "You can select %(choices)s choices." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/poll/voting.html:32 +msgctxt "thread poll" +msgid "You can change your vote later." +msgstr "" + +#: templates/misago/poll/voting.html:36 +msgctxt "thread poll" +msgid "Votes are final." +msgstr "" + +#: templates/misago/poll/voting.html:46 +msgctxt "thread poll" +msgid "Save your vote" +msgstr "" + +#: templates/misago/poll/voting.html:51 +msgctxt "thread poll" +msgid "See results" +msgstr "" + +#: templates/misago/profile/ban_details.html:5 +#: templates/misago/profile/ban_details.html:8 +#: templates/misago/profile/ban_details.html:9 +#: templates/misago/profile/ban_details.html:16 +msgctxt "user profile page ban details" +msgid "Ban details" +msgstr "" + +#: templates/misago/profile/ban_details.html:22 +msgctxt "user profile page ban details" +msgid "User-shown ban message" +msgstr "" + +#: templates/misago/profile/ban_details.html:31 +msgctxt "user profile page ban details" +msgid "Team-shown ban message" +msgstr "" + +#: templates/misago/profile/ban_details.html:39 +msgid "Ban expiration" +msgstr "" + +#: templates/misago/profile/ban_details.html:43 +#, python-format +msgctxt "user profile page ban details" +msgid "%(username)s's ban expires on %(expires_on)s." +msgstr "" + +#: templates/misago/profile/ban_details.html:47 +#, python-format +msgctxt "user profile page ban details" +msgid "%(username)s's ban is permanent." +msgstr "" + +#: templates/misago/profile/base.html:9 templates/misago/profile/base.html:20 +#: templates/misago/profile/base.html:35 +#, python-format +msgctxt "user profile page" +msgid "%(title)s, joined on %(joined_on)s." +msgstr "" + +#: templates/misago/profile/base.html:22 templates/misago/profile/base.html:37 +#, python-format +msgctxt "user profile page" +msgid "Wrote %(posts)s post." +msgid_plural "Wrote %(posts)s posts." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/profile/base.html:26 templates/misago/profile/base.html:41 +#, python-format +msgctxt "user profile page" +msgid "Started %(threads)s thread." +msgid_plural "Started %(threads)s threads." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/profile/details.html:5 +#: templates/misago/profile/details.html:8 +#: templates/misago/profile/details.html:9 +#: templates/misago/profile/details.html:19 +msgctxt "user profile page details" +msgid "Details" +msgstr "" + +#: templates/misago/profile/details.html:27 +msgctxt "user profile page details" +msgid "Edit" +msgstr "" + +#: templates/misago/profile/details.html:76 +msgctxt "user profile page details" +msgid "You are not sharing any details with others." +msgstr "" + +#: templates/misago/profile/details.html:78 +#, python-format +msgctxt "user profile page details" +msgid "%(username)s is not sharing any details with others." +msgstr "" + +#: templates/misago/profile/feed.html:11 +msgctxt "user profile page feed item" +msgid "See post" +msgstr "" + +#: templates/misago/profile/feed.html:62 +msgctxt "user profile page feed item" +msgid "This post's contents cannot be displayed." +msgstr "" + +#: templates/misago/profile/feed.html:63 +msgctxt "user profile page feed item" +msgid "This error is caused by invalid post content manipulation." +msgstr "" + +#: templates/misago/profile/followers.html:5 +#: templates/misago/profile/followers.html:8 +#: templates/misago/profile/followers.html:9 +msgctxt "user profile page followers" +msgid "Followers" +msgstr "" + +#: templates/misago/profile/followers.html:20 +#, python-format +msgctxt "user profile page followers" +msgid "You have %(users)s follower." +msgid_plural "You have %(users)s followers." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/profile/followers.html:26 +#, python-format +msgctxt "user profile page followers" +msgid "%(username)s has %(users)s follower." +msgid_plural "%(username)s has %(users)s followers." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/profile/followers.html:53 +msgctxt "user profile page followers" +msgid "You have no followers." +msgstr "" + +#: templates/misago/profile/followers.html:55 +#, python-format +msgctxt "user profile page followers" +msgid "%(username)s has no followers." +msgstr "" + +#: templates/misago/profile/follows.html:5 +#: templates/misago/profile/follows.html:8 +#: templates/misago/profile/follows.html:9 +msgctxt "user profile page follows" +msgid "Follows" +msgstr "" + +#: templates/misago/profile/follows.html:20 +#, python-format +msgctxt "user profile page follows" +msgid "You are following %(users)s user." +msgid_plural "You are following %(users)s users." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/profile/follows.html:26 +#, python-format +msgctxt "user profile page follows" +msgid "%(username)s is following %(users)s user." +msgid_plural "%(username)s is following %(users)s users." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/profile/follows.html:53 +msgctxt "user profile page follows" +msgid "You are not following any users." +msgstr "" + +#: templates/misago/profile/follows.html:55 +#, python-format +msgctxt "user profile page follows" +msgid "%(username)s is not following any users." +msgstr "" + +#: templates/misago/profile/header.html:29 +msgctxt "user profile page header" +msgid "This user's account has been disabled by administrator." +msgstr "" + +#: templates/misago/profile/header.html:30 +msgctxt "user profile page header" +msgid "Account disabled" +msgstr "" + +#: templates/misago/profile/header.html:56 +#, python-format +msgctxt "user profile page header" +msgid "Joined %(joined_on)s" +msgstr "" + +#: templates/misago/profile/header.html:77 +msgctxt "user profile page header" +msgid "Message" +msgstr "" + +#: templates/misago/profile/header.html:96 +msgctxt "user profile page header" +msgid "Follow" +msgstr "" + +#: templates/misago/profile/posts.html:5 templates/misago/profile/posts.html:8 +#: templates/misago/profile/posts.html:9 +msgctxt "user profile page posts" +msgid "Posts" +msgstr "" + +#: templates/misago/profile/posts.html:20 +#, python-format +msgctxt "user profile page posts" +msgid "You have posted %(posts)s message." +msgid_plural "You have posted %(posts)s messages." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/profile/posts.html:26 +#, python-format +msgctxt "user profile page posts" +msgid "%(username)s has posted %(posts)s message." +msgid_plural "%(username)s has posted %(posts)s messages." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/profile/posts.html:42 +msgctxt "user profile page posts" +msgid "You have posted no messages" +msgstr "" + +#: templates/misago/profile/posts.html:44 +#, python-format +msgctxt "user profile page posts" +msgid "%(username)s posted no messages." +msgstr "" + +#: templates/misago/profile/threads.html:5 +#: templates/misago/profile/threads.html:8 +#: templates/misago/profile/threads.html:9 +msgctxt "user profile page threads" +msgid "Threads" +msgstr "" + +#: templates/misago/profile/threads.html:20 +#, python-format +msgctxt "user profile page threads" +msgid "You have started %(threads)s thread." +msgid_plural "You have started %(threads)s threads." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/profile/threads.html:26 +#, python-format +msgctxt "user profile page threads" +msgid "%(username)s has started %(threads)s thread." +msgid_plural "%(username)s has started %(threads)s threads." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/profile/threads.html:42 +msgctxt "user profile page threads" +msgid "You have no started threads." +msgstr "" + +#: templates/misago/profile/threads.html:44 +#, python-format +msgctxt "user profile page threads" +msgid "%(username)s started no threads." +msgstr "" + +#: templates/misago/profile/username_history.html:5 +#: templates/misago/profile/username_history.html:8 +#: templates/misago/profile/username_history.html:9 +msgctxt "user profile page username history" +msgid "Username history" +msgstr "" + +#: templates/misago/profile/username_history.html:20 +#, python-format +msgctxt "user profile page username history" +msgid "Your username was changed %(changes)s time." +msgid_plural "Your username was changed %(changes)s times." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/profile/username_history.html:26 +#, python-format +msgctxt "user profile page username history" +msgid "%(username)s's username was changed %(changes)s time." +msgid_plural "%(username)s's username was changed %(changes)s times." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/profile/username_history.html:83 +msgctxt "user profile page username history" +msgid "Your username was never changed." +msgstr "" + +#: templates/misago/profile/username_history.html:85 +#, python-format +msgctxt "user profile page username history" +msgid "%(username)s's username was never changed." +msgstr "" + +#: templates/misago/required_agreement.html:9 +#, python-format +msgctxt "agreement overlay" +msgid "Please review the updated %(agreement)s:" +msgstr "" + +#: templates/misago/required_agreement.html:19 +msgctxt "agreement overlay" +msgid "here" +msgstr "" + +#: templates/misago/required_agreement.html:21 +#, python-format +msgctxt "agreement overlay" +msgid "Please review the updated %(agreement)s available %(link)s." +msgstr "" + +#: templates/misago/search.html:5 templates/misago/search.html:8 +#: templates/misago/search.html:9 +msgctxt "search page" +msgid "Search site" +msgstr "" + +#: templates/misago/search.html:26 +msgctxt "search page header" +msgid "Search" +msgstr "" + +#: templates/misago/search.html:38 +msgctxt "search input placeholder" +msgid "Search" +msgstr "" + +#: templates/misago/search.html:57 +msgctxt "search page" +msgid "Loading search..." +msgstr "" + +#: templates/misago/socialauth.html:5 +#, python-format +msgctxt "social auth page" +msgid "Sign in with %(backend)s" +msgstr "" + +#: templates/misago/socialauth.html:21 +msgctxt "social auth page" +msgid "Enable JavaScript" +msgstr "" + +#: templates/misago/socialauth.html:23 +#, python-format +msgctxt "social auth page" +msgid "" +"You need to enable JavaScript in your browser to complete the sign in with " +"%(backend)s." +msgstr "" + +#: templates/misago/thread/header.html:38 +#, python-format +msgctxt "thread page header" +msgid "Started on %(date)s" +msgstr "" + +#: templates/misago/thread/notifications.html:4 +#: templates/misago/thread/notifications.html:7 +msgctxt "watch thread" +msgid "Watching" +msgstr "" + +#: templates/misago/thread/notifications.html:10 +msgctxt "watch thread" +msgid "Watch" +msgstr "" + +#: templates/misago/thread/paginator.html:4 +#: templates/misago/thread/paginator.html:18 +msgctxt "thread paginator" +msgid "Go to first page" +msgstr "" + +#: templates/misago/thread/paginator.html:14 +#: templates/misago/thread/paginator.html:21 +msgctxt "thread paginator" +msgid "Go to previous page" +msgstr "" + +#: templates/misago/thread/paginator.html:27 +#, python-format +msgctxt "thread paginator" +msgid "Page %(page)s of %(pages)s" +msgstr "" + +#: templates/misago/thread/paginator.html:33 +#: templates/misago/thread/paginator.html:40 +msgctxt "thread paginator" +msgid "Go to next page" +msgstr "" + +#: templates/misago/thread/paginator.html:36 +#: templates/misago/thread/paginator.html:43 +msgctxt "thread paginator" +msgid "Go to last page" +msgstr "" + +#: templates/misago/thread/posts/event/index.html:5 +msgctxt "thread event" +msgid "New event" +msgstr "" + +#: templates/misago/thread/posts/event/index.html:52 +#, python-format +msgctxt "thread event" +msgid "Thread title has been changed from %(old_title)s." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:56 +msgctxt "thread event" +msgid "Thread has been pinned globally." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:58 +msgctxt "thread event" +msgid "Thread has been pinned locally." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:60 +msgctxt "thread event" +msgid "Thread has been unpinned." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:65 +#, python-format +msgctxt "thread event" +msgid "Thread has been moved from %(from_category)s." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:72 +#, python-format +msgctxt "thread event" +msgid "The %(merged_thread)s thread has been merged into this thread." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:76 +msgctxt "thread event" +msgid "Thread has been approved." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:78 +msgctxt "thread event" +msgid "Thread has been opened." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:80 +msgctxt "thread event" +msgid "Thread has been closed." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:82 +msgctxt "thread event" +msgid "Thread has been revealed." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:84 +msgctxt "thread event" +msgid "Thread has been made hidden." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:86 +msgctxt "thread event" +msgid "Took thread over." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:88 +msgctxt "thread event" +msgid "Owner has left thread. This thread is now closed." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:90 +msgctxt "thread event" +msgid "Participant has left thread." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:95 +#, python-format +msgctxt "thread event" +msgid "Changed thread owner to %(user)s." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:102 +#, python-format +msgctxt "thread event" +msgid "Added %(user)s to thread." +msgstr "" + +#: templates/misago/thread/posts/event/index.html:109 +#, python-format +msgctxt "thread event" +msgid "Removed %(user)s from thread." +msgstr "" + +#: templates/misago/thread/posts/event/info.html:12 +#, python-format +msgctxt "thread event" +msgid "Hidden by %(hidden_by)s on %(hidden_on)s." +msgstr "" + +#: templates/misago/thread/posts/event/info.html:28 +#, python-format +msgctxt "thread event" +msgid "By %(event_by)s on %(event_on)s." +msgstr "" + +#: templates/misago/thread/posts/post/attachments.html:33 +#, python-format +msgctxt "post attachment" +msgid "%(filetype)s, %(size)s, uploaded by %(uploader)s on %(uploaded_on)s." +msgstr "" + +#: templates/misago/thread/posts/post/body-hidden.html:4 +msgctxt "post body hidden" +msgid "This post is hidden. You cannot not see its contents." +msgstr "" + +#: templates/misago/thread/posts/post/body-hidden.html:14 +#, python-format +msgctxt "post body hidden" +msgid "Hidden by %(hidden_by)s on %(hidden_on)s." +msgstr "" + +#: templates/misago/thread/posts/post/body.html:10 +msgctxt "post body invalid" +msgid "This post's contents cannot be displayed." +msgstr "" + +#: templates/misago/thread/posts/post/body.html:11 +msgctxt "post body invalid" +msgid "This error is caused by invalid post content manipulation." +msgstr "" + +#: templates/misago/thread/posts/post/flags.html:7 +#, python-format +msgctxt "post best answer flag" +msgid "Marked as best answer by you %(marked_on)s." +msgstr "" + +#: templates/misago/thread/posts/post/flags.html:13 +#, python-format +msgctxt "post best answer flag" +msgid "Marked as best answer by %(marked_by)s %(marked_on)s." +msgstr "" + +#: templates/misago/thread/posts/post/flags.html:23 +msgctxt "post hidden flag" +msgid "This post is hidden. Only users with permission may see its contents." +msgstr "" + +#: templates/misago/thread/posts/post/flags.html:29 +msgctxt "post unapproved flag" +msgid "" +"This post is unapproved. Only users with permission to approve posts and its" +" author may see its contents." +msgstr "" + +#: templates/misago/thread/posts/post/flags.html:35 +msgctxt "post protected flag" +msgid "This post is protected. Only moderators may change it." +msgstr "" + +#: templates/misago/thread/posts/post/footer.html:7 +msgctxt "post control" +msgid "Liked" +msgstr "" + +#: templates/misago/thread/posts/post/footer.html:9 +msgctxt "post control" +msgid "Like" +msgstr "" + +#: templates/misago/thread/posts/post/footer.html:26 +msgctxt "post control" +msgid "Reply" +msgstr "" + +#: templates/misago/thread/posts/post/footer.html:29 +msgctxt "post control" +msgid "Quote" +msgstr "" + +#: templates/misago/thread/posts/post/footer.html:34 +msgctxt "post control" +msgid "Edit" +msgstr "" + +#: templates/misago/thread/posts/post/header.html:5 +msgctxt "post unread label" +msgid "New post" +msgstr "" + +#: templates/misago/thread/posts/post/header.html:8 +msgctxt "post unread label" +msgid "New" +msgstr "" + +#: templates/misago/thread/posts/post/header.html:22 +#: templates/misago/thread/posts/post/side.html:4 +msgctxt "post permalink" +msgid "Post link" +msgstr "" + +#: templates/misago/thread/posts/post/side.html:41 +#: templates/misago/thread/posts/post/side.html:49 +#, python-format +msgctxt "post poster stats" +msgid "%(posts)s post" +msgid_plural "%(posts)s posts" +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/thread/posts/post/side.html:73 +msgctxt "post removed poster username" +msgid "Removed user" +msgstr "" + +#: templates/misago/thread/private_thread.html:7 +#, python-format +msgctxt "thread page title" +msgid "page: %(page)s" +msgstr "" + +#: templates/misago/thread/thread.html:7 +#, python-format +msgctxt "private thread page title" +msgid "page: %(page)s" +msgstr "" + +#: templates/misago/thread/thread.html:19 +#: templates/misago/thread/thread.html:30 +#, python-format +msgid "Started by %(starter)s on %(started_on)s in the %(category)s category." +msgstr "" +"Indította %(starter)s %(started_on)s dátumon a %(category)s kategóriában." + +#: templates/misago/thread/thread.html:21 +#: templates/misago/thread/thread.html:32 +#, python-format +msgid "%(replies)s reply, last one from %(last_post_on)s." +msgid_plural "%(replies)s replies, last one from %(last_post_on)s." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/thread/thread.html:25 +#: templates/misago/thread/thread.html:36 +msgid "Answered." +msgstr "" + +#: templates/misago/thread/thread.html:25 +#: templates/misago/thread/thread.html:36 +msgid "Closed." +msgstr "Zárva." + +#: templates/misago/thread/toolbar_bottom.html:24 +#: templates/misago/thread/toolbar_top.html:41 +msgctxt "thread page options" +msgid "Reply" +msgstr "" + +#: templates/misago/thread/toolbar_third.html:8 +msgctxt "go up" +msgid "Go to top" +msgstr "" + +#: templates/misago/thread/toolbar_top.html:6 +msgid "Shortcuts" +msgstr "" + +#: templates/misago/thread/toolbar_top.html:24 +#: templates/misago/thread/toolbar_top.html:47 +msgctxt "thread page options" +msgid "Add poll" +msgstr "" + +#: templates/misago/thread/toolbar_top.html:32 +msgctxt "thread page options" +msgid "Shortcuts" +msgstr "" + +#: templates/misago/thread_flags.html:7 +msgctxt "thread flag" +msgid "Pinned globally" +msgstr "" + +#: templates/misago/thread_flags.html:15 +msgctxt "thread flag" +msgid "Pinned in category" +msgstr "" + +#: templates/misago/thread_flags.html:23 +msgctxt "thread flag" +msgid "Answered" +msgstr "" + +#: templates/misago/thread_flags.html:31 +msgctxt "thread flag" +msgid "Poll" +msgstr "" + +#: templates/misago/thread_flags.html:39 +msgctxt "thread flag" +msgid "Closed" +msgstr "" + +#: templates/misago/thread_flags.html:47 +msgctxt "thread flag" +msgid "Hidden" +msgstr "" + +#: templates/misago/thread_replies.html:3 +#, python-format +msgctxt "thread replies stat" +msgid "%(replies)s reply" +msgid_plural "%(replies)s replies" +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/threadslist/base.html:53 +msgctxt "threads list" +msgid "There are no threads in this category." +msgstr "" + +#: templates/misago/threadslist/base.html:55 +msgctxt "threads list" +msgid "There are no threads on this forum... yet!" +msgstr "" + +#: templates/misago/threadslist/base.html:59 +msgctxt "threads list" +msgid "Why not start one yourself?" +msgstr "" + +#: templates/misago/threadslist/base.html:63 +msgctxt "threads list" +msgid "No threads matching specified criteria were found." +msgstr "" + +#: templates/misago/threadslist/base.html:78 +msgctxt "threads list paginator" +msgid "Next page" +msgstr "" + +#: templates/misago/threadslist/private_threads.html:34 +msgctxt "private threads page" +msgid "" +"Private threads are threads which only those that started them and those " +"they have invited may see and participate in." +msgstr "" + +#: templates/misago/threadslist/private_threads.html:59 +msgctxt "private threads page" +msgid "You aren't participating in any private threads." +msgstr "" + +#: templates/misago/threadslist/private_threads.html:62 +msgctxt "private threads page" +msgid "Why not start one yourself?" +msgstr "" + +#: templates/misago/threadslist/private_threads.html:65 +msgctxt "private threads page" +msgid "No threads matching specified criteria were found." +msgstr "" + +#: templates/misago/threadslist/thread.html:8 +#: templates/misago/threadslist/thread.html:14 +#: templates/misago/threadslist/thread.html:52 +#: templates/misago/threadslist/thread.html:58 +#, python-format +msgctxt "threads list" +msgid "%(starter)s - original poster" +msgstr "" + +#: templates/misago/threadslist/thread.html:24 +msgctxt "threads list" +msgid "No unread posts" +msgstr "" + +#: templates/misago/threadslist/thread.html:28 +msgctxt "threads list" +msgid "Contains unread posts" +msgstr "" + +#: templates/misago/threadslist/thread.html:104 +#: templates/misago/threadslist/thread.html:110 +#: templates/misago/threadslist/thread.html:129 +#: templates/misago/threadslist/thread.html:135 +#, python-format +msgctxt "threads list" +msgid "%(last_poster)s - latest poster" +msgstr "" + +#: templates/misago/threadslist/thread.html:118 +#, python-format +msgctxt "threads list" +msgid "%(last_activity)s - latest activity" +msgstr "" + +#: templates/misago/threadslist/threads.html:14 +#: templates/misago/threadslist/threads.html:16 +#: templates/misago/threadslist/threads.html:33 +#: templates/misago/threadslist/threads.html:42 +#: templates/misago/threadslist/threads.html:90 +msgctxt "threads page" +msgid "Threads" +msgstr "" + +#: templates/misago/threadslist/toolbar.html:9 +msgctxt "threads page nav" +msgid "All categories" +msgstr "" + +#: templates/misago/threadslist/toolbar.html:29 +msgctxt "threads page nav" +msgid "All subcategories" +msgstr "" + +#: templates/misago/threadslist/toolbar.html:55 +msgctxt "threads list" +msgid "All threads" +msgstr "" + +#: templates/misago/threadslist/toolbar.html:57 +msgctxt "threads list" +msgid "My threads" +msgstr "" + +#: templates/misago/threadslist/toolbar.html:59 +#: threads/viewmodels/threads.py:24 +msgctxt "threads list" +msgid "New threads" +msgstr "" + +#: templates/misago/threadslist/toolbar.html:61 +#: threads/viewmodels/threads.py:25 +msgctxt "threads list" +msgid "Unread threads" +msgstr "" + +#: templates/misago/threadslist/toolbar.html:63 +msgctxt "threads list" +msgid "Subscribed threads" +msgstr "" + +#: templates/misago/threadslist/toolbar.html:65 +msgctxt "threads list" +msgid "Unapproved threads" +msgstr "" + +#: templates/misago/threadslist/toolbar.html:77 +msgctxt "threads page nav" +msgid "Start thread" +msgstr "" + +#: templates/misago/userslists/active_posters.html:5 +msgctxt "active posters page" +msgid "Top posters" +msgstr "" + +#: templates/misago/userslists/active_posters.html:10 +#, python-format +msgctxt "active posters page meta" +msgid "%(posters)s most active poster from last %(days)s days." +msgid_plural "%(posters)s most active posters from last %(days)s days." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/userslists/active_posters.html:16 +#: templates/misago/userslists/active_posters.html:35 +#: templates/misago/userslists/active_posters.html:50 +#, python-format +msgctxt "active posters page meta" +msgid "No users have posted any new messages during last %(days)s days." +msgstr "" + +#: templates/misago/userslists/active_posters.html:23 +#: templates/misago/userslists/active_posters.html:24 +msgctxt "active posters page meta" +msgid "Top posters" +msgstr "" + +#: templates/misago/userslists/active_posters.html:29 +#: templates/misago/userslists/active_posters.html:44 +#, python-format +msgctxt "active posters page meta" +msgid "%(posters)s top poster from last %(days)s days." +msgid_plural "%(posters)s top posters from last %(days)s days." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/userslists/active_posters.html:69 +#, python-format +msgctxt "active posters page" +msgid "%(posters)s top poster from last %(days)s days." +msgid_plural "%(posters)s top posters from last %(days)s days." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/userslists/active_posters.html:83 +msgctxt "active posters list item" +msgid "Avatar" +msgstr "" + +#: templates/misago/userslists/active_posters.html:112 +#: templates/misago/userslists/active_posters.html:123 +msgctxt "active posters list item" +msgid "Rank" +msgstr "" + +#: templates/misago/userslists/active_posters.html:116 +#: templates/misago/userslists/active_posters.html:128 +msgctxt "active posters list item" +msgid "Ranked posts" +msgstr "" + +#: templates/misago/userslists/active_posters.html:133 +msgctxt "active posters list item" +msgid "Total posts" +msgstr "" + +#: templates/misago/userslists/active_posters.html:145 +#, python-format +msgctxt "active posters page" +msgid "No users have posted any new messages during last %(days)s days." +msgstr "" + +#: templates/misago/userslists/base.html:5 +#: templates/misago/userslists/base.html:18 +msgctxt "users page" +msgid "Users" +msgstr "" + +#: templates/misago/userslists/rank.html:9 +#: templates/misago/userslists/rank.html:41 +#: templates/misago/userslists/rank.html:52 +#, python-format +msgctxt "rank users page meta" +msgid "%(users)s user have this rank." +msgid_plural "%(users)s users have this rank." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/userslists/rank.html:102 +#, python-format +msgctxt "rank users page" +msgid "There is %(more)s more members with this role." +msgid_plural "There are %(more)s more members with this role." +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/userslists/rank.html:108 +msgctxt "rank users page" +msgid "There are no more members with this role." +msgstr "" + +#: templates/misago/userslists/rank.html:117 +msgctxt "rank users page" +msgid "There are no users with this rank at the moment." +msgstr "" + +#: templates/misago/userslists/rank_paginator.html:4 +#: templates/misago/userslists/rank_paginator.html:18 +msgctxt "rank users paginator" +msgid "Go to first page" +msgstr "" + +#: templates/misago/userslists/rank_paginator.html:14 +#: templates/misago/userslists/rank_paginator.html:21 +msgctxt "rank users paginator" +msgid "Go to previous page" +msgstr "" + +#: templates/misago/userslists/rank_paginator.html:26 +#: templates/misago/userslists/rank_paginator.html:33 +msgctxt "rank users paginator" +msgid "Go to next page" +msgstr "" + +#: templates/misago/userslists/rank_paginator.html:29 +#: templates/misago/userslists/rank_paginator.html:36 +msgctxt "rank users paginator" +msgid "Go to last page" +msgstr "" + +#: templates/misago/userslists/usercard.html:42 +#: templates/misago/userslists/usercard.html:45 +#, python-format +msgctxt "users list item" +msgid "Joined on %(joined_on)s" +msgstr "" + +#: templates/misago/userslists/usercard.html:52 +#, python-format +msgctxt "users list item" +msgid "%(posts)s post" +msgid_plural "%(posts)s posts" +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/userslists/usercard.html:59 +#, python-format +msgctxt "users list item" +msgid "%(threads)s thread" +msgid_plural "%(threads)s threads" +msgstr[0] "" +msgstr[1] "" + +#: templates/misago/userslists/usercard.html:66 +#, python-format +msgctxt "users list item" +msgid "%(followers)s follower" +msgid_plural "%(followers)s followers" +msgstr[0] "" +msgstr[1] "" + +#: themes/admin/__init__.py:94 +msgctxt "admin node" +msgid "Themes" +msgstr "" + +#: themes/admin/forms.py:21 +msgctxt "admin theme parent empty label" +msgid "No parent" +msgstr "" + +#: themes/admin/forms.py:28 themes/admin/forms.py:61 +msgctxt "admin theme form" +msgid "Name" +msgstr "" + +#: themes/admin/forms.py:30 themes/admin/forms.py:70 +msgctxt "admin theme form" +msgid "Parent" +msgstr "" + +#: themes/admin/forms.py:33 +msgctxt "admin theme form" +msgid "Version" +msgstr "" + +#: themes/admin/forms.py:36 +msgctxt "admin theme form" +msgid "Author(s)" +msgstr "" + +#: themes/admin/forms.py:38 +msgctxt "admin theme form" +msgid "Url" +msgstr "" + +#: themes/admin/forms.py:64 +msgctxt "admin theme form" +msgid "Leave this field empty to use theme name from imported file." +msgstr "" + +#: themes/admin/forms.py:73 +msgctxt "admin theme form" +msgid "Theme file" +msgstr "" + +#: themes/admin/forms.py:74 +msgctxt "admin theme form" +msgid "Theme file should be a ZIP file." +msgstr "" + +#: themes/admin/forms.py:80 +msgctxt "admin theme form" +msgid "Uploaded file is not a valid ZIP file." +msgstr "" + +#: themes/admin/forms.py:128 +msgctxt "admin theme assets form" +msgid "No files have been uploaded." +msgstr "" + +#: themes/admin/forms.py:158 +#, python-format +msgctxt "admin theme assets form" +msgid "File \"%(file)s\" content type \"%(content_type)s\" is not allowed." +msgstr "" + +#: themes/admin/forms.py:171 +#, python-format +msgctxt "admin theme assets form" +msgid "File \"%(file)s\" extension is invalid." +msgstr "" + +#: themes/admin/forms.py:197 +msgctxt "admin theme css form" +msgid "Name" +msgstr "" + +#: themes/admin/forms.py:200 +msgctxt "admin theme css form" +msgid "" +"Should be a correct filename and include the .css extension. It will be " +"lowercased." +msgstr "" + +#: themes/admin/forms.py:219 +msgctxt "admin theme css form" +msgid "You need to enter CSS for this file." +msgstr "" + +#: themes/admin/forms.py:247 +msgctxt "admin theme css link form" +msgid "Link name" +msgstr "" + +#: themes/admin/forms.py:250 +msgctxt "admin theme css link form" +msgid "Can be descriptive (e.g. \"roboto from fonts.google.com\")." +msgstr "" + +#: themes/admin/forms.py:254 +msgctxt "admin theme css link form" +msgid "Remote CSS URL" +msgstr "" + +#: themes/admin/importer.py:22 +msgctxt "admin theme import" +msgid "" +"\"manifest.json\" contained by ZIP file is not a valid theme manifest file." +msgstr "" + +#: themes/admin/importer.py:63 +msgctxt "admin theme import" +msgid "Uploaded ZIP file could not be extracted." +msgstr "" + +#: themes/admin/importer.py:71 +msgctxt "admin theme import" +msgid "Uploaded ZIP file is empty." +msgstr "" + +#: themes/admin/importer.py:77 +msgctxt "admin theme import" +msgid "Uploaded ZIP file should contain single directory." +msgstr "" + +#: themes/admin/importer.py:83 +msgctxt "admin theme import" +msgid "Uploaded ZIP file didn't contain a directory." +msgstr "" + +#: themes/admin/importer.py:101 +msgctxt "admin theme import" +msgid "Uploaded ZIP file didn't contain a \"manifest.json\"." +msgstr "" + +#: themes/admin/importer.py:108 +msgctxt "admin theme import" +msgid "\"manifest.json\" contained by ZIP file is not a valid JSON file." +msgstr "" + +#: themes/admin/validators.py:13 +msgctxt "admin css name validator" +msgid "Name is missing an .css extension." +msgstr "" + +#: themes/admin/validators.py:18 +msgctxt "admin css name validator" +msgid "Name can't start with period (\".\")." +msgstr "" + +#: themes/admin/validators.py:25 +msgctxt "admin css name validator" +msgid "" +"Name can contain only latin alphabet characters, digits, dots, underscores " +"and dashes." +msgstr "" + +#: themes/admin/validators.py:33 +msgctxt "admin css name validator" +msgid "Name has to contain at least one latin alphabet character or digit." +msgstr "" + +#: themes/admin/validators.py:46 +msgctxt "admin css name unique validator" +msgid "This name is already in use by other asset." +msgstr "" + +#: themes/admin/views.py:28 +msgctxt "admin themes" +msgid "Requested theme does not exist." +msgstr "" + +#: themes/admin/views.py:37 +#, python-format +msgctxt "admin themes" +msgid "New theme \"%(name)s\" has been saved." +msgstr "" + +#: themes/admin/views.py:53 +#, python-format +msgctxt "admin themes" +msgid "Theme \"%(name)s\" has been updated." +msgstr "" + +#: themes/admin/views.py:57 +msgctxt "admin themes" +msgid "Default theme can't be edited." +msgstr "" + +#: themes/admin/views.py:66 +#, python-format +msgctxt "admin themes" +msgid "Theme \"%(name)s\" has been deleted." +msgstr "" + +#: themes/admin/views.py:70 +msgctxt "admin themes" +msgid "Default theme can't be deleted." +msgstr "" + +#: themes/admin/views.py:72 +msgctxt "admin themes" +msgid "Active theme can't be deleted." +msgstr "" + +#: themes/admin/views.py:76 +#, python-format +msgctxt "admin themes" +msgid "" +"Theme \"%(name)s\" can't be deleted because one of its child themes is set " +"as an active theme." +msgstr "" + +#: themes/admin/views.py:93 +#, python-format +msgctxt "admin themes" +msgid "Active theme has been changed to \"%(name)s\"." +msgstr "" + +#: themes/admin/views.py:107 +msgctxt "admin themes" +msgid "Default theme can't be exported." +msgstr "" + +#: themes/admin/views.py:127 +#, python-format +msgctxt "admin themes" +msgid "Theme \"%(name)s\" has been imported." +msgstr "" + +#: themes/admin/views.py:134 +msgctxt "admin themes" +msgid "Default theme assets can't be edited." +msgstr "" + +#: themes/admin/views.py:162 +msgctxt "admin themes" +msgid "Some css files could not have been added to the theme." +msgstr "" + +#: themes/admin/views.py:187 +msgctxt "admin themes" +msgid "New CSS files have been added to the theme." +msgstr "" + +#: themes/admin/views.py:194 +msgctxt "admin themes" +msgid "New media files have been added to the theme." +msgstr "" + +#: themes/admin/views.py:227 +msgctxt "admin themes" +msgid "Selected CSS files have been deleted." +msgstr "" + +#: themes/admin/views.py:237 +msgctxt "admin themes" +msgid "Selected media have been deleted." +msgstr "" + +#: themes/admin/views.py:258 +msgctxt "admin themes" +msgid "Requested CSS could not be found in the theme." +msgstr "" + +#: themes/admin/views.py:286 +#, python-format +msgctxt "admin themes" +msgid "\"%s\" was moved up." +msgstr "" + +#: themes/admin/views.py:297 +#, python-format +msgctxt "admin themes" +msgid "\"%s\" was moved down." +msgstr "" + +#: themes/admin/views.py:340 +#, python-format +msgctxt "admin themes" +msgid "New CSS \"%(name)s\" has been saved." +msgstr "" + +#: themes/admin/views.py:357 +#, python-format +msgctxt "admin themes" +msgid "CSS \"%(name)s\" has been updated." +msgstr "" + +#: themes/admin/views.py:381 +#, python-format +msgctxt "admin themes" +msgid "No changes have been made to \"%(css)s\"." +msgstr "" + +#: themes/admin/views.py:388 +#, python-format +msgctxt "admin themes" +msgid "New CSS link \"%(name)s\" has been saved." +msgstr "" + +#: themes/admin/views.py:413 +#, python-format +msgctxt "admin themes" +msgid "CSS link \"%(name)s\" has been updated." +msgstr "" + +#: themes/models.py:40 +msgctxt "default theme name" +msgid "Default Misago Theme" +msgstr "" + +#: threads/admin/__init__.py:36 +msgctxt "admin node" +msgid "Attachments" +msgstr "" + +#: threads/admin/__init__.py:43 +msgctxt "admin node" +msgid "Attachment types" +msgstr "" + +#: threads/admin/__init__.py:45 +msgctxt "admin node" +msgid "Specify what files may be uploaded as part of user posts." +msgstr "" + +#: threads/admin/forms.py:8 +msgctxt "admin attachments type filter choice" +msgid "All types" +msgstr "" + +#: threads/admin/forms.py:15 +msgctxt "admin attachments filter form" +msgid "Uploader name contains" +msgstr "" + +#: threads/admin/forms.py:19 +msgctxt "admin attachments filter form" +msgid "Filename contains" +msgstr "" + +#: threads/admin/forms.py:23 +msgctxt "admin attachments filter form" +msgid "File type" +msgstr "" + +#: threads/admin/forms.py:30 +msgctxt "admin attachments filter form" +msgid "State" +msgstr "" + +#: threads/admin/forms.py:37 +msgctxt "admin attachments orphan filter choice" +msgid "All" +msgstr "" + +#: threads/admin/forms.py:44 +msgctxt "admin attachments orphan filter choice" +msgid "Only orphaned" +msgstr "" + +#: threads/admin/forms.py:51 +msgctxt "admin attachments orphan filter choice" +msgid "Not orphaned" +msgstr "" + +#: threads/admin/forms.py:78 +msgctxt "admin attachment type form" +msgid "Type name" +msgstr "" + +#: threads/admin/forms.py:80 +msgctxt "admin attachment type form" +msgid "File extensions" +msgstr "" + +#: threads/admin/forms.py:82 +msgctxt "admin attachment type form" +msgid "Mimetypes" +msgstr "" + +#: threads/admin/forms.py:84 +msgctxt "admin attachment type form" +msgid "Maximum allowed uploaded file size" +msgstr "" + +#: threads/admin/forms.py:86 +msgctxt "admin attachment type form" +msgid "Status" +msgstr "" + +#: threads/admin/forms.py:88 +msgctxt "admin attachment type form" +msgid "Limit uploads to" +msgstr "" + +#: threads/admin/forms.py:91 +msgctxt "admin attachment type form" +msgid "Limit downloads to" +msgstr "" + +#: threads/admin/forms.py:97 +msgctxt "admin attachment type form" +msgid "" +"List of comma separated file extensions associated with this attachment " +"type." +msgstr "" + +#: threads/admin/forms.py:101 +msgctxt "admin attachment type form" +msgid "" +"Optional list of comma separated mime types associated with this attachment " +"type." +msgstr "" + +#: threads/admin/forms.py:105 +msgctxt "admin attachment type form" +msgid "" +"Maximum allowed uploaded file size for this type, in kb. This setting is " +"deprecated and has no effect. It will be deleted in Misago 1.0." +msgstr "" + +#: threads/admin/forms.py:109 +msgctxt "admin attachment type form" +msgid "Controls this attachment type availability on your site." +msgstr "" + +#: threads/admin/forms.py:113 +msgctxt "admin attachment type form" +msgid "" +"If you wish to limit option to upload files of this type to users with " +"specific roles, select them on this list. Otherwise don't select any roles " +"to allow all users with permission to upload attachments to be able to " +"upload attachments of this type." +msgstr "" + +#: threads/admin/forms.py:117 +msgctxt "admin attachment type form" +msgid "" +"If you wish to limit option to download files of this type to users with " +"specific roles, select them on this list. Otherwise don't select any roles " +"to allow all users with permission to download attachments to be able to " +"download attachments of this type." +msgstr "" + +#: threads/admin/forms.py:129 +msgctxt "admin attachment type form" +msgid "This field is required." +msgstr "" + +#: threads/admin/views/attachments.py:15 +msgctxt "admin attachments" +msgid "Requested attachment does not exist." +msgstr "" + +#: threads/admin/views/attachments.py:28 +msgctxt "admin attachments ordering choice" +msgid "From newest" +msgstr "" + +#: threads/admin/views/attachments.py:29 +msgctxt "admin attachments ordering choice" +msgid "From oldest" +msgstr "" + +#: threads/admin/views/attachments.py:30 +msgctxt "admin attachments ordering choice" +msgid "A to z" +msgstr "" + +#: threads/admin/views/attachments.py:31 +msgctxt "admin attachments ordering choice" +msgid "Z to a" +msgstr "" + +#: threads/admin/views/attachments.py:32 +msgctxt "admin attachments ordering choice" +msgid "Smallest files" +msgstr "" + +#: threads/admin/views/attachments.py:33 +msgctxt "admin attachments ordering choice" +msgid "Largest files" +msgstr "" + +#: threads/admin/views/attachments.py:35 +msgctxt "admin attachments" +msgid "With attachments: 0" +msgstr "" + +#: threads/admin/views/attachments.py:36 +msgctxt "admin attachments" +msgid "Select attachments" +msgstr "" + +#: threads/admin/views/attachments.py:40 +msgctxt "admin attachments" +msgid "Delete attachments" +msgstr "" + +#: threads/admin/views/attachments.py:43 +msgctxt "admin attachments" +msgid "Are you sure you want to delete selected attachments?" +msgstr "" + +#: threads/admin/views/attachments.py:68 +msgctxt "admin attachments" +msgid "Selected attachments have been deleted." +msgstr "" + +#: threads/admin/views/attachments.py:91 +#, python-format +msgctxt "admin attachments" +msgid "Attachment \"%(filename)s\" has been deleted." +msgstr "" + +#: threads/admin/views/attachmenttypes.py:16 +msgctxt "admin attachments types" +msgid "Requested attachment type does not exist." +msgstr "" + +#: threads/admin/views/attachmenttypes.py:39 +#, python-format +msgctxt "admin attachments types" +msgid "New type \"%(name)s\" has been saved." +msgstr "" + +#: threads/admin/views/attachmenttypes.py:45 +#, python-format +msgctxt "admin attachments types" +msgid "Attachment type \"%(name)s\" has been edited." +msgstr "" + +#: threads/admin/views/attachmenttypes.py:54 +#, python-format +msgctxt "admin attachments types" +msgid "" +"Attachment type \"%(name)s\" has associated attachments and can't be " +"deleted." +msgstr "" + +#: threads/admin/views/attachmenttypes.py:61 +#, python-format +msgctxt "admin attachments types" +msgid "Attachment type \"%(name)s\" has been deleted." +msgstr "" + +#: threads/api/attachments.py:20 +msgctxt "attachments api" +msgid "You don't have permission to upload new files." +msgstr "" + +#: threads/api/attachments.py:33 +msgctxt "attachments api" +msgid "No file has been uploaded." +msgstr "" + +#: threads/api/attachments.py:56 +msgctxt "attachments api" +msgid "Uploaded image was corrupted or invalid." +msgstr "" + +#: threads/api/attachments.py:97 +msgctxt "attachments api" +msgid "You can't upload files of this type." +msgstr "" + +#: threads/api/attachments.py:105 +#, python-format +msgctxt "attachments api" +msgid "" +"You can't upload files larger than %(limit)s (your file has %(upload)s)." +msgstr "" + +#: threads/api/postendpoints/edits.py:88 +msgctxt "posts api" +msgid "Edits record is unavailable for this post." +msgstr "" + +#: threads/api/postendpoints/merge.py:12 +msgctxt "posts api" +msgid "You can't merge posts in this thread." +msgstr "" + +#: threads/api/postendpoints/move.py:11 +msgctxt "posts api" +msgid "You can't move posts in this thread." +msgstr "" + +#: threads/api/postendpoints/patch_post.py:37 +msgctxt "posts api" +msgid "You can't like posts in this category." +msgstr "" + +#: threads/api/postendpoints/patch_post.py:102 +msgctxt "posts api" +msgid "Content approval can't be reversed." +msgstr "" + +#: threads/api/postendpoints/patch_post.py:185 +msgctxt "posts api" +msgid "One or more posts to update could not be found." +msgstr "" + +#: threads/api/postendpoints/patch_post.py:205 +#, python-format +msgctxt "posts api" +msgid "No more than %(limit)s post can be updated at a single time." +msgid_plural "No more than %(limit)s posts can be updated at a single time." +msgstr[0] "" +msgstr[1] "" + +#: threads/api/postendpoints/split.py:13 +msgctxt "posts api" +msgid "You can't split posts from this thread." +msgstr "" + +#: threads/api/postingendpoint/attachments.py:63 +#, python-format +msgctxt "posting api" +msgid "You don't have permission to remove \"%(attachment)s\" attachment." +msgstr "" + +#: threads/api/postingendpoint/attachments.py:132 +#, python-format +msgctxt "posting api" +msgid "" +"You can't attach more than %(limit_value)s file to single post (added " +"%(show_value)s)." +msgid_plural "" +"You can't attach more than %(limit_value)s flies to single post (added " +"%(show_value)s)." +msgstr[0] "" +msgstr[1] "" + +#: threads/api/postingendpoint/category.py:45 +msgctxt "posting api" +msgid "You have to select category to post thread in." +msgstr "" + +#: threads/api/postingendpoint/category.py:47 +#: threads/api/postingendpoint/category.py:67 +msgctxt "posting api" +msgid "Selected category is invalid." +msgstr "" + +#: threads/api/postingendpoint/category.py:75 +msgctxt "posting api" +msgid "" +"Selected category doesn't exist or you don't have permission to browse it." +msgstr "" + +#: threads/api/postingendpoint/floodprotection.py:27 +msgctxt "posting api" +msgid "You can't post message so quickly after previous one." +msgstr "" + +#: threads/api/postingendpoint/floodprotection.py:39 +msgctxt "posting api" +msgid "Your account has exceed an hourly post limit." +msgstr "" + +#: threads/api/postingendpoint/floodprotection.py:48 +msgctxt "posting api" +msgid "Your account has exceed a daily post limit." +msgstr "" + +#: threads/api/postingendpoint/participants.py:53 +msgctxt "posting api" +msgid "" +"You can't include yourself on the list of users to invite to new thread." +msgstr "" + +#: threads/api/postingendpoint/participants.py:62 +msgctxt "posting api" +msgid "You have to enter user names." +msgstr "" + +#: threads/api/postingendpoint/participants.py:70 +#, python-format +msgctxt "posting api" +msgid "" +"You can't add more than %(users)s user to private thread (you've added " +"%(added)s)." +msgid_plural "" +"You can't add more than %(users)s users to private thread (you've added " +"%(added)s)." +msgstr[0] "" +msgstr[1] "" + +#: threads/api/postingendpoint/participants.py:97 +#, python-format +msgctxt "posting api" +msgid "One or more users could not be found: %(usernames)s" +msgstr "" + +#: threads/api/postingendpoint/reply.py:86 +msgctxt "posting api" +msgid "You have to enter a message." +msgstr "" + +#: threads/api/postingendpoint/reply.py:114 +msgctxt "posting api" +msgid "You have to enter a thread title." +msgstr "" + +#: threads/api/threadendpoints/editor.py:15 +msgctxt "posting api" +msgid "You need to be signed in to start threads." +msgstr "" + +#: threads/api/threadendpoints/editor.py:63 +msgctxt "posting api" +msgid "" +"No categories that allow new threads are available to you at the moment." +msgstr "" + +#: threads/api/threadendpoints/patch.py:66 +msgctxt "threads api" +msgid "Not a valid string." +msgstr "" + +#: threads/api/threadendpoints/patch.py:89 +msgctxt "threads api" +msgid "You can't change globally pinned threads weights in this category." +msgstr "" + +#: threads/api/threadendpoints/patch.py:99 +msgctxt "threads api" +msgid "You can't pin threads globally in this category." +msgstr "" + +#: threads/api/threadendpoints/patch.py:129 +msgctxt "threads api" +msgid "You can't move thread to the category it's already in." +msgstr "" + +#: threads/api/threadendpoints/patch.py:163 +msgctxt "threads api" +msgid "Content approval can't be reversed." +msgstr "" + +#: threads/api/threadendpoints/patch.py:189 +msgctxt "threads api" +msgid "You don't have permission to close this thread." +msgstr "" + +#: threads/api/threadendpoints/patch.py:195 +msgctxt "threads api" +msgid "You don't have permission to open this thread." +msgstr "" + +#: threads/api/threadendpoints/patch.py:221 +#: threads/api/threadendpoints/patch.py:262 +#: threads/api/threadendpoints/patch.py:331 +#: threads/api/threadendpoints/patch.py:359 +msgctxt "threads api" +msgid "A valid integer is required." +msgstr "" + +#: threads/api/threadendpoints/patch.py:235 +msgctxt "threads api" +msgid "This post is already marked as thread's best answer." +msgstr "" + +#: threads/api/threadendpoints/patch.py:272 +msgctxt "threads api" +msgid "" +"This post can't be unmarked because it's not currently marked as best " +"answer." +msgstr "" + +#: threads/api/threadendpoints/patch.py:300 +msgctxt "threads api" +msgid "You have to enter new participant's username." +msgstr "" + +#: threads/api/threadendpoints/patch.py:305 +msgctxt "threads api" +msgid "No user with this name exists." +msgstr "" + +#: threads/api/threadendpoints/patch.py:310 +msgctxt "threads api" +msgid "This user is already thread participant." +msgstr "" + +#: threads/api/threadendpoints/patch.py:337 +#: threads/api/threadendpoints/patch.py:370 +msgctxt "threads api" +msgid "Participant doesn't exist." +msgstr "" + +#: threads/api/threadendpoints/patch.py:365 +msgctxt "threads api" +msgid "This user already is thread owner." +msgstr "" + +#: threads/api/threadendpoints/patch.py:486 +msgctxt "threads api" +msgid "One or more threads to update could not be found." +msgstr "" + +#: threads/api/threadendpoints/patch.py:505 +#, python-format +msgctxt "threads api" +msgid "No more than %(limit)s thread can be updated at a single time." +msgid_plural "No more than %(limit)s threads can be updated at a single time." +msgstr[0] "" +msgstr[1] "" + +#: threads/api/threadpoll.py:61 +msgctxt "polls api" +msgid "There's already a poll in this thread." +msgstr "" + +#: threads/api/threadposts.py:220 +msgctxt "posts api" +msgid "You can't reply to events." +msgstr "" + +#: threads/api/threadposts.py:223 +msgctxt "posts api" +msgid "You can't reply to hidden posts." +msgstr "" + +#: threads/api/threadposts.py:258 +msgctxt "posts api" +msgid "You can't see who liked this post." +msgstr "" + +#: threads/api/threads.py:121 +msgctxt "private threads api" +msgid "You can't start private threads." +msgstr "" + +#: threads/mergeconflict.py:57 +msgctxt "merge conflict best answer" +msgid "Unmark all best answers" +msgstr "" + +#: threads/mergeconflict.py:77 +msgctxt "merge conflict poll" +msgid "Delete all polls" +msgstr "" + +#: threads/mergeconflict.py:129 +msgctxt "merge conflict invalid resolution" +msgid "Invalid choice." +msgstr "" + +#: threads/models/attachmenttype.py:21 +msgctxt "attachment availability choice" +msgid "Allow uploads and downloads" +msgstr "" + +#: threads/models/attachmenttype.py:28 +msgctxt "attachment availability choice" +msgid "Allow downloads only" +msgstr "" + +#: threads/models/attachmenttype.py:35 +msgctxt "attachment availability choice" +msgid "Disallow both uploading and downloading" +msgstr "" + +#: threads/models/thread.py:19 +msgctxt "thread weight choice" +msgid "Not pinned" +msgstr "" + +#: threads/models/thread.py:23 +msgctxt "thread weight choice" +msgid "Pinned in category" +msgstr "" + +#: threads/models/thread.py:27 +msgctxt "thread weight choice" +msgid "Pinned globally" +msgstr "" + +#: threads/moderation/posts.py:55 +msgctxt "post unhide" +msgid "You can't make original post visible without revealing the thread." +msgstr "" + +#: threads/moderation/posts.py:70 +msgctxt "post hide" +msgid "You can't hide original post without hiding thread." +msgstr "" + +#: threads/moderation/posts.py:98 +msgctxt "post delete" +msgid "You can't delete original post without deleting thread." +msgstr "" + +#: threads/permissions/attachments.py:12 threads/permissions/attachments.py:36 +msgctxt "attachments permission" +msgid "Attachments" +msgstr "" + +#: threads/permissions/attachments.py:15 +msgctxt "attachments permission" +msgid "Max attached file size (in kb)" +msgstr "" + +#: threads/permissions/attachments.py:17 +msgctxt "permissions" +msgid "Enter 0 to don't allow uploading end deleting attachments." +msgstr "" + +#: threads/permissions/attachments.py:25 +msgctxt "attachments permission" +msgid "Can download other users attachments" +msgstr "" + +#: threads/permissions/attachments.py:30 +msgctxt "attachments permission" +msgid "Can delete other users attachments" +msgstr "" + +#: threads/permissions/attachments.py:39 +msgctxt "attachments permission" +msgid "Can download attachments" +msgstr "" + +#: threads/permissions/bestanswers.py:29 +msgctxt "best answers permission" +msgid "Best answers" +msgstr "" + +#: threads/permissions/bestanswers.py:33 +msgctxt "best answers permission" +msgid "Can mark posts as best answers" +msgstr "" + +#: threads/permissions/bestanswers.py:38 +msgctxt "best answers mark permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/bestanswers.py:39 +msgctxt "best answers mark permission choice" +msgid "Own threads" +msgstr "" + +#: threads/permissions/bestanswers.py:40 +msgctxt "best answers mark permission choice" +msgid "All threads" +msgstr "" + +#: threads/permissions/bestanswers.py:44 +msgctxt "best answers permission" +msgid "Can change marked answers" +msgstr "" + +#: threads/permissions/bestanswers.py:48 +msgctxt "best answers change permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/bestanswers.py:49 +msgctxt "best answers change permission choice" +msgid "Own threads" +msgstr "" + +#: threads/permissions/bestanswers.py:50 +msgctxt "best answers change permission choice" +msgid "All threads" +msgstr "" + +#: threads/permissions/bestanswers.py:56 +msgctxt "best answers permission" +msgid "Time limit for changing marked best answer in owned thread, in minutes" +msgstr "" + +#: threads/permissions/bestanswers.py:60 +msgctxt "best answers permission" +msgid "" +"Enter 0 to don't limit time for changing marked best answer in owned thread." +msgstr "" + +#: threads/permissions/bestanswers.py:148 +#: threads/permissions/bestanswers.py:317 +msgctxt "best answers permission" +msgid "You have to sign in to mark best answers." +msgstr "" + +#: threads/permissions/bestanswers.py:158 +#: threads/permissions/bestanswers.py:334 +#, python-format +msgctxt "best answers permission" +msgid "" +"You don't have permission to mark best answers in the \"%(category)s\" " +"category." +msgstr "" + +#: threads/permissions/bestanswers.py:170 +#: threads/permissions/bestanswers.py:346 +msgctxt "best answers permission" +msgid "" +"You don't have permission to mark best answer in this thread because you " +"didn't start it." +msgstr "" + +#: threads/permissions/bestanswers.py:179 +#, python-format +msgctxt "best answers permission" +msgid "" +"You don't have permission to mark best answer in this thread because its " +"category \"%(category)s\" is closed." +msgstr "" + +#: threads/permissions/bestanswers.py:187 +msgctxt "best answers permission" +msgid "" +"You can't mark best answer in this thread because it's closed and you don't " +"have permission to open it." +msgstr "" + +#: threads/permissions/bestanswers.py:205 +#, python-format +msgctxt "best answers permission" +msgid "" +"You don't have permission to change this thread's marked answer because it's" +" in the \"%(category)s\" category." +msgstr "" + +#: threads/permissions/bestanswers.py:215 +msgctxt "best answers permission" +msgid "" +"You don't have permission to change this thread's marked answer because you " +"are not a thread starter." +msgstr "" + +#: threads/permissions/bestanswers.py:222 +#, python-format +msgctxt "best answers permission" +msgid "" +"You don't have permission to change best answer that was marked for more " +"than %(minutes)s minute." +msgid_plural "" +"You don't have permission to change best answer that was marked for more " +"than %(minutes)s minutes." +msgstr[0] "" +msgstr[1] "" + +#: threads/permissions/bestanswers.py:234 +msgctxt "best answers permission" +msgid "" +"You don't have permission to change this thread's best answer because a " +"moderator has protected it." +msgstr "" + +#: threads/permissions/bestanswers.py:246 +msgctxt "best answers permission" +msgid "You have to sign in to unmark best answers." +msgstr "" + +#: threads/permissions/bestanswers.py:259 +#, python-format +msgctxt "best answers permission" +msgid "" +"You don't have permission to unmark threads answers in the \"%(category)s\" " +"category." +msgstr "" + +#: threads/permissions/bestanswers.py:269 +msgctxt "best answers permission" +msgid "" +"You don't have permission to unmark this best answer because you are not a " +"thread starter." +msgstr "" + +#: threads/permissions/bestanswers.py:276 +#, python-format +msgctxt "best answers permission" +msgid "" +"You don't have permission to unmark best answer that was marked for more " +"than %(minutes)s minute." +msgid_plural "" +"You don't have permission to unmark best answer that was marked for more " +"than %(minutes)s minutes." +msgstr[0] "" +msgstr[1] "" + +#: threads/permissions/bestanswers.py:289 +#, python-format +msgctxt "best answers permission" +msgid "" +"You don't have permission to unmark this best answer because its category " +"\"%(category)s\" is closed." +msgstr "" + +#: threads/permissions/bestanswers.py:297 +msgctxt "best answers permission" +msgid "" +"You can't unmark this thread's best answer because it's closed and you don't" +" have permission to open it." +msgstr "" + +#: threads/permissions/bestanswers.py:305 +msgctxt "best answers permission" +msgid "" +"You don't have permission to unmark this thread's best answer because a " +"moderator has protected it." +msgstr "" + +#: threads/permissions/bestanswers.py:324 +msgctxt "best answers permission" +msgid "Events can't be marked as best answers." +msgstr "" + +#: threads/permissions/bestanswers.py:354 +msgctxt "best answers permission" +msgid "First post in a thread can't be marked as best answer." +msgstr "" + +#: threads/permissions/bestanswers.py:362 +msgctxt "best answers permission" +msgid "Hidden posts can't be marked as best answers." +msgstr "" + +#: threads/permissions/bestanswers.py:370 +msgctxt "best answers permission" +msgid "Unapproved posts can't be marked as best answers." +msgstr "" + +#: threads/permissions/bestanswers.py:378 +msgctxt "best answers permission" +msgid "" +"You don't have permission to mark this post as best answer because a " +"moderator has protected it." +msgstr "" + +#: threads/permissions/bestanswers.py:391 +msgctxt "best answers permission" +msgid "You can't hide this post because its marked as best answer." +msgstr "" + +#: threads/permissions/bestanswers.py:404 +msgctxt "best answers permission" +msgid "You can't delete this post because its marked as best answer." +msgstr "" + +#: threads/permissions/polls.py:27 +msgctxt "polls permission" +msgid "Polls" +msgstr "" + +#: threads/permissions/polls.py:30 +msgctxt "polls permission" +msgid "Can start polls" +msgstr "" + +#: threads/permissions/polls.py:34 +msgctxt "polls start permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/polls.py:35 +msgctxt "polls start permission choice" +msgid "Own threads" +msgstr "" + +#: threads/permissions/polls.py:36 +msgctxt "polls start permission choice" +msgid "All threads" +msgstr "" + +#: threads/permissions/polls.py:40 +msgctxt "polls permission" +msgid "Can edit polls" +msgstr "" + +#: threads/permissions/polls.py:44 +msgctxt "polls edit permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/polls.py:45 +msgctxt "polls edit permission choice" +msgid "Own polls" +msgstr "" + +#: threads/permissions/polls.py:46 +msgctxt "polls edit permission choice" +msgid "All polls" +msgstr "" + +#: threads/permissions/polls.py:50 +msgctxt "polls permission" +msgid "Can delete polls" +msgstr "" + +#: threads/permissions/polls.py:54 +msgctxt "polls delete permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/polls.py:55 +msgctxt "polls delete permission choice" +msgid "Own polls" +msgstr "" + +#: threads/permissions/polls.py:56 +msgctxt "polls delete permission choice" +msgid "All polls" +msgstr "" + +#: threads/permissions/polls.py:61 +msgctxt "polls permission" +msgid "Time limit for own polls edits, in minutes" +msgstr "" + +#: threads/permissions/polls.py:64 +msgctxt "polls permission" +msgid "Enter 0 to don't limit time for editing own polls." +msgstr "" + +#: threads/permissions/polls.py:70 +msgctxt "polls permission" +msgid "Can always see polls voters" +msgstr "" + +#: threads/permissions/polls.py:73 +msgctxt "polls permission" +msgid "Allows users to see who voted in poll even if poll votes are secret." +msgstr "" + +#: threads/permissions/polls.py:129 +msgctxt "polls permission" +msgid "You have to sign in to start polls." +msgstr "" + +#: threads/permissions/polls.py:138 +msgctxt "polls permission" +msgid "You can't start polls." +msgstr "" + +#: threads/permissions/polls.py:143 +msgctxt "polls permission" +msgid "You can't start polls in other users threads." +msgstr "" + +#: threads/permissions/polls.py:152 +msgctxt "polls permission" +msgid "This category is closed. You can't start polls in it." +msgstr "" + +#: threads/permissions/polls.py:159 +msgctxt "polls permission" +msgid "This thread is closed. You can't start polls in it." +msgstr "" + +#: threads/permissions/polls.py:170 +msgctxt "polls permission" +msgid "You have to sign in to edit polls." +msgstr "" + +#: threads/permissions/polls.py:179 +msgctxt "polls permission" +msgid "You can't edit polls." +msgstr "" + +#: threads/permissions/polls.py:187 +msgctxt "polls permission" +msgid "You can't edit other users polls in this category." +msgstr "" + +#: threads/permissions/polls.py:193 +#, python-format +msgctxt "polls permission" +msgid "You can't edit polls that are older than %(minutes)s minute." +msgid_plural "You can't edit polls that are older than %(minutes)s minutes." +msgstr[0] "" +msgstr[1] "" + +#: threads/permissions/polls.py:202 +msgctxt "polls permission" +msgid "This poll is over. You can't edit it." +msgstr "" + +#: threads/permissions/polls.py:211 +msgctxt "polls permission" +msgid "This category is closed. You can't edit polls in it." +msgstr "" + +#: threads/permissions/polls.py:218 +msgctxt "polls permission" +msgid "This thread is closed. You can't edit polls in it." +msgstr "" + +#: threads/permissions/polls.py:229 +msgctxt "polls permission" +msgid "You have to sign in to delete polls." +msgstr "" + +#: threads/permissions/polls.py:238 +msgctxt "polls permission" +msgid "You can't delete polls." +msgstr "" + +#: threads/permissions/polls.py:246 +msgctxt "polls permission" +msgid "You can't delete other users polls in this category." +msgstr "" + +#: threads/permissions/polls.py:252 +#, python-format +msgctxt "polls permission" +msgid "You can't delete polls that are older than %(minutes)s minute." +msgid_plural "You can't delete polls that are older than %(minutes)s minutes." +msgstr[0] "" +msgstr[1] "" + +#: threads/permissions/polls.py:260 +msgctxt "polls permission" +msgid "This poll is over. You can't delete it." +msgstr "" + +#: threads/permissions/polls.py:269 +msgctxt "polls permission" +msgid "This category is closed. You can't delete polls in it." +msgstr "" + +#: threads/permissions/polls.py:276 +msgctxt "polls permission" +msgid "This thread is closed. You can't delete polls in it." +msgstr "" + +#: threads/permissions/polls.py:287 +msgctxt "polls permission" +msgid "You have to sign in to vote in polls." +msgstr "" + +#: threads/permissions/polls.py:292 +msgctxt "polls permission" +msgid "You have already voted in this poll." +msgstr "" + +#: threads/permissions/polls.py:297 +msgctxt "polls permission" +msgid "This poll is over. You can't vote in it." +msgstr "" + +#: threads/permissions/polls.py:309 +msgctxt "polls permission" +msgid "This category is closed. You can't vote in it." +msgstr "" + +#: threads/permissions/polls.py:315 +msgctxt "polls permission" +msgid "This thread is closed. You can't vote in it." +msgstr "" + +#: threads/permissions/polls.py:327 +msgctxt "polls permission" +msgid "You dont have permission to this poll's voters." +msgstr "" + +#: threads/permissions/privatethreads.py:33 +msgctxt "private threads permission" +msgid "Private threads" +msgstr "" + +#: threads/permissions/privatethreads.py:36 +msgctxt "private threads permission" +msgid "Can use private threads" +msgstr "" + +#: threads/permissions/privatethreads.py:39 +msgctxt "private threads permission" +msgid "Can start private threads" +msgstr "" + +#: threads/permissions/privatethreads.py:44 +msgctxt "private threads permission" +msgid "Max number of users invited to private thread" +msgstr "" + +#: threads/permissions/privatethreads.py:48 +msgctxt "private threads permission" +msgid "Enter 0 to don't limit number of participants." +msgstr "" + +#: threads/permissions/privatethreads.py:55 +msgctxt "private threads permission" +msgid "Can add everyone to threads" +msgstr "" + +#: threads/permissions/privatethreads.py:59 +msgctxt "private threads permission" +msgid "Allows user to add users that are blocking them to private threads." +msgstr "" + +#: threads/permissions/privatethreads.py:63 +msgctxt "private threads permission" +msgid "Can report private threads" +msgstr "" + +#: threads/permissions/privatethreads.py:66 +msgctxt "private threads permission" +msgid "" +"Allows user to report private threads they are participating in, making them" +" accessible to moderators." +msgstr "" + +#: threads/permissions/privatethreads.py:71 +msgctxt "private threads permission" +msgid "Can moderate private threads" +msgstr "" + +#: threads/permissions/privatethreads.py:75 +msgctxt "private threads permission" +msgid "" +"Allows user to read, reply, edit and delete content in reported private " +"threads." +msgstr "" + +#: threads/permissions/privatethreads.py:197 +msgctxt "private threads permission" +msgid "You have to sign in to use private threads." +msgstr "" + +#: threads/permissions/privatethreads.py:203 +msgctxt "private threads permission" +msgid "You can't use private threads." +msgstr "" + +#: threads/permissions/privatethreads.py:239 +msgctxt "private threads permission" +msgid "Only thread owner and moderators can change threads owners." +msgstr "" + +#: threads/permissions/privatethreads.py:247 +msgctxt "private threads permission" +msgid "Only moderators can change closed threads owners." +msgstr "" + +#: threads/permissions/privatethreads.py:263 +msgctxt "private threads permission" +msgid "You have to be thread owner to add new participants to it." +msgstr "" + +#: threads/permissions/privatethreads.py:271 +msgctxt "private threads permission" +msgid "Only moderators can add participants to closed threads." +msgstr "" + +#: threads/permissions/privatethreads.py:282 +msgctxt "private threads permission" +msgid "You can't add any more new users to this thread." +msgstr "" + +#: threads/permissions/privatethreads.py:301 +msgctxt "private threads permission" +msgid "Only moderators can remove participants from closed threads." +msgstr "" + +#: threads/permissions/privatethreads.py:309 +msgctxt "private threads permission" +msgid "You have to be thread owner to remove participants from it." +msgstr "" + +#: threads/permissions/privatethreads.py:324 +#, python-format +msgctxt "private threads permission" +msgid "%(user)s can't participate in private threads." +msgstr "" + +#: threads/permissions/privatethreads.py:334 +#, python-format +msgctxt "private threads permission" +msgid "%(user)s is blocking you." +msgstr "" + +#: threads/permissions/privatethreads.py:342 +#, python-format +msgctxt "private threads permission" +msgid "%(user)s is not allowing invitations to private threads." +msgstr "" + +#: threads/permissions/privatethreads.py:352 +#, python-format +msgctxt "private threads permission" +msgid "%(user)s limits invitations to private threads to followed users." +msgstr "" + +#: threads/permissions/threads.py:72 threads/permissions/threads.py:98 +msgctxt "threads permission" +msgid "Threads" +msgstr "" + +#: threads/permissions/threads.py:75 +msgctxt "threads permission" +msgid "Can see unapproved content list" +msgstr "" + +#: threads/permissions/threads.py:78 +msgctxt "threads permission" +msgid "" +"Allows access to \"unapproved\" tab on threads lists for easy listing of " +"threads that are unapproved or contain unapproved posts. Despite the tab " +"being available on all threads lists, it will only display threads belonging" +" to categories in which the user has permission to approve content." +msgstr "" + +#: threads/permissions/threads.py:82 +msgctxt "threads permission" +msgid "Can see reported content list" +msgstr "" + +#: threads/permissions/threads.py:85 +msgctxt "threads permission" +msgid "" +"Allows access to \"reported\" tab on threads lists for easy listing of " +"threads that contain reported posts. Despite the tab being available on all " +"categories threads lists, it will only display threads belonging to " +"categories in which the user has permission to see posts reports." +msgstr "" + +#: threads/permissions/threads.py:89 +msgctxt "threads permission" +msgid "Can omit flood protection" +msgstr "" + +#: threads/permissions/threads.py:92 +msgctxt "threads permission" +msgid "Allows posting more frequently than flood protection would." +msgstr "" + +#: threads/permissions/threads.py:101 +msgctxt "threads permission" +msgid "Can see threads" +msgstr "" + +#: threads/permissions/threads.py:105 +msgctxt "threads see permission choice" +msgid "Started threads" +msgstr "" + +#: threads/permissions/threads.py:106 +msgctxt "threads see permission choice" +msgid "All threads" +msgstr "" + +#: threads/permissions/threads.py:111 +msgctxt "threads permission" +msgid "Can start threads" +msgstr "" + +#: threads/permissions/threads.py:114 +msgctxt "threads permission" +msgid "Can reply to threads" +msgstr "" + +#: threads/permissions/threads.py:118 +msgctxt "threads permission" +msgid "Can edit threads" +msgstr "" + +#: threads/permissions/threads.py:122 +msgctxt "threads edit permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/threads.py:123 +msgctxt "threads edit permission choice" +msgid "Own threads" +msgstr "" + +#: threads/permissions/threads.py:124 +msgctxt "threads edit permission choice" +msgid "All threads" +msgstr "" + +#: threads/permissions/threads.py:128 +msgctxt "threads permission" +msgid "Can hide own threads" +msgstr "" + +#: threads/permissions/threads.py:131 +msgctxt "threads permission" +msgid "" +"Only threads started within time limit and with no replies can be hidden." +msgstr "" + +#: threads/permissions/threads.py:136 +msgctxt "threads hide own permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/threads.py:137 +msgctxt "threads hide own permission choice" +msgid "Hide threads" +msgstr "" + +#: threads/permissions/threads.py:138 +msgctxt "threads hide own permission choice" +msgid "Delete threads" +msgstr "" + +#: threads/permissions/threads.py:143 +msgctxt "threads permission" +msgid "Time limit for own threads edits, in minutes" +msgstr "" + +#: threads/permissions/threads.py:146 +msgctxt "threads permission" +msgid "Enter 0 to don't limit time for editing own threads." +msgstr "" + +#: threads/permissions/threads.py:152 +msgctxt "threads permission" +msgid "Can hide all threads" +msgstr "" + +#: threads/permissions/threads.py:156 +msgctxt "threads hide permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/threads.py:157 +msgctxt "threads hide permission choice" +msgid "Hide threads" +msgstr "" + +#: threads/permissions/threads.py:158 +msgctxt "threads hide permission choice" +msgid "Delete threads" +msgstr "" + +#: threads/permissions/threads.py:163 +msgctxt "threads permission" +msgid "Can pin threads" +msgstr "" + +#: threads/permissions/threads.py:167 +msgctxt "threads pin permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/threads.py:168 +msgctxt "threads pin permission choice" +msgid "Locally" +msgstr "" + +#: threads/permissions/threads.py:169 +msgctxt "threads pin permission choice" +msgid "Globally" +msgstr "" + +#: threads/permissions/threads.py:173 +msgctxt "threads permission" +msgid "Can close threads" +msgstr "" + +#: threads/permissions/threads.py:176 +msgctxt "threads permission" +msgid "Can move threads" +msgstr "" + +#: threads/permissions/threads.py:179 +msgctxt "threads permission" +msgid "Can merge threads" +msgstr "" + +#: threads/permissions/threads.py:183 +msgctxt "threads permission" +msgid "Can edit posts" +msgstr "" + +#: threads/permissions/threads.py:187 +msgctxt "threads posts edit permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/threads.py:188 +msgctxt "threads posts edit permission choice" +msgid "Own posts" +msgstr "" + +#: threads/permissions/threads.py:189 +msgctxt "threads posts edit permission choice" +msgid "All posts" +msgstr "" + +#: threads/permissions/threads.py:193 +msgctxt "threads permission" +msgid "Can hide own posts" +msgstr "" + +#: threads/permissions/threads.py:196 +msgctxt "threads permission" +msgid "Only last posts to thread made within edit time limit can be hidden." +msgstr "" + +#: threads/permissions/threads.py:201 +msgctxt "threads own posts hide permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/threads.py:204 +msgctxt "threads own posts hide permission choice" +msgid "Hide posts" +msgstr "" + +#: threads/permissions/threads.py:209 +msgctxt "threads own posts hide permission choice" +msgid "Delete posts" +msgstr "" + +#: threads/permissions/threads.py:216 +msgctxt "threads permission" +msgid "Time limit for own post edits, in minutes" +msgstr "" + +#: threads/permissions/threads.py:219 +msgctxt "threads permission" +msgid "Enter 0 to don't limit time for editing own posts." +msgstr "" + +#: threads/permissions/threads.py:225 +msgctxt "threads permission" +msgid "Can hide all posts" +msgstr "" + +#: threads/permissions/threads.py:229 +msgctxt "threads hide posts permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/threads.py:230 +msgctxt "threads hide posts permission choice" +msgid "Hide posts" +msgstr "" + +#: threads/permissions/threads.py:231 +msgctxt "threads hide posts permission choice" +msgid "Delete posts" +msgstr "" + +#: threads/permissions/threads.py:236 +msgctxt "threads permission" +msgid "Can see posts likes" +msgstr "" + +#: threads/permissions/threads.py:240 +msgctxt "threads posts like see permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/threads.py:244 +msgctxt "threads posts like see permission choice" +msgid "Number only" +msgstr "" + +#: threads/permissions/threads.py:251 +msgctxt "threads posts like see permission choice" +msgid "Number and list of likers" +msgstr "" + +#: threads/permissions/threads.py:257 +msgctxt "threads permission" +msgid "Can like posts" +msgstr "" + +#: threads/permissions/threads.py:260 +msgctxt "threads permission" +msgid "Only users with this permission to see likes can like posts." +msgstr "" + +#: threads/permissions/threads.py:265 +msgctxt "threads permission" +msgid "Can protect posts" +msgstr "" + +#: threads/permissions/threads.py:268 +msgctxt "threads permission" +msgid "Only users with this permission can edit protected posts." +msgstr "" + +#: threads/permissions/threads.py:272 +msgctxt "threads permission" +msgid "Can move posts" +msgstr "" + +#: threads/permissions/threads.py:274 +msgctxt "threads permission" +msgid "Will be able to move posts to other threads." +msgstr "" + +#: threads/permissions/threads.py:278 +msgctxt "threads permission" +msgid "Can merge posts" +msgstr "" + +#: threads/permissions/threads.py:281 +msgctxt "threads permission" +msgid "Can approve content" +msgstr "" + +#: threads/permissions/threads.py:283 +msgctxt "threads permission" +msgid "Will be able to see and approve unapproved content." +msgstr "" + +#: threads/permissions/threads.py:287 +msgctxt "threads permission" +msgid "Can report posts" +msgstr "" + +#: threads/permissions/threads.py:290 +msgctxt "threads permission" +msgid "Can see reports" +msgstr "" + +#: threads/permissions/threads.py:294 +msgctxt "threads permission" +msgid "Can hide events" +msgstr "" + +#: threads/permissions/threads.py:298 +msgctxt "threads events hide permission choice" +msgid "No" +msgstr "" + +#: threads/permissions/threads.py:299 +msgctxt "threads events hide permission choice" +msgid "Hide events" +msgstr "" + +#: threads/permissions/threads.py:302 +msgctxt "threads events hide permission choice" +msgid "Delete events" +msgstr "" + +#: threads/permissions/threads.py:308 +msgctxt "threads permission" +msgid "Require threads approval" +msgstr "" + +#: threads/permissions/threads.py:311 +msgctxt "threads permission" +msgid "Require replies approval" +msgstr "" + +#: threads/permissions/threads.py:314 +msgctxt "threads permission" +msgid "Require edits approval" +msgstr "" + +#: threads/permissions/threads.py:637 +msgctxt "threads permission" +msgid "You have to sign in to start threads." +msgstr "" + +#: threads/permissions/threads.py:646 +msgctxt "threads permission" +msgid "You don't have permission to start new threads in this category." +msgstr "" + +#: threads/permissions/threads.py:654 +msgctxt "threads permission" +msgid "This category is closed. You can't start new threads in it." +msgstr "" + +#: threads/permissions/threads.py:665 +msgctxt "threads permission" +msgid "You have to sign in to reply threads." +msgstr "" + +#: threads/permissions/threads.py:675 +msgctxt "threads permission" +msgid "You can't reply to threads in this category." +msgstr "" + +#: threads/permissions/threads.py:684 +msgctxt "threads permission" +msgid "This category is closed. You can't reply to threads in it." +msgstr "" + +#: threads/permissions/threads.py:691 +msgctxt "threads permission" +msgid "You can't reply to closed threads in this category." +msgstr "" + +#: threads/permissions/threads.py:702 +msgctxt "threads permission" +msgid "You have to sign in to edit threads." +msgstr "" + +#: threads/permissions/threads.py:712 +msgctxt "threads permission" +msgid "You can't edit threads in this category." +msgstr "" + +#: threads/permissions/threads.py:721 +msgctxt "threads permission" +msgid "You can't edit other users threads in this category." +msgstr "" + +#: threads/permissions/threads.py:728 +#, python-format +msgctxt "threads permission" +msgid "You can't edit threads that are older than %(minutes)s minute." +msgid_plural "You can't edit threads that are older than %(minutes)s minutes." +msgstr[0] "" +msgstr[1] "" + +#: threads/permissions/threads.py:741 +msgctxt "threads permission" +msgid "This category is closed. You can't edit threads in it." +msgstr "" + +#: threads/permissions/threads.py:747 +msgctxt "threads permission" +msgid "This thread is closed. You can't edit it." +msgstr "" + +#: threads/permissions/threads.py:759 +msgctxt "threads permission" +msgid "You have to sign in to change threads weights." +msgstr "" + +#: threads/permissions/threads.py:771 +msgctxt "threads permission" +msgid "You can't change threads weights in this category." +msgstr "" + +#: threads/permissions/threads.py:780 +msgctxt "threads permission" +msgid "This category is closed. You can't change threads weights in it." +msgstr "" + +#: threads/permissions/threads.py:787 +msgctxt "threads permission" +msgid "This thread is closed. You can't change its weight." +msgstr "" + +#: threads/permissions/threads.py:798 threads/permissions/threads.py:827 +msgctxt "threads permission" +msgid "You have to sign in to hide threads." +msgstr "" + +#: threads/permissions/threads.py:810 +msgctxt "threads permission" +msgid "This category is closed. You can't reveal threads in it." +msgstr "" + +#: threads/permissions/threads.py:816 +msgctxt "threads permission" +msgid "This thread is closed. You can't reveal it." +msgstr "" + +#: threads/permissions/threads.py:840 +msgctxt "threads permission" +msgid "You can't hide threads in this category." +msgstr "" + +#: threads/permissions/threads.py:849 +msgctxt "threads permission" +msgid "You can't hide other users theads in this category." +msgstr "" + +#: threads/permissions/threads.py:856 +#, python-format +msgctxt "threads permission" +msgid "You can't hide threads that are older than %(minutes)s minute." +msgid_plural "You can't hide threads that are older than %(minutes)s minutes." +msgstr[0] "" +msgstr[1] "" + +#: threads/permissions/threads.py:869 +msgctxt "threads permission" +msgid "This category is closed. You can't hide threads in it." +msgstr "" + +#: threads/permissions/threads.py:875 +msgctxt "threads permission" +msgid "This thread is closed. You can't hide it." +msgstr "" + +#: threads/permissions/threads.py:887 +msgctxt "threads permission" +msgid "You have to sign in to delete threads." +msgstr "" + +#: threads/permissions/threads.py:901 +msgctxt "threads permission" +msgid "You can't delete threads in this category." +msgstr "" + +#: threads/permissions/threads.py:913 +msgctxt "threads permission" +msgid "You can't delete other users theads in this category." +msgstr "" + +#: threads/permissions/threads.py:920 +#, python-format +msgctxt "threads permission" +msgid "You can't delete threads that are older than %(minutes)s minute." +msgid_plural "" +"You can't delete threads that are older than %(minutes)s minutes." +msgstr[0] "" +msgstr[1] "" + +#: threads/permissions/threads.py:933 +msgctxt "threads permission" +msgid "This category is closed. You can't delete threads in it." +msgstr "" + +#: threads/permissions/threads.py:939 +msgctxt "threads permission" +msgid "This thread is closed. You can't delete it." +msgstr "" + +#: threads/permissions/threads.py:950 +msgctxt "threads permission" +msgid "You have to sign in to move threads." +msgstr "" + +#: threads/permissions/threads.py:960 +msgctxt "threads permission" +msgid "You can't move threads in this category." +msgstr "" + +#: threads/permissions/threads.py:969 +msgctxt "threads permission" +msgid "This category is closed. You can't move it's threads." +msgstr "" + +#: threads/permissions/threads.py:975 +msgctxt "threads permission" +msgid "This thread is closed. You can't move it." +msgstr "" + +#: threads/permissions/threads.py:986 +msgctxt "threads permission" +msgid "You have to sign in to merge threads." +msgstr "" + +#: threads/permissions/threads.py:997 +msgctxt "threads permission" +msgid "Other thread can't be merged with." +msgstr "" + +#: threads/permissions/threads.py:1002 +msgctxt "threads permission" +msgid "You can't merge threads in this category." +msgstr "" + +#: threads/permissions/threads.py:1012 +msgctxt "threads permission" +msgid "Other thread's category is closed. You can't merge with it." +msgstr "" + +#: threads/permissions/threads.py:1018 +msgctxt "threads permission" +msgid "This category is closed. You can't merge it's threads." +msgstr "" + +#: threads/permissions/threads.py:1026 +msgctxt "threads permission" +msgid "Other thread is closed and can't be merged with." +msgstr "" + +#: threads/permissions/threads.py:1032 +msgctxt "threads permission" +msgid "This thread is closed. You can't merge it with other threads." +msgstr "" + +#: threads/permissions/threads.py:1044 +msgctxt "threads permission" +msgid "You have to sign in to approve threads." +msgstr "" + +#: threads/permissions/threads.py:1055 +msgctxt "threads permission" +msgid "You can't approve threads in this category." +msgstr "" + +#: threads/permissions/threads.py:1064 +msgctxt "threads permission" +msgid "This category is closed. You can't approve threads in it." +msgstr "" + +#: threads/permissions/threads.py:1070 +msgctxt "threads permission" +msgid "This thread is closed. You can't approve it." +msgstr "" + +#: threads/permissions/threads.py:1103 +msgctxt "threads permission" +msgid "You have to sign in to edit posts." +msgstr "" + +#: threads/permissions/threads.py:1108 +msgctxt "threads permission" +msgid "Events can't be edited." +msgstr "" + +#: threads/permissions/threads.py:1118 +msgctxt "threads permission" +msgid "You can't edit posts in this category." +msgstr "" + +#: threads/permissions/threads.py:1129 +msgctxt "threads permission" +msgid "This post is hidden, you can't edit it." +msgstr "" + +#: threads/permissions/threads.py:1138 +msgctxt "threads permission" +msgid "You can't edit other users posts in this category." +msgstr "" + +#: threads/permissions/threads.py:1145 +msgctxt "threads permission" +msgid "This post is protected. You can't edit it." +msgstr "" + +#: threads/permissions/threads.py:1152 +#, python-format +msgctxt "threads permission" +msgid "You can't edit posts that are older than %(minutes)s minute." +msgid_plural "You can't edit posts that are older than %(minutes)s minutes." +msgstr[0] "" +msgstr[1] "" + +#: threads/permissions/threads.py:1165 +msgctxt "threads permission" +msgid "This category is closed. You can't edit posts in it." +msgstr "" + +#: threads/permissions/threads.py:1172 +msgctxt "threads permission" +msgid "This thread is closed. You can't edit posts in it." +msgstr "" + +#: threads/permissions/threads.py:1183 +msgctxt "threads permission" +msgid "You have to sign in to reveal posts." +msgstr "" + +#: threads/permissions/threads.py:1194 +msgctxt "threads permission" +msgid "You can't reveal posts in this category." +msgstr "" + +#: threads/permissions/threads.py:1202 +msgctxt "threads permission" +msgid "You can't reveal other users posts in this category." +msgstr "" + +#: threads/permissions/threads.py:1209 +msgctxt "threads permission" +msgid "This post is protected. You can't reveal it." +msgstr "" + +#: threads/permissions/threads.py:1216 +#, python-format +msgctxt "threads permission" +msgid "You can't reveal posts that are older than %(minutes)s minute." +msgid_plural "You can't reveal posts that are older than %(minutes)s minutes." +msgstr[0] "" +msgstr[1] "" + +#: threads/permissions/threads.py:1226 +msgctxt "threads permission" +msgid "You can't reveal thread's first post." +msgstr "" + +#: threads/permissions/threads.py:1234 +msgctxt "threads permission" +msgid "This category is closed. You can't reveal posts in it." +msgstr "" + +#: threads/permissions/threads.py:1241 +msgctxt "threads permission" +msgid "This thread is closed. You can't reveal posts in it." +msgstr "" + +#: threads/permissions/threads.py:1252 +msgctxt "threads permission" +msgid "You have to sign in to hide posts." +msgstr "" + +#: threads/permissions/threads.py:1263 +msgctxt "threads permission" +msgid "You can't hide posts in this category." +msgstr "" + +#: threads/permissions/threads.py:1271 +msgctxt "threads permission" +msgid "You can't hide other users posts in this category." +msgstr "" + +#: threads/permissions/threads.py:1278 +msgctxt "threads permission" +msgid "This post is protected. You can't hide it." +msgstr "" + +#: threads/permissions/threads.py:1285 +#, python-format +msgctxt "threads permission" +msgid "You can't hide posts that are older than %(minutes)s minute." +msgid_plural "You can't hide posts that are older than %(minutes)s minutes." +msgstr[0] "" +msgstr[1] "" + +#: threads/permissions/threads.py:1295 +msgctxt "threads permission" +msgid "You can't hide thread's first post." +msgstr "" + +#: threads/permissions/threads.py:1303 +msgctxt "threads permission" +msgid "This category is closed. You can't hide posts in it." +msgstr "" + +#: threads/permissions/threads.py:1310 +msgctxt "threads permission" +msgid "This thread is closed. You can't hide posts in it." +msgstr "" + +#: threads/permissions/threads.py:1321 +msgctxt "threads permission" +msgid "You have to sign in to delete posts." +msgstr "" + +#: threads/permissions/threads.py:1332 +msgctxt "threads permission" +msgid "You can't delete posts in this category." +msgstr "" + +#: threads/permissions/threads.py:1340 +msgctxt "threads permission" +msgid "You can't delete other users posts in this category." +msgstr "" + +#: threads/permissions/threads.py:1347 +msgctxt "threads permission" +msgid "This post is protected. You can't delete it." +msgstr "" + +#: threads/permissions/threads.py:1354 +#, python-format +msgctxt "threads permission" +msgid "You can't delete posts that are older than %(minutes)s minute." +msgid_plural "You can't delete posts that are older than %(minutes)s minutes." +msgstr[0] "" +msgstr[1] "" + +#: threads/permissions/threads.py:1364 +msgctxt "threads permission" +msgid "You can't delete thread's first post." +msgstr "" + +#: threads/permissions/threads.py:1372 +msgctxt "threads permission" +msgid "This category is closed. You can't delete posts in it." +msgstr "" + +#: threads/permissions/threads.py:1379 +msgctxt "threads permission" +msgid "This thread is closed. You can't delete posts in it." +msgstr "" + +#: threads/permissions/threads.py:1390 +msgctxt "threads permission" +msgid "You have to sign in to protect posts." +msgstr "" + +#: threads/permissions/threads.py:1400 +msgctxt "threads permission" +msgid "You can't protect posts in this category." +msgstr "" + +#: threads/permissions/threads.py:1406 +msgctxt "threads permission" +msgid "You can't protect posts you can't edit." +msgstr "" + +#: threads/permissions/threads.py:1417 +msgctxt "threads permission" +msgid "You have to sign in to approve posts." +msgstr "" + +#: threads/permissions/threads.py:1427 +msgctxt "threads permission" +msgid "You can't approve posts in this category." +msgstr "" + +#: threads/permissions/threads.py:1433 +msgctxt "threads permission" +msgid "You can't approve thread's first post." +msgstr "" + +#: threads/permissions/threads.py:1444 +msgctxt "threads permission" +msgid "You can't approve posts the content you can't see." +msgstr "" + +#: threads/permissions/threads.py:1453 +msgctxt "threads permission" +msgid "This category is closed. You can't approve posts in it." +msgstr "" + +#: threads/permissions/threads.py:1460 +msgctxt "threads permission" +msgid "This thread is closed. You can't approve posts in it." +msgstr "" + +#: threads/permissions/threads.py:1471 +msgctxt "threads permission" +msgid "You have to sign in to move posts." +msgstr "" + +#: threads/permissions/threads.py:1481 +msgctxt "threads permission" +msgid "You can't move posts in this category." +msgstr "" + +#: threads/permissions/threads.py:1486 +msgctxt "threads permission" +msgid "Events can't be moved." +msgstr "" + +#: threads/permissions/threads.py:1490 +msgctxt "threads permission" +msgid "You can't move thread's first post." +msgstr "" + +#: threads/permissions/threads.py:1495 +msgctxt "threads permission" +msgid "You can't move posts the content you can't see." +msgstr "" + +#: threads/permissions/threads.py:1504 +msgctxt "threads permission" +msgid "This category is closed. You can't move posts in it." +msgstr "" + +#: threads/permissions/threads.py:1511 +msgctxt "threads permission" +msgid "This thread is closed. You can't move posts in it." +msgstr "" + +#: threads/permissions/threads.py:1522 +msgctxt "threads permission" +msgid "You have to sign in to merge posts." +msgstr "" + +#: threads/permissions/threads.py:1532 +msgctxt "threads permission" +msgid "You can't merge posts in this category." +msgstr "" + +#: threads/permissions/threads.py:1537 +msgctxt "threads permission" +msgid "Events can't be merged." +msgstr "" + +#: threads/permissions/threads.py:1546 +msgctxt "threads permission" +msgid "You can't merge posts the content you can't see." +msgstr "" + +#: threads/permissions/threads.py:1555 +msgctxt "threads permission" +msgid "This category is closed. You can't merge posts in it." +msgstr "" + +#: threads/permissions/threads.py:1562 +msgctxt "threads permission" +msgid "This thread is closed. You can't merge posts in it." +msgstr "" + +#: threads/permissions/threads.py:1573 +msgctxt "threads permission" +msgid "You have to sign in to split posts." +msgstr "" + +#: threads/permissions/threads.py:1583 +msgctxt "threads permission" +msgid "You can't split posts in this category." +msgstr "" + +#: threads/permissions/threads.py:1588 +msgctxt "threads permission" +msgid "Events can't be split." +msgstr "" + +#: threads/permissions/threads.py:1592 +msgctxt "threads permission" +msgid "You can't split thread's first post." +msgstr "" + +#: threads/permissions/threads.py:1597 +msgctxt "threads permission" +msgid "You can't split posts the content you can't see." +msgstr "" + +#: threads/permissions/threads.py:1606 +msgctxt "threads permission" +msgid "This category is closed. You can't split posts in it." +msgstr "" + +#: threads/permissions/threads.py:1613 +msgctxt "threads permission" +msgid "This thread is closed. You can't split posts in it." +msgstr "" + +#: threads/permissions/threads.py:1624 +msgctxt "threads permission" +msgid "You have to sign in to reveal events." +msgstr "" + +#: threads/permissions/threads.py:1634 +msgctxt "threads permission" +msgid "You can't reveal events in this category." +msgstr "" + +#: threads/permissions/threads.py:1643 +msgctxt "threads permission" +msgid "This category is closed. You can't reveal events in it." +msgstr "" + +#: threads/permissions/threads.py:1650 +msgctxt "threads permission" +msgid "This thread is closed. You can't reveal events in it." +msgstr "" + +#: threads/permissions/threads.py:1661 +msgctxt "threads permission" +msgid "You have to sign in to hide events." +msgstr "" + +#: threads/permissions/threads.py:1671 +msgctxt "threads permission" +msgid "You can't hide events in this category." +msgstr "" + +#: threads/permissions/threads.py:1680 +msgctxt "threads permission" +msgid "This category is closed. You can't hide events in it." +msgstr "" + +#: threads/permissions/threads.py:1687 +msgctxt "threads permission" +msgid "This thread is closed. You can't hide events in it." +msgstr "" + +#: threads/permissions/threads.py:1698 +msgctxt "threads permission" +msgid "You have to sign in to delete events." +msgstr "" + +#: threads/permissions/threads.py:1708 +msgctxt "threads permission" +msgid "You can't delete events in this category." +msgstr "" + +#: threads/permissions/threads.py:1717 +msgctxt "threads permission" +msgid "This category is closed. You can't delete events in it." +msgstr "" + +#: threads/permissions/threads.py:1724 +msgctxt "threads permission" +msgid "This thread is closed. You can't delete events in it." +msgstr "" + +#: threads/search.py:16 +msgctxt "search provider" +msgid "Threads" +msgstr "" + +#: threads/serializers/moderation.py:48 +msgctxt "delete posts serializer" +msgid "You have to specify at least one post to delete." +msgstr "" + +#: threads/serializers/moderation.py:57 +msgctxt "delete posts serializer" +msgid "One or more post ids received were invalid." +msgstr "" + +#: threads/serializers/moderation.py:73 +#, python-format +msgctxt "delete posts serializer" +msgid "No more than %(limit)s post can be deleted at a single time." +msgid_plural "No more than %(limit)s posts can be deleted at a single time." +msgstr[0] "" +msgstr[1] "" + +#: threads/serializers/moderation.py:104 +msgctxt "delete posts serializer" +msgid "One or more posts to delete could not be found." +msgstr "" + +#: threads/serializers/moderation.py:113 +msgctxt "merge posts serializer" +msgid "You have to select at least two posts to merge." +msgstr "" + +#: threads/serializers/moderation.py:121 +msgctxt "merge posts serializer" +msgid "One or more post ids received were invalid." +msgstr "" + +#: threads/serializers/moderation.py:140 +#, python-format +msgctxt "merge posts serializer" +msgid "No more than %(limit)s post can be merged at a single time." +msgid_plural "No more than %(limit)s posts can be merged at a single time." +msgstr[0] "" +msgstr[1] "" + +#: threads/serializers/moderation.py:170 +msgctxt "merge posts serializer" +msgid "Posts made by different users can't be merged." +msgstr "" + +#: threads/serializers/moderation.py:185 +msgctxt "merge posts serializer" +msgid "Post marked as best answer can't be merged with thread's first post." +msgstr "" + +#: threads/serializers/moderation.py:197 +msgctxt "merge posts serializer" +msgid "Posts with different visibility can't be merged." +msgstr "" + +#: threads/serializers/moderation.py:207 +msgctxt "merge posts serializer" +msgid "One or more posts to merge could not be found." +msgstr "" + +#: threads/serializers/moderation.py:216 +msgctxt "move posts serializer" +msgid "You have to specify at least one post to move." +msgstr "" + +#: threads/serializers/moderation.py:222 +msgctxt "move posts serializer" +msgid "Enter link to new thread." +msgstr "" + +#: threads/serializers/moderation.py:232 +msgctxt "move posts serializer" +msgid "One or more post ids received were invalid." +msgstr "" + +#: threads/serializers/moderation.py:251 +msgctxt "move posts serializer" +msgid "This is not a valid thread link." +msgstr "" + +#: threads/serializers/moderation.py:257 +msgctxt "move posts serializer" +msgid "Thread to move posts to is same as current one." +msgstr "" + +#: threads/serializers/moderation.py:267 +msgctxt "move posts serializer" +msgid "" +"The thread you have entered link to doesn't exist or you don't have " +"permission to see it." +msgstr "" + +#: threads/serializers/moderation.py:275 +msgctxt "move posts serializer" +msgid "You can't move posts to threads you can't reply." +msgstr "" + +#: threads/serializers/moderation.py:287 +#, python-format +msgctxt "move posts serializer" +msgid "No more than %(limit)s post can be moved at a single time." +msgid_plural "No more than %(limit)s posts can be moved at a single time." +msgstr[0] "" +msgstr[1] "" + +#: threads/serializers/moderation.py:316 +msgctxt "move posts serializer" +msgid "One or more posts to move could not be found." +msgstr "" + +#: threads/serializers/moderation.py:347 +msgctxt "new thread serializer" +msgid "You can't create new threads in selected category." +msgstr "" + +#: threads/serializers/moderation.py:363 +msgctxt "new thread serializer" +msgid "You don't have permission to pin threads globally in this category." +msgstr "" + +#: threads/serializers/moderation.py:370 +msgctxt "new thread serializer" +msgid "You don't have permission to pin threads in this category." +msgstr "" + +#: threads/serializers/moderation.py:385 +msgctxt "new thread serializer" +msgid "You don't have permission to hide threads in this category." +msgstr "" + +#: threads/serializers/moderation.py:400 +msgctxt "new thread serializer" +msgid "You don't have permission to close threads in this category." +msgstr "" + +#: threads/serializers/moderation.py:408 +msgctxt "split posts serializer" +msgid "You have to specify at least one post to split." +msgstr "" + +#: threads/serializers/moderation.py:417 +msgctxt "split posts serializer" +msgid "One or more post ids received were invalid." +msgstr "" + +#: threads/serializers/moderation.py:433 +#, python-format +msgctxt "split posts serializer" +msgid "No more than %(limit)s post can be split at a single time." +msgid_plural "No more than %(limit)s posts can be split at a single time." +msgstr[0] "" +msgstr[1] "" + +#: threads/serializers/moderation.py:463 +msgctxt "split posts serializer" +msgid "One or more posts to split could not be found." +msgstr "" + +#: threads/serializers/moderation.py:473 +msgctxt "delete threads serializer" +msgid "You have to specify at least one thread to delete." +msgstr "" + +#: threads/serializers/moderation.py:482 +msgctxt "delete threads serializer" +msgid "One or more thread ids received were invalid." +msgstr "" + +#: threads/serializers/moderation.py:498 +#, python-format +msgctxt "delete threads serializer" +msgid "No more than %(limit)s thread can be deleted at a single time." +msgid_plural "No more than %(limit)s threads can be deleted at a single time." +msgstr[0] "" +msgstr[1] "" + +#: threads/serializers/moderation.py:532 +msgctxt "delete threads serializer" +msgid "One or more threads to delete could not be found." +msgstr "" + +#: threads/serializers/moderation.py:543 +msgctxt "merge thread serializer" +msgid "Enter link to new thread." +msgstr "" + +#: threads/serializers/moderation.py:550 threads/serializers/moderation.py:556 +msgctxt "merge thread serializer" +msgid "Invalid choice." +msgstr "" + +#: threads/serializers/moderation.py:568 +msgctxt "merge thread serializer" +msgid "This is not a valid thread link." +msgstr "" + +#: threads/serializers/moderation.py:573 +msgctxt "merge thread serializer" +msgid "You can't merge thread with itself." +msgstr "" + +#: threads/serializers/moderation.py:586 +msgctxt "merge thread serializer" +msgid "" +"The thread you have entered link to doesn't exist or you don't have " +"permission to see it." +msgstr "" + +#: threads/serializers/moderation.py:594 +msgctxt "merge thread serializer" +msgid "You can't merge this thread into thread you can't reply." +msgstr "" + +#: threads/serializers/moderation.py:614 +msgctxt "merge threads serializer" +msgid "You have to select at least two threads to merge." +msgstr "" + +#: threads/serializers/moderation.py:624 +msgctxt "merge threads serializer" +msgid "One or more thread ids received were invalid." +msgstr "" + +#: threads/serializers/moderation.py:638 threads/serializers/moderation.py:644 +msgctxt "merge threads serializer" +msgid "Invalid choice." +msgstr "" + +#: threads/serializers/moderation.py:653 +#, python-format +msgctxt "merge threads serializer" +msgid "No more than %(limit)s thread can be merged at a single time." +msgid_plural "No more than %(limit)s threads can be merged at a single time." +msgstr[0] "" +msgstr[1] "" + +#: threads/serializers/moderation.py:679 +msgctxt "merge threads serializer" +msgid "One or more threads to merge could not be found." +msgstr "" + +#: threads/serializers/poll.py:106 +msgctxt "edit poll serializer" +msgid "One or more poll choices are invalid." +msgstr "" + +#: threads/serializers/poll.py:119 +msgctxt "edit poll serializer" +msgid "You need to add at least two choices to a poll." +msgstr "" + +#: threads/serializers/poll.py:127 +#, python-format +msgctxt "edit poll serializer" +msgid "" +"You can't add more than %(limit_value)s option to a single poll (added " +"%(show_value)s)." +msgid_plural "" +"You can't add more than %(limit_value)s options to a single poll (added " +"%(show_value)s)." +msgstr[0] "" +msgstr[1] "" + +#: threads/serializers/poll.py:140 +msgctxt "edit poll serializer" +msgid "Number of allowed choices can't be greater than number of all choices." +msgstr "" + +#: threads/serializers/pollvote.py:15 +#, python-format +msgctxt "new vote serializer" +msgid "This poll disallows voting for more than %(choices)s choice." +msgid_plural "This poll disallows voting for more than %(choices)s choices." +msgstr[0] "" +msgstr[1] "" + +#: threads/serializers/pollvote.py:33 +msgctxt "new vote serializer" +msgid "One or more of poll choices were invalid." +msgstr "" + +#: threads/serializers/pollvote.py:39 +msgctxt "new vote serializer" +msgid "You have to make a choice." +msgstr "" + +#: threads/signals.py:207 +msgctxt "archived poll" +msgid "Question" +msgstr "" + +#: threads/signals.py:208 +msgctxt "archived poll" +msgid "Choices" +msgstr "" + +#: threads/templatetags/misago_poststags.py:16 +#, python-format +msgctxt "post likes message" +msgid "%(user)s likes this." +msgstr "" + +#: threads/templatetags/misago_poststags.py:27 +#, python-format +msgctxt "post likes message" +msgid "%(users)s like this." +msgstr "" + +#: threads/templatetags/misago_poststags.py:33 +#, python-format +msgctxt "post likes message" +msgid "%(users)s and %(likes)s other user like this." +msgid_plural "%(users)s and %(likes)s other users like this." +msgstr[0] "" +msgstr[1] "" + +#: threads/templatetags/misago_poststags.py:45 +#, python-format +msgctxt "post likes message" +msgid "%(users)s and %(last_user)s" +msgstr "" + +#: threads/threadtypes/privatethread.py:12 +msgctxt "private threads category name" +msgid "Private threads" +msgstr "" + +#: threads/threadtypes/thread.py:15 +msgctxt "threads root category name" +msgid "None (will become top level category)" +msgstr "" + +#: threads/validators.py:28 +msgctxt "thread category validator" +msgid "Requested category could not be found." +msgstr "" + +#: threads/validators.py:36 +msgctxt "thread category validator" +msgid "You don't have permission to access this category." +msgstr "" + +#: threads/validators.py:47 +msgctxt "thread title validator" +msgid "Thread title should contain alpha-numeric characters." +msgstr "" + +#: threads/validators.py:50 +msgctxt "thread title validator" +msgid "Thread title is too long." +msgstr "" + +#: threads/validators.py:61 +msgctxt "thread title length validator" +msgid "You have to enter an thread title." +msgstr "" + +#: threads/validators.py:69 +#, python-format +msgctxt "thread title length validator" +msgid "" +"Thread title should be at least %(limit_value)s character long (it has " +"%(show_value)s)." +msgid_plural "" +"Thread title should be at least %(limit_value)s characters long (it has " +"%(show_value)s)." +msgstr[0] "" +msgstr[1] "" + +#: threads/validators.py:82 +#, python-format +msgctxt "thread title length validator" +msgid "" +"Thread title cannot be longer than %(limit_value)s character (it has " +"%(show_value)s)." +msgid_plural "" +"Thread title cannot be longer than %(limit_value)s characters (it has " +"%(show_value)s)." +msgstr[0] "" +msgstr[1] "" + +#: threads/validators.py:97 +msgctxt "post length validator" +msgid "You have to enter a message." +msgstr "" + +#: threads/validators.py:104 +#, python-format +msgctxt "post length validator" +msgid "" +"Posted message should be at least %(limit_value)s character long (it has " +"%(show_value)s)." +msgid_plural "" +"Posted message should be at least %(limit_value)s characters long (it has " +"%(show_value)s)." +msgstr[0] "" +msgstr[1] "" + +#: threads/validators.py:116 +#, python-format +msgctxt "post length validator" +msgid "" +"Posted message cannot be longer than %(limit_value)s character (it has " +"%(show_value)s)." +msgid_plural "" +"Posted message cannot be longer than %(limit_value)s characters (it has " +"%(show_value)s)." +msgstr[0] "" +msgstr[1] "" + +#: threads/viewmodels/thread.py:140 +msgctxt "threads root name" +msgid "Threads" +msgstr "" + +#: threads/viewmodels/thread.py:171 +msgctxt "private threads root name" +msgid "Private threads" +msgstr "" + +#: threads/viewmodels/threads.py:23 +msgctxt "threads list" +msgid "Your threads" +msgstr "" + +#: threads/viewmodels/threads.py:26 +msgctxt "threads list" +msgid "Watched threads" +msgstr "" + +#: threads/viewmodels/threads.py:27 +msgctxt "threads list" +msgid "Unapproved content" +msgstr "" + +#: threads/viewmodels/threads.py:33 +msgctxt "threads list" +msgid "You have to sign in to see list of threads that you have started." +msgstr "" + +#: threads/viewmodels/threads.py:37 +msgctxt "threads list" +msgid "You have to sign in to see list of threads you haven't read." +msgstr "" + +#: threads/viewmodels/threads.py:41 +msgctxt "threads list" +msgid "You have to sign in to see list of threads with new replies." +msgstr "" + +#: threads/viewmodels/threads.py:45 +msgctxt "threads list" +msgid "You have to sign in to see list of threads you are watching." +msgstr "" + +#: threads/viewmodels/threads.py:49 +msgctxt "threads list" +msgid "You have to sign in to see list of threads with unapproved posts." +msgstr "" + +#: threads/viewmodels/threads.py:128 +msgctxt "threads list" +msgid "You don't have permission to see unapproved content lists." +msgstr "" + +#: threads/views/goto.py:130 +msgctxt "thread goto unapproved" +msgid "" +"You need permission to approve content to be able to go to first unapproved " +"post." +msgstr "" + +#: users/admin/__init__.py:81 +msgctxt "admin node" +msgid "Bans" +msgstr "" + +#: users/admin/__init__.py:87 +msgctxt "admin node" +msgid "Data downloads" +msgstr "" + +#: users/admin/__init__.py:94 +msgctxt "admin node" +msgid "Ranks" +msgstr "" + +#: users/admin/djangoadmin.py:42 +msgid "Misago user data" +msgstr "" + +#: users/admin/djangoadmin.py:56 +msgid "Edit permissions and groups" +msgstr "" + +#: users/admin/djangoadmin.py:76 +msgid "Edit the user from Misago admin panel" +msgstr "Szerkessze a felhasználót a Misago adminisztrációs panelból" + +#: users/admin/forms.py:21 +msgctxt "admin user form" +msgid "Username" +msgstr "" + +#: users/admin/forms.py:23 +msgctxt "admin user form" +msgid "Custom title" +msgstr "" + +#: users/admin/forms.py:26 +msgctxt "admin user form" +msgid "E-mail address" +msgstr "" + +#: users/admin/forms.py:62 +msgctxt "admin user form" +msgid "All registered members must have a \"Member\" role." +msgstr "" + +#: users/admin/forms.py:71 +msgctxt "admin user form" +msgid "Password" +msgstr "" + +#: users/admin/forms.py:82 +msgctxt "admin user form" +msgid "Is administrator" +msgstr "" + +#: users/admin/forms.py:85 +msgctxt "admin user form" +msgid "" +"Designates whether the user can log into admin sites. If Django admin site " +"is enabled, this user will need additional permissions assigned within it to" +" admin Django modules." +msgstr "" + +#: users/admin/forms.py:88 +msgctxt "admin user form" +msgid "Is superuser" +msgstr "" + +#: users/admin/forms.py:91 +msgctxt "admin user form" +msgid "" +"Only administrators can access admin sites. In addition to admin site " +"access, superadmins can also change other members admin levels." +msgstr "" + +#: users/admin/forms.py:94 +msgctxt "admin user form" +msgid "Is active" +msgstr "" + +#: users/admin/forms.py:97 +msgctxt "admin user form" +msgid "" +"Designates whether this user should be treated as active. Turning this off " +"is non-destructible way to remove user accounts." +msgstr "" + +#: users/admin/forms.py:100 users/admin/forms.py:130 users/admin/forms.py:161 +msgctxt "admin user form" +msgid "Staff message" +msgstr "" + +#: users/admin/forms.py:103 +msgctxt "admin user form" +msgid "" +"Optional message for forum team members explaining why user's account has " +"been disabled." +msgstr "" + +#: users/admin/forms.py:107 +msgctxt "admin user form" +msgid "Set new password" +msgstr "" + +#: users/admin/forms.py:114 +msgctxt "admin user form" +msgid "Lock avatar changes" +msgstr "" + +#: users/admin/forms.py:117 +msgctxt "admin user form" +msgid "" +"Setting this to yes will stop user from changing their avatar, and will " +"reset their avatar to procedurally generated one." +msgstr "" + +#: users/admin/forms.py:121 users/admin/forms.py:152 +msgctxt "admin user form" +msgid "User message" +msgstr "" + +#: users/admin/forms.py:124 +msgctxt "admin user form" +msgid "" +"Optional message for user explaining why they are banned form changing " +"avatar." +msgstr "" + +#: users/admin/forms.py:133 +msgctxt "admin user form" +msgid "" +"Optional message for forum team members explaining why user is banned form " +"changing avatar." +msgstr "" + +#: users/admin/forms.py:140 +msgctxt "admin user form" +msgid "Signature contents" +msgstr "" + +#: users/admin/forms.py:145 +msgctxt "admin user form" +msgid "Lock signature changes" +msgstr "" + +#: users/admin/forms.py:148 +msgctxt "admin user form" +msgid "" +"Setting this to yes will stop user from making changes to his/her signature." +msgstr "" + +#: users/admin/forms.py:155 +msgctxt "admin user form" +msgid "Optional message to user explaining why his/hers signature is locked." +msgstr "" + +#: users/admin/forms.py:164 +msgctxt "admin user form" +msgid "" +"Optional message to team members explaining why user signature is locked." +msgstr "" + +#: users/admin/forms.py:171 +msgctxt "admin user form" +msgid "Hides presence" +msgstr "" + +#: users/admin/forms.py:175 +msgctxt "admin user form" +msgid "Who can add user to private threads" +msgstr "" + +#: users/admin/forms.py:181 +msgctxt "admin user form" +msgid "Started threads" +msgstr "" + +#: users/admin/forms.py:186 +msgctxt "admin user form" +msgid "Replied threads" +msgstr "" + +#: users/admin/forms.py:194 +msgctxt "admin user form" +msgid "Automatically watch threads that the user has started" +msgstr "" + +#: users/admin/forms.py:202 +msgctxt "admin user form" +msgid "Automatically watch threads that the user has replied to" +msgstr "" + +#: users/admin/forms.py:210 +msgctxt "admin user form" +msgid "" +"Automatically watch private threads that the user was invited to by users " +"they are following" +msgstr "" + +#: users/admin/forms.py:218 +msgctxt "admin user form" +msgid "" +"Automatically watch private threads that the user was invited to by other " +"users" +msgstr "" + +#: users/admin/forms.py:226 +msgctxt "admin user form" +msgid "" +"Notify about new private thread invitations from users this user is " +"following" +msgstr "" + +#: users/admin/forms.py:234 +msgctxt "admin user form" +msgid "Notify about new private thread invitations from other users" +msgstr "" + +#: users/admin/forms.py:287 +#, python-format +msgctxt "admin user form" +msgid "Signature can't be longer than %(limit)s character." +msgid_plural "Signature can't be longer than %(limit)s characters." +msgstr[0] "" +msgstr[1] "" + +#: users/admin/forms.py:304 +msgctxt "admin user form" +msgid "Rank" +msgstr "" + +#: users/admin/forms.py:307 +msgctxt "admin user form" +msgid "" +"Ranks are used to group and distinguish users. They are also used to add " +"permissions to groups of users." +msgstr "" + +#: users/admin/forms.py:316 +msgctxt "admin user form" +msgid "Roles" +msgstr "" + +#: users/admin/forms.py:319 +msgctxt "admin user form" +msgid "Individual roles of this user. All users must have a \"Member\" role." +msgstr "" + +#: users/admin/forms.py:381 +msgctxt "admin users filter form" +msgid "Username" +msgstr "" + +#: users/admin/forms.py:385 +msgctxt "admin users filter form" +msgid "E-mail" +msgstr "" + +#: users/admin/forms.py:389 +msgctxt "admin users filter form" +msgid "Profile fields contain" +msgstr "" + +#: users/admin/forms.py:393 +msgctxt "admin users filter form" +msgid "Requires activation" +msgstr "" + +#: users/admin/forms.py:396 +msgctxt "admin users filter form" +msgid "Account disabled" +msgstr "" + +#: users/admin/forms.py:399 +msgctxt "admin users filter form" +msgid "Administrator" +msgstr "" + +#: users/admin/forms.py:402 +msgctxt "admin users filter form" +msgid "Deletes their account" +msgstr "" + +#: users/admin/forms.py:448 +msgctxt "admin users rank filter choice" +msgid "All ranks" +msgstr "" + +#: users/admin/forms.py:452 +msgctxt "admin users role filter choice" +msgid "All roles" +msgstr "" + +#: users/admin/forms.py:458 +msgctxt "admin users filter form" +msgid "Has rank" +msgstr "" + +#: users/admin/forms.py:464 +msgctxt "admin users filter form" +msgid "Has role" +msgstr "" + +#: users/admin/forms.py:476 +msgctxt "admin rank form" +msgid "Name" +msgstr "" + +#: users/admin/forms.py:480 +msgctxt "admin rank form" +msgid "" +"Short and descriptive name of all users with this rank. \"The Team\" or " +"\"Game Masters\" are good examples." +msgstr "" + +#: users/admin/forms.py:484 +msgctxt "admin rank form" +msgid "User title" +msgstr "" + +#: users/admin/forms.py:488 +msgctxt "admin rank form" +msgid "" +"Optional, singular version of rank name displayed by user names. For example" +" \"GM\" or \"Dev\"." +msgstr "" + +#: users/admin/forms.py:492 +msgctxt "admin rank form" +msgid "Description" +msgstr "" + +#: users/admin/forms.py:498 +msgctxt "admin rank form" +msgid "" +"Optional description explaining function or status of members distincted " +"with this rank." +msgstr "" + +#: users/admin/forms.py:502 +msgctxt "admin rank form" +msgid "User roles" +msgstr "" + +#: users/admin/forms.py:507 +msgctxt "admin rank form" +msgid "Rank can give additional roles to users with it." +msgstr "" + +#: users/admin/forms.py:511 +msgctxt "admin rank form" +msgid "CSS class" +msgstr "" + +#: users/admin/forms.py:515 +msgctxt "admin rank form" +msgid "Optional css class added to content belonging to this rank owner." +msgstr "" + +#: users/admin/forms.py:519 +msgctxt "admin rank form" +msgid "Give rank dedicated tab on users list" +msgstr "" + +#: users/admin/forms.py:523 +msgctxt "admin rank form" +msgid "" +"Selecting this option will make users with this rank easily discoverable by " +"others through dedicated page on forum users list." +msgstr "" + +#: users/admin/forms.py:541 +msgctxt "admin rank form" +msgid "This name collides with other rank." +msgstr "" + +#: users/admin/forms.py:549 +msgctxt "admin ban users form" +msgid "Values to ban" +msgstr "" + +#: users/admin/forms.py:554 +msgctxt "admin ban users form" +msgid "User message" +msgstr "" + +#: users/admin/forms.py:559 +msgctxt "admin ban users form" +msgid "Optional message displayed to users instead of default one." +msgstr "" + +#: users/admin/forms.py:564 users/admin/forms.py:579 +msgctxt "admin ban users form" +msgid "Message can't be longer than 1000 characters." +msgstr "" + +#: users/admin/forms.py:569 +msgctxt "admin ban users form" +msgid "Team message" +msgstr "" + +#: users/admin/forms.py:574 +msgctxt "admin ban users form" +msgid "Optional ban message for moderators and administrators." +msgstr "" + +#: users/admin/forms.py:584 +msgctxt "admin ban users form" +msgid "Expiration date" +msgstr "" + +#: users/admin/forms.py:593 +msgctxt "admin ban users form" +msgid "Usernames" +msgstr "" + +#: users/admin/forms.py:594 +msgctxt "admin ban users form" +msgid "E-mails" +msgstr "" + +#: users/admin/forms.py:595 +msgctxt "admin ban users form" +msgid "E-mail domains" +msgstr "" + +#: users/admin/forms.py:601 +msgctxt "admin ban users form" +msgid "IP addresses" +msgstr "" + +#: users/admin/forms.py:605 +msgctxt "admin ban users form" +msgid "First segment of IP addresses" +msgstr "" + +#: users/admin/forms.py:611 +msgctxt "admin ban users form" +msgid "First two segments of IP addresses" +msgstr "" + +#: users/admin/forms.py:619 +msgctxt "admin ban form" +msgid "Check type" +msgstr "" + +#: users/admin/forms.py:624 +msgctxt "admin ban form" +msgid "Restrict this ban to registrations" +msgstr "" + +#: users/admin/forms.py:627 +msgctxt "admin ban form" +msgid "" +"Changing this to yes will make this ban check be only performed on " +"registration step. This is good if you want to block certain registrations " +"like ones from recently compromised e-mail providers, without harming " +"existing users." +msgstr "" + +#: users/admin/forms.py:631 +msgctxt "admin ban form" +msgid "Banned value" +msgstr "" + +#: users/admin/forms.py:635 +msgctxt "admin ban form" +msgid "" +"This value is case-insensitive and accepts asterisk (*) for partial matches." +" For example, making IP ban for value \"83.*\" will ban all IP addresses " +"beginning with \"83.\"." +msgstr "" + +#: users/admin/forms.py:639 +msgctxt "admin ban form" +msgid "Banned value can't be longer than 250 characters." +msgstr "" + +#: users/admin/forms.py:644 +msgctxt "admin ban form" +msgid "User message" +msgstr "" + +#: users/admin/forms.py:649 +msgctxt "admin ban form" +msgid "Optional message displayed to user instead of default one." +msgstr "" + +#: users/admin/forms.py:654 users/admin/forms.py:668 +msgctxt "admin ban form" +msgid "Message can't be longer than 1000 characters." +msgstr "" + +#: users/admin/forms.py:659 +msgctxt "admin ban form" +msgid "Team message" +msgstr "" + +#: users/admin/forms.py:663 +msgctxt "admin ban form" +msgid "Optional ban message for moderators and administrators." +msgstr "" + +#: users/admin/forms.py:673 +msgctxt "admin ban form" +msgid "Expiration date" +msgstr "" + +#: users/admin/forms.py:695 +msgctxt "admin ban form" +msgid "Banned value is too vague." +msgstr "" + +#: users/admin/forms.py:703 +msgctxt "admin bans filter form" +msgid "Type" +msgstr "" + +#: users/admin/forms.py:706 +msgctxt "admin bans type filter choice" +msgid "All bans" +msgstr "" + +#: users/admin/forms.py:707 +msgctxt "admin bans type filter choice" +msgid "Usernames" +msgstr "" + +#: users/admin/forms.py:708 +msgctxt "admin bans filter form" +msgid "E-mails" +msgstr "" + +#: users/admin/forms.py:709 +msgctxt "admin bans type filter choice" +msgid "IPs" +msgstr "" + +#: users/admin/forms.py:713 +msgctxt "admin bans filter form" +msgid "Banned value begins with" +msgstr "" + +#: users/admin/forms.py:717 +msgctxt "admin bans filter form" +msgid "Registration only" +msgstr "" + +#: users/admin/forms.py:720 +msgctxt "admin bans registration filter choice" +msgid "Any" +msgstr "" + +#: users/admin/forms.py:721 +msgctxt "admin bans registration filter choice" +msgid "Yes" +msgstr "" + +#: users/admin/forms.py:722 +msgctxt "admin bans registration filter choice" +msgid "No" +msgstr "" + +#: users/admin/forms.py:726 +msgctxt "admin bans filter form" +msgid "State" +msgstr "" + +#: users/admin/forms.py:729 +msgctxt "admin bans state filter choice" +msgid "Any" +msgstr "" + +#: users/admin/forms.py:730 +msgctxt "admin bans state filter choice" +msgid "Active" +msgstr "" + +#: users/admin/forms.py:731 +msgctxt "admin bans state filter choice" +msgid "Expired" +msgstr "" + +#: users/admin/forms.py:767 +msgctxt "admin data download request form" +msgid "Usernames or emails" +msgstr "" + +#: users/admin/forms.py:770 +msgctxt "admin data download request form" +msgid "" +"Enter every item in new line. Duplicates will be ignored. This field is case" +" insensitive. Depending on site configuration and amount of data to archive " +"it may take up to few days for requests to complete. E-mail will " +"notification will be sent to every user once their download is ready." +msgstr "" + +#: users/admin/forms.py:784 +#, python-format +msgctxt "admin data download request form" +msgid "" +"You may not enter more than 20 items at a single time (You have entered " +"%(show_value)s)." +msgstr "" + +#: users/admin/forms.py:804 +msgctxt "admin data download request form" +msgid "One or more specified users could not be found." +msgstr "" + +#: users/admin/forms.py:813 +msgctxt "admin data download requests filter form" +msgid "Status" +msgstr "" + +#: users/admin/forms.py:818 +msgctxt "admin data download requests filter form" +msgid "User" +msgstr "" + +#: users/admin/forms.py:822 +msgctxt "admin data download requests filter form" +msgid "Requested by" +msgstr "" + +#: users/admin/views/bans.py:14 +msgctxt "admin bans" +msgid "Requested ban does not exist." +msgstr "" + +#: users/admin/views/bans.py:24 +msgctxt "admin bans ordering choice" +msgid "From newest" +msgstr "" + +#: users/admin/views/bans.py:25 +msgctxt "admin bans ordering choice" +msgid "From oldest" +msgstr "" + +#: users/admin/views/bans.py:26 +msgctxt "admin bans ordering choice" +msgid "A to z" +msgstr "" + +#: users/admin/views/bans.py:27 +msgctxt "admin bans ordering choice" +msgid "Z to a" +msgstr "" + +#: users/admin/views/bans.py:30 +msgctxt "admin bans" +msgid "With bans: 0" +msgstr "" + +#: users/admin/views/bans.py:31 +msgctxt "admin bans" +msgid "Select bans" +msgstr "" + +#: users/admin/views/bans.py:35 +msgctxt "admin bans" +msgid "Remove bans" +msgstr "" + +#: users/admin/views/bans.py:37 +msgctxt "admin bans" +msgid "Are you sure you want to remove those bans?" +msgstr "" + +#: users/admin/views/bans.py:46 +msgctxt "admin bans" +msgid "Selected bans have been removed." +msgstr "" + +#: users/admin/views/bans.py:51 +#, python-format +msgctxt "admin bans" +msgid "New ban \"%(name)s\" has been saved." +msgstr "" + +#: users/admin/views/bans.py:55 +#, python-format +msgctxt "admin bans" +msgid "Ban \"%(name)s\" has been edited." +msgstr "" + +#: users/admin/views/bans.py:62 +#, python-format +msgctxt "admin bans" +msgid "Ban \"%(name)s\" has been removed." +msgstr "" + +#: users/admin/views/datadownloads.py:23 +msgctxt "admin data downloads ordering choice " +msgid "From newest" +msgstr "" + +#: users/admin/views/datadownloads.py:24 +msgctxt "admin data downloads ordering choice " +msgid "From oldest" +msgstr "" + +#: users/admin/views/datadownloads.py:26 +msgctxt "admin data downloads" +msgid "With data downloads: 0" +msgstr "" + +#: users/admin/views/datadownloads.py:28 +msgctxt "admin data downloads" +msgid "Select data downloads" +msgstr "" + +#: users/admin/views/datadownloads.py:33 +msgctxt "admin data downloads" +msgid "Expire downloads" +msgstr "" + +#: users/admin/views/datadownloads.py:36 +msgctxt "admin data downloads" +msgid "Are you sure you want to set selected data downloads as expired?" +msgstr "" + +#: users/admin/views/datadownloads.py:41 +msgctxt "admin data downloads" +msgid "Delete downloads" +msgstr "" + +#: users/admin/views/datadownloads.py:44 +msgctxt "admin data downloads" +msgid "Are you sure you want to delete selected data downloads?" +msgstr "" + +#: users/admin/views/datadownloads.py:62 +msgctxt "admin data downloads" +msgid "Selected data downloads have been set as expired." +msgstr "" + +#: users/admin/views/datadownloads.py:73 +msgctxt "admin data downloads" +msgid "Selected data downloads have been deleted." +msgstr "" + +#: users/admin/views/datadownloads.py:90 +msgctxt "admin data downloads" +msgid "Data downloads have been requested for specified users." +msgstr "" + +#: users/admin/views/ranks.py:16 +msgctxt "admin ranks" +msgid "Requested rank does not exist." +msgstr "" + +#: users/admin/views/ranks.py:33 +#, python-format +msgctxt "admin ranks" +msgid "New rank \"%(name)s\" has been saved." +msgstr "" + +#: users/admin/views/ranks.py:37 +#, python-format +msgctxt "admin ranks" +msgid "Rank \"%(name)s\" has been edited." +msgstr "" + +#: users/admin/views/ranks.py:45 +#, python-format +msgctxt "admin ranks" +msgid "Rank \"%(name)s\" is default rank and can't be deleted." +msgstr "" + +#: users/admin/views/ranks.py:51 +#, python-format +msgctxt "admin ranks" +msgid "Rank \"%(name)s\" is assigned to users and can't be deleted." +msgstr "" + +#: users/admin/views/ranks.py:57 +#, python-format +msgctxt "admin ranks" +msgid "Rank \"%(name)s\" has been deleted." +msgstr "" + +#: users/admin/views/ranks.py:75 +#, python-format +msgctxt "admin ranks" +msgid "Rank \"%(name)s\" has been moved below \"%(other)s\"." +msgstr "" + +#: users/admin/views/ranks.py:95 +#, python-format +msgctxt "admin ranks" +msgid "Rank \"%(name)s\" has been moved above \"%(other)s\"." +msgstr "" + +#: users/admin/views/ranks.py:110 +#, python-format +msgctxt "admin ranks" +msgid "Rank \"%(name)s\" is already default." +msgstr "" + +#: users/admin/views/ranks.py:115 +#, python-format +msgctxt "admin ranks" +msgid "Rank \"%(name)s\" has been made default." +msgstr "" + +#: users/admin/views/users.py:58 +msgctxt "admin users ordering choice" +msgid "From newest" +msgstr "" + +#: users/admin/views/users.py:59 +msgctxt "admin users ordering choice" +msgid "From oldest" +msgstr "" + +#: users/admin/views/users.py:60 +msgctxt "admin users ordering choice" +msgid "A to z" +msgstr "" + +#: users/admin/views/users.py:61 +msgctxt "admin users ordering choice" +msgid "Z to a" +msgstr "" + +#: users/admin/views/users.py:62 +msgctxt "admin users ordering choice" +msgid "Biggest posters" +msgstr "" + +#: users/admin/views/users.py:63 +msgctxt "admin users ordering choice" +msgid "Smallest posters" +msgstr "" + +#: users/admin/views/users.py:65 +msgctxt "admin users" +msgid "With users: 0" +msgstr "" + +#: users/admin/views/users.py:66 +msgctxt "admin users" +msgid "Select users" +msgstr "" + +#: users/admin/views/users.py:70 +msgctxt "admin users" +msgid "Activate accounts" +msgstr "" + +#: users/admin/views/users.py:74 +msgctxt "admin users" +msgid "Ban users" +msgstr "" + +#: users/admin/views/users.py:79 +msgctxt "admin users" +msgid "Request data download" +msgstr "" + +#: users/admin/views/users.py:83 +msgctxt "admin users" +msgid "Delete accounts" +msgstr "" + +#: users/admin/views/users.py:85 +msgctxt "admin users" +msgid "Are you sure you want to delete selected users?" +msgstr "" + +#: users/admin/views/users.py:90 +msgctxt "admin users" +msgid "Delete with content" +msgstr "" + +#: users/admin/views/users.py:93 +msgctxt "admin users" +msgid "" +"Are you sure you want to delete selected users? This will also delete all " +"content associated with their accounts." +msgstr "" + +#: users/admin/views/users.py:113 +msgctxt "admin users" +msgid "You have to select inactive users." +msgstr "" + +#: users/admin/views/users.py:122 +#, python-format +msgctxt "account activated email subject" +msgid "Your account on %(forum_name)s forums has been activated" +msgstr "" + +#: users/admin/views/users.py:135 +msgctxt "admin users" +msgid "Selected users accounts have been activated." +msgstr "" + +#: users/admin/views/users.py:145 +#, python-format +msgctxt "admin users" +msgid "%(user)s is super admin and can't be banned." +msgstr "" + +#: users/admin/views/users.py:209 +msgctxt "admin users" +msgid "Selected users have been banned." +msgstr "" + +#: users/admin/views/users.py:228 +msgctxt "admin users" +msgid "Data download requests have been placed for selected users." +msgstr "" + +#: users/admin/views/users.py:236 users/admin/views/users.py:256 +msgctxt "admin users" +msgid "You can't delete yourself." +msgstr "" + +#: users/admin/views/users.py:240 users/admin/views/users.py:260 +#, python-format +msgctxt "admin users" +msgid "%(user)s is admin and can't be deleted." +msgstr "" + +#: users/admin/views/users.py:249 +msgctxt "admin users" +msgid "Selected users have been deleted." +msgstr "" + +#: users/admin/views/users.py:274 +msgctxt "admin users" +msgid "" +"Selected users have been disabled and queued for deletion together with " +"their content." +msgstr "" + +#: users/admin/views/users.py:283 +#, python-format +msgctxt "admin users" +msgid "New user \"%(user)s\" has been registered." +msgstr "" + +#: users/admin/views/users.py:316 +#, python-format +msgctxt "admin users" +msgid "User \"%(user)s\" has been edited." +msgstr "" + +#: users/api/auth.py:41 +#, python-format +msgctxt "auth api" +msgid "This feature has been disabled. Please use %(provider)s to sign in." +msgstr "" + +#: users/api/auth.py:117 +#, python-format +msgctxt "account activation email subject" +msgid "Activate %(user)s account on %(forum_name)s forums" +msgstr "" + +#: users/api/auth.py:156 +#, python-format +msgctxt "change forgotten password email subject" +msgid "Change %(user)s password on %(forum_name)s forums" +msgstr "" + +#: users/api/auth.py:195 +msgctxt "change forgotten password api" +msgid "Form link is invalid. Please try again." +msgstr "" + +#: users/api/auth.py:199 +msgctxt "change forgotten password api" +msgid "Your link has expired. Please request new one." +msgstr "" + +#: users/api/rest_permissions.py:32 +msgctxt "anonymous api" +msgid "This action is not available to signed in users." +msgstr "" + +#: users/api/userendpoints/avatar.py:27 +msgctxt "avatar api" +msgid "Your avatar is locked. You can't change it." +msgstr "" + +#: users/api/userendpoints/avatar.py:111 +msgctxt "avatar api" +msgid "This avatar type is not allowed." +msgstr "" + +#: users/api/userendpoints/avatar.py:118 +msgctxt "avatar api" +msgid "Unknown avatar type." +msgstr "" + +#: users/api/userendpoints/avatar.py:140 +msgctxt "avatar api" +msgid "New avatar based on your account was set." +msgstr "" + +#: users/api/userendpoints/avatar.py:146 +msgctxt "avatar api" +msgid "Gravatar was downloaded and set as new avatar." +msgstr "" + +#: users/api/userendpoints/avatar.py:150 +msgctxt "avatar api" +msgid "No Gravatar is associated with your e-mail address." +msgstr "" + +#: users/api/userendpoints/avatar.py:155 +msgctxt "avatar api" +msgid "Failed to connect to Gravatar servers." +msgstr "" + +#: users/api/userendpoints/avatar.py:166 +msgctxt "avatar api" +msgid "Avatar from gallery was set." +msgstr "" + +#: users/api/userendpoints/avatar.py:168 +msgctxt "avatar api" +msgid "Incorrect image." +msgstr "" + +#: users/api/userendpoints/avatar.py:174 +msgctxt "avatar api" +msgid "No file was sent." +msgstr "" + +#: users/api/userendpoints/avatar.py:187 +msgctxt "avatar api" +msgid "Avatar was re-cropped." +msgstr "" + +#: users/api/userendpoints/avatar.py:192 +msgctxt "avatar api" +msgid "Uploaded avatar was set." +msgstr "" + +#: users/api/userendpoints/changeemail.py:24 +#, python-format +msgctxt "confirm email change email subject" +msgid "Confirm e-mail change on %(forum_name)s forums" +msgstr "" + +#: users/api/userendpoints/changeemail.py:40 +msgctxt "change email api" +msgid "E-mail change confirmation link was sent to new address." +msgstr "" + +#: users/api/userendpoints/changepassword.py:24 +#, python-format +msgctxt "confirm password change email subject" +msgid "Confirm password change on %(forum_name)s forums" +msgstr "" + +#: users/api/userendpoints/changepassword.py:39 +msgctxt "change password api" +msgid "Password change confirmation link was sent to your address." +msgstr "" + +#: users/api/userendpoints/create.py:27 +msgctxt "user register api" +msgid "New users registrations are currently closed." +msgstr "" + +#: users/api/userendpoints/create.py:66 +msgctxt "user register api" +msgid "Please try resubmitting the form." +msgstr "" + +#: users/api/userendpoints/signature.py:16 +msgctxt "signature api" +msgid "You don't have permission to change signature." +msgstr "" + +#: users/api/userendpoints/signature.py:32 +msgctxt "signature api" +msgid "Your signature is locked. You can't change it." +msgstr "" + +#: users/api/userendpoints/username.py:35 +msgctxt "change username api" +msgid "You can't change your username now." +msgstr "" + +#: users/api/userendpoints/username.py:69 +#: users/api/userendpoints/username.py:96 +msgctxt "change username api" +msgid "Error changing username. Please try again." +msgstr "" + +#: users/api/usernamechanges.py:30 +msgctxt "username history api" +msgid "You don't have permission to see other users name history." +msgstr "" + +#: users/api/users.py:65 +msgctxt "users api" +msgid "You have to sign in to perform this action." +msgstr "" + +#: users/api/users.py:95 +#, python-format +msgctxt "users api" +msgid "This feature has been disabled. Please use %(provider)s to sign in." +msgstr "" + +#: users/api/users.py:124 +msgctxt "users api" +msgid "You can't change other users avatars." +msgstr "" + +#: users/api/users.py:140 +msgctxt "users api" +msgid "You can't change other users options." +msgstr "" + +#: users/api/users.py:149 +msgctxt "users api" +msgid "Your forum options have been changed." +msgstr "" + +#: users/api/users.py:161 +#, python-format +msgctxt "users api" +msgid "" +"This feature has been disabled. Please use %(provider)s to change your name." +msgstr "" + +#: users/api/users.py:170 +msgctxt "users api" +msgid "You can't change other users names." +msgstr "" + +#: users/api/users.py:181 +msgctxt "users api" +msgid "You can't change other users signatures." +msgstr "" + +#: users/api/users.py:197 +#, python-format +msgctxt "users api" +msgid "" +"This feature has been disabled. Please use %(provider)s to change your " +"password." +msgstr "" + +#: users/api/users.py:206 +msgctxt "users api" +msgid "You can't change other users passwords." +msgstr "" + +#: users/api/users.py:222 +#, python-format +msgctxt "users api" +msgid "" +"This feature has been disabled. Please use %(provider)s to change your " +"e-mail." +msgstr "" + +#: users/api/users.py:231 +msgctxt "users api" +msgid "You can't change other users e-mail addresses." +msgstr "" + +#: users/api/users.py:264 +#, python-format +msgctxt "users api" +msgid "" +"This feature has been disabled. Please use %(provider)s to delete your " +"account." +msgstr "" + +#: users/api/users.py:349 +msgctxt "users api" +msgid "You can't request data downloads for other users." +msgstr "" + +#: users/api/users.py:354 +msgctxt "users api" +msgid "You can't download your data." +msgstr "" + +#: users/api/users.py:361 +msgctxt "users api" +msgid "You can't have more than one data download request at a single time." +msgstr "" + +#: users/api/users.py:420 +msgctxt "users api" +msgid "You can't see other users data downloads." +msgstr "" + +#: users/apps.py:26 +msgctxt "user options page" +msgid "Forum options" +msgstr "" + +#: users/apps.py:32 +msgctxt "user options page" +msgid "Edit details" +msgstr "" + +#: users/apps.py:38 +msgctxt "user options page" +msgid "Change username" +msgstr "" + +#: users/apps.py:45 +msgctxt "user options page" +msgid "Change email or password" +msgstr "" + +#: users/apps.py:56 +msgctxt "user options page" +msgid "Download data" +msgstr "" + +#: users/apps.py:70 +msgctxt "user options page" +msgid "Delete account" +msgstr "" + +#: users/apps.py:80 +msgctxt "users lists page" +msgid "Top posters" +msgstr "" + +#: users/apps.py:102 +msgctxt "user profile page" +msgid "Posts" +msgstr "" + +#: users/apps.py:108 +msgctxt "user profile page" +msgid "Threads" +msgstr "" + +#: users/apps.py:114 +msgctxt "user profile page" +msgid "Followers" +msgstr "" + +#: users/apps.py:120 +msgctxt "user profile page" +msgid "Follows" +msgstr "" + +#: users/apps.py:126 +msgctxt "user profile page" +msgid "Details" +msgstr "" + +#: users/apps.py:132 +msgctxt "user profile page" +msgid "Username history" +msgstr "" + +#: users/apps.py:139 +msgctxt "user profile page" +msgid "Ban details" +msgstr "" + +#: users/avatars/uploaded.py:39 +msgctxt "avatar upload size validator" +msgid "Uploaded file is too big." +msgstr "" + +#: users/avatars/uploaded.py:51 +msgctxt "avatar upload extension validator" +msgid "Uploaded file type is not allowed." +msgstr "" + +#: users/avatars/uploaded.py:61 +msgctxt "avatar upload mimetype validator" +msgid "Uploaded file type is not allowed." +msgstr "" + +#: users/avatars/uploaded.py:73 +#, python-format +msgctxt "avatar upload dimensions validator" +msgid "Uploaded image should be at least %(size)s pixels tall and wide." +msgstr "" + +#: users/avatars/uploaded.py:80 +msgctxt "avatar upload dimensions validator" +msgid "Uploaded image is too big." +msgstr "" + +#: users/avatars/uploaded.py:88 +msgctxt "avatar upload dimensions validator" +msgid "Uploaded image ratio cannot be greater than 16:9." +msgstr "" + +#: users/avatars/uploaded.py:97 +msgctxt "avatar upload crop validator" +msgid "Crop data is invalid. Please try again." +msgstr "" + +#: users/captcha.py:19 +msgctxt "recaptcha check" +msgid "Please try again." +msgstr "" + +#: users/captcha.py:22 +msgctxt "recaptcha check" +msgid "Failed to contact reCAPTCHA API." +msgstr "" + +#: users/captcha.py:31 +msgctxt "qacaptcha check" +msgid "Entered answer is incorrect." +msgstr "" + +#: users/decorators.py:20 +msgctxt "block authenticated decorator" +msgid "This page is not available to signed in users." +msgstr "" + +#: users/decorators.py:37 +msgctxt "block guests decorator" +msgid "You have to sign in to access this page." +msgstr "" + +#: users/forms/auth.py:15 +msgctxt "auth form" +msgid "Fill out both fields." +msgstr "" + +#: users/forms/auth.py:16 +msgctxt "auth form" +msgid "Login or password is incorrect." +msgstr "" + +#: users/forms/auth.py:19 +msgctxt "auth form" +msgid "You have to activate your account before you will be able to sign in." +msgstr "" + +#: users/forms/auth.py:23 +msgctxt "auth form" +msgid "" +"Your account has to be activated by site administrator before you will be " +"able to sign in." +msgstr "" + +#: users/forms/auth.py:61 +msgctxt "login form" +msgid "Username or e-mail" +msgstr "" + +#: users/forms/auth.py:66 +msgctxt "login form" +msgid "Password" +msgstr "" + +#: users/forms/auth.py:106 +msgctxt "admin login form" +msgid "Your account does not have admin privileges." +msgstr "" + +#: users/forms/auth.py:129 +msgctxt "auth email form" +msgid "Enter e-mail address." +msgstr "" + +#: users/forms/auth.py:137 +msgctxt "auth email form" +msgid "Entered e-mail is invalid." +msgstr "" + +#: users/forms/auth.py:148 +msgctxt "auth email form" +msgid "No user with this e-mail exists." +msgstr "" + +#: users/forms/auth.py:166 +#, python-format +msgctxt "resend activation form" +msgid "%(user)s, your account is already active." +msgstr "" + +#: users/forms/auth.py:175 +#, python-format +msgctxt "resend activation form" +msgid "%(user)s, only administrator may activate your account." +msgstr "" + +#: users/forms/auth.py:186 +msgctxt "reset password form" +msgid "" +"You have to activate your account before you will be able to request new " +"password." +msgstr "" + +#: users/forms/auth.py:190 +msgctxt "reset password form" +msgid "" +"Administrator has to activate your account before you will be able to " +"request new password." +msgstr "" + +#: users/forms/register.py:35 +msgctxt "register form" +msgid "This username is not allowed." +msgstr "" + +#: users/forms/register.py:48 +msgctxt "register form" +msgid "This e-mail address is not allowed." +msgstr "" + +#: users/forms/register.py:56 +msgctxt "register form" +msgid "This agreement is required." +msgstr "" + +#: users/forms/register.py:69 +msgctxt "register form" +msgid "New registrations from this IP address are not allowed." +msgstr "" + +#: users/management/commands/prepareuserdatadownloads.py:39 +#, python-format +msgctxt "data download ready email subject" +msgid "%(user)s, your data download is ready" +msgstr "" + +#: users/migrations/0004_default_ranks.py:12 +#: users/migrations/0004_default_ranks.py:13 +msgctxt "rank name" +msgid "Forum team" +msgstr "" + +#: users/migrations/0004_default_ranks.py:14 +msgctxt "rank name" +msgid "Team" +msgstr "" + +#: users/migrations/0004_default_ranks.py:21 +#: users/migrations/0004_default_ranks.py:22 +msgctxt "rank name" +msgid "Members" +msgstr "" + +#: users/models/ban.py:71 +msgctxt "ban type choice" +msgid "Username" +msgstr "" + +#: users/models/ban.py:72 +msgctxt "ban type choice" +msgid "E-mail address" +msgstr "" + +#: users/models/ban.py:73 +msgctxt "ban type choice" +msgid "IP address" +msgstr "" + +#: users/models/datadownload.py:28 +msgctxt "user data download status" +msgid "Pending" +msgstr "" + +#: users/models/datadownload.py:32 +msgctxt "user data download status" +msgid "Processing" +msgstr "" + +#: users/models/datadownload.py:36 +msgctxt "user data download status" +msgid "Ready" +msgstr "" + +#: users/models/datadownload.py:40 +msgctxt "user data download status" +msgid "Expired" +msgstr "" + +#: users/models/deleteduser.py:12 +msgctxt "user deleted by" +msgid "By self" +msgstr "" + +#: users/models/deleteduser.py:13 +msgctxt "user deleted by" +msgid "By staff" +msgstr "" + +#: users/models/deleteduser.py:14 +msgctxt "user deleted by" +msgid "By system" +msgstr "" + +#: users/models/user.py:80 +msgctxt "default rank" +msgid "Forum team" +msgstr "" + +#: users/models/user.py:114 +msgctxt "user default subscription choice" +msgid "No" +msgstr "" + +#: users/models/user.py:118 +msgctxt "user default subscription choice" +msgid "Notify" +msgstr "" + +#: users/models/user.py:122 +msgctxt "user default subscription choice" +msgid "Notify with e-mail" +msgstr "" + +#: users/models/user.py:133 +msgctxt "user default invites choice" +msgid "Everybody" +msgstr "" + +#: users/models/user.py:137 +msgctxt "user default invites choice" +msgid "Users I follow" +msgstr "" + +#: users/models/user.py:141 +msgctxt "user default invites choice" +msgid "Nobody" +msgstr "" + +#: users/models/user.py:161 +msgctxt "user" +msgid "joined on" +msgstr "" + +#: users/models/user.py:173 +msgctxt "user" +msgid "staff status" +msgstr "" + +#: users/models/user.py:176 +msgctxt "user" +msgid "Designates whether the user can log into admin sites." +msgstr "" + +#: users/models/user.py:184 +msgctxt "user" +msgid "active" +msgstr "" + +#: users/models/user.py:189 +msgctxt "user" +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +#: users/permissions/account.py:10 +msgctxt "users accounts permission" +msgid "Account settings" +msgstr "" + +#: users/permissions/account.py:14 +msgctxt "users accounts permission" +msgid "Allowed username changes number" +msgstr "" + +#: users/permissions/account.py:21 +msgctxt "users accounts permission" +msgid "Don't count username changes older than" +msgstr "" + +#: users/permissions/account.py:25 +msgctxt "users accounts permission" +msgid "" +"Number of days since name change that makes that change no longer count to " +"limit. Enter zero to make all changes count." +msgstr "" + +#: users/permissions/account.py:31 +msgctxt "users accounts permission" +msgid "Can have signature" +msgstr "" + +#: users/permissions/account.py:34 +msgctxt "users accounts permission" +msgid "Can put links in signature" +msgstr "" + +#: users/permissions/account.py:37 +msgctxt "users accounts permission" +msgid "Can put images in signature" +msgstr "" + +#: users/permissions/account.py:41 +msgctxt "users accounts permission" +msgid "Can use text blocks in signature" +msgstr "" + +#: users/permissions/account.py:45 +msgctxt "users accounts permission" +msgid "" +"Controls whether or not users can put quote, code, spoiler blocks and " +"horizontal lines in signatures." +msgstr "" + +#: users/permissions/decorators.py:12 +msgctxt "view decorator" +msgid "You have to sign in to perform this action." +msgstr "" + +#: users/permissions/decorators.py:24 +msgctxt "view decorator" +msgid "Only guests can perform this action." +msgstr "" + +#: users/permissions/delete.py:22 +msgctxt "users delete permission" +msgid "Deleting users" +msgstr "" + +#: users/permissions/delete.py:26 +msgctxt "users delete permission" +msgid "Maximum age of deleted account (in days)" +msgstr "" + +#: users/permissions/delete.py:29 users/permissions/delete.py:39 +msgctxt "users delete permission" +msgid "Enter zero to disable this check." +msgstr "" + +#: users/permissions/delete.py:36 +msgctxt "users delete permission" +msgid "Maximum number of posts on deleted account" +msgstr "" + +#: users/permissions/delete.py:82 +msgctxt "users delete permission" +msgid "You can't delete users." +msgstr "" + +#: users/permissions/delete.py:87 users/permissions/delete.py:126 +msgctxt "users delete permission" +msgid "You can't delete your account." +msgstr "" + +#: users/permissions/delete.py:91 +msgctxt "users delete permission" +msgid "You can't delete administrators." +msgstr "" + +#: users/permissions/delete.py:98 +#, python-format +msgctxt "users delete permission" +msgid "You can't delete users that are members for more than %(days)s day." +msgid_plural "" +"You can't delete users that are members for more than %(days)s days." +msgstr[0] "" +msgstr[1] "" + +#: users/permissions/delete.py:107 +#, python-format +msgctxt "users delete permission" +msgid "You can't delete users that made more than %(posts)s post." +msgid_plural "You can't delete users that made more than %(posts)s posts." +msgstr[0] "" +msgstr[1] "" + +#: users/permissions/delete.py:121 +msgctxt "users delete permission" +msgid "You can't delete other users accounts." +msgstr "" + +#: users/permissions/delete.py:132 +msgctxt "users delete permission" +msgid "You can't delete your account because you are an administrator." +msgstr "" + +#: users/permissions/moderation.py:33 +msgctxt "users moderation permission" +msgid "Users moderation" +msgstr "" + +#: users/permissions/moderation.py:36 +msgctxt "users moderation permission" +msgid "Can rename users" +msgstr "" + +#: users/permissions/moderation.py:39 +msgctxt "users moderation permission" +msgid "Can moderate avatars" +msgstr "" + +#: users/permissions/moderation.py:42 +msgctxt "users moderation permission" +msgid "Can moderate signatures" +msgstr "" + +#: users/permissions/moderation.py:46 +msgctxt "users moderation permission" +msgid "Can moderate profile details" +msgstr "" + +#: users/permissions/moderation.py:50 +msgctxt "users moderation permission" +msgid "Can ban users" +msgstr "" + +#: users/permissions/moderation.py:54 +msgctxt "users moderation permission" +msgid "Max length, in days, of imposed ban" +msgstr "" + +#: users/permissions/moderation.py:58 +msgctxt "users moderation permission" +msgid "Enter zero to let moderators impose permanent bans." +msgstr "" + +#: users/permissions/moderation.py:64 +msgctxt "users moderation permission" +msgid "Can lift bans" +msgstr "" + +#: users/permissions/moderation.py:68 +msgctxt "users moderation permission" +msgid "Max length, in days, of lifted ban" +msgstr "" + +#: users/permissions/moderation.py:72 +msgctxt "users moderation permission" +msgid "Enter zero to let moderators lift permanent bans." +msgstr "" + +#: users/permissions/moderation.py:136 +msgctxt "users moderation permission" +msgid "You can't rename users." +msgstr "" + +#: users/permissions/moderation.py:141 +msgctxt "users moderation permission" +msgid "You can't rename administrators." +msgstr "" + +#: users/permissions/moderation.py:152 +msgctxt "users moderation permission" +msgid "You can't moderate avatars." +msgstr "" + +#: users/permissions/moderation.py:158 +msgctxt "users moderation permission" +msgid "You can't moderate administrators avatars." +msgstr "" + +#: users/permissions/moderation.py:170 +msgctxt "users moderation permission" +msgid "You can't moderate signatures." +msgstr "" + +#: users/permissions/moderation.py:176 +msgctxt "users moderation permission" +msgid "You can't moderate administrators signatures." +msgstr "" + +#: users/permissions/moderation.py:189 +msgctxt "users moderation permission" +msgid "You have to sign in to edit profile details." +msgstr "" + +#: users/permissions/moderation.py:198 +msgctxt "users moderation permission" +msgid "You can't edit other users details." +msgstr "" + +#: users/permissions/moderation.py:203 +msgctxt "users moderation permission" +msgid "You can't edit administrators details." +msgstr "" + +#: users/permissions/moderation.py:214 +msgctxt "users moderation permission" +msgid "You can't ban users." +msgstr "" + +#: users/permissions/moderation.py:219 +msgctxt "users moderation permission" +msgid "You can't ban administrators." +msgstr "" + +#: users/permissions/moderation.py:230 +msgctxt "users moderation permission" +msgid "You can't lift bans." +msgstr "" + +#: users/permissions/moderation.py:235 +msgctxt "users moderation permission" +msgid "This user is not banned." +msgstr "" + +#: users/permissions/moderation.py:243 +msgctxt "users moderation permission" +msgid "You can't lift permanent bans." +msgstr "" + +#: users/permissions/moderation.py:249 +#, python-format +msgctxt "users moderation permission" +msgid "You can't lift bans that expire after %(expiration)s." +msgstr "" + +#: users/permissions/profiles.py:24 +msgctxt "users profiles permission" +msgid "Can browse users list" +msgstr "" + +#: users/permissions/profiles.py:27 +msgctxt "users profiles permission" +msgid "Can search user profiles" +msgstr "" + +#: users/permissions/profiles.py:32 +msgctxt "users profiles permission" +msgid "Can see other members name history" +msgstr "" + +#: users/permissions/profiles.py:36 +msgctxt "users profiles permission" +msgid "Can see members bans details" +msgstr "" + +#: users/permissions/profiles.py:39 +msgctxt "users profiles permission" +msgid "Allows users with this permission to see user and staff ban messages." +msgstr "" + +#: users/permissions/profiles.py:45 +msgctxt "users profiles permission" +msgid "User profiles" +msgstr "" + +#: users/permissions/profiles.py:57 +msgctxt "users profiles permission" +msgid "Can follow other users" +msgstr "" + +#: users/permissions/profiles.py:62 +msgctxt "users profiles permission" +msgid "Can be blocked by other users" +msgstr "" + +#: users/permissions/profiles.py:69 +msgctxt "users profiles permission" +msgid "Can see members e-mails" +msgstr "" + +#: users/permissions/profiles.py:72 +msgctxt "users profiles permission" +msgid "Can see members IPs" +msgstr "" + +#: users/permissions/profiles.py:76 +msgctxt "users profiles permission" +msgid "Can see members that hide their presence" +msgstr "" + +#: users/permissions/profiles.py:138 +msgctxt "users profiles permission" +msgid "You can't browse users list." +msgstr "" + +#: users/permissions/profiles.py:149 +msgctxt "users profiles permission" +msgid "You can't follow other users." +msgstr "" + +#: users/permissions/profiles.py:154 +msgctxt "users profiles permission" +msgid "You can't add yourself to followed." +msgstr "" + +#: users/permissions/profiles.py:167 +msgctxt "users profiles permission" +msgid "You can't block administrators." +msgstr "" + +#: users/permissions/profiles.py:172 +msgctxt "users profiles permission" +msgid "You can't block yourself." +msgstr "" + +#: users/permissions/profiles.py:185 +msgctxt "users profiles permission" +msgid "You can't see users bans details." +msgstr "" + +#: users/profilefields/default.py:11 +msgctxt "bio profile field" +msgid "Bio" +msgstr "" + +#: users/profilefields/default.py:16 +msgctxt "real_name profile field" +msgid "Real name" +msgstr "" + +#: users/profilefields/default.py:21 +msgctxt "location profile field" +msgid "Location" +msgstr "" + +#: users/profilefields/default.py:26 +msgctxt "gender profile field" +msgid "Gender" +msgstr "" + +#: users/profilefields/default.py:29 +msgctxt "gender profile field choice" +msgid "Not specified" +msgstr "" + +#: users/profilefields/default.py:30 +msgctxt "gender profile field choice" +msgid "Not telling" +msgstr "" + +#: users/profilefields/default.py:31 +msgctxt "gender profile field choice" +msgid "Female" +msgstr "" + +#: users/profilefields/default.py:32 +msgctxt "gender profile field choice" +msgid "Male" +msgstr "" + +#: users/profilefields/default.py:33 +msgctxt "gender profile field choice" +msgid "Non-binary" +msgstr "" + +#: users/profilefields/default.py:39 +msgctxt "website profile field" +msgid "Website" +msgstr "" + +#: users/profilefields/default.py:42 +msgctxt "website profile field" +msgid "" +"If you own website in the internet you wish to share on your profile you may" +" enter its address here. Remember to for it to be valid http address " +"starting with either \"http://\" or \"https://\"." +msgstr "" + +#: users/profilefields/default.py:48 +msgctxt "skype id profile field" +msgid "Skype ID" +msgstr "" + +#: users/profilefields/default.py:51 +msgctxt "skype id profile field" +msgid "" +"Entering your Skype ID in this field may invite other users to contact you " +"over the Skype instead of via private threads." +msgstr "" + +#: users/profilefields/default.py:57 +msgctxt "twitter handle profile field" +msgid "Twitter handle" +msgstr "" + +#: users/profilefields/default.py:62 +#, python-format +msgctxt "twitter handle profile field" +msgid "" +"If you own Twitter account, here you may enter your Twitter handle for other" +" users to find you. Starting your handle with \"@\" sign is optional. Either" +" \"@%(slug)s\" or \"%(slug)s\" are valid values." +msgstr "" + +#: users/profilefields/default.py:74 +msgctxt "twitter handle profile field" +msgid "This is not a valid twitter handle." +msgstr "" + +#: users/profilefields/default.py:82 +msgctxt "join ip profile field" +msgid "Join IP" +msgstr "" + +#: users/registration.py:13 +#, python-format +msgctxt "welcome email subject" +msgid "Welcome on %(forum_name)s forums!" +msgstr "" + +#: users/search.py:16 +msgctxt "search provider" +msgid "Users" +msgstr "" + +#: users/search.py:23 +msgctxt "search users" +msgid "You don't have permission to search users." +msgstr "" + +#: users/serializers/ban.py:26 +msgctxt "ban message" +msgid "Your IP address is banned." +msgstr "" + +#: users/serializers/ban.py:28 +msgctxt "ban message" +msgid "You are banned." +msgstr "" + +#: users/serializers/moderation.py:37 +#, python-format +msgctxt "signature length validator" +msgid "Signature can't be longer than %(limit)s character." +msgid_plural "Signature can't be longer than %(limit)s characters." +msgstr[0] "" +msgstr[1] "" + +#: users/serializers/options.py:55 +msgctxt "edit signature serializer" +msgid "Signature is too long." +msgstr "" + +#: users/serializers/options.py:68 +msgctxt "change username serializer" +msgid "Enter new username." +msgstr "" + +#: users/serializers/options.py:75 +msgctxt "change username serializer" +msgid "New username is same as current one." +msgstr "" + +#: users/serializers/options.py:97 +msgctxt "change password serializer" +msgid "Entered password is invalid." +msgstr "" + +#: users/serializers/options.py:113 +msgctxt "change email serializer" +msgid "Entered password is invalid." +msgstr "" + +#: users/serializers/options.py:121 +msgctxt "change email serializer" +msgid "You have to enter new e-mail address." +msgstr "" + +#: users/serializers/options.py:128 +msgctxt "change email serializer" +msgid "New e-mail is same as current one." +msgstr "" + +#: users/serializers/options.py:144 +msgctxt "delete own account serializer" +msgid "Entered password is invalid." +msgstr "" + +#: users/signals.py:27 +msgctxt "archived user details" +msgid "Username" +msgstr "" + +#: users/signals.py:28 +msgctxt "archived user details" +msgid "E-mail" +msgstr "" + +#: users/signals.py:29 +msgctxt "archived user details" +msgid "Joined on" +msgstr "" + +#: users/signals.py:30 +msgctxt "archived user details" +msgid "Joined from ip" +msgstr "" + +#: users/signals.py:73 +msgctxt "archived username history" +msgid "New username" +msgstr "" + +#: users/signals.py:76 +msgctxt "archived username history" +msgid "Old username" +msgstr "" + +#: users/validators.py:42 +msgctxt "user email validator" +msgid "This e-mail address is not available." +msgstr "" + +#: users/validators.py:58 +msgctxt "user email validator" +msgid "This e-mail address is not allowed." +msgstr "" + +#: users/validators.py:77 +msgctxt "username validator" +msgid "This username is not available." +msgstr "" + +#: users/validators.py:91 +msgctxt "username validator" +msgid "This username is not allowed." +msgstr "" + +#: users/validators.py:100 +msgctxt "username validator" +msgid "" +"Username can only contain Latin alphabet letters, digits, and an underscore " +"sign." +msgstr "" + +#: users/validators.py:108 +msgctxt "username validator" +msgid "Username must contain Latin alphabet letters or digits." +msgstr "" + +#: users/validators.py:117 +#, python-format +msgctxt "username length validator" +msgid "Username must be at least %(limit_value)s character long." +msgid_plural "Username must be at least %(limit_value)s characters long." +msgstr[0] "" +msgstr[1] "" + +#: users/validators.py:126 +#, python-format +msgctxt "username length validator" +msgid "Username cannot be longer than %(limit_value)s characters." +msgid_plural "Username cannot be longer than %(limit_value)s characters." +msgstr[0] "" +msgstr[1] "" + +#: users/validators.py:165 +msgctxt "stop forum spam validator" +msgid "Data entered was found in spammers database." +msgstr "" + +#: users/validators.py:180 +msgctxt "gmail email validator" +msgid "This email is not allowed." +msgstr "" + +#: users/views/activation.py:23 +#, python-format +msgctxt "activate account" +msgid "Please use %(provider)s to activate your account." +msgstr "" + +#: users/views/activation.py:57 +#, python-format +msgctxt "activate account with token" +msgid "%(user)s, your account is already active." +msgstr "" + +#: users/views/activation.py:64 +#, python-format +msgctxt "activate account with token" +msgid "" +"%(user)s, your activation link is invalid. Try again or request new " +"activation link." +msgstr "" + +#: users/views/activation.py:82 +#, python-format +msgctxt "activate account with token" +msgid "%(user)s, your account has been activated!" +msgstr "" + +#: users/views/auth.py:21 +#, python-format +msgctxt "login" +msgid "Please use %(provider)s to sign in." +msgstr "" + +#: users/views/forgottenpassword.py:17 users/views/forgottenpassword.py:35 +#, python-format +msgctxt "user password" +msgid "Please use %(provider)s to reset your password." +msgstr "" + +#: users/views/forgottenpassword.py:45 +#, python-format +msgctxt "user password" +msgid "" +"%(user)s, your link has expired. Please request new link and try again." +msgstr "" + +#: users/views/forgottenpassword.py:52 +#, python-format +msgctxt "user password" +msgid "%(user)s, your link is invalid. Please try again or request new link." +msgstr "" + +#: users/views/options.py:48 +#, python-format +msgctxt "user options" +msgid "Please use %(provider)s to change your e-mail." +msgstr "" + +#: users/views/options.py:62 +#, python-format +msgctxt "user options" +msgid "%(user)s, your e-mail has been changed." +msgstr "" + +#: users/views/options.py:74 +#, python-format +msgctxt "user options" +msgid "Please use %(provider)s to change your password." +msgstr "" + +#: users/views/options.py:86 +#, python-format +msgctxt "user options" +msgid "%(user)s, your password has been changed." +msgstr "" diff --git a/misago/locale/pl/LC_MESSAGES/django.mo b/misago/locale/pl/LC_MESSAGES/django.mo index 0dac363c38e9defaea588f8511ae3212b5fd836c..63f992bfaa041dcfebf224eab821ce1fb70f1051 100644 GIT binary patch literal 145773 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

;I{GaD%{BWwrE`Ixt4Mk7#w-LVY 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 ZgUcQIGRO-9N#_NmYd?-M?s<3g{{iXr17QFF delta 1243 zcmZ9~TWC~A7{KvwVl)@6rcu{RVmw;4i5P<@CU=f`zp7sUnS~G-w|BQf)z6s0yM%@*rxw{lBxp2S4_l-^@8@=kk5? zcsP4#PRHH+%x{D!;VR_XYedTNN(MLL)EJQ*JdKO72N&X>xE){N4y?%(nT0>#M>vQx za2RLfgt6)VB3w>?BTg6TkS}S}@W5jg4q+76juWZJudo20VG&NrO81vyKz|F)#b#tc zaX1aH;1axnQ}HQ=3&~~-`in5a{8B+fSGpa`Fon9qZY;%HqmEz&{Swll12$p=520q} z6zYV(qh|6sYDOZtBDrL98S+ThOc0rao3M!arICiF@HkfE|EM3X{2)ESdL$`Qhh$SM zk_@TGW!N|~G#Qjlo^U|4KoJamSKk_*b)ZM6mtjGD- ziCUT;QENAdoX@bn`Ka+Bm)28*@x#zfXy~GKK{}S69S!yvmWPTEy3yV8j?y<|-& zbvR)O>P|JZ1iCnlVlLeo>j`TNGLK8MprN~65Vq1A(}Srsr?O#a)-?j1;QipBhUEyK zZ%*!wrEF_5<@Ox4ZpWpG?m$nUn>U>2CSAyK$(}5C@8W9r=)1u6eP8MRy)?tk?A_J( zPp>iV@Z}2A;>xZSyPpP+xX#<3v6hINh4`*MBt;KlzxM>o=S=S93nuXIpHruBys6oHIq4 zTbko7e&>0!Dl=-^+kCXkeCA(tnLqsOZ%x6tZLucXdeGm!Y6^Yui>dVO{U#`@YE2~* zHfZ?maDQK0!b){>%C;rqu|(X8j$(sUa$j7c$#l#A=S?KL-7=F+Sbz46IhhrW$7Gvr P^sg6WRQjDI8Oz@Sf@Q>X diff --git a/misago/locale/pl/LC_MESSAGES/django.po b/misago/locale/pl/LC_MESSAGES/django.po index 63610f6929..1a1064fe44 100644 --- a/misago/locale/pl/LC_MESSAGES/django.po +++ b/misago/locale/pl/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-01 11:27+0000\n" +"POT-Creation-Date: 2023-09-24 12:16+0000\n" "PO-Revision-Date: 2023-07-01 08:52+0000\n" "Last-Translator: Rafał Pitoń , 2023\n" "Language-Team: Polish (https://app.transifex.com/misago/teams/65369/pl/)\n" @@ -45,7 +45,7 @@ msgstr "Formularz zawiera błędy." #, python-format msgctxt "admin roles" msgid "New role \"%(name)s\" has been saved." -msgstr "Nowa rola \"%(name)s\" została zapisana." +msgstr "Nowa rola \"%(name)s\" została dodana." #: acl/admin/views.py:68 #, python-format @@ -68,52 +68,52 @@ msgstr "Rola \"%(name)s\" została usunięta." #: acl/migrations/0003_default_roles.py:10 msgctxt "role name" msgid "Member" -msgstr "" +msgstr "Członek" #: acl/migrations/0003_default_roles.py:48 msgctxt "role name" msgid "Guest" -msgstr "" +msgstr "Gość" #: acl/migrations/0003_default_roles.py:78 #: users/migrations/0004_default_ranks.py:29 msgctxt "role name" msgid "Moderator" -msgstr "" +msgstr "Moderator" #: acl/migrations/0003_default_roles.py:133 msgctxt "role name" msgid "Renaming users" -msgstr "" +msgstr "Zmienianie nazw użytkowników" #: acl/migrations/0003_default_roles.py:141 msgctxt "role name" msgid "Banning users" -msgstr "" +msgstr "Blokowanie użytkowników" #: acl/migrations/0003_default_roles.py:155 -#: users/migrations/0004_default_ranks.py:32 +#: users/migrations/0004_default_ranks.py:34 msgctxt "role name" msgid "Deleting users" -msgstr "" +msgstr "Usuwanie użytkowników" #: acl/migrations/0003_default_roles.py:166 msgctxt "role name" msgid "Can't be blocked" -msgstr "" +msgstr "Ochrona przed banami" #: acl/migrations/0003_default_roles.py:174 #: users/migrations/0004_default_ranks.py:30 -#: users/migrations/0004_default_ranks.py:34 +#: users/migrations/0004_default_ranks.py:37 msgctxt "role name" msgid "Private threads" -msgstr "" +msgstr "Prywatne tematy" #: acl/migrations/0003_default_roles.py:189 -#: users/migrations/0004_default_ranks.py:31 +#: users/migrations/0004_default_ranks.py:32 msgctxt "role name" msgid "Private threads moderator" -msgstr "" +msgstr "Moderator prywatnych tematów" #: acl/panels.py:8 msgctxt "debug toolbar" @@ -139,8 +139,10 @@ msgstr "Sesja administratora wygasła." msgctxt "admin color field" msgid "" "Value must be a 7-character string specifying an RGB color in a hexadecimal " -"format." +"format (eg.: \"#F5A9B8\")." msgstr "" +"Wartość powinna mieć 7 znaków długości i być prawidłowym kolorem w zapisie " +"heksadecymalnym (np.: \"#F5A9B8\")." #: admin/forms.py:67 templates/misago/admin/users/edit.html:145 #: templates/misago/admin/users/edit.html:163 @@ -253,9 +255,9 @@ msgstr "Klasa CSS" #: categories/admin/forms.py:94 msgctxt "admin category form" msgid "" -"Optional CSS class used to customize this category's appearance from " -"templates." +"Optional CSS class used to customize this category's appearance from themes." msgstr "" +"Opcjonalna klasa CSS używana do kustomizacji wyglądu kategorii przez motywy." #: categories/admin/forms.py:98 msgctxt "admin category form" @@ -304,11 +306,13 @@ msgid "" "Will make all edited replies return to unapproved state for moderator to " "review." msgstr "" +"Wszystkie zmienione odpowiedzi w tej kategorii będą wymagać zatwierdzenia " +"przez moderatora." #: categories/admin/forms.py:130 msgctxt "admin category form" msgid "Thread age" -msgstr "" +msgstr "Wiek tematu" #: categories/admin/forms.py:134 msgctxt "admin category form" @@ -316,11 +320,13 @@ msgid "" "Prune thread if number of days since its creation is greater than specified." " Enter 0 to disable this pruning criteria." msgstr "" +"Usuń temat jeśli od jego utworzenia upłynęło więcej dni niż podano. Wpisz 0 " +"aby wyłączyć ten warunek usuwania." #: categories/admin/forms.py:138 msgctxt "admin category form" msgid "Last reply" -msgstr "" +msgstr "Ostatnia odpowiedź" #: categories/admin/forms.py:142 msgctxt "admin category form" @@ -328,26 +334,28 @@ msgid "" "Prune thread if number of days since last reply is greater than specified. " "Enter 0 to disable this pruning criteria." msgstr "" +"Usuń temat jeśli od jego ostatniej odpowiedzi upłynęło więcej dni niż " +"podano. Wpisz 0 aby wyłączyć ten warunek usuwania." #: categories/admin/forms.py:168 msgctxt "admin category form" msgid "Permissions cannot be copied from category into itself." -msgstr "" +msgstr "Nie można skopiować uprawnień kategorii z niej samej." #: categories/admin/forms.py:177 msgctxt "admin category form" msgid "Category cannot act as archive for itself." -msgstr "" +msgstr "Kategoria nie może archiwizować tematów do siebie samej." #: categories/admin/forms.py:200 msgctxt "admin category form" msgid "Parent category" -msgstr "" +msgstr "Nadrzędna kategoria" #: categories/admin/forms.py:206 msgctxt "admin category form" msgid "Copy permissions" -msgstr "" +msgstr "Skopiuj uprawnienia" #: categories/admin/forms.py:209 msgctxt "admin category form" @@ -355,16 +363,18 @@ msgid "" "You can replace this category permissions with permissions copied from " "category selected here." msgstr "" +"Możesz zastąpić aktualne uprawnienia tej kategorii uprawnieniami " +"skopiowanymi z innej kategorii wybranej tutaj." #: categories/admin/forms.py:213 msgctxt "admin category form" msgid "Don't copy permissions" -msgstr "" +msgstr "Nie kopiuj uprawnień" #: categories/admin/forms.py:218 msgctxt "admin category form" msgid "Archive" -msgstr "" +msgstr "Archiwizacja" #: categories/admin/forms.py:221 msgctxt "admin category form" @@ -372,164 +382,167 @@ msgid "" "Instead of being deleted, pruned threads can be moved to designated " "category." msgstr "" +"Zamiast usuwania, stare tematy mogą być przenoszone do wskazanej kategorii." #: categories/admin/forms.py:225 msgctxt "admin category form" msgid "Don't archive pruned threads" -msgstr "" +msgstr "Nie archiwizuj usuniętych tematów" #: categories/admin/forms.py:245 msgctxt "admin category form" msgid "You are trying to move this category threads to itself." -msgstr "" +msgstr "Próbujesz przenieść tematy tej kategorii do niej samej." #: categories/admin/forms.py:253 msgctxt "admin category form" msgid "" "You are trying to move this category threads to a child category that will " -"be deleted together with this category." +"also be deleted." msgstr "" +"Próbujesz przenieść tematy tej kategorii do jej podkategorii która również " +"zostanie usunięta." #: categories/admin/forms.py:264 msgctxt "admin category form" msgid "Move category threads to" -msgstr "" +msgstr "Przenieś tematy kategorii do" #: categories/admin/forms.py:267 categories/admin/forms.py:281 msgctxt "admin category form" msgid "Delete with category" -msgstr "" +msgstr "Usuń wraz z kategorią" #: categories/admin/forms.py:279 msgctxt "admin category form" msgid "Move child categories to" -msgstr "" +msgstr "Przenieś kategorie podrzędne do" #: categories/admin/forms.py:289 msgctxt "admin category role form" msgid "Role name" -msgstr "" +msgstr "Nazwa roli" #: categories/admin/forms.py:300 categories/admin/forms.py:315 msgctxt "admin permissions form" msgid "Role" -msgstr "" +msgstr "Rola" #: categories/admin/forms.py:304 categories/admin/forms.py:319 msgctxt "admin permissions form" msgid "No access" -msgstr "" +msgstr "Brak dostępu" #: categories/admin/views/categories.py:18 msgctxt "admin categories" msgid "Requested category does not exist." -msgstr "" +msgstr "Żądana kategoria nie istnieje." #: categories/admin/views/categories.py:99 #, python-format msgctxt "admin categories" msgid "New category \"%(name)s\" has been saved." -msgstr "" +msgstr "Nowa kategoria \"%(name)s\" została dodana." #: categories/admin/views/categories.py:105 #, python-format msgctxt "admin categories" msgid "Category \"%(name)s\" has been edited." -msgstr "" +msgstr "Kategoria \"%(name)s\" została zmieniona." #: categories/admin/views/categories.py:111 #, python-format msgctxt "admin categories" msgid "Category \"%(name)s\" has been deleted." -msgstr "" +msgstr "Kategoria \"%(name)s\" została usunięta." #: categories/admin/views/categories.py:164 #, python-format msgctxt "admin categories" msgid "Category \"%(name)s\" has been moved below \"%(other)s\"." -msgstr "" +msgstr "Kategoria \"%(name)s\" została przeniesiona za \"%(other)s\"." #: categories/admin/views/categories.py:183 #, python-format msgctxt "admin categories" msgid "Category \"%(name)s\" has been moved above \"%(other)s\"." -msgstr "" +msgstr "Kategoria \"%(name)s\" została przeniesiona przed \"%(other)s\"." #: categories/admin/views/perms.py:24 msgctxt "admin categories roles" msgid "Requested role does not exist." -msgstr "" +msgstr "Żądana rola nie istnieje." #: categories/admin/views/perms.py:78 #, python-format msgctxt "admin categories roles" msgid "New role \"%(name)s\" has been saved." -msgstr "" +msgstr "Rola \"%(name)s\" została dodana." #: categories/admin/views/perms.py:84 #, python-format msgctxt "admin categories roles" msgid "Role \"%(name)s\" has been changed." -msgstr "" +msgstr "Rola \"%(name)s\" została zmieniona." #: categories/admin/views/perms.py:93 #, python-format msgctxt "admin categories roles" msgid "Role \"%(name)s\" is special role and can't be deleted." -msgstr "" +msgstr "Nie można usunąć specjalnej roli \"%(name)s\"." #: categories/admin/views/perms.py:100 #, python-format msgctxt "admin categories roles" msgid "Role \"%(name)s\" has been deleted." -msgstr "" +msgstr "Rola \"%(name)s\" została usunięta." #: categories/admin/views/perms.py:149 #, python-format msgctxt "admin categories roles" msgid "Category %(name)s permissions have been changed." -msgstr "" +msgstr "Uprawnienia kategorii \"%(name)s\" zostały zmienione." #: categories/admin/views/perms.py:161 msgctxt "admin categories" msgid "Change permissions" -msgstr "" +msgstr "Zmień uprawnienia" #: categories/admin/views/perms.py:176 msgctxt "admin categories" msgid "No categories exist." -msgstr "" +msgstr "Nie utworzono żadnych kategorii." #: categories/admin/views/perms.py:218 #, python-format msgctxt "admin categories roles" msgid "Category permissions for role %(name)s have been changed." -msgstr "" +msgstr "Uprawnienia kategorii dla roli \"%(name)s\" zostały zmienione." #: categories/admin/views/perms.py:230 msgctxt "admin roles" msgid "Categories permissions" -msgstr "" +msgstr "Uprawnienia kategorii" #: categories/migrations/0002_default_categories.py:32 msgid "First category" -msgstr "" +msgstr "Domyślna kategoria" #: categories/migrations/0003_categories_roles.py:10 msgid "See only" -msgstr "" +msgstr "Tylko widzenie" #: categories/migrations/0003_categories_roles.py:18 msgid "Read only" -msgstr "" +msgstr "Tylko czytanie" #: categories/migrations/0003_categories_roles.py:33 msgid "Reply to threads" -msgstr "" +msgstr "Odpowiadanie w istniejących tematach" #: categories/migrations/0003_categories_roles.py:51 msgid "Start and reply threads" -msgstr "" +msgstr "Zakładanie i odpowiadanie w tematach" #: categories/migrations/0003_categories_roles.py:71 #: categories/migrations/0003_categories_roles.py:117 @@ -538,86 +551,86 @@ msgstr "Moderator" #: categories/migrations/0006_moderation_queue_roles.py:10 msgid "In moderation queue" -msgstr "" +msgstr "W kolejce moderacji" #: categories/migrations/0007_best_answers_roles.py:11 msgid "Q&A user" -msgstr "" +msgstr "Pytania i odpowiedzi (użytkownik)" #: categories/migrations/0007_best_answers_roles.py:23 msgid "Q&A moderator" -msgstr "" +msgstr "Pytania i odpowiedzi (moderator)" #: categories/permissions.py:13 msgctxt "categories permission" msgid "Category access" -msgstr "" +msgstr "Dostęp do kategorii" #: categories/permissions.py:16 msgctxt "categories permission" msgid "Can see category" -msgstr "" +msgstr "Widzi kategorię" #: categories/permissions.py:19 msgctxt "categories permission" msgid "Can see category contents" -msgstr "" +msgstr "Widzi zawartość kategorii" #: categories/permissions.py:125 #, python-format msgctxt "categories permission" msgid "You don't have permission to browse \"%(category)s\" contents." -msgstr "" +msgstr "Nie masz dostępu aby przeglądać zawartość \"%(category)s\"." #: conf/admin/__init__.py:52 msgctxt "admin node" msgid "Settings" -msgstr "" +msgstr "Ustawienia" #: conf/admin/__init__.py:59 msgctxt "admin node" msgid "General" -msgstr "" +msgstr "Ogólne" #: conf/admin/__init__.py:61 msgctxt "admin node" msgid "Change forum details like name, description or footer." -msgstr "" +msgstr "Zmień szczegóły forum takie jak nazwa, opis lub stopka." #: conf/admin/__init__.py:67 users/admin/__init__.py:74 msgctxt "admin node" msgid "Users" -msgstr "" +msgstr "Użytkownicy" #: conf/admin/__init__.py:70 msgctxt "admin node" msgid "Customize user accounts default behavior and features availability." -msgstr "" +msgstr "Dostosuj działanie i funkcje kont użytkowników." #: conf/admin/__init__.py:77 msgctxt "admin node" msgid "Captcha" -msgstr "" +msgstr "CAPTCHA" #: conf/admin/__init__.py:80 msgctxt "admin node" msgid "Setup protection against automatic registrations on the site." -msgstr "" +msgstr "Ustaw zabezpieczenia przeciw automatycznym rejestracjom na stronie." #: conf/admin/__init__.py:87 msgctxt "admin node" msgid "Threads" -msgstr "" +msgstr "Tematy" #: conf/admin/__init__.py:89 msgctxt "admin node" msgid "Threads, posts, polls and attachments options." -msgstr "" +msgstr "Opcje tematów, postów, ankiet i załączników." #: conf/admin/__init__.py:96 msgctxt "admin node" msgid "Notifications" -msgstr "" +msgstr "Powiadomienia" #: conf/admin/__init__.py:99 msgctxt "admin node" @@ -625,31 +638,36 @@ msgid "" "Those settings control default notification preferences of new user accounts" " and storage time of existing notifications." msgstr "" +"Te ustawienia mają wpływ na domyślne preferencje powiadomień dla nowych kont" +" użytkowników oraz czas przechowywania istniejących powiadomień." #: conf/admin/__init__.py:106 msgctxt "admin node" msgid "OAuth2" -msgstr "" +msgstr "OAuth2" #: conf/admin/__init__.py:109 msgctxt "admin node" msgid "Enable OAuth2 client and connect your site to existing auth provider." msgstr "" +"Włącz klienta OAuth2 i połącz stronę z innym dostawcą uwierzytelnianie." #: conf/admin/__init__.py:116 msgctxt "admin node" msgid "Analytics" -msgstr "" +msgstr "Analityka" #: conf/admin/__init__.py:119 msgctxt "admin node" msgid "Enable Google Analytics or setup Google Site Verification." msgstr "" +"Włącz integrację z Google Analytics lub zweryfikuj własność witryny w " +"Google." #: conf/admin/forms/analytics.py:17 msgctxt "admin analytics settings form" msgid "Tracking ID" -msgstr "" +msgstr "Tracking ID" #: conf/admin/forms/analytics.py:20 msgctxt "admin analytics settings form" @@ -657,23 +675,27 @@ msgid "" "Setting the Tracking ID will result in gtag.js file being included in your " "site's HTML markup, enabling Google Analytics integration." msgstr "" +"Ustawienie Tracking ID spowoduje załączenie pliku gtag.js w kodzie HTML " +"twojej witryny i włączenie integracji z Google Analytics." #: conf/admin/forms/analytics.py:25 msgctxt "admin analytics settings form" -msgid "Site verification token" -msgstr "" +msgid "Site verification code" +msgstr "Kod weryfikacyjny witryny" #: conf/admin/forms/analytics.py:28 msgctxt "admin analytics settings form" msgid "" -"This token was extracted from uploaded site verification file. To change it," -" upload new verification file." +"This code was extracted from the uploaded site verification file. To change " +"it, upload new verification file." msgstr "" +"Ten kod pochodzi z przesłanego pliku weryfikującego własność witryny. Aby go" +" zmienić, prześlij nowy plik." #: conf/admin/forms/analytics.py:35 msgctxt "admin analytics settings form" msgid "Upload site verification file" -msgstr "" +msgstr "Prześlij plik weryfikacyjny" #: conf/admin/forms/analytics.py:39 msgctxt "admin analytics settings form" @@ -681,71 +703,73 @@ msgid "" "Site verification file can be downloaded from Search Console's \"Ownership " "verification\" page." msgstr "" +"Plik weryfikacyjny witryny może być pobrany ze strony weryfikacji własności " +"witryny w ustawieniach Search Console." #: conf/admin/forms/analytics.py:52 msgctxt "admin analytics settings form" -msgid "Submitted file type is not HTML." -msgstr "" +msgid "Uploaded file type is not HTML." +msgstr "Przesłany plik nie jest plikiem HTML." #: conf/admin/forms/analytics.py:62 msgctxt "admin analytics settings form" -msgid "Submitted file doesn't contain a verification code." -msgstr "" +msgid "Uploaded file doesn't contain a verification code." +msgstr "Przesłany plik nie zawierał kodu weryfikującego." #: conf/admin/forms/captcha.py:21 msgctxt "admin captcha settings form" msgid "Enable CAPTCHA" -msgstr "" +msgstr "Włącz CAPTCHA" #: conf/admin/forms/captcha.py:23 msgctxt "admin captcha type field choice" msgid "No CAPTCHA" -msgstr "" +msgstr "CAPTCHA wyłączona" #: conf/admin/forms/captcha.py:24 msgctxt "admin captcha type field choice" msgid "reCaptcha" -msgstr "" +msgstr "reCaptcha" #: conf/admin/forms/captcha.py:27 msgctxt "admin captcha type field choice" msgid "Question and answer" -msgstr "" +msgstr "Pytanie testowe" #: conf/admin/forms/captcha.py:34 msgctxt "admin captcha settings form" msgid "Site key" -msgstr "" +msgstr "Klucz publiczny (\"Site key\")" #: conf/admin/forms/captcha.py:39 msgctxt "admin captcha settings form" msgid "Secret key" -msgstr "" +msgstr "Klucz prywatny (\"Secret key\")" #: conf/admin/forms/captcha.py:45 msgctxt "admin captcha settings form" msgid "Test question" -msgstr "" +msgstr "Pytanie testowe" #: conf/admin/forms/captcha.py:50 msgctxt "admin captcha settings form" msgid "Question help text" -msgstr "" +msgstr "Podpowiedź do pytania" #: conf/admin/forms/captcha.py:55 msgctxt "admin captcha settings form" msgid "Valid answers" -msgstr "" +msgstr "Prawidłowe odpowiedzi" #: conf/admin/forms/captcha.py:58 msgctxt "admin captcha settings form" msgid "Enter each answer in new line. Answers are case-insensitive." -msgstr "" +msgstr "Wpisz każdą odpowiedź w osobnej linii. Wielkość znaków ma znaczenie." #: conf/admin/forms/captcha.py:68 msgctxt "admin captcha settings form" msgid "Validate new registrations against SFS database" -msgstr "" +msgstr "Sprawdzaj nowe rejestracje w bazie SFS" #: conf/admin/forms/captcha.py:72 msgctxt "admin captcha settings form" @@ -753,11 +777,13 @@ msgid "" "Turning this option on will result in Misago validating new user's e-mail " "and IP address against SFS database." msgstr "" +"Włączenie tej opcji sprawi że Misago będzie sprawdzać e-mail i IP nowych " +"użytkowników w bazie SFS." #: conf/admin/forms/captcha.py:77 msgctxt "admin captcha settings form" msgid "Minimum SFS confidence required" -msgstr "" +msgstr "Minimalny wynik z bazy SFS" #: conf/admin/forms/captcha.py:81 msgctxt "admin captcha settings form" @@ -767,46 +793,53 @@ msgid "" "themselves. If this score is equal or higher than specified, Misago will " "block user from registering and ban their IP address for 24 hours." msgstr "" +"SFS porównuje e-mail użytkownika i jego adres IP z bazą danych znanych " +"spamerów i ocenia czy należą one do spamera używając punktacji na skali od 0" +" do 100. Jeśli ta ocena jest równa lub większa od podanej, Misago " +"uniemożliwi użytkownikowi rejestrację oraz zablokuje ich adres IP na 24 " +"godziny." #: conf/admin/forms/captcha.py:96 msgctxt "admin captcha settings form" msgid "You need to enter site key if selected CAPTCHA type is reCaptcha." -msgstr "" +msgstr "Musisz ustawić klucz witryny gdy wybrana CAPTCHA to reCaptcha." #: conf/admin/forms/captcha.py:105 msgctxt "admin captcha settings form" msgid "You need to enter secret key if selected CAPTCHA type is reCaptcha." -msgstr "" +msgstr "Musisz ustawić klucz prywatny gdy wybrana CAPTCHA to reCaptcha." #: conf/admin/forms/captcha.py:115 msgctxt "admin captcha settings form" msgid "You need to set question if selected CAPTCHA type is Q&A." -msgstr "" +msgstr "Wybór CAPTCHA \"pytanie testowe\" wymaga ustawienia pytania i odpowiedzi." #: conf/admin/forms/captcha.py:124 msgctxt "admin captcha settings form" msgid "You need to set question answers if selected CAPTCHA type is Q&A." msgstr "" +"Musisz ustawić prawidłowe odpowiedzi gdy wybrana CAPTCHA to pytanie i " +"odpowiedź." #: conf/admin/forms/general.py:28 msgctxt "admin general settings form" msgid "Forum name" -msgstr "" +msgstr "Nazwa forum" #: conf/admin/forms/general.py:33 msgctxt "admin general settings form" msgid "Forum address" -msgstr "" +msgstr "Adres forum" #: conf/admin/forms/general.py:38 msgctxt "admin general settings form" msgid "Page title" -msgstr "" +msgstr "Tytuł strony" #: conf/admin/forms/general.py:43 msgctxt "admin general settings form" msgid "Meta Description" -msgstr "" +msgstr "Opis meta" #: conf/admin/forms/general.py:46 msgctxt "admin general settings form" @@ -814,33 +847,35 @@ msgid "" "Short description of your forum that search and social sites may display " "next to link to your forum's index." msgstr "" +"Krótki opis twojego forum który wyszukiwarki internetowe i serwisy " +"społecznościowe mogą wyświetlić obok odnośnika do strony głównej forum." #: conf/admin/forms/general.py:52 msgctxt "admin general settings form" msgid "Header text" -msgstr "" +msgstr "Tekst w nagłówku" #: conf/admin/forms/general.py:55 msgctxt "admin general settings form" msgid "This text will be displayed in page header on forum index." -msgstr "" +msgstr "Ten tekst będzie wyświetlany w nagłówku na stronie główniej forum." #: conf/admin/forms/general.py:61 msgctxt "admin general settings form" msgid "Header message" -msgstr "" +msgstr "Wiadomość w nagłówku" #: conf/admin/forms/general.py:64 msgctxt "admin general settings form" msgid "" "This message will be displayed in page header on forum index, under the " "header text." -msgstr "" +msgstr "Ta wiadomość będzie wyświetlana pod nagłówkiem strony głównej forum." #: conf/admin/forms/general.py:72 msgctxt "admin general settings form" msgid "Large logo" -msgstr "" +msgstr "Duże logo" #: conf/admin/forms/general.py:75 msgctxt "admin general settings form" @@ -848,16 +883,18 @@ msgid "" "Image that will be displayed in forum navbar instead of a small logo or " "text." msgstr "" +"Obraz który będzie wyświetlany w pasku nawigacyjnym forum zamiast małego " +"logo lub tekstu." #: conf/admin/forms/general.py:80 msgctxt "admin general settings form" msgid "Delete large logo image" -msgstr "" +msgstr "Usuń obraz dużego logo" #: conf/admin/forms/general.py:84 msgctxt "admin general settings form" msgid "Small logo" -msgstr "" +msgstr "Małe logo" #: conf/admin/forms/general.py:87 msgctxt "admin general settings form" @@ -865,16 +902,18 @@ msgid "" "Image that will be displayed in the forum navbar next to the logo text if a " "large logo was not uploaded." msgstr "" +"Obraz który będzie wyświetlany w pasku nawigacyjnym forum obok logo " +"tekstowego jeśli obraz dużego logo nie został przesłany." #: conf/admin/forms/general.py:92 msgctxt "admin general settings form" msgid "Delete small logo image" -msgstr "" +msgstr "Usuń obraz małego logo" #: conf/admin/forms/general.py:96 msgctxt "admin general settings form" msgid "Text logo" -msgstr "" +msgstr "Logo tekstowe" #: conf/admin/forms/general.py:99 msgctxt "admin general settings form" @@ -883,11 +922,14 @@ msgid "" "text will be displayed right next to it. If a large logo was uploaded, it " "will replace both the small logo and the text." msgstr "" +"Napis wyświetlany w pasku nawigacyjnym forum. Jeśli przesłano obraz małego " +"logo, ten napis będzie wyświetlany obok niego. Jeśli przesłano obraz dużego " +"logo, zastąpi on zarówno małe logo jak i logo tekstowe." #: conf/admin/forms/general.py:106 msgctxt "admin general settings form" msgid "Image" -msgstr "" +msgstr "Obraz" #: conf/admin/forms/general.py:109 msgctxt "admin general settings form" @@ -896,56 +938,67 @@ msgid "" "sites. Facebook recommends that this image should be 1200 pixels wide and " "630 pixels tall." msgstr "" +"Własny obraz który będzie wyświetlany obok odnośnik do twojego forum " +"opublikowanych w serwisach społecznościowych. Facebook zaleca aby obraz ten " +"miał 1200 pikseli szerokości i 630 pikseli wysokości." #: conf/admin/forms/general.py:114 msgctxt "admin general settings form" msgid "Delete image" -msgstr "" +msgstr "Usuń obraz" #: conf/admin/forms/general.py:119 msgctxt "admin general settings form" msgid "Replace image with avatar on user profiles" -msgstr "" +msgstr "Zastąp obraz awatarem użytkownika dla profilów" #: conf/admin/forms/general.py:124 msgctxt "admin general settings form" msgid "Replace image with avatar on threads" -msgstr "" +msgstr "Zastąp obraz awatarem użytkownika dla tematów" #: conf/admin/forms/general.py:129 #: templates/misago/admin/conf/general_settings.html:60 msgctxt "admin general settings form" msgid "Forum footnote" -msgstr "" +msgstr "Stopka forum" #: conf/admin/forms/general.py:131 msgctxt "admin general settings form" msgid "Short message displayed in forum footer." -msgstr "" +msgstr "Krótka wiadomość wyświetlana w stopce forum." #: conf/admin/forms/general.py:137 msgctxt "admin general settings form" msgid "E-mails footer" -msgstr "" +msgstr "Stopka e-mailów" #: conf/admin/forms/general.py:140 msgctxt "admin general settings form" msgid "Optional short message included at the end of e-mails sent by forum." msgstr "" +"Opcjonalna krótka wiadomość wyświetlana w stopce e-mailów wysyłanych przez " +"forum." #: conf/admin/forms/general.py:149 msgctxt "admin general settings form" msgid "" "Display the link to the Admin Control Panel in the administrator's user menu" msgstr "" +"Wyświetlaj odnośnik do panelu administracyjnego w menu użytkownika dla " +"zalogowanych administratorów" #: conf/admin/forms/general.py:153 msgctxt "admin general settings form" msgid "" "Hiding the link to the ACP from user menus reduces risk of malicious actors " -"gaining access to admin session for admin users who are sharing their PC " -"with others or who are logging in to the site in public spaces." +"gaining access to admin session for admin users who are sharing their device" +" with others or who are logging in to the site in public spaces." msgstr "" +"Ukrycie odnośnika do panelu administracyjnego z menu użytkownika zmniejsza " +"ryzyko nieuprawnionego dostępu do sesji administratora użytkowników którzy " +"współdzielą swoje urządzenie z innymi albo logują się na stronę w " +"publicznych przestrzeniach." #: conf/admin/forms/general.py:163 #, python-format @@ -954,53 +1007,61 @@ msgid "" "Misago uses this setting to build links in e-mails sent to site users. " "Address under which site is running appears to be \"%(address)s\"." msgstr "" +"Misago używa tego ustawienia do tworzenia linków w e-mailach wysyłanych do " +"użytkowników strony. Aktualny adres pod którym prawdopodobnie działa strona " +"to \"%(address)s\"." #: conf/admin/forms/notifications.py:22 msgctxt "admin notifications settings form" -msgid "Notify about new replies in threads started by the user" -msgstr "" +msgid "Notify about new replies in threads started by them" +msgstr "Powiadamiaj o nowych odpowiedziach w tematach które rozpoczęli" #: conf/admin/forms/notifications.py:31 msgctxt "admin notifications settings form" -msgid "Notify about new replies in threads replied to by the user" -msgstr "" +msgid "Notify about new replies in threads replied to by them" +msgstr "Powiadamiaj o nowych odpowiedziach w tematach w których odpowiedzieli" #: conf/admin/forms/notifications.py:41 msgctxt "admin notifications settings form" msgid "" "Notify about new replies in new private threads started by followed users" msgstr "" +"Powiadamiaj o nowych odpowiedziach prywatnych tematach zaczętych przez " +"użytkowników których obserwuje" #: conf/admin/forms/notifications.py:50 msgctxt "admin notifications settings form" msgid "Notify about new replies in new private threads started by other users" msgstr "" +"Powiadamiaj o nowych odpowiedziach prywatnych tematach zaczętych przez " +"pozostałych użytkowników" #: conf/admin/forms/notifications.py:60 msgctxt "admin notifications settings form" msgid "Notify about new private threads started by followed users" msgstr "" +"Powiadamiaj o nowych prywatnych tematach od użytkowników których obserwuje" #: conf/admin/forms/notifications.py:69 msgctxt "admin notifications settings form" msgid "Notify about new private threads started by other users" -msgstr "" +msgstr "Powiadamiaj o nowych prywatnych tematach od pozostałych użytkowników" #: conf/admin/forms/notifications.py:79 msgctxt "admin notifications settings form" msgid "Delete notifications older than (in days)" -msgstr "" +msgstr "Usuwaj powiadomienia starsze niż (dni)" #: conf/admin/forms/notifications.py:83 msgctxt "admin notifications settings form" msgid "" "Misago automatically deletes notifications older than the specified age." -msgstr "" +msgstr "Misago automatycznie usuwa powiadomienia starsze niż podano." #: conf/admin/forms/oauth2.py:40 msgctxt "admin oauth2 settings form" msgid "Enable OAuth2 client" -msgstr "" +msgstr "Włącz klienta OAuth 2" #: conf/admin/forms/oauth2.py:43 msgctxt "admin oauth2 settings form" @@ -1010,52 +1071,61 @@ msgid "" "username, email or password, as those features will be delegated to the 3rd " "party site." msgstr "" +"Włącznie OAuth 2 sprawi że opcja logowania będzie przekierowywać " +"użytkowników do usługi OAuth 2 skonfigurowanej poniżej. Wyłączy to także " +"opcje rejestracji na forum, zmiany nazwy użytkownika, adresu e-mail lub " +"hasła, ponieważ te zostaną oddelegowane do połączonej usługi." #: conf/admin/forms/oauth2.py:47 msgctxt "admin oauth2 settings form" msgid "Provider name" -msgstr "" +msgstr "Nazwa usługi" #: conf/admin/forms/oauth2.py:50 msgctxt "admin oauth2 settings form" msgid "Name of the OAuth 2 provider to be displayed by interface." -msgstr "" +msgstr "Nazwa usługi (lub usługodawcy) OAuth 2 wyświetlana w interfejsie." #: conf/admin/forms/oauth2.py:56 msgctxt "admin oauth2 settings form" msgid "Client ID" -msgstr "" +msgstr "ID klienta" #: conf/admin/forms/oauth2.py:61 msgctxt "admin oauth2 settings form" msgid "Client Secret" -msgstr "" +msgstr "Sekret klienta" #: conf/admin/forms/oauth2.py:66 msgctxt "admin oauth2 settings form" msgid "Scopes" -msgstr "" +msgstr "Zakresy" #: conf/admin/forms/oauth2.py:69 msgctxt "admin oauth2 settings form" msgid "List of scopes to request from provider, separated with spaces." msgstr "" +"Lista zakresów (ang. \"scopes\") do zażądania od usługi, podzielonych " +"spacjami." #: conf/admin/forms/oauth2.py:76 msgctxt "admin oauth2 settings form" msgid "Login form URL" -msgstr "" +msgstr "URL formularza logowania" #: conf/admin/forms/oauth2.py:79 msgctxt "admin oauth2 settings form" msgid "" -"Address to login form on provider's server that users will be redirected to." +"Address of the login form on provider's server that users will be redirected" +" to." msgstr "" +"Adres formularza logowania na witrynie serwera OAuth 2 do którego będą " +"przekierowywani użytkownicy." #: conf/admin/forms/oauth2.py:86 msgctxt "admin oauth2 settings form" msgid "Access token retrieval URL" -msgstr "" +msgstr "URL zwracający token dostępu" #: conf/admin/forms/oauth2.py:89 msgctxt "admin oauth2 settings form" @@ -1065,11 +1135,16 @@ msgid "" "this code and return the access token that will be next used to retrieve " "user data." msgstr "" +"URL usługi na który wysyłane będzie żądanie kodu uwierzytelniającego po tym " +"jak użytkownik zakończy proces logowania w usłudze i zostanie przekierowany " +"z powrotem do twojej strony. Ten URL powinien przyjąć ten kod i zwrócić " +"token dostępu który następnie zostanie użyty do pobrania danych profilu " +"użytkownika." #: conf/admin/forms/oauth2.py:96 msgctxt "admin oauth2 settings form" msgid "Extra HTTP headers in token request" -msgstr "" +msgstr "Dodatkowe nagłówki HTTP do użycia w żądaniu o token" #: conf/admin/forms/oauth2.py:100 msgctxt "admin oauth2 settings form" @@ -1078,11 +1153,14 @@ msgid "" "access token. Example header is \"Header-name: value\". Specify each header " "on separate line." msgstr "" +"Lista dodatkowych nagłówków do użycia w żądaniu HTTP wykonanym do pobrania " +"tokena dostępu. Przykładowy nagłówek ma formę \"Nazwa-naglowka: wartosc\". " +"Każdy nagłówek podaj w osobnej linii." #: conf/admin/forms/oauth2.py:107 msgctxt "admin oauth2 settings form" msgid "JSON path to access token" -msgstr "" +msgstr "Ścieżka do tokena dostępu w JSONie" #: conf/admin/forms/oauth2.py:110 msgctxt "admin oauth2 settings form" @@ -1091,46 +1169,50 @@ msgid "" " token is nested, use period (\".\") for path, eg: \"result.token\" will " "retrieve the token from \"token\" key nested in \"result\"." msgstr "" +"Nazwa klucza zawierającego token dostępu w dokumencie JSON zwróconym przez " +"usługę. Jeśli token jest zagnieżdżony, użyj kropki do oddzielenia elementów " +"ścieżki, np.: \"result.token\" poszuka pierw klucza \"result\" w dokumencie," +" a następnie pod tym kluczem poszuka klucza \"token\"." #: conf/admin/forms/oauth2.py:117 msgctxt "admin oauth2 settings form" msgid "User data URL" -msgstr "" +msgstr "URL zwracający dane użytkownika" #: conf/admin/forms/oauth2.py:122 msgctxt "admin oauth2 settings form" msgid "Request method" -msgstr "" +msgstr "Metoda żądania" #: conf/admin/forms/oauth2.py:130 msgctxt "admin oauth2 settings form" msgid "Access token location" -msgstr "" +msgstr "Lokalizacja tokena dostępu" #: conf/admin/forms/oauth2.py:136 msgctxt "admin oauth2 token location choice" msgid "Query string" -msgstr "" +msgstr "W ścieżce adresu" #: conf/admin/forms/oauth2.py:143 msgctxt "admin oauth2 token location choice" msgid "HTTP header" -msgstr "" +msgstr "W nagłówku HTTP" #: conf/admin/forms/oauth2.py:150 msgctxt "admin oauth2 token location choice" msgid "HTTP header (Bearer)" -msgstr "" +msgstr "W nagłówku HTTP poprzedzonym \"Bearer\"" #: conf/admin/forms/oauth2.py:157 msgctxt "admin oauth2 settings form" msgid "Access token name" -msgstr "" +msgstr "Nazwa tokena dostępu" #: conf/admin/forms/oauth2.py:163 msgctxt "admin oauth2 settings form" msgid "Extra HTTP headers in user request" -msgstr "" +msgstr "Dodatkowe nagłówki HTTP do użycia w żądaniu o użytkownika" #: conf/admin/forms/oauth2.py:167 msgctxt "admin oauth2 settings form" @@ -1139,36 +1221,39 @@ msgid "" " profile. Example header is \"Header-name: value\". Specify each header on " "separate line." msgstr "" +"Lista dodatkowych nagłówków do użycia w żądaniu HTTP wykonanym do pobrania " +"danych profilu użytkownika. Przykładowy nagłówek ma formę \"Nazwa-naglowka: " +"wartosc\". Każdy nagłówek podaj w osobnej linii." #: conf/admin/forms/oauth2.py:177 msgctxt "admin oauth2 settings form" msgid "Send a welcoming e-mail to users on their first sign-ons" -msgstr "" +msgstr "Wysyłaj e-mail powitalny do użytkowników po pierwszym logowaniu" #: conf/admin/forms/oauth2.py:183 msgctxt "admin oauth2 settings form" msgid "User ID path" -msgstr "" +msgstr "Ścieżka do ID użytkownika" #: conf/admin/forms/oauth2.py:188 msgctxt "admin oauth2 settings form" msgid "User name path" -msgstr "" +msgstr "Ścieżka do nazwy użytkownika" #: conf/admin/forms/oauth2.py:193 msgctxt "admin oauth2 settings form" msgid "User e-mail path" -msgstr "" +msgstr "Ścieżka do e-maila użytkownika" #: conf/admin/forms/oauth2.py:198 msgctxt "admin oauth2 settings form" msgid "User avatar URL path" -msgstr "" +msgstr "Ścieżka do odnośnika do awatara użytkownika" #: conf/admin/forms/oauth2.py:201 msgctxt "admin oauth2 settings form" msgid "Optional, leave empty to don't download avatar from provider." -msgstr "" +msgstr "Opcjonalne. Zostaw puste aby nie pobierać awataru z usługi." #: conf/admin/forms/oauth2.py:238 msgctxt "admin oauth2 settings form" @@ -1176,12 +1261,14 @@ msgid "" "You need to complete the configuration before you will be able to enable " "OAuth 2 on your site." msgstr "" +"Musisz dokończyć konfigurację OAuth 2 nim możliwe będzie jego włączenie na " +"twojej stronie. " #: conf/admin/forms/oauth2.py:255 #, python-format msgctxt "admin oauth2 settings form" msgid "\"%(header)s\" is not a valid header. It's missing a colon (\":\")." -msgstr "" +msgstr "\"%(header)s\" nie jest prawidłowym nagłówkiem. Brakuje dwukropka (\":\")." #: conf/admin/forms/oauth2.py:266 #, python-format @@ -1190,12 +1277,14 @@ msgid "" "\"%(header)s\" is not a valid header. It's missing a header name before the " "colon (\":\")." msgstr "" +"\"%(header)s\" nie jest prawidłowym nagłówkiem. Brakuje nazwy nagłówka przed" +" dwukropkiem (\":\")." #: conf/admin/forms/oauth2.py:275 #, python-format msgctxt "admin oauth2 settings form" msgid "\"%(header)s\" header is entered more than once." -msgstr "" +msgstr "\"%(header)s\" wpisano więcej niż raz." #: conf/admin/forms/oauth2.py:284 #, python-format @@ -1204,11 +1293,13 @@ msgid "" "\"%(header)s\" is not a valid header. It's missing a header value after the " "colon (\":\")." msgstr "" +"\"%(header)s\" nie jest prawidłowym nagłówkiem. Brakuje wartości nagłówka po" +" dwukropku (\":\")." #: conf/admin/forms/threads.py:27 msgctxt "admin threads settings form" msgid "Daily post limit per user" -msgstr "" +msgstr "Dzienny limit postów na użytkownika" #: conf/admin/forms/threads.py:30 msgctxt "admin threads settings form" @@ -1217,11 +1308,14 @@ msgid "" "situations when forum is flooded by spam bots. Change to 0 to remove the " "limit." msgstr "" +"Dzienny limit postów które mogą zostać napisane przez jednego użytkownika. " +"Zabezpieczenie przed sytuacjami kiedy forum jest zalewane przez boty " +"spamujące. Ustaw na 0 aby zdjąć to ograniczenie." #: conf/admin/forms/threads.py:36 msgctxt "admin threads settings form" msgid "Hourly post limit per user" -msgstr "" +msgstr "Godzinowy limit postów na użytkownika" #: conf/admin/forms/threads.py:40 msgctxt "admin threads settings form" @@ -1230,36 +1324,39 @@ msgid "" "situations when forum is flooded by spam bots. Change to 0 to remove the " "limit." msgstr "" +"Godzinowy limit postów które mogą zostać napisane przez jednego użytkownika." +" Zabezpieczenie przed sytuacjami kiedy forum jest zalewane przez boty " +"spamujące. Ustaw na 0 aby zdjąć to ograniczenie." #: conf/admin/forms/threads.py:46 msgctxt "admin threads settings form" msgid "Maximum number of attachments per post" -msgstr "" +msgstr "Maksymalna liczba załączników w jednym poście" #: conf/admin/forms/threads.py:52 msgctxt "admin threads settings form" msgid "Maximum allowed post length" -msgstr "" +msgstr "Maksymalna dozwolona długość postu" #: conf/admin/forms/threads.py:58 msgctxt "admin threads settings form" msgid "Minimum required post length" -msgstr "" +msgstr "Minimalna wymagana długość postu" #: conf/admin/forms/threads.py:64 msgctxt "admin threads settings form" msgid "Maximum allowed thread title length" -msgstr "" +msgstr "Maksymalna dozwolona długość nazwy tematu" #: conf/admin/forms/threads.py:71 msgctxt "admin threads settings form" msgid "Minimum required thread title length" -msgstr "" +msgstr "Minimalna wymagana długość nazwy tematu" #: conf/admin/forms/threads.py:78 msgctxt "admin threads settings form" msgid "Unused attachments lifetime" -msgstr "" +msgstr "Czas życia nieużytych załączników" #: conf/admin/forms/threads.py:82 msgctxt "admin threads settings form" @@ -1267,11 +1364,13 @@ msgid "" "Period of time (in hours) after which user-uploaded files that weren't " "attached to any post are deleted from disk." msgstr "" +"Liczba godzin po upływie których pliki przesłane przez użytkowników które " +"nie są załączone do żadnego postu są usuwane z dysku." #: conf/admin/forms/threads.py:88 msgctxt "admin threads settings form" msgid "Read-tracker cutoff" -msgstr "" +msgstr "Okres śledzenia czytań" #: conf/admin/forms/threads.py:91 msgctxt "admin threads settings form" @@ -1281,39 +1380,48 @@ msgid "" "if the opposite is true for the user. Active forums can try lowering this " "value while less active ones may wish to increase it instead." msgstr "" +"Określa liczbę danych używanych przez system śledzenia czytań. Wszystkie " +"treści starsze niż podana liczba dni będą uznawane jako stare i już " +"przeczytane, nawet jeśli nie jest to prawdą dla danego użytkownika. Aktywne " +"fora mogą chcieć zmniejszyć tą wartość a mniej aktywne podnieść." #: conf/admin/forms/threads.py:99 msgctxt "admin threads settings form" msgid "Number of threads displayed on a single page" -msgstr "" +msgstr "Liczba tematów wyświetlanych na jednej stronie" #: conf/admin/forms/threads.py:106 msgctxt "admin threads settings form" msgid "Number of posts displayed on a single page" -msgstr "" +msgstr "Liczba postów wyświetlanych na jednej stronie" #: conf/admin/forms/threads.py:111 msgctxt "admin threads settings form" msgid "Maximum orphans" -msgstr "" +msgstr "Limit sierot" #: conf/admin/forms/threads.py:114 msgctxt "admin threads settings form" msgid "" -"If number of posts to be displayed on the last page is less or equal to " -"number specified in this setting, those posts will instead be displayed on " -"previous page, reducing the total number of pages in thread." +"This setting prevents situations when the last page of a thread contains " +"very few items. If number of posts to be displayed on the last page is less " +"or equal to number specified in this setting, those posts will instead be " +"appended to the previous page, reducing number of thread's pages." msgstr "" +"Ta opcja zapobiega sytuacjom kiedy ostatnia strona tematu zawiera bardzo " +"mało odpowiedzi. Jeśli liczba odpowiedzi do wyświetlenia na ostatniej " +"stronie tematu będzie mniejsza lub równa tej liczbie, odpowiedzi tę będą " +"wyświetlone na przedniej stronie, zmniejszając liczbę stron tematu." #: conf/admin/forms/threads.py:121 msgctxt "admin threads settings form" msgid "Maximum number of events displayed on a single page" -msgstr "" +msgstr "Limit zdarzeń wyświetlanych na jednej stronie" #: conf/admin/forms/threads.py:127 msgctxt "admin threads settings form" msgid "Permission denied" -msgstr "" +msgstr "Brak dostępu" #: conf/admin/forms/threads.py:130 msgctxt "admin threads settings form" @@ -1321,16 +1429,18 @@ msgid "" "Attachments proxy will display this image in place of default one when user " "tries to access attachment they have no permission to see." msgstr "" +"Proxy załączników wyświetli ustawiony obraz zamiast domyślnego jeśli " +"użytkownik spróbuje zobaczyć załącznik do którego nie mają dostępu." #: conf/admin/forms/threads.py:136 msgctxt "admin threads settings form" msgid "Delete custom permission denied image" -msgstr "" +msgstr "Usuń własny obraz braku dostepu" #: conf/admin/forms/threads.py:141 msgctxt "admin threads settings form" msgid "Not found" -msgstr "" +msgstr "Nie znaleziono" #: conf/admin/forms/threads.py:144 msgctxt "admin threads settings form" @@ -1338,41 +1448,43 @@ msgid "" "Attachments proxy will display this image in place of default one when user " "tries to access attachment that doesn't exist." msgstr "" +"Proxy załączników wyświetli ustawiony obraz zamiast domyślnego jeśli " +"użytkownik spróbuje zobaczyć załącznik który nie istnieje." #: conf/admin/forms/threads.py:150 msgctxt "admin threads settings form" msgid "Delete custom not found image" -msgstr "" +msgstr "Usuń własny obraz nie znalezionego" #: conf/admin/forms/threads.py:164 msgctxt "admin threads settings form" msgid "This value must be lower than number of posts per page." -msgstr "" +msgstr "Ta liczba musi być mniejsza niż liczba postów na jednej stronie." #: conf/admin/forms/users.py:38 msgctxt "admin users settings form" msgid "Require new accounts activation" -msgstr "" +msgstr "Wymagaj aktywacji nowych kont" #: conf/admin/forms/users.py:45 msgctxt "admin users account activation field choice" msgid "No activation required" -msgstr "" +msgstr "Nie wymagaj aktywacji" #: conf/admin/forms/users.py:52 msgctxt "admin users account activation field choice" msgid "Activation token sent to user e-mail" -msgstr "" +msgstr "Aktywacja poprzez token wysłany do użytkownika w e-mailu" #: conf/admin/forms/users.py:59 msgctxt "admin users account activation field choice" msgid "Activation by administrator" -msgstr "" +msgstr "Aktywacja przez administratora" #: conf/admin/forms/users.py:66 msgctxt "admin users account activation field choice" msgid "Disable new registrations" -msgstr "" +msgstr "Wyłącz rejestrację nowych kont" #: conf/admin/forms/users.py:75 msgctxt "admin users settings form" @@ -1380,90 +1492,97 @@ msgid "" "Delete new inactive accounts if they weren't activated within this number of" " days" msgstr "" +"Usuwaj konta użytkowników jeśli nie zostały one aktywowane przed upływem " +"podanej liczby dni" #: conf/admin/forms/users.py:79 msgctxt "admin users settings form" msgid "Enter 0 to never delete inactive new accounts." -msgstr "" +msgstr "Wpisz 0 aby nigdy nie usuwać nieaktywowanych nowy kont." #: conf/admin/forms/users.py:86 msgctxt "admin users settings form" msgid "Minimum allowed username length" -msgstr "" +msgstr "Minimalna dozwolona długość nazwy użytkownika" #: conf/admin/forms/users.py:93 msgctxt "admin users settings form" msgid "Maximum allowed username length" -msgstr "" +msgstr "Maksymalna dozwolona długość nazwy użytkownika" #: conf/admin/forms/users.py:100 msgctxt "admin users settings form" msgid "Allow custom avatar uploads" -msgstr "" +msgstr "Zezwól na przesyłanie własnych awatarów" #: conf/admin/forms/users.py:103 msgctxt "admin users settings form" msgid "" "Turning this option off will forbid forum users from uploading custom " -"avatars. Good for forums adressed at young users." +"avatars." msgstr "" +"Wyłączenie tej opcji uniemożliwi użytkownikom forum przesyłanie własnych " +"obrazów awatara." #: conf/admin/forms/users.py:108 msgctxt "admin users settings form" msgid "Maximum size of uploaded avatar" -msgstr "" +msgstr "Maksymalny rozmiar przesłanego awatara" #: conf/admin/forms/users.py:112 msgctxt "admin users settings form" msgid "Enter maximum allowed file size (in KB) for avatar uploads." msgstr "" +"Wpisz maksymalny dozwolony rozmiar pliku (w KB) dla przesyłanych awatarów." #: conf/admin/forms/users.py:117 msgctxt "admin users settings form" msgid "Default avatar" -msgstr "" +msgstr "Domyślny awatar" #: conf/admin/forms/users.py:123 msgctxt "admin users default avatar choice" msgid "Individual" -msgstr "" +msgstr "Indywidualny" #: conf/admin/forms/users.py:130 msgctxt "admin users default avatar choice" msgid "Gravatar" -msgstr "" +msgstr "Gravatar" #: conf/admin/forms/users.py:137 msgctxt "admin users default avatar choice" msgid "Random avatar from gallery" -msgstr "" +msgstr "Losowy z galerii" #: conf/admin/forms/users.py:145 msgctxt "admin users settings form" -msgid "Fallback for default gravatar" -msgstr "" +msgid "Fallback for default Gravatar" +msgstr "Alternatywa dla domyślnego Gravatara" #: conf/admin/forms/users.py:149 msgctxt "admin users settings form" msgid "" -"Select which avatar to use when user has no gravatar associated with their " +"Select which avatar to use when user has no Gravatar associated with their " "e-mail address." msgstr "" +"Wybierz jakiego awatara użyć kiedy użytkownik nie ma żadnego Gravatara " +"powiązanego z jego adresem e-mail." #: conf/admin/forms/users.py:154 msgctxt "admin users gravatar fallback choice" msgid "Individual" -msgstr "" +msgstr "Indywidualny" #: conf/admin/forms/users.py:159 msgctxt "admin users gravatar fallback choice" msgid "Random avatar from gallery" -msgstr "" +msgstr "Losowy z galerii" #: conf/admin/forms/users.py:166 msgctxt "admin users settings form" msgid "Blank avatar" -msgstr "" +msgstr "Zamiennik awatara" #: conf/admin/forms/users.py:169 msgctxt "admin users settings form" @@ -1472,79 +1591,89 @@ msgid "" "available: when user was deleted or is guest. Uploaded image should be a " "square." msgstr "" +"Zamiennik awatara jest pokazywany w interfejsie kiedy awatar użytkownika nie" +" jest dostępny: użytkownik został usunięty lub jest gościem. Przesłany " +"obrazek powinien być kwadratem." #: conf/admin/forms/users.py:174 msgctxt "admin users settings form" msgid "Delete custom blank avatar" -msgstr "" +msgstr "Usuń zamiennik awatara" #: conf/admin/forms/users.py:180 msgctxt "admin users settings form" msgid "Maximum allowed signature length" -msgstr "" +msgstr "Maksymalna dozwolona długość podpisu" #: conf/admin/forms/users.py:187 msgctxt "admin users settings form" msgid "Started threads" -msgstr "" +msgstr "Zaczęte tematy" #: conf/admin/forms/users.py:189 conf/admin/forms/users.py:210 msgctxt "admin users settings form" msgid "Don't watch" -msgstr "" +msgstr "Nie obserwuj" #: conf/admin/forms/users.py:194 conf/admin/forms/users.py:215 msgctxt "admin users default subscription choice" msgid "Put on watched threads list" -msgstr "" +msgstr "Umieść na liście obserwowanych tematów" #: conf/admin/forms/users.py:201 conf/admin/forms/users.py:222 msgctxt "admin users default subscription choice" msgid "Put on watched threads list and e-mail user when somebody replies" msgstr "" +"Umieść na liście obserwowanych tematów i powiadom e-mailem kiedy ktoś " +"odpowie" #: conf/admin/forms/users.py:208 msgctxt "admin users settings form" msgid "Replied threads" -msgstr "" +msgstr "Odpowiedziane tematy" #: conf/admin/forms/users.py:231 msgctxt "admin users settings form" msgid "Number of users displayed on a single page" -msgstr "" +msgstr "Liczba użytkowników wyświetlanych na jednej stronie" #: conf/admin/forms/users.py:236 msgctxt "admin users settings form" msgid "Maximum orphans" -msgstr "" +msgstr "Limit sierot" #: conf/admin/forms/users.py:239 msgctxt "admin users settings form" msgid "" -"If number of users to be displayed on the last page is less or equal to " -"number specified in this setting, those users will instead be displayed on " -"previous page, reducing the total number of pages on the list." +"This setting prevents situations when the last page of a users list contains" +" very few items. If number of users to be displayed on the last page is less" +" or equal to number specified in this setting, those users will instead be " +"appended to the previous page, reducing number of list's pages." msgstr "" +"Ta opcja zapobiega sytuacjom kiedy ostatnia strona listy użytkowników " +"zawiera bardzo mało elementów. Jeśli liczba użytkowników do wyświetlenia na " +"ostatniej stronie listy będzie mniejsza lub równa tej liczbie, użytkownicy " +"ci będą wyświetleni na przedniej stronie, zmniejszając liczbę stron listy." #: conf/admin/forms/users.py:247 msgctxt "admin users settings form" -msgid "Maximum age in days of posts that should count to the ranking" -msgstr "" +msgid "Maximum age in days of posts that should count to the ranking position" +msgstr "Maksymalny wiek postów (w dniach) liczonych do pozycji w rankingu" #: conf/admin/forms/users.py:253 msgctxt "admin users settings form" msgid "Maximum number of ranked users" -msgstr "" +msgstr "Maksymalna liczba użytkowników w rankingu" #: conf/admin/forms/users.py:260 msgctxt "admin users settings form" msgid "Allow users to download their data" -msgstr "" +msgstr "Zezwól użytkownikom na pobieranie kopii swoich danych" #: conf/admin/forms/users.py:266 msgctxt "admin users settings form" msgid "Maximum age in hours of data downloads before they expire" -msgstr "" +msgstr "Maksymalny czas dostępności kopii danych do pobrania" #: conf/admin/forms/users.py:270 msgctxt "admin users settings form" @@ -1552,16 +1681,18 @@ msgid "" "Data downloads older than specified will have their files deleted and will " "be marked as expired." msgstr "" +"Kopie danych starsze niż ustawiono będą oznaczane jako wygasłe a powiązane z" +" nimi pliki z danymi będą usuwane." #: conf/admin/forms/users.py:277 msgctxt "admin users settings form" msgid "Allow users to delete their own accounts" -msgstr "" +msgstr "Zezwól użytkownikom na usuwanie własnych kont" #: conf/admin/forms/users.py:282 msgctxt "admin users settings form" msgid "IP storage time" -msgstr "" +msgstr "Czas przechowywania adresów IP" #: conf/admin/forms/users.py:285 msgctxt "admin users settings form" @@ -1570,11 +1701,14 @@ msgid "" "Enter zero to store registered IP addresses forever. Deleting user account " "always deletes the IP addresses associated with it." msgstr "" +"Czas przechowywania adresów IP użytkowników w bazie danych forum, w dniach. " +"Wpisz zero aby nigdy nie usuwać starych adresów IP. Usunięcie konta " +"użytkownika zawsze usuwa powiązane z nim adresy IP." #: conf/admin/forms/users.py:291 msgctxt "admin users settings form" msgid "Anonymous username" -msgstr "" +msgstr "Nazwa usuniętego użytkownika" #: conf/admin/forms/users.py:294 msgctxt "admin users settings form" @@ -1582,27 +1716,42 @@ msgid "" "This username is displayed instead of delete user's actual name next to " "their content." msgstr "" +"Ta nazwa wyświetlana jest zamiast faktycznej nazwy usuniętego użytkownika " +"obok ich treści." #: conf/admin/forms/users.py:312 #, python-format msgctxt "admin users settings form" -msgid "Uploaded image's edge should be at least %(size)s pixels long." -msgstr "" +msgid "Uploaded image's edge should be at least %(size)s pixel long." +msgid_plural "Uploaded image's edge should be at least %(size)s pixels long." +msgstr[0] "" +"Krawędź przesłanego obrazu powinna mieć przynajmniej %(size)s piksel " +"długości." +msgstr[1] "" +"Krawędź przesłanego obrazu powinna mieć przynajmniej %(size)s piksele " +"długości." +msgstr[2] "" +"Krawędź przesłanego obrazu powinna mieć przynajmniej %(size)s pikseli " +"długości." +msgstr[3] "" +"Krawędź przesłanego obrazu powinna mieć przynajmniej %(size)s pikseli " +"długości." -#: conf/admin/forms/users.py:328 +#: conf/admin/forms/users.py:330 msgctxt "admin users settings form" msgid "This value must be lower than number of users per page." msgstr "" +"Ta liczba musi być mniejsza niż liczba użytkowników na jednej stronie." #: conf/admin/views.py:42 msgctxt "admin settings" msgid "Settings have been saved." -msgstr "" +msgstr "Ustawienia zostały zapisane." #: core/errorpages.py:51 msgctxt "api" msgid "Permission denied." -msgstr "" +msgstr "Brak dostępu." #: core/errorpages.py:81 msgctxt "social auth" @@ -1622,22 +1771,22 @@ msgstr "" #, python-format msgctxt "social auth" msgid "A problem was encountered when signing you in using %(backend)s." -msgstr "" +msgstr "Napotkano problem podczas logowania przez %(backend)s." #: core/errorpages.py:95 msgctxt "social auth" msgid "The sign in process has been canceled by user." -msgstr "" +msgstr "Proces logowania został przerwany przez użytkownika." #: core/errorpages.py:99 msgctxt "social auth" msgid "The other service could not be reached." -msgstr "" +msgstr "Nie udano się połączyć z usługą." #: core/errorpages.py:108 msgctxt "social auth" msgid "Unexpected problem has been encountered during sign in process." -msgstr "" +msgstr "W trakcie procesu logowania napotkano na nieoczekiwany problem." #: core/errorpages.py:131 msgctxt "api" @@ -1649,13 +1798,13 @@ msgstr "" #: core/rest_permissions.py:10 msgctxt "api" msgid "This action is not available to guests." -msgstr "" +msgstr "Ta akcja nie jest dostępna dla niezalogowanych." #: core/templatetags/misago_pagetitle.py:11 #, python-format msgctxt "page number in title" msgid "page: %(page)s" -msgstr "" +msgstr "strona: %(page)s" #: core/validators.py:10 msgctxt "sluggable validator" @@ -1665,29 +1814,33 @@ msgstr "" #: core/validators.py:13 msgctxt "sluggable validator" msgid "Value is too long." -msgstr "" +msgstr "Wartość jest zbyt długa." #: core/validators.py:29 msgctxt "image validator" msgid "Uploaded image is not a square." -msgstr "" +msgstr "Przesłany obraz nie jest kwadratem." #: graphql/admin/versioncheck.py:29 msgctxt "admin version check" msgid "The site is running using unreleased version of Misago." -msgstr "" +msgstr "Ta strona działa na niewydanej wersji Misago." #: graphql/admin/versioncheck.py:33 msgctxt "admin version check" msgid "" -"Unreleased versions of Misago can lack security features and there is no " -"supported way to upgrade them to release versions later." +"Unreleased versions of Misago can contain serious breaking bugs or miss " +"security features. They are also unsupported and it may be impossible to " +"upgrade them to released version later." msgstr "" +"Niewydane wersje Misago mogą mieć poważne błędy lub braki w " +"zabezpieczeniach. Dodatkowo nie są one wspierane i mogą być nie możliwe do " +"późniejszego zaktualizowania do wydanej wersji." #: graphql/admin/versioncheck.py:47 msgctxt "admin version check" msgid "Failed to connect to pypi.org API. Try again later." -msgstr "" +msgstr "Nie udało się połączyć z API pypi.org. Spróbuj ponownie później." #: graphql/admin/versioncheck.py:51 #: templates/misago/admin/dashboard/checks.html:17 @@ -1695,24 +1848,26 @@ msgstr "" msgctxt "admin version check" msgid "" "Version check feature relies on the API operated by the Python Package Index" -" (pypi.org) API to retrieve latest Misago release version." +" (pypi.org) to retrieve the latest Misago release version." msgstr "" +"Funkcja sprawdzania wersji korzysta z API obsługiwanego przez Python Package" +" Index (pypi.org) do ustalenia najnowszej wydanej wersji Misago." #: graphql/admin/versioncheck.py:76 msgctxt "admin version check" msgid "The site is running updated version of Misago." -msgstr "" +msgstr "Ta strona działa na aktualnej wersji Misago." #: graphql/admin/versioncheck.py:79 #, python-format msgctxt "admin version check" msgid "Misago %(version)s is latest release." -msgstr "" +msgstr "Misago %(version)s jest najnowsze." #: graphql/admin/versioncheck.py:87 msgctxt "admin version check" msgid "The site is running outdated version of Misago." -msgstr "" +msgstr "Ta strona działa na nieaktualnej wersji Misago." #: graphql/admin/versioncheck.py:91 #, python-format @@ -1721,82 +1876,90 @@ msgid "" "The site is running Misago version %(version)s while version %(latest)s is " "available." msgstr "" +"Ta strona działa na wersji %(version)s Misago podczas gdy dostępna jest już " +"wersja %(latest)s." #: icons/admin/__init__.py:15 msgctxt "admin node" msgid "Icons" -msgstr "" +msgstr "Ikony" #: icons/admin/__init__.py:17 msgctxt "admin node" msgid "Upload favicon and application icon for the site." -msgstr "" +msgstr "Prześlij obraz favikony lub ikony aplikacji dla tej strony." #: icons/admin/forms.py:21 icons/admin/forms.py:33 msgctxt "admin icons form" msgid "Upload image" -msgstr "" +msgstr "Prześlij obraz" #: icons/admin/forms.py:24 msgctxt "admin icons form" msgid "Uploaded image should be a square that is 48px wide and tall." msgstr "" +"Przesłany obraz powinien być kwadratem mającym 48 pikseli wysokości i " +"szerokości." #: icons/admin/forms.py:29 icons/admin/forms.py:41 msgctxt "admin icons form" msgid "Delete custom icon" -msgstr "" +msgstr "Usuń obraz ikony." #: icons/admin/forms.py:36 msgctxt "admin icons form" msgid "Uploaded image should be square at least 180px wide and tall." msgstr "" +"Przesłany obraz powinien być kwadratem mającym przynajmniej 180 pikseli " +"wysokości i szerokości." #: icons/admin/forms.py:127 #, python-format msgctxt "admin icons form" msgid "Uploaded image's edge should be at least %(size)s pixels long." msgstr "" +"Krawędź przesłanego obrazu powinna mieć przynajmniej %(size)s pikseli " +"długości." #: icons/admin/forms.py:137 msgctxt "admin icons form" msgid "Uploaded image was not gif, jpeg or png." -msgstr "" +msgstr "Przeslany obraz musi być typu GIF, JPEG lub PNG." #: icons/admin/views.py:18 msgctxt "admin icons" msgid "Icons have been updated." -msgstr "" +msgstr "Ikony zostały zmienione." #: legal/admin/__init__.py:35 msgctxt "admin node" msgid "Legal agreements" -msgstr "" +msgstr "Zgody użytkowników" #: legal/admin/__init__.py:37 msgctxt "admin node" msgid "Set terms of service and privacy policy contents." -msgstr "" +msgstr "Ustaw treść warunków korzystania ze strony lub polityki prywatności." #: legal/admin/forms.py:12 legal/admin/forms.py:76 msgctxt "admin agreement form" msgid "Type" -msgstr "" +msgstr "Typ" #: legal/admin/forms.py:16 msgctxt "admin agreement form" msgid "Title" -msgstr "" +msgstr "Nazwa" #: legal/admin/forms.py:19 msgctxt "admin agreement form" msgid "Optional, leave empty for agreement to be named after its type." -msgstr "" +msgstr "Opcjonalna. Zostaw pustą aby zgoda była nazwa od jej typu." #: legal/admin/forms.py:24 msgctxt "admin agreement form" msgid "Active for its type" -msgstr "" +msgstr "Obowiązująca dla swojego typu" #: legal/admin/forms.py:27 msgctxt "admin agreement form" @@ -1805,197 +1968,207 @@ msgid "" "replaced with this one. Misago will ask users who didn't accept this " "agreement to do so before allowing them to continue using the site." msgstr "" +"Jeśli istnieje już inna aktywna zgoda tego typu, zostanie ona zastąpiona tą." +" Misago będzie prosić użytkowników którzy nie wyrazili tej zgody o jej " +"zatwierdzenie nim będą oni mogli kontynuować korzystanie z witryny." #: legal/admin/forms.py:31 msgctxt "admin agreement form" msgid "Link" -msgstr "" +msgstr "Odnośnik" #: legal/admin/forms.py:34 msgctxt "admin agreement form" msgid "If your agreement is located on other page, enter here a link to it." msgstr "" +"Jeśli treść zgody znajduje się na innej stronie, wprowadź tutaj jej link." #: legal/admin/forms.py:39 msgctxt "admin agreement form" msgid "Text" -msgstr "" +msgstr "Treść" #: legal/admin/forms.py:42 msgctxt "admin agreement form" msgid "You can use Markdown syntax for rich text elements." -msgstr "" +msgstr "Możesz użyć składni Markdown do formatowania tekstu." #: legal/admin/forms.py:58 msgctxt "admin agreement form" msgid "Please fill in agreement link or text." -msgstr "" +msgstr "Wprowadź odnośnik albo treść zgody." #: legal/admin/forms.py:78 msgctxt "admin agreement type field choice" msgid "All types" -msgstr "" +msgstr "Wszystkie typy" #: legal/admin/forms.py:82 msgctxt "admin agreement form" msgid "Content" -msgstr "" +msgstr "Treść" #: legal/admin/views.py:17 msgctxt "admin agreements" msgid "Requested agreement does not exist." -msgstr "" +msgstr "Żądana zgoda nie istnieje." #: legal/admin/views.py:32 msgctxt "admin agreements ordering choice" msgid "From newest" -msgstr "" +msgstr "Od najnowszych" #: legal/admin/views.py:33 msgctxt "admin agreements ordering choice" msgid "From oldest" -msgstr "" +msgstr "Od najstarszych" #: legal/admin/views.py:36 msgctxt "admin agreements" msgid "With agreements: 0" -msgstr "" +msgstr "Ze zgodami: 0" #: legal/admin/views.py:37 msgctxt "admin agreements" msgid "Select agreements" -msgstr "" +msgstr "Wybierz zgody" #: legal/admin/views.py:41 msgctxt "admin agreements" msgid "Delete agreements" -msgstr "" +msgstr "Usuń zgody" #: legal/admin/views.py:43 msgctxt "admin agreements" msgid "Are you sure you want to delete those agreements?" -msgstr "" +msgstr "Na pewno chcesz usunąć wybrane zgody?" #: legal/admin/views.py:57 msgctxt "admin agreements" msgid "Selected agreements have been deleted." -msgstr "" +msgstr "Wybrane zgody zostały usunięte." #: legal/admin/views.py:63 #, python-format msgctxt "admin agreements" msgid "New agreement \"%(title)s\" has been saved." -msgstr "" +msgstr "Nowa zgoda \"%(title)s\" została dodana." #: legal/admin/views.py:76 #, python-format msgctxt "admin agreements" msgid "Agreement \"%(title)s\" has been edited." -msgstr "" +msgstr "Zgoda \"%(title)s\" została zmieniona." #: legal/admin/views.py:93 #, python-format msgctxt "admin agreements" msgid "Agreement \"%(title)s\" has been deleted." -msgstr "" +msgstr "Zgoda \"%(title)s\" została usunięta." #: legal/admin/views.py:104 #, python-format msgctxt "admin agreements" msgid "Agreement \"%(title)s\" has been set as active for type \"%(type)s\"." -msgstr "" +msgstr "Zgoda \"%(title)s\" została wybrana jako obowiązująca dla typu \"%(type)s\"." #: legal/admin/views.py:118 #, python-format msgctxt "admin agreements" msgid "Agreement \"%(title)s\" has been disabled." -msgstr "" +msgstr "Zgoda \"%(title)s\" została wyłączona." #: legal/api.py:18 msgctxt "agreement submit" msgid "You have already accepted this agreement." -msgstr "" +msgstr "Już wyraziłeś(aś) na to zgodę." #: legal/api.py:29 msgctxt "agreement submit" msgid "You need to submit a valid choice." -msgstr "" +msgstr "Musisz wybrać poprawny wybór." #: legal/models.py:42 msgctxt "agreement type choice" msgid "Terms of service" -msgstr "" +msgstr "Warunki korzystania" #: legal/models.py:43 msgctxt "agreement type choice" msgid "Privacy policy" -msgstr "" +msgstr "Polityka prywatności" #: markup/finalize.py:24 #, python-format msgctxt "quote title" msgid "%(title)s has written:" -msgstr "" +msgstr "Napisane przez %(title)s:" #: markup/finalize.py:28 msgctxt "quote title" msgid "Quoted message:" -msgstr "" +msgstr "Cytowana wiadomość:" #: markup/finalize.py:34 msgctxt "spoiler" msgid "Reveal spoiler" -msgstr "" +msgstr "Odkryj spoiler" #: menus/admin/__init__.py:31 msgctxt "admin node" msgid "Menu items" -msgstr "" +msgstr "Odnośniki w menu" #: menus/admin/__init__.py:34 msgctxt "admin node" msgid "Use those options to add custom items to the navbar and footer menus." msgstr "" +"Użyj tych opcji aby dodać własne odnośniki do menu w pasku nawigacji lub " +"stopce forum." #: menus/admin/forms.py:10 msgctxt "admin menu item form" msgid "Title" -msgstr "" +msgstr "Nazwa" #: menus/admin/forms.py:12 msgctxt "admin menu item form" msgid "URL" -msgstr "" +msgstr "URL" #: menus/admin/forms.py:14 msgctxt "admin menu item form" msgid "URL where this item will point to." -msgstr "" +msgstr "Adres do którego powinien kierować ten odnośnik." #: menus/admin/forms.py:18 msgctxt "admin menu item form" msgid "Menu" -msgstr "" +msgstr "Menu" #: menus/admin/forms.py:21 msgctxt "admin menu item form" msgid "Menu in which this item will be displayed." -msgstr "" +msgstr "Menu w których będzie wyświetlany ten odnośnik." #: menus/admin/forms.py:25 msgctxt "admin menu item form" msgid "CSS class" -msgstr "" +msgstr "Klasa CSS" #: menus/admin/forms.py:28 msgctxt "admin menu item form" -msgid "If you want to set custom value for link's \"class\"." +msgid "" +"Optional. Additional CSS class to include in link's \"class\" HTML " +"attribute." msgstr "" +"Opcjonalne. Dodatkowe klasy CSS do umieszczenia w atrybucie HTML \"class\" " +"odnośnika." #: menus/admin/forms.py:33 msgctxt "admin menu item form" msgid "Open this link in new window" -msgstr "" +msgstr "Zawsze otwieraj odnośnik w nowej karcie." #: menus/admin/forms.py:36 msgctxt "admin menu item form" @@ -2003,161 +2176,167 @@ msgid "" "Enabling this option will result in the target=\"_blank\" attribute being " "added to this link's HTML element." msgstr "" +"Włączenie tej opcji sprawi że kod HTML odnośnika zawierać będzie atrybut " +"target=\"_blank\"." #: menus/admin/forms.py:41 msgctxt "admin menu item form" msgid "Rel attribute" -msgstr "" +msgstr "Atrybutu \"rel\"" #: menus/admin/forms.py:44 msgctxt "admin menu item form" msgid "Optional \"rel\" attribute that this item will use (ex. \"nofollow\")." msgstr "" +"Opcjonalna wartość dla atrybutu HTML \"rel\" dla tego odnośnika (np. " +"\"nofollow\")." #: menus/admin/views.py:17 msgctxt "admin menu items" msgid "Requested menu item does not exist." -msgstr "" +msgstr "Żądany odnośnik menu nie istnieje." #: menus/admin/views.py:32 msgctxt "admin menu items" msgid "Delete items" -msgstr "" +msgstr "Usuń odnośniki." #: menus/admin/views.py:34 msgctxt "admin menu items" msgid "Are you sure you want to delete those menu items?" -msgstr "" +msgstr "Na pewno chcesz usunąć te odnośniki?" #: menus/admin/views.py:44 msgctxt "admin menu items" msgid "Selected menu items have been deleted." -msgstr "" +msgstr "Wybrane odnośniki zostały usunięte." #: menus/admin/views.py:50 #, python-format msgctxt "admin menu items" msgid "New menu item %(item)s has been saved." -msgstr "" +msgstr "Nowy odnośnik \"%(item)s\" został dodany do menu." #: menus/admin/views.py:62 #, python-format msgctxt "admin menu items" msgid "Menu item %(item)s has been edited." -msgstr "" +msgstr "Odnośnik \"%(item)s\" został zmieniony." #: menus/admin/views.py:76 #, python-format msgctxt "admin menu items" msgid "Menu item %(item)s has been deleted." -msgstr "" +msgstr "Odnośnik \"%(item)s\" został usunięty z menu." #: menus/admin/views.py:96 #, python-format msgctxt "admin menu items" msgid "Menu item %(item)s has been moved after %(other)s." -msgstr "" +msgstr "Odnośnik \"%(item)s\" został przeniesiony za \"%(other)s\"." #: menus/admin/views.py:118 #, python-format msgctxt "admin menu items" msgid "Menu item %(item)s has been moved before %(other)s." -msgstr "" +msgstr "Odnośnik \"%(item)s\" został przeniesiony przed \"%(other)s\"." #: menus/models.py:10 msgctxt "menu choice" msgid "Navbar and footer" -msgstr "" +msgstr "Pasek nawigacji i stopka" #: menus/models.py:11 templates/misago/admin/menuitems/list.html:41 msgctxt "menu choice" msgid "Navbar" -msgstr "" +msgstr "Pasek nawigacji" #: menus/models.py:12 templates/misago/admin/menuitems/list.html:46 msgctxt "menu choice" msgid "Footer" -msgstr "" +msgstr "Stopka" #: notifications/permissions.py:15 msgctxt "notifications permission" msgid "You must be signed in to access your notifications." -msgstr "" +msgstr "Musisz się zalogować aby zobaczyć swoje powiadomienia." #: notifications/registry.py:143 #, python-format msgctxt "notification replied" msgid "%(actor)s replied to %(thread)s" -msgstr "" +msgstr "%(actor)s odpowiedział(a) w %(thread)s" #: notifications/registry.py:180 #, python-format msgctxt "notification invited" msgid "%(actor)s invited you to %(thread)s" -msgstr "" +msgstr "%(actor)s zaprosił(a) ciebie do %(thread)s" #: notifications/threads.py:30 msgctxt "notification type" msgid "Don't notify" -msgstr "" +msgstr "Nie powiadamiaj" #: notifications/threads.py:31 msgctxt "notification type" msgid "Notify on site only" -msgstr "" +msgstr "Powiadamiaj tylko na stronie" #: notifications/threads.py:33 msgctxt "notification type" msgid "Notify on site and with e-mail" -msgstr "" +msgstr "Powiadamiaj na stronie i w e-mailu" #: notifications/threads.py:136 #, python-format msgctxt "new thread reply email subject" msgid "%(thread)s - new reply by %(user)s" -msgstr "" +msgstr "%(thread)s - nowa odpowiedź od %(user)s" #: notifications/threads.py:262 #, python-format msgctxt "new private thread email subject" msgid "%(user)s has invited you to participate in private thread \"%(thread)s\"" -msgstr "" +msgstr "%(user)s zaprosił(a) ciebie do udziału w prywatnym temacie \"%(thread)s\"" #: oauth2/exceptions.py:14 msgctxt "oauth2 error" msgid "The OAuth2 process was canceled by the provider." -msgstr "" +msgstr "Proces logowania przez OAuth 2 został przerwany przez usługę." #: oauth2/exceptions.py:23 msgctxt "oauth2 error" msgid "The OAuth2 session is missing state." -msgstr "" +msgstr "W sesji OAuth 2 nie znaleziono stanu uwierzytelnienia." #: oauth2/exceptions.py:28 msgctxt "oauth2 error" msgid "The OAuth2 state was not sent by the provider." -msgstr "" +msgstr "Stan uwierzytelnienia z OAuth 2 nie został przesłany przez usługę." #: oauth2/exceptions.py:35 msgctxt "oauth2 error" msgid "" "The OAuth2 state sent by the provider did not match one in the session." msgstr "" +"Stan uwierzytelnienia z OAuth 2 przesłany przez usługę nie zgadza się z tym " +"w sesji." #: oauth2/exceptions.py:45 msgctxt "oauth2 error" msgid "The OAuth2 authorization code was not sent by the provider." -msgstr "" +msgstr "Usługa OAuth 2 nie zwróciła kodu uwierzytelniającego." #: oauth2/exceptions.py:56 msgctxt "oauth2 error" msgid "Failed to connect to the OAuth2 provider to retrieve an access token." -msgstr "" +msgstr "Nie udało się połączyć z usługą OAuth 2 aby uzyskać token dostępowy." #: oauth2/exceptions.py:63 msgctxt "oauth2 error" msgid "The OAuth2 provider responded with error for an access token request." -msgstr "" +msgstr "Usługa OAuth 2 odpowiedziała błędem na żądanie tokena dostępowego." #: oauth2/exceptions.py:70 msgctxt "oauth2 error" @@ -2165,21 +2344,23 @@ msgid "" "The OAuth2 provider did not respond with a valid JSON for an access token " "request." msgstr "" +"Usługa OAuth 2 nie zwróciła prawidłowego dokumentu JSON dla żądania tokenu " +"dostępu." #: oauth2/exceptions.py:77 msgctxt "oauth2 error" msgid "JSON sent by the OAuth2 provider did not contain an access token." -msgstr "" +msgstr "JSON zwrócony przez usługę OAuth 2 nie zawierał tokena dostępowego." #: oauth2/exceptions.py:84 msgctxt "oauth2 error" msgid "Failed to connect to the OAuth2 provider to retrieve user profile." -msgstr "" +msgstr "Nie udało się połączyć z usługą OAuth 2 aby uzyskać dane profilu." #: oauth2/exceptions.py:91 msgctxt "oauth2 error" msgid "The OAuth2 provider responded with error for user profile request." -msgstr "" +msgstr "Usługa OAuth 2 odpowiedziała błędem na żądanie o dane profilu." #: oauth2/exceptions.py:98 msgctxt "oauth2 error" @@ -2187,10 +2368,12 @@ msgid "" "The OAuth2 provider did not respond with a valid JSON for user profile " "request." msgstr "" +"Usługa OAuth 2 nie zwróciła prawidłowego dokumentu JSON dla żądania danych " +"profilu." #: oauth2/exceptions.py:104 msgctxt "oauth2 error" -msgid "JSON sent by the OAuth2 provider did not contain a user id." +msgid "JSON sent by the OAuth2 provider did not contain a user ID." msgstr "" #: oauth2/exceptions.py:112 @@ -2199,153 +2382,168 @@ msgid "" "User account associated with the profile from the OAuth2 provider was " "deactivated by the site administrator." msgstr "" +"Konto użytkownika powiązane z tym profilem z usługi OAuth 2 zostało " +"wyłączone przez administratora strony." #: oauth2/exceptions.py:121 msgctxt "oauth2 error" msgid "User profile retrieved from the OAuth2 provider did not validate." -msgstr "" +msgstr "Dane profilu zwrócone przez usługę OAuth 2 nie przeszły walidacji." -#: oauth2/user.py:98 +#: oauth2/user.py:100 msgctxt "oauth2 error" -msgid "This e-mail address is not available." +msgid "" +"Your e-mail address returned by the provider is not available for use on " +"this site." msgstr "" -#: oauth2/user.py:105 +#: oauth2/user.py:110 msgctxt "oauth2 error" -msgid "This username is not available." +msgid "" +"Your username returned by the provider is not available for use on this " +"site." msgstr "" #: search/api.py:18 msgctxt "search api" msgid "You don't have permission to search site." -msgstr "" +msgstr "Nie masz uprawnień do korzystania z funkcji szukania." #: search/permissions.py:10 msgctxt "search permission" msgid "Search" -msgstr "" +msgstr "Szukanie" #: search/permissions.py:13 msgctxt "search permission" msgid "Can search site" -msgstr "" +msgstr "Może użyć funkcji szukania" #: search/views.py:13 search/views.py:24 msgctxt "search view" msgid "You don't have permission to search site." -msgstr "" +msgstr "Nie masz uprawnień do korzystania z funkcji szukania." #: socialauth/admin/__init__.py:40 msgctxt "admin node" msgid "Social login" -msgstr "" +msgstr "Logowanie społecznościowe" #: socialauth/admin/__init__.py:43 msgctxt "admin node" msgid "Enable users to sign on and login using their social profile." msgstr "" +"Włącz opcję rejestracji i logowania poprzez wybrane serwisy społecznościowe." #: socialauth/admin/forms/base.py:11 msgctxt "admin social auth provider form" msgid "Button text" -msgstr "" +msgstr "Tekst na przycisku" #: socialauth/admin/forms/base.py:15 msgctxt "admin social auth provider form" msgid "Button color" -msgstr "" +msgstr "Kolor przycisku" #: socialauth/admin/forms/base.py:19 msgctxt "admin social auth provider form" msgid "Enable this provider" -msgstr "" +msgstr "Włącz logowanie z użyciem tej sieci społecznościowej" #: socialauth/admin/forms/base.py:46 msgctxt "admin social auth provider form" msgid "Associate existing users by email" -msgstr "" +msgstr "Wiąż istniejące konta użytkowników po e-mailu" #: socialauth/admin/forms/base.py:50 msgctxt "admin social auth provider form" msgid "" -"Enabling this option will result in the user being signed in if their forum " -"account was registered using same e-mail address as used on the social site." -" Otherwise they will be asked to specify a different e-mail to continue sign" -" in using social site." +"This setting controls handling of e-mail collisions that occur when e-mail " +"address returned from social site is already stored in the forum's database." +" Enabling this option will result in the user being signed in to pre-" +"existing account. Otherwise they will be asked to specify a different e-mail" +" to complete the sign in using social site." msgstr "" +"Ta opcja kontroluje obsługę kolizji adresów e-mail które mają miejsce kiedy " +"adres e-mail zwrócony przez serwis społecznościowy już istnieje w bazie " +"danych forum. Włączenie tej opcji sprawi że w sytuacji kiedy istnieje już w " +"bazie danych konto użytkownika z adresem e-mail takim samym jak w profilu " +"otrzymanym od sieci społecznościowej, profil ten zostanie powiązany z tym " +"kontem. W przeciwnym wypadku użytkownik zostanie poproszony o podanie nowego" +" adresu e-mail aby dokończyć logowanie." #: socialauth/admin/forms/base.py:59 socialauth/admin/forms/base.py:61 msgid "This field is required." -msgstr "" +msgstr "To pole jest wymagane." #: socialauth/admin/forms/facebook.py:9 msgctxt "admin social auth facebook form" msgid "App ID" -msgstr "" +msgstr "ID aplikacji" #: socialauth/admin/forms/facebook.py:13 msgctxt "admin social auth facebook form" msgid "App Secret" -msgstr "" +msgstr "Sekret aplikacji" #: socialauth/admin/forms/github.py:9 msgctxt "admin social auth github form" msgid "Client ID" -msgstr "" +msgstr "ID klienta" #: socialauth/admin/forms/github.py:13 msgctxt "admin social auth github form" msgid "Client Secret" -msgstr "" +msgstr "Sekret klienta" #: socialauth/admin/forms/google.py:9 msgctxt "admin social auth google form" msgid "Client ID" -msgstr "" +msgstr "ID klienta" #: socialauth/admin/forms/google.py:13 msgctxt "admin social auth google form" msgid "Client Secret" -msgstr "" +msgstr "Sekret klienta" #: socialauth/admin/forms/twitter.py:9 msgctxt "admin social auth twitter form" msgid "Consumer API key" -msgstr "" +msgstr "Publiczny klucz API konsumenta" #: socialauth/admin/forms/twitter.py:14 msgctxt "admin social auth twitter form" msgid "Consumer API secret key" -msgstr "" +msgstr "Prywatny klucz API konsumenta" #: socialauth/admin/views.py:16 msgctxt "admin social auth providers" msgid "Requested social login provider does not exist." -msgstr "" +msgstr "Żądana opcja logowania nie istnieje." #: socialauth/admin/views.py:64 #, python-format msgctxt "admin social auth providers" msgid "Login with %(provider)s has been updated." -msgstr "" +msgstr "Logowanie przez %(provider)s zostało zmienione." #: socialauth/admin/views.py:76 #, python-format msgctxt "admin social auth providers" msgid "Login with %(provider)s has been disabled." -msgstr "" +msgstr "Logowanie przez %(provider)s zostało wyłączone." #: socialauth/admin/views.py:99 #, python-format msgctxt "admin social auth providers" msgid "Login with %(provider)s has been moved after %(other)s." -msgstr "" +msgstr "Logowanie przez %(provider)s zostało przeniesione za %(other)s." #: socialauth/admin/views.py:123 #, python-format msgctxt "admin social auth providers" msgid "Login with %(provider)s has been moved before %(other)s." -msgstr "" +msgstr "Logowanie przez %(provider)s zostało przeniesione przed %(other)s." #: socialauth/pipeline.py:89 #, python-format @@ -2366,7 +2564,7 @@ msgstr "" #: socialauth/pipeline.py:225 msgctxt "social auth" msgid "Please try resubmitting the form." -msgstr "" +msgstr "Spróbuj ponownie wysłać formularz." #: socialauth/views.py:26 #, python-format @@ -2377,46 +2575,43 @@ msgstr "" #: templates/misago/acl_debug.html:5 #, python-format msgctxt "debug toolbar user acl" -msgid "" -"\n" -" %(user)s roles\n" -" " +msgid "%(user)s roles" msgstr "" #: templates/misago/acl_debug.html:9 msgctxt "debug toolbar user acl" msgid "Anonymous roles" -msgstr "" +msgstr "Role niezalogowanych" #: templates/misago/acl_debug.html:15 msgctxt "debug toolbar user acl" msgid "Role" -msgstr "" +msgstr "Rola" #: templates/misago/acl_debug.html:16 msgctxt "debug toolbar user acl" msgid "Permissions" -msgstr "" +msgstr "Uprawnienia" #: templates/misago/acl_debug.html:30 msgctxt "debug toolbar user acl" msgid "Current ACL" -msgstr "" +msgstr "Aktualny ACL" #: templates/misago/acl_debug.html:34 msgctxt "debug toolbar user acl" msgid "Key" -msgstr "" +msgstr "Klucz" #: templates/misago/acl_debug.html:35 msgctxt "debug toolbar user acl" msgid "Value" -msgstr "" +msgstr "Wartość" #: templates/misago/activation/done.html:5 msgctxt "account activation page" msgid "Account activated" -msgstr "" +msgstr "Konto aktywowane" #: templates/misago/activation/done.html:19 msgctxt "account activation page" @@ -2424,27 +2619,29 @@ msgid "" "You can now sign in to finish setting up your account and to participate in " "or start new discussions." msgstr "" +"Możesz się teraz zalogować aby dokończyć ustawianie swojego konta oraz " +"uczestniczyć w istniejących i zakładać własne tematy." #: templates/misago/activation/error.html:5 msgctxt "account activation page" msgid "Activation error" -msgstr "" +msgstr "Błąd aktywacji" #: templates/misago/activation/error.html:18 msgctxt "account activation page" msgid "Can't activate account." -msgstr "" +msgstr "Nie można aktywować konta." #: templates/misago/activation/error.html:22 msgctxt "account activation page" msgid "Request another activation link." -msgstr "" +msgstr "Uzyskaj nowy odnośnik aktywacyjny." #: templates/misago/activation/request.html:5 #: templates/misago/activation/request.html:18 msgctxt "account activation page" msgid "Request activation link" -msgstr "" +msgstr "Nowy odnośnik aktywacyjny" #: templates/misago/activation/request.html:32 msgctxt "account activation page" @@ -2452,6 +2649,8 @@ msgid "" "The site administrator may impose a requirement on newly registered accounts" " to be activated before users will be able to sign in." msgstr "" +"Administrator strony może prowadzić wymóg aby nowo zarejestrowane konta były" +" aktywowane nim możliwe będzie logowanie na nie." #: templates/misago/activation/request.html:35 msgctxt "account activation page" @@ -2460,6 +2659,10 @@ msgid "" "account by clicking a special activation link. This link will be valid only " "for your browser, for seven days or until your account is activated." msgstr "" +"W zależności od czasu rejestracji, możliwym może być aktywacja twojego konta" +" poprzez specjalny odnośnik aktywacyjny wysłany do ciebie w wiadomości " +"e-mail. Ten odnośnik będzie działał wyłącznie dla twojej przeglądarki, do " +"chwili aktywacji twojego konta ale nie dłużej niż przez 7 dni." #: templates/misago/activation/request.html:38 msgctxt "account activation page" @@ -2467,700 +2670,708 @@ msgid "" "To receive this link, enter your account's e-mail address in the form and " "press the \"Send link\" button." msgstr "" +"Aby otrzymać ten odnośnik, podaj adres e-mail twojego konta i kliknij na " +"przycisk \"Wyślij odnośnik\"." #: templates/misago/activation/request.html:56 msgctxt "account activation page" msgid "To request a new activation link please enable JavaScript." -msgstr "" +msgstr "Aby otrzymać nowy odnośnik aktywacyjny włącz JavaScript." #: templates/misago/activation/stopped.html:5 msgctxt "account activation page" msgid "Activation failed" -msgstr "" +msgstr "Aktywacja nieudana" #: templates/misago/activation/stopped.html:19 msgctxt "account activation page" msgid "Your account can't be activated at this time." -msgstr "" +msgstr "Twoje konto nie może być teraz aktywowane." #: templates/misago/admin/agreements/form.html:9 #: templates/misago/admin/agreements/form.html:40 msgctxt "admin agreement form" msgid "New agreement" -msgstr "" +msgstr "Nowa zgoda" #: templates/misago/admin/agreements/form.html:29 msgctxt "admin agreement form" msgid "View on site" -msgstr "" +msgstr "Zobacz na stronie" #: templates/misago/admin/agreements/form.html:38 msgctxt "admin agreement form" msgid "Edit agreement" -msgstr "" +msgstr "Zmień zgodę" #: templates/misago/admin/agreements/form.html:48 msgctxt "admin agreement form" msgid "Basic settings" -msgstr "" +msgstr "Podstawowe ustawienia" #: templates/misago/admin/agreements/form.html:58 msgctxt "admin agreement form" msgid "Agreement contents" -msgstr "" +msgstr "Treść zgody" #: templates/misago/admin/agreements/form.html:61 msgctxt "admin agreement form" msgid "Fill in one of the fields." -msgstr "" +msgstr "Wypełnij jedno z pól." #: templates/misago/admin/agreements/list.html:9 msgctxt "admin agreements" msgid "New agreement" -msgstr "" +msgstr "Dodaj zgodę" #: templates/misago/admin/agreements/list.html:17 msgctxt "admin agreements list" msgid "Agreement" -msgstr "" +msgstr "Zgoda" #: templates/misago/admin/agreements/list.html:19 msgctxt "admin agreements list" msgid "Type" -msgstr "" +msgstr "Typ" #: templates/misago/admin/agreements/list.html:20 msgctxt "admin agreements list" msgid "Created" -msgstr "" +msgstr "Utworzona" #: templates/misago/admin/agreements/list.html:21 msgctxt "admin agreements list" msgid "Modified" -msgstr "" +msgstr "Zmieniona" #: templates/misago/admin/agreements/list.html:41 msgctxt "admin agreements list item" msgid "Users are required to accept this agreement to use the site" -msgstr "" +msgstr "Użytkownicy muszą wyrazić tą zgodę aby korzystać z serwisu" #: templates/misago/admin/agreements/list.html:42 msgctxt "admin active agreement" msgid "Active" -msgstr "" +msgstr "Obowiązuje" #: templates/misago/admin/agreements/list.html:60 #, python-format msgctxt "admin agreements list item" msgid "%(created_on)s by %(created_by)s" -msgstr "" +msgstr "%(created_on)s przez %(created_by)s" #: templates/misago/admin/agreements/list.html:78 #, python-format msgctxt "admin agreements list item" msgid "%(last_modified_on)s by %(last_modified_by)s" -msgstr "" +msgstr "%(last_modified_on)s przez %(last_modified_by)s" #: templates/misago/admin/agreements/list.html:82 msgctxt "admin never modified agreement" msgid "never" -msgstr "" +msgstr "nigdy" #: templates/misago/admin/agreements/list.html:95 msgctxt "admin agreements" msgid "Set as active" -msgstr "" +msgstr "Ustaw jako obowiązującą" #: templates/misago/admin/agreements/list.html:102 msgctxt "admin agreements" msgid "Disable agreement" -msgstr "" +msgstr "Wyłącz" #: templates/misago/admin/agreements/list.html:107 msgctxt "admin agreements" msgid "Edit agreement" -msgstr "" +msgstr "Zmień zgodę" #: templates/misago/admin/agreements/list.html:112 msgctxt "admin agreements" msgid "Remove agreement" -msgstr "" +msgstr "Usuń zgodę" #: templates/misago/admin/agreements/list.html:124 msgctxt "admin agreements" msgid "No agreements matching criteria exist." -msgstr "" +msgstr "Nie ma zgód pasujących do szukanych kryteriów." #: templates/misago/admin/agreements/list.html:126 msgctxt "admin agreements" msgid "No agreements are set." -msgstr "" +msgstr "Nie ustawiono żadnych zgód." #: templates/misago/admin/agreements/list.html:137 msgctxt "admin agreements" msgid "Are you sure you want to set this agreement as active for its type?" -msgstr "" +msgstr "Na pewno chcesz ustawić tą zgodę jako obowiązującą dla jej typu?" #: templates/misago/admin/agreements/list.html:141 msgctxt "admin agreements" msgid "Are you sure you want to disable this agreement?" -msgstr "" +msgstr "Na pewno chcesz wyłączyć tą zgodę?" #: templates/misago/admin/agreements/list.html:145 msgctxt "admin agreements" msgid "Are you sure you want to remove this agreement?" -msgstr "" +msgstr "Na pewno chcesz usunąć tą zgodę?" #: templates/misago/admin/attachments/list.html:7 msgctxt "admin attachments list" msgid "Attachment" -msgstr "" +msgstr "Załącznik" #: templates/misago/admin/attachments/list.html:8 msgctxt "admin attachments list" msgid "Thread" -msgstr "" +msgstr "Temat" #: templates/misago/admin/attachments/list.html:48 #, python-format msgctxt "admin attachments list item" msgid "%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s." -msgstr "" +msgstr "%(filetype)s, %(size)s, przesłano przez %(uploader)s %(uploaded_on)s." #: templates/misago/admin/attachments/list.html:59 msgctxt "admin orphaned attachment" -msgid "None" -msgstr "" +msgid "This attachment is not associated with any existing post." +msgstr "Ten załącznik nie jest powiązany z żadnym istniejącym postem." + +#: templates/misago/admin/attachments/list.html:60 +msgctxt "admin orphaned attachment" +msgid "Orphaned" +msgstr "Osierocony" -#: templates/misago/admin/attachments/list.html:66 +#: templates/misago/admin/attachments/list.html:68 msgctxt "admin attachments" msgid "Delete" -msgstr "" +msgstr "Usuń" -#: templates/misago/admin/attachments/list.html:76 +#: templates/misago/admin/attachments/list.html:78 msgctxt "admin attachments" msgid "No attachments matching criteria exist." -msgstr "" +msgstr "Nie ma załączników pasujących do szukanych kryteriów." -#: templates/misago/admin/attachments/list.html:78 +#: templates/misago/admin/attachments/list.html:80 msgctxt "admin attachments" msgid "No attachments exist." -msgstr "" +msgstr "Nie ma żadnych załączników." -#: templates/misago/admin/attachments/list.html:113 +#: templates/misago/admin/attachments/list.html:115 msgctxt "admin attachments" msgid "Are you sure you want to delete this attachment?" -msgstr "" +msgstr "Na pewno chcesz usunąć ten załącznik?" #: templates/misago/admin/attachmenttypes/form.html:9 msgctxt "admin attachment type form" msgid "New type" -msgstr "" +msgstr "Nowy typ" #: templates/misago/admin/attachmenttypes/form.html:26 msgctxt "admin attachment type form" msgid "Edit attachment type" -msgstr "" +msgstr "Zmień typ załącznika" #: templates/misago/admin/attachmenttypes/form.html:28 msgctxt "admin attachment type form" msgid "New attachment type" -msgstr "" +msgstr "Dodaj typ załącznika" #: templates/misago/admin/attachmenttypes/form.html:36 msgctxt "admin attachment type form" msgid "Basic options" -msgstr "" +msgstr "Ustawienia podstawowe" #: templates/misago/admin/attachmenttypes/form.html:47 msgctxt "admin attachment type form" msgid "Availability" -msgstr "" +msgstr "Dostępność" #: templates/misago/admin/attachmenttypes/list.html:9 msgctxt "admin attachments types" msgid "New type" -msgstr "" +msgstr "Nowy typ" #: templates/misago/admin/attachmenttypes/list.html:16 msgctxt "admin attachments types list" msgid "Type" -msgstr "" +msgstr "Typ" #: templates/misago/admin/attachmenttypes/list.html:18 msgctxt "admin attachments types list" msgid "Extensions" -msgstr "" +msgstr "Rozszerzenia" #: templates/misago/admin/attachmenttypes/list.html:19 msgctxt "admin attachments types list" msgid "Mimetypes" -msgstr "" +msgstr "Type MIME" #: templates/misago/admin/attachmenttypes/list.html:20 msgctxt "admin attachments types list" msgid "Files" -msgstr "" +msgstr "Pliki" #: templates/misago/admin/attachmenttypes/list.html:33 msgctxt "admin attachments types list item" -msgid "Uploading new files of this type is disabled" -msgstr "" +msgid "Uploading new files of this type is disabled." +msgstr "Przesyłanie nowych plików tego typu jest wyłączone." #: templates/misago/admin/attachmenttypes/list.html:34 msgctxt "admin attachments type uploads disabled" msgid "Limited" -msgstr "" +msgstr "Ograniczony" #: templates/misago/admin/attachmenttypes/list.html:37 msgctxt "admin attachments types list item" -msgid "Uploading and downloading files of this type is disabled" -msgstr "" +msgid "Uploading and downloading files of this type is disabled." +msgstr "Przesyłanie i pobieranie plików tego typu jest wyłączone." #: templates/misago/admin/attachmenttypes/list.html:38 msgctxt "admin attachments type disabled" msgid "Disabled" -msgstr "" +msgstr "Wyłączony" #: templates/misago/admin/attachmenttypes/list.html:57 msgctxt "admin attachments type mimetypes not set" msgid "Not set" -msgstr "" +msgstr "Nie ustawiono" #: templates/misago/admin/attachmenttypes/list.html:70 msgctxt "admin attachments types" msgid "Edit type" -msgstr "" +msgstr "Zmień typ" #: templates/misago/admin/attachmenttypes/list.html:75 msgctxt "admin attachments types" msgid "Delete type" -msgstr "" +msgstr "Usuń typ" #: templates/misago/admin/attachmenttypes/list.html:86 msgctxt "admin attachments types" msgid "No attachment types are set." -msgstr "" +msgstr "Nie ustawiono żadnych typów załączników." #: templates/misago/admin/attachmenttypes/list.html:95 msgctxt "admin attachments types" msgid "Are you sure you want to delete this attachment type?" -msgstr "" +msgstr "Na pewno chcesz usunąć ten typ załącznika?" #: templates/misago/admin/bans/form.html:9 #: templates/misago/admin/bans/form.html:28 msgctxt "admin ban form" msgid "New ban" -msgstr "" +msgstr "Nowa blokada" #: templates/misago/admin/bans/form.html:26 msgctxt "admin ban form" msgid "Edit ban" -msgstr "" +msgstr "Zmień blokadę" #: templates/misago/admin/bans/form.html:36 msgctxt "admin ban form" msgid "Ban settings" -msgstr "" +msgstr "Ustawienia blokady" #: templates/misago/admin/bans/form.html:47 msgctxt "admin ban form" msgid "Messages" -msgstr "" +msgstr "Wiadomości" #: templates/misago/admin/bans/form.html:61 msgctxt "admin ban expires choice" msgid "Never" -msgstr "" +msgstr "Nigdy" #: templates/misago/admin/bans/form.html:62 msgctxt "admin ban expires choice" msgid "Set date" -msgstr "" +msgstr "O ustalonej porze" #: templates/misago/admin/bans/list.html:9 msgctxt "admin bans" msgid "New ban" -msgstr "" +msgstr "Nowa blokada" #: templates/misago/admin/bans/list.html:16 msgctxt "admin bans list" msgid "Ban" -msgstr "" +msgstr "Blokada" #: templates/misago/admin/bans/list.html:18 msgctxt "admin bans list" msgid "Type" -msgstr "" +msgstr "Rodzaj" #: templates/misago/admin/bans/list.html:19 msgctxt "admin bans list" msgid "Expires on" -msgstr "" +msgstr "Wygasa" #: templates/misago/admin/bans/list.html:36 msgctxt "admin ban registration only" msgid "Registration only" -msgstr "" +msgstr "Tylko rejestracje" #: templates/misago/admin/bans/list.html:41 msgctxt "admin ban expired status" msgid "Expired" -msgstr "" +msgstr "Wygasł" #: templates/misago/admin/bans/list.html:54 msgctxt "admin ban never expires" msgid "Never" -msgstr "" +msgstr "Nigdy" #: templates/misago/admin/bans/list.html:65 msgctxt "admin bans" msgid "Edit ban" -msgstr "" +msgstr "Zmień blokadę" #: templates/misago/admin/bans/list.html:70 msgctxt "admin bans" msgid "Remove ban" -msgstr "" +msgstr "Usuń blokadę" #: templates/misago/admin/bans/list.html:82 msgctxt "admin bans" msgid "No bans matching criteria exist." -msgstr "" +msgstr "Nie ma blokad pasujących do szukanych kryteriów." #: templates/misago/admin/bans/list.html:84 msgctxt "admin bans" msgid "No bans are set." -msgstr "" +msgstr "Nie ustawiono żadnych blokad." #: templates/misago/admin/bans/list.html:95 msgctxt "admin bans" msgid "Are you sure you want to remove this ban?" -msgstr "" +msgstr "Na pewno chcesz usunąć tą blokadę?" #: templates/misago/admin/base.html:7 templates/misago/admin/login.html:6 msgctxt "admin title" msgid "Misago Administration" -msgstr "" +msgstr "Administracja Misago" #: templates/misago/admin/categories/delete.html:6 #, python-format msgctxt "admin category form" msgid "Delete category: %(category)s" -msgstr "" +msgstr "Usuń kategorię: %(category)s" #: templates/misago/admin/categories/delete.html:21 #: templates/misago/admin/categories/delete.html:39 msgctxt "admin category form" msgid "Delete category" -msgstr "" +msgstr "Usuń kategorię" #: templates/misago/admin/categories/delete.html:27 msgctxt "admin category form" msgid "Category contents" -msgstr "" +msgstr "Zawartość kategorii" #: templates/misago/admin/categories/form.html:9 #: templates/misago/admin/categories/form.html:46 msgctxt "admin category form" msgid "New category" -msgstr "" +msgstr "Nowa kategoria" #: templates/misago/admin/categories/form.html:29 msgctxt "admin categories" msgid "Edit permissions" -msgstr "" +msgstr "Zmień uprawnienia" #: templates/misago/admin/categories/form.html:35 #: templates/misago/admin/categoryroles/categoryroles.html:30 msgctxt "admin categories" msgid "View on site" -msgstr "" +msgstr "Zobacz na stronie" #: templates/misago/admin/categories/form.html:44 msgctxt "admin category form" msgid "Edit category" -msgstr "" +msgstr "Zmień kategorię" #: templates/misago/admin/categories/form.html:54 msgctxt "admin category form" msgid "Display and position" -msgstr "" +msgstr "Wyświetlanie i pozycja" #: templates/misago/admin/categories/form.html:67 msgctxt "admin category form" msgid "Behavior" -msgstr "" +msgstr "Zachowanie" #: templates/misago/admin/categories/form.html:76 msgctxt "admin category form" msgid "Content approval" -msgstr "" +msgstr "Akceptacja treści" #: templates/misago/admin/categories/form.html:86 msgctxt "admin category form" msgid "Prune threads" -msgstr "" +msgstr "Usuwanie tematów" #: templates/misago/admin/categories/list.html:9 msgctxt "admin categories" msgid "New category" -msgstr "" +msgstr "Nowa kategoria" #: templates/misago/admin/categories/list.html:17 msgctxt "admin categories list" msgid "Category" -msgstr "" +msgstr "Kategoria" #: templates/misago/admin/categories/list.html:18 msgctxt "admin categories list" msgid "Label" -msgstr "" +msgstr "Etykieta" #: templates/misago/admin/categories/list.html:19 msgctxt "admin categories list" msgid "CSS class" -msgstr "" +msgstr "Klasa CSS" #: templates/misago/admin/categories/list.html:20 msgctxt "admin categories list" msgid "Threads" -msgstr "" +msgstr "Tematy" #: templates/misago/admin/categories/list.html:21 msgctxt "admin categories list" msgid "Posts" -msgstr "" +msgstr "Posty" #: templates/misago/admin/categories/list.html:53 msgctxt "admin category css class" msgid "Not set" -msgstr "" +msgstr "Nie ustawiono" #: templates/misago/admin/categories/list.html:66 msgctxt "admin categories" msgid "Move down" -msgstr "" +msgstr "Przenieś w dół" #: templates/misago/admin/categories/list.html:80 msgctxt "admin categories" msgid "Move up" -msgstr "" +msgstr "Przenieś w górę" #: templates/misago/admin/categories/list.html:102 #: templates/misago/admin/categoryroles/categoryroles.html:24 msgctxt "admin categories" msgid "Edit category" -msgstr "" +msgstr "Zmień kategorię" #: templates/misago/admin/categories/list.html:105 msgctxt "admin categories" msgid "Delete category" -msgstr "" +msgstr "Usuń kategorię" #: templates/misago/admin/categories/list.html:115 msgctxt "admin categories" msgid "No categories are set." -msgstr "" +msgstr "Nie ustawiono żadnych kategorii." #: templates/misago/admin/categoryroles/categoryroles.html:6 #, python-format msgctxt "admin category roles form" msgid "%(category)s: Permissions" -msgstr "" +msgstr "%(category)s: uprawnienia" #: templates/misago/admin/categoryroles/categoryroles.html:37 msgctxt "admin category roles form" msgid "Change permissions" -msgstr "" +msgstr "Zmień uprawnienia" #: templates/misago/admin/categoryroles/categoryroles.html:59 msgctxt "admin category roles form" msgid "Are you sure you want to abandon changes?" -msgstr "" +msgstr "Na pewno chcesz porzucić zmiany?" #: templates/misago/admin/categoryroles/form.html:9 #: templates/misago/admin/categoryroles/form.html:28 msgctxt "admin category role form" msgid "New category role" -msgstr "" +msgstr "Nowa rola kategorii" #: templates/misago/admin/categoryroles/form.html:26 msgctxt "admin category role form" msgid "Edit category role" -msgstr "" +msgstr "Zmień rolę kategorii" #: templates/misago/admin/categoryroles/form.html:36 msgctxt "admin category role form" msgid "Basic settings" -msgstr "" +msgstr "Podstawowe ustawienia" #: templates/misago/admin/categoryroles/list.html:9 msgctxt "admin categories roles" msgid "New role" -msgstr "" +msgstr "Nowa rola" #: templates/misago/admin/categoryroles/list.html:16 msgctxt "admin categories roles list" msgid "Roles" -msgstr "" +msgstr "Role" #: templates/misago/admin/categoryroles/list.html:34 msgctxt "admin categories roles" msgid "Edit role" -msgstr "" +msgstr "Zmień rolę" #: templates/misago/admin/categoryroles/list.html:39 msgctxt "admin categories roles" msgid "Delete role" -msgstr "" +msgstr "Usuń rolę" #: templates/misago/admin/categoryroles/list.html:50 msgctxt "admin categories roles" msgid "No category roles are set." -msgstr "" +msgstr "Nie ustawiono żadnych ról kategorii." #: templates/misago/admin/categoryroles/list.html:59 msgctxt "admin categories roles" msgid "Are you sure you want to delete this role?" -msgstr "" +msgstr "Na pewno chcesz usunąć tą rolę?" #: templates/misago/admin/categoryroles/rolecategories.html:6 #, python-format msgctxt "admin role categories form" msgid "%(role)s: Category permissions" -msgstr "" +msgstr "%(role)s: uprawnienia kategorii" #: templates/misago/admin/categoryroles/rolecategories.html:24 #: templates/misago/admin/roles/list.html:42 msgctxt "admin roles" msgid "Edit role" -msgstr "" +msgstr "Zmień rolę" #: templates/misago/admin/categoryroles/rolecategories.html:31 msgctxt "admin role categories form" msgid "Change permissions" -msgstr "" +msgstr "Zmień uprawnienia" #: templates/misago/admin/categoryroles/rolecategories.html:56 msgctxt "admin role categories form" msgid "Are you sure you want to abandon changes?" -msgstr "" +msgstr "Na pewno chcesz porzucić zmiany?" #: templates/misago/admin/conf/analytics_settings.html:8 msgctxt "admin captcha settings form" msgid "Google Analytics and Search Console" -msgstr "" +msgstr "Google Analytics i Search Console" #: templates/misago/admin/conf/captcha_settings.html:8 msgctxt "admin captcha settings form" msgid "Basic settings" -msgstr "" +msgstr "Podstawowe ustawienia" #: templates/misago/admin/conf/captcha_settings.html:16 msgctxt "admin captcha settings form" msgid "reCAPTCHA" -msgstr "" +msgstr "reCAPTCHA" #: templates/misago/admin/conf/captcha_settings.html:25 msgctxt "admin captcha settings form" msgid "Question and answer" -msgstr "" +msgstr "Pytanie i odpowiedź" #: templates/misago/admin/conf/captcha_settings.html:35 msgctxt "admin captcha settings form" msgid "Stop Forum Spam" -msgstr "" +msgstr "Stop Forum Spam" #: templates/misago/admin/conf/form.html:16 msgctxt "admin settings form" msgid "Change settings" -msgstr "" +msgstr "Zmień ustawienia" #: templates/misago/admin/conf/form.html:27 msgctxt "admin settings form" msgid "Form was completed with errors." -msgstr "" +msgstr "Formularz zawiera błędy." #: templates/misago/admin/conf/form.html:37 msgctxt "admin settings form" msgid "Save changes" -msgstr "" +msgstr "Zapisz zmiany" #: templates/misago/admin/conf/general_settings.html:8 msgctxt "admin general settings form" msgid "Site details" -msgstr "" +msgstr "Szczegóły strony" #: templates/misago/admin/conf/general_settings.html:17 msgctxt "admin general settings form" msgid "Logo" -msgstr "" +msgstr "Logo" #: templates/misago/admin/conf/general_settings.html:35 msgctxt "admin general settings form" msgid "Open Graph image" -msgstr "" +msgstr "Obraz Open Graph" #: templates/misago/admin/conf/general_settings.html:49 msgctxt "admin general settings form" msgid "Forum index" -msgstr "" +msgstr "Strona główna forum" #: templates/misago/admin/conf/general_settings.html:69 msgctxt "admin general settings form" msgid "Admin Control Panel" -msgstr "" +msgstr "Panel kontrolny administratora" #: templates/misago/admin/conf/index.html:5 msgctxt "admin settings" msgid "Settings" -msgstr "" +msgstr "Ustawienia" #: templates/misago/admin/conf/notifications_settings.html:8 msgctxt "admin notifications settings form" msgid "Default notifications settings" -msgstr "" +msgstr "Domyślne preferencje powiadomień" #: templates/misago/admin/conf/notifications_settings.html:9 msgctxt "admin notifications settings form" msgid "Those settings are applied only to newly created user accounts." msgstr "" +"Te ustawienia mają zastosowanie wyłącznie dla nowych kont użytkowników." #: templates/misago/admin/conf/notifications_settings.html:22 msgctxt "admin notifications settings form" msgid "Performance settings" -msgstr "" +msgstr "Ustawienia wydajności" #: templates/misago/admin/conf/oauth2_settings.html:8 msgctxt "admin oauth2 settings form" msgid "Basic settings" -msgstr "" +msgstr "Podstawowe ustawienia" #: templates/misago/admin/conf/oauth2_settings.html:19 msgctxt "admin oauth2 settings form" msgid "Initializing login" -msgstr "" +msgstr "Inicjalizacja procesu logowania" #: templates/misago/admin/conf/oauth2_settings.html:28 msgctxt "admin oauth2 settings form" msgid "Retrieving access token" -msgstr "" +msgstr "Pobieranie tokena dostępu" #: templates/misago/admin/conf/oauth2_settings.html:38 msgctxt "admin oauth2 settings form" msgid "Retrieving user data" -msgstr "" +msgstr "Pobieranie danych użytkownika" #: templates/misago/admin/conf/oauth2_settings.html:50 msgctxt "admin oauth2 settings form" msgid "New user sign-ons" -msgstr "" +msgstr "Logowanie nowych użytkowników" #: templates/misago/admin/conf/oauth2_settings.html:58 msgctxt "admin oauth2 settings form" msgid "User JSON mappings" -msgstr "" +msgstr "Mapowanie JSON z danymi użytkownika" #: templates/misago/admin/conf/oauth2_settings.html:61 msgctxt "admin oauth2 settings form" @@ -3169,66 +3380,70 @@ msgid "" "data returned by the provider. If this key is nested under other key, use " "full path and separate keys with periods (\".\")." msgstr "" +"Ścieżka do wartości to klucz pod którym może być znaleziona w dokumencie " +"JSON z danymi użytkownika zwróconymi przez usługę. Jeśli ten klucz jest " +"zagnieżdżony pod innym kluczem, podaj pełną ścieżkę oddzielając od siebie " +"klucze kropkami (\".\")." #: templates/misago/admin/conf/oauth2_settings.html:66 msgctxt "admin oauth2 settings form" msgid "For example, for given JSON with user data:" -msgstr "" +msgstr "Dla przykładowego dokumentu JSON z danymi użytkownika:" #: templates/misago/admin/conf/oauth2_settings.html:81 msgctxt "admin oauth2 settings form" msgid "Those paths should be used:" -msgstr "" +msgstr "Należy użyć następujących ścieżek:" #: templates/misago/admin/conf/oauth2_settings.html:86 msgctxt "admin oauth2 settings form" msgid "User ID" -msgstr "" +msgstr "ID użytkownika" #: templates/misago/admin/conf/oauth2_settings.html:87 msgctxt "admin oauth2 settings form" msgid "User name" -msgstr "" +msgstr "Nazwa użytkownika" #: templates/misago/admin/conf/oauth2_settings.html:88 msgctxt "admin oauth2 settings form" msgid "User e-mail" -msgstr "" +msgstr "E-mail użytkownika" #: templates/misago/admin/conf/oauth2_settings.html:89 msgctxt "admin oauth2 settings form" msgid "User avatar" -msgstr "" +msgstr "Awatar użytkownika" #: templates/misago/admin/conf/threads_settings.html:8 msgctxt "admin threads settings form" msgid "Posting" -msgstr "" +msgstr "Postowanie" #: templates/misago/admin/conf/threads_settings.html:26 msgctxt "admin threads settings form" msgid "Threads lists" -msgstr "" +msgstr "Lista tematów" #: templates/misago/admin/conf/threads_settings.html:34 msgctxt "admin threads settings form" msgid "Thread pages" -msgstr "" +msgstr "Strony tematów" #: templates/misago/admin/conf/threads_settings.html:44 msgctxt "admin threads settings form" msgid "Read-tracker" -msgstr "" +msgstr "Śledzenie czytań" #: templates/misago/admin/conf/threads_settings.html:52 msgctxt "admin threads settings form" msgid "Attachment error images" -msgstr "" +msgstr "Obrazy błędów załączników" #: templates/misago/admin/conf/users_settings.html:9 msgctxt "admin users settings form" msgid "Note" -msgstr "" +msgstr "Uwaga" #: templates/misago/admin/conf/users_settings.html:10 #, python-format @@ -3237,51 +3452,53 @@ msgid "" "OAuth2 client is enabled. On site registration, password and account " "deletion features have been disabled and delegated to the %(provider)s." msgstr "" +"Klient OAuth 2 jest włączony. Opcje rejestracji na stronie, zmiany hasła i " +"usunięcia konta zostały wyłączone i oddelegowane do %(provider)s." #: templates/misago/admin/conf/users_settings.html:16 msgctxt "admin users settings form" msgid "New accounts" -msgstr "" +msgstr "Nowe konta" #: templates/misago/admin/conf/users_settings.html:25 msgctxt "admin users settings form" msgid "Usernames" -msgstr "" +msgstr "Nazwy użytkowników" #: templates/misago/admin/conf/users_settings.html:35 msgctxt "admin users settings form" msgid "Avatars" -msgstr "" +msgstr "Awatary" #: templates/misago/admin/conf/users_settings.html:51 msgctxt "admin users settings form" msgid "Signatures" -msgstr "" +msgstr "Sygnatury" #: templates/misago/admin/conf/users_settings.html:59 msgctxt "admin users settings form" msgid "Data downloads" -msgstr "" +msgstr "Pobieranie kopii swoich danych" #: templates/misago/admin/conf/users_settings.html:68 msgctxt "admin users settings form" msgid "Own account deletion" -msgstr "" +msgstr "Usuwanie własnego konta" #: templates/misago/admin/conf/users_settings.html:76 msgctxt "admin users settings form" msgid "IP addresses" -msgstr "" +msgstr "Adresy IP" #: templates/misago/admin/conf/users_settings.html:84 msgctxt "admin users settings form" msgid "Default subscription preferences" -msgstr "" +msgstr "Domyślne ustawienia subskrypcji" #: templates/misago/admin/conf/users_settings.html:87 msgctxt "admin users settings form" msgid "Deprecation warning" -msgstr "" +msgstr "Ostrzeżenie o deprecjacji" #: templates/misago/admin/conf/users_settings.html:88 msgctxt "admin users settings form" @@ -3290,48 +3507,50 @@ msgid "" "will be removed in a future version of Misago. Please use the notification " "settings instead." msgstr "" +"Funkcja subskrypcji została zastąpiona powiadomieniami i będzie usunięta w " +"przyszłej wersji Misago. Użyj ustawień powiadomień." #: templates/misago/admin/conf/users_settings.html:100 msgctxt "admin users settings form" msgid "Users lists" -msgstr "" +msgstr "Listy użytkowników" #: templates/misago/admin/conf/users_settings.html:109 msgctxt "admin users settings form" msgid "Top posters ranking" -msgstr "" +msgstr "Ranking postujących" #: templates/misago/admin/dashboard/analytics.html:7 #: templates/misago/admin/dashboard/index.html:40 msgctxt "admin analytics" msgid "Analytics" -msgstr "" +msgstr "Analityka" #: templates/misago/admin/dashboard/analytics.html:14 msgctxt "admin analytics" msgid "Loading..." -msgstr "" +msgstr "Ładowanie..." #: templates/misago/admin/dashboard/checks.html:5 msgctxt "admin checks title" msgid "System checks" -msgstr "" +msgstr "Przegląd systemu" #: templates/misago/admin/dashboard/checks.html:12 msgctxt "admin version check" msgid "Loading..." -msgstr "" +msgstr "Ładowanie..." #: templates/misago/admin/dashboard/checks.html:16 #: templates/misago/admin/dashboard/index.html:32 msgctxt "admin version check" msgid "Checking Misago version used by the site..." -msgstr "" +msgstr "Sprawdzanie wersji Misago używanej przez stronę..." #: templates/misago/admin/dashboard/checks.html:30 msgctxt "admin debug check" msgid "The site is running in DEBUG mode." -msgstr "" +msgstr "Ta strona działa w trybie DEBUG." #: templates/misago/admin/dashboard/checks.html:31 msgctxt "admin debug check" @@ -3339,21 +3558,24 @@ msgid "" "Error pages displayed in DEBUG mode will expose site configuration details " "like secrets and tokens to all visitors. This is MAJOR security risk." msgstr "" +"Strony błędów wyświetlane w trybie DEBUG zdradzają wszystkim odwiedzającym " +"szczegóły konfiguracji strony takie jakie sekrety i tokeny. To POWAŻNE " +"zagrożenie bezpieczeństwa." #: templates/misago/admin/dashboard/checks.html:48 msgctxt "admin site address check" msgid "Forum address is not configured." -msgstr "" +msgstr "Adres forum nie jest ustawiony." #: templates/misago/admin/dashboard/checks.html:49 msgctxt "admin site address check" msgid "Links in e-mails sent by Misago will be broken." -msgstr "" +msgstr "Odnośniki w e-mailach wysyłanych przez Misago będą zepsute." #: templates/misago/admin/dashboard/checks.html:69 msgctxt "admin site address check" msgid "Configured forum address appears to be incorrect." -msgstr "" +msgstr "Adres forum wygląda na źle ustawiony." #: templates/misago/admin/dashboard/checks.html:77 #, python-format @@ -3362,16 +3584,18 @@ msgid "" "Your forum address is set to %(configured_address)s while correct value " "appears to be %(correct_address)s." msgstr "" +"Adres forum jest ustawiony na %(configured_address)s podczas gdy prawidłową " +"wartością wydaje się być %(correct_address)s. " #: templates/misago/admin/dashboard/checks.html:82 msgctxt "admin site address check" -msgid "Links in e-mails sentby Misago will be broken." -msgstr "" +msgid "Links in e-mails sent by Misago may be broken." +msgstr "Odnośniki w e-mailach wysyłanych przez Misago mogą być nieprawidłowe." #: templates/misago/admin/dashboard/checks.html:102 msgctxt "admin https check" msgid "The site is not running over HTTPS." -msgstr "" +msgstr "Strona nie korzysta z HTTPS." #: templates/misago/admin/dashboard/checks.html:103 msgctxt "admin https check" @@ -3379,18 +3603,23 @@ msgid "" "Browsers may warn users visiting the site about it being insecure. Search " "engines will lower its position in search results." msgstr "" +"Przeglądarki mogą ostrzegać użytkowników odwiedzających stronę o możliwym " +"zagrożeniu. Silniki wyszukiwania mogą obniżać jej pozycję w swoich wynikach." #: templates/misago/admin/dashboard/checks.html:117 msgctxt "admin cache check" msgid "Cache is disabled." -msgstr "" +msgstr "Cache nie jest włączone." #: templates/misago/admin/dashboard/checks.html:118 msgctxt "admin cache check" msgid "" "This will cause degraded performance and increased CPU usage by the site, " -"possibly leading to increased hosting costs." +"leading to worse user experience and increased hosting costs." msgstr "" +"Spowoduje to obniżoną wydajność oraz podwyższone zużycie zasobów przez " +"stronę, a w rezultacie gorsze działanie strony dla użytkowników oraz możliwe" +" wyższe koszty utrzymania." #: templates/misago/admin/dashboard/checks.html:133 #, python-format @@ -3398,25 +3627,33 @@ msgctxt "admin data downloads check" msgid "There is %(downloads)s unprocessed data download request." msgid_plural "There are %(downloads)s unprocessed data download requests." msgstr[0] "" +"Jest %(downloads)s nieprzetworzone zadanie przygotowania kopii danych do " +"pobrania." msgstr[1] "" +"Są %(downloads)s nieprzetworzone zadania przygotowania kopii danych do " +"pobrania." msgstr[2] "" +"Jest %(downloads)s nieprzetworzonych zadań przygotowania kopii danych do " +"pobrania." msgstr[3] "" +"Jest %(downloads)s nieprzetworzonych zadań przygotowania kopii danych do " +"pobrania." #: templates/misago/admin/dashboard/checks.html:139 msgctxt "admin data downloads check" msgid "" "Cron task that should process user data download requests is not running." -msgstr "" +msgstr "Cron przygotowujący kopie danych do pobrania nie jest uruchamiany." #: templates/misago/admin/dashboard/checks.html:156 #, python-format msgctxt "admin inactive users check" msgid "There is %(users)s inactive user accounts." msgid_plural "There are %(users)s inactive users accounts." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "%(users)s konto użytkownika wymaga aktywacji." +msgstr[1] "%(users)s konta użytkowników wymagają aktywacji." +msgstr[2] "%(users)s kont użytkowników wymaga aktywacji." +msgstr[3] "%(users)s kont użytkowników wymaga aktywacji." #: templates/misago/admin/dashboard/checks.html:162 msgctxt "admin inactive users check" @@ -3424,108 +3661,112 @@ msgid "" "The site may be targeted by bots, is not sending activation e-mails, or is " "not configured to delete inactive user accounts." msgstr "" +"Strona może być celem botów, nie wysyłać e-maili albo nie jest " +"skonfigurowana aby usuwać nieaktywowane konta użytkowników." #: templates/misago/admin/dashboard/index.html:5 #: templates/misago/admin/dashboard/index.html:11 msgctxt "admin dashboard" msgid "Dashboard" -msgstr "" +msgstr "Biurko" #: templates/misago/admin/dashboard/index.html:28 msgctxt "admin version check" msgid "Version check is currently unavailable due to an error." -msgstr "" +msgstr "Sprawdzenie wersji nie jest obecnie dostępne z powodu błędu." #: templates/misago/admin/dashboard/index.html:29 msgctxt "admin version check" msgid "Misago admin API did not answer or answered with an error." msgstr "" +"API panelu administracyjnego Misago nie odpowiedziało albo odpowiedziało z " +"błędem." #: templates/misago/admin/dashboard/index.html:42 msgctxt "admin analytics" msgid "User registrations" -msgstr "" +msgstr "Rejestracje użytkowników" #: templates/misago/admin/dashboard/index.html:43 msgctxt "admin analytics" msgid "User deletions" -msgstr "" +msgstr "Usunięte konta" #: templates/misago/admin/dashboard/index.html:44 msgctxt "admin analytics" msgid "Threads started" -msgstr "" +msgstr "Założone tematy" #: templates/misago/admin/dashboard/index.html:45 msgctxt "admin analytics" msgid "Posts" -msgstr "" +msgstr "Napisane posty" #: templates/misago/admin/dashboard/index.html:46 msgctxt "admin analytics" msgid "Attachments uploaded" -msgstr "" +msgstr "Przesłane załączniki" #: templates/misago/admin/dashboard/index.html:47 msgctxt "admin analytics" msgid "Data download requests" -msgstr "" +msgstr "Prośby o kopie danych" #: templates/misago/admin/dashboard/index.html:49 msgctxt "admin analytics" msgid "Site analytics are currently unavailable due to an error." -msgstr "" +msgstr "Dane analityczne dla strony nie są obecnie dostępne z powodu błędu." #: templates/misago/admin/dashboard/totals.html:7 msgctxt "admin dashboard totals" msgid "Users" -msgstr "" +msgstr "Użytkownicy" #: templates/misago/admin/dashboard/totals.html:19 msgctxt "admin dashboard totals" msgid "Threads" -msgstr "" +msgstr "Tematy" #: templates/misago/admin/dashboard/totals.html:31 msgctxt "admin dashboard totals" msgid "Posts" -msgstr "" +msgstr "Posty" #: templates/misago/admin/dashboard/totals.html:43 msgctxt "admin dashboard totals" msgid "Attachments" -msgstr "" +msgstr "Załączniki" #: templates/misago/admin/datadownloads/form.html:6 #: templates/misago/admin/datadownloads/form.html:11 msgctxt "admin data download request form" msgid "Request new data downloads" -msgstr "" +msgstr "Przygotuj nowe kopie danych" #: templates/misago/admin/datadownloads/list.html:9 msgctxt "admin data downloads" msgid "New downloads" -msgstr "" +msgstr "Nowe kopie" #: templates/misago/admin/datadownloads/list.html:17 msgctxt "admin data downloads list" msgid "User" -msgstr "" +msgstr "Użytkownik" #: templates/misago/admin/datadownloads/list.html:18 msgctxt "admin data downloads list" msgid "Status" -msgstr "" +msgstr "Status" #: templates/misago/admin/datadownloads/list.html:19 msgctxt "admin data downloads list" msgid "Requested on" -msgstr "" +msgstr "Zlecono" #: templates/misago/admin/datadownloads/list.html:21 msgctxt "admin data downloads list" msgid "Requested by" -msgstr "" +msgstr "Zlecający" #: templates/misago/admin/datadownloads/list.html:32 #: templates/misago/admin/datadownloads/list.html:51 @@ -3534,54 +3775,57 @@ msgstr "" #: templates/misago/admin/users/list.html:32 msgctxt "admin user avatar" msgid "Avatar" -msgstr "" +msgstr "Awatar" #: templates/misago/admin/datadownloads/list.html:70 #: templates/misago/admin/datadownloads/list.html:74 msgctxt "admin data download button" msgid "Download" -msgstr "" +msgstr "Pobierz" #: templates/misago/admin/datadownloads/list.html:84 msgctxt "admin data downloads" msgid "No data downloads matching criteria exist." -msgstr "" +msgstr "Nie ma kopii danych pasujących do szukanych kryteriów." #: templates/misago/admin/datadownloads/list.html:86 msgctxt "admin data downloads" msgid "No data downloads exist." -msgstr "" +msgstr "Nie istnieją żadne kopie danych." #: templates/misago/admin/errorpages/403.html:5 msgctxt "admin error 403" msgid "Page not available" -msgstr "" +msgstr "Strona niedostępna" #: templates/misago/admin/errorpages/403.html:12 msgctxt "admin error 403" msgid "Requested page is not available" -msgstr "" +msgstr "Żądana strona nie jest dostępna" #: templates/misago/admin/errorpages/403.html:18 msgctxt "admin error 403" msgid "You don't have permission to access this page." -msgstr "" +msgstr "Nie masz uprawnień do dostępu do tej strony." #: templates/misago/admin/errorpages/404.html:5 msgctxt "admin error 404" msgid "Page not found" -msgstr "" +msgstr "Nie znaleziono strony" #: templates/misago/admin/errorpages/404.html:12 msgctxt "admin error 404" msgid "Requested page could not be found" -msgstr "" +msgstr "Żądana strona nie została znaleziona" #: templates/misago/admin/errorpages/404.html:16 msgctxt "admin error 404" msgid "" -"The link you clicked was incorrect or the page has been moved or deleted." +"The link you've followed was incorrect or the page has been moved or " +"deleted." msgstr "" +"Użyty odnośnik do strony był błędny albo strona została przeniesiona lub " +"usunięta." #: templates/misago/admin/errorpages/csrf_failure.html:5 #: templates/misago/admin/errorpages/csrf_failure.html:14 @@ -3589,7 +3833,7 @@ msgstr "" #: templates/misago/admin/errorpages/csrf_failure_authenticated.html:12 msgctxt "admin csrf error" msgid "Form submission rejected" -msgstr "" +msgstr "Formularz został odrzucony" #: templates/misago/admin/errorpages/csrf_failure_message.html:3 msgctxt "admin csrf error" @@ -3597,16 +3841,19 @@ msgid "" "Your form submission was rejected because your browser didn't send the CSRF " "cookie, or the cookie sent was invalid." msgstr "" +"Formularz został odrzucony ponieważ twoja przeglądarka nie przesłała " +"ciasteczka CSRF, albo było ono nieprawidłowe." #: templates/misago/admin/errorpages/csrf_failure_message.html:6 msgctxt "admin csrf error" msgid "This is usually a result of one of following problems:" -msgstr "" +msgstr "Zwykle dzieje się tak na skutek jednej z przyczyn:" #: templates/misago/admin/errorpages/csrf_failure_message.html:9 msgctxt "admin csrf error" msgid "Your browser is configured to don't accept or send any cookies." msgstr "" +"Twoja przeglądarka jest ustawiona aby nie przyjmować lub wysyłać ciasteczek." #: templates/misago/admin/errorpages/csrf_failure_message.html:12 msgctxt "admin csrf error" @@ -3614,6 +3861,8 @@ msgid "" "The form was sent after being opened in the browser for a long time (eg. few" " days) and cookie token has expired." msgstr "" +"Formularz był otwarty w przeglądarce przez kilka dni i ciasteczko w " +"międzyczasie wygasło." #: templates/misago/admin/errorpages/csrf_failure_message.html:15 msgctxt "admin csrf error" @@ -3621,6 +3870,7 @@ msgid "" "The site is configured to use the HTTPS, but this form was sent over the the" " HTTP." msgstr "" +"Strona jest ustawiona pod HTTPS, ale formularz przesłano korzystając z HTTP." #: templates/misago/admin/errorpages/csrf_failure_message.html:16 msgctxt "admin csrf error" @@ -3628,120 +3878,122 @@ msgid "" "If you are an owner of this site, please check if the HTTPS certificate used" " by the site is valid and accepted by the browser." msgstr "" +"Jeśli jesteś właścicielem tej strony, sprawdź czy używany przez nią " +"certyfikat HTTPS jest poprawny i akceptowany przez przeglądarkę." #: templates/misago/admin/generic/filter_form.html:7 msgctxt "admin list filters" msgid "Filter" -msgstr "" +msgstr "Filtruj" #: templates/misago/admin/generic/filter_form.html:17 msgctxt "admin list filters" msgid "Clear filters" -msgstr "" +msgstr "Wyczyść filtry" #: templates/misago/admin/generic/form.html:25 msgctxt "admin form" msgid "Form was completed with errors." -msgstr "" +msgstr "Formularz zawiera błędy." #: templates/misago/admin/generic/form.html:36 msgctxt "admin form" msgid "Cancel" -msgstr "" +msgstr "Anuluj" #: templates/misago/admin/generic/form.html:42 msgctxt "admin form action" msgid "Save and keep editing" -msgstr "" +msgstr "Zapisz i kontynuuj edycję" #: templates/misago/admin/generic/form.html:45 msgctxt "admin form action" msgid "Save changes" -msgstr "" +msgstr "Zapisz zmiany" #: templates/misago/admin/generic/form.html:49 msgctxt "admin form action" msgid "Save and add another" -msgstr "" +msgstr "Zapisz i dodaj kolejny" #: templates/misago/admin/generic/form.html:52 msgctxt "admin form action" msgid "Save" -msgstr "" +msgstr "Zapisz" #: templates/misago/admin/generic/list.html:87 msgctxt "admin list filters" msgid "Filters" -msgstr "" +msgstr "Filtry" #: templates/misago/admin/generic/list.html:90 #: templates/misago/admin/generic/list.html:105 msgctxt "admin list filters" msgid "Close" -msgstr "" +msgstr "Zamknij" #: templates/misago/admin/generic/list.html:108 msgctxt "admin list filters" msgid "Done" -msgstr "" +msgstr "Ustaw" #: templates/misago/admin/generic/mass_actions.html:10 msgctxt "admin list" msgid "With selected:" -msgstr "" +msgstr "Z wybranymi" #: templates/misago/admin/generic/order_by.html:5 msgctxt "admin list ordering" msgid "Sort:" -msgstr "" +msgstr "Kolejność:" #: templates/misago/admin/generic/order_by.html:10 msgctxt "admin list ordering" msgid "Change sorting to:" -msgstr "" +msgstr "Zmień kolejność na:" #: templates/misago/admin/generic/paginator.html:4 msgctxt "admin paginator" msgid "Go to first page" -msgstr "" +msgstr "Idź do pierwszej strony" #: templates/misago/admin/generic/paginator.html:5 #: templates/misago/admin/generic/paginator.html:9 msgctxt "admin paginator" msgid "First" -msgstr "" +msgstr "Pierwsze" #: templates/misago/admin/generic/paginator.html:13 msgctxt "admin paginator" msgid "Go to previous page" -msgstr "" +msgstr "Idź do poprzedniej strony" #: templates/misago/admin/generic/paginator.html:22 msgctxt "admin paginator" msgid "Go to next page" -msgstr "" +msgstr "Idź do następnej strony" #: templates/misago/admin/generic/paginator.html:25 msgctxt "admin paginator" msgid "Go to last page" -msgstr "" +msgstr "Idź do ostatniej strony" #: templates/misago/admin/generic/paginator.html:26 #: templates/misago/admin/generic/paginator.html:33 msgctxt "admin paginator" msgid "Last" -msgstr "" +msgstr "Ostatnie" #: templates/misago/admin/generic/paginator.html:38 #, python-format msgctxt "admin paginator" msgid "Page %(page)s of %(pages)s" -msgstr "" +msgstr "Strona %(page)s z %(pages)s" #: templates/misago/admin/icons.html:8 msgctxt "admin icons form" msgid "Favicon" -msgstr "" +msgstr "Favicon" #: templates/misago/admin/icons.html:11 msgctxt "admin icons form" @@ -3749,11 +4001,13 @@ msgid "" "Favicon is small icon that internet browsers display next to your site in " "its interface." msgstr "" +"Favicon to mała ikona którą przeglądarki internetowe wyświetlają obok nazwy " +"twojej strony w swoich interfejsach." #: templates/misago/admin/icons.html:68 msgctxt "admin icons form" msgid "Apple Touch Icon" -msgstr "" +msgstr "Ikona Apple Touch" #: templates/misago/admin/icons.html:71 msgctxt "admin icons form" @@ -3761,404 +4015,407 @@ msgid "" "Apple devices and Safari web browser will use this image to represent the " "site in its interfaces." msgstr "" +"Urządzenia Apple oraz przeglądarka safari będą używać tego obrazu dla strony" +" w swoich interfejsach." #: templates/misago/admin/login.html:6 msgctxt "admin login form" msgid "Log in" -msgstr "" +msgstr "Logowanie" #: templates/misago/admin/login.html:6 msgctxt "admin title" msgid "Django Administration" -msgstr "" +msgstr "Administracja Django" #: templates/misago/admin/login.html:24 msgctxt "admin login form" msgid "Administration" -msgstr "" +msgstr "Administracja" #: templates/misago/admin/login.html:29 msgctxt "admin login form" msgid "Please try again." -msgstr "" +msgstr "Spróbuj ponownie." #: templates/misago/admin/login.html:48 msgctxt "admin login form" msgid "Username or e-mail" -msgstr "" +msgstr "Nazwa użytkownika lub e-mail" #: templates/misago/admin/login.html:53 msgctxt "admin login form" msgid "Password" -msgstr "" +msgstr "Hasło" #: templates/misago/admin/login.html:57 msgctxt "admin login form" msgid "Sign in" -msgstr "" +msgstr "Zaloguj się" #: templates/misago/admin/login.html:60 msgctxt "admin login form" msgid "Return to site" -msgstr "" +msgstr "Wróć do strony" #: templates/misago/admin/menuitems/form.html:9 #: templates/misago/admin/menuitems/form.html:33 msgctxt "admin menu item form" msgid "New menu item" -msgstr "" +msgstr "Nowy odnośnik" #: templates/misago/admin/menuitems/form.html:31 msgctxt "admin menu item form" msgid "Edit menu item" -msgstr "" +msgstr "Zmień odnośnik" #: templates/misago/admin/menuitems/form.html:41 msgctxt "admin menu item form" msgid "Basic settings" -msgstr "" +msgstr "Podstawowe ustawienia" #: templates/misago/admin/menuitems/form.html:50 msgctxt "admin menu item form" msgid "Behavior and appearance" -msgstr "" +msgstr "Działanie i wygląd" #: templates/misago/admin/menuitems/list.html:9 msgctxt "admin menu items" msgid "New menu item" -msgstr "" +msgstr "Nowy odnośnik" #: templates/misago/admin/menuitems/list.html:16 msgctxt "admin menu items list" msgid "Item" -msgstr "" +msgstr "Odnośnik" #: templates/misago/admin/menuitems/list.html:18 msgctxt "admin menu items list" msgid "CSS Class" -msgstr "" +msgstr "Klasa CSS" #: templates/misago/admin/menuitems/list.html:19 msgctxt "admin menu items list" msgid "Target" -msgstr "" +msgstr "Nowa karta" #: templates/misago/admin/menuitems/list.html:20 msgctxt "admin menu items list" msgid "Rel" -msgstr "" +msgstr "Rel" #: templates/misago/admin/menuitems/list.html:40 msgctxt "admin menu items" msgid "Is displayed on the forum navbar." -msgstr "" +msgstr "Wyświetlany w pasku nawigacji forum." #: templates/misago/admin/menuitems/list.html:45 msgctxt "admin menu items" msgid "Is displayed on the forum footer." -msgstr "" +msgstr "Wyświetlany w stopce forum." #: templates/misago/admin/menuitems/list.html:54 msgctxt "admin menu item css class" msgid "Not set" -msgstr "" +msgstr "Nie ustawiono" #: templates/misago/admin/menuitems/list.html:72 msgctxt "admin menu items" msgid "Move down" -msgstr "" +msgstr "Przenieś w dół" #: templates/misago/admin/menuitems/list.html:86 msgctxt "admin menu items" msgid "Move up" -msgstr "" +msgstr "Przenieś w górę" #: templates/misago/admin/menuitems/list.html:103 msgctxt "admin menu items" msgid "Edit item" -msgstr "" +msgstr "Zmień odnośnik" #: templates/misago/admin/menuitems/list.html:108 msgctxt "admin menu items" msgid "Remove item" -msgstr "" +msgstr "Usuń odnośnik" #: templates/misago/admin/menuitems/list.html:119 msgctxt "admin menu items" msgid "No menu items are set." -msgstr "" +msgstr "Nie ustawiono własnych odnośników." #: templates/misago/admin/menuitems/list.html:129 msgctxt "admin menu items" msgid "Are you sure you want to remove this menu item?" -msgstr "" +msgstr "Na pewno chcesz usunąć ten odnośnik?" #: templates/misago/admin/navbar.html:12 msgctxt "admin navbar" msgid "GitHub" -msgstr "" +msgstr "GitHub" #: templates/misago/admin/navbar.html:16 msgctxt "admin navbar" msgid "Support forum" -msgstr "" +msgstr "Forum wsparcia" #: templates/misago/admin/navbar.html:20 msgctxt "admin navbar" msgid "Site index" -msgstr "" +msgstr "Strona główna" #: templates/misago/admin/navbar.html:24 msgctxt "admin navbar" msgid "Your avatar" -msgstr "" +msgstr "Twój awatar" #: templates/misago/admin/navbar.html:29 msgctxt "admin navbar" msgid "Edit your account" -msgstr "" +msgstr "Zmień swoje konto" #: templates/misago/admin/navbar.html:35 msgctxt "admin navbar" msgid "Close admin session" -msgstr "" +msgstr "Zamknij sesję administratora" #: templates/misago/admin/navbar.html:41 msgctxt "admin navbar" msgid "Log out completely" -msgstr "" +msgstr "Wyloguj się całkowicie" #: templates/misago/admin/ranks/form.html:9 #: templates/misago/admin/ranks/form.html:40 msgctxt "admin rank form" msgid "New rank" -msgstr "" +msgstr "Nowa ranga" #: templates/misago/admin/ranks/form.html:29 msgctxt "admin ranks" msgid "View on site" -msgstr "" +msgstr "Zobacz na stronie" #: templates/misago/admin/ranks/form.html:38 msgctxt "admin rank form" msgid "Edit rank" -msgstr "" +msgstr "Zmień rangę" #: templates/misago/admin/ranks/form.html:48 msgctxt "admin rank form" msgid "Name and description" -msgstr "" +msgstr "Nazwa i opis" #: templates/misago/admin/ranks/form.html:58 msgctxt "admin rank form" msgid "Permissions" -msgstr "" +msgstr "Uprawnienia" #: templates/misago/admin/ranks/form.html:66 msgctxt "admin rank form" msgid "Display and visibility" -msgstr "" +msgstr "Widoczność i wyświetlanie" #: templates/misago/admin/ranks/list.html:9 msgctxt "admin ranks" msgid "New rank" -msgstr "" +msgstr "Nowa ranga" #: templates/misago/admin/ranks/list.html:17 msgctxt "admin ranks list" msgid "Rank" -msgstr "" +msgstr "Ranga" #: templates/misago/admin/ranks/list.html:19 msgctxt "admin ranks list" msgid "Title" -msgstr "" +msgstr "Tytuł" #: templates/misago/admin/ranks/list.html:20 msgctxt "admin ranks list" msgid "CSS class" -msgstr "" +msgstr "Klasa CSS" #: templates/misago/admin/ranks/list.html:45 msgctxt "admin ranks" msgid "Has dedicated page on users list" -msgstr "" +msgstr "Własna sekcja na listach użytkowników" #: templates/misago/admin/ranks/list.html:46 msgctxt "admin rank has tab status" msgid "Tab" -msgstr "" +msgstr "Sekcja" #: templates/misago/admin/ranks/list.html:50 msgctxt "admin ranks" msgid "This is default rank assigned to new members" -msgstr "" +msgstr "To jest domyślna ranga przypisywana nowym użytkownikom." #: templates/misago/admin/ranks/list.html:51 msgctxt "admin rank is default status" msgid "Default" -msgstr "" +msgstr "Domyślna" #: templates/misago/admin/ranks/list.html:59 msgctxt "admin rank user title" msgid "Not set" -msgstr "" +msgstr "Nie ustawiono" #: templates/misago/admin/ranks/list.html:66 msgctxt "admin rank css class" msgid "Not set" -msgstr "" +msgstr "Nie ustawiona" #: templates/misago/admin/ranks/list.html:74 msgctxt "admin ranks" msgid "Move down" -msgstr "" +msgstr "Przenieś w dół" #: templates/misago/admin/ranks/list.html:88 msgctxt "admin ranks" msgid "Move up" -msgstr "" +msgstr "Przenieś w górę" #: templates/misago/admin/ranks/list.html:105 msgctxt "admin ranks" msgid "List users" -msgstr "" +msgstr "Lista użytkowników" #: templates/misago/admin/ranks/list.html:111 msgctxt "admin ranks" msgid "Set as default" -msgstr "" +msgstr "Ustaw jako domyślną" #: templates/misago/admin/ranks/list.html:116 msgctxt "admin ranks" msgid "Edit rank" -msgstr "" +msgstr "Zmień rangę" #: templates/misago/admin/ranks/list.html:121 msgctxt "admin ranks" msgid "Delete rank" -msgstr "" +msgstr "Usuń rangę" #: templates/misago/admin/ranks/list.html:132 msgctxt "admin ranks" msgid "No user ranks are set." -msgstr "" +msgstr "Nie ustawiono żadnych rang użytkowników." #: templates/misago/admin/ranks/list.html:141 msgctxt "admin ranks" msgid "Are you sure you want to delete this rank?" -msgstr "" +msgstr "Na pewno chcesz usunąć tą rangę?" #: templates/misago/admin/roles/form.html:9 #: templates/misago/admin/roles/form.html:28 msgctxt "admin role form" msgid "New role" -msgstr "" +msgstr "Nowa rola" #: templates/misago/admin/roles/form.html:26 msgctxt "admin role form" msgid "Edit role" -msgstr "" +msgstr "Zmień rolę" #: templates/misago/admin/roles/form.html:36 msgctxt "admin role form" msgid "Basic settings" -msgstr "" +msgstr "Podstawowe ustawienia" #: templates/misago/admin/roles/list.html:9 msgctxt "admin roles" msgid "New role" -msgstr "" +msgstr "Nowa rola" #: templates/misago/admin/roles/list.html:16 msgctxt "admin roles list" msgid "Role" -msgstr "" +msgstr "Rola" #: templates/misago/admin/roles/list.html:39 msgctxt "admin roles" msgid "Users with role" -msgstr "" +msgstr "Użytkownicy z tą rolą" #: templates/misago/admin/roles/list.html:47 msgctxt "admin roles" msgid "Delete role" -msgstr "" +msgstr "Usuń rolę" #: templates/misago/admin/roles/list.html:58 msgctxt "admin roles" msgid "No user roles are set." -msgstr "" +msgstr "Nie ustawiono żadnych ról użytkowników." #: templates/misago/admin/roles/list.html:67 msgctxt "admin roles" msgid "Are you sure you want to delete this role?" -msgstr "" +msgstr "Na pewno chcesz usunąć tą rolę?" #: templates/misago/admin/socialauth/form.html:17 msgctxt "admin social auth provider form" msgid "Edit social login" -msgstr "" +msgstr "Zmień opcję logowania przez sieć społecznościową" #: templates/misago/admin/socialauth/form.html:19 msgctxt "admin social auth provider form" msgid "Setup social login" -msgstr "" +msgstr "Ustaw opcję logowania przez sieć społecznościową" #: templates/misago/admin/socialauth/form.html:27 msgctxt "admin social auth provider form" msgid "General" -msgstr "" +msgstr "Ustawienia ogólne" #: templates/misago/admin/socialauth/form.html:40 msgctxt "admin social auth provider form" msgid "Button appearance" -msgstr "" +msgstr "Wygląd przycisku" #: templates/misago/admin/socialauth/list.html:8 msgctxt "admin social auth providers" msgid "Enabled login methods" -msgstr "" +msgstr "Włączone opcje logowania" #: templates/misago/admin/socialauth/list.html:15 +#: templates/misago/admin/socialauth/list.html:115 msgctxt "admin social auth providers list" msgid "Provider" -msgstr "" +msgstr "Sieć społecznościowa" #: templates/misago/admin/socialauth/list.html:32 msgctxt "admin social auth provider" msgid "Move down" -msgstr "" +msgstr "Przenieś w dół" #: templates/misago/admin/socialauth/list.html:46 msgctxt "admin social auth provider" msgid "Move up" -msgstr "" +msgstr "Przenieś w górę" #: templates/misago/admin/socialauth/list.html:63 msgctxt "admin social auth provider" msgid "Change settings" -msgstr "" +msgstr "Zmień ustawienia" #: templates/misago/admin/socialauth/list.html:68 msgctxt "admin social auth provider" msgid "Disable login" -msgstr "" +msgstr "Wyłącz opcję logowania" #: templates/misago/admin/socialauth/list.html:79 msgctxt "admin social auth providers" msgid "No social login methods are enabled." -msgstr "" +msgstr "Żadne opcje logowania przez sieci społecznościowe nie są włączone." #: templates/misago/admin/socialauth/list.html:88 msgctxt "admin social auth providers" msgid "Are you sure you want to disable this social login provider?" -msgstr "" +msgstr "Na pewno chcesz wyłączyć tą opcję logowania?" #: templates/misago/admin/socialauth/list.html:97 msgctxt "admin social auth providers" msgid "Note" -msgstr "" +msgstr "Uwaga" #: templates/misago/admin/socialauth/list.html:98 #, python-format @@ -4167,98 +4424,95 @@ msgid "" "OAuth2 client is enabled. Social authentication has been disabled with login" " and registration delegated to the %(provider)s." msgstr "" +"Klient OAuth 2 jest włączony. Opcja logowania przez sieć społecznościową nie" +" jest dostępna. Logowanie i rejestracja są obsługiwane przez %(provider)s." #: templates/misago/admin/socialauth/list.html:109 -msgctxt "admin social auth providers" +msgctxt "admin social auth providers list" msgid "Setup new login method" -msgstr "" - -#: templates/misago/admin/socialauth/list.html:115 -msgctxt "admin social auth providers" -msgid "Provider" -msgstr "" +msgstr "Ustaw nową opcję logowania" #: templates/misago/admin/socialauth/list.html:128 msgctxt "admin social auth providers" msgid "Setup login with this provider" -msgstr "" +msgstr "Ustaw tą opcję logowania" #: templates/misago/admin/socialauth/list.html:129 msgctxt "admin social auth providers" msgid "Setup" -msgstr "" +msgstr "Ustaw" #: templates/misago/admin/socialauth/list.html:136 msgctxt "admin social auth providers" msgid "No new login providers are available for setup." -msgstr "" +msgstr "Nie są dostępne żadne nieustawione opcje logowania." #: templates/misago/admin/themes/assets/css-editor-form.html:9 #: templates/misago/admin/themes/assets/css-editor-form.html:41 msgctxt "admin theme css form" msgid "New CSS" -msgstr "" +msgstr "Nowy CSS" #: templates/misago/admin/themes/assets/css-editor-form.html:39 msgctxt "admin theme css form" msgid "Edit CSS" -msgstr "" +msgstr "Zmień CSS" #: templates/misago/admin/themes/assets/css-editor-form.html:58 msgctxt "admin theme css form" msgid "Save and keep editing" -msgstr "" +msgstr "Zapisz i kontynuuj edycję" #: templates/misago/admin/themes/assets/css-editor-form.html:60 msgctxt "admin theme css form" msgid "Save changes" -msgstr "" +msgstr "Zapisz zmiany" #: templates/misago/admin/themes/assets/css-editor-form.html:62 msgctxt "admin theme css form" msgid "Save" -msgstr "" +msgstr "Zapisz" #: templates/misago/admin/themes/assets/css-editor-form.html:69 msgctxt "admin theme css form" msgid "Cancel" -msgstr "" +msgstr "Anuluj" #: templates/misago/admin/themes/assets/css-link-form.html:9 #: templates/misago/admin/themes/assets/css-link-form.html:31 msgctxt "admin theme css link form" msgid "New CSS link" -msgstr "" +msgstr "Nowy odnośnik do CSS" #: templates/misago/admin/themes/assets/css-link-form.html:29 msgctxt "admin theme css link form" msgid "Edit CSS link" -msgstr "" +msgstr "Zmień odnośnik do CSS" #: templates/misago/admin/themes/assets/css-link-form.html:44 msgctxt "admin theme css link form" msgid "Cancel" -msgstr "" +msgstr "Anuluj" #: templates/misago/admin/themes/assets/css.html:7 msgctxt "admin theme assets" msgid "CSS files" -msgstr "" +msgstr "Pliki CSS" #: templates/misago/admin/themes/assets/css.html:12 msgctxt "admin theme assets" msgid "Upload" -msgstr "" +msgstr "Prześlij" #: templates/misago/admin/themes/assets/css.html:17 msgctxt "admin theme assets" msgid "Link" -msgstr "" +msgstr "Zalinkuj" #: templates/misago/admin/themes/assets/css.html:22 msgctxt "admin theme assets" msgid "Create" -msgstr "" +msgstr "Stwórz" #: templates/misago/admin/themes/assets/css.html:31 msgid "Name" @@ -4274,11 +4528,11 @@ msgstr "" #: templates/misago/admin/themes/assets/css.html:68 msgid "Move down" -msgstr "" +msgstr "Przenieś w dół" #: templates/misago/admin/themes/assets/css.html:73 msgid "Move up" -msgstr "" +msgstr "Przenieś w górę" #: templates/misago/admin/themes/assets/css.html:80 #: templates/misago/admin/themes/assets/css.html:84 @@ -4297,102 +4551,102 @@ msgstr "" #: templates/misago/admin/themes/assets/list.html:6 msgctxt "admin theme assets" msgid "Assets" -msgstr "" +msgstr "Źródła" #: templates/misago/admin/themes/assets/list.html:22 msgctxt "admin themes" msgid "Edit theme" -msgstr "" +msgstr "Zmień motyw" #: templates/misago/admin/themes/assets/list.html:44 msgctxt "admin theme assets" msgid "Are you sure you want to delete selected items?" -msgstr "" +msgstr "Na pewno chcesz usunąć wybrane obiekty?" #: templates/misago/admin/themes/assets/media.html:7 msgctxt "admin theme media assets" msgid "Media" -msgstr "" +msgstr "Media" #: templates/misago/admin/themes/assets/media.html:12 msgctxt "admin theme media assets" msgid "Upload" -msgstr "" +msgstr "Prześlij" #: templates/misago/admin/themes/assets/media.html:21 msgctxt "admin theme media assets" msgid "Name" -msgstr "" +msgstr "Nazwa" #: templates/misago/admin/themes/assets/media.html:22 msgctxt "admin theme media assets" msgid "Modified" -msgstr "" +msgstr "Zmieniono" #: templates/misago/admin/themes/assets/media.html:23 msgctxt "admin theme media assets" msgid "Size" -msgstr "" +msgstr "Rozmiar" #: templates/misago/admin/themes/assets/media.html:24 msgctxt "admin theme media assets" msgid "Type" -msgstr "" +msgstr "Typ" #: templates/misago/admin/themes/assets/media.html:25 msgctxt "admin theme media assets" msgid "Dimensions" -msgstr "" +msgstr "Wymiary" #: templates/misago/admin/themes/assets/media.html:70 msgctxt "admin theme media assets" msgid "This theme has no media." -msgstr "" +msgstr "Ten motyw nie ma mediów." #: templates/misago/admin/themes/assets/media.html:79 msgctxt "admin theme media assets" msgid "Delete selected" -msgstr "" +msgstr "Usuń wybrane" #: templates/misago/admin/themes/assets/upload-css.html:6 msgctxt "admin theme css upload form" msgid "Upload CSS" -msgstr "" +msgstr "Prześlij CSS" #: templates/misago/admin/themes/assets/upload-css.html:7 msgctxt "admin theme css upload form" msgid "Close" -msgstr "" +msgstr "Zamknij" #: templates/misago/admin/themes/assets/upload-css.html:15 msgctxt "admin theme css upload form" msgid "Select CSS files to upload" -msgstr "" +msgstr "Wybierz pliki CSS do przesłania" #: templates/misago/admin/themes/assets/upload-css.html:20 msgctxt "admin theme css upload form" msgid "Cancel" -msgstr "" +msgstr "Anuluj" #: templates/misago/admin/themes/assets/upload-css.html:21 msgctxt "admin theme css upload form" msgid "Upload" -msgstr "" +msgstr "Prześlij" #: templates/misago/admin/themes/assets/upload-media.html:6 msgctxt "admin theme media upload form" msgid "Upload media" -msgstr "" +msgstr "Prześlij media" #: templates/misago/admin/themes/assets/upload-media.html:7 msgctxt "admin theme media upload form" msgid "Close" -msgstr "" +msgstr "Zamknij" #: templates/misago/admin/themes/assets/upload-media.html:15 msgctxt "admin theme media upload form" msgid "Select media files to upload" -msgstr "" +msgstr "Wybierz media do przesłania" #: templates/misago/admin/themes/assets/upload-media.html:18 msgctxt "admin theme media upload form" @@ -4400,6 +4654,8 @@ msgid "" "Media files are primarily image and font files that can be linked to from " "the CSS, but files of any type can be uploaded using this option." msgstr "" +"Media to głównie pliki graficzne i z fontami które można wykorzystać w CSS, " +"ale ta opcja umożliwia przesłanie plików dowolnego typu." #: templates/misago/admin/themes/assets/upload-media.html:21 msgctxt "admin theme media upload form" @@ -4407,95 +4663,97 @@ msgid "" "Theme CSS that use the \"url()\" to point to media files will be updated " "automatically." msgstr "" +"CSS motywu używający \"url()\" aby odnieść się do mediów będzie " +"automatycznie zaktualizowany." #: templates/misago/admin/themes/assets/upload-media.html:26 msgctxt "admin theme media upload form" msgid "Cancel" -msgstr "" +msgstr "Anuluj" #: templates/misago/admin/themes/assets/upload-media.html:27 msgctxt "admin theme media upload form" msgid "Upload" -msgstr "" +msgstr "Prześlij" #: templates/misago/admin/themes/form.html:9 #: templates/misago/admin/themes/form.html:40 msgctxt "admin theme form" msgid "New theme" -msgstr "" +msgstr "Nowy motyw" #: templates/misago/admin/themes/form.html:29 #: templates/misago/admin/themes/list.html:63 msgctxt "admin themes" msgid "Edit assets" -msgstr "" +msgstr "Zmień źródła" #: templates/misago/admin/themes/form.html:38 msgctxt "admin theme form" msgid "Edit theme" -msgstr "" +msgstr "Zmień motyw" #: templates/misago/admin/themes/form.html:48 msgctxt "admin theme form" msgid "Settings" -msgstr "" +msgstr "Ustawienia" #: templates/misago/admin/themes/form.html:57 msgctxt "admin theme form" msgid "Additional information (optional)" -msgstr "" +msgstr "Dodatkowe informacje (opcjonalne)" #: templates/misago/admin/themes/import.html:6 #: templates/misago/admin/themes/import.html:11 #: templates/misago/admin/themes/list.html:9 msgctxt "admin themes" msgid "Import theme" -msgstr "" +msgstr "Importuj motyw" #: templates/misago/admin/themes/import.html:23 -msgctxt "admin theme import" +msgctxt "admin theme import submit" msgid "Import" -msgstr "" +msgstr "Importuj" #: templates/misago/admin/themes/list.html:15 msgctxt "admin themes" msgid "Create theme" -msgstr "" +msgstr "Stwórz motyw" #: templates/misago/admin/themes/list.html:22 msgctxt "admin themes list" msgid "Theme" -msgstr "" +msgstr "Motyw" #: templates/misago/admin/themes/list.html:51 msgctxt "admin theme active status" msgid "Active" -msgstr "" +msgstr "Aktywny" #: templates/misago/admin/themes/list.html:68 msgctxt "admin themes" msgid "Edit information" -msgstr "" +msgstr "Zmień informacje" #: templates/misago/admin/themes/list.html:72 msgctxt "admin themes" msgid "Create child theme" -msgstr "" +msgstr "Stwórz motyw podrzędny" #: templates/misago/admin/themes/list.html:78 msgctxt "admin themes" msgid "Set as active" -msgstr "" +msgstr "Ustaw jako aktywny" #: templates/misago/admin/themes/list.html:86 msgctxt "admin themes" msgid "Export theme" -msgstr "" +msgstr "Eksportuj motyw" #: templates/misago/admin/themes/list.html:94 msgctxt "admin themes" msgid "Delete theme" -msgstr "" +msgstr "Usuń motyw" #: templates/misago/admin/themes/list.html:109 msgctxt "admin themes" @@ -4503,37 +4761,39 @@ msgid "" "Are you sure you want to delete this theme? Deleting theme will also delete " "its child themes." msgstr "" +"Na pewno chcesz usunąć ten motyw? Usunięcie motywu usunie także jego motywy " +"podrzędne." #: templates/misago/admin/users/ban.html:6 #: templates/misago/admin/users/ban.html:83 msgctxt "admin ban users form" msgid "Ban users" -msgstr "" +msgstr "Zablokuj użytkowników" #: templates/misago/admin/users/ban.html:11 msgctxt "admin ban users form" msgid "Ban selected users" -msgstr "" +msgstr "Zablokuj wybranych użytkowników" #: templates/misago/admin/users/ban.html:22 msgctxt "admin ban users form" msgid "Users" -msgstr "" +msgstr "Użytkownicy" #: templates/misago/admin/users/ban.html:28 msgctxt "admin ban users list" msgid "User" -msgstr "" +msgstr "Użytkownik" #: templates/misago/admin/users/ban.html:29 msgctxt "admin ban users list" msgid "E-mail" -msgstr "" +msgstr "E-mail" #: templates/misago/admin/users/ban.html:30 msgctxt "admin ban users list" msgid "IP address" -msgstr "" +msgstr "Adres IP" #: templates/misago/admin/users/ban.html:38 msgid "Avatar" @@ -4543,67 +4803,69 @@ msgstr "" #: templates/misago/admin/users/list.html:85 msgctxt "admin user ip deleted" msgid "IP removed" -msgstr "" +msgstr "IP usunięte" #: templates/misago/admin/users/ban.html:62 msgctxt "admin ban users form" msgid "Ban settings" -msgstr "" +msgstr "Ustawienia blokady" #: templates/misago/admin/users/ban.html:71 msgctxt "admin ban users form" msgid "Messages" -msgstr "" +msgstr "Wiadomości" #: templates/misago/admin/users/ban.html:92 msgctxt "admin ban users form" msgid "Never" -msgstr "" +msgstr "Nigdy" #: templates/misago/admin/users/ban.html:93 msgctxt "admin ban users form" msgid "Set date" -msgstr "" +msgstr "Ustaw datę" #: templates/misago/admin/users/edit.html:23 msgctxt "admin users" msgid "View on site" -msgstr "" +msgstr "Zobacz na stronie" #: templates/misago/admin/users/edit.html:31 msgctxt "admin user form" msgid "Edit user" -msgstr "" +msgstr "Zmień użytkownika" #: templates/misago/admin/users/edit.html:44 #: templates/misago/admin/users/list.html:47 msgctxt "admin users list item" msgid "Can use admin control panel and manage other administrators" msgstr "" +"Może korzystać z panelu administracyjnego i zarządzać innymi " +"administratorami." #: templates/misago/admin/users/edit.html:45 #: templates/misago/admin/users/list.html:48 msgctxt "admin user super admin status" msgid "Super Admin" -msgstr "" +msgstr "Super administrator" #: templates/misago/admin/users/edit.html:48 #: templates/misago/admin/users/list.html:51 msgctxt "admin users list item" msgid "Can use admin control panel" -msgstr "" +msgstr "Może korzystać z panelu administracyjnego" #: templates/misago/admin/users/edit.html:49 #: templates/misago/admin/users/list.html:52 msgctxt "admin user admin status" msgid "Admin" -msgstr "" +msgstr "Administrator" #: templates/misago/admin/users/edit.html:53 #: templates/misago/admin/users/list.html:56 msgctxt "admin users list item" msgid "Requires activation by administrator" -msgstr "" +msgstr "Wymaga aktywacji przez administratora" #: templates/misago/admin/users/edit.html:54 #: templates/misago/admin/users/edit.html:58 @@ -4611,79 +4873,81 @@ msgstr "" #: templates/misago/admin/users/list.html:61 msgctxt "admin user inactive status" msgid "Inactive" -msgstr "" +msgstr "Nieaktywny" #: templates/misago/admin/users/edit.html:57 #: templates/misago/admin/users/list.html:60 msgctxt "admin users list item" msgid "Has to activate their account" -msgstr "" +msgstr "Musi aktywować swoje konto" #: templates/misago/admin/users/edit.html:62 #: templates/misago/admin/users/list.html:65 msgctxt "admin users list item" msgid "Account scheduled for deletion" -msgstr "" +msgstr "Konto zakolejkowane do usunięcia" #: templates/misago/admin/users/edit.html:63 #: templates/misago/admin/users/list.html:66 msgctxt "admin user deleted status" msgid "Deleted" -msgstr "" +msgstr "Usunięty" #: templates/misago/admin/users/edit.html:66 #: templates/misago/admin/users/list.html:69 msgctxt "admin users list item" msgid "Account disabled" -msgstr "" +msgstr "Konto wyłączone" #: templates/misago/admin/users/edit.html:67 #: templates/misago/admin/users/list.html:70 msgctxt "admin user disabled status" msgid "Disabled" -msgstr "" +msgstr "Wyłączony" #: templates/misago/admin/users/edit.html:92 #, python-format msgctxt "admin user stats" msgid "%(posts)s post" msgid_plural "%(posts)s posts" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "%(posts)s post" +msgstr[1] "%(posts)s posty" +msgstr[2] "%(posts)s postów" +msgstr[3] "%(posts)s postów" #: templates/misago/admin/users/edit.html:99 #, python-format msgctxt "admin user stats" msgid "%(threads)s thread" msgid_plural "%(threads)s threads" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "%(threads)s temat" +msgstr[1] "%(threads)s tematy" +msgstr[2] "%(threads)s tematów" +msgstr[3] "%(threads)s tematy" #: templates/misago/admin/users/edit.html:110 #: templates/misago/admin/users/new.html:18 msgctxt "admin user form" msgid "Basic account settings" -msgstr "" +msgstr "Podstawowe ustawienia konta" #: templates/misago/admin/users/edit.html:129 msgctxt "admin user form" msgid "Administrator status" -msgstr "" +msgstr "Uprawnienia administratora" #: templates/misago/admin/users/edit.html:136 msgctxt "admin user form" msgid "Only superusers can change other users administrator status." msgstr "" +"Tylko super-administratorzy mogą zmieniać uprawnienia administratora innych " +"użytkowników." #: templates/misago/admin/users/edit.html:180 #: templates/misago/admin/users/new.html:37 msgctxt "admin user form" msgid "Sign-in credentials" -msgstr "" +msgstr "Dane logowania" #: templates/misago/admin/users/edit.html:184 msgctxt "admin user form" @@ -4691,36 +4955,38 @@ msgid "" "This user has not set account password and uses other service to " "authenticate." msgstr "" +"Ten użytkownik nie ma ustawionego żadnego hasła i korzysta z innej usługi do" +" logowania." #: templates/misago/admin/users/edit.html:195 msgctxt "admin user form" msgid "Avatar" -msgstr "" +msgstr "Awatar" #: templates/misago/admin/users/edit.html:205 msgctxt "admin user form" msgid "Signature" -msgstr "" +msgstr "Podpis" #: templates/misago/admin/users/edit.html:228 msgctxt "admin user form" msgid "Forum options" -msgstr "" +msgstr "Ustawienia forum" #: templates/misago/admin/users/edit.html:237 msgctxt "admin user form" msgid "Automatic subscription preferences (deprecated)" -msgstr "" +msgstr "Preferencje automatycznych subskrypcji (nie używane)" #: templates/misago/admin/users/edit.html:246 msgctxt "admin user form" msgid "Notifications preferences" -msgstr "" +msgstr "Preferencje powiadomień" #: templates/misago/admin/users/edit.html:259 msgctxt "admin user form" msgid "Account status" -msgstr "" +msgstr "Status konta" #: templates/misago/admin/users/edit.html:263 msgctxt "admin user form" @@ -4728,109 +4994,113 @@ msgid "" "This user is deleting their account. It has been deactivated for the " "duration of the process." msgstr "" +"Ten użytkownik właśnie usuwa swoje konto. Pozostanie ono wyłączone do " +"zakończenia procesu." #: templates/misago/admin/users/edit.html:264 msgctxt "admin user form" msgid "" -"No additional action is required. This account will be deleted " -"automatically." +"No additional action is required. This account will be deleted automatically" +" when process is completed." msgstr "" +"Żadna dodatkowa akcja nie jest wymagana. To konto zostanie usunięte " +"automatycznie kiedy proces dobiegnie końca." #: templates/misago/admin/users/edit.html:307 msgctxt "admin user form" msgid "Agreements" -msgstr "" +msgstr "Wyrażone zgody" #: templates/misago/admin/users/edit.html:312 msgctxt "admin user agreements list" msgid "Agreement" -msgstr "" +msgstr "Zgoda" #: templates/misago/admin/users/edit.html:313 msgctxt "admin user agreements list" msgid "Type" -msgstr "" +msgstr "Typ" #: templates/misago/admin/users/edit.html:314 msgctxt "admin user agreements list" msgid "Accepted on" -msgstr "" +msgstr "Data" #: templates/misago/admin/users/edit.html:337 msgctxt "admin user agreements list" msgid "This user didn't accept any agreements." -msgstr "" +msgstr "Ten użytkownik nie wyraził żadnych zgód." #: templates/misago/admin/users/list.html:9 msgctxt "admin users" msgid "New user" -msgstr "" +msgstr "Nowy użytkownik" #: templates/misago/admin/users/list.html:17 msgctxt "admin users list" msgid "User" -msgstr "" +msgstr "Użytkownik" #: templates/misago/admin/users/list.html:19 msgctxt "admin users list" msgid "Rank" -msgstr "" +msgstr "Ranga" #: templates/misago/admin/users/list.html:20 msgctxt "admin users list" msgid "Registration" -msgstr "" +msgstr "Rejestracja" #: templates/misago/admin/users/list.html:21 msgctxt "admin users list" msgid "Posts" -msgstr "" +msgstr "Posty" #: templates/misago/admin/users/list.html:94 msgctxt "admin users" msgid "Edit user" -msgstr "" +msgstr "Zmień użytkownika" #: templates/misago/admin/users/list.html:95 msgctxt "admin users" msgid "Edit" -msgstr "" +msgstr "Zmień" #: templates/misago/admin/users/list.html:103 msgctxt "admin users" msgid "No users matching criteria exist." -msgstr "" +msgstr "Nie ma użytkowników pasujących do szukanych kryteriów." #: templates/misago/admin/users/list.html:111 msgctxt "admin users filter form" msgid "You can include wildcard (\"*\") in username and email search:" -msgstr "" +msgstr "W szukaniu po nazwie i e-mailu możesz użyć gwiazdki (\"*\"):" #: templates/misago/admin/users/list.html:114 msgctxt "admin users filter form" msgid "\"admin*\" will find both \"admin\" and \"administrator\"." -msgstr "" +msgstr "\"admin*\" zwróci \"admin\" i \"administrator\"." #: templates/misago/admin/users/list.html:117 msgctxt "admin users filter form" msgid "\"*chan\" will match both \"chan\" and \"marichan\"." -msgstr "" +msgstr "\"*chan\" zwróci \"chan\" i \"marichan\"." #: templates/misago/admin/users/list.html:120 msgctxt "admin users filter form" msgid "\"*son*\" will match \"son\", \"song\", \"firstson\" and \"firstsong\"." -msgstr "" +msgstr "\"*son*\" zwróci \"son\", \"song\", \"firstson\" i \"firstsong\"." #: templates/misago/admin/users/new.html:6 #: templates/misago/admin/users/new.html:11 msgctxt "admin user form" msgid "New user" -msgstr "" +msgstr "Nowy użytkownik" #: templates/misago/admin/users/new.html:47 msgctxt "admin user form" msgid "Save user" -msgstr "" +msgstr "Zapisz użytkownika" #: templates/misago/categories/base.html:7 #: templates/misago/categories/base.html:29 @@ -4871,7 +5141,7 @@ msgstr[3] "" #: templates/misago/categories/body.html:15 msgctxt "categories page" msgid "No categories exist or you don't have permission to see them." -msgstr "" +msgstr "Nie istnieją żadne kategorie albo nie masz uprawnień aby je zobaczyć." #: templates/misago/categories/icon.html:4 msgctxt "category status icon" @@ -4938,13 +5208,13 @@ msgstr "" #: templates/misago/emails/activation/by_admin.html:12 msgctxt "account activated email from admin sign in cta link" msgid "this form" -msgstr "" +msgstr "tego formularza" #: templates/misago/emails/activation/by_admin.html:14 #, python-format msgctxt "account activated email from admin sign in cta" msgid "You can now sign in to it using %(login_form)s." -msgstr "" +msgstr "Od teraz możesz logować się do niego korzystając z %(login_form)s." #: templates/misago/emails/activation/by_admin.txt:10 msgctxt "account activated email" @@ -5037,11 +5307,13 @@ msgid "" "%(user)s, you are receiving this message because your data is ready for " "download." msgstr "" +"%(user)s, otrzymujesz tą wiadomość ponieważ kopia twoich danych jest gotowa " +"do pobrania." #: templates/misago/emails/data_download.html:11 msgctxt "data download ready email cta" msgid "Download data" -msgstr "" +msgstr "Pobierz dane" #: templates/misago/emails/data_download.html:14 #: templates/misago/emails/data_download.txt:15 @@ -5061,7 +5333,7 @@ msgstr[3] "" #: templates/misago/emails/data_download.txt:10 msgctxt "data download ready email" msgid "To download your data, click the following link:" -msgstr "" +msgstr "Aby pobrać swoje dane, kliknij na odnośnik:" #: templates/misago/emails/privatethread/added.html:9 #, python-format @@ -5226,7 +5498,7 @@ msgstr "" #: templates/misago/errorpages/403.html:53 msgctxt "error 403 page" msgid "You don't have permission to access this page." -msgstr "" +msgstr "Nie masz uprawnień do dostępu do tej strony." #: templates/misago/errorpages/403.html:49 msgctxt "error 403 page" @@ -5243,9 +5515,11 @@ msgstr "" #: templates/misago/errorpages/404.html:9 #: templates/misago/errorpages/404.html:18 #: templates/misago/errorpages/404.html:23 +#: templates/misago/errorpages/404.html:38 msgctxt "error 404 page" msgid "" -"The link you clicked was incorrect or the page has been moved or deleted." +"The link you've followed was incorrect or the page has been moved or " +"deleted." msgstr "" #: templates/misago/errorpages/404.html:37 @@ -5253,12 +5527,6 @@ msgctxt "error 404 page" msgid "Requested page could not be found." msgstr "" -#: templates/misago/errorpages/404.html:38 -msgctxt "error 404 page" -msgid "" -"The link you followed was incorrect or the page has been moved or deleted." -msgstr "" - #: templates/misago/errorpages/405.html:5 #: templates/misago/errorpages/405.html:13 #: templates/misago/errorpages/405.html:14 @@ -5282,22 +5550,22 @@ msgstr "" #: templates/misago/errorpages/ban_message.html:15 #, python-format msgid "This ban expires on %(expires_on)s." -msgstr "" +msgstr "Ta blokada wygaśnie %(expires_on)s." #: templates/misago/errorpages/ban_message.html:19 msgctxt "error banned message" msgid "This ban is permanent." -msgstr "" +msgstr "Ta blokada nigdy nie wygaśnie." #: templates/misago/errorpages/banned.html:5 msgctxt "error banned page" msgid "You are banned" -msgstr "" +msgstr "Twoje konto jest zablokowane" #: templates/misago/errorpages/banned.html:9 msgctxt "error banned page" msgid "You are banned from accessing this page." -msgstr "" +msgstr "Twój dostęp do tej strony jest zablokowany." #: templates/misago/errorpages/csrf_failure.html:5 msgctxt "error csrf page" @@ -5357,28 +5625,28 @@ msgstr "" #, python-format msgctxt "error oauth2 page" msgid "Could not sign in with %(provider)s" -msgstr "" +msgstr "Nie udało się zalogować przez %(provider)s" #: templates/misago/errorpages/oauth2.html:45 msgctxt "error oauth2 page" msgid "Please try again." -msgstr "" +msgstr "Spróbuj ponownie." #: templates/misago/errorpages/oauth2.html:48 msgctxt "error oauth2 page cta" msgid "Sign in" -msgstr "" +msgstr "Zaloguj się" #: templates/misago/errorpages/oauth2_profile.html:16 #, python-format msgctxt "error oauth2 profile page" msgid "Could not sign in with %(provider)s" -msgstr "" +msgstr "Nie udało się zalogować przez %(provider)s" #: templates/misago/errorpages/oauth2_profile.html:23 msgctxt "error oauth2 profile page" msgid "Found problems:" -msgstr "" +msgstr "Napotkane problemy:" #: templates/misago/errorpages/social.html:5 #: templates/misago/errorpages/social.html:11 @@ -5749,33 +6017,33 @@ msgstr "" #: templates/misago/profile/ban_details.html:16 msgctxt "user profile page ban details" msgid "Ban details" -msgstr "" +msgstr "Szczegóły blokady" #: templates/misago/profile/ban_details.html:22 msgctxt "user profile page ban details" msgid "User-shown ban message" -msgstr "" +msgstr "Komunikat blokady wyświetlany użytkownikowi" #: templates/misago/profile/ban_details.html:31 msgctxt "user profile page ban details" msgid "Team-shown ban message" -msgstr "" +msgstr "Komunikat blokady wyświetlany zespołowi strony" #: templates/misago/profile/ban_details.html:39 msgid "Ban expiration" -msgstr "" +msgstr "Wygaśnięcie blokady" #: templates/misago/profile/ban_details.html:43 #, python-format msgctxt "user profile page ban details" msgid "%(username)s's ban expires on %(expires_on)s." -msgstr "" +msgstr "Blokada %(username)s wygasa %(expires_on)s." #: templates/misago/profile/ban_details.html:47 #, python-format msgctxt "user profile page ban details" msgid "%(username)s's ban is permanent." -msgstr "" +msgstr "Konto %(username)s zablokowano na stałe." #: templates/misago/profile/base.html:9 templates/misago/profile/base.html:20 #: templates/misago/profile/base.html:35 @@ -6505,7 +6773,7 @@ msgstr "" #: templates/misago/threadslist/base.html:63 msgctxt "threads list" msgid "No threads matching specified criteria were found." -msgstr "" +msgstr "Nie ma tematów pasujących do wskazanych kryteriów." #: templates/misago/threadslist/base.html:78 msgctxt "threads list paginator" @@ -6532,7 +6800,7 @@ msgstr "" #: templates/misago/threadslist/private_threads.html:65 msgctxt "private threads page" msgid "No threads matching specified criteria were found." -msgstr "" +msgstr "Nie ma tematów pasujących do wskazanych kryteriów." #: templates/misago/threadslist/thread.html:8 #: templates/misago/threadslist/thread.html:14 @@ -6804,152 +7072,157 @@ msgstr[3] "" #: themes/admin/__init__.py:94 msgctxt "admin node" msgid "Themes" -msgstr "" +msgstr "Motywy" #: themes/admin/forms.py:21 msgctxt "admin theme parent empty label" msgid "No parent" -msgstr "" +msgstr "Bez motywu nadrzędnego" #: themes/admin/forms.py:28 themes/admin/forms.py:61 msgctxt "admin theme form" msgid "Name" -msgstr "" +msgstr "Nazwa" #: themes/admin/forms.py:30 themes/admin/forms.py:70 msgctxt "admin theme form" msgid "Parent" -msgstr "" +msgstr "Motyw nadrzędny" #: themes/admin/forms.py:33 msgctxt "admin theme form" msgid "Version" -msgstr "" +msgstr "Wersja" #: themes/admin/forms.py:36 msgctxt "admin theme form" msgid "Author(s)" -msgstr "" +msgstr "Autorzy" #: themes/admin/forms.py:38 msgctxt "admin theme form" msgid "Url" -msgstr "" +msgstr "Adres" #: themes/admin/forms.py:64 msgctxt "admin theme form" msgid "Leave this field empty to use theme name from imported file." -msgstr "" +msgstr "Zostaw to pole pusty aby użyć nazwy motywu z zaimportowanego pliku." #: themes/admin/forms.py:73 msgctxt "admin theme form" msgid "Theme file" -msgstr "" +msgstr "Plik z motywem" #: themes/admin/forms.py:74 msgctxt "admin theme form" msgid "Theme file should be a ZIP file." -msgstr "" +msgstr "Plik z motywem powinien być typu ZIP." #: themes/admin/forms.py:80 msgctxt "admin theme form" msgid "Uploaded file is not a valid ZIP file." -msgstr "" +msgstr "Przesłany plik nie jest prawidłowym plikiem ZIP." #: themes/admin/forms.py:128 msgctxt "admin theme assets form" msgid "No files have been uploaded." -msgstr "" +msgstr "Nie przesłano żadnych plików." #: themes/admin/forms.py:158 #, python-format msgctxt "admin theme assets form" msgid "File \"%(file)s\" content type \"%(content_type)s\" is not allowed." -msgstr "" +msgstr "Plik \"%(file)s\" ma niedozwolony typ \"%(content_type)s\"." #: themes/admin/forms.py:171 #, python-format msgctxt "admin theme assets form" msgid "File \"%(file)s\" extension is invalid." -msgstr "" +msgstr "Plik \"%(file)s\" ma nieprawidłowe rozszerzenie." #: themes/admin/forms.py:197 msgctxt "admin theme css form" msgid "Name" -msgstr "" +msgstr "Nazwa" #: themes/admin/forms.py:200 msgctxt "admin theme css form" msgid "" -"Should be an correct filename and include the .css extension. It will be " +"Should be a correct filename and include the .css extension. It will be " "lowercased." msgstr "" +"Powinna być prawidłową nazwą pliku i zawierać rozszerzenie \".css\". Wielkie" +" litery zostaną zastąpione małymi." #: themes/admin/forms.py:219 msgctxt "admin theme css form" msgid "You need to enter CSS for this file." -msgstr "" +msgstr "Musisz wprowadzić CSS dla tego pliku." #: themes/admin/forms.py:247 msgctxt "admin theme css link form" msgid "Link name" -msgstr "" +msgstr "Nazwa odnośnika" #: themes/admin/forms.py:250 msgctxt "admin theme css link form" msgid "Can be descriptive (e.g. \"roboto from fonts.google.com\")." -msgstr "" +msgstr "Może być opisowa (np. \"roboto z fonts.google.com\")." #: themes/admin/forms.py:254 msgctxt "admin theme css link form" msgid "Remote CSS URL" -msgstr "" +msgstr "Adres URL zdalnego CSS" #: themes/admin/importer.py:22 msgctxt "admin theme import" msgid "" "\"manifest.json\" contained by ZIP file is not a valid theme manifest file." msgstr "" +"\"manifest.json\" zawarto w pliku ZIP nie jest prawidłowym manifestem " +"motywu." #: themes/admin/importer.py:63 msgctxt "admin theme import" msgid "Uploaded ZIP file could not be extracted." -msgstr "" +msgstr "Nie można wypakować przesłanego pliku ZIP." #: themes/admin/importer.py:71 msgctxt "admin theme import" msgid "Uploaded ZIP file is empty." -msgstr "" +msgstr "Przesłany plik ZIP jest pusty." #: themes/admin/importer.py:77 msgctxt "admin theme import" msgid "Uploaded ZIP file should contain single directory." -msgstr "" +msgstr "Przesłany plik ZIP powinien zawierać jeden katalog." #: themes/admin/importer.py:83 msgctxt "admin theme import" msgid "Uploaded ZIP file didn't contain a directory." -msgstr "" +msgstr "Przesłany plik ZIP nie zawierał katalogu." #: themes/admin/importer.py:101 msgctxt "admin theme import" msgid "Uploaded ZIP file didn't contain a \"manifest.json\"." -msgstr "" +msgstr "Przesłany plik ZIP nie zawierał \"manifest.json\"." #: themes/admin/importer.py:108 msgctxt "admin theme import" msgid "\"manifest.json\" contained by ZIP file is not a valid JSON file." msgstr "" +"\"manifest.json\" z przesłanego pliku ZIP nie jest prawidłowym plikiem JSON." #: themes/admin/validators.py:13 msgctxt "admin css name validator" msgid "Name is missing an .css extension." -msgstr "" +msgstr "Nazwa pliku musi mieć rozszerzenie \".css\"." #: themes/admin/validators.py:18 msgctxt "admin css name validator" msgid "Name can't start with period (\".\")." -msgstr "" +msgstr "Nazwa pliku nie może zaczynać się od kropki." #: themes/admin/validators.py:25 msgctxt "admin css name validator" @@ -6957,54 +7230,58 @@ msgid "" "Name can contain only latin alphabet characters, digits, dots, underscores " "and dashes." msgstr "" +"Nazwa może zawierać wyłącznie znaki alfabetu łacińskiego, cyfry, kropki, " +"podkreślniki i myślniki." #: themes/admin/validators.py:33 msgctxt "admin css name validator" msgid "Name has to contain at least one latin alphabet character or digit." msgstr "" +"Nazwa pliku musi zawierać przynajmniej jedną literę z alfabetu łacińskiego " +"lub cyfrę." #: themes/admin/validators.py:46 msgctxt "admin css name unique validator" msgid "This name is already in use by other asset." -msgstr "" +msgstr "Ta nazwa jest już wykorzystana przez inny plik motywu." #: themes/admin/views.py:28 msgctxt "admin themes" msgid "Requested theme does not exist." -msgstr "" +msgstr "Żądany motyw nie istnieje." #: themes/admin/views.py:37 #, python-format msgctxt "admin themes" msgid "New theme \"%(name)s\" has been saved." -msgstr "" +msgstr "Nowy motyw \"%(name)s\" został dodany." #: themes/admin/views.py:53 #, python-format msgctxt "admin themes" msgid "Theme \"%(name)s\" has been updated." -msgstr "" +msgstr "Motyw \"%(name)s\" został zmieniony." #: themes/admin/views.py:57 msgctxt "admin themes" msgid "Default theme can't be edited." -msgstr "" +msgstr "Zawartości domyślnego motywu nie da się zmieniać." #: themes/admin/views.py:66 #, python-format msgctxt "admin themes" msgid "Theme \"%(name)s\" has been deleted." -msgstr "" +msgstr "Motyw \"%(name)s\" został usunięty." #: themes/admin/views.py:70 msgctxt "admin themes" msgid "Default theme can't be deleted." -msgstr "" +msgstr "Domyślnego motywu nie da się usunąć." #: themes/admin/views.py:72 msgctxt "admin themes" msgid "Active theme can't be deleted." -msgstr "" +msgstr "Aktywnego motywu nie można usunąć." #: themes/admin/views.py:76 #, python-format @@ -7013,195 +7290,197 @@ msgid "" "Theme \"%(name)s\" can't be deleted because one of its child themes is set " "as an active theme." msgstr "" +"Nie można usunąć motywu \"%(name)s\" ponieważ jeden z jego motywów " +"podrzędnych jest ustawiony jako aktywny motyw." #: themes/admin/views.py:93 #, python-format msgctxt "admin themes" msgid "Active theme has been changed to \"%(name)s\"." -msgstr "" +msgstr "Aktywny motyw został zmieniony na \"%(name)s\"." #: themes/admin/views.py:107 msgctxt "admin themes" msgid "Default theme can't be exported." -msgstr "" +msgstr "Domyślnego motywu nie da się wyeksportować." #: themes/admin/views.py:127 #, python-format msgctxt "admin themes" msgid "Theme \"%(name)s\" has been imported." -msgstr "" +msgstr "Motyw \"%(name)s\" został zaimportowany." #: themes/admin/views.py:134 msgctxt "admin themes" msgid "Default theme assets can't be edited." -msgstr "" +msgstr "Zawartości domyślnego motywu nie da się zmieniać." #: themes/admin/views.py:162 msgctxt "admin themes" msgid "Some css files could not have been added to the theme." -msgstr "" +msgstr "Części przesłanych plików CSS nie można było dodać do motywu." #: themes/admin/views.py:187 msgctxt "admin themes" msgid "New CSS files have been added to the theme." -msgstr "" +msgstr "Nowe pliki CSS zostały dodane do motywu." #: themes/admin/views.py:194 msgctxt "admin themes" msgid "New media files have been added to the theme." -msgstr "" +msgstr "Nowe pliki z mediami zostały dodane do motywu." #: themes/admin/views.py:227 msgctxt "admin themes" msgid "Selected CSS files have been deleted." -msgstr "" +msgstr "Wybrane pliki CSS zostały usunięte." #: themes/admin/views.py:237 msgctxt "admin themes" msgid "Selected media have been deleted." -msgstr "" +msgstr "Wybrane media zostały usunięte." #: themes/admin/views.py:258 msgctxt "admin themes" msgid "Requested CSS could not be found in the theme." -msgstr "" +msgstr "Motyw nie zawiera żądanego CSS." #: themes/admin/views.py:286 #, python-format msgctxt "admin themes" msgid "\"%s\" was moved up." -msgstr "" +msgstr "\"%s\" przeniesiono w górę." #: themes/admin/views.py:297 #, python-format msgctxt "admin themes" msgid "\"%s\" was moved down." -msgstr "" +msgstr "\"%s\" przeniesiono w dół." #: themes/admin/views.py:340 #, python-format msgctxt "admin themes" msgid "New CSS \"%(name)s\" has been saved." -msgstr "" +msgstr "Nowy CSS \"%(name)s\" został dodany." #: themes/admin/views.py:357 #, python-format msgctxt "admin themes" msgid "CSS \"%(name)s\" has been updated." -msgstr "" +msgstr "CSS \"%(name)s\" został zmieniony." #: themes/admin/views.py:381 #, python-format msgctxt "admin themes" msgid "No changes have been made to \"%(css)s\"." -msgstr "" +msgstr "Nie wprowadzono zmian w \"%(css)s\"." #: themes/admin/views.py:388 #, python-format msgctxt "admin themes" msgid "New CSS link \"%(name)s\" has been saved." -msgstr "" +msgstr "Nowy odnośnik do CSS \"%(name)s\" został dodany." #: themes/admin/views.py:413 #, python-format msgctxt "admin themes" msgid "CSS link \"%(name)s\" has been updated." -msgstr "" +msgstr "Odnośnik do CSS \"%(name)s\" został zmieniony." #: themes/models.py:40 msgctxt "default theme name" msgid "Default Misago Theme" -msgstr "" +msgstr "Domyślny motyw Misago" #: threads/admin/__init__.py:36 msgctxt "admin node" msgid "Attachments" -msgstr "" +msgstr "Załączniki" #: threads/admin/__init__.py:43 msgctxt "admin node" msgid "Attachment types" -msgstr "" +msgstr "Typy załączników" -#: threads/admin/__init__.py:45 +#: threads/admin/__init__.py:46 msgctxt "admin node" -msgid "Specify what files may be uploaded on the forum." -msgstr "" +msgid "Specify what files may be uploaded as part of user posts." +msgstr "Określ jakie pliki użytkownicy mogą przesyłać w swoich postach." #: threads/admin/forms.py:8 msgctxt "admin attachments type filter choice" msgid "All types" -msgstr "" +msgstr "Wszystkie type" #: threads/admin/forms.py:15 msgctxt "admin attachments filter form" msgid "Uploader name contains" -msgstr "" +msgstr "Nazwa przesyłającego zawiera" #: threads/admin/forms.py:19 msgctxt "admin attachments filter form" msgid "Filename contains" -msgstr "" +msgstr "Nazwa pliku zawiera" #: threads/admin/forms.py:23 msgctxt "admin attachments filter form" msgid "File type" -msgstr "" +msgstr "Typ pliku" #: threads/admin/forms.py:30 msgctxt "admin attachments filter form" msgid "State" -msgstr "" +msgstr "Stan" #: threads/admin/forms.py:37 msgctxt "admin attachments orphan filter choice" msgid "All" -msgstr "" +msgstr "Wszystkie" #: threads/admin/forms.py:44 msgctxt "admin attachments orphan filter choice" msgid "Only orphaned" -msgstr "" +msgstr "Tylko osierocone" #: threads/admin/forms.py:51 msgctxt "admin attachments orphan filter choice" msgid "Not orphaned" -msgstr "" +msgstr "Tylko powiązane z postami" #: threads/admin/forms.py:78 msgctxt "admin attachment type form" msgid "Type name" -msgstr "" +msgstr "Nazwa typu" #: threads/admin/forms.py:80 msgctxt "admin attachment type form" msgid "File extensions" -msgstr "" +msgstr "Rozszerzenia pliku" #: threads/admin/forms.py:82 msgctxt "admin attachment type form" msgid "Mimetypes" -msgstr "" +msgstr "Typy MIME" #: threads/admin/forms.py:84 msgctxt "admin attachment type form" msgid "Maximum allowed uploaded file size" -msgstr "" +msgstr "Maksymalny dozwolony rozmiar przesłanego pliku" #: threads/admin/forms.py:86 msgctxt "admin attachment type form" msgid "Status" -msgstr "" +msgstr "Status" #: threads/admin/forms.py:88 msgctxt "admin attachment type form" msgid "Limit uploads to" -msgstr "" +msgstr "Ogranicz przesyłanie pliku do" #: threads/admin/forms.py:91 msgctxt "admin attachment type form" msgid "Limit downloads to" -msgstr "" +msgstr "Ogranicz pobieranie pliku do" #: threads/admin/forms.py:97 msgctxt "admin attachment type form" @@ -7209,6 +7488,8 @@ msgid "" "List of comma separated file extensions associated with this attachment " "type." msgstr "" +"Lista rozdzielonych przecinkami rozszerzeń plików należących do tego typu " +"załączników." #: threads/admin/forms.py:101 msgctxt "admin attachment type form" @@ -7216,6 +7497,8 @@ msgid "" "Optional list of comma separated mime types associated with this attachment " "type." msgstr "" +"Opcjonalna lista rozdzielonych przecinkami typów MIME plików należących do " +"tego typu załączników." #: threads/admin/forms.py:105 msgctxt "admin attachment type form" @@ -7223,11 +7506,14 @@ msgid "" "Maximum allowed uploaded file size for this type, in kb. This setting is " "deprecated and has no effect. It will be deleted in Misago 1.0." msgstr "" +"Maksymalny dozwolony rozmiar przesłanego pliku tego typu, w kilobajtach. To " +"ustawienie jest przestarzałe i nie jest już używane. Zostanie ono usunięte w" +" Misago 1.0." #: threads/admin/forms.py:109 msgctxt "admin attachment type form" msgid "Controls this attachment type availability on your site." -msgstr "" +msgstr "Określa dostępność załączników tego typu na twojej stronie." #: threads/admin/forms.py:113 msgctxt "admin attachment type form" @@ -7237,6 +7523,10 @@ msgid "" "to allow all users with permission to upload attachments to be able to " "upload attachments of this type." msgstr "" +"Jeśli chcesz ograniczyć przesyłanie plików tego typu do użytkowników z " +"określonymi rolami, wybierz te role z listy. W przeciwnym razie nie " +"zaznaczaj żadnych ról na liście aby wszyscy użytkownicy z uprawnieniami do " +"przesyła załączników mogli przesyłać załączniki tego typu." #: threads/admin/forms.py:117 msgctxt "admin attachment type form" @@ -7246,94 +7536,98 @@ msgid "" "to allow all users with permission to download attachments to be able to " "download attachments of this type." msgstr "" +"Jeśli chcesz ograniczyć pobieranie plików tego typu do użytkowników z " +"określonymi rolami, wybierz te role z listy. W przeciwnym razie nie " +"zaznaczaj żadnych ról na liście aby wszyscy użytkownicy z uprawnieniami do " +"pobierania załączników mogli pobierać załączniki tego typu." #: threads/admin/forms.py:129 msgctxt "admin attachment type form" msgid "This field is required." -msgstr "" +msgstr "To pole jest wymagane." #: threads/admin/views/attachments.py:15 msgctxt "admin attachments" -msgid "Requested attachment could not be found." -msgstr "" +msgid "Requested attachment does not exist." +msgstr "Żądany załącznik nie istnieje." #: threads/admin/views/attachments.py:28 msgctxt "admin attachments ordering choice" msgid "From newest" -msgstr "" +msgstr "Od najnowszych" #: threads/admin/views/attachments.py:29 msgctxt "admin attachments ordering choice" msgid "From oldest" -msgstr "" +msgstr "Od najstarszych" #: threads/admin/views/attachments.py:30 msgctxt "admin attachments ordering choice" msgid "A to z" -msgstr "" +msgstr "A do z" #: threads/admin/views/attachments.py:31 msgctxt "admin attachments ordering choice" msgid "Z to a" -msgstr "" +msgstr "Z do a" #: threads/admin/views/attachments.py:32 msgctxt "admin attachments ordering choice" msgid "Smallest files" -msgstr "" +msgstr "Od najmniejszego" #: threads/admin/views/attachments.py:33 msgctxt "admin attachments ordering choice" msgid "Largest files" -msgstr "" +msgstr "Od największego" #: threads/admin/views/attachments.py:35 msgctxt "admin attachments" msgid "With attachments: 0" -msgstr "" +msgstr "Z załącznikami: 0" #: threads/admin/views/attachments.py:36 msgctxt "admin attachments" msgid "Select attachments" -msgstr "" +msgstr "Wybierz załączniki" #: threads/admin/views/attachments.py:40 msgctxt "admin attachments" msgid "Delete attachments" -msgstr "" +msgstr "Usuń załączniki" #: threads/admin/views/attachments.py:43 msgctxt "admin attachments" msgid "Are you sure you want to delete selected attachments?" -msgstr "" +msgstr "Na pewno chcesz usunąć wybrane załączniki?" #: threads/admin/views/attachments.py:68 msgctxt "admin attachments" msgid "Selected attachments have been deleted." -msgstr "" +msgstr "Wybrane załączniki zostały usunięte." #: threads/admin/views/attachments.py:91 #, python-format msgctxt "admin attachments" msgid "Attachment \"%(filename)s\" has been deleted." -msgstr "" +msgstr "Załącznik \"%(filename)s\" został usunięty." #: threads/admin/views/attachmenttypes.py:16 msgctxt "admin attachments types" -msgid "Requested attachment type could not be found." -msgstr "" +msgid "Requested attachment type does not exist." +msgstr "Żądany typ załącznika nie istnieje." #: threads/admin/views/attachmenttypes.py:39 #, python-format msgctxt "admin attachments types" msgid "New type \"%(name)s\" has been saved." -msgstr "" +msgstr "Nowy typ załącznika \"%(name)s\" został dodany." #: threads/admin/views/attachmenttypes.py:45 #, python-format msgctxt "admin attachments types" msgid "Attachment type \"%(name)s\" has been edited." -msgstr "" +msgstr "Typ załącznika \"%(name)s\" został zmieniony." #: threads/admin/views/attachmenttypes.py:54 #, python-format @@ -7342,17 +7636,19 @@ msgid "" "Attachment type \"%(name)s\" has associated attachments and can't be " "deleted." msgstr "" +"Typ załączniku \"%(name)s\" jest powiązany z istniejącymi załącznikami i nie" +" może być usunięty." #: threads/admin/views/attachmenttypes.py:61 #, python-format msgctxt "admin attachments types" msgid "Attachment type \"%(name)s\" has been deleted." -msgstr "" +msgstr "Typ załącznika \"%(name)s\" został usunięty." #: threads/api/attachments.py:20 msgctxt "attachments api" msgid "You don't have permission to upload new files." -msgstr "" +msgstr "Nie masz uprawnień do przesyłania nowych plików." #: threads/api/attachments.py:33 msgctxt "attachments api" @@ -7553,12 +7849,12 @@ msgstr "" #: threads/api/threadendpoints/patch.py:189 msgctxt "threads api" msgid "You don't have permission to close this thread." -msgstr "" +msgstr "Nie masz uprawnień do zamknięcia tego tematu." #: threads/api/threadendpoints/patch.py:195 msgctxt "threads api" msgid "You don't have permission to open this thread." -msgstr "" +msgstr "Nie masz uprawnień do otwarcia tego tematu." #: threads/api/threadendpoints/patch.py:221 #: threads/api/threadendpoints/patch.py:262 @@ -9814,21 +10110,21 @@ msgstr "" #: users/admin/__init__.py:81 msgctxt "admin node" msgid "Bans" -msgstr "" +msgstr "Blokowanie" #: users/admin/__init__.py:87 msgctxt "admin node" msgid "Data downloads" -msgstr "" +msgstr "Kopie danych" #: users/admin/__init__.py:94 msgctxt "admin node" msgid "Ranks" -msgstr "" +msgstr "Rangi" #: users/admin/djangoadmin.py:42 msgid "Misago user data" -msgstr "" +msgstr "Dane użytkownika Misago" #: users/admin/djangoadmin.py:56 msgid "Edit permissions and groups" @@ -9841,32 +10137,32 @@ msgstr "" #: users/admin/forms.py:21 msgctxt "admin user form" msgid "Username" -msgstr "" +msgstr "Nazwa użytkownika" #: users/admin/forms.py:23 msgctxt "admin user form" msgid "Custom title" -msgstr "" +msgstr "Własny tytuł" #: users/admin/forms.py:26 msgctxt "admin user form" msgid "E-mail address" -msgstr "" +msgstr "Adres e-mail" #: users/admin/forms.py:62 msgctxt "admin user form" msgid "All registered members must have a \"Member\" role." -msgstr "" +msgstr "Wszyscy zarejestrowani użytkownicy muszą mieć rolę \"Członek\"." #: users/admin/forms.py:71 msgctxt "admin user form" msgid "Password" -msgstr "" +msgstr "Hasło" #: users/admin/forms.py:82 msgctxt "admin user form" msgid "Is administrator" -msgstr "" +msgstr "Jest administratorem" #: users/admin/forms.py:85 msgctxt "admin user form" @@ -9875,11 +10171,15 @@ msgid "" "is enabled, this user will need additional permissions assigned within it to" " admin Django modules." msgstr "" +"Określa czy ten użytkownik może logować się do panelu administracyjnego. " +"Jeśli panel administracyjny Django również jest włączony, ten użytkownik " +"będzie wymagać nadania w nim dodatkowych uprawnień aby móc korzystać z " +"modułów admina w Django." #: users/admin/forms.py:88 msgctxt "admin user form" msgid "Is superuser" -msgstr "" +msgstr "Jest super administratorem" #: users/admin/forms.py:91 msgctxt "admin user form" @@ -9887,11 +10187,14 @@ msgid "" "Only administrators can access admin sites. In addition to admin site " "access, superadmins can also change other members admin levels." msgstr "" +"Tylko administratorzy mają dostęp do panelu administracyjnego. Super " +"administratorzy dodatkowo mogą nadawać i usuwać dostęp administratora innym " +"użytkownikom." #: users/admin/forms.py:94 msgctxt "admin user form" msgid "Is active" -msgstr "" +msgstr "Jest aktywowany" #: users/admin/forms.py:97 msgctxt "admin user form" @@ -9899,11 +10202,13 @@ msgid "" "Designates whether this user should be treated as active. Turning this off " "is non-destructible way to remove user accounts." msgstr "" +"Określa czy konto tego użytkownika jest aktywne. Wyłączanie kont to " +"odwracalny sposób usuwania kont użytkowników." #: users/admin/forms.py:100 users/admin/forms.py:130 users/admin/forms.py:161 msgctxt "admin user form" msgid "Staff message" -msgstr "" +msgstr "Wiadomość dla członków zespołu forum" #: users/admin/forms.py:103 msgctxt "admin user form" @@ -9911,35 +10216,42 @@ msgid "" "Optional message for forum team members explaining why user's account has " "been disabled." msgstr "" +"Opcjonalna wiadomość dla pozostałych członków zespołu forum wyjaśniających " +"dlaczego konto tego użytkownika jest wyłączone." #: users/admin/forms.py:107 msgctxt "admin user form" -msgid "Change password to" -msgstr "" +msgid "Set new password" +msgstr "Ustaw nowe hasło" #: users/admin/forms.py:114 msgctxt "admin user form" -msgid "Lock avatar" -msgstr "" +msgid "Lock avatar changes" +msgstr "Zablokuj zmiany awatara" #: users/admin/forms.py:117 msgctxt "admin user form" msgid "" -"Setting this to yes will stop user from changing his/her avatar, and will " -"reset his/her avatar to procedurally generated one." +"Setting this to yes will stop user from changing their avatar, and will " +"reset their avatar to procedurally generated one." msgstr "" +"Zmiana tego ustawienia na \"tak\" uniemożliwi temu użytkownikowi zmienianie " +"własnego awatara, oraz zastąpi obraz jego aktualny awatar nowym, " +"wygenerowanym proceduralnie." #: users/admin/forms.py:121 users/admin/forms.py:152 msgctxt "admin user form" msgid "User message" -msgstr "" +msgstr "Wiadomość dla użytkownika" #: users/admin/forms.py:124 msgctxt "admin user form" msgid "" -"Optional message for user explaining why he/she is banned form changing " +"Optional message for user explaining why they are banned form changing " "avatar." msgstr "" +"Opcjonalna wiadomość dla użytkownika wyjaśniająca dlaczego nie mogą zmieniać" +" swojego awatara." #: users/admin/forms.py:133 msgctxt "admin user form" @@ -9947,63 +10259,71 @@ msgid "" "Optional message for forum team members explaining why user is banned form " "changing avatar." msgstr "" +"Opcjonalna wiadomość dla pozostałych członków zespołu forum wyjaśniający " +"dlaczego opcja zmiany awatara została zablokowana dla tego użytkownika." #: users/admin/forms.py:140 msgctxt "admin user form" msgid "Signature contents" -msgstr "" +msgstr "Treść podpisu" #: users/admin/forms.py:145 msgctxt "admin user form" -msgid "Lock signature" -msgstr "" +msgid "Lock signature changes" +msgstr "Zablokuj zmiany podpisu" #: users/admin/forms.py:148 msgctxt "admin user form" msgid "" "Setting this to yes will stop user from making changes to his/her signature." msgstr "" +"Zmiana tego ustawienia na \"tak\" uniemożliwi temu użytkownikowi zmienianie " +"własnego opisu." #: users/admin/forms.py:155 msgctxt "admin user form" msgid "Optional message to user explaining why his/hers signature is locked." msgstr "" +"Opcjonalna wiadomość dla użytkownika wyjaśniająca dlaczego nie mogą zmieniać" +" swojego podpisu." #: users/admin/forms.py:164 msgctxt "admin user form" msgid "" "Optional message to team members explaining why user signature is locked." msgstr "" +"Opcjonalna wiadomość dla pozostałych członków zespołu forum wyjaśniający " +"dlaczego opcja zmiany podpisu została zablokowana dla tego użytkownika." #: users/admin/forms.py:171 msgctxt "admin user form" msgid "Hides presence" -msgstr "" +msgstr "Ukrywa obecność na forum" #: users/admin/forms.py:175 msgctxt "admin user form" msgid "Who can add user to private threads" -msgstr "" +msgstr "Kto może dodawać tego użytkownika do prywatnych tematów" #: users/admin/forms.py:181 msgctxt "admin user form" msgid "Started threads" -msgstr "" +msgstr "Rozpoczęte tematy" #: users/admin/forms.py:186 msgctxt "admin user form" msgid "Replied threads" -msgstr "" +msgstr "Odpowiedziane tematy" #: users/admin/forms.py:194 msgctxt "admin user form" msgid "Automatically watch threads that the user has started" -msgstr "" +msgstr "Automatycznie obserwuj tematy rozpoczęte przez użytkownika" #: users/admin/forms.py:202 msgctxt "admin user form" msgid "Automatically watch threads that the user has replied to" -msgstr "" +msgstr "Automatycznie obserwuj tematy odpowiedziane przez użytkownika" #: users/admin/forms.py:210 msgctxt "admin user form" @@ -10011,6 +10331,8 @@ msgid "" "Automatically watch private threads that the user was invited to by users " "they are following" msgstr "" +"Automatycznie obserwuj prywatne tematy do których użytkownik został " +"zaproszony przez użytkowników których obserwuje" #: users/admin/forms.py:218 msgctxt "admin user form" @@ -10018,6 +10340,8 @@ msgid "" "Automatically watch private threads that the user was invited to by other " "users" msgstr "" +"Automatycznie obserwuj prywatne tematy do których użytkownik został " +"zaproszony przez innych użytkowników." #: users/admin/forms.py:226 msgctxt "admin user form" @@ -10025,26 +10349,30 @@ msgid "" "Notify about new private thread invitations from users this user is " "following" msgstr "" +"Powiadamiaj o nowych zaproszeniach do prywatnych tematów od użytkowników " +"których obserwuje" #: users/admin/forms.py:234 msgctxt "admin user form" msgid "Notify about new private thread invitations from other users" msgstr "" +"Powiadamiaj o nowych zaproszeniach do prywatnych tematów od pozostałych " +"użytkowników" #: users/admin/forms.py:287 #, python-format msgctxt "admin user form" msgid "Signature can't be longer than %(limit)s character." msgid_plural "Signature can't be longer than %(limit)s characters." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Podpis nie może być dłuższy niż %(limit)s znak." +msgstr[1] "Podpis nie może być dłuższy niż %(limit)s znaki." +msgstr[2] "Podpis nie może być dłuższy niż %(limit)s znaków." +msgstr[3] "Podpis nie może być dłuższy niż %(limit)s znaków." #: users/admin/forms.py:304 msgctxt "admin user form" msgid "Rank" -msgstr "" +msgstr "Ranga" #: users/admin/forms.py:307 msgctxt "admin user form" @@ -10052,76 +10380,80 @@ msgid "" "Ranks are used to group and distinguish users. They are also used to add " "permissions to groups of users." msgstr "" +"Rangi służą do grupowania i wyróżniania użytkowników. Mogą być również " +"używane do nadawania użytkownikom dodatkowych uprawnień." #: users/admin/forms.py:316 msgctxt "admin user form" msgid "Roles" -msgstr "" +msgstr "Role" #: users/admin/forms.py:319 msgctxt "admin user form" msgid "Individual roles of this user. All users must have a \"Member\" role." msgstr "" +"Role przypisane do tego użytkownika. Wszyscy użytkownicy muszą mieć rolę " +"\"Członek\"." #: users/admin/forms.py:381 msgctxt "admin users filter form" msgid "Username" -msgstr "" +msgstr "Nazwa użytkownika" #: users/admin/forms.py:385 msgctxt "admin users filter form" msgid "E-mail" -msgstr "" +msgstr "E-mail" #: users/admin/forms.py:389 msgctxt "admin users filter form" msgid "Profile fields contain" -msgstr "" +msgstr "Pola profilu zawierają" #: users/admin/forms.py:393 msgctxt "admin users filter form" msgid "Requires activation" -msgstr "" +msgstr "Wymaga aktywacji" #: users/admin/forms.py:396 msgctxt "admin users filter form" msgid "Account disabled" -msgstr "" +msgstr "Konto wyłączone" #: users/admin/forms.py:399 msgctxt "admin users filter form" msgid "Administrator" -msgstr "" +msgstr "Administrator" #: users/admin/forms.py:402 msgctxt "admin users filter form" msgid "Deletes their account" -msgstr "" +msgstr "Usuwa swoje konto" #: users/admin/forms.py:448 msgctxt "admin users rank filter choice" msgid "All ranks" -msgstr "" +msgstr "Wszystkie rangi" #: users/admin/forms.py:452 msgctxt "admin users role filter choice" msgid "All roles" -msgstr "" +msgstr "Wszystkie role" #: users/admin/forms.py:458 msgctxt "admin users filter form" msgid "Has rank" -msgstr "" +msgstr "Ma rangę" #: users/admin/forms.py:464 msgctxt "admin users filter form" msgid "Has role" -msgstr "" +msgstr "Ma rolę" #: users/admin/forms.py:476 msgctxt "admin rank form" msgid "Name" -msgstr "" +msgstr "Nazwa" #: users/admin/forms.py:480 msgctxt "admin rank form" @@ -10129,11 +10461,13 @@ msgid "" "Short and descriptive name of all users with this rank. \"The Team\" or " "\"Game Masters\" are good examples." msgstr "" +"Krótka i opisowa nazwa wszystkich użytkowników z tą rangą. Np. \"Zespół " +"forum\" albo \"Mistrzowie gry\"." #: users/admin/forms.py:484 msgctxt "admin rank form" msgid "User title" -msgstr "" +msgstr "Tytuł użytkownika" #: users/admin/forms.py:488 msgctxt "admin rank form" @@ -10141,11 +10475,13 @@ msgid "" "Optional, singular version of rank name displayed by user names. For example" " \"GM\" or \"Dev\"." msgstr "" +"Opcjonalna alternatywna nazwa rangi w liczbie pojedynczej, wyświetlana obok " +"nazw użytkowników. Np. \"mod\" lub \"recenzent\"." #: users/admin/forms.py:492 msgctxt "admin rank form" msgid "Description" -msgstr "" +msgstr "Opis" #: users/admin/forms.py:498 msgctxt "admin rank form" @@ -10153,31 +10489,34 @@ msgid "" "Optional description explaining function or status of members distincted " "with this rank." msgstr "" +"Opcjonalny opis wyjaśniający rolę albo funkcję osób wyróżnionych tą rangą." #: users/admin/forms.py:502 msgctxt "admin rank form" msgid "User roles" -msgstr "" +msgstr "Role użytkownika" #: users/admin/forms.py:507 msgctxt "admin rank form" msgid "Rank can give additional roles to users with it." -msgstr "" +msgstr "Ranga może dawać dodatkowe role użytkownikom z tą rangą." #: users/admin/forms.py:511 msgctxt "admin rank form" msgid "CSS class" -msgstr "" +msgstr "Klasa CSS" #: users/admin/forms.py:515 msgctxt "admin rank form" msgid "Optional css class added to content belonging to this rank owner." msgstr "" +"Opcjonalna klasa CSS dodawana do treści należących do użytkownika z tą " +"rangą." #: users/admin/forms.py:519 msgctxt "admin rank form" msgid "Give rank dedicated tab on users list" -msgstr "" +msgstr "Stwórz osobną stronę na liście użytkowników" #: users/admin/forms.py:523 msgctxt "admin rank form" @@ -10185,88 +10524,92 @@ msgid "" "Selecting this option will make users with this rank easily discoverable by " "others through dedicated page on forum users list." msgstr "" +"Włączenie tej opcji sprawi że użytkownicy z tą rangą będą łatwi do odkrycia " +"przez innych poprzez dedykowaną stronę na liście użytkowników." -#: users/admin/forms.py:541 +#: users/admin/forms.py:543 msgctxt "admin rank form" -msgid "This name collides with other rank." -msgstr "" +msgid "There's already an other rank with this name." +msgstr "Istnieje już ranga z tą nazwą." -#: users/admin/forms.py:549 +#: users/admin/forms.py:552 msgctxt "admin ban users form" msgid "Values to ban" -msgstr "" +msgstr "Wartości do zablokowania" -#: users/admin/forms.py:554 +#: users/admin/forms.py:557 msgctxt "admin ban users form" msgid "User message" -msgstr "" +msgstr "Wiadomość dla użytkownika" -#: users/admin/forms.py:559 +#: users/admin/forms.py:562 msgctxt "admin ban users form" msgid "Optional message displayed to users instead of default one." msgstr "" +"Opcjonalna wiadomość o blokadzie wyświetlana użytkownikom zamiast domyślnej." -#: users/admin/forms.py:564 users/admin/forms.py:579 +#: users/admin/forms.py:567 users/admin/forms.py:582 msgctxt "admin ban users form" msgid "Message can't be longer than 1000 characters." -msgstr "" +msgstr "Wiadomość nie może być dłuższa niż 1000 znaków." -#: users/admin/forms.py:569 +#: users/admin/forms.py:572 msgctxt "admin ban users form" msgid "Team message" -msgstr "" +msgstr "Wiadomość dla zespołu forum" -#: users/admin/forms.py:574 +#: users/admin/forms.py:577 msgctxt "admin ban users form" msgid "Optional ban message for moderators and administrators." msgstr "" +"Opcjonalny komunikat blokady wyświetlany moderatorom i administratorom." -#: users/admin/forms.py:584 +#: users/admin/forms.py:587 msgctxt "admin ban users form" msgid "Expiration date" -msgstr "" +msgstr "Data wygaśnięcia" -#: users/admin/forms.py:593 +#: users/admin/forms.py:596 msgctxt "admin ban users form" msgid "Usernames" -msgstr "" +msgstr "Nazwy użytkowników" -#: users/admin/forms.py:594 +#: users/admin/forms.py:597 msgctxt "admin ban users form" msgid "E-mails" -msgstr "" +msgstr "Adresy e-mail" -#: users/admin/forms.py:595 +#: users/admin/forms.py:598 msgctxt "admin ban users form" msgid "E-mail domains" -msgstr "" +msgstr "Domeny e-mail" -#: users/admin/forms.py:601 +#: users/admin/forms.py:604 msgctxt "admin ban users form" msgid "IP addresses" -msgstr "" +msgstr "Adresy IP" -#: users/admin/forms.py:605 +#: users/admin/forms.py:608 msgctxt "admin ban users form" msgid "First segment of IP addresses" -msgstr "" +msgstr "Pierwszy oktet adresu IP" -#: users/admin/forms.py:611 +#: users/admin/forms.py:614 msgctxt "admin ban users form" msgid "First two segments of IP addresses" -msgstr "" +msgstr "Pierwsze dwa oktety adresu IP" -#: users/admin/forms.py:619 +#: users/admin/forms.py:622 msgctxt "admin ban form" msgid "Check type" -msgstr "" +msgstr "Typ blokady" -#: users/admin/forms.py:624 +#: users/admin/forms.py:627 msgctxt "admin ban form" msgid "Restrict this ban to registrations" -msgstr "" +msgstr "Ogranicz tą blokadę do rejestracji" -#: users/admin/forms.py:627 +#: users/admin/forms.py:630 msgctxt "admin ban form" msgid "" "Changing this to yes will make this ban check be only performed on " @@ -10274,136 +10617,144 @@ msgid "" "like ones from recently compromised e-mail providers, without harming " "existing users." msgstr "" +"Wybór \"tak\" sprawi że ta blokada będzie sprawdzana wyłącznie podczas " +"rejestracji nowych użytkowników. Jest to użyteczne kiedy chcesz np. " +"uniemożliwić nowe rejestracje korzystające ze skrzynek e-mail używanych " +"często przez spamerów bez szkody dla obecnych użytkowników." -#: users/admin/forms.py:631 +#: users/admin/forms.py:634 msgctxt "admin ban form" msgid "Banned value" -msgstr "" +msgstr "Zablokowana wartość" -#: users/admin/forms.py:635 +#: users/admin/forms.py:638 msgctxt "admin ban form" msgid "" "This value is case-insensitive and accepts asterisk (*) for partial matches." " For example, making IP ban for value \"83.*\" will ban all IP addresses " "beginning with \"83.\"." msgstr "" +"Ta wartość nie sprawdza wielkości znaków i obsługuje gwiazdkę (*) dla " +"częściowych dopasowań. Przykładowo, blokada adresów IP dla wartości \"83.*\"" +" zablokuje wszystkie adresy IP zaczynające się od \"83.\"." -#: users/admin/forms.py:639 +#: users/admin/forms.py:642 msgctxt "admin ban form" msgid "Banned value can't be longer than 250 characters." -msgstr "" +msgstr "Zablokowana wartość nie może być dłuższa niż 250 znaków." -#: users/admin/forms.py:644 +#: users/admin/forms.py:647 msgctxt "admin ban form" msgid "User message" -msgstr "" +msgstr "Wiadomość dla użytkownika" -#: users/admin/forms.py:649 +#: users/admin/forms.py:652 msgctxt "admin ban form" msgid "Optional message displayed to user instead of default one." -msgstr "" +msgstr "Opcjonalna wiadomość wyświetlana użytkownikowi zamiast standardowej." -#: users/admin/forms.py:654 users/admin/forms.py:668 +#: users/admin/forms.py:657 users/admin/forms.py:671 msgctxt "admin ban form" msgid "Message can't be longer than 1000 characters." -msgstr "" +msgstr "Wiadomość nie może być dłuższa niż 1000 znaków." -#: users/admin/forms.py:659 +#: users/admin/forms.py:662 msgctxt "admin ban form" msgid "Team message" -msgstr "" +msgstr "Wiadomość dla zespołu forum" -#: users/admin/forms.py:663 +#: users/admin/forms.py:666 msgctxt "admin ban form" msgid "Optional ban message for moderators and administrators." msgstr "" +"Opcjonalny komunikat blokady wyświetlany moderatorom i administratorom." -#: users/admin/forms.py:673 +#: users/admin/forms.py:676 msgctxt "admin ban form" msgid "Expiration date" -msgstr "" +msgstr "Data wygaśnięcia" -#: users/admin/forms.py:695 +#: users/admin/forms.py:698 msgctxt "admin ban form" msgid "Banned value is too vague." -msgstr "" +msgstr "Zablokowana wartość jest zbyt ogólna." -#: users/admin/forms.py:703 +#: users/admin/forms.py:706 msgctxt "admin bans filter form" msgid "Type" -msgstr "" +msgstr "Typ" -#: users/admin/forms.py:706 +#: users/admin/forms.py:709 msgctxt "admin bans type filter choice" msgid "All bans" -msgstr "" +msgstr "Wszystkie blokady" -#: users/admin/forms.py:707 +#: users/admin/forms.py:710 msgctxt "admin bans type filter choice" msgid "Usernames" -msgstr "" +msgstr "Nazwy użytkowników" -#: users/admin/forms.py:708 +#: users/admin/forms.py:711 msgctxt "admin bans filter form" msgid "E-mails" -msgstr "" +msgstr "Adresy e-mail" -#: users/admin/forms.py:709 +#: users/admin/forms.py:712 msgctxt "admin bans type filter choice" msgid "IPs" -msgstr "" +msgstr "Adresy IP" -#: users/admin/forms.py:713 +#: users/admin/forms.py:716 msgctxt "admin bans filter form" msgid "Banned value begins with" -msgstr "" +msgstr "Zablokowana wartość zaczyna się od" -#: users/admin/forms.py:717 +#: users/admin/forms.py:720 msgctxt "admin bans filter form" msgid "Registration only" -msgstr "" +msgstr "Tylko rejestracje" -#: users/admin/forms.py:720 +#: users/admin/forms.py:723 msgctxt "admin bans registration filter choice" msgid "Any" -msgstr "" +msgstr "Dowolnie" -#: users/admin/forms.py:721 +#: users/admin/forms.py:724 msgctxt "admin bans registration filter choice" msgid "Yes" -msgstr "" +msgstr "Tak" -#: users/admin/forms.py:722 +#: users/admin/forms.py:725 msgctxt "admin bans registration filter choice" msgid "No" -msgstr "" +msgstr "Nie" -#: users/admin/forms.py:726 +#: users/admin/forms.py:729 msgctxt "admin bans filter form" msgid "State" -msgstr "" +msgstr "Stan" -#: users/admin/forms.py:729 +#: users/admin/forms.py:732 msgctxt "admin bans state filter choice" msgid "Any" -msgstr "" +msgstr "Każdy" -#: users/admin/forms.py:730 +#: users/admin/forms.py:733 msgctxt "admin bans state filter choice" msgid "Active" -msgstr "" +msgstr "Aktywne" -#: users/admin/forms.py:731 +#: users/admin/forms.py:734 msgctxt "admin bans state filter choice" msgid "Expired" -msgstr "" +msgstr "Wygasłe" -#: users/admin/forms.py:767 +#: users/admin/forms.py:770 msgctxt "admin data download request form" msgid "Usernames or emails" -msgstr "" +msgstr "Nazwy użytkowników lub e-maile" -#: users/admin/forms.py:770 +#: users/admin/forms.py:773 msgctxt "admin data download request form" msgid "" "Enter every item in new line. Duplicates will be ignored. This field is case" @@ -10411,286 +10762,295 @@ msgid "" "it may take up to few days for requests to complete. E-mail will " "notification will be sent to every user once their download is ready." msgstr "" +"Wpisz dane każdego użytkownika w nowej linii. Powtórzenia użytkowników będą " +"pominięte. Wielkość znaków nie ma znaczenia. W zależności od konfiguracji " +"strony oraz ilości danych do zarchiwizowania przygotowanie kopii danych dla " +"jednego użytkownika może zająć nawet kilka dni. Każdy użytkownik otrzyma " +"e-mail z odnośnikiem do pobrania kopii swoich danych kiedy tylko ta zostanie" +" przygotowana." -#: users/admin/forms.py:784 +#: users/admin/forms.py:787 #, python-format msgctxt "admin data download request form" msgid "" "You may not enter more than 20 items at a single time (You have entered " "%(show_value)s)." msgstr "" +"Nie możesz podać więcej niż 20 elementów naraz (podano %(show_value)s)." -#: users/admin/forms.py:804 +#: users/admin/forms.py:807 msgctxt "admin data download request form" msgid "One or more specified users could not be found." -msgstr "" +msgstr "Jeden lub więcej wskazanych użytkowników nie zostało znalezionych." -#: users/admin/forms.py:813 +#: users/admin/forms.py:816 msgctxt "admin data download requests filter form" msgid "Status" -msgstr "" +msgstr "Status" -#: users/admin/forms.py:818 +#: users/admin/forms.py:821 msgctxt "admin data download requests filter form" msgid "User" -msgstr "" +msgstr "Użytkownik" -#: users/admin/forms.py:822 +#: users/admin/forms.py:825 msgctxt "admin data download requests filter form" msgid "Requested by" -msgstr "" +msgstr "Zlecający" #: users/admin/views/bans.py:14 msgctxt "admin bans" msgid "Requested ban does not exist." -msgstr "" +msgstr "Żądana blokada nie istnieje." #: users/admin/views/bans.py:24 msgctxt "admin bans ordering choice" msgid "From newest" -msgstr "" +msgstr "Od najnowszych" #: users/admin/views/bans.py:25 msgctxt "admin bans ordering choice" msgid "From oldest" -msgstr "" +msgstr "Od najstarszych" #: users/admin/views/bans.py:26 msgctxt "admin bans ordering choice" msgid "A to z" -msgstr "" +msgstr "A do z" #: users/admin/views/bans.py:27 msgctxt "admin bans ordering choice" msgid "Z to a" -msgstr "" +msgstr "Z do a" #: users/admin/views/bans.py:30 msgctxt "admin bans" msgid "With bans: 0" -msgstr "" +msgstr "Z blokadami: 0" #: users/admin/views/bans.py:31 msgctxt "admin bans" msgid "Select bans" -msgstr "" +msgstr "Wybierz blokady" #: users/admin/views/bans.py:35 msgctxt "admin bans" msgid "Remove bans" -msgstr "" +msgstr "Usuń blokady" #: users/admin/views/bans.py:37 msgctxt "admin bans" msgid "Are you sure you want to remove those bans?" -msgstr "" +msgstr "Na pewno chcesz usunąć wybrane blokady?" #: users/admin/views/bans.py:46 msgctxt "admin bans" msgid "Selected bans have been removed." -msgstr "" +msgstr "Wybrane blokady zostały usunięte." #: users/admin/views/bans.py:51 #, python-format msgctxt "admin bans" msgid "New ban \"%(name)s\" has been saved." -msgstr "" +msgstr "Nowa blokada \"%(name)s\" została dodana." #: users/admin/views/bans.py:55 #, python-format msgctxt "admin bans" msgid "Ban \"%(name)s\" has been edited." -msgstr "" +msgstr "Blokada \"%(name)s\" została zmieniona." #: users/admin/views/bans.py:62 #, python-format msgctxt "admin bans" msgid "Ban \"%(name)s\" has been removed." -msgstr "" +msgstr "Blokada \"%(name)s\" została usunięta." #: users/admin/views/datadownloads.py:23 msgctxt "admin data downloads ordering choice " msgid "From newest" -msgstr "" +msgstr "Od najnowszych" #: users/admin/views/datadownloads.py:24 msgctxt "admin data downloads ordering choice " msgid "From oldest" -msgstr "" +msgstr "Od najstarszych" #: users/admin/views/datadownloads.py:26 msgctxt "admin data downloads" msgid "With data downloads: 0" -msgstr "" +msgstr "Z kopiami danych: 0" #: users/admin/views/datadownloads.py:28 msgctxt "admin data downloads" msgid "Select data downloads" -msgstr "" +msgstr "Wybierz kopie danych" #: users/admin/views/datadownloads.py:33 msgctxt "admin data downloads" msgid "Expire downloads" -msgstr "" +msgstr "Wygaś kopie danych" #: users/admin/views/datadownloads.py:36 msgctxt "admin data downloads" msgid "Are you sure you want to set selected data downloads as expired?" -msgstr "" +msgstr "Na pewno chcesz oznaczyć wybrane kopie danych jako wygasłe?" #: users/admin/views/datadownloads.py:41 msgctxt "admin data downloads" msgid "Delete downloads" -msgstr "" +msgstr "Usuń kopie danych" #: users/admin/views/datadownloads.py:44 msgctxt "admin data downloads" msgid "Are you sure you want to delete selected data downloads?" -msgstr "" +msgstr "Na pewno chcesz usunąć wybrane kopie danych?" #: users/admin/views/datadownloads.py:62 msgctxt "admin data downloads" msgid "Selected data downloads have been set as expired." -msgstr "" +msgstr "Wybrane kopie danych zostały oznaczone jako wygasłe." #: users/admin/views/datadownloads.py:73 msgctxt "admin data downloads" msgid "Selected data downloads have been deleted." -msgstr "" +msgstr "Wybrane kopie danych zostały usunięte." #: users/admin/views/datadownloads.py:90 msgctxt "admin data downloads" msgid "Data downloads have been requested for specified users." -msgstr "" +msgstr "Utworzono nowe kopie danych dla wybranych użytkowników." #: users/admin/views/ranks.py:16 msgctxt "admin ranks" msgid "Requested rank does not exist." -msgstr "" +msgstr "Żądana ranga nie istnieje." #: users/admin/views/ranks.py:33 #, python-format msgctxt "admin ranks" msgid "New rank \"%(name)s\" has been saved." -msgstr "" +msgstr "Nowa ranga \"%(name)s\" została dodana." #: users/admin/views/ranks.py:37 #, python-format msgctxt "admin ranks" msgid "Rank \"%(name)s\" has been edited." -msgstr "" +msgstr "Ranga \"%(name)s\" została zmieniona." #: users/admin/views/ranks.py:45 #, python-format msgctxt "admin ranks" msgid "Rank \"%(name)s\" is default rank and can't be deleted." -msgstr "" +msgstr "Ranga \"%(name)s\" jest domyślną rangą i nie może być usunięta." #: users/admin/views/ranks.py:51 #, python-format msgctxt "admin ranks" msgid "Rank \"%(name)s\" is assigned to users and can't be deleted." msgstr "" +"Ranga \"%(name)s\" jest przypisana do kont użytkowników i nie może zostać " +"usunięta." #: users/admin/views/ranks.py:57 #, python-format msgctxt "admin ranks" msgid "Rank \"%(name)s\" has been deleted." -msgstr "" +msgstr "Ranga \"%(name)s\" została usunięta." #: users/admin/views/ranks.py:75 #, python-format msgctxt "admin ranks" msgid "Rank \"%(name)s\" has been moved below \"%(other)s\"." -msgstr "" +msgstr "Ranga \"%(name)s\" została przeniesiona za \"%(other)s\"." #: users/admin/views/ranks.py:95 #, python-format msgctxt "admin ranks" msgid "Rank \"%(name)s\" has been moved above \"%(other)s\"." -msgstr "" +msgstr "Ranga \"%(name)s\" została przeniesione przed \"%(other)s\"." #: users/admin/views/ranks.py:110 #, python-format msgctxt "admin ranks" msgid "Rank \"%(name)s\" is already default." -msgstr "" +msgstr "Ranga \"%(name)s\" już jest domyślną rangą." #: users/admin/views/ranks.py:115 #, python-format msgctxt "admin ranks" msgid "Rank \"%(name)s\" has been made default." -msgstr "" +msgstr "Ranga \"%(name)s\" została ustawiona jako domyślna." #: users/admin/views/users.py:58 msgctxt "admin users ordering choice" msgid "From newest" -msgstr "" +msgstr "Od najnowszych" #: users/admin/views/users.py:59 msgctxt "admin users ordering choice" msgid "From oldest" -msgstr "" +msgstr "Od najstarszych" #: users/admin/views/users.py:60 msgctxt "admin users ordering choice" msgid "A to z" -msgstr "" +msgstr "A do z" #: users/admin/views/users.py:61 msgctxt "admin users ordering choice" msgid "Z to a" -msgstr "" +msgstr "Z do a" #: users/admin/views/users.py:62 msgctxt "admin users ordering choice" msgid "Biggest posters" -msgstr "" +msgstr "Od postujących najwięcej" #: users/admin/views/users.py:63 msgctxt "admin users ordering choice" msgid "Smallest posters" -msgstr "" +msgstr "Od postujących najmniej" #: users/admin/views/users.py:65 msgctxt "admin users" msgid "With users: 0" -msgstr "" +msgstr "Z użytkownikami: 0" #: users/admin/views/users.py:66 msgctxt "admin users" msgid "Select users" -msgstr "" +msgstr "Wybierz użytkowników" #: users/admin/views/users.py:70 msgctxt "admin users" msgid "Activate accounts" -msgstr "" +msgstr "Aktywuj konta" #: users/admin/views/users.py:74 msgctxt "admin users" msgid "Ban users" -msgstr "" +msgstr "Zablokuj użytkowników" #: users/admin/views/users.py:79 msgctxt "admin users" msgid "Request data download" -msgstr "" +msgstr "Utwórz kopie danych do pobrania" #: users/admin/views/users.py:83 msgctxt "admin users" msgid "Delete accounts" -msgstr "" +msgstr "Usuń konta" #: users/admin/views/users.py:85 msgctxt "admin users" msgid "Are you sure you want to delete selected users?" -msgstr "" +msgstr "Na pewno chcesz usunąć wybranych użytkowników?" #: users/admin/views/users.py:90 msgctxt "admin users" msgid "Delete with content" -msgstr "" +msgstr "Usuń wraz z treściami" #: users/admin/views/users.py:93 msgctxt "admin users" @@ -10698,11 +11058,13 @@ msgid "" "Are you sure you want to delete selected users? This will also delete all " "content associated with their accounts." msgstr "" +"Na pewno chcesz usunąć wybranych użytkowników? Wraz z ich kontami zostaną " +"usunięte powiązane z nimi treści." #: users/admin/views/users.py:113 msgctxt "admin users" msgid "You have to select inactive users." -msgstr "" +msgstr "Musisz wybrać konta wymagające aktywacji. " #: users/admin/views/users.py:122 #, python-format @@ -10713,39 +11075,41 @@ msgstr "" #: users/admin/views/users.py:135 msgctxt "admin users" msgid "Selected users accounts have been activated." -msgstr "" +msgstr "Wybrane konta użytkowników zostały aktywowane." #: users/admin/views/users.py:145 #, python-format msgctxt "admin users" msgid "%(user)s is super admin and can't be banned." -msgstr "" +msgstr "%(user)s jest super administratorem i nie może być zablokowany." #: users/admin/views/users.py:209 msgctxt "admin users" msgid "Selected users have been banned." -msgstr "" +msgstr "Konta wybranych użytkowników zostały zablokowane." #: users/admin/views/users.py:228 msgctxt "admin users" msgid "Data download requests have been placed for selected users." msgstr "" +"Zadania utworzenia kopii danych zostały utworzone dla wybranych " +"użytkowników." #: users/admin/views/users.py:236 users/admin/views/users.py:256 msgctxt "admin users" msgid "You can't delete yourself." -msgstr "" +msgstr "Nie możesz usunąć własnego konta." #: users/admin/views/users.py:240 users/admin/views/users.py:260 #, python-format msgctxt "admin users" msgid "%(user)s is admin and can't be deleted." -msgstr "" +msgstr "Konto %(user)s ma uprawnienia administratora i nie może być usunięte." #: users/admin/views/users.py:249 msgctxt "admin users" msgid "Selected users have been deleted." -msgstr "" +msgstr "Wybrani użytkownicy zostali usunięci." #: users/admin/views/users.py:274 msgctxt "admin users" @@ -10753,18 +11117,20 @@ msgid "" "Selected users have been disabled and queued for deletion together with " "their content." msgstr "" +"Wybrane konta użytkowników zostały wyłączone i zakolejkowane do usunięcia " +"wraz z ich treściami." #: users/admin/views/users.py:283 #, python-format msgctxt "admin users" msgid "New user \"%(user)s\" has been registered." -msgstr "" +msgstr "Nowy użytkownik \"%(user)s\" został zarejestrowany." #: users/admin/views/users.py:316 #, python-format msgctxt "admin users" msgid "User \"%(user)s\" has been edited." -msgstr "" +msgstr "Użytkownik \"%(user)s\" został zmieniony." #: users/api/auth.py:41 #, python-format @@ -10997,22 +11363,24 @@ msgstr "" #: users/api/users.py:349 msgctxt "users api" msgid "You can't request data downloads for other users." -msgstr "" +msgstr "Nie możesz tworzyć kopii danych innych użytkowników." #: users/api/users.py:354 msgctxt "users api" msgid "You can't download your data." -msgstr "" +msgstr "Nie możesz pobierać kopii swoich danych." #: users/api/users.py:361 msgctxt "users api" msgid "You can't have more than one data download request at a single time." msgstr "" +"Nie możesz mieć więcej niż jedną kopię danych oczekującą na lub znajdującą " +"się w przygotowaniu." #: users/api/users.py:420 msgctxt "users api" msgid "You can't see other users data downloads." -msgstr "" +msgstr "Nie możesz przeglądać kopii danych innych użytkowników." #: users/apps.py:26 msgctxt "user options page" @@ -11037,7 +11405,7 @@ msgstr "" #: users/apps.py:56 msgctxt "user options page" msgid "Download data" -msgstr "" +msgstr "Pobierz swoje dane" #: users/apps.py:70 msgctxt "user options page" @@ -11082,7 +11450,7 @@ msgstr "" #: users/apps.py:139 msgctxt "user profile page" msgid "Ban details" -msgstr "" +msgstr "Szczegóły blokady" #: users/avatars/uploaded.py:39 msgctxt "avatar upload size validator" @@ -11180,7 +11548,7 @@ msgstr "" #: users/forms/auth.py:106 msgctxt "admin login form" msgid "Your account does not have admin privileges." -msgstr "" +msgstr "Twoje konto nie ma uprawnień administratora." #: users/forms/auth.py:129 msgctxt "auth email form" @@ -11247,24 +11615,24 @@ msgstr "" #, python-format msgctxt "data download ready email subject" msgid "%(user)s, your data download is ready" -msgstr "" +msgstr "%(user)s, kopia twoich danych jest gotowa do pobrania" #: users/migrations/0004_default_ranks.py:12 #: users/migrations/0004_default_ranks.py:13 msgctxt "rank name" msgid "Forum team" -msgstr "" +msgstr "Zespół forum" #: users/migrations/0004_default_ranks.py:14 msgctxt "rank name" msgid "Team" -msgstr "" +msgstr "Zespół" #: users/migrations/0004_default_ranks.py:21 #: users/migrations/0004_default_ranks.py:22 msgctxt "rank name" msgid "Members" -msgstr "" +msgstr "Członkowie" #: users/models/ban.py:71 msgctxt "ban type choice" @@ -11284,22 +11652,22 @@ msgstr "" #: users/models/datadownload.py:28 msgctxt "user data download status" msgid "Pending" -msgstr "" +msgstr "Oczekuje" #: users/models/datadownload.py:32 msgctxt "user data download status" msgid "Processing" -msgstr "" +msgstr "W przygotowaniu" #: users/models/datadownload.py:36 msgctxt "user data download status" msgid "Ready" -msgstr "" +msgstr "Gotowa" #: users/models/datadownload.py:40 msgctxt "user data download status" msgid "Expired" -msgstr "" +msgstr "Wygasła" #: users/models/deleteduser.py:12 msgctxt "user deleted by" @@ -11531,32 +11899,32 @@ msgstr "" #: users/permissions/moderation.py:50 msgctxt "users moderation permission" msgid "Can ban users" -msgstr "" +msgstr "Może blokować konta użytkowników" #: users/permissions/moderation.py:54 msgctxt "users moderation permission" msgid "Max length, in days, of imposed ban" -msgstr "" +msgstr "Maksymalna długość blokady, w dniach" #: users/permissions/moderation.py:58 msgctxt "users moderation permission" msgid "Enter zero to let moderators impose permanent bans." -msgstr "" +msgstr "Wpisz zero aby moderatorzy mogli blokować użytkowników na stałe." #: users/permissions/moderation.py:64 msgctxt "users moderation permission" msgid "Can lift bans" -msgstr "" +msgstr "Może zdejmować blokady" #: users/permissions/moderation.py:68 msgctxt "users moderation permission" msgid "Max length, in days, of lifted ban" -msgstr "" +msgstr "Maksymalna długość blokady którą może zdjąć, w dniach" #: users/permissions/moderation.py:72 msgctxt "users moderation permission" msgid "Enter zero to let moderators lift permanent bans." -msgstr "" +msgstr "Wpisz zero aby moderatorzy mogli zdejmować stałe blokady." #: users/permissions/moderation.py:136 msgctxt "users moderation permission" @@ -11606,33 +11974,33 @@ msgstr "" #: users/permissions/moderation.py:214 msgctxt "users moderation permission" msgid "You can't ban users." -msgstr "" +msgstr "Nie możesz blokować użytkowników." #: users/permissions/moderation.py:219 msgctxt "users moderation permission" msgid "You can't ban administrators." -msgstr "" +msgstr "Nie możesz blokować administratorów." #: users/permissions/moderation.py:230 msgctxt "users moderation permission" msgid "You can't lift bans." -msgstr "" +msgstr "Nie możesz zdejmować blokad." #: users/permissions/moderation.py:235 msgctxt "users moderation permission" msgid "This user is not banned." -msgstr "" +msgstr "Ten użytkownik nie jest zablokowany." #: users/permissions/moderation.py:243 msgctxt "users moderation permission" msgid "You can't lift permanent bans." -msgstr "" +msgstr "Nie możesz zdejmować blokad na stałe." #: users/permissions/moderation.py:249 #, python-format msgctxt "users moderation permission" msgid "You can't lift bans that expire after %(expiration)s." -msgstr "" +msgstr "Nie możesz zdejmować blokad dłuższych niż %(expiration)s." #: users/permissions/profiles.py:24 msgctxt "users profiles permission" @@ -11652,12 +12020,12 @@ msgstr "" #: users/permissions/profiles.py:36 msgctxt "users profiles permission" msgid "Can see members bans details" -msgstr "" +msgstr "Może widzieć szczegóły blokad użytkowników" #: users/permissions/profiles.py:39 msgctxt "users profiles permission" msgid "Allows users with this permission to see user and staff ban messages." -msgstr "" +msgstr "Umożliwia użytkownikom z tym uprawnieniem wgląd w komunikaty blokad." #: users/permissions/profiles.py:45 msgctxt "users profiles permission" @@ -11717,7 +12085,7 @@ msgstr "" #: users/permissions/profiles.py:185 msgctxt "users profiles permission" msgid "You can't see users bans details." -msgstr "" +msgstr "Nie możesz oglądać szczegółów blokad." #: users/profilefields/default.py:11 msgctxt "bio profile field" @@ -11832,12 +12200,12 @@ msgstr "" #: users/serializers/ban.py:26 msgctxt "ban message" msgid "Your IP address is banned." -msgstr "" +msgstr "Twój adres IP jest zablokowany." #: users/serializers/ban.py:28 msgctxt "ban message" msgid "You are banned." -msgstr "" +msgstr "Twoje konto jest zablokowane." #: users/serializers/moderation.py:37 #, python-format diff --git a/misago/locale/pl/LC_MESSAGES/djangojs.mo b/misago/locale/pl/LC_MESSAGES/djangojs.mo index 16fcd00009b4b2229c050ee6bcb41074b1b3e6a5..fa7e4d692b74e38b5b122403363bcee9bb07f340 100644 GIT binary patch literal 5530 zcmcgu-)|g89UsC0#RW>k@A9LQKoXn!&S&RmojAp5oGOH*#&L^MA*#9Exx4Z0&TMvP zy}4Ch2rZyWJW-IM^aZI>|A0tEssciauM!gd1CS7c2M`iGAo0K}pYQD6-d%c0U4dA6 z{khrs{{A)d$Gx?mF+8()zl8U@A7Jb#@U=bohbQ_VWBY(tf%Cwh0vCY4DZl>{xF74i zHO77pJPPz6<9EPwST{dh@MS=f^E&VV@NM7`;6H%Jf%`rJTHqBR$$tg-1n@23*MNTo zlAebjD)<^eT6@65z#js?4t%TJ{|k`hKK4<@=71YO+P@AY{cixT0N*L`&a-{#VQOn?R!bGmz{!^fAUx0KW;`3;Y3aW)ETlq`3a#69xaTOZ*e? z)A+vU5yl<|eh&B(;Bnvu#BTs3dmeohd%!C|n8dCE5ejx4xCDF&_!;0Yfe^{wDe(_L z())Mdmw^w#D3Ws!I0rlpB>FCp;+vJ56+=4Nhw#!v zbpm%>+-OY?#|x9$7x2KwtP&_T6we-1+V-s_$Y#?h_ zOv*(pd9lSxib!;1ZL_Nq`p)IGNX0VY2WHD(FB(0UG#*TB^zP`pA}JO4_mK!IA{mE5 zOKls>H<=EM@Oj^)G53WPFjVsDbEblT8y)m{OLDO-R3KV`FG7=Q%S{_G z2<1E%Z7XA*b(PoU%5o^xVg|i4@KM~Ib)Vr`p3*NBde;flhWq7 z7bvgir0?I5S5ui-=TpVGpSMzLjc)L>GLqU?x&!aVT%ZVWYn->S*HznO7;MyO*n(GZ zGEHQh@Jwh+%pk37g;T1CAs3b>B9ty76ogRpxfMOh(}-BwGJ{?H#Kp02W|)UUcNEJA zb>uhrDhj3^BJK#J?Q(6bYAa7z1+#~tO^`|w3rUE()T3l_WIL9^hj!=F&{jxh!`~xn zD&H9NMc^pME*uph6<13_ek?mGL6)bB;Vr9cQ^P++C&Ge)s+}$UzduDO5cx3r{#5XQ zcg40upeBt+gH?VM5qFt()lBvd4WNj%B&BwkgWdBL{p|0Op|WBsy&ET$Q6pNpP022r zskY`8Ra(jxYp}>r;k$;bt<&!*B(Z5LbTUmOUs@DcQadn9#jR1ebIGA%SWQlgXbRJr z;Yf2e$)=H9LhXSHvV>>RQq&$a0YVeHAvBF=Q;M*jbWs+LHmLU(XBKhVA+G^k!*#;)jb zWKyt3v93Z=l17LK8WBfnm5!2xjZyGzW8D=ZcE3in2?iPlc0rop;6+EvFtYs`I&1j# z0VZ=KgU;+!Lkh)%Csx>Wvfl<=g z5l{WBuyUC%HJ1+8o5$gs)l_PWX+kJ1IT3q7Sue*)r=|${3#TUV(_kn*%bb6&Z zVqTmh`cml8(f21u-=PgsOLfp!h+Tr%!*eHR*k*=O;FJx+x9Dn?gS(Vun}X9q z_=0Esj!4A2?z``wVsHb~WQmh+*jiuICuwIXO`o-lqUesBK_`O^q#EH!y(;M6wqGi38WLOW+MflJmhG;k$el zL72?pm{Y_0%SI+ZU|Lq?ur5kfd70dMmXj62UhoA9mAr5P8{D8nwAD9-ADHGPmvQ&Yc2CPhbu3lZXwFpE`##F@@iKJ@P zF$dAd|3BV5RJhk_k!Pr~P4aG7m*eHPs(UB~49OxoqS~Vgp548@#XImU8SbMtBOJvV fBHvF8EU9&8_l|TCrsHxy3 delta 201 zcmbQG-N#~aPl#nI0}wC*u?!Ha05LNV>i{tbSOD=Aprj>`2C0F8$y0g!>LXnpgLHlU zbzK}4Jp8SEJ+-6!{am?x5{pZ8Ly8jfigOZ6@{6n#+(LbP6#N{0T@`FxeH}f092{L- zf?R`x?SM-2(n}N5Q*}d96LYN;d>sAULml0L>U?}0ax(Sui_#HltQ5F>J$+qu!%~Zi TGxPJT6bvVK^LkHy%)1W&J#R3= diff --git a/misago/locale/pl/LC_MESSAGES/djangojs.po b/misago/locale/pl/LC_MESSAGES/djangojs.po index 9bedd4db44..02dd914ba9 100644 --- a/misago/locale/pl/LC_MESSAGES/djangojs.po +++ b/misago/locale/pl/LC_MESSAGES/djangojs.po @@ -2,23 +2,24 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# +# Translators: +# Rafał Pitoń , 2023 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-01 11:27+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"POT-Creation-Date: 2023-07-22 11:22+0000\n" +"PO-Revision-Date: 2023-07-01 08:52+0000\n" +"Last-Translator: Rafał Pitoń , 2023\n" +"Language-Team: Polish (https://app.transifex.com/misago/teams/65369/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" -"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" -"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: static/misago/js/misago.js:1 msgctxt "notifications list" @@ -210,6 +211,8 @@ msgid "See all %(count)s result." msgid_plural "See all %(count)s results." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "search results" @@ -322,6 +325,8 @@ msgid "%(replies)s reply" msgid_plural "%(replies)s replies" msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "time ago" @@ -551,8 +556,8 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "merge threads conflict best answer" msgid "" -"Please select the best answer for your newly merged thread. No posts will be " -"deleted during the merge." +"Please select the best answer for your newly merged thread. No posts will be" +" deleted during the merge." msgstr "" #: static/misago/js/misago.js:1 @@ -1349,6 +1354,8 @@ msgid_plural "" "%(show_value)s)." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "thread title length validator" @@ -1360,6 +1367,8 @@ msgid_plural "" "%(show_value)s)." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "post length validator" @@ -1371,6 +1380,8 @@ msgid_plural "" "%(show_value)s)." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "post length validator" @@ -1382,6 +1393,8 @@ msgid_plural "" "%(show_value)s)." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "sign in modal" @@ -1431,12 +1444,12 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "user status" msgid "%(username)s is banned until %(ban_expires)s" -msgstr "" +msgstr "Konto %(username)s jest zablokowane do %(ban_expires)s" #: static/misago/js/misago.js:1 msgctxt "user status" msgid "%(username)s is banned" -msgstr "" +msgstr "Konto %(username)s jest zablokowane" #: static/misago/js/misago.js:1 msgctxt "user status" @@ -1466,7 +1479,7 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "user status" msgid "Banned" -msgstr "" +msgstr "Konto zablokowane" #: static/misago/js/misago.js:1 msgctxt "user status" @@ -1514,6 +1527,8 @@ msgid "%(posts)s post" msgid_plural "%(posts)s posts" msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "users list item" @@ -1521,6 +1536,8 @@ msgid "%(threads)s thread" msgid_plural "%(threads)s threads" msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "users list item" @@ -1528,6 +1545,8 @@ msgid "%(followers)s follower" msgid_plural "%(followers)s followers" msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "yesno switch choice" @@ -1610,6 +1629,8 @@ msgid "%(threads)s thread" msgid_plural "%(threads)s threads" msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "category stats" @@ -1617,6 +1638,8 @@ msgid "%(posts)s post" msgid_plural "%(posts)s posts" msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "notifications title" @@ -1746,8 +1769,8 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "delete your account form" msgid "" -"You are going to delete your account. This action is nonreversible, and will " -"result in following data being deleted:" +"You are going to delete your account. This action is nonreversible, and will" +" result in following data being deleted:" msgstr "" #: static/misago/js/misago.js:1 @@ -1772,8 +1795,8 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "delete your account form" msgid "" -"All your posted content will NOT be deleted, but username associated with it " -"will be changed to one shared by all deleted accounts." +"All your posted content will NOT be deleted, but username associated with it" +" will be changed to one shared by all deleted accounts." msgstr "" #: static/misago/js/misago.js:1 @@ -1787,7 +1810,7 @@ msgid "Delete my account" msgstr "" #: static/misago/js/misago.js:1 -msgctxt "edit details" +msgctxt "profile details form" msgid "Your details have been updated." msgstr "" @@ -1800,11 +1823,12 @@ msgstr "" msgctxt "download your data" msgid "Your request for data download has been registered." msgstr "" +"Nowa kopia twoich danych oczekuje teraz na przygotowywanie do pobrania." #: static/misago/js/misago.js:1 msgctxt "download your data title" msgid "Download your data" -msgstr "" +msgstr "Pobierz kopię swoich danych" #: static/misago/js/misago.js:1 msgctxt "download your data" @@ -1815,6 +1839,11 @@ msgid "" "your download to be prepared. An e-mail with notification will be sent to " "you when your data is ready to be downloaded." msgstr "" +"Aby pobrać kopię swoich danych ze strony, kliknij na \"Przygotuj kopię " +"danych\". W zależności od ilości danych do zarchiwizowania oraz liczby " +"użytkowników oczekujących na swoje dane, przygotowanie kopii może zająć " +"nawet kilka dni. Kiedy twoje dane będą gotowe do pobrania zostanie do ciebie" +" wysłana wiadomość e-mail." #: static/misago/js/misago.js:1 msgctxt "download your data" @@ -1822,41 +1851,43 @@ msgid "" "The download will only be available for limited amount of time, after which " "it will be deleted from the site and marked as expired." msgstr "" +"Kopia będzie dostępna do pobrania tylko przez określony czas, po upływie " +"którego zostanie usunięta ze strony i oznaczona jako wygasła." #: static/misago/js/misago.js:1 msgctxt "download your data table" msgid "Requested on" -msgstr "" +msgstr "Zlecono" #: static/misago/js/misago.js:1 msgctxt "download your data table" msgid "Download" -msgstr "" +msgstr "Pobieranie" #: static/misago/js/misago.js:1 msgctxt "download your data table" msgid "You have no data downloads." -msgstr "" +msgstr "Nie masz żadnych kopii swoich danych do pobrania." #: static/misago/js/misago.js:1 msgctxt "download your data btn" msgid "Request data download" -msgstr "" +msgstr "Przygotuj kopię danych" #: static/misago/js/misago.js:1 msgctxt "download your data table btn" msgid "Download is being prepared" -msgstr "" +msgstr "Kopia w przygotowaniu" #: static/misago/js/misago.js:1 msgctxt "download your data table btn" msgid "Download your data" -msgstr "" +msgstr "Pobierz kopię" #: static/misago/js/misago.js:1 msgctxt "download your data table btn" msgid "Download is expired" -msgstr "" +msgstr "Kopia wygasła" #: static/misago/js/misago.js:1 msgctxt "watch thread choice" @@ -1979,7 +2010,8 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "notifications options" -msgid "Automatically watch new private threads I'm invited to by other members" +msgid "" +"Automatically watch new private threads I'm invited to by other members" msgstr "" #: static/misago/js/misago.js:1 @@ -2025,6 +2057,8 @@ msgid "You can change your username %(changes_left)s more time." msgid_plural "You can change your username %(changes_left)s more times." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "change username form" @@ -2033,6 +2067,8 @@ msgid_plural "" "Used changes become available again after %(name_changes_expire)s days." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "change username form" @@ -2143,47 +2179,47 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "profile ban details title" msgid "Ban details" -msgstr "" +msgstr "Szczegóły blokady" #: static/misago/js/misago.js:1 msgctxt "profile ban details" msgid "User-shown ban message" -msgstr "" +msgstr "Komunikat blokady wyświetlany użytkownikowi" #: static/misago/js/misago.js:1 msgctxt "profile ban details" msgid "Team-shown ban message" -msgstr "" +msgstr "Komunikat blokady wyświetlany zespołowi" #: static/misago/js/misago.js:1 msgctxt "profile ban details" msgid "This ban expires on %(expires_on)s." -msgstr "" +msgstr "Ta blokada wygasa %(expires_on)s." #: static/misago/js/misago.js:1 msgctxt "profile ban details" msgid "This ban expires %(expires_on)s." -msgstr "" +msgstr "Ta blokada wygasa %(expires_on)s." #: static/misago/js/misago.js:1 msgctxt "profile ban details" msgid "This ban has expired." -msgstr "" +msgstr "Ta blokada wygasła." #: static/misago/js/misago.js:1 msgctxt "profile ban details" msgid "%(username)s's ban is permanent." -msgstr "" +msgstr "Konto %(username)s zablokowano na stałe." #: static/misago/js/misago.js:1 msgctxt "profile ban details" msgid "Ban expiration" -msgstr "" +msgstr "Blokada wygasa" #: static/misago/js/misago.js:1 msgctxt "profile ban details" msgid "No ban is active at the moment." -msgstr "" +msgstr "To konto nie jest teraz zablokowane." #: static/misago/js/misago.js:1 msgctxt "profile details empty" @@ -2205,11 +2241,6 @@ msgctxt "profile details edit btn" msgid "Edit" msgstr "" -#: static/misago/js/misago.js:1 -msgctxt "profile details form" -msgid "Your details have been updated." -msgstr "" - #: static/misago/js/misago.js:1 msgctxt "profile details form" msgid "%(username)s's details have been updated." @@ -2236,6 +2267,8 @@ msgid "Found %(users)s user." msgid_plural "Found %(users)s users." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "profile followers" @@ -2243,6 +2276,8 @@ msgid "You have %(users)s follower." msgid_plural "You have %(users)s followers." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "profile followers" @@ -2250,11 +2285,13 @@ msgid "%(username)s has %(users)s follower." msgid_plural "%(username)s has %(users)s followers." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "profile followers" msgid "Search returned no users matching specified criteria." -msgstr "" +msgstr "Szukanie nie znalazło żadnych pasujących użytkowników." #: static/misago/js/misago.js:1 msgctxt "profile followers" @@ -2287,6 +2324,8 @@ msgid "Found %(changes)s username change." msgid_plural "Found %(changes)s username changes." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "profile username history" @@ -2294,6 +2333,8 @@ msgid "Your username was changed %(changes)s time." msgid_plural "Your username was changed %(changes)s times." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "profile username history" @@ -2301,6 +2342,8 @@ msgid "%(username)s's username was changed %(changes)s time." msgid_plural "%(username)s's username was changed %(changes)s times." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "profile username history" @@ -2310,7 +2353,7 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "profile username history" msgid "Search returned no username changes matching specified criteria." -msgstr "" +msgstr "Szukanie nie znalazło żadnych pasujących zmian nazwy." #: static/misago/js/misago.js:1 msgctxt "profile username history" @@ -2443,12 +2486,14 @@ msgctxt "profile delete" msgid "" "%(username)s's account, threads, posts and other content has been deleted." msgstr "" +"Konto %(username)s zostało usunięte wraz z jego tematami, postami i " +"pozostałymi treściami." #: static/misago/js/misago.js:1 msgctxt "profile delete" msgid "" "%(username)s's account has been deleted and other content has been hidden." -msgstr "" +msgstr "Konto %(username)s zostało a jego treści ukryte." #: static/misago/js/misago.js:1 msgctxt "profile delete btn" @@ -2546,6 +2591,8 @@ msgid "You have posted %(posts)s message." msgid_plural "You have posted %(posts)s messages." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "profile posts" @@ -2553,6 +2600,8 @@ msgid "%(username)s has posted %(posts)s message." msgid_plural "%(username)s has posted %(posts)s messages." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "profile posts" @@ -2580,6 +2629,8 @@ msgid "You have started %(threads)s thread." msgid_plural "You have started %(threads)s threads." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "profile threads" @@ -2587,6 +2638,8 @@ msgid "%(username)s has started %(threads)s thread." msgid_plural "%(username)s has started %(threads)s threads." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "profile threads" @@ -2609,6 +2662,8 @@ msgid "Found %(users)s user." msgid_plural "Found %(users)s users." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "profile follows" @@ -2616,6 +2671,8 @@ msgid "You are following %(users)s user." msgid_plural "You are following %(users)s users." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "profile follows" @@ -2623,6 +2680,8 @@ msgid "%(username)s is following %(users)s user." msgid_plural "%(username)s is following %(users)s users." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "profile follows" @@ -2632,7 +2691,7 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "profile follows" msgid "Search returned no users matching specified criteria." -msgstr "" +msgstr "Szukanie nie znalazło żadnych pasujących użytkowników." #: static/misago/js/misago.js:1 msgctxt "profile follows" @@ -2961,6 +3020,8 @@ msgid "This thread has %(users)s participant." msgid_plural "This thread has %(users)s participants." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "thread poll" @@ -2968,6 +3029,8 @@ msgid "%(votes)s vote, %(proc)s% of total." msgid_plural "%(votes)s votes, %(proc)s% of total." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "thread poll" @@ -2985,6 +3048,8 @@ msgid "%(votes)s user has voted for this choice." msgid_plural "%(votes)s users have voted for this choice." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "thread poll" @@ -3010,7 +3075,7 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "thread poll" msgid "Poll has been deleted" -msgstr "" +msgstr "Ankieta została usunięta." #: static/misago/js/misago.js:1 msgctxt "thread poll" @@ -3033,6 +3098,8 @@ msgid "%(votes)s vote." msgid_plural "%(votes)s votes." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "thread poll" @@ -3050,6 +3117,8 @@ msgid "You can select %(choices)s more choice." msgid_plural "You can select %(choices)s more choices." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "thread poll" @@ -3069,7 +3138,7 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "thread poll vote" msgid "Your vote has been saved." -msgstr "" +msgstr "Twój głos został zapisany." #: static/misago/js/misago.js:1 msgctxt "thread poll vote btn" @@ -3239,7 +3308,7 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "event delete" msgid "Event has been deleted." -msgstr "" +msgstr "Zdarzenie zostało usunięte." #: static/misago/js/misago.js:1 msgctxt "event delete btn" @@ -3389,8 +3458,8 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "post unapproved flag" msgid "" -"This post is unapproved. Only users with permission to approve posts and its " -"author may see its contents." +"This post is unapproved. Only users with permission to approve posts and its" +" author may see its contents." msgstr "" #: static/misago/js/misago.js:1 @@ -3414,6 +3483,8 @@ msgid "%(likes)s like" msgid_plural "%(likes)s likes" msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "post footer btn" @@ -3451,6 +3522,8 @@ msgid "%(users)s and %(likes)s other user like this." msgid_plural "%(users)s and %(likes)s other users like this." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "post footer btn" @@ -3530,7 +3603,8 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "post revert" msgid "" -"Are you sure you with to revert this post to the state from before this edit?" +"Are you sure you with to revert this post to the state from before this " +"edit?" msgstr "" #: static/misago/js/misago.js:1 @@ -3654,6 +3728,8 @@ msgid "This post was edited %(edits)s time." msgid_plural "This post was edited %(edits)s times." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "post options edit btn" @@ -3704,7 +3780,7 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "post delete" msgid "Post has been deleted." -msgstr "" +msgstr "Post został usunięty." #: static/misago/js/misago.js:1 msgctxt "post options delete btn" @@ -3732,6 +3808,8 @@ msgid "This post was edited %(edits)s time." msgid_plural "This post was edited %(edits)s times." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "post edits stat" @@ -3739,6 +3817,8 @@ msgid "edited %(edits)s time" msgid_plural "edited %(edits)s times" msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "post edits stat" @@ -3746,6 +3826,8 @@ msgid "%(edits)s edit" msgid_plural "%(edits)s edits" msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "post protected label" @@ -3763,6 +3845,8 @@ msgid "%(posts)s post" msgid_plural "%(posts)s posts" msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "thread starter info" @@ -3918,7 +4002,7 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "thread moderation" msgid "Thread has been deleted." -msgstr "" +msgstr "Temat został usunięty." #: static/misago/js/misago.js:1 msgctxt "thread moderation btn" @@ -4168,7 +4252,8 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "merge posts" msgid "" -"Are you sure you want to merge selected posts? This action is not reversible!" +"Are you sure you want to merge selected posts? This action is not " +"reversible!" msgstr "" #: static/misago/js/misago.js:1 @@ -4323,8 +4408,8 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "threads moderation merge" msgid "" -"You need permission to start threads in category to be able to merge threads " -"to it." +"You need permission to start threads in category to be able to merge threads" +" to it." msgstr "" #: static/misago/js/misago.js:1 @@ -4544,7 +4629,7 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "threads list empty" msgid "No threads matching specified criteria were found." -msgstr "" +msgstr "Szukanie nie znalazło żadnych pasujących tematów." #: static/misago/js/misago.js:1 msgctxt "threads list" @@ -4597,6 +4682,8 @@ msgid_plural "" "There are %(threads)s new or updated threads. Click here to show them." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "threads list title" @@ -4710,6 +4797,8 @@ msgid "%(posters)s top poster from last %(days)s days." msgid_plural "%(posters)s top posters from last %(days)s days." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "users page title" @@ -4722,6 +4811,8 @@ msgid "There is %(more)s more member with this role." msgid_plural "There are %(more)s more members with this role." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "rank users list empty" @@ -4825,27 +4916,27 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "banned page" msgid "This ban expires on %(expires_on)s." -msgstr "" +msgstr "Ta blokada wygasa %(expires_on)s." #: static/misago/js/misago.js:1 msgctxt "banned page" msgid "This ban expires %(expires_on)s." -msgstr "" +msgstr "Ta blokada wygasa %(expires_on)s." #: static/misago/js/misago.js:1 msgctxt "banned page" msgid "This ban has expired." -msgstr "" +msgstr "Ta blokada wygasła." #: static/misago/js/misago.js:1 msgctxt "banned page" msgid "This ban is permanent." -msgstr "" +msgstr "Ta blokada nigdy nie wygaśnie." #: static/misago/js/misago.js:1 msgctxt "banned error title" msgid "You are banned" -msgstr "" +msgstr "Twoje konto jest zablokowane" #: static/misago/js/misago.js:1 msgctxt "agreement validator" @@ -4872,6 +4963,8 @@ msgid_plural "" "%(show_value)s)." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "value length validator" @@ -4883,6 +4976,8 @@ msgid_plural "" "%(show_value)s)." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "username length validator" @@ -4890,6 +4985,8 @@ msgid "Username must be at least %(limit_value)s character long." msgid_plural "Username must be at least %(limit_value)s characters long." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "username length validator" @@ -4897,6 +4994,8 @@ msgid "Username cannot be longer than %(limit_value)s character." msgid_plural "Username cannot be longer than %(limit_value)s characters." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/misago.js:1 msgctxt "username validator" @@ -4913,9 +5012,12 @@ msgstr "" #: static/misago/js/misago.js:1 msgctxt "password length validator" msgid "Valid password must be at least %(limit_value)s character long." -msgid_plural "Valid password must be at least %(limit_value)s characters long." +msgid_plural "" +"Valid password must be at least %(limit_value)s characters long." msgstr[0] "" msgstr[1] "" +msgstr[2] "" +msgstr[3] "" #: static/misago/js/vendor.js:2 msgid "');l(e).replaceWith(a),a.wrap('

')}};function p(e){const t=function(e){let t=e;return"https://"===e.substr(0,8)?t=t.substr(8):"http://"===e.substr(0,7)&&(t=t.substr(7)),"www."===t.substr(0,4)&&(t=t.substr(4)),t}(e),s=function(e){if(-1===e.indexOf("youtu"))return null;const t=e.match(d);return t?t[1]:null}(t);if(!s)return null;let a=0;if(t.indexOf("?")>0){const e=t.substr(t.indexOf("?")+1).split("&").filter((e=>"t="===e.substr(0,2)))[0];if(e){const t=e.substr(2).split("m");"s"===t[0].substr(-1)?a+=parseInt(t[0].substr(0,t[0].length-1)):(a+=60*parseInt(t[0]),t[1]&&"s"===t[1].substr(-1)&&(a+=parseInt(t[1].substr(0,t[1].length-1))))}}return{start:a,video:s}}var u=s(19755),h=class extends n().Component{componentDidMount(){c.render(this.documentNode),u(this.documentNode).find(".spoiler-reveal").click(m)}componentDidUpdate(e,t){c.render(this.documentNode),u(this.documentNode).find(".spoiler-reveal").click(m)}shouldComponentUpdate(e,t){return e.markup!==this.props.markup}render(){return n().createElement("article",{className:i()("misago-markup",this.props.className),dangerouslySetInnerHTML:{__html:this.props.markup},"data-author":this.props.author||void 0,ref:e=>{this.documentNode=e}})}};function m(e){var t=e.target;u(t).parent().parent().addClass("revealed")}},3784:function(e,t,s){"use strict";var a,i=s(22928),o=s(57588),n=s.n(o),r=s(37848);t.Z=class extends n().Component{render(){return a||(a=(0,i.Z)("div",{className:"modal-body modal-loader"},void 0,(0,i.Z)(r.Z,{})))}}},30337:function(e,t,s){"use strict";var a=s(22928),i=(s(57588),s(33556));t.Z=class extends i.Z{getHelpText(){return this.props.helpText?(0,a.Z)("p",{className:"help-block"},void 0,this.props.helpText):null}render(){return(0,a.Z)("div",{className:"modal-body"},void 0,(0,a.Z)("div",{className:"message-icon"},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,this.props.icon||"info_outline")),(0,a.Z)("div",{className:"message-body"},void 0,(0,a.Z)("p",{className:"lead"},void 0,this.props.message),this.getHelpText(),(0,a.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,pgettext("modal message dismiss btn","Ok"))))}}},95187:function(e,t,s){"use strict";var a,i=s(22928),o=s(57588),n=s.n(o),r=s(37848);t.Z=class extends n().Component{render(){return a||(a=(0,i.Z)("div",{className:"panel-body panel-body-loading"},void 0,(0,i.Z)(r.Z,{className:"loader loader-spaced"})))}}},33556:function(e,t,s){"use strict";var a=s(22928),i=s(57588),o=s.n(i);t.Z=class extends o().Component{getHelpText(){return this.props.helpText?(0,a.Z)("p",{className:"help-block"},void 0,this.props.helpText):null}render(){return(0,a.Z)("div",{className:"panel-body panel-message-body"},void 0,(0,a.Z)("div",{className:"message-icon"},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,this.props.icon||"info_outline")),(0,a.Z)("div",{className:"message-body"},void 0,(0,a.Z)("p",{className:"lead"},void 0,this.props.message),this.getHelpText()))}}},11005:function(e,t,s){"use strict";s.d(t,{Z:function(){return w}});var a=s(22928),i=s(57588),o=s.n(i),n=s(69092);function r(e){return e.post.content?o().createElement(l,e):o().createElement(d,e)}function l(e){return(0,a.Z)("div",{className:"post-body"},void 0,(0,a.Z)(n.Z,{markup:e.post.content}))}function d(e){return(0,a.Z)("div",{className:"post-body post-body-invalid"},void 0,(0,a.Z)("p",{className:"lead"},void 0,pgettext("posts feed item body","This post's contents cannot be displayed.")),(0,a.Z)("p",{className:"text-muted"},void 0,pgettext("posts feed item body","This error is caused by invalid post content manipulation.")))}function c(e){let{post:t}=e;const{category:s,thread:i}=t,o=interpolate(pgettext("posts feed item header","posted %(posted_on)s"),{posted_on:t.posted_on.format("LL, LT")},!0);return(0,a.Z)("div",{className:"post-heading"},void 0,(0,a.Z)("a",{className:"btn btn-link item-title",href:i.url},void 0,i.title),(0,a.Z)("a",{className:"btn btn-link post-category",href:s.url.index},void 0,s.name),(0,a.Z)("a",{href:t.url.index,className:"btn btn-link posted-on",title:o},void 0,t.posted_on.fromNow()))}var p,u,h=s(19605);function m(e){let{post:t}=e;return(0,a.Z)("a",{className:"btn btn-default btn-icon pull-right",href:t.url.index},void 0,(0,a.Z)("span",{className:"btn-text-left hidden-xs"},void 0,pgettext("go to post link","See post")),p||(p=(0,a.Z)("span",{className:"material-icon"},void 0,"chevron_right")))}function v(e){let{post:t}=e;return(0,a.Z)("div",{className:"post-side post-side-anonymous"},void 0,(0,a.Z)(m,{post:t}),(0,a.Z)("div",{className:"media"},void 0,u||(u=(0,a.Z)("div",{className:"media-left"},void 0,(0,a.Z)("span",{},void 0,(0,a.Z)(h.ZP,{className:"poster-avatar",size:50})))),(0,a.Z)("div",{className:"media-body"},void 0,(0,a.Z)("div",{className:"media-heading"},void 0,(0,a.Z)("span",{className:"item-title"},void 0,t.poster_name)),(0,a.Z)("span",{className:"user-title user-title-anonymous"},void 0,pgettext("post removed poster username","Removed user")))))}function g(e){let{rank:t,title:s}=e,i=s||t.title||t.name,o="user-title";return t.css_class&&(o+=" user-title-"+t.css_class),t.is_tab?(0,a.Z)("a",{className:o,href:t.url},void 0,i):(0,a.Z)("span",{className:o},void 0,i)}function Z(e){let{post:t,poster:s}=e;return(0,a.Z)("div",{className:"post-side post-side-registered"},void 0,(0,a.Z)(m,{post:t}),(0,a.Z)("div",{className:"media"},void 0,(0,a.Z)("div",{className:"media-left"},void 0,(0,a.Z)("a",{href:s.url},void 0,(0,a.Z)(h.ZP,{className:"poster-avatar",size:50,user:s}))),(0,a.Z)("div",{className:"media-body"},void 0,(0,a.Z)("div",{className:"media-heading"},void 0,(0,a.Z)("a",{className:"item-title",href:s.url},void 0,s.username)),(0,a.Z)(g,{title:s.title,rank:s.rank}))))}function b(e){let{post:t,poster:s}=e;return s&&s.id?(0,a.Z)(Z,{post:t,poster:s}):(0,a.Z)(v,{post:t})}function f(e){let{post:t,poster:s}=e;const i=s||t.poster;let o="post";return i&&i.rank.css_class&&(o+=" post-"+i.rank.css_class),(0,a.Z)("li",{className:o,id:"post-"+t.id},void 0,(0,a.Z)("div",{className:"panel panel-default panel-post"},void 0,(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("div",{className:"panel-content"},void 0,(0,a.Z)(b,{post:t,poster:i}),(0,a.Z)(c,{post:t}),(0,a.Z)(r,{post:t})))))}var _,N,x=s(44039);function y(){return(0,a.Z)("ul",{className:"posts-list post-feed ui-preview"},void 0,(0,a.Z)("li",{className:"post"},void 0,(0,a.Z)("div",{className:"panel panel-default panel-post"},void 0,(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("div",{className:"panel-content"},void 0,(0,a.Z)("div",{className:"post-side post-side-anonymous"},void 0,(0,a.Z)("div",{className:"media"},void 0,_||(_=(0,a.Z)("div",{className:"media-left"},void 0,(0,a.Z)("span",{},void 0,(0,a.Z)(h.ZP,{className:"poster-avatar",size:50})))),(0,a.Z)("div",{className:"media-body"},void 0,(0,a.Z)("div",{className:"media-heading"},void 0,(0,a.Z)("span",{className:"item-title"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,200)+"px"}},void 0," "))),(0,a.Z)("span",{className:"user-title user-title-anonymous"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,200)+"px"}},void 0," "))))),(0,a.Z)("div",{className:"post-heading"},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,200)+"px"}},void 0," ")),(0,a.Z)("div",{className:"post-body"},void 0,(0,a.Z)("article",{className:"misago-markup"},void 0,(0,a.Z)("p",{},void 0,(0,a.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,200)+"px"}},void 0," ")," ",(0,a.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,200)+"px"}},void 0," ")," ",(0,a.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,200)+"px"}},void 0," ")))))))))}function w(e){let{isReady:t,posts:s,poster:i}=e;return t?(0,a.Z)("ul",{className:"posts-list post-feed ui-ready"},void 0,s.map((e=>(0,a.Z)(f,{post:e,poster:i},e.id)))):N||(N=(0,a.Z)(y,{}))}},9771:function(e,t,s){"use strict";s.d(t,{mv:function(){return d},ZP:function(){return os},MO:function(){return C},Fi:function(){return v}});var a,i=s(57588),o=s.n(i),n=s(22928),r=s(4942),l=s(64646);class d extends o().Component{constructor(e){super(e),(0,r.Z)(this,"selected",(()=>{if(this.element){const e=p(this.element)||null,t=e?e.getBoundingClientRect():null;this.setState({range:e,rect:t})}})),(0,r.Z)(this,"reply",(()=>{if(l.Z.isOpen()){const e=C();e&&!e.disabled&&(e.quote(v(this.state.range)),this.setState({range:null,rect:null}),c())}else{const e=v(this.state.range);l.Z.open(Object.assign({},this.props.posting,{default:e})),this.setState({range:null,rect:null}),window.setTimeout(c,1e3)}})),(0,r.Z)(this,"render",(()=>(0,n.Z)("div",{},void 0,o().createElement("div",{ref:e=>{e&&(this.element=e)},onMouseUp:this.selected,onTouchEnd:this.selected},this.props.children),!!this.state.rect&&(0,n.Z)("div",{className:"quote-control",style:{position:"absolute",left:this.state.rect.left+window.scrollX,top:this.state.rect.bottom+window.scrollY}},void 0,a||(a=(0,n.Z)("div",{className:"quote-control-arrow"})),(0,n.Z)("div",{className:"quote-control-inner"},void 0,(0,n.Z)("button",{className:"btn quote-control-btn",type:"button",onClick:this.reply},void 0,pgettext("post reply","Quote"))))))),this.state={range:null,rect:null},this.element=null}}function c(){const e=document.querySelector("#posting-mount textarea");e.focus(),e.selectionStart=e.selectionEnd=e.value.length}const p=e=>{if(void 0===window.getSelection)return;const t=window.getSelection();if(!t)return;if("Range"!==t.type)return;if(1!==t.rangeCount)return;const s=t.getRangeAt(0);return u(s,e)&&h(s)&&m(s.cloneContents())?s:void 0},u=(e,t)=>{const s=e.commonAncestorContainer;if(s===t)return!0;let a=s.parentNode;for(;a;){if(a===t)return!0;a=a.parentNode}return!1},h=e=>{const t=e.commonAncestorContainer;if("ARTICLE"===t.nodeName)return!0;if(t.dataset&&"1"===t.dataset.noquote)return!1;let s=t.parentNode;for(;s;){if(s.dataset&&"1"===s.dataset.noquote)return!1;if("ARTICLE"===s.nodeName)return!0;s=s.parentNode}return!1},m=e=>{for(let t=0;t0)return!0;if("IMG"===s.nodeName)return!0;if(m(s))return!0}return!1};var v=e=>{const t=g(e);let s=y(e.cloneContents().childNodes,[]),a=t?`[quote="${t}"]\n`:"[quote]\n",i="\n[/quote]\n\n";const o=f(e);return o?(a+=o.syntax?`[code=${o.syntax}]\n`:"[code]\n",i="\n[/code]"+i):N(e)?(s=s.trim(),a+="`",i="`"+i):s=s.trim(),a+s+i};const g=e=>{const t=e.commonAncestorContainer;if(Z(t))return b(t);let s=t.parentNode;for(;s;){if(Z(s))return b(s);s=s.parentNode}return""},Z=e=>e.nodeType===Node.ELEMENT_NODE&&("ARTICLE"===e.nodeName||"BLOCKQUOTE"===e.nodeName&&e.dataset&&"quote"===e.dataset.block),b=e=>e.dataset&&e.dataset.author||null,f=e=>{const t=e.commonAncestorContainer;if(_(t))return x(t);let s=t.parentNode;for(;s;){if(_(s))return x(s);s=s.parentNode}return null},_=e=>"PRE"===e.nodeName,N=e=>{const t=e.commonAncestorContainer;if("CODE"===t.nodeName)return!0;let s=t.parentNode;for(;s;){if(Z(s))return!1;if("CODE"===s.nodeName)return!0;s=s.parentNode}return!1},x=e=>e.dataset?{syntax:e.dataset.syntax||null}:{syntax:null},y=(e,t)=>{let s="";for(let a=0;a{const s=e.dataset||{};if(e.nodeType===Node.TEXT_NODE)return e.textContent||"";if(e.nodeType===Node.ELEMENT_NODE){if(s.quote)return s.quote||"";if("1"===s.noquote)return""}if(e.nodeType===Node.ELEMENT_NODE&&s.quote&&s.quote.trim())return"";if("HR"===e.nodeName)return"\n\n- - -";if(w[e.nodeName]){const[s,a]=w[e.nodeName];return s+y(e.childNodes,[...t,e.nodeName])+a}if("A"===e.nodeName){const s=e.href,a=y(e.childNodes,[...t,e.nodeName]);return a?`[${a}](${s})`:`!(${s})`}if("IMG"===e.nodeName){const t=e.src,s=e.alt;return s?`![${s}](${t})`:`!(${t})`}if("DIV"===e.nodeName||"ASIDE"===e.nodeName){const a=s.block&&s.block.toUpperCase();if(a&&w[a]){const[s,i]=w[a];return s+y(e.childNodes,[...t,a])+i}return y(e.childNodes,t)}if("BLOCKQUOTE"===e.nodeName){if("spoiler"===s.block){const s=y(e.childNodes,[...t,"SPOILER"]).trim();if(!s)return"";let a="\n[spoiler]\n";return a+=s,a+="\n[/spoiler]",a}const a=y(e.childNodes,[...t,"QUOTE"]).trim();if(!a)return"";const i=b(e);let o=i?`\n[quote=${i}]\n`:"\n\n[quote]\n";return o+=a,o+="\n[/quote]",o}if("PRE"===e.nodeName){const t=s.syntax||null,a=e.querySelector("code"),i=a&&a.innerText||"";return i.trim()?"\n[code"+(t?"="+t:"")+"]"+i+"[/code]":""}if("CODE"===e.nodeName)return"`"+e.innerText+"`";if("P"===e.nodeName)return"\n"+y(e.childNodes,[...t,e.nodeName]);if("UL"===e.nodeName||"OL"===e.nodeName)return(0===t.filter((e=>"OL"===e||"UL"===e)).length?"\n":"")+y(e.childNodes,[...t,e.nodeName]);if("LI"===e.nodeName){let a="";const i=t.filter((e=>"OL"===e||"UL"===e)).length;for(let e=1;ee.id&&!e.isRemoved)).map((e=>e.id))}var A,R=s(12891),D=s(78657),j=s(53904),U=s(94184),z=s.n(U),M=s(32233),B=s(69092),q=s(59801),F=s(48772);function H(e){let{attachment:t}=e;return(0,n.Z)("div",{className:"modal-dialog modal-lg",role:"document"},void 0,(0,n.Z)("div",{className:"modal-content"},void 0,(0,n.Z)("div",{className:"modal-header"},void 0,(0,n.Z)("button",{"aria-label":pgettext("modal","Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,A||(A=(0,n.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,n.Z)("h4",{className:"modal-title"},void 0,pgettext("markup editor","Attachment details"))),(0,n.Z)("div",{className:"modal-body"},void 0,!!t.is_image&&(0,n.Z)("div",{className:"markup-editor-attachment-modal-preview"},void 0,(0,n.Z)("a",{href:t.url.index+"?shva=1",target:"_blank"},void 0,(0,n.Z)("img",{src:t.url.index+"?shva=1",alt:""}))),(0,n.Z)("div",{className:"markup-editor-attachment-modal-filename"},void 0,t.filename),(0,n.Z)("div",{className:"row markup-editor-attachment-modal-details"},void 0,(0,n.Z)("div",{className:"col-xs-12 col-md-3"},void 0,(0,n.Z)("strong",{},void 0,t.filetype+", "+(0,F.Z)(t.size)),(0,n.Z)("div",{className:"text-muted"},void 0,(0,n.Z)("small",{},void 0,pgettext("markup editor","Type and size")))),(0,n.Z)("div",{className:"col-xs-12 col-md-4"},void 0,(0,n.Z)("strong",{},void 0,(0,n.Z)("abbr",{title:t.uploaded_on.format("LLL")},void 0,t.uploaded_on.fromNow())),(0,n.Z)("div",{className:"text-muted"},void 0,(0,n.Z)("small",{},void 0,pgettext("markup editor","Uploaded at")))),(0,n.Z)("div",{className:"col-xs-12 col-md-3"},void 0,t.url.uploader?(0,n.Z)("a",{href:t.url.uploader,target:"_blank",className:"item-title"},void 0,t.uploader_name):(0,n.Z)("span",{className:"item-title"},void 0,t.uploader_name),(0,n.Z)("div",{className:"text-muted"},void 0,(0,n.Z)("small",{},void 0,pgettext("markup editor","Uploader")))))),(0,n.Z)("div",{className:"modal-footer"},void 0,(0,n.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,pgettext("modal","Close")))))}const Y=(e,t,s,a,i)=>{const o=e.text||i||"";let n=e.prefix;n+=s+o+a,n+=e.suffix,t(n),window.setTimeout((()=>{W(e.textarea);const t=e.start+s.length;e.textarea.setSelectionRange(t,t+o.length)}),250)},V=(e,t,s)=>{let a=e.prefix;a+=s,a+=e.suffix,t(a),window.setTimeout((()=>{W(e.textarea);const t=e.end+s.length;e.textarea.setSelectionRange(t,t)}),250)},G=e=>{if(document.selection){e.focus();const t=document.selection.createRange(),s=t.text.length;return t.moveStart("character",-e.value.length),$(e,t.text.length-s,t.text.length)}if(e.selectionStart||"0"==e.selectionStart)return $(e,e.selectionStart,e.selectionEnd)},$=(e,t,s)=>({textarea:e,start:t,end:s,text:e.value.substring(t,s),prefix:e.value.substring(0,t),suffix:e.value.substring(s)});function W(e){const t=e.scrollTop;e.focus(),e.scrollTop=t}var Q,X,K,J,ee,te,se=e=>{var t;let{attachment:s,disabled:a,element:i,setState:o,update:r}=e;return(0,n.Z)("div",{className:"markup-editor-attachments-item"},void 0,(0,n.Z)("div",{className:"markup-editor-attachment"},void 0,(0,n.Z)("div",{className:"markup-editor-attachment-details"},void 0,s.id?(0,n.Z)("a",{className:"item-title",href:s.url.index+"?shva=1",target:"_blank",onClick:e=>{e.preventDefault(),q.Z.show(t||(t=(0,n.Z)(H,{attachment:s})))}},void 0,s.filename):(0,n.Z)("strong",{className:"item-title"},void 0,s.filename),(0,n.Z)("div",{className:"text-muted"},void 0,(0,n.Z)("ul",{className:"list-unstyled list-inline"},void 0,!s.id&&(0,n.Z)("li",{},void 0,s.progress+"%"),!!s.filetype&&(0,n.Z)("li",{},void 0,s.filetype),s.size>0&&(0,n.Z)("li",{},void 0,(0,F.Z)(s.size))))),!!s.id&&(0,n.Z)("div",{className:"markup-editor-attachment-buttons"},void 0,(0,n.Z)("button",{className:"btn btn-markup-editor-attachment btn-icon",title:pgettext("markup editor","Insert into message"),type:"button",disabled:a,onClick:()=>{const e=function(e){let t="[";return e.is_image?(t+="!["+e.filename+"]",t+="("+(e.url.thumb||e.url.index)+"?shva=1)"):t+=e.filename,t+="]("+e.url.index+"?shva=1)",t}(s),t=G(i);V(t,r,e)}},void 0,Q||(Q=(0,n.Z)("span",{className:"material-icon"},void 0,"flip_to_front"))),(0,n.Z)("button",{className:"btn btn-markup-editor-attachment btn-icon",title:pgettext("markup editor","Remove attachment"),type:"button",disabled:a,onClick:()=>{o((e=>{let{attachments:t}=e;if(window.confirm(pgettext("markup editor","Remove this attachment?")))return{attachments:t.filter((e=>{let{id:t}=e;return t!==s.id}))}}))}},void 0,X||(X=(0,n.Z)("span",{className:"material-icon"},void 0,"close")))),!s.id&&!!s.key&&(0,n.Z)("div",{className:"markup-editor-attachment-buttons"},void 0,s.error&&(0,n.Z)("button",{className:"btn btn-markup-editor-attachment btn-icon",title:pgettext("markup editor","See error"),type:"button",onClick:()=>{j.Z.error(interpolate(pgettext("markup editor","%(filename)s: %(error)s"),{filename:s.filename,error:s.error},!0))}},void 0,K||(K=(0,n.Z)("span",{className:"material-icon"},void 0,"warning"))),(0,n.Z)("button",{className:"btn btn-markup-editor-attachment btn-icon",title:pgettext("markup editor","Remove attachment"),type:"button",disabled:a,onClick:()=>{o((e=>{let{attachments:t}=e;return{attachments:t.filter((e=>{let{key:t}=e;return t!==s.key}))}}))}},void 0,J||(J=(0,n.Z)("span",{className:"material-icon"},void 0,"close"))))))},ae=e=>{let{attachments:t,disabled:s,element:a,setState:i,update:o}=e;return(0,n.Z)("div",{className:"markup-editor-attachments"},void 0,(0,n.Z)("div",{className:"markup-editor-attachments-container"},void 0,t.map((e=>(0,n.Z)(se,{attachment:e,disabled:s,element:a,setState:i,update:o},e.key||e.id)))))},ie=s(82211),oe=e=>{let{canProtect:t,disabled:s,empty:a,preview:i,isProtected:o,submitText:r,showPreview:l,closePreview:d,enableProtection:c,disableProtection:p}=e;return(0,n.Z)("div",{className:"markup-editor-footer"},void 0,!!t&&(0,n.Z)(ie.Z,{className:"btn-default btn-icon hidden-sm hidden-md hidden-lg",title:o?pgettext("markup editor","Protected"):pgettext("markup editor","Protect"),type:"button",disabled:s,onClick:()=>{o?p():c()}},void 0,(0,n.Z)("span",{className:"material-icon"},void 0,o?"lock":"lock_open")),!!t&&(0,n.Z)("div",{},void 0,(0,n.Z)(ie.Z,{className:"btn-default hidden-xs",type:"button",disabled:s,onClick:()=>{o?p():c()}},void 0,(0,n.Z)("span",{className:"material-icon"},void 0,o?"lock":"lock_open"),o?pgettext("markup editor","Protected"):pgettext("markup editor","Protect"))),ee||(ee=(0,n.Z)("div",{className:"markup-editor-spacer"})),i?(0,n.Z)(ie.Z,{className:"btn-default btn-auto",type:"button",onClick:d},void 0,pgettext("markup editor","Edit")):(0,n.Z)(ie.Z,{className:"btn-default btn-auto",disabled:s||a,type:"button",onClick:l},void 0,pgettext("markup editor","Preview")),(0,n.Z)(ie.Z,{className:"btn-primary btn-auto",disabled:s||a},void 0,r||gettext("Post")))},ne=s(96359);class re extends o().Component{constructor(e){super(e),(0,r.Z)(this,"handleSubmit",(e=>{e.preventDefault();const{selection:t,update:s}=this.props,a=this.state.syntax.trim(),i=this.state.text.trim();if(0===i.length)return this.setState({error:gettext("This field is required.")}),!1;const o=t.prefix.trim().length?"\n\n":"";return V(Object.assign({},t,{text:i}),s,o+"```"+a+"\n"+i+"\n```\n\n"),q.Z.hide(),!1})),this.state={error:null,syntax:"",text:e.selection.text}}render(){return(0,n.Z)("div",{className:"modal-dialog modal-lg",role:"document"},void 0,(0,n.Z)("div",{className:"modal-content"},void 0,(0,n.Z)("div",{className:"modal-header"},void 0,(0,n.Z)("button",{"aria-label":pgettext("modal","Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,te||(te=(0,n.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,n.Z)("h4",{className:"modal-title"},void 0,pgettext("markup editor","Code"))),(0,n.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,n.Z)("div",{className:"modal-body"},void 0,(0,n.Z)(ne.Z,{for:"markup_code_syntax",label:pgettext("markup editor","Syntax highlighting")},void 0,(0,n.Z)("select",{id:"markup_code_syntax",className:"form-control",value:this.state.syntax,onChange:e=>this.setState({syntax:e.target.value})},void 0,(0,n.Z)("option",{value:""},void 0,pgettext("markup editor","No syntax highlighting")),le.map((e=>{let{value:t,name:s}=e;return(0,n.Z)("option",{value:t},t,s)})))),(0,n.Z)(ne.Z,{for:"markup_code_text",label:pgettext("markup editor","Code to insert"),validation:this.state.error?[this.state.error]:void 0},void 0,(0,n.Z)("textarea",{id:"markup_code_text",className:"form-control",rows:"8",value:this.state.text,onChange:e=>this.setState({text:e.target.value})}))),(0,n.Z)("div",{className:"modal-footer"},void 0,(0,n.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Cancel")),(0,n.Z)("button",{className:"btn btn-primary"},void 0,pgettext("markup editor","Insert code"))))))}}const le=[{value:"bash",name:"Bash"},{value:"c",name:"C"},{value:"c#",name:"C#"},{value:"c++",name:"C++"},{value:"css",name:"CSS"},{value:"diff",name:"Diff"},{value:"go",name:"Go"},{value:"graphql",name:"GraphQL"},{value:"html,",name:"HTML"},{value:"xml",name:"XML"},{value:"json",name:"JSON"},{value:"java",name:"Java"},{value:"javascript",name:"JavaScript"},{value:"kotlin",name:"Kotlin"},{value:"less",name:"Less"},{value:"lua",name:"Lua"},{value:"makefile",name:"Makefile"},{value:"markdown",name:"Markdown"},{value:"objective-C",name:"Objective-C"},{value:"php",name:"PHP"},{value:"perl",name:"Perl"},{value:"plain",name:"Plain"},{value:"text",name:"text"},{value:"python",name:"Python"},{value:"repl",name:"REPL"},{value:"r",name:"R"},{value:"ruby",name:"Ruby"},{value:"rust",name:"Rust"},{value:"scss",name:"SCSS"},{value:"sql",name:"SQL"},{value:"shell",name:"Shell Session"},{value:"swift",name:"Swift"},{value:"toml",name:"TOML"},{value:"ini",name:"INI"},{value:"typescript",name:"TypeScript"},{value:"visualbasic",name:"Visual Basic .NET"},{value:"webassembly",name:"WebAssembly"},{value:"yaml",name:"YAML"}];var de,ce,pe,ue,he,me,ve,ge,Ze,be,fe,_e,Ne,xe,ye,we,ke,Ce,Se,Ee,Te,Le,Pe,Oe,Ie,Ae,Re,De,je,Ue,ze,Me,Be,qe,Fe,He,Ye,Ve,Ge,$e,We,Qe,Xe,Ke,Je,et=re;function tt(){return(0,n.Z)("div",{className:"modal-dialog modal-lg",role:"document"},void 0,(0,n.Z)("div",{className:"modal-content"},void 0,(0,n.Z)("div",{className:"modal-header"},void 0,(0,n.Z)("button",{"aria-label":pgettext("modal","Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,de||(de=(0,n.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,n.Z)("h4",{className:"modal-title"},void 0,pgettext("markup help","Formatting help"))),(0,n.Z)("div",{className:"modal-body formatting-help"},void 0,(0,n.Z)("h4",{},void 0,pgettext("markup help","Emphasis text")),(0,n.Z)(st,{markup:pgettext("markup help","_This text will have emphasis_"),result:(0,n.Z)("p",{},void 0,(0,n.Z)("em",{},void 0,pgettext("markup help","This text will have emphasis")))}),ce||(ce=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Bold text")),(0,n.Z)(st,{markup:pgettext("markup help","**This text will be bold**"),result:(0,n.Z)("p",{},void 0,(0,n.Z)("strong",{},void 0,pgettext("markup help","This text will be bold")))}),pe||(pe=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Removed text")),(0,n.Z)(st,{markup:pgettext("markup help","~~This text will be removed~~"),result:(0,n.Z)("p",{},void 0,(0,n.Z)("del",{},void 0,pgettext("markup help","This text will be removed")))}),ue||(ue=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Bold text (BBCode)")),(0,n.Z)(st,{markup:pgettext("markup help","[b]This text will be bold[/b]"),result:(0,n.Z)("p",{},void 0,(0,n.Z)("b",{},void 0,pgettext("markup help","This text will be bold")))}),he||(he=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Underlined text (BBCode)")),(0,n.Z)(st,{markup:pgettext("markup help","[u]This text will be underlined[/u]"),result:(0,n.Z)("p",{},void 0,(0,n.Z)("u",{},void 0,pgettext("markup help","This text will be underlined")))}),me||(me=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Italics text (BBCode)")),(0,n.Z)(st,{markup:pgettext("markup help","[i]This text will be in italics[/i]"),result:(0,n.Z)("p",{},void 0,(0,n.Z)("i",{},void 0,pgettext("markup help","This text will be in italics")))}),ve||(ve=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Link")),ge||(ge=(0,n.Z)(st,{markup:"",result:(0,n.Z)("p",{},void 0,(0,n.Z)("a",{href:"#"},void 0,"example.com"))})),Ze||(Ze=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Link with text")),(0,n.Z)(st,{markup:"["+pgettext("markup help","Link text")+"](http://example.com)",result:(0,n.Z)("p",{},void 0,(0,n.Z)("a",{href:"#"},void 0,pgettext("markup help","Link text")))}),be||(be=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Link (BBCode)")),fe||(fe=(0,n.Z)(st,{markup:"[url]http://example.com[/url]",result:(0,n.Z)("p",{},void 0,(0,n.Z)("a",{href:"#"},void 0,"example.com"))})),_e||(_e=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Link with text (BBCode)")),(0,n.Z)(st,{markup:"[url=http://example.com]"+pgettext("markup help","Link text")+"[/url]",result:(0,n.Z)("p",{},void 0,(0,n.Z)("a",{href:"#"},void 0,pgettext("markup help","Link text")))}),Ne||(Ne=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Image")),xe||(xe=(0,n.Z)(st,{markup:"!(http://placekitten.com/38/38)",result:(0,n.Z)("p",{},void 0,(0,n.Z)("img",{alt:"",src:"http://placekitten.com/38/38"}))})),ye||(ye=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Image with alternate text")),(0,n.Z)(st,{markup:"!["+pgettext("markup help","Image text")+"](http://placekitten.com/38/38)",result:(0,n.Z)("p",{},void 0,(0,n.Z)("img",{alt:pgettext("markup help","Image text"),src:"http://placekitten.com/38/38"}))}),we||(we=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Image (BBCode)")),ke||(ke=(0,n.Z)(st,{markup:"[img]http://placekitten.com/38/38[/img]",result:(0,n.Z)("p",{},void 0,(0,n.Z)("img",{alt:"",src:"http://placekitten.com/38/38"}))})),Ce||(Ce=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Mention user by their name")),Se||(Se=(0,n.Z)(st,{markup:"@username",result:(0,n.Z)("p",{},void 0,(0,n.Z)("a",{href:"#"},void 0,"@username"))})),Ee||(Ee=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Heading 1")),(0,n.Z)(st,{markup:pgettext("markup help","# First level heading"),result:(0,n.Z)("h1",{},void 0,pgettext("markup help","First level heading"))}),Te||(Te=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Heading 2")),(0,n.Z)(st,{markup:pgettext("markup help","## Second level heading"),result:(0,n.Z)("h2",{},void 0,pgettext("markup help","Second level heading"))}),Le||(Le=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Heading 3")),(0,n.Z)(st,{markup:pgettext("markup help","### Third level heading"),result:(0,n.Z)("h3",{},void 0,pgettext("markup help","Third level heading"))}),Pe||(Pe=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Heading 4")),(0,n.Z)(st,{markup:pgettext("markup help","#### Fourth level heading"),result:(0,n.Z)("h4",{},void 0,pgettext("markup help","Fourth level heading"))}),Oe||(Oe=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Heading 5")),(0,n.Z)(st,{markup:pgettext("markup help","##### Fifth level heading"),result:(0,n.Z)("h5",{},void 0,pgettext("markup help","Fifth level heading"))}),Ie||(Ie=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Unordered list")),Ae||(Ae=(0,n.Z)(st,{markup:"- Lorem ipsum\n- Dolor met\n- Vulputate lectus",result:(0,n.Z)("ul",{},void 0,(0,n.Z)("li",{},void 0,"Lorem ipsum"),(0,n.Z)("li",{},void 0,"Dolor met"),(0,n.Z)("li",{},void 0,"Vulputate lectus"))})),Re||(Re=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Ordered list")),De||(De=(0,n.Z)(st,{markup:"1. Lorem ipsum\n2. Dolor met\n3. Vulputate lectus",result:(0,n.Z)("ol",{},void 0,(0,n.Z)("li",{},void 0,"Lorem ipsum"),(0,n.Z)("li",{},void 0,"Dolor met"),(0,n.Z)("li",{},void 0,"Vulputate lectus"))})),je||(je=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Quote text")),(0,n.Z)(st,{markup:"> "+pgettext("markup help","Quoted text"),result:(0,n.Z)("blockquote",{},void 0,(0,n.Z)("p",{},void 0,pgettext("markup help","Quoted text")))}),Ue||(Ue=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Quote text (BBCode)")),(0,n.Z)(st,{markup:"[quote]\n"+pgettext("markup help","Quoted text")+"\n[/quote]",result:(0,n.Z)("aside",{className:"quote-block"},void 0,(0,n.Z)("div",{className:"quote-heading"},void 0,gettext("Quoted message:")),(0,n.Z)("blockquote",{className:"quote-body"},void 0,(0,n.Z)("p",{},void 0,pgettext("markup help","Quoted text"))))}),ze||(ze=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Quote text with author (BBCode)")),(0,n.Z)(st,{markup:'[quote="'+pgettext("markup help","Quote author")+'"]\n'+pgettext("markup help","Quoted text")+"\n[/quote]",result:(0,n.Z)("aside",{className:"quote-block"},void 0,(0,n.Z)("div",{className:"quote-heading"},void 0,pgettext("markup help","Quote author has written:")),(0,n.Z)("blockquote",{className:"quote-body"},void 0,(0,n.Z)("p",{},void 0,pgettext("markup help","Quoted text"))))}),Me||(Me=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Spoiler")),(0,n.Z)(st,{markup:"[spoiler]\n"+pgettext("markup help","Secret text")+"\n[/spoiler]",result:(0,n.Z)(at,{},void 0,pgettext("markup help","Secret text"))}),Be||(Be=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Inline code")),(0,n.Z)(st,{markup:pgettext("markup help","`Inline code`"),result:(0,n.Z)("p",{},void 0,(0,n.Z)("code",{},void 0,pgettext("markup help","Inline code")))}),qe||(qe=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Code block")),Fe||(Fe=(0,n.Z)(st,{markup:'```\nalert("Hello world!");\n```',result:(0,n.Z)("pre",{},void 0,(0,n.Z)("code",{className:"hljs"},void 0,'alert("Hello world!");'))})),He||(He=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Code block with syntax highlighting")),Ye||(Ye=(0,n.Z)(st,{markup:'```python\nprint("Hello world!");\n```',result:(0,n.Z)("pre",{},void 0,(0,n.Z)("code",{className:"hljs language-python"},void 0,(0,n.Z)("span",{className:"hljs-built_in"},void 0,"print"),'("Hello world!");'))})),Ve||(Ve=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Code block (BBCode)")),Ge||(Ge=(0,n.Z)(st,{markup:'[code]\nalert("Hello world!");\n[/code]',result:(0,n.Z)("pre",{},void 0,(0,n.Z)("code",{className:"hljs"},void 0,'alert("Hello world!");'))})),$e||($e=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Code block with syntax highlighting (BBCode)")),We||(We=(0,n.Z)(st,{markup:'[code="python"]\nprint("Hello world!");\n[/code]',result:(0,n.Z)("pre",{},void 0,(0,n.Z)("code",{className:"hljs language-python"},void 0,(0,n.Z)("span",{className:"hljs-built_in"},void 0,"print"),'("Hello world!");'))})),Qe||(Qe=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Horizontal rule")),Xe||(Xe=(0,n.Z)(st,{markup:"Lorem ipsum\n- - -\nDolor met",result:(0,n.Z)("div",{},void 0,(0,n.Z)("p",{},void 0,"Lorem ipsum"),(0,n.Z)("hr",{}),(0,n.Z)("p",{},void 0,"Dolor met"))})),Ke||(Ke=(0,n.Z)("hr",{})),(0,n.Z)("h4",{},void 0,pgettext("markup help","Horizontal rule (BBCode)")),Je||(Je=(0,n.Z)(st,{markup:"Lorem ipsum\n[hr]\nDolor met",result:(0,n.Z)("div",{},void 0,(0,n.Z)("p",{},void 0,"Lorem ipsum"),(0,n.Z)("hr",{}),(0,n.Z)("p",{},void 0,"Dolor met"))}))),(0,n.Z)("div",{className:"modal-footer"},void 0,(0,n.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,pgettext("modal","Close")))))}function st(e){let{markup:t,result:s}=e;return(0,n.Z)("div",{className:"formatting-help-item"},void 0,(0,n.Z)("div",{className:"formatting-help-item-markup"},void 0,(0,n.Z)("pre",{},void 0,(0,n.Z)("code",{},void 0,t))),(0,n.Z)("div",{className:"formatting-help-item-preview"},void 0,(0,n.Z)("article",{className:"misago-markup"},void 0,s)))}class at extends o().Component{constructor(e){super(e),this.state={reveal:!1}}render(){return(0,n.Z)("aside",{className:this.state.reveal?"spoiler-block revealed":"spoiler-block"},void 0,(0,n.Z)("blockquote",{className:"spoiler-body"},void 0,(0,n.Z)("p",{},void 0,this.props.children)),!this.state.reveal&&(0,n.Z)("div",{className:"spoiler-overlay"},void 0,(0,n.Z)("button",{className:"spoiler-reveal",type:"button",onClick:()=>{this.setState({reveal:!0})}},void 0,gettext("Reveal spoiler"))))}}const it=new RegExp("^(((ftps?)|(https?))://)","i");function ot(e){return it.test(e.trim())}var nt;class rt extends o().Component{constructor(e){super(e),(0,r.Z)(this,"handleSubmit",(e=>{e.preventDefault();const{selection:t,update:s}=this.props,a=this.state.text.trim(),i=this.state.url.trim();return 0===i.length?(this.setState({error:gettext("This field is required.")}),!1):(a.length>0?V(t,s,"!["+a+"]("+i+")"):V(t,s,"!("+i+")"),q.Z.hide(),!1)}));const t=e.selection.text.trim(),s=ot(t);this.state={error:null,text:s?"":t,url:s?t:""}}render(){return(0,n.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,n.Z)("div",{className:"modal-content"},void 0,(0,n.Z)("div",{className:"modal-header"},void 0,(0,n.Z)("button",{"aria-label":pgettext("modal","Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,nt||(nt=(0,n.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,n.Z)("h4",{className:"modal-title"},void 0,pgettext("markup editor","Image"))),(0,n.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,n.Z)("div",{className:"modal-body"},void 0,(0,n.Z)(ne.Z,{for:"markup_link_url",label:pgettext("markup editor","Image description"),helpText:pgettext("markup editor","Optional but recommended . Will be displayed instead of image when it fails to load.")},void 0,(0,n.Z)("input",{id:"markup_link_text",className:"form-control",type:"text",value:this.state.text,onChange:e=>this.setState({text:e.target.value})})),(0,n.Z)(ne.Z,{for:"markup_link_url",label:pgettext("markup editor","Image address"),validation:this.state.error?[this.state.error]:void 0},void 0,(0,n.Z)("input",{id:"markup_link_url",className:"form-control",type:"text",value:this.state.url,onChange:e=>this.setState({url:e.target.value})}))),(0,n.Z)("div",{className:"modal-footer"},void 0,(0,n.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Cancel")),(0,n.Z)("button",{className:"btn btn-primary"},void 0,pgettext("markup editor","Insert image"))))))}}var lt,dt=rt;class ct extends o().Component{constructor(e){super(e),(0,r.Z)(this,"handleSubmit",(e=>{e.preventDefault();const{selection:t,update:s}=this.props,a=this.state.text.trim(),i=this.state.url.trim();return 0===i.length?(this.setState({error:gettext("This field is required.")}),!1):(a.length>0?V(t,s,"["+a+"]("+i+")"):V(t,s,"<"+i+">"),q.Z.hide(),!1)}));const t=e.selection.text.trim(),s=ot(t);this.state={error:null,text:s?"":t,url:s?t:""}}render(){return(0,n.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,n.Z)("div",{className:"modal-content"},void 0,(0,n.Z)("div",{className:"modal-header"},void 0,(0,n.Z)("button",{"aria-label":pgettext("modal","Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,lt||(lt=(0,n.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,n.Z)("h4",{className:"modal-title"},void 0,pgettext("markup editor","Link"))),(0,n.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,n.Z)("div",{className:"modal-body"},void 0,(0,n.Z)(ne.Z,{for:"markup_link_url",label:pgettext("markup editor","Link text"),helpText:pgettext("markup editor","Optional. Will be displayed instead of link's address.")},void 0,(0,n.Z)("input",{id:"markup_link_text",className:"form-control",type:"text",value:this.state.text,onChange:e=>this.setState({text:e.target.value})})),(0,n.Z)(ne.Z,{for:"markup_link_url",label:pgettext("markup editor","Link address"),validation:this.state.error?[this.state.error]:void 0},void 0,(0,n.Z)("input",{id:"markup_link_url",className:"form-control",type:"text",value:this.state.url,onChange:e=>this.setState({url:e.target.value})}))),(0,n.Z)("div",{className:"modal-footer"},void 0,(0,n.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Cancel")),(0,n.Z)("button",{className:"btn btn-primary"},void 0,pgettext("markup editor","Insert link"))))))}}var pt,ut=ct;class ht extends o().Component{constructor(e){super(e),(0,r.Z)(this,"handleSubmit",(e=>{e.preventDefault();const{selection:t,update:s}=this.props,a=this.state.author.trim(),i=this.state.text.trim();if(0===i.length)return this.setState({error:gettext("This field is required.")}),!1;const o=t.prefix.trim().length?"\n\n":"";return V(t,s,a?o+'[quote="'+a+'"]\n'+i+"\n[/quote]\n\n":o+"[quote]\n"+i+"\n[/quote]\n\n"),q.Z.hide(),!1})),this.state={error:null,author:"",text:e.selection.text}}render(){return(0,n.Z)("div",{className:"modal-dialog modal-lg",role:"document"},void 0,(0,n.Z)("div",{className:"modal-content"},void 0,(0,n.Z)("div",{className:"modal-header"},void 0,(0,n.Z)("button",{"aria-label":pgettext("modal","Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,pt||(pt=(0,n.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,n.Z)("h4",{className:"modal-title"},void 0,pgettext("markup editor","Quote"))),(0,n.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,n.Z)("div",{className:"modal-body"},void 0,(0,n.Z)(ne.Z,{for:"markup_quote_author",label:pgettext("markup editor","Quote's author or source"),helpText:pgettext("markup editor",'Optional. If it\'s username, put "@" before it ("@JohnDoe").')},void 0,(0,n.Z)("input",{id:"markup_quote_author",className:"form-control",type:"text",value:this.state.author,onChange:e=>this.setState({author:e.target.value})})),(0,n.Z)(ne.Z,{for:"markup_quote_text",label:pgettext("markup editor","Quoted text"),validation:this.state.error?[this.state.error]:void 0},void 0,(0,n.Z)("textarea",{id:"markup_quote_text",className:"form-control",rows:"8",value:this.state.text,onChange:e=>this.setState({text:e.target.value})}))),(0,n.Z)("div",{className:"modal-footer"},void 0,(0,n.Z)("button",{className:"btn btn-default","data-dismiss":"modal",type:"button"},void 0,gettext("Cancel")),(0,n.Z)("button",{className:"btn btn-primary"},void 0,pgettext("markup editor","Insert quote"))))))}}var mt,vt,gt=ht,Zt=e=>{let{disabled:t,icon:s,title:a,onClick:i}=e;return(0,n.Z)("button",{className:"btn btn-markup-editor",title:a,type:"button",disabled:t,onClick:i},void 0,(0,n.Z)("span",{className:"material-icon"},void 0,s))},bt=s(54031),ft=(e,t)=>{const s=1024*M.Z.get("user").acl.max_attachment_size;if(e.size>s)return void j.Z.error(interpolate(pgettext("markup editor","File %(filename)s is bigger than %(limit)s."),{filename:e.name,limit:(0,F.Z)(s)},!0));let a={id:null,key:(0,bt.ZP)(32),error:null,uploaded_on:null,progress:0,filename:e.name,filetype:null,is_image:!1,size:e.size,url:null,uploader_name:null};t((e=>{let{attachments:t}=e;return{attachments:[a].concat(t)}}));const i=()=>{t((e=>{let{attachments:t}=e;return{attachments:t.concat()}}))},o=new FormData;o.append("upload",e),D.Z.upload(M.Z.get("ATTACHMENTS_API"),o,(e=>{a.progress=e,i()})).then((e=>{Object.assign(a,e,{uploaded_on:O()(e.uploaded_on)}),i()}),(e=>{400===e.status||413===e.status?(a.error=e.detail,j.Z.error(e.detail),i()):j.Z.apiError(e)}))};var _t=e=>{let{disabled:t,element:s,update:a,updateAttachments:i}=e;const o=[{name:pgettext("markup editor","Strong"),icon:"format_bold",onClick:()=>{Y(G(s),a,"**","**",pgettext("example markup","Strong text"))}},{name:pgettext("markup editor","Emphasis"),icon:"format_italic",onClick:()=>{Y(G(s),a,"*","*",pgettext("example markup","Text with emphasis"))}},{name:pgettext("markup editor","Strikethrough"),icon:"format_strikethrough",onClick:()=>{Y(G(s),a,"~~","~~",pgettext("example markup","Text with strikethrough"))}},{name:pgettext("markup editor","Horizontal ruler"),icon:"remove",onClick:()=>{V(G(s),a,"\n\n- - -\n\n")}},{name:pgettext("markup editor","Link"),icon:"insert_link",onClick:()=>{const e=G(s);q.Z.show((0,n.Z)(ut,{selection:e,element:s,update:a}))}},{name:pgettext("markup editor","Image"),icon:"insert_photo",onClick:()=>{const e=G(s);q.Z.show((0,n.Z)(dt,{selection:e,element:s,update:a}))}},{name:pgettext("markup editor","Quote"),icon:"format_quote",onClick:()=>{const e=G(s);q.Z.show((0,n.Z)(gt,{selection:e,element:s,update:a}))}},{name:pgettext("markup editor","Spoiler"),icon:"visibility_off",onClick:()=>{((e,t)=>{const s=G(e),a=s.prefix.trim().length?"\n\n":"";Y(s,t,a+"[spoiler]\n","\n[/spoiler]\n\n",pgettext("markup editor","Spoiler text"))})(s,a)}},{name:pgettext("markup editor","Code"),icon:"code",onClick:()=>{const e=G(s);q.Z.show((0,n.Z)(et,{selection:e,element:s,update:a}))}}];return M.Z.get("user").acl.max_attachment_size&&o.push({name:pgettext("markup editor","Upload file"),icon:"file_upload",onClick:()=>(e=>{const t=document.createElement("input");t.type="file",t.multiple="multiple",t.addEventListener("change",(function(){for(let s=0;s{let{name:a,icon:i,onClick:o}=e;return(0,n.Z)(Zt,{title:a,icon:i,disabled:t||!s,onClick:o},i)}))),(0,n.Z)("div",{className:"markup-editor-toolbar-right"},void 0,(0,n.Z)("div",{className:"markup-editor-controls-dropdown"},void 0,(0,n.Z)("button",{type:"button",className:"btn btn-markup-editor dropdown-toggle","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",disabled:t||!s},void 0,mt||(mt=(0,n.Z)("span",{className:"material-icon"},void 0,"more_vert"))),(0,n.Z)("ul",{className:"dropdown-menu dropdown-menu-right stick-to-bottom"},void 0,o.map((e=>{let{name:a,icon:i,onClick:o}=e;return(0,n.Z)("li",{},i,(0,n.Z)("button",{type:"button",className:"btn-link",disabled:t||!s,onClick:o},void 0,(0,n.Z)("span",{className:"material-icon"},void 0,i),a))})))),(0,n.Z)(Zt,{title:pgettext("markup editor","Formatting help"),icon:"help_outline",onClick:()=>{q.Z.show(vt||(vt=(0,n.Z)(tt,{})))}})))},Nt=s(19755);class xt extends o().Component{constructor(e){super(e),(0,r.Z)(this,"showPreview",(()=>{this.state.loading||(this.setState({loading:!0,preview:!0,element:null}),D.Z.post(M.Z.get("PARSE_MARKUP_API"),{post:this.props.value}).then((e=>{this.setState({loading:!1,parsed:e.parsed})}),(e=>{400===e.status?j.Z.error(e.detail):j.Z.apiError(e),this.setState({loading:!1,preview:!1})})))})),(0,r.Z)(this,"closePreview",(()=>{this.setState({loading:!1,preview:!1})})),(0,r.Z)(this,"onDrop",(e=>{if(e.preventDefault(),e.stopPropagation(),!e.dataTransfer.files)return;const{onAttachmentsChange:t}=this.props;if(M.Z.get("user").acl.max_attachment_size)for(let s=0;s{const{onAttachmentsChange:t}=this.props,s=[];for(let t=0;t(0,n.Z)("div",{className:z()("markup-editor",{"markup-editor-focused":this.state.focused&&!this.state.preview})},void 0,(0,n.Z)(_t,{disabled:this.props.disabled||this.state.preview,element:this.state.element,update:e=>this.props.onChange({target:{value:e}}),updateAttachments:this.props.onAttachmentsChange}),this.state.preview?(0,n.Z)("div",{className:"markup-editor-preview"},void 0,this.state.loading?(0,n.Z)("div",{className:"markup-editor-preview-loading"},void 0,(0,n.Z)("div",{className:"ui-preview"},void 0,(0,n.Z)("span",{className:"ui-preview-text",style:{width:"240px"}}))):(0,n.Z)(B.Z,{className:"markup-editor-preview-contents",markup:this.state.parsed})):o().createElement("textarea",{className:"markup-editor-textarea form-control",placeholder:this.props.placeholder,value:this.props.value,disabled:this.props.disabled||this.state.loading,rows:6,ref:e=>{e&&this.state.element!==e&&(this.setState({element:e}),function(e,t){Nt(t).atwho({at:"@",displayTpl:'
  • ${username}
  • ',insertTpl:"@${username}",searchKey:"username",callbacks:{remoteFilter:function(e,t){Nt.getJSON(M.Z.get("MENTION_API"),{q:e},t)}}}),Nt(t).on("inserted.atwho",((t,s,a,i)=>{const{query:o}=i,n=a.target.innerText.trim(),r=t.target.value.substr(0,o.headPos),l=t.target.value.substr(o.endPos);t.target.value=r+n+l,e.onChange(t);const d=o.headPos+n.length;t.target.setSelectionRange(d,d),t.target.focus()}))}(this.props,e))},onChange:this.props.onChange,onDrop:this.onDrop,onFocus:()=>this.setState({focused:!0}),onPaste:this.onPaste,onBlur:()=>this.setState({focused:!1})}),this.props.attachments.length>0&&(0,n.Z)(ae,{attachments:this.props.attachments,disabled:this.props.disabled||this.state.preview,element:this.state.element,setState:this.props.onAttachmentsChange,update:e=>this.props.onChange({target:{value:e}})}),(0,n.Z)(oe,{preview:this.state.preview,canProtect:this.props.canProtect,isProtected:this.props.isProtected,disabled:this.props.disabled,empty:this.props.value.trim().length{let{children:t}=e;return(0,n.Z)("div",{className:"posting-dialog-body"},void 0,t)},Gt=e=>{let{close:t,message:s}=e;return(0,n.Z)("div",{className:"posting-dialog-error"},void 0,Lt||(Lt=(0,n.Z)("div",{className:"posting-dialog-error-icon"},void 0,(0,n.Z)("span",{className:"material-icon"},void 0,"error_outlined"))),(0,n.Z)("div",{className:"posting-dialog-error-detail"},void 0,(0,n.Z)("p",{},void 0,s),(0,n.Z)("button",{type:"button",className:"btn btn-default",onClick:t},void 0,pgettext("modal","Close"))))},$t=e=>{let{children:t,close:s,fullscreen:a,minimize:i,minimized:o,fullscreenEnter:r,fullscreenExit:l,open:d}=e;return(0,n.Z)("div",{className:"posting-dialog-header"},void 0,(0,n.Z)("div",{className:"posting-dialog-caption"},void 0,t),o?(0,n.Z)("button",{className:"btn btn-posting-dialog",title:pgettext("dialog","Open"),type:"button",onClick:d},void 0,Pt||(Pt=(0,n.Z)("span",{className:"material-icon"},void 0,"expand_less"))):(0,n.Z)("button",{className:"btn btn-posting-dialog",title:pgettext("dialog","Minimize"),type:"button",onClick:i},void 0,Ot||(Ot=(0,n.Z)("span",{className:"material-icon"},void 0,"expand_more"))),a?(0,n.Z)("button",{className:"btn btn-posting-dialog hidden-xs",title:pgettext("dialog","Exit the fullscreen mode"),type:"button",onClick:l},void 0,It||(It=(0,n.Z)("span",{className:"material-icon"},void 0,"fullscreen_exit"))):(0,n.Z)("button",{className:"btn btn-posting-dialog hidden-xs",title:pgettext("dialog","Enter the fullscreen mode"),type:"button",onClick:r},void 0,At||(At=(0,n.Z)("span",{className:"material-icon"},void 0,"fullscreen"))),(0,n.Z)("button",{className:"btn btn-posting-dialog",title:pgettext("dialog","Cancel"),type:"button",onClick:s},void 0,Rt||(Rt=(0,n.Z)("span",{className:"material-icon"},void 0,"close"))))};function Wt(e){let{isClosed:t,isHidden:s,isPinned:a,disabled:i,options:o,close:r,open:l,hide:d,unhide:c,pinGlobally:p,pinLocally:u,unpin:h}=e;const m=function(e,t,s){const a=[];return 2===s&&a.push("bookmark"),1===s&&a.push("bookmark_outline"),e&&a.push("lock"),t&&a.push("visibility_off"),a}(t,s,a);return(0,n.Z)("div",{className:"dropdown"},void 0,(0,n.Z)("button",{className:"btn btn-default btn-outline btn-icon",title:pgettext("post thread","Options"),"aria-expanded":"true","aria-haspopup":"true","data-toggle":"dropdown",type:"button",disabled:i},void 0,m.length>0?(0,n.Z)("span",{className:"btn-icons-family"},void 0,m.map((e=>(0,n.Z)("span",{className:"material-icon"},e,e)))):Dt||(Dt=(0,n.Z)("span",{className:"material-icon"},void 0,"more_horiz"))),(0,n.Z)("ul",{className:"dropdown-menu dropdown-menu-right stick-to-bottom"},void 0,2===o.pin&&2!==a&&(0,n.Z)("li",{},void 0,(0,n.Z)("button",{className:"btn btn-link",onClick:p,type:"button",disabled:i},void 0,jt||(jt=(0,n.Z)("span",{className:"material-icon"},void 0,"bookmark")),pgettext("post thread","Pinned globally"))),o.pin>=a&&1!==a&&(0,n.Z)("li",{},void 0,(0,n.Z)("button",{className:"btn btn-link",onClick:u,type:"button",disabled:i},void 0,Ut||(Ut=(0,n.Z)("span",{className:"material-icon"},void 0,"bookmark_outline")),pgettext("post thread","Pinned locally"))),o.pin>=a&&0!==a&&(0,n.Z)("li",{},void 0,(0,n.Z)("button",{className:"btn btn-link",onClick:h,type:"button",disabled:i},void 0,zt||(zt=(0,n.Z)("span",{className:"material-icon"},void 0,"radio_button_unchecked")),pgettext("post thread","Not pinned"))),o.close&&!!t&&(0,n.Z)("li",{},void 0,(0,n.Z)("button",{className:"btn btn-link",onClick:l,type:"button",disabled:i},void 0,Mt||(Mt=(0,n.Z)("span",{className:"material-icon"},void 0,"lock_outline")),pgettext("post thread","Open"))),o.close&&!t&&(0,n.Z)("li",{},void 0,(0,n.Z)("button",{className:"btn btn-link",onClick:r,type:"button",disabled:i},void 0,Bt||(Bt=(0,n.Z)("span",{className:"material-icon"},void 0,"lock")),pgettext("post thread","Closed"))),o.hide&&!!s&&(0,n.Z)("li",{},void 0,(0,n.Z)("button",{className:"btn btn-link",onClick:c,type:"button",disabled:i},void 0,qt||(qt=(0,n.Z)("span",{className:"material-icon"},void 0,"visibility")),pgettext("post thread","Visible"))),o.hide&&!s&&(0,n.Z)("li",{},void 0,(0,n.Z)("button",{className:"btn btn-link",onClick:d,type:"button",disabled:i},void 0,Ft||(Ft=(0,n.Z)("span",{className:"material-icon"},void 0,"visibility_off")),pgettext("post thread","Hidden")))))}var Qt=class extends L.Z{constructor(e){super(e),(0,r.Z)(this,"loadSuccess",(e=>{let t=null,s=null;const a=e.map((e=>(!1===e.post||t&&e.id!=this.state.category||(t=e.id,s=e.post),Object.assign(e,{disabled:!1===e.post,label:e.name,value:e.id}))));this.setState({isReady:!0,options:s,categories:a,category:t})})),(0,r.Z)(this,"loadError",(e=>{this.setState({error:e.detail})})),(0,r.Z)(this,"onCancel",(()=>{if(0===this.state.post.length&&0===this.state.title.length&&0===this.state.attachments.length)return this.minimize(),l.Z.close();window.confirm(pgettext("post thread","Are you sure you want to discard thread?"))&&(this.minimize(),l.Z.close())})),(0,r.Z)(this,"onTitleChange",(e=>{this.changeValue("title",e.target.value)})),(0,r.Z)(this,"onCategoryChange",(e=>{const t=this.state.categories.find((t=>e.target.value==t.value));let s=this.state.pin;t.post.pin&&t.post.pin{this.changeValue("post",e.target.value)})),(0,r.Z)(this,"onAttachmentsChange",(e=>{this.setState(e)})),(0,r.Z)(this,"onClose",(()=>{this.changeValue("close",!0)})),(0,r.Z)(this,"onOpen",(()=>{this.changeValue("close",!1)})),(0,r.Z)(this,"onPinGlobally",(()=>{this.changeValue("pin",2)})),(0,r.Z)(this,"onPinLocally",(()=>{this.changeValue("pin",1)})),(0,r.Z)(this,"onUnpin",(()=>{this.changeValue("pin",0)})),(0,r.Z)(this,"onHide",(()=>{this.changeValue("hide",!0)})),(0,r.Z)(this,"onUnhide",(()=>{this.changeValue("hide",!1)})),(0,r.Z)(this,"close",(()=>{this.minimize(),l.Z.close()})),(0,r.Z)(this,"minimize",(()=>{this.setState({fullscreen:!1,minimized:!0})})),(0,r.Z)(this,"open",(()=>{this.setState({minimized:!1}),this.state.fullscreen})),(0,r.Z)(this,"fullscreenEnter",(()=>{this.setState({fullscreen:!0,minimized:!1})})),(0,r.Z)(this,"fullscreenExit",(()=>{this.setState({fullscreen:!1,minimized:!1})})),this.state={isReady:!1,isLoading:!1,error:null,minimized:!1,fullscreen:!1,options:null,title:"",category:e.category||null,categories:[],post:"",attachments:[],close:!1,hide:!1,pin:0,validators:{title:(0,R.jn)(),post:(0,R.Jh)()},errors:{}}}componentDidMount(){D.Z.get(this.props.config).then(this.loadSuccess,this.loadError)}clean(){if(!this.state.title.trim().length)return j.Z.error(pgettext("posting form","You have to enter thread title.")),!1;if(!this.state.post.trim().length)return j.Z.error(pgettext("posting form","You have to enter a message.")),!1;const e=this.validate();return e.title?(j.Z.error(e.title[0]),!1):!e.post||(j.Z.error(e.post[0]),!1)}send(){return D.Z.post(this.props.submit,{title:this.state.title,category:this.state.category,post:this.state.post,attachments:I(this.state.attachments),close:this.state.close,hide:this.state.hide,pin:this.state.pin})}handleSuccess(e){this.setState({isLoading:!0}),this.close(),j.Z.success(pgettext("post thread","Your thread has been posted.")),window.location=e.url}handleError(e){if(400===e.status){const t=[].concat(e.non_field_errors||[],e.category||[],e.title||[],e.post||[],e.attachments||[]);j.Z.error(t[0])}else j.Z.apiError(e)}render(){const e={minimized:this.state.minimized,minimize:this.minimize,open:this.open,fullscreen:this.state.fullscreen,fullscreenEnter:this.fullscreenEnter,fullscreenExit:this.fullscreenExit,close:this.onCancel};if(this.state.error)return o().createElement(Xt,e,(0,n.Z)(Gt,{message:this.state.error,close:this.close}));if(!this.state.isReady)return o().createElement(Xt,e,(0,n.Z)("div",{className:"posting-loading ui-preview"},void 0,Ht||(Ht=(0,n.Z)(wt.o8,{className:"posting-dialog-toolbar"},void 0,(0,n.Z)(wt.Z2,{className:"posting-dialog-thread-title",auto:!0},void 0,(0,n.Z)(wt.Eg,{auto:!0},void 0,(0,n.Z)("input",{className:"form-control",disabled:!0,type:"text"}))),(0,n.Z)(wt.Z2,{className:"posting-dialog-category-select",auto:!0},void 0,(0,n.Z)(wt.Eg,{},void 0,(0,n.Z)("input",{className:"form-control",disabled:!0,type:"text"}))))),(0,n.Z)(yt,{attachments:[],value:"",submitText:pgettext("post thread submit","Post thread"),disabled:!0,onAttachmentsChange:()=>{},onChange:()=>{}})));const t=!!(this.state.options.close||this.state.options.hide||this.state.options.pin);return o().createElement(Xt,e,(0,n.Z)("form",{className:"posting-dialog-form",onSubmit:this.handleSubmit},void 0,(0,n.Z)(wt.o8,{className:"posting-dialog-toolbar"},void 0,(0,n.Z)(wt.Z2,{className:"posting-dialog-thread-title",auto:!0},void 0,(0,n.Z)(wt.Eg,{auto:!0},void 0,(0,n.Z)("input",{className:"form-control",disabled:this.state.isLoading,onChange:this.onTitleChange,placeholder:pgettext("post thread","Thread title"),type:"text",value:this.state.title}))),(0,n.Z)(wt.Z2,{className:"posting-dialog-category-select",auto:!0},void 0,(0,n.Z)(wt.Eg,{},void 0,(0,n.Z)(T.Z,{choices:this.state.categories,disabled:this.state.isLoading,onChange:this.onCategoryChange,value:this.state.category})),t&&(0,n.Z)(wt.Eg,{shrink:!0},void 0,(0,n.Z)(Wt,{isClosed:this.state.close,isHidden:this.state.hide,isPinned:this.state.pin,disabled:this.state.isLoading,options:this.state.options,close:this.onClose,open:this.onOpen,hide:this.onHide,unhide:this.onUnhide,pinGlobally:this.onPinGlobally,pinLocally:this.onPinLocally,unpin:this.onUnpin})))),(0,n.Z)(yt,{attachments:this.state.attachments,value:this.state.post,submitText:pgettext("post thread submit","Start thread"),disabled:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onChange:this.onPostChange})))}};const Xt=e=>{let{children:t,close:s,minimized:a,minimize:i,open:o,fullscreen:r,fullscreenEnter:l,fullscreenExit:d}=e;return(0,n.Z)(Yt,{fullscreen:r,minimized:a},void 0,(0,n.Z)($t,{fullscreen:r,fullscreenEnter:l,fullscreenExit:d,minimized:a,minimize:i,open:o,close:s},void 0,pgettext("post thread","Start new thread")),(0,n.Z)(Vt,{},void 0,t))};function Kt(e){const t=e.split(",").map((e=>e.trim().toLowerCase())).filter((e=>e.length>0));return t.filter(((e,s)=>t.indexOf(e)==s))}var Jt=class extends L.Z{constructor(e){super(e),(0,r.Z)(this,"onCancel",(()=>{if(0===this.state.post.length&&0===this.state.title.length&&0===this.state.to.length&&0===this.state.attachments.length)return this.close();window.confirm(pgettext("post thread","Are you sure you want to discard private thread?"))&&this.close()})),(0,r.Z)(this,"onToChange",(e=>{this.changeValue("to",e.target.value)})),(0,r.Z)(this,"onTitleChange",(e=>{this.changeValue("title",e.target.value)})),(0,r.Z)(this,"onPostChange",(e=>{this.changeValue("post",e.target.value)})),(0,r.Z)(this,"onAttachmentsChange",(e=>{this.setState(e)})),(0,r.Z)(this,"close",(()=>{this.minimize(),l.Z.close()})),(0,r.Z)(this,"minimize",(()=>{this.setState({fullscreen:!1,minimized:!0})})),(0,r.Z)(this,"open",(()=>{this.setState({minimized:!1}),this.state.fullscreen})),(0,r.Z)(this,"fullscreenEnter",(()=>{this.setState({fullscreen:!0,minimized:!1})})),(0,r.Z)(this,"fullscreenExit",(()=>{this.setState({fullscreen:!1,minimized:!1})}));const t=(e.to||[]).map((e=>e.username)).join(", ");this.state={isLoading:!1,error:null,minimized:!1,fullscreen:!1,to:t,title:"",post:"",attachments:[],validators:{title:(0,R.jn)(),post:(0,R.Jh)()},errors:{}}}clean(){if(!Kt(this.state.to).length)return j.Z.error(pgettext("posting form","You have to enter at least one recipient.")),!1;if(!this.state.title.trim().length)return j.Z.error(pgettext("posting form","You have to enter thread title.")),!1;if(!this.state.post.trim().length)return j.Z.error(pgettext("posting form","You have to enter a message.")),!1;const e=this.validate();return e.title?(j.Z.error(e.title[0]),!1):!e.post||(j.Z.error(e.post[0]),!1)}send(){return D.Z.post(this.props.submit,{to:Kt(this.state.to),title:this.state.title,post:this.state.post,attachments:I(this.state.attachments)})}handleSuccess(e){this.setState({isLoading:!0}),this.close(),j.Z.success(pgettext("post thread","Your thread has been posted.")),window.location=e.url}handleError(e){if(400===e.status){const t=[].concat(e.non_field_errors||[],e.to||[],e.title||[],e.post||[],e.attachments||[]);j.Z.error(t[0])}else j.Z.apiError(e)}render(){const e={minimized:this.state.minimized,minimize:this.minimize,open:this.open,fullscreen:this.state.fullscreen,fullscreenEnter:this.fullscreenEnter,fullscreenExit:this.fullscreenExit,close:this.onCancel};return o().createElement(es,e,(0,n.Z)("form",{className:"posting-dialog-form",onSubmit:this.handleSubmit},void 0,(0,n.Z)(wt.o8,{className:"posting-dialog-toolbar"},void 0,(0,n.Z)(wt.Z2,{className:"posting-dialog-thread-recipients",auto:!0},void 0,(0,n.Z)(wt.Eg,{auto:!0},void 0,(0,n.Z)("input",{className:"form-control",disabled:this.state.isLoading,onChange:this.onToChange,placeholder:pgettext("post thread","Recipients, eg.: Danny, Lisa, Alice"),type:"text",value:this.state.to}))),(0,n.Z)(wt.Z2,{className:"posting-dialog-thread-title",auto:!0},void 0,(0,n.Z)(wt.Eg,{auto:!0},void 0,(0,n.Z)("input",{className:"form-control",disabled:this.state.isLoading,onChange:this.onTitleChange,placeholder:pgettext("post thread","Thread title"),type:"text",value:this.state.title})))),(0,n.Z)(yt,{attachments:this.state.attachments,value:this.state.post,submitText:pgettext("post thread submit","Start thread"),disabled:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onChange:this.onPostChange})))}};const es=e=>{let{children:t,close:s,minimized:a,minimize:i,open:o,fullscreen:r,fullscreenEnter:l,fullscreenExit:d}=e;return(0,n.Z)(Yt,{fullscreen:r,minimized:a},void 0,(0,n.Z)($t,{fullscreen:r,fullscreenEnter:l,fullscreenExit:d,minimized:a,minimize:i,open:o,close:s},void 0,pgettext("post thread","Start private thread")),(0,n.Z)(Vt,{},void 0,t))};var ts=class extends L.Z{constructor(e){super(e),(0,r.Z)(this,"loadSuccess",(e=>{this.setState({isReady:!0,post:e.post?'[quote="@'+e.poster+'"]\n'+e.post+"\n[/quote]":this.state.post}),this.quoteText=e.post?'[quote="@'+e.poster+'"]\n'+e.post+"\n[/quote]":this.state.post})),(0,r.Z)(this,"loadError",(e=>{this.setState({error:e.detail})})),(0,r.Z)(this,"appendData",(e=>{const t=e.post?'[quote="@'+e.poster+'"]\n'+e.post+"\n[/quote]\n\n":"";this.setState(((e,s)=>e.post.length>0?{post:e.post.trim()+"\n\n"+t}:{post:t})),this.open()})),(0,r.Z)(this,"onCancel",(()=>{if(this.state.post===this.quoteText&&0===this.state.attachments.length)return this.close();window.confirm(pgettext("post reply","Are you sure you want to discard your reply?"))&&this.close()})),(0,r.Z)(this,"onPostChange",(e=>{this.changeValue("post",e.target.value)})),(0,r.Z)(this,"onAttachmentsChange",(e=>{this.setState(e)})),(0,r.Z)(this,"onQuote",(e=>{this.setState((t=>{let{post:s}=t;return s.length>0?{post:s.trim()+"\n\n"+e}:{post:e}})),this.open()})),(0,r.Z)(this,"close",(()=>{this.minimize(),l.Z.close()})),(0,r.Z)(this,"minimize",(()=>{this.setState({fullscreen:!1,minimized:!0})})),(0,r.Z)(this,"open",(()=>{this.setState({minimized:!1}),this.state.fullscreen})),(0,r.Z)(this,"fullscreenEnter",(()=>{this.setState({fullscreen:!0,minimized:!1})})),(0,r.Z)(this,"fullscreenExit",(()=>{this.setState({fullscreen:!1,minimized:!1})})),this.state={isReady:!1,isLoading:!1,error:null,minimized:!1,fullscreen:!1,post:this.props.default||"",attachments:[],validators:{post:(0,R.Jh)()},errors:{}},this.quoteText=""}componentDidMount(){D.Z.get(this.props.config,this.props.context||null).then(this.loadSuccess,this.loadError),S(!1,this.onQuote)}componentWillUnmount(){E()}componentWillReceiveProps(e){const t=this.props.context,s=e.context;t&&s&&!s.reply||D.Z.get(e.config,e.context||null).then(this.appendData,j.Z.apiError)}clean(){if(!this.state.post.trim().length)return j.Z.error(pgettext("posting form","You have to enter a message.")),!1;const e=this.validate();return!e.post||(j.Z.error(e.post[0]),!1)}send(){return S(!0,this.onQuote),D.Z.post(this.props.submit,{post:this.state.post,attachments:I(this.state.attachments)})}handleSuccess(e){this.setState({isLoading:!0}),this.close(),S(!1,this.onQuote),j.Z.success(pgettext("post reply","Your reply has been posted.")),window.location=e.url.index}handleError(e){if(400===e.status){const t=[].concat(e.non_field_errors||[],e.post||[],e.attachments||[]);j.Z.error(t[0])}else j.Z.apiError(e);S(!1,this.onQuote)}render(){const e={thread:this.props.thread,minimized:this.state.minimized,minimize:this.minimize,open:this.open,fullscreen:this.state.fullscreen,fullscreenEnter:this.fullscreenEnter,fullscreenExit:this.fullscreenExit,close:this.onCancel};return this.state.error?o().createElement(ss,e,(0,n.Z)(Gt,{message:this.state.error,close:this.close})):this.state.isReady?o().createElement(ss,e,(0,n.Z)("form",{className:"posting-dialog-form",method:"POST",onSubmit:this.handleSubmit},void 0,(0,n.Z)(yt,{attachments:this.state.attachments,value:this.state.post,submitText:pgettext("post reply submit","Post reply"),disabled:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onChange:this.onPostChange}))):o().createElement(ss,e,(0,n.Z)("div",{className:"posting-loading ui-preview"},void 0,(0,n.Z)(yt,{attachments:[],value:"",submitText:pgettext("post reply submit","Post reply"),disabled:!0,onAttachmentsChange:()=>{},onChange:()=>{}})))}};const ss=e=>{let{children:t,close:s,minimized:a,minimize:i,open:o,fullscreen:r,fullscreenEnter:l,fullscreenExit:d,thread:c}=e;return(0,n.Z)(Yt,{fullscreen:r,minimized:a},void 0,(0,n.Z)($t,{fullscreen:r,fullscreenEnter:l,fullscreenExit:d,minimized:a,minimize:i,open:o,close:s},void 0,interpolate(pgettext("post reply","Reply to: %(thread)s"),{thread:c.title},!0)),(0,n.Z)(Vt,{},void 0,t))};var as=class extends L.Z{constructor(e){super(e),(0,r.Z)(this,"loadSuccess",(e=>{var t;this.originalPost=e.post,this.setState({isReady:!0,post:e.post,attachments:(t=e.attachments,t.map((e=>Object.assign({},e,{uploaded_on:O()(e.uploaded_on)})))),protect:e.is_protected,canProtect:e.can_protect})})),(0,r.Z)(this,"loadError",(e=>{this.setState({error:e.detail})})),(0,r.Z)(this,"appendData",(e=>{const t=e.post?'[quote="@'+e.poster+'"]\n'+e.post+"\n[/quote]\n\n":"";this.setState(((e,s)=>e.post.length>0?{post:e.post.trim()+"\n\n"+t}:{post:t})),this.open()})),(0,r.Z)(this,"onCancel",(()=>{const e=this.state.originalPost===this.state.post,t=0===this.state.attachments.length;if(e&&t)return this.close();window.confirm(pgettext("edit reply","Are you sure you want to discard changes?"))&&this.close()})),(0,r.Z)(this,"onProtect",(()=>{this.setState({protect:!0})})),(0,r.Z)(this,"onUnprotect",(()=>{this.setState({protect:!1})})),(0,r.Z)(this,"onPostChange",(e=>{this.changeValue("post",e.target.value)})),(0,r.Z)(this,"onAttachmentsChange",(e=>{this.setState(e)})),(0,r.Z)(this,"onQuote",(e=>{this.setState((t=>{let{post:s}=t;return s.length>0?{post:s.trim()+"\n\n"+e}:{post:e}})),this.open()})),(0,r.Z)(this,"close",(()=>{this.minimize(),l.Z.close()})),(0,r.Z)(this,"minimize",(()=>{this.setState({fullscreen:!1,minimized:!0})})),(0,r.Z)(this,"open",(()=>{this.setState({minimized:!1}),this.state.fullscreen})),(0,r.Z)(this,"fullscreenEnter",(()=>{this.setState({fullscreen:!0,minimized:!1})})),(0,r.Z)(this,"fullscreenExit",(()=>{this.setState({fullscreen:!1,minimized:!1})})),this.state={isReady:!1,isLoading:!1,error:!1,minimized:!1,fullscreen:!1,post:"",attachments:[],protect:!1,canProtect:!1,validators:{post:(0,R.Jh)()},errors:{}},this.originalPost=""}componentDidMount(){D.Z.get(this.props.config).then(this.loadSuccess,this.loadError),S(!1,this.onQuote)}componentWillUnmount(){E()}componentWillReceiveProps(e){const t=this.props.context,s=e.context;t&&s&&t.reply===s.reply||D.Z.get(e.config,e.context||null).then(this.appendData,j.Z.apiError)}clean(){if(!this.state.post.trim().length)return j.Z.error(pgettext("posting form","You have to enter a message.")),!1;const e=this.validate();return!e.post||(j.Z.error(e.post[0]),!1)}send(){return S(!0,this.onQuote),D.Z.put(this.props.submit,{post:this.state.post,attachments:I(this.state.attachments),protect:this.state.protect})}handleSuccess(e){this.setState({isLoading:!0}),this.close(),S(!1,this.onQuote),j.Z.success(pgettext("edit reply","Reply has been edited.")),window.location=e.url.index}handleError(e){if(400===e.status){const t=[].concat(e.non_field_errors||[],e.category||[],e.title||[],e.post||[],e.attachments||[]);j.Z.error(t[0])}else j.Z.apiError(e);S(!1,this.onQuote)}render(){const e={post:this.props.post,minimized:this.state.minimized,minimize:this.minimize,open:this.open,fullscreen:this.state.fullscreen,fullscreenEnter:this.fullscreenEnter,fullscreenExit:this.fullscreenExit,close:this.onCancel};return this.state.error?o().createElement(is,e,(0,n.Z)(Gt,{message:this.state.error,close:this.close})):this.state.isReady?o().createElement(is,e,(0,n.Z)("form",{className:"posting-dialog-form",method:"POST",onSubmit:this.handleSubmit},void 0,(0,n.Z)(yt,{attachments:this.state.attachments,canProtect:this.state.canProtect,isProtected:this.state.protect,enableProtection:()=>this.setState({protect:!0}),disableProtection:()=>this.setState({protect:!1}),value:this.state.post,submitText:pgettext("edit reply submit","Edit reply"),disabled:this.state.isLoading,onAttachmentsChange:this.onAttachmentsChange,onChange:this.onPostChange}))):o().createElement(is,e,(0,n.Z)("div",{className:"posting-loading ui-preview"},void 0,(0,n.Z)(yt,{attachments:[],value:"",submitText:pgettext("edit reply submit","Edit reply"),disabled:!0,onAttachmentsChange:()=>{},onChange:()=>{}})))}};const is=e=>{let{children:t,close:s,minimized:a,minimize:i,open:o,fullscreen:r,fullscreenEnter:l,fullscreenExit:d,post:c}=e;return(0,n.Z)(Yt,{fullscreen:r,minimized:a},void 0,(0,n.Z)($t,{fullscreen:r,fullscreenEnter:l,fullscreenExit:d,minimized:a,minimize:i,open:o,close:s},void 0,interpolate(pgettext("edit reply","Edit reply by %(poster)s from %(date)s"),{poster:c.poster?c.poster.username:c.poster_name,date:c.posted_on.fromNow()},!0)),(0,n.Z)(Vt,{},void 0,t))};function os(e){switch(e.mode){case"START":return o().createElement(Qt,e);case"START_PRIVATE":return o().createElement(Jt,e);case"REPLY":return o().createElement(ts,e);case"EDIT":return o().createElement(as,e);default:return null}}},12891:function(e,t,s){"use strict";s.d(t,{Jh:function(){return n},jn:function(){return o}});var a=s(55210),i=s(32233);function o(){return[(0,a.Ei)(i.Z.get("SETTINGS").thread_title_length_min,((e,t)=>{const s=npgettext("thread title length validator","Thread title should be at least %(limit_value)s character long (it has %(show_value)s).","Thread title should be at least %(limit_value)s characters long (it has %(show_value)s).",e);return interpolate(s,{limit_value:e,show_value:t},!0)})),(0,a.BS)(i.Z.get("SETTINGS").thread_title_length_max,((e,t)=>{const s=npgettext("thread title length validator","Thread title cannot be longer than %(limit_value)s character (it has %(show_value)s).","Thread title cannot be longer than %(limit_value)s characters (it has %(show_value)s).",e);return interpolate(s,{limit_value:e,show_value:t},!0)}))]}function n(){return i.Z.get("SETTINGS").post_length_max?[r(),(0,a.BS)(i.Z.get("SETTINGS").post_length_max||1e6,((e,t)=>{const s=npgettext("post length validator","Posted message cannot be longer than %(limit_value)s character (it has %(show_value)s).","Posted message cannot be longer than %(limit_value)s characters (it has %(show_value)s).",e);return interpolate(s,{limit_value:e,show_value:t},!0)}))]:[r()]}function r(){return(0,a.Ei)(i.Z.get("SETTINGS").post_length_min,((e,t)=>{const s=npgettext("post length validator","Posted message should be at least %(limit_value)s character long (it has %(show_value)s).","Posted message should be at least %(limit_value)s characters long (it has %(show_value)s).",e);return interpolate(s,{limit_value:e,show_value:t},!0)}))}},60471:function(e,t,s){"use strict";var a=s(22928),i=s(4942),o=s(57588),n=s.n(o);function r(e){let{icon:t}=e;return t?(0,a.Z)("span",{className:"material-icon"},void 0,t):null}t.Z=class extends n().Component{constructor(){super(...arguments),(0,i.Z)(this,"change",(e=>()=>{this.props.onChange({target:{value:e}})}))}getChoice(){let e=null;return this.props.choices.map((t=>{t.value===this.props.value&&(e=t)})),e}getIcon(){return this.getChoice().icon}getLabel(){return this.getChoice().label}render(){return(0,a.Z)("div",{className:"btn-group btn-select-group"},void 0,(0,a.Z)("button",{type:"button",className:"btn btn-select dropdown-toggle",id:this.props.id||null,"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-describedby":this.props["aria-describedby"]||null,disabled:this.props.disabled||!1},void 0,(0,a.Z)(r,{icon:this.getIcon()}),this.getLabel()),(0,a.Z)("ul",{className:"dropdown-menu"},void 0,this.props.choices.map(((e,t)=>(0,a.Z)("li",{},t,(0,a.Z)("button",{type:"button",className:"btn-link",onClick:this.change(e.value)},void 0,(0,a.Z)(r,{icon:e.icon}),e.label))))))}}},14467:function(e,t,s){"use strict";var a,i=s(22928),o=(s(57588),s(32233)),n=s(82211),r=s(43345),l=s(47235),d=s(78657),c=s(59801),p=s(53904),u=s(93051),h=s(19755);t.Z=class extends r.Z{constructor(e){super(e),this.state={isLoading:!1,showActivation:!1,username:"",password:"",validators:{username:[],password:[]}}}clean(){return!!this.isValid()||(p.Z.error(pgettext("sign in modal","Fill out both fields.")),!1)}send(){return d.Z.post(o.Z.get("AUTH_API"),{username:this.state.username,password:this.state.password})}handleSuccess(){let e=h("#hidden-login-form");e.append(''),e.append(''),e.find('input[type="hidden"]').val(d.Z.getCsrfToken()),e.find('input[name="redirect_to"]').val(window.location.pathname),e.find('input[name="username"]').val(this.state.username),e.find('input[name="password"]').val(this.state.password),e.submit(),this.setState({isLoading:!0})}handleError(e){400===e.status?"inactive_admin"===e.code?p.Z.info(e.detail):"inactive_user"===e.code?(p.Z.info(e.detail),this.setState({showActivation:!0})):"banned"===e.code?((0,u.Z)(e.detail),c.Z.hide()):p.Z.error(e.detail):403===e.status&&e.ban?((0,u.Z)(e.ban),c.Z.hide()):p.Z.apiError(e)}getActivationButton(){return this.state.showActivation?(0,i.Z)("a",{className:"btn btn-success btn-block",href:o.Z.get("REQUEST_ACTIVATION_URL")},void 0,pgettext("sign in modal btn","Activate account")):null}render(){return(0,i.Z)("div",{className:"modal-dialog modal-sm modal-sign-in",role:"document"},void 0,(0,i.Z)("div",{className:"modal-content"},void 0,(0,i.Z)("div",{className:"modal-header"},void 0,(0,i.Z)("button",{"aria-label":pgettext("modal","Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,a||(a=(0,i.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,i.Z)("h4",{className:"modal-title"},void 0,pgettext("sign in modal title","Sign in"))),(0,i.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,i.Z)("div",{className:"modal-body"},void 0,(0,i.Z)(l.Z,{buttonLabel:pgettext("sign in modal","Sign in with %(site)s"),formLabel:pgettext("sign in modal","Or use your forum account:"),labelClassName:"text-center"}),(0,i.Z)("div",{className:"form-group"},void 0,(0,i.Z)("div",{className:"control-input"},void 0,(0,i.Z)("input",{className:"form-control input-lg",disabled:this.state.isLoading,id:"id_username",onChange:this.bindInput("username"),placeholder:pgettext("sign in modal field","Username or e-mail"),type:"text",value:this.state.username}))),(0,i.Z)("div",{className:"form-group"},void 0,(0,i.Z)("div",{className:"control-input"},void 0,(0,i.Z)("input",{className:"form-control input-lg",disabled:this.state.isLoading,id:"id_password",onChange:this.bindInput("password"),placeholder:pgettext("sign in modal field","Password"),type:"password",value:this.state.password})))),(0,i.Z)("div",{className:"modal-footer"},void 0,this.getActivationButton(),(0,i.Z)(n.Z,{className:"btn-primary btn-block",loading:this.state.isLoading},void 0,pgettext("sign in modal btn","Sign in")),(0,i.Z)("a",{className:"btn btn-default btn-block",href:o.Z.get("FORGOTTEN_PASSWORD_URL")},void 0,pgettext("sign in modal btn","Forgot password?"))))))}}},24678:function(e,t,s){"use strict";s.d(t,{Jj:function(){return n},pg:function(){return r}});var a=s(22928),i=s(57588),o=s.n(i);t.ZP=class extends o().Component{getClass(){return function(e){let t="";return e.is_banned?t="banned":e.is_hidden?t="offline":e.is_online_hidden?t="online":e.is_offline_hidden?t="offline":e.is_online?t="online":e.is_offline&&(t="offline"),"user-status user-"+t}(this.props.status)}render(){return(0,a.Z)("span",{className:this.getClass()},void 0,this.props.children)}};class n extends o().Component{getIcon(){return this.props.status.is_banned?"remove_circle_outline":this.props.status.is_hidden?"help_outline":this.props.status.is_online_hidden?"label":this.props.status.is_offline_hidden?"label_outline":this.props.status.is_online?"lens":this.props.status.is_offline?"panorama_fish_eye":void 0}render(){return(0,a.Z)("span",{className:"material-icon status-icon"},void 0,this.getIcon())}}class r extends o().Component{getHelp(){return e=this.props.user,(t=this.props.status).is_banned?t.banned_until?interpolate(pgettext("user status","%(username)s is banned until %(ban_expires)s"),{username:e.username,ban_expires:t.banned_until.format("LL, LT")},!0):interpolate(pgettext("user status","%(username)s is banned"),{username:e.username},!0):t.is_hidden?interpolate(pgettext("user status","%(username)s is hiding presence"),{username:e.username},!0):t.is_online_hidden?interpolate(pgettext("user status","%(username)s is online (hidden)"),{username:e.username},!0):t.is_offline_hidden?interpolate(pgettext("user status","%(username)s was last seen %(last_click)s (hidden)"),{username:e.username,last_click:t.last_click.fromNow()},!0):t.is_online?interpolate(pgettext("user status","%(username)s is online"),{username:e.username},!0):t.is_offline?interpolate(pgettext("user status","%(username)s was last seen %(last_click)s"),{username:e.username,last_click:t.last_click.fromNow()},!0):void 0;var e,t}getLabel(){return this.props.status.is_banned?pgettext("user status","Banned"):this.props.status.is_hidden?pgettext("user status","Hidden"):this.props.status.is_online_hidden?pgettext("user status","Online (hidden)"):this.props.status.is_offline_hidden?pgettext("user status","Offline (hidden)"):this.props.status.is_online?pgettext("user status","Online"):this.props.status.is_offline?pgettext("user status","Offline"):void 0}render(){return(0,a.Z)("span",{className:this.props.className||"status-label",title:this.getHelp()},void 0,this.getLabel())}}},7850:function(e,t,s){"use strict";s.d(t,{Z:function(){return b}});var a,i,o,n,r,l=s(22928),d=s(57588),c=s.n(d),p=class extends c().Component{getEmptyMessage(){return this.props.emptyMessage?this.props.emptyMessage:pgettext("username history empty","No name changes have been recorded for your account.")}render(){return(0,l.Z)("div",{className:"username-history ui-ready"},void 0,(0,l.Z)("ul",{className:"list-group"},void 0,(0,l.Z)("li",{className:"list-group-item empty-message"},void 0,this.getEmptyMessage())))}},u=s(19605),h=class extends c().Component{renderUserAvatar(){return this.props.change.changed_by?(0,l.Z)("a",{href:this.props.change.changed_by.url,className:"user-avatar-wrapper"},void 0,(0,l.Z)(u.ZP,{user:this.props.change.changed_by,size:"100"})):a||(a=(0,l.Z)("span",{className:"user-avatar-wrapper"},void 0,(0,l.Z)(u.ZP,{size:"100"})))}renderUsername(){return this.props.change.changed_by?(0,l.Z)("a",{href:this.props.change.changed_by.url,className:"item-title"},void 0,this.props.change.changed_by.username):(0,l.Z)("span",{className:"item-title"},void 0,this.props.change.changed_by_username)}render(){return(0,l.Z)("li",{className:"list-group-item"},this.props.change.id,(0,l.Z)("div",{className:"change-avatar"},void 0,this.renderUserAvatar()),(0,l.Z)("div",{className:"change-author"},void 0,this.renderUsername()),(0,l.Z)("div",{className:"change"},void 0,(0,l.Z)("span",{className:"old-username"},void 0,this.props.change.old_username),i||(i=(0,l.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),(0,l.Z)("span",{className:"new-username"},void 0,this.props.change.new_username)),(0,l.Z)("div",{className:"change-date"},void 0,(0,l.Z)("abbr",{title:this.props.change.changed_on.format("LLL")},void 0,this.props.change.changed_on.fromNow())))}},m=class extends c().Component{render(){return(0,l.Z)("div",{className:"username-history ui-ready"},void 0,(0,l.Z)("ul",{className:"list-group"},void 0,this.props.changes.map((e=>(0,l.Z)(h,{change:e},e.id)))))}},v=s(44039),g=class extends c().Component{shouldComponentUpdate(){return!1}getClassName(){return this.props.hiddenOnMobile?"list-group-item hidden-xs hidden-sm":"list-group-item"}render(){return(0,l.Z)("li",{className:this.getClassName()},void 0,o||(o=(0,l.Z)("div",{className:"change-avatar"},void 0,(0,l.Z)("span",{className:"user-avatar"},void 0,(0,l.Z)(u.ZP,{size:"100"})))),(0,l.Z)("div",{className:"change-author"},void 0,(0,l.Z)("span",{className:"ui-preview-text",style:{width:v.e(30,100)+"px"}},void 0," ")),(0,l.Z)("div",{className:"change"},void 0,(0,l.Z)("span",{className:"ui-preview-text",style:{width:v.e(30,70)+"px"}},void 0," "),n||(n=(0,l.Z)("span",{className:"material-icon"},void 0,"arrow_forward")),(0,l.Z)("span",{className:"ui-preview-text",style:{width:v.e(30,70)+"px"}},void 0," ")),(0,l.Z)("div",{className:"change-date"},void 0,(0,l.Z)("span",{className:"ui-preview-text",style:{width:v.e(80,140)+"px"}},void 0," ")))}},Z=class extends c().Component{shouldComponentUpdate(){return!1}render(){return(0,l.Z)("div",{className:"username-history ui-preview"},void 0,(0,l.Z)("ul",{className:"list-group"},void 0,[0,1,2].map((e=>(0,l.Z)(g,{hiddenOnMobile:e>0},e)))))}},b=class extends c().Component{render(){return this.props.isLoaded?this.props.changes.length?(0,l.Z)(m,{changes:this.props.changes}):(0,l.Z)(p,{emptyMessage:this.props.emptyMessage}):r||(r=(0,l.Z)(Z,{}))}}},40429:function(e,t,s){"use strict";s.d(t,{Z:function(){return k}});var a,i=s(22928),o=s(57588),n=s.n(o),r=s(19605),l=s(24678);function d(e){let{showStatus:t,user:s}=e;return(0,i.Z)("ul",{className:"list-unstyled"},void 0,(0,i.Z)(c,{showStatus:t,user:s}),(0,i.Z)(p,{user:s}),a||(a=(0,i.Z)("li",{className:"user-stat-divider"})),(0,i.Z)(u,{user:s}),(0,i.Z)(h,{user:s}),(0,i.Z)(m,{user:s}))}function c(e){let{showStatus:t,user:s}=e;return t?(0,i.Z)("li",{className:"user-stat-status"},void 0,(0,i.Z)(l.ZP,{status:s.status},void 0,(0,i.Z)(l.pg,{status:s.status,user:s}))):null}function p(e){let{user:t}=e;const{joined_on:s}=t;let a=interpolate(pgettext("users list item","Joined on %(joined_on)s"),{joined_on:s.format("LL, LT")},!0),o=interpolate(pgettext("users list item","Joined %(joined_on)s"),{joined_on:s.fromNow()},!0);return(0,i.Z)("li",{className:"user-stat-join-date"},void 0,(0,i.Z)("abbr",{title:a},void 0,o))}function u(e){let{user:t}=e;const s=v("user-stat-posts",t.posts),a=npgettext("users list item","%(posts)s post","%(posts)s posts",t.posts);return(0,i.Z)("li",{className:s},void 0,interpolate(a,{posts:t.posts},!0))}function h(e){let{user:t}=e;const s=v("user-stat-threads",t.threads),a=npgettext("users list item","%(threads)s thread","%(threads)s threads",t.threads);return(0,i.Z)("li",{className:s},void 0,interpolate(a,{threads:t.threads},!0))}function m(e){let{user:t}=e;const s=v("user-stat-followers",t.followers),a=npgettext("users list item","%(followers)s follower","%(followers)s followers",t.followers);return(0,i.Z)("li",{className:s},void 0,interpolate(a,{followers:t.followers},!0))}function v(e,t){return 0===t?e+" user-stat-empty":e}function g(e){let{rank:t,title:s}=e,a=s||t.title||t.name,o="user-title";return t.css_class&&(o+=" user-title-"+t.css_class),t.is_tab?(0,i.Z)("a",{className:o,href:t.url},void 0,a):(0,i.Z)("span",{className:o},void 0,a)}function Z(e){let{showStatus:t,user:s}=e;const{rank:a}=s;let o="panel user-card";return a.css_class&&(o+=" user-card-"+a.css_class),(0,i.Z)("div",{className:o},void 0,(0,i.Z)("div",{className:"panel-body"},void 0,(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)("div",{className:"col-xs-3 user-card-left"},void 0,(0,i.Z)("div",{className:"user-card-small-avatar"},void 0,(0,i.Z)("a",{href:s.url},void 0,(0,i.Z)(r.ZP,{size:"50",size2x:"80",user:s})))),(0,i.Z)("div",{className:"col-xs-9 col-sm-12 user-card-body"},void 0,(0,i.Z)("div",{className:"user-card-avatar"},void 0,(0,i.Z)("a",{href:s.url},void 0,(0,i.Z)(r.ZP,{size:"150",size2x:"200",user:s}))),(0,i.Z)("div",{className:"user-card-username"},void 0,(0,i.Z)("a",{href:s.url},void 0,s.username)),(0,i.Z)("div",{className:"user-card-title"},void 0,(0,i.Z)(g,{rank:a,title:s.title})),(0,i.Z)("div",{className:"user-card-stats"},void 0,(0,i.Z)(d,{showStatus:t,user:s}))))))}var b,f,_,N,x=s(44039),y=class extends n().Component{shouldComponentUpdate(){return!1}render(){return(0,i.Z)("div",{className:"panel user-card user-card-preview"},void 0,(0,i.Z)("div",{className:"panel-body"},void 0,(0,i.Z)("div",{className:"row"},void 0,b||(b=(0,i.Z)("div",{className:"col-xs-3 user-card-left"},void 0,(0,i.Z)("div",{className:"user-card-small-avatar"},void 0,(0,i.Z)("span",{},void 0,(0,i.Z)(r.ZP,{size:"50",size2x:"80"}))))),(0,i.Z)("div",{className:"col-xs-9 col-sm-12 user-card-body"},void 0,f||(f=(0,i.Z)("div",{className:"user-card-avatar"},void 0,(0,i.Z)("span",{},void 0,(0,i.Z)(r.ZP,{size:"150",size2x:"200"})))),(0,i.Z)("div",{className:"user-card-username"},void 0,(0,i.Z)("span",{className:"ui-preview-text",style:{width:x.e(60,150)+"px"}},void 0," ")),(0,i.Z)("div",{className:"user-card-title"},void 0,(0,i.Z)("span",{className:"ui-preview-text",style:{width:x.e(60,150)+"px"}},void 0," ")),(0,i.Z)("div",{className:"user-card-stats"},void 0,(0,i.Z)("ul",{className:"list-unstyled"},void 0,(0,i.Z)("li",{},void 0,(0,i.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,70)+"px"}},void 0," ")),(0,i.Z)("li",{},void 0,(0,i.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,70)+"px"}},void 0," ")),_||(_=(0,i.Z)("li",{className:"user-stat-divider"})),(0,i.Z)("li",{},void 0,(0,i.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,70)+"px"}},void 0," ")),(0,i.Z)("li",{},void 0,(0,i.Z)("span",{className:"ui-preview-text",style:{width:x.e(30,70)+"px"}},void 0," "))))))))}};function w(e){let{colClassName:t,cols:s}=e;const a=Array.apply(null,{length:s}).map(Number.call,Number);return(0,i.Z)("div",{className:"users-cards-list ui-preview"},void 0,(0,i.Z)("div",{className:"row"},void 0,a.map((e=>{let s=t;return 0!==e&&(s+=" hidden-xs"),3===e&&(s+=" hidden-sm"),(0,i.Z)("div",{className:s},e,N||(N=(0,i.Z)(y,{})))}))))}function k(e){let{cols:t,isReady:s,showStatus:a,users:o}=e,n="col-xs-12 col-sm-4";return 4===t&&(n+=" col-md-3"),s?(0,i.Z)("div",{className:"users-cards-list ui-ready"},void 0,(0,i.Z)("div",{className:"row"},void 0,o.map((e=>(0,i.Z)("div",{className:n},e.id,(0,i.Z)(Z,{showStatus:a,user:e})))))):(0,i.Z)(w,{colClassName:n,cols:t})}},82125:function(e,t,s){"use strict";var a=s(4942),i=s(57588),o=s.n(i);t.Z=class extends o().Component{constructor(e){super(e),(0,a.Z)(this,"toggleNav",(()=>{this.setState({dropdown:!this.state.dropdown})})),(0,a.Z)(this,"hideNav",(()=>{this.setState({dropdown:!1})})),this.state={dropdown:!1}}getCompactNavClassName(){return this.state.dropdown?"compact-nav open":"compact-nav"}}},7227:function(e,t,s){"use strict";var a=s(22928),i=s(4942),o=s(57588),n=s.n(o);t.Z=class extends n().Component{constructor(){super(...arguments),(0,i.Z)(this,"toggle",(()=>{this.props.onChange({target:{value:!this.props.value}})}))}getClassName(){return this.props.value?"btn btn-yes-no btn-yes-no-on":"btn btn-yes-no btn-yes-no-off"}getIcon(){return this.props.value?this.props.iconOn||"check_box":this.props.iconOff||"check_box_outline_blank"}getLabel(){return this.props.value?this.props.labelOn||pgettext("yesno switch choice","yes"):this.props.labelOff||pgettext("yesno switch choice","no")}render(){return(0,a.Z)("button",{type:"button",onClick:this.toggle,className:this.getClassName(),id:this.props.id||null,"aria-describedby":this.props["aria-describedby"]||null,disabled:this.props.disabled||!1},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,this.getIcon()),(0,a.Z)("span",{className:"btn-text"},void 0,this.getLabel()))}}},32233:function(e,t,s){"use strict";s.d(t,{Z:function(){return i}}),s(58294),s(95377),s(68852),s(39737),s(14316),s(43204),s(7023);var a=new class{constructor(){this._initializers=[],this._context={}}addInitializer(e){this._initializers.push({key:e.name,item:e.initializer,after:e.after,before:e.before})}init(e){this._context=e,new class{constructor(e){this.isOrdered=!1,this._items=e||[]}add(e,t,s){this._items.push({key:e,item:t,after:s&&s.after||null,before:s&&s.before||null})}get(e,t){for(var s=0;s0&&t.length!==a.length;)o-=1,e.forEach(i);return s}}(this._initializers).orderedValues().forEach((e=>{e(this)}))}has(e){return!!this._context[e]}get(e,t){return this.has(e)?this._context[e]:t||void 0}pop(e){if(this.has(e)){let t=this._context[e];return this._context[e]=null,t}}};window.misago=a;var i=a},58339:function(e,t,s){"use strict";var a=s(32233),i=s(78657);a.Z.addInitializer({name:"ajax",initializer:function(){i.Z.init(a.Z.get("CSRF_COOKIE_NAME"))}})},64109:function(e,t,s){"use strict";var a=s(32233),i=s(35486),o=s(78657),n=s(53904),r=s(90287);a.Z.addInitializer({name:"auth-sync",initializer:function(e){e.get("isAuthenticated")&&window.setInterval((function(){o.Z.get(e.get("AUTH_API")).then((function(e){r.Z.dispatch((0,i.r$)(e))}),(function(e){n.Z.apiError(e)}))}),45e3)},after:"auth"})},46226:function(e,t,s){"use strict";var a=s(32233),i=s(98274),o=s(59801),n=s(90287),r=s(62833);a.Z.addInitializer({name:"auth",initializer:function(){i.Z.init(n.Z,r.Z,o.Z)},after:"store"})},93240:function(e,t,s){"use strict";var a=s(32233),i=s(78657),o=s(93825),n=s(96142),r=s(53904);a.Z.addInitializer({name:"captcha",initializer:function(e){o.ZP.init(e,i.Z,n.Z,r.Z)}})},75147:function(e,t,s){"use strict";var a=s(22928),i=s(57588),o=s.n(i),n=s(32233),r=s(4942),l=s(78657);class d extends o().Component{constructor(e){super(e),(0,r.Z)(this,"handleDecline",(()=>{this.state.submiting||window.confirm(pgettext("accept agreement prompt","Declining will result in immediate deactivation and deletion of your account. This action is not reversible."))&&(this.setState({submiting:!0}),l.Z.post(this.props.api,{accept:!1}).then((()=>{window.location.reload(!0)})))})),(0,r.Z)(this,"handleAccept",(()=>{this.state.submiting||(this.setState({submiting:!0}),l.Z.post(this.props.api,{accept:!0}).then((()=>{window.location.reload(!0)})))})),this.state={submiting:!1}}render(){return(0,a.Z)("div",{},void 0,(0,a.Z)("button",{className:"btn btn-default",disabled:this.state.submiting,type:"buton",onClick:this.handleDecline},void 0,pgettext("accept agreement choice","Decline")),(0,a.Z)("button",{className:"btn btn-primary",disabled:this.state.submiting,type:"buton",onClick:this.handleAccept},void 0,pgettext("accept agreement choice","Accept and continue")))}}var c=s(4869);n.Z.addInitializer({name:"component:accept-agreement",initializer:function(e){document.getElementById("required-agreement-mount")&&(0,c.Z)((0,a.Z)(d,{api:e.get("REQUIRED_AGREEMENT_API")}),"required-agreement-mount",!1)},after:"store"})},4894:function(e,t,s){"use strict";var a=s(37424),i=s(32233),o=s(22928),n=s(57588),r=s.n(n),l=class extends r().Component{refresh(){window.location.reload()}getMessage(){return this.props.signedIn?interpolate(pgettext("auth message","You have signed in as %(username)s. Please refresh the page before continuing."),{username:this.props.signedIn.username},!0):this.props.signedOut?interpolate(pgettext("auth message","%(username)s, you have been signed out. Please refresh the page before continuing."),{username:this.props.user.username},!0):void 0}render(){let e="auth-message";return(this.props.signedIn||this.props.signedOut)&&(e+=" show"),(0,o.Z)("div",{className:e},void 0,(0,o.Z)("div",{className:"container"},void 0,(0,o.Z)("p",{className:"lead"},void 0,this.getMessage()),(0,o.Z)("p",{},void 0,(0,o.Z)("button",{className:"btn btn-default",type:"button",onClick:this.refresh},void 0,pgettext("auth message","Reload page")),(0,o.Z)("span",{className:"hidden-xs hidden-sm"},void 0," "+pgettext("auth message","or press F5 key.")))))}};function d(e){return{user:e.auth.user,signedIn:e.auth.signedIn,signedOut:e.auth.signedOut}}var c=s(4869);i.Z.addInitializer({name:"component:auth-message",initializer:function(){(0,c.Z)((0,a.$j)(d)(l),"auth-message-mount")},after:"store"})},29223:function(e,t,s){"use strict";var a=s(32233),i=s(93051);a.Z.addInitializer({name:"component:banmed-page",initializer:function(e){e.has("BAN_MESSAGE")&&(0,i.Z)(e.get("BAN_MESSAGE"),!1)},after:"store"})},3026:function(e,t,s){"use strict";var a=s(37424),i=s(22928),o=s(4942),n=s(30381),r=s.n(n),l=s(57588),d=s.n(l);function c(e){return(0,i.Z)("div",{className:"categories-list"},void 0,(0,i.Z)("ul",{className:"list-group"},void 0,(0,i.Z)("li",{className:"list-group-item empty-message"},void 0,(0,i.Z)("p",{className:"lead"},void 0,pgettext("categories list","No categories exist or you don't have permission to see them.")))))}function p(e){let{category:t}=e;return t.description?(0,i.Z)("div",{className:"category-description",dangerouslySetInnerHTML:{__html:t.description.html}}):null}function u(e){let{category:t}=e;return(0,i.Z)("div",{className:h(t),title:m(t)},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,function(e){return e.is_closed?e.is_read?"lock_outline":"lock":e.is_read?"chat_bubble_outline":"chat_bubble"}(t)))}function h(e){return e.is_read?"read-status item-read":"read-status item-new"}function m(e){return e.is_closed?e.is_read?gettext("category status","This category has no new posts. (closed)"):gettext("category status","This category has new posts. (closed)"):e.is_read?gettext("category status","This category has no new posts."):gettext("category status","This category has new posts.")}function v(e){let{category:t}=e;return(0,i.Z)("div",{className:"col-xs-12 col-sm-6 col-md-6 category-main"},void 0,(0,i.Z)("div",{className:"media"},void 0,(0,i.Z)("div",{className:"media-left"},void 0,(0,i.Z)(u,{category:t})),(0,i.Z)("div",{className:"media-body"},void 0,(0,i.Z)("h4",{className:"media-heading"},void 0,(0,i.Z)("a",{href:t.url.index},void 0,t.name)),(0,i.Z)(p,{category:t}))))}var g,Z,b,f=s(19605);function _(e){let{category:t}=e;return(0,i.Z)("div",{className:"col-xs-12 col-sm-6 col-md-4 category-last-thread"},void 0,(0,i.Z)(N,{category:t}),(0,i.Z)(w,{category:t}),(0,i.Z)(k,{category:t}),(0,i.Z)(C,{category:t}))}function N(e){let{category:t}=e;return t.acl.can_browse&&t.acl.can_see_all_threads&&t.last_thread_title?(0,i.Z)("div",{className:"media"},void 0,(0,i.Z)("div",{className:"media-left hidden-xs"},void 0,(0,i.Z)(x,{category:t})),(0,i.Z)("div",{className:"media-body"},void 0,(0,i.Z)("div",{className:"media-heading"},void 0,(0,i.Z)("a",{className:"item-title thread-title",href:t.url.last_thread_new,title:t.last_thread_title},void 0,t.last_thread_title)),(0,i.Z)("ul",{className:"list-inline"},void 0,(0,i.Z)("li",{className:"category-last-thread-poster"},void 0,(0,i.Z)(y,{category:t})),g||(g=(0,i.Z)("li",{className:"divider"},void 0,"—")),(0,i.Z)("li",{className:"category-last-thread-date"},void 0,(0,i.Z)("a",{href:t.url.last_post},void 0,t.last_post_on.fromNow()))))):null}function x(e){let{category:t}=e;return t.last_poster?(0,i.Z)("a",{className:"last-poster-avatar",href:t.last_poster.url,title:t.last_poster_name},void 0,(0,i.Z)(f.ZP,{className:"media-object",size:40,user:t.last_poster})):(0,i.Z)("span",{className:"last-poster-avatar",title:t.last_poster_name},void 0,Z||(Z=(0,i.Z)(f.ZP,{className:"media-object",size:40})))}function y(e){let{category:t}=e;return t.last_poster?(0,i.Z)("a",{className:"item-title",href:t.last_poster.url},void 0,t.last_poster_name):(0,i.Z)("span",{className:"item-title"},void 0,t.last_poster_name)}function w(e){let{category:t}=e;return t.acl.can_browse&&t.acl.can_see_all_threads?t.last_thread_title?null:(0,i.Z)(S,{message:pgettext("category last thread","This category is empty. No threads were posted within it so far.")}):null}function k(e){let{category:t}=e;return t.acl.can_browse?t.acl.can_see_all_threads?null:(0,i.Z)(S,{message:pgettext("category last thread","This category is private. You can see only your own threads within it.")}):null}function C(e){let{category:t}=e;return t.acl.can_browse?null:(0,i.Z)(S,{message:pgettext("category last thread","This category is protected. You can't browse its contents.")})}function S(e){let{message:t}=e;return(0,i.Z)("div",{className:"media category-thread-message"},void 0,b||(b=(0,i.Z)("div",{className:"media-left"},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,i.Z)("div",{className:"media-body"},void 0,(0,i.Z)("p",{},void 0,t)))}function E(e){let{category:t}=e;return(0,i.Z)("div",{className:"col-md-2 hidden-xs hidden-sm"},void 0,(0,i.Z)("ul",{className:"list-unstyled category-stats"},void 0,(0,i.Z)(T,{threads:t.threads}),(0,i.Z)(L,{posts:t.posts})))}function T(e){let{threads:t}=e;const s=npgettext("category stats","%(threads)s thread","%(threads)s threads",t);return(0,i.Z)("li",{className:"category-stat-threads"},void 0,interpolate(s,{threads:t},!0))}function L(e){let{posts:t}=e;const s=npgettext("category stats","%(posts)s post","%(posts)s posts",t);return(0,i.Z)("li",{className:"category-stat-posts"},void 0,interpolate(s,{posts:t},!0))}function P(e){let{category:t}=e,s="btn btn-default btn-block btn-sm btn-subcategory";return t.is_read||(s+=" btn-subcategory-new"),(0,i.Z)("div",{className:"col-xs-12 col-sm-4 col-md-3"},void 0,(0,i.Z)("a",{className:s,href:t.url.index},void 0,(0,i.Z)("span",{className:"material-icon"},void 0,function(e){return e.is_closed?e.is_read?"lock_outline":"lock":e.is_read?"chat_bubble_outline":"chat_bubble"}(t)),(0,i.Z)("span",{className:"icon-text"},void 0,t.name)))}function O(e){let{category:t,isFirst:s}=e;return s||0===t.subcategories.length?null:(0,i.Z)("div",{className:"row subcategories-list"},void 0,t.subcategories.map((e=>(0,i.Z)(P,{category:e},e.id))))}function I(e){let{category:t,isFirst:s}=e,a="list-group-item";return t.description?a+=" list-group-category-has-description":a+=" list-group-category-no-description",s&&(a+=" list-group-item-first"),t.css_class&&(a+=" list-group-category-has-flavor",a+=" list-group-item-category-"+t.css_class),(0,i.Z)("li",{className:a},void 0,(0,i.Z)("div",{className:"row"},void 0,(0,i.Z)(v,{category:t}),(0,i.Z)(E,{category:t}),(0,i.Z)(_,{category:t})),(0,i.Z)(O,{category:t,isFirst:s}))}function A(e){let{category:t}=e,s="list-group list-group-category";return t.css_class&&(s+=" list-group-category-has-flavor",s+=" list-group-category-"+t.css_class),(0,i.Z)("ul",{className:s},void 0,(0,i.Z)(I,{category:t,isFirst:!0}),t.subcategories.map((e=>(0,i.Z)(I,{category:e,isFirst:!1},e.id))))}function R(e){let{categories:t}=e;return(0,i.Z)("div",{className:"categories-list"},void 0,t.map((e=>(0,i.Z)(A,{category:e},e.id))))}var D,j=s(32233),U=s(55547);const z=function(e){return Object.assign({},e,{last_post_on:e.last_post_on?r()(e.last_post_on):null,subcategories:e.subcategories.map(z)})};var M=class extends d().Component{constructor(e){super(e),(0,o.Z)(this,"update",(e=>{this.setState({categories:e.map(z)})})),this.state={categories:j.Z.get("CATEGORIES").map(z)},this.startPolling(j.Z.get("CATEGORIES_API"))}startPolling(e){U.Z.start({poll:"categories",url:e,frequency:18e4,update:this.update})}render(){const{categories:e}=this.state;return 0===e.length?D||(D=(0,i.Z)(c,{})):(0,i.Z)(R,{categories:e})}};function B(e){return{tick:e.tick.tick}}var q=s(4869);j.Z.addInitializer({name:"component:categories",initializer:function(){document.getElementById("categories-mount")&&(0,q.Z)((0,a.$j)(B)(M),"categories-mount")},after:"store"})},73806:function(e,t,s){"use strict";var a,i=s(22928),o=s(57588),n=s.n(o),r=s(73935),l=s.n(r),d=s(37424),c=s(993),p=s(40689),u=s(80261),h=s(59801),m=s(14467);class v extends n().Component{componentDidMount(){"?modal=login"===window.document.location.search&&window.setTimeout((()=>h.Z.show(a||(a=(0,i.Z)(m.Z,{})))),300)}render(){return null}}var g=v;function Z(e){let{logo:t,logoXs:s,text:a,url:o}=e;return t?(0,i.Z)("div",{className:"navbar-branding"},void 0,(0,i.Z)("a",{href:o,className:"navbar-branding-logo"},void 0,(0,i.Z)("img",{src:t,alt:a}))):(0,i.Z)("div",{className:"navbar-branding"},void 0,!!s&&(0,i.Z)("a",{href:o,className:"navbar-branding-logo-xs"},void 0,(0,i.Z)("img",{src:s,alt:a})),!!a&&(0,i.Z)("a",{href:o,className:"navbar-branding-text"},void 0,a))}function b(e){let{items:t}=e;return(0,i.Z)("ul",{className:"navbar-extra-menu",role:"nav"},void 0,t.map(((e,t)=>(0,i.Z)("li",{className:e.className},t,(0,i.Z)("a",{href:e.url,target:e.targetBlank?"_blank":null,rel:e.rel},void 0,e.title)))))}var f,_=s(49021),N=s(4942),x=s(63026),y=s(66462),w=s(94184),k=s.n(w);function C(e){let{children:t,showAll:s,showUnread:a,unread:o}=e;return(0,i.Z)("div",{className:"notifications-dropdown-body"},void 0,(0,i.Z)(_.Aw,{},void 0,pgettext("notifications title","Notifications")),(0,i.Z)(_.KE,{},void 0,(0,i.Z)(S,{active:!o,onClick:s},void 0,pgettext("notifications dropdown","All")),(0,i.Z)(S,{active:o,onClick:a},void 0,pgettext("notifications dropdown","Unread"))),t,(0,i.Z)(_.kE,{},void 0,(0,i.Z)("a",{className:"btn btn-default btn-block",href:misago.get("NOTIFICATIONS_URL")},void 0,pgettext("notifications","See all notifications"))))}function S(e){let{active:t,children:s,onClick:a}=e;return(0,i.Z)("button",{className:k()("btn",{"btn-primary":t,"btn-default":!t}),type:"button",onClick:a},void 0,s)}class E extends n().Component{constructor(e){super(e),(0,N.Z)(this,"render",(()=>(0,i.Z)(C,{unread:this.state.unread,showAll:()=>this.setState({unread:!1}),showUnread:()=>this.setState({unread:!0})},void 0,(0,i.Z)(x.Z,{filter:this.state.unread?"unread":"all",disabled:!this.props.active},void 0,(e=>{let{data:t,loading:s,error:a}=e;return s?f||(f=(0,i.Z)(y.Pu,{})):a?(0,i.Z)(y.lb,{error:a}):(0,i.Z)(y.uE,{filter:this.state.unread?"unread":"all",items:t?t.results:[]})}))))),this.state={unread:!1,url:""}}getApiUrl(){let e=misago.get("NOTIFICATIONS_API")+"?limit=20";return e+=this.state.unread?"&filter=unread":"",e}}var T,L=E;function P(e){let{id:t,className:s,badge:a,url:o,active:n,onClick:r}=e;const l=a?pgettext("navbar","You have unread notifications!"):pgettext("navbar","Open notifications");return(0,i.Z)("a",{id:t,className:k()("btn btn-navbar-icon",s,{active:n}),href:o,title:l,onClick:r},void 0,!!a&&(0,i.Z)("span",{className:"navbar-item-badge"},void 0,a),(0,i.Z)("span",{className:"material-icon"},void 0,a?"notifications_active":"notifications_none"))}function O(e){let{id:t,className:s,badge:a,url:o}=e;return(0,i.Z)(_.Lt,{id:t,toggle:e=>{let{isOpen:t,toggle:n}=e;return(0,i.Z)(P,{className:s,active:t,badge:a,url:o,onClick:e=>{e.preventDefault(),n()}})},menuClassName:"notifications-dropdown",menuAlignRight:!0},void 0,(e=>{let{isOpen:t}=e;return(0,i.Z)(L,{active:t})}))}function I(e){let{id:t,className:s,badge:a,url:o,active:n,onClick:r}=e;const l=a?pgettext("navbar","You have unread private threads!"):pgettext("navbar","Open private threads");return(0,i.Z)("a",{id:t,className:k()("btn btn-navbar-icon",s,{active:n}),href:o,title:l,onClick:r},void 0,!!a&&(0,i.Z)("span",{className:"navbar-item-badge"},void 0,a),T||(T=(0,i.Z)("span",{className:"material-icon"},void 0,"inbox")))}var A,R,D,j=s(62989);function U(e){let{id:t,className:s,url:a,active:o,onClick:n}=e;return(0,i.Z)("a",{id:t,className:k()("btn btn-navbar-icon",s,{active:o}),href:a,title:pgettext("navbar","Open search"),onClick:n},void 0,A||(A=(0,i.Z)("span",{className:"material-icon"},void 0,"search")))}function z(e){let{id:t,className:s,url:a}=e;return(0,i.Z)(_.Lt,{id:t,toggle:e=>{let{isOpen:t,toggle:o}=e;return(0,i.Z)(U,{className:s,active:t,url:a,onClick:e=>{e.preventDefault(),o(),window.setTimeout((()=>{document.querySelector(".search-dropdown .form-control-search").focus()}),0)}})},menuClassName:"search-dropdown",menuAlignRight:!0},void 0,(()=>R||(R=(0,i.Z)(j.E,{}))))}function M(e){let{id:t,className:s,active:a,onClick:o}=e;return(0,i.Z)("button",{id:t,className:k()("btn btn-navbar-icon",s,{active:a}),title:pgettext("navbar","Open menu"),type:"button",onClick:o},void 0,D||(D=(0,i.Z)("span",{className:"material-icon"},void 0,"menu")))}var B=s(6333);function q(e){let{id:t,className:s}=e;return(0,i.Z)(_.Lt,{id:t,toggle:e=>{let{isOpen:t,toggle:a}=e;return(0,i.Z)(M,{className:s,active:t,onClick:a})},menuClassName:"site-nav-dropdown",menuAlignRight:!0},void 0,(e=>{let{isOpen:t,close:s}=e;return(0,i.Z)(B.bS,{close:s})}))}var F=s(19605);function H(e){let{id:t,className:s,user:a,active:o,onClick:n}=e;return(0,i.Z)("a",{id:t,className:k()("btn-navbar-image",s,{active:o}),href:a.url,title:pgettext("navbar","Open your options"),onClick:n},void 0,(0,i.Z)(F.ZP,{user:a,size:34}))}var Y,V,G,$,W=s(28166);function Q(e){let{id:t,className:s,user:a}=e;return(0,i.Z)(_.Lt,{id:t,toggle:e=>{let{isOpen:t,toggle:o}=e;return(0,i.Z)(H,{className:s,active:t,user:a,onClick:e=>{e.preventDefault(),o()}})},menuClassName:"user-nav-dropdown",menuAlignRight:!0},void 0,(e=>{let{isOpen:t,close:s}=e;return(0,i.Z)(W.o4,{close:s})}))}var X,K=(0,d.$j)((function(e){const t=misago.get("SETTINGS"),s=e.auth.user;return{branding:{logo:t.logo,logoXs:t.logo_small,text:t.logo_text,url:misago.get("MISAGO_PATH")},extraMenuItems:misago.get("extraMenuItems"),user:s.id?{id:s.id,username:s.username,email:s.email,avatars:s.avatars,unreadNotifications:s.unreadNotifications,unreadPrivateThreads:s.unread_private_threads,url:s.url}:null,searchUrl:misago.get("SEARCH_URL"),notificationsUrl:misago.get("NOTIFICATIONS_URL"),privateThreadsUrl:misago.get("PRIVATE_THREADS_URL"),authDelegated:t.enable_oauth2_client,showSearch:!!s.acl.can_search,showPrivateThreads:!!s&&!!s.acl.can_use_private_threads}}))((function(e){let{dispatch:t,branding:s,extraMenuItems:a,authDelegated:o,user:r,searchUrl:l,notificationsUrl:d,privateThreadsUrl:h,showSearch:m,showPrivateThreads:v}=e;return(0,i.Z)("div",{className:"container navbar-container"},void 0,n().createElement(Z,s),(0,i.Z)("div",{className:"navbar-right"},void 0,a.length>0&&(0,i.Z)(b,{items:a}),!!m&&(0,i.Z)(z,{id:"navbar-search-dropdown",url:l}),!!m&&(0,i.Z)(U,{id:"navbar-search-overlay",url:l,onClick:e=>{t(c.UL()),e.preventDefault()}}),Y||(Y=(0,i.Z)(q,{id:"navbar-site-nav-dropdown"})),(0,i.Z)(M,{id:"navbar-site-nav-overlay",onClick:()=>{t(c.AU())}}),!!v&&(0,i.Z)(I,{id:"navbar-private-threads",badge:r.unreadPrivateThreads,url:h}),!!r&&(0,i.Z)(O,{id:"navbar-notifications-dropdown",badge:r.unreadNotifications,url:d}),!!r&&(0,i.Z)(P,{id:"navbar-notifications-overlay",badge:r.unreadNotifications,url:d,onClick:e=>{t(c.hN()),e.preventDefault()}}),!!r&&(0,i.Z)(Q,{id:"navbar-user-nav-dropdown",user:r}),!!r&&(0,i.Z)(H,{id:"navbar-user-nav-overlay",user:r,onClick:e=>{t(c.T5()),e.preventDefault()}}),!r&&(V||(V=(0,i.Z)(u.Z,{className:"btn-navbar-sign-in"}))),!r&&!o&&(G||(G=(0,i.Z)(p.Z,{className:"btn-navbar-register"}))),!r&&!o&&($||($=(0,i.Z)(g,{})))))})),J=s(90287);misago.addInitializer({name:"component:navbar",initializer:function(e){const t=document.getElementById("misago-navbar");l().render((0,i.Z)(d.zt,{store:J.Z.getStore()},void 0,X||(X=(0,i.Z)(K,{}))),t)},after:"store"})},27015:function(e,t,s){"use strict";var a,i=s(22928),o=s(57588),n=s.n(o),r=s(73935),l=s.n(r),d=s(37424),c=s(4942),p=s(63026),u=s(66462),h=s(94184),m=s.n(h),v=s(49021),g=s(64836);function Z(e){let{children:t,open:s,showAll:a,showUnread:o,unread:n}=e;return(0,i.Z)(g.a,{open:s},void 0,(0,i.Z)(g.i,{},void 0,pgettext("notifications title","Notifications")),(0,i.Z)(v.KE,{},void 0,(0,i.Z)(b,{active:!n,onClick:a},void 0,pgettext("notifications dropdown","All")),(0,i.Z)(b,{active:n,onClick:o},void 0,pgettext("notifications dropdown","Unread"))),t,(0,i.Z)(v.kE,{},void 0,(0,i.Z)("a",{className:"btn btn-default btn-block",href:misago.get("NOTIFICATIONS_URL")},void 0,pgettext("notifications","See all notifications"))))}function b(e){let{active:t,children:s,onClick:a}=e;return(0,i.Z)("button",{className:m()("btn",{"btn-primary":t,"btn-default":!t}),type:"button",onClick:a},void 0,s)}class f extends n().Component{constructor(e){super(e),(0,c.Z)(this,"render",(()=>(0,i.Z)(Z,{open:this.props.open,unread:this.state.unread,showAll:()=>this.setState({unread:!1}),showUnread:()=>this.setState({unread:!0})},void 0,(0,i.Z)(p.Z,{filter:this.state.unread?"unread":"all",disabled:!this.props.open},void 0,(e=>{let{data:t,loading:s,error:o}=e;return s?a||(a=(0,i.Z)(u.Pu,{})):o?(0,i.Z)(u.lb,{error:o}):(0,i.Z)(u.uE,{filter:this.state.unread?"unread":"all",items:t?t.results:[]})}))))),this.body=document.body,this.state={unread:!1,url:""}}getApiUrl(){let e=misago.get("NOTIFICATIONS_API")+"?limit=20";return e+=this.state.unread?"&filter=unread":"",e}componentDidUpdate(e,t){e.open!==this.props.open&&(this.props.open?this.body.classList.add("notifications-fullscreen"):this.body.classList.remove("notifications-fullscreen"))}}var _,N=(0,d.$j)((function(e){return{open:e.overlay.notifications}}))(f),x=s(90287);misago.addInitializer({name:"component:notifications-overlay",initializer:function(e){if(e.get("isAuthenticated")){const e=document.getElementById("notifications-mount");l().render((0,i.Z)(d.zt,{store:x.Z.getStore()},void 0,_||(_=(0,i.Z)(N,{}))),e)}},after:"store"})},88097:function(e,t,s){"use strict";var a=s(22928),i=s(57588),o=s.n(i),n=s(73935),r=s.n(n),l=s(37424),d=s(69987),c=s(99755);function p(){return(0,a.Z)(c.Iv,{header:pgettext("notifications title","Notifications"),styleName:"notifications"})}var u=s(87462),h=s(35486),m=s(53904),v=s(60642),g=s(63026),Z=function(e){let{title:t,subtitle:s}=e;const a=[];return s&&a.push(s),t&&a.push(t),a.push(misago.get("SETTINGS").forum_name),document.title=a.join(" | "),null},b=s(59131),f=s(66462);function _(e){let{children:t}=e;return(0,a.Z)("ul",{className:"nav nav-pills"},void 0,t)}var N=s(94184),x=s.n(N);function y(e){let{active:t,link:s,icon:i,children:o}=e;return(0,a.Z)("li",{className:x()({active:t})},void 0,(0,a.Z)(d.rU,{to:s,activeClassName:""},void 0,!!i&&(0,a.Z)("span",{className:"material-icon"},void 0,i),o))}var w=s(92490);function k(e){let{filter:t}=e;const s=misago.get("NOTIFICATIONS_URL");return(0,a.Z)(w.o8,{},void 0,(0,a.Z)(w.Z2,{auto:!0},void 0,(0,a.Z)(w.Eg,{},void 0,(0,a.Z)(_,{},void 0,(0,a.Z)(y,{active:"all"===t,link:s},void 0,pgettext("notifications nav","All")),(0,a.Z)(y,{active:"unread"===t,link:s+"unread/"},void 0,pgettext("notifications nav","Unread")),(0,a.Z)(y,{active:"read"===t,link:s+"read/"},void 0,pgettext("notifications nav","Read"))))))}var C,S,E,T=s(82211);function L(e){let{baseUrl:t,data:s,disabled:i}=e;return(0,a.Z)("div",{className:"misago-pagination"},void 0,(0,a.Z)(P,{url:t,disabled:i||!s||!s.hasPrevious},void 0,pgettext("notifications pagination","Latest")),(0,a.Z)(P,{url:t+"?before="+(s?s.firstCursor:""),disabled:i||!s||!s.hasPrevious},void 0,pgettext("notifications pagination","Newer")),(0,a.Z)(P,{url:t+"?after="+(s?s.lastCursor:""),disabled:i||!s||!s.hasNext},void 0,pgettext("notifications pagination","Older")))}function P(e){let{disabled:t,children:s,url:i}=e;return t?(0,a.Z)("button",{className:"btn btn-default",type:"disabled",disabled:!0},void 0,s):(0,a.Z)(d.rU,{to:i,className:"btn btn-default",activeClassName:""},void 0,s)}function O(e){let{baseUrl:t,data:s,disabled:i,bottom:o,markAllAsRead:n}=e;return(0,a.Z)(w.o8,{},void 0,(0,a.Z)(w.Z2,{},void 0,(0,a.Z)(w.Eg,{},void 0,(0,a.Z)(L,{baseUrl:t,data:s,disabled:i}))),C||(C=(0,a.Z)(w.tw,{})),(0,a.Z)(w.Z2,{className:x()({"hidden-xs":!o})},void 0,(0,a.Z)(w.Eg,{},void 0,(0,a.Z)(T.Z,{className:"btn-default btn-block",type:"button",disabled:i||!s||!s.unreadNotifications,onClick:n},void 0,S||(S=(0,a.Z)("span",{className:"material-icon"},void 0,"done_all")),pgettext("notifications","Mark all as read")))))}function I(e){return"unread"===e?pgettext("notifications title","Unread notifications"):"read"===e?pgettext("notifications title","Read notifications"):null}var A,R=(0,l.$j)()((function(e){let{dispatch:t,location:s,route:i}=e;const{query:n}=s,{filter:r}=i.props,l=function(e){let t=misago.get("NOTIFICATIONS_URL");return"all"!==e&&(t+=e+"/"),t}(r);return(0,a.Z)(b.Z,{},void 0,(0,a.Z)(Z,{title:pgettext("notifications title","Notifications"),subtitle:I(r)}),(0,a.Z)(k,{filter:r}),(0,a.Z)(g.Z,{filter:r,query:n},void 0,(e=>{var s;let{data:i,loading:d,error:c,refetch:p}=e;return(0,a.Z)(v.D,{url:misago.get("NOTIFICATIONS_API")+"read-all/"},void 0,((e,v)=>{let{loading:g}=v;const Z={baseUrl:l,data:i,disabled:d||g||!i||0===i.results.length,markAllAsRead:async()=>{window.confirm(pgettext("notifications","Mark all notifications as read?"))&&e({onSuccess:async()=>{p(),t((0,h.yH)({unreadNotifications:null})),m.Z.success(pgettext("notifications","All notifications have been marked as read."))},onError:m.Z.apiError})}};return d||g?(0,a.Z)("div",{},void 0,o().createElement(O,Z),E||(E=(0,a.Z)(f.Pu,{})),o().createElement(O,(0,u.Z)({},Z,{bottom:!0}))):c?(0,a.Z)("div",{},void 0,o().createElement(O,Z),s||(s=(0,a.Z)(f.lb,{error:c})),o().createElement(O,(0,u.Z)({},Z,{bottom:!0}))):i?(!i.hasPrevious&&n&&window.history.replaceState({},"",l),(0,a.Z)("div",{},void 0,o().createElement(O,Z),(0,a.Z)(f.uE,{filter:r,items:i.results,hasNext:i.hasNext,hasPrevious:i.hasPrevious}),o().createElement(O,(0,u.Z)({},Z,{bottom:!0})))):null}))})))}));s(4517);var D,j=function(){const e=misago.get("NOTIFICATIONS_URL");return(0,a.Z)("div",{className:"page page-notifications"},void 0,A||(A=(0,a.Z)(p,{})),(0,a.Z)(d.F0,{history:d.mW,routes:[{path:e,component:R,props:{filter:"all"}},{path:e+"unread/",component:R,props:{filter:"unread"}},{path:e+"read/",component:R,props:{filter:"read"}}]}))},U=s(90287);misago.addInitializer({name:"component:notifications",initializer:function(e){const t=misago.get("NOTIFICATIONS_URL");if(document.location.pathname.startsWith(t)&&!document.location.pathname.startsWith(t+"disable-email/")&&e.get("isAuthenticated")){const e=document.getElementById("page-mount");r().render((0,a.Z)(l.zt,{store:U.Z.getStore()},void 0,D||(D=(0,a.Z)(j,{}))),e)}},after:"store"})},94795:function(e,t,s){"use strict";var a=s(22928),i=s(57588),o=s.n(i),n=s(37424),r=s(69987),l=s(94417);function d(e){return(0,a.Z)("div",{className:"list-group nav-side"},void 0,e.options.map((t=>(0,a.Z)(r.rU,{to:e.baseUrl+t.component+"/",className:"list-group-item",activeClassName:"active"},t.component,(0,a.Z)("span",{className:"material-icon"},void 0,t.icon),t.name))))}function c(e){return(0,a.Z)("ul",{className:e.className||"dropdown-menu",role:"menu"},void 0,e.options.map((t=>(0,a.Z)(l.Z,{path:e.baseUrl+t.component+"/"},t.component,(0,a.Z)(r.rU,{to:e.baseUrl+t.component+"/",onClick:e.hideNav},void 0,(0,a.Z)("span",{className:"material-icon hidden-sm"},void 0,t.icon),t.name)))))}var p,u=s(4942),h=s(82211),m=s(78657),v=s(53328),g=s(53904),Z=s(32233),b=class extends o().Component{constructor(e){super(e),(0,u.Z)(this,"onPasswordChange",(e=>{this.setState({password:e.target.value})})),(0,u.Z)(this,"handleSubmit",(e=>{e.preventDefault();const{isLoading:t,password:s}=this.state,{user:a}=this.props;return 0==s.length?(g.Z.error(pgettext("delete your account form","Enter your password to confirm account deletion.")),!1):!t&&(this.setState({isLoading:!0}),void m.Z.post(a.api.delete,{password:s}).then((e=>{window.location.href=Z.Z.get("MISAGO_PATH")}),(e=>{this.setState({isLoading:!1}),e.password?g.Z.error(e.password[0]):g.Z.apiError(e)})))})),this.state={isLoading:!1,password:""}}componentDidMount(){v.Z.set({title:pgettext("delete your account title","Delete account"),parent:pgettext("forum options","Change your options")})}render(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("div",{className:"panel panel-danger panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,pgettext("delete your account title","Delete account"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("p",{className:"lead"},void 0,pgettext("delete your account form","You are going to delete your account. This action is nonreversible, and will result in following data being deleted:")),(0,a.Z)("p",{},void 0,"-"," ",pgettext("delete your account form","Stored IP addresses associated with content that you have posted will be deleted.")),(0,a.Z)("p",{},void 0,"-"," ",pgettext("delete your account form","Your username will become available for other user to rename to or for new user to register their account with.")),(0,a.Z)("p",{},void 0,"-"," ",pgettext("delete your account form","Your e-mail will become available for use in new account registration.")),p||(p=(0,a.Z)("hr",{})),(0,a.Z)("p",{},void 0,pgettext("delete your account form","All your posted content will NOT be deleted, but username associated with it will be changed to one shared by all deleted accounts."))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)("div",{className:"input-group"},void 0,(0,a.Z)("input",{className:"form-control",disabled:this.state.isLoading,name:"password-confirmation",type:"password",placeholder:pgettext("delete your account form field","Enter your password to confirm account deletion."),value:this.state.password,onChange:this.onPasswordChange}),(0,a.Z)("span",{className:"input-group-btn"},void 0,(0,a.Z)(h.Z,{className:"btn-danger",loading:this.state.isLoading},void 0,pgettext("delete your account form btn","Delete my account")))))))}},f=s(21688),_=class extends o().Component{constructor(){super(...arguments),(0,u.Z)(this,"onSuccess",(()=>{g.Z.info(pgettext("edit details","Your details have been updated."))}))}componentDidMount(){v.Z.set({title:pgettext("edit details","Edit details"),parent:pgettext("forum options","Change your options")})}render(){return(0,a.Z)(f.Z,{api:this.props.user.api.edit_details,onSuccess:this.onSuccess})}},N=s(30381),x=s.n(N);class y extends o().Component{constructor(e){super(e),(0,u.Z)(this,"handleLoadDownloads",(()=>{m.Z.get(this.props.user.api.data_downloads).then((e=>{this.setState({isLoading:!1,downloads:e})}),(e=>{g.Z.apiError(e)}))})),(0,u.Z)(this,"handleRequestDataDownload",(()=>{this.setState({isSubmiting:!0}),m.Z.post(this.props.user.api.request_data_download).then((()=>{this.handleLoadDownloads(),g.Z.success(pgettext("download your data","Your request for data download has been registered.")),this.setState({isSubmiting:!1})}),(e=>{g.Z.apiError(e),this.setState({isSubmiting:!1})}))})),this.state={isLoading:!1,isSubmiting:!1,downloads:[]}}componentDidMount(){v.Z.set({title:pgettext("download your data title","Download your data"),parent:pgettext("forum options","Change your options")}),this.handleLoadDownloads()}render(){return(0,a.Z)("div",{},void 0,(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,pgettext("download your data title","Download your data"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("p",{},void 0,pgettext("download your data",'To download your data from the site, click the "Request data download" button. Depending on amount of data to be archived and number of users wanting to download their data at same time it may take up to few days for your download to be prepared. An e-mail with notification will be sent to you when your data is ready to be downloaded.')),(0,a.Z)("p",{},void 0,pgettext("download your data","The download will only be available for limited amount of time, after which it will be deleted from the site and marked as expired."))),(0,a.Z)("table",{className:"table"},void 0,(0,a.Z)("thead",{},void 0,(0,a.Z)("tr",{},void 0,(0,a.Z)("th",{},void 0,pgettext("download your data table","Requested on")),(0,a.Z)("th",{className:"col-md-4"},void 0,pgettext("download your data table","Download")))),(0,a.Z)("tbody",{},void 0,this.state.downloads.map((e=>(0,a.Z)("tr",{},e.id,(0,a.Z)("td",{style:w},void 0,x()(e.requested_on).fromNow()),(0,a.Z)("td",{},void 0,(0,a.Z)(k,{exportFile:e.file,status:e.status}))))),0==this.state.downloads.length?(0,a.Z)("tr",{},void 0,(0,a.Z)("td",{colSpan:"2"},void 0,pgettext("download your data table","You have no data downloads."))):null)),(0,a.Z)("div",{className:"panel-footer text-right"},void 0,(0,a.Z)(h.Z,{className:"btn-primary",loading:this.state.isSubmiting,type:"button",onClick:this.handleRequestDataDownload},void 0,pgettext("download your data btn","Request data download")))))}}const w={verticalAlign:"middle"},k=e=>{let{exportFile:t,status:s}=e;return 0===s||1===s?(0,a.Z)(h.Z,{className:"btn-info btn-sm btn-block",disabled:!0,type:"button"},void 0,pgettext("download your data table btn","Download is being prepared")):t?(0,a.Z)("a",{className:"btn btn-success btn-sm btn-block",href:t},void 0,pgettext("download your data table btn","Download your data")):(0,a.Z)(h.Z,{className:"btn-default btn-sm btn-block",disabled:!0,type:"button"},void 0,pgettext("download your data table btn","Download is expired"))};var C=s(43345),S=s(96359),E=s(60471),T=s(7227),L=s(35486),P=s(90287);const O=[{value:0,icon:"notifications_none",label:pgettext("watch thread choice","No")},{value:1,icon:"notifications",label:pgettext("watch thread choice","Yes, with on site notifications")},{value:2,icon:"mail",label:pgettext("watch thread choice","Yes, with on site and e-mail notifications")}],I=[{value:0,icon:"notifications_none",label:pgettext("notification preference","Don't notify")},{value:1,icon:"notifications",label:pgettext("notification preference","Notify on site")},{value:2,icon:"mail",label:pgettext("notification preference","Notify on site and with e-mail")}];class A extends C.Z{constructor(e){super(e),this.state={isLoading:!1,is_hiding_presence:e.user.is_hiding_presence,limits_private_thread_invites_to:e.user.limits_private_thread_invites_to,watch_started_threads:e.user.watch_started_threads,watch_replied_threads:e.user.watch_replied_threads,watch_new_private_threads_by_followed:e.user.watch_new_private_threads_by_followed,watch_new_private_threads_by_other_users:e.user.watch_new_private_threads_by_other_users,notify_new_private_threads_by_followed:e.user.notify_new_private_threads_by_followed,notify_new_private_threads_by_other_users:e.user.notify_new_private_threads_by_other_users,errors:{}},this.privateThreadInvitesChoices=[{value:0,icon:"help_outline",label:pgettext("private threads preference","Anybody can invite me to their private threads")},{value:1,icon:"done_all",label:pgettext("private threads preference","Only those I follow can invite me to their private threads")},{value:2,icon:"highlight_off",label:pgettext("private threads preference","Nobody can invite me to their private threads")}]}send(){return m.Z.post(this.props.user.api.options,{is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,watch_started_threads:this.state.watch_started_threads,watch_replied_threads:this.state.watch_replied_threads,watch_new_private_threads_by_followed:this.state.watch_new_private_threads_by_followed,watch_new_private_threads_by_other_users:this.state.watch_new_private_threads_by_other_users,notify_new_private_threads_by_followed:this.state.notify_new_private_threads_by_followed,notify_new_private_threads_by_other_users:this.state.notify_new_private_threads_by_other_users})}handleSuccess(){P.Z.dispatch((0,L.r$)({is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,watch_started_threads:this.state.watch_started_threads,watch_replied_threads:this.state.watch_replied_threads,watch_new_private_threads_by_followed:this.state.watch_new_private_threads_by_followed,watch_new_private_threads_by_other_users:this.state.watch_new_private_threads_by_other_users,notify_new_private_threads_by_followed:this.state.notify_new_private_threads_by_followed,notify_new_private_threads_by_other_users:this.state.notify_new_private_threads_by_other_users})),g.Z.success(pgettext("forum options form","Your forum options have been updated."))}handleError(e){400===e.status?g.Z.error(pgettext("forum options form","Please reload the page and try again.")):g.Z.apiError(e)}componentDidMount(){v.Z.set({title:pgettext("forum options title","Forum options"),parent:pgettext("forum options","Change your options")})}render(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,pgettext("forum options form title","Change forum options"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)("fieldset",{},void 0,(0,a.Z)("legend",{},void 0,pgettext("forum options form","Privacy settings")),(0,a.Z)(S.Z,{label:pgettext("forum options form","Hide my presence"),helpText:pgettext("forum options form","If you hide your presence, only members with permission to see hidden users will see when you are online."),for:"id_is_hiding_presence"},void 0,(0,a.Z)(T.Z,{id:"id_is_hiding_presence",disabled:this.state.isLoading,iconOn:"visibility_off",iconOff:"visibility",labelOn:pgettext("forum options form","Hide my presence from other users"),labelOff:pgettext("forum options form","Show my presence to other users"),onChange:this.bindInput("is_hiding_presence"),value:this.state.is_hiding_presence})),(0,a.Z)(S.Z,{label:pgettext("forum options form","Limit private thread invitations from other users"),for:"id_limits_private_thread_invites_to"},void 0,(0,a.Z)(E.Z,{id:"id_limits_private_thread_invites_to",disabled:this.state.isLoading,onChange:this.bindInput("limits_private_thread_invites_to"),value:this.state.limits_private_thread_invites_to,choices:this.privateThreadInvitesChoices}))),(0,a.Z)("fieldset",{},void 0,(0,a.Z)("legend",{},void 0,pgettext("notifications options","Notifications preferences")),(0,a.Z)(S.Z,{label:pgettext("notifications options","Automatically watch threads I start"),for:"id_watch_started_threads"},void 0,(0,a.Z)(E.Z,{id:"id_watch_started_threads",disabled:this.state.isLoading,onChange:this.bindInput("watch_started_threads"),value:this.state.watch_started_threads,choices:O})),(0,a.Z)(S.Z,{label:pgettext("notifications options","Automatically watch threads I reply to"),for:"id_watch_replied_threads"},void 0,(0,a.Z)(E.Z,{id:"id_watch_replied_threads",disabled:this.state.isLoading,onChange:this.bindInput("watch_replied_threads"),value:this.state.watch_replied_threads,choices:O})),(0,a.Z)(S.Z,{label:pgettext("notifications options","Automatically watch new private threads I'm invited to by the members I am following"),for:"id_watch_new_private_threads_by_followed"},void 0,(0,a.Z)(E.Z,{id:"id_watch_new_private_threads_by_followed",disabled:this.state.isLoading,onChange:this.bindInput("watch_new_private_threads_by_followed"),value:this.state.watch_new_private_threads_by_followed,choices:O})),(0,a.Z)(S.Z,{label:pgettext("notifications options","Automatically watch new private threads I'm invited to by other members"),for:"id_watch_new_private_threads_by_other_users"},void 0,(0,a.Z)(E.Z,{id:"id_watch_new_private_threads_by_other_users",disabled:this.state.isLoading,onChange:this.bindInput("watch_new_private_threads_by_other_users"),value:this.state.watch_new_private_threads_by_other_users,choices:O})),(0,a.Z)(S.Z,{label:pgettext("notifications options","Notify me about new private thread invitations from the members I am following"),for:"id_notify_new_private_threads_by_followed"},void 0,(0,a.Z)(E.Z,{id:"id_notify_new_private_threads_by_followed",disabled:this.state.isLoading,onChange:this.bindInput("notify_new_private_threads_by_followed"),value:this.state.notify_new_private_threads_by_followed,choices:I})),(0,a.Z)(S.Z,{label:pgettext("notifications options","Notify me about new private thread invitations from other members"),for:"id_notify_new_private_threads_by_other_users"},void 0,(0,a.Z)(E.Z,{id:"id_notify_new_private_threads_by_other_users",disabled:this.state.isLoading,onChange:this.bindInput("notify_new_private_threads_by_other_users"),value:this.state.notify_new_private_threads_by_other_users,choices:I})))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)(h.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,pgettext("forum options form btn","Save changes")))))}}var R,D=s(95187);function j(){return(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,pgettext("change username title","Change username"))),R||(R=(0,a.Z)(D.Z,{})))}var U,z,M,B,q,F,H,Y=s(33556),V=class extends o().Component{getHelpText(){return this.props.options.next_on?interpolate(pgettext("change username","You will be able to change your username %(next_change)s."),{next_change:this.props.options.next_on.fromNow()},!0):pgettext("change username","You have used up available name changes.")}render(){return(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,pgettext("change username title","Change username"))),(0,a.Z)(Y.Z,{helpText:this.getHelpText(),message:pgettext("change username","You can't change your username at the moment.")}))}},G=s(55210),$=class extends C.Z{constructor(e){super(e),this.state={username:"",validators:{username:[G.lG(),G.HR(e.options.length_min),G.gS(e.options.length_max)]},isLoading:!1}}getHelpText(){let e=[];if(this.props.options.changes_left>0){let t=npgettext("change username form","You can change your username %(changes_left)s more time.","You can change your username %(changes_left)s more times.",this.props.options.changes_left);e.push(interpolate(t,{changes_left:this.props.options.changes_left},!0))}if(this.props.user.acl.name_changes_expire>0){let t=npgettext("change username form","Used changes become available again after %(name_changes_expire)s day.","Used changes become available again after %(name_changes_expire)s days.",this.props.user.acl.name_changes_expire);e.push(interpolate(t,{name_changes_expire:this.props.user.acl.name_changes_expire},!0))}return e.length?e.join(" "):null}clean(){let e=this.validate();return e.username?(g.Z.error(e.username[0]),!1):this.state.username.trim()!==this.props.user.username||(g.Z.info(pgettext("change username form","Your new username is same as current one.")),!1)}send(){return m.Z.post(this.props.user.api.username,{username:this.state.username})}handleSuccess(e){this.setState({username:""}),this.props.complete(e.username,e.slug,e.options)}handleError(e){g.Z.apiError(e)}render(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,pgettext("change username title","Change username"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)(S.Z,{label:pgettext("change username form field","New username"),for:"id_username",helpText:this.getHelpText()},void 0,(0,a.Z)("input",{type:"text",id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username}))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)(h.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,pgettext("change username form btn","Change username")))))}},W=s(7850),Q=s(48927),X=s(6935),K=class extends o().Component{constructor(e){super(e),(0,u.Z)(this,"onComplete",((e,t,s)=>{this.setState({options:s}),P.Z.dispatch((0,Q.KP)({username:e,slug:t},this.props.user,this.props.user)),P.Z.dispatch((0,X._S)(this.props.user,e,t)),g.Z.success(pgettext("change username","Your username has been changed successfully."))})),this.state={isLoaded:!1,options:null}}componentDidMount(){v.Z.set({title:pgettext("change username title","Change username"),parent:pgettext("forum options","Change your options")}),Promise.all([m.Z.get(this.props.user.api.username),m.Z.get(Z.Z.get("USERNAME_CHANGES_API"),{user:this.props.user.id})]).then((e=>{P.Z.dispatch((0,Q.ZB)(e[1].results)),this.setState({isLoaded:!0,options:{changes_left:e[0].changes_left,length_min:e[0].length_min,length_max:e[0].length_max,next_on:e[0].next_on?x()(e[0].next_on):null}})}))}getChangeForm(){return this.state.isLoaded?0===this.state.options.changes_left?(0,a.Z)(V,{options:this.state.options}):(0,a.Z)($,{complete:this.onComplete,options:this.state.options,user:this.props.user}):U||(U=(0,a.Z)(j,{}))}render(){return(0,a.Z)("div",{},void 0,this.getChangeForm(),(0,a.Z)(W.Z,{changes:this.props["username-history"],isLoaded:this.state.isLoaded}))}},J=class extends C.Z{constructor(e){super(e),this.state={new_email:"",password:"",validators:{new_email:[G.Do()],password:[]},isLoading:!1}}clean(){let e=this.validate();return-1!==[this.state.new_email.trim().length,this.state.password.trim().length].indexOf(0)?(g.Z.error(pgettext("change email form","Fill out all fields.")),!1):!e.new_email||(g.Z.error(e.new_email[0]),!1)}send(){return m.Z.post(this.props.user.api.change_email,{new_email:this.state.new_email,password:this.state.password})}handleSuccess(e){this.setState({new_email:"",password:""}),g.Z.success(e.detail)}handleError(e){400===e.status?e.new_email?g.Z.error(e.new_email):g.Z.error(e.password):g.Z.apiError(e)}render(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("input",{type:"type",style:{display:"none"}}),(0,a.Z)("input",{type:"password",style:{display:"none"}}),(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,pgettext("change email title","Change e-mail address"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)(S.Z,{label:pgettext("change email form field","New e-mail"),for:"id_new_email"},void 0,(0,a.Z)("input",{type:"text",id:"id_new_email",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_email"),value:this.state.new_email})),z||(z=(0,a.Z)("hr",{})),(0,a.Z)(S.Z,{label:pgettext("change email form field","Your current password"),for:"id_confirm_email"},void 0,(0,a.Z)("input",{type:"password",id:"id_confirm_email",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)(h.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,pgettext("change email form btn","Change e-mail")))))}},ee=class extends C.Z{constructor(e){super(e),this.state={new_password:"",repeat_password:"",password:"",validators:{new_password:[],repeat_password:[],password:[]},isLoading:!1}}clean(){let e=this.validate();return-1!==[this.state.new_password.trim().length,this.state.repeat_password.trim().length,this.state.password.trim().length].indexOf(0)?(g.Z.error(gettext("Fill out all fields.")),!1):e.new_password?(g.Z.error(e.new_password[0]),!1):this.state.new_password===this.state.repeat_password||(g.Z.error(pgettext("change password form","New passwords are different.")),!1)}send(){return m.Z.post(this.props.user.api.change_password,{new_password:this.state.new_password,password:this.state.password})}handleSuccess(e){this.setState({new_password:"",repeat_password:"",password:""}),g.Z.success(e.detail)}handleError(e){400===e.status?e.new_password?g.Z.error(e.new_password):g.Z.error(e.password):g.Z.apiError(e)}render(){return(0,a.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,a.Z)("input",{type:"type",style:{display:"none"}}),(0,a.Z)("input",{type:"password",style:{display:"none"}}),(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,pgettext("change password title","Change password"))),(0,a.Z)("div",{className:"panel-body"},void 0,(0,a.Z)(S.Z,{label:pgettext("change password form field","New password"),for:"id_new_password"},void 0,(0,a.Z)("input",{type:"password",id:"id_new_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_password"),value:this.state.new_password})),(0,a.Z)(S.Z,{label:pgettext("change password form field","Repeat password"),for:"id_repeat_password"},void 0,(0,a.Z)("input",{type:"password",id:"id_repeat_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("repeat_password"),value:this.state.repeat_password})),M||(M=(0,a.Z)("hr",{})),(0,a.Z)(S.Z,{label:pgettext("change password form field","Your current password"),for:"id_confirm_password"},void 0,(0,a.Z)("input",{type:"password",id:"id_confirm_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),(0,a.Z)("div",{className:"panel-footer"},void 0,(0,a.Z)(h.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,pgettext("change password form btn","Change password")))))}},te=()=>(0,a.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,a.Z)("div",{className:"panel-heading"},void 0,(0,a.Z)("h3",{className:"panel-title"},void 0,pgettext("change sign in credentials title","Change email or password"))),(0,a.Z)("div",{className:"panel-body panel-message-body"},void 0,B||(B=(0,a.Z)("div",{className:"message-icon"},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,a.Z)("div",{className:"message-body"},void 0,(0,a.Z)("p",{className:"lead"},void 0,pgettext("change sign in credentials","You need to set a password for your account to be able to change your username or email.")),(0,a.Z)("p",{className:"help-block"},void 0,(0,a.Z)("a",{className:"btn btn-primary",href:Z.Z.get("FORGOTTEN_PASSWORD_URL")},void 0,pgettext("change sign in credentials link","Set password")))))),se=class extends o().Component{componentDidMount(){v.Z.set({title:pgettext("change sign in credentials title","Change email or password"),parent:pgettext("forum options","Change your options")})}render(){return this.props.user.has_usable_password?(0,a.Z)("div",{},void 0,(0,a.Z)(J,{user:this.props.user}),(0,a.Z)(ee,{user:this.props.user}),(0,a.Z)("p",{className:"message-line"},void 0,F||(F=(0,a.Z)("span",{className:"material-icon"},void 0,"warning")),(0,a.Z)("a",{href:Z.Z.get("FORGOTTEN_PASSWORD_URL")},void 0,pgettext("change sign in credentials link","Change forgotten password")))):q||(q=(0,a.Z)(te,{}))}},ae=s(82125),ie=s(98936),oe=s(59131),ne=s(99755),re=class extends ae.Z{render(){const e=Z.Z.get("USER_OPTIONS").filter((e=>{const t=Z.Z.get("USERCP_URL")+e.component+"/";return this.props.location.pathname.substr(0,t.length)===t}))[0];return(0,a.Z)("div",{className:"page page-options"},void 0,(0,a.Z)(ne.sP,{},void 0,(0,a.Z)(ne.mr,{styleName:"options"},void 0,(0,a.Z)(ne.gC,{styleName:"options"},void 0,(0,a.Z)(ie.gq,{},void 0,(0,a.Z)(ie.kw,{auto:!0},void 0,(0,a.Z)(ie.Z6,{auto:!0},void 0,(0,a.Z)("h1",{},void 0,pgettext("forum options","Change your options"))),(0,a.Z)(ie.Z6,{className:"hidden-xs hidden-md hidden-lg",shrink:!0},void 0,(0,a.Z)("div",{className:"dropdown"},void 0,(0,a.Z)("button",{type:"button",className:"btn btn-default btn-outline btn-icon dropdown-toggle",title:pgettext("forum options nav btn","Menu"),"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,H||(H=(0,a.Z)("span",{className:"material-icon"},void 0,"menu"))),(0,a.Z)(c,{className:"dropdown-menu dropdown-menu-right",baseUrl:Z.Z.get("USERCP_URL"),options:Z.Z.get("USER_OPTIONS")})))),(0,a.Z)(ie.kw,{className:"hidden-sm hidden-md hidden-lg"},void 0,(0,a.Z)(ie.Z6,{},void 0,(0,a.Z)("div",{className:"dropdown"},void 0,(0,a.Z)("button",{type:"button",className:"btn btn-default btn-outline btn-block dropdown-toggle","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,(0,a.Z)("span",{className:"material-icon"},void 0,e.icon),e.name),(0,a.Z)(c,{className:"dropdown-menu",baseUrl:Z.Z.get("USERCP_URL"),options:Z.Z.get("USER_OPTIONS")})))))))),(0,a.Z)(oe.Z,{},void 0,(0,a.Z)("div",{className:"row"},void 0,(0,a.Z)("div",{className:"col-md-3 hidden-xs hidden-sm"},void 0,(0,a.Z)(d,{baseUrl:Z.Z.get("USERCP_URL"),options:Z.Z.get("USER_OPTIONS")})),(0,a.Z)("div",{className:"col-md-9"},void 0,this.props.children))))}};function le(e){return{tick:e.tick.tick,user:e.auth.user,"username-history":e["username-history"]}}function de(){const e=[{path:Z.Z.get("USERCP_URL")+"forum-options/",component:(0,n.$j)(le)(A)},{path:Z.Z.get("USERCP_URL")+"edit-details/",component:(0,n.$j)(le)(_)}],t=Z.Z.get("SETTINGS").DELEGATE_AUTH;return t||(e.push({path:Z.Z.get("USERCP_URL")+"change-username/",component:(0,n.$j)(le)(K)}),e.push({path:Z.Z.get("USERCP_URL")+"sign-in-credentials/",component:(0,n.$j)(le)(se)})),Z.Z.get("ENABLE_DOWNLOAD_OWN_DATA")&&e.push({path:Z.Z.get("USERCP_URL")+"download-data/",component:(0,n.$j)(le)(y)}),!t&&Z.Z.get("ENABLE_DELETE_OWN_ACCOUNT")&&e.push({path:Z.Z.get("USERCP_URL")+"delete-account/",component:(0,n.$j)(le)(b)}),e}var ce=s(39633);Z.Z.addInitializer({name:"component:options",initializer:function(e){e.has("USER_OPTIONS")&&(0,ce.Z)({root:Z.Z.get("USERCP_URL"),component:re,paths:de()})},after:"store"})},95563:function(e,t,s){"use strict";var a,i=s(37424),o=s(22928),n=s(4942),r=s(57588),l=s.n(r),d=s(30381),c=s.n(d),p=s(95187),u=s(33556),h=s(32233),m=s(55547),v=s(53328),g=class extends l().Component{constructor(e){super(e),(0,n.Z)(this,"update",(e=>{e.expires_on&&(e.expires_on=c()(e.expires_on)),this.setState({isLoaded:!0,error:null,ban:e})})),(0,n.Z)(this,"error",(e=>{this.setState({isLoaded:!0,error:e.detail,ban:null})})),h.Z.has("PROFILE_BAN")?this.initWithPreloadedData(h.Z.pop("PROFILE_BAN")):this.initWithoutPreloadedData(),this.startPolling(e.profile.api.ban)}initWithPreloadedData(e){e.expires_on&&(e.expires_on=c()(e.expires_on)),this.state={isLoaded:!0,ban:e}}initWithoutPreloadedData(){this.state={isLoaded:!1}}startPolling(e){m.Z.start({poll:"ban-details",url:e,frequency:9e4,update:this.update,error:this.error})}componentDidMount(){v.Z.set({title:pgettext("profile ban details title","Ban details"),parent:this.props.profile.username})}componentWillUnmount(){m.Z.stop("ban-details")}getUserMessage(){return this.state.ban.user_message?(0,o.Z)("div",{className:"panel-body ban-message ban-user-message"},void 0,(0,o.Z)("h4",{},void 0,pgettext("profile ban details","User-shown ban message")),(0,o.Z)("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.state.ban.user_message.html}})):null}getStaffMessage(){return this.state.ban.staff_message?(0,o.Z)("div",{className:"panel-body ban-message ban-staff-message"},void 0,(0,o.Z)("h4",{},void 0,pgettext("profile ban details","Team-shown ban message")),(0,o.Z)("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.state.ban.staff_message.html}})):null}getExpirationMessage(){if(this.state.ban.expires_on){if(this.state.ban.expires_on.isAfter(c()())){let e=interpolate(pgettext("profile ban details","This ban expires on %(expires_on)s."),{expires_on:this.state.ban.expires_on.format("LL, LT")},!0),t=interpolate(pgettext("profile ban details","This ban expires %(expires_on)s."),{expires_on:this.state.ban.expires_on.fromNow()},!0);return(0,o.Z)("abbr",{title:e},void 0,t)}return pgettext("profile ban details","This ban has expired.")}return interpolate(pgettext("profile ban details","%(username)s's ban is permanent."),{username:this.props.profile.username},!0)}getPanelBody(){return this.state.ban?Object.keys(this.state.ban).length?(0,o.Z)("div",{},void 0,this.getUserMessage(),this.getStaffMessage(),(0,o.Z)("div",{className:"panel-body ban-expires"},void 0,(0,o.Z)("h4",{},void 0,pgettext("profile ban details","Ban expiration")),(0,o.Z)("p",{className:"lead"},void 0,this.getExpirationMessage()))):(0,o.Z)("div",{},void 0,(0,o.Z)(u.Z,{message:pgettext("profile ban details","No ban is active at the moment.")})):this.state.error?(0,o.Z)("div",{},void 0,(0,o.Z)(u.Z,{icon:"error_outline",message:this.state.error})):a||(a=(0,o.Z)("div",{},void 0,(0,o.Z)(p.Z,{})))}render(){return(0,o.Z)("div",{className:"profile-ban-details"},void 0,(0,o.Z)("div",{className:"panel panel-default"},void 0,(0,o.Z)("div",{className:"panel-heading"},void 0,(0,o.Z)("h3",{className:"panel-title"},void 0,pgettext("profile ban details title","Ban details"))),this.getPanelBody()))}},Z=s(21688);function b(e){let{api:t,display:s,onCancel:a,onSuccess:i}=e;return s?(0,o.Z)(Z.Z,{api:t,onCancel:a,onSuccess:i}):null}function f(e){let{isAuthenticated:t,profile:s}=e,a=null;return a=t?pgettext("profile details empty","You are not sharing any details with others."):interpolate(pgettext("profile details empty","%(username)s is not sharing any details with others."),{username:s.username},!0),(0,o.Z)("div",{className:"panel panel-default"},void 0,(0,o.Z)("div",{className:"panel-body text-center lead"},void 0,a))}function _(e){let{html:t,text:s,url:a}=e;return t?(0,o.Z)("div",{className:"form-control-static col-md-9",dangerouslySetInnerHTML:{__html:t}}):(0,o.Z)("div",{className:"form-control-static col-md-9"},void 0,(0,o.Z)(N,{text:s,url:a}))}function N(e){let{text:t,url:s}=e;return s?(0,o.Z)("p",{},void 0,(0,o.Z)("a",{href:s,target:"_blank",rel:"nofollow"},void 0,t||s)):t?(0,o.Z)("p",{},void 0,t):null}function x(e){return(0,o.Z)("div",{className:"form-group"},void 0,(0,o.Z)("strong",{className:"control-label col-md-3"},void 0,e.name,":"),l().createElement(_,e))}function y(e){let{fields:t,name:s}=e;return(0,o.Z)("div",{className:"panel panel-default panel-profile-details-group"},void 0,(0,o.Z)("div",{className:"panel-heading"},void 0,(0,o.Z)("h3",{className:"panel-title"},void 0,s)),(0,o.Z)("div",{className:"panel-body"},void 0,(0,o.Z)("div",{className:"form-horizontal"},void 0,t.map((e=>{let{fieldname:t,html:s,name:a,text:i,url:n}=e;return(0,o.Z)(x,{name:a,html:s,text:i,url:n},t)})))))}var w,k=s(37848);function C(e){let{display:t,groups:s,isAuthenticated:a,loading:i,profile:n}=e;return t?i?w||(w=(0,o.Z)(k.Z,{})):s.length?(0,o.Z)("div",{},void 0,s.map(((e,t)=>(0,o.Z)(y,{fields:e.fields,name:e.name},t)))):(0,o.Z)(f,{isAuthenticated:a,profile:n}):null}var S,E=s(92490),T=e=>{let{onEdit:t,showEditButton:s}=e;return(0,o.Z)(E.o8,{},void 0,(0,o.Z)(E.Z2,{auto:!0},void 0,(0,o.Z)(E.Eg,{auto:!0},void 0,(0,o.Z)("h3",{},void 0,pgettext("profile details title","Details")))),s&&(0,o.Z)(E.Z2,{},void 0,(0,o.Z)(E.Eg,{},void 0,(0,o.Z)("button",{className:"btn btn-default btn-outline btn-block",onClick:t,type:"button"},void 0,pgettext("profile details edit btn","Edit")))))},L=s(58598),P=s(78657),O=s(53904),I=class extends l().Component{componentDidMount(){const{data:e,dispatch:t,user:s}=this.props;e&&e.id===s.id||P.Z.get(this.props.user.api.details).then((e=>{t((0,L.zD)(e))}),(e=>{O.Z.apiError(e)}))}render(){return this.props.children}},A=class extends l().Component{constructor(e){super(e),(0,n.Z)(this,"onCancel",(()=>{this.setState({editing:!1})})),(0,n.Z)(this,"onEdit",(()=>{this.setState({editing:!0})})),(0,n.Z)(this,"onSuccess",(e=>{const{dispatch:t,isAuthenticated:s,profile:a}=this.props;let i=null;i=s?pgettext("profile details form","Your details have been updated."):interpolate(pgettext("profile details form","%(username)s's details have been updated."),{username:a.username},!0),O.Z.info(i),t((0,L.zD)(e)),this.setState({editing:!1})})),this.state={editing:!1}}componentDidMount(){v.Z.set({title:pgettext("profile details title","Details"),parent:this.props.profile.username})}render(){const{dispatch:e,isAuthenticated:t,profile:s,profileDetails:a}=this.props,i=a.id!==s.id;return(0,o.Z)(I,{data:a,dispatch:e,user:s},void 0,(0,o.Z)("div",{className:"profile-details"},void 0,(0,o.Z)(T,{onEdit:this.onEdit,showEditButton:!!a.edit&&!this.state.editing}),(0,o.Z)(C,{display:!this.state.editing,groups:a.groups,isAuthenticated:t,loading:i,profile:s}),(0,o.Z)(b,{api:s.api.edit_details,dispatch:e,display:this.state.editing,onCancel:this.onCancel,onSuccess:this.onSuccess})))}},R=s(87462),D=s(11005),j=s(82211),U=s(21981),z=s(90287),M=class extends l().Component{constructor(e){super(e),(0,n.Z)(this,"loadMore",(()=>{this.setState({isLoading:!0}),this.loadItems(this.props.posts.next)})),this.state={isLoading:!1}}loadItems(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;P.Z.get(this.props.api,{start:e||0}).then((t=>{0===e?z.Z.dispatch(U.zD(t)):z.Z.dispatch(U.R3(t)),this.setState({isLoading:!1})}),(e=>{this.setState({isLoading:!1}),O.Z.apiError(e)}))}componentDidMount(){v.Z.set({title:this.props.title,parent:this.props.profile.username}),this.loadItems()}render(){return(0,o.Z)("div",{className:"profile-feed"},void 0,(0,o.Z)(E.o8,{},void 0,(0,o.Z)(E.Z2,{auto:!0},void 0,(0,o.Z)(E.Eg,{auto:!0},void 0,(0,o.Z)("h3",{},void 0,this.props.header)))),l().createElement(B,(0,R.Z)({isLoading:this.state.isLoading,loadMore:this.loadMore},this.props)))}};function B(e){return e.posts.isLoaded&&!e.posts.results.length?(0,o.Z)("p",{className:"lead"},void 0,e.emptyMessage):(0,o.Z)("div",{},void 0,(0,o.Z)(D.Z,{isReady:e.posts.isLoaded,posts:e.posts.results,poster:e.profile}),(0,o.Z)(q,{isLoading:e.isLoading,loadMore:e.loadMore,next:e.posts.next}))}function q(e){return e.next?(0,o.Z)("div",{className:"pager-more"},void 0,(0,o.Z)(j.Z,{className:"btn btn-default btn-outline",loading:e.isLoading,onClick:e.loadMore},void 0,pgettext("profile load more btn","Show older activity"))):null}var F,H,Y,V,G,$,W,Q,X,K,J,ee=class extends l().Component{getClassName(){return this.props.className?"form-search "+this.props.className:"form-search"}render(){return(0,o.Z)("div",{className:this.getClassName()},void 0,(0,o.Z)("input",{type:"text",className:"form-control",value:this.props.value,onChange:this.props.onChange,placeholder:this.props.placeholder||pgettext("quick search placeholder","Search...")}),S||(S=(0,o.Z)("span",{className:"material-icon"},void 0,"search")))}},te=s(40429),se=s(6935),ae=class extends l().Component{constructor(e){super(e),(0,n.Z)(this,"loadMore",(()=>{this.setState({isBusy:!0}),this.loadUsers(this.state.page+1,this.state.search)})),(0,n.Z)(this,"search",(e=>{this.setState({isLoaded:!1,isBusy:!0,search:e.target.value,count:0,more:0,page:1,pages:1}),this.loadUsers(1,e.target.value)})),this.setSpecialProps(),h.Z.has(this.PRELOADED_DATA_KEY)?this.initWithPreloadedData(h.Z.pop(this.PRELOADED_DATA_KEY)):this.initWithoutPreloadedData()}setSpecialProps(){this.PRELOADED_DATA_KEY="PROFILE_FOLLOWERS",this.TITLE=pgettext("profile followers title","Followers"),this.API_FILTER="followers"}initWithPreloadedData(e){this.state={isLoaded:!0,isBusy:!1,search:"",count:e.count,more:e.more,page:e.page,pages:e.pages},z.Z.dispatch((0,se.ZB)(e.results))}initWithoutPreloadedData(){this.state={isLoaded:!1,isBusy:!1,search:"",count:0,more:0,page:1,pages:1},this.loadUsers()}loadUsers(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const s=this.props.profile.api[this.API_FILTER];P.Z.get(s,{search:t,page:e||1},"user-"+this.API_FILTER).then((t=>{1===e?z.Z.dispatch((0,se.ZB)(t.results)):z.Z.dispatch((0,se.R3)(t.results)),this.setState({isLoaded:!0,isBusy:!1,count:t.count,more:t.more,page:t.page,pages:t.pages})}),(e=>{O.Z.apiError(e)}))}componentDidMount(){v.Z.set({title:this.TITLE,parent:this.props.profile.username})}getLabel(){if(this.state.isLoaded){if(this.state.search){let e=npgettext("profile followers","Found %(users)s user.","Found %(users)s users.",this.state.count);return interpolate(e,{users:this.state.count},!0)}if(this.props.profile.id===this.props.user.id){let e=npgettext("profile followers","You have %(users)s follower.","You have %(users)s followers.",this.state.count);return interpolate(e,{users:this.state.count},!0)}{let e=npgettext("profile followers","%(username)s has %(users)s follower.","%(username)s has %(users)s followers.",this.state.count);return interpolate(e,{username:this.props.profile.username,users:this.state.count},!0)}}return pgettext("Loading...")}getEmptyMessage(){return this.state.search?pgettext("profile followers","Search returned no users matching specified criteria."):this.props.user.id===this.props.profile.id?pgettext("profile followers","You have no followers."):interpolate(pgettext("profile followers","%(username)s has no followers."),{username:this.props.profile.username},!0)}getMoreButton(){return this.state.more?(0,o.Z)("div",{className:"pager-more"},void 0,(0,o.Z)(j.Z,{className:"btn btn-default btn-outline",loading:this.state.isBusy,onClick:this.loadMore},void 0,interpolate(pgettext("profile followers","Show more (%(more)s)"),{more:this.state.more},!0))):null}getListBody(){return this.state.isLoaded&&0===this.state.count?(0,o.Z)("p",{className:"lead"},void 0,this.getEmptyMessage()):(0,o.Z)("div",{},void 0,(0,o.Z)(te.Z,{cols:3,isReady:this.state.isLoaded,users:this.props.users}),this.getMoreButton())}getClassName(){return"profile-"+this.API_FILTER}render(){return(0,o.Z)("div",{className:this.getClassName()},void 0,(0,o.Z)(E.o8,{},void 0,(0,o.Z)(E.Z2,{auto:!0},void 0,(0,o.Z)(E.Eg,{auto:!0},void 0,(0,o.Z)("h3",{},void 0,this.getLabel()))),(0,o.Z)(E.Z2,{},void 0,(0,o.Z)(E.Eg,{},void 0,(0,o.Z)(ee,{value:this.state.search,onChange:this.search,placeholder:pgettext("profile followers search","Search users...")})))),this.getListBody())}},ie=s(7850),oe=s(48927),ne=class extends l().Component{constructor(e){super(e),(0,n.Z)(this,"loadMore",(()=>{this.setState({isBusy:!0}),this.loadChanges(this.state.page+1,this.state.search)})),(0,n.Z)(this,"search",(e=>{this.setState({isLoaded:!1,isBusy:!0,search:e.target.value,count:0,more:0,page:1,pages:1}),this.loadChanges(1,e.target.value)})),h.Z.has("PROFILE_NAME_HISTORY")?this.initWithPreloadedData(h.Z.pop("PROFILE_NAME_HISTORY")):this.initWithoutPreloadedData()}initWithPreloadedData(e){this.state={isLoaded:!0,isBusy:!1,search:"",count:e.count,more:e.more,page:e.page,pages:e.pages},z.Z.dispatch((0,oe.ZB)(e.results))}initWithoutPreloadedData(){this.state={isLoaded:!1,isBusy:!1,search:"",count:0,more:0,page:1,pages:1},this.loadChanges()}loadChanges(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;P.Z.get(h.Z.get("USERNAME_CHANGES_API"),{user:this.props.profile.id,search:t,page:e||1},"search-username-history").then((t=>{1===e?z.Z.dispatch((0,oe.ZB)(t.results)):z.Z.dispatch((0,oe.R3)(t.results)),this.setState({isLoaded:!0,isBusy:!1,count:t.count,more:t.more,page:t.page,pages:t.pages})}),(e=>{O.Z.apiError(e)}))}componentDidMount(){v.Z.set({title:pgettext("profile username history title","Username history"),parent:this.props.profile.username})}getLabel(){if(this.state.isLoaded){if(this.state.search){let e=npgettext("profile username history","Found %(changes)s username change.","Found %(changes)s username changes.",this.state.count);return interpolate(e,{changes:this.state.count},!0)}if(this.props.profile.id===this.props.user.id){let e=npgettext("profile username history","Your username was changed %(changes)s time.","Your username was changed %(changes)s times.",this.state.count);return interpolate(e,{changes:this.state.count},!0)}{let e=npgettext("profile username history","%(username)s's username was changed %(changes)s time.","%(username)s's username was changed %(changes)s times.",this.state.count);return interpolate(e,{username:this.props.profile.username,changes:this.state.count},!0)}}return pgettext("profile username history","Loading...")}getEmptyMessage(){return this.state.search?pgettext("profile username history","Search returned no username changes matching specified criteria."):this.props.user.id===this.props.profile.id?pgettext("profile username history","No name changes have been recorded for your account."):interpolate(pgettext("profile username history","%(username)s's username was never changed."),{username:this.props.profile.username},!0)}getMoreButton(){return this.state.more?(0,o.Z)("div",{className:"pager-more"},void 0,(0,o.Z)(j.Z,{className:"btn btn-default btn-outline",loading:this.state.isBusy,onClick:this.loadMore},void 0,interpolate(pgettext("profile username history","Show older (%(more)s)"),{more:this.state.more},!0))):null}render(){return(0,o.Z)("div",{className:"profile-username-history"},void 0,(0,o.Z)(E.o8,{},void 0,(0,o.Z)(E.Z2,{auto:!0},void 0,(0,o.Z)(E.Eg,{auto:!0},void 0,(0,o.Z)("h3",{},void 0,this.getLabel()))),(0,o.Z)(E.Z2,{},void 0,(0,o.Z)(E.Eg,{},void 0,(0,o.Z)(ee,{value:this.state.search,onChange:this.search,placeholder:pgettext("profile username history search input","Search history...")})))),(0,o.Z)(ie.Z,{isLoaded:this.state.isLoaded,emptyMessage:this.getEmptyMessage(),changes:this.props["username-history"]}),this.getMoreButton())}},re=s(82125),le=s(27519),de=s(59131),ce=s(19605),pe=s(98936),ue=s(99755),he=class extends l().Component{constructor(e){super(e),(0,n.Z)(this,"action",(()=>{this.setState({isLoading:!0}),this.props.profile.is_followed?z.Z.dispatch((0,le.r$)({is_followed:!1,followers:this.props.profile.followers-1})):z.Z.dispatch((0,le.r$)({is_followed:!0,followers:this.props.profile.followers+1})),P.Z.post(this.props.profile.api.follow).then((e=>{this.setState({isLoading:!1}),z.Z.dispatch((0,le.r$)(e))}),(e=>{this.setState({isLoading:!1}),O.Z.apiError(e)}))})),this.state={isLoading:!1}}getClassName(){return this.props.profile.is_followed?this.props.className+" btn-default btn-following":this.props.className+" btn-default btn-follow"}getIcon(){return this.props.profile.is_followed?"favorite":"favorite_border"}getLabel(){return this.props.profile.is_followed?pgettext("user profile follow btn","Following"):pgettext("user profile follow btn","Follow")}render(){return(0,o.Z)(j.Z,{className:this.getClassName(),disabled:this.state.isLoading,onClick:this.action},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,this.getIcon()),this.getLabel())}},me=s(64646),ve=class extends l().Component{constructor(){super(...arguments),(0,n.Z)(this,"onClick",(()=>{me.Z.open({mode:"START_PRIVATE",submit:h.Z.get("PRIVATE_THREADS_API"),to:[this.props.profile]})}))}render(){const e=this.props.user.acl.can_start_private_threads,t=this.props.user.id===this.props.profile.id;return!e||t?null:(0,o.Z)("button",{className:this.props.className,onClick:this.onClick,type:"button"},void 0,F||(F=(0,o.Z)("span",{className:"material-icon"},void 0,"comment")),pgettext("profile message btn","Message"))}},ge=s(43345),Ze=s(96359),be=s(3784),fe=s(7227),_e=s(30337),Ne=class extends ge.Z{constructor(e){super(e),this.state={isLoaded:!1,isLoading:!1,error:null,is_avatar_locked:"",avatar_lock_user_message:"",avatar_lock_staff_message:""}}componentDidMount(){P.Z.get(this.props.profile.api.moderate_avatar).then((e=>{this.setState({isLoaded:!0,is_avatar_locked:e.is_avatar_locked,avatar_lock_user_message:e.avatar_lock_user_message||"",avatar_lock_staff_message:e.avatar_lock_staff_message||""})}),(e=>{this.setState({isLoaded:!0,error:e.detail})}))}clean(){return!!this.isValid()||(O.Z.error(this.validate().username[0]),!1)}send(){return P.Z.post(this.props.profile.api.moderate_avatar,{is_avatar_locked:this.state.is_avatar_locked,avatar_lock_user_message:this.state.avatar_lock_user_message,avatar_lock_staff_message:this.state.avatar_lock_staff_message})}handleSuccess(e){z.Z.dispatch((0,se.n1)(this.props.profile,e.avatar_hash)),O.Z.success(pgettext("profile avatar moderation","Avatar controls have been changed."))}getFormBody(){return(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(Ze.Z,{label:pgettext("profile avatar moderation field","Lock avatar"),helpText:pgettext("profile avatar moderation field","Locking user avatar will prohibit user from changing his avatar and will reset his/her avatar to default one."),for:"id_is_avatar_locked"},void 0,(0,o.Z)(fe.Z,{id:"id_is_avatar_locked",disabled:this.state.isLoading,iconOn:"lock_outline",iconOff:"lock_open",labelOn:pgettext("profile avatar moderation field","Disallow user from changing avatar"),labelOff:pgettext("profile avatar moderation field","Allow user to change avatar"),onChange:this.bindInput("is_avatar_locked"),value:this.state.is_avatar_locked})),(0,o.Z)(Ze.Z,{label:pgettext("profile avatar moderation field","User message"),helpText:pgettext("profile avatar moderation field","Optional message for user explaining why he/she is prohibited form changing avatar."),for:"id_avatar_lock_user_message"},void 0,(0,o.Z)("textarea",{id:"id_avatar_lock_user_message",className:"form-control",rows:"4",disabled:this.state.isLoading,onChange:this.bindInput("avatar_lock_user_message"),value:this.state.avatar_lock_user_message})),(0,o.Z)(Ze.Z,{label:pgettext("profile avatar moderation field","Staff message"),helpText:pgettext("profile avatar moderation field","Optional message for forum team members explaining why user is prohibited form changing avatar."),for:"id_avatar_lock_staff_message"},void 0,(0,o.Z)("textarea",{id:"id_avatar_lock_staff_message",className:"form-control",rows:"4",disabled:this.state.isLoading,onChange:this.bindInput("avatar_lock_staff_message"),value:this.state.avatar_lock_staff_message}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-default","data-dismiss":"modal"},void 0,pgettext("profile avatar moderation btn","Close")),(0,o.Z)(j.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,pgettext("profile avatar moderation btn","Save changes"))))}getModalBody(){return this.state.error?(0,o.Z)(_e.Z,{icon:"remove_circle_outline",message:this.state.error}):this.state.isLoaded?this.getFormBody():H||(H=(0,o.Z)(be.Z,{}))}getClassName(){return this.state.error?"modal-dialog modal-message modal-avatar-controls":"modal-dialog modal-avatar-controls"}render(){return(0,o.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":pgettext("modal","Close")},void 0,Y||(Y=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,pgettext("profile avatar moderation title","Avatar controls"))),this.getModalBody()))}},xe=s(55210),ye=class extends ge.Z{constructor(e){super(e),this.state={isLoaded:!1,isLoading:!1,error:null,username:"",validators:{username:[xe.lG()]}}}componentDidMount(){P.Z.get(this.props.profile.api.moderate_username).then((()=>{this.setState({isLoaded:!0})}),(e=>{this.setState({isLoaded:!0,error:e.detail})}))}clean(){return!!this.isValid()||(O.Z.error(this.validate().username[0]),!1)}send(){return P.Z.post(this.props.profile.api.moderate_username,{username:this.state.username})}handleSuccess(e){this.setState({username:""}),z.Z.dispatch((0,oe.KP)(e,this.props.profile,this.props.user)),z.Z.dispatch((0,se._S)(this.props.profile,e.username,e.slug)),O.Z.success(pgettext("profile username moderation","Username has been changed."))}getFormBody(){return(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(Ze.Z,{label:pgettext("profile username moderation field","New username"),for:"id_username"},void 0,(0,o.Z)("input",{type:"text",id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{className:"btn btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,pgettext("profile username moderation btn","Cancel")),(0,o.Z)(j.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,pgettext("profile username moderation btn","Change username"))))}getModalBody(){return this.state.error?(0,o.Z)(_e.Z,{icon:"remove_circle_outline",message:this.state.error}):this.state.isLoaded?this.getFormBody():V||(V=(0,o.Z)(be.Z,{}))}getClassName(){return this.state.error?"modal-dialog modal-message modal-rename-user":"modal-dialog modal-rename-user"}render(){return(0,o.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":pgettext("modal","Close")},void 0,G||(G=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,pgettext("profile username moderation title","Change username"))),this.getModalBody()))}},we=class extends ge.Z{constructor(e){super(e),(0,n.Z)(this,"countdown",(()=>{window.setTimeout((()=>{this.state.countdown>1?(this.setState({countdown:this.state.countdown-1}),this.countdown()):this.state.confirm||this.setState({confirm:!0})}),1e3)})),this.state={isLoaded:!1,isLoading:!1,isDeleted:!1,error:null,countdown:5,confirm:!1,with_content:!1}}componentDidMount(){P.Z.get(this.props.profile.api.delete).then((()=>{this.setState({isLoaded:!0}),this.countdown()}),(e=>{this.setState({isLoaded:!0,error:e.detail})}))}send(){return P.Z.post(this.props.profile.api.delete,{with_content:this.state.with_content})}handleSuccess(){m.Z.stop("user-profile"),this.state.with_content?this.setState({isDeleted:interpolate(pgettext("profile delete","%(username)s's account, threads, posts and other content has been deleted."),{username:this.props.profile.username},!0)}):this.setState({isDeleted:interpolate(pgettext("profile delete","%(username)s's account has been deleted and other content has been hidden."),{username:this.props.profile.username},!0)})}getButtonLabel(){return this.state.confirm?interpolate(pgettext("profile delete btn","Delete %(username)s"),{username:this.props.profile.username},!0):interpolate(pgettext("profile delete btn","Please wait... (%(countdown)ss)"),{countdown:this.state.countdown},!0)}getForm(){return(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"modal-body"},void 0,(0,o.Z)(Ze.Z,{label:pgettext("profile delete","User content"),for:"id_with_content"},void 0,(0,o.Z)(fe.Z,{id:"id_with_content",disabled:this.state.isLoading,labelOn:pgettext("profile delete content","Delete together with user's account"),labelOff:pgettext("profile delete content","Hide after deleting user's account"),onChange:this.bindInput("with_content"),value:this.state.with_content}))),(0,o.Z)("div",{className:"modal-footer"},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-default","data-dismiss":"modal"},void 0,pgettext("profile delete btn","Cancel")),(0,o.Z)(j.Z,{className:"btn-danger",loading:this.state.isLoading,disabled:!this.state.confirm},void 0,this.getButtonLabel())))}getDeletedBody(){return(0,o.Z)("div",{className:"modal-body"},void 0,$||($=(0,o.Z)("div",{className:"message-icon"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,o.Z)("div",{className:"message-body"},void 0,(0,o.Z)("p",{className:"lead"},void 0,this.state.isDeleted),(0,o.Z)("p",{},void 0,(0,o.Z)("a",{href:h.Z.get("USERS_LIST_URL")},void 0,pgettext("profile delete link","Return to users list")))))}getModalBody(){return this.state.error?(0,o.Z)(_e.Z,{icon:"remove_circle_outline",message:this.state.error}):this.state.isLoaded?this.state.isDeleted?this.getDeletedBody():this.getForm():W||(W=(0,o.Z)(be.Z,{}))}getClassName(){return this.state.error||this.state.isDeleted?"modal-dialog modal-message modal-delete-account":"modal-dialog modal-delete-account"}render(){return(0,o.Z)("div",{className:this.getClassName(),role:"document"},void 0,(0,o.Z)("div",{className:"modal-content"},void 0,(0,o.Z)("div",{className:"modal-header"},void 0,(0,o.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":pgettext("modal","Close")},void 0,Q||(Q=(0,o.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,o.Z)("h4",{className:"modal-title"},void 0,pgettext("profile delete title","Delete user account"))),this.getModalBody()))}},ke=s(59801);let Ce=function(e){return{tick:e.tick,user:e.auth,profile:e.profile}};var Se,Ee,Te,Le,Pe,Oe=class extends l().Component{constructor(){super(...arguments),(0,n.Z)(this,"showAvatarDialog",(()=>{ke.Z.show((0,i.$j)(Ce)(Ne))})),(0,n.Z)(this,"showRenameDialog",(()=>{ke.Z.show((0,i.$j)(Ce)(ye))})),(0,n.Z)(this,"showDeleteDialog",(()=>{ke.Z.show((0,i.$j)(Ce)(we))}))}render(){const{moderation:e}=this.props;return(0,o.Z)("ul",{className:"dropdown-menu dropdown-menu-right",role:"menu"},void 0,!!e.avatar&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.showAvatarDialog},void 0,X||(X=(0,o.Z)("span",{className:"material-icon"},void 0,"portrait")),pgettext("profile moderation menu","Avatar controls"))),!!e.rename&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.showRenameDialog},void 0,K||(K=(0,o.Z)("span",{className:"material-icon"},void 0,"credit_card")),pgettext("profile moderation menu","Change username"))),!!e.delete&&(0,o.Z)("li",{},void 0,(0,o.Z)("button",{type:"button",className:"btn btn-link",onClick:this.showDeleteDialog},void 0,J||(J=(0,o.Z)("span",{className:"material-icon"},void 0,"clear")),pgettext("profile moderation menu","Delete account"))))}},Ie=s(24678),Ae=e=>{let{profile:t}=e;return(0,o.Z)("ul",{className:"profile-data-list"},void 0,!1===t.is_active&&(0,o.Z)("li",{className:"user-account-disabled"},void 0,(0,o.Z)("abbr",{title:pgettext("profile data list","This user's account has been disabled by administrator.")},void 0,pgettext("profile data list","Account disabled"))),(0,o.Z)("li",{className:"user-status-display"},void 0,(0,o.Z)(Ie.ZP,{user:t,status:t.status},void 0,(0,o.Z)(Ie.Jj,{user:t,status:t.status}),(0,o.Z)(Ie.pg,{user:t,status:t.status,className:"status-label"}))),t.rank.is_tab?(0,o.Z)("li",{className:"user-rank"},void 0,(0,o.Z)("a",{href:t.rank.url,className:"item-title"},void 0,t.rank.name)):(0,o.Z)("li",{className:"user-rank"},void 0,(0,o.Z)("span",{className:"item-title"},void 0,t.rank.name)),(t.title||t.rank.title)&&(0,o.Z)("li",{className:"user-title"},void 0,t.title||t.rank.title),(0,o.Z)("li",{className:"user-joined-on"},void 0,(0,o.Z)("abbr",{title:interpolate(pgettext("profile data list","Joined on %(joined_on)s"),{joined_on:t.joined_on.format("LL, LT")},!0)},void 0,interpolate(pgettext("profile data list","Joined %(joined_on)s"),{joined_on:t.joined_on.fromNow()},!0))),t.email&&(0,o.Z)("li",{className:"user-email"},void 0,(0,o.Z)("a",{href:"mailto:"+t.email,className:"item-title"},void 0,t.email)))};const Re=()=>(0,o.Z)("button",{className:"btn btn-default btn-icon btn-outline dropdown-toggle",type:"button",title:pgettext("profile options btn","Options"),"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,Pe||(Pe=(0,o.Z)("span",{className:"material-icon"},void 0,"settings")));var De=e=>{let{profile:t,user:s,moderation:a,message:i,follow:n}=e;return(0,o.Z)(ue.sP,{},void 0,(0,o.Z)(ue.mr,{styleName:t.rank.css_class?"rank-"+t.rank.css_class:"profile"},void 0,(0,o.Z)(ue.gC,{styleName:t.rank.css_class?"rank-"+t.rank.css_class:"profile"},void 0,(0,o.Z)("div",{className:"profile-page-header"},void 0,(0,o.Z)("div",{className:"profile-page-header-avatar"},void 0,(0,o.Z)(ce.ZP,{className:"user-avatar hidden-sm hidden-md hidden-lg",user:t,size:200,size2x:400}),(0,o.Z)(ce.ZP,{className:"user-avatar hidden-xs hidden-md hidden-lg",user:t,size:64,size2x:128}),(0,o.Z)(ce.ZP,{className:"user-avatar hidden-xs hidden-sm",user:t,size:128,size2x:256})),(0,o.Z)("h1",{},void 0,t.username))),(0,o.Z)(ue.eA,{className:"profile-page-header-details"},void 0,(0,o.Z)(pe.gq,{},void 0,(0,o.Z)(pe.kw,{auto:!0},void 0,(0,o.Z)(pe.Z6,{},void 0,(0,o.Z)(Ae,{profile:t}))),i&&(0,o.Z)(pe.kw,{},void 0,(0,o.Z)(pe.Z6,{},void 0,(0,o.Z)(ve,{className:"btn btn-default btn-block btn-outline",profile:t,user:s})),a.available&&!n&&(0,o.Z)(pe.Z6,{shrink:!0},void 0,(0,o.Z)("div",{className:"dropdown"},void 0,Se||(Se=(0,o.Z)(Re,{})),(0,o.Z)(Oe,{profile:t,moderation:a})))),n&&(0,o.Z)(pe.kw,{},void 0,(0,o.Z)(pe.Z6,{},void 0,(0,o.Z)(he,{className:"btn btn-block btn-outline",profile:t})),a.available&&(0,o.Z)(pe.Z6,{shrink:!0},void 0,(0,o.Z)("div",{className:"dropdown"},void 0,Ee||(Ee=(0,o.Z)(Re,{})),(0,o.Z)(Oe,{profile:t,moderation:a})))),a.available&&!n&&!i&&(0,o.Z)(pe.kw,{},void 0,(0,o.Z)(pe.Z6,{className:"hidden-xs",shrink:!0},void 0,(0,o.Z)("div",{className:"dropdown"},void 0,Te||(Te=(0,o.Z)(Re,{})),(0,o.Z)(Oe,{profile:t,moderation:a}))),(0,o.Z)(pe.Z6,{className:"hidden-sm hidden-md hidden-lg"},void 0,(0,o.Z)("div",{className:"dropdown"},void 0,(0,o.Z)("button",{className:"btn btn-default btn-block btn-outline dropdown-toggle",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,Le||(Le=(0,o.Z)("span",{className:"material-icon"},void 0,"settings")),pgettext("profile options btn","Options")),(0,o.Z)(Oe,{profile:t,moderation:a}))))))))},je=s(69987),Ue=s(94417),ze=e=>{let{baseUrl:t,page:s,pages:a}=e;return(0,o.Z)("div",{className:"nav-container"},void 0,(0,o.Z)("div",{className:"dropdown hidden-sm hidden-md hidden-lg"},void 0,(0,o.Z)("button",{className:"btn btn-default btn-block btn-outline dropdown-toggle",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,s.icon),s.name),(0,o.Z)("ul",{className:"dropdown-menu stick-to-bottom"},void 0,a.map((e=>(0,o.Z)("li",{},e.component,(0,o.Z)(je.rU,{to:t+e.component+"/"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,e.icon),e.name)))))),(0,o.Z)("ul",{className:"nav nav-pills hidden-xs",role:"menu"},void 0,a.map((e=>(0,o.Z)(Ue.Z,{path:t+e.component+"/"},e.component,(0,o.Z)(je.rU,{to:t+e.component+"/"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,e.icon),e.name))))))},Me=class extends re.Z{constructor(e){super(e),(0,n.Z)(this,"update",(e=>{z.Z.dispatch((0,le.ZB)(e))})),this.startPolling(e.profile.api.index)}startPolling(e){m.Z.start({poll:"user-profile",url:e,frequency:9e4,update:this.update})}render(){const e=h.Z.get("PROFILE").url,t=h.Z.get("PROFILE_PAGES"),s=t.filter((t=>{const s=e+t.component+"/";return this.props.location.pathname===s}))[0],{profile:a,user:i}=this.props,n=Be(a,i),r=!!i.acl.can_start_private_threads&&a.id!==i.id,l=!!a.acl.can_follow&&a.id!==i.id;return(0,o.Z)("div",{className:"page page-user-profile"},void 0,(0,o.Z)(De,{profile:this.props.profile,user:this.props.user,moderation:n,message:r,follow:l}),(0,o.Z)(de.Z,{},void 0,(0,o.Z)(ze,{baseUrl:e,page:s,pages:t}),this.props.children))}};const Be=(e,t)=>{const s={available:!1,rename:!1,avatar:!1,delete:!1};return t.is_anonymous||(s.rename=e.acl.can_rename,s.avatar=e.acl.can_moderate_avatar,s.delete=e.acl.can_delete,s.available=!!(s.rename||s.avatar||s.delete)),s};function qe(e){return{isAuthenticated:e.auth.user.id===e.profile.id,tick:e.tick.tick,user:e.auth.user,users:e.users,posts:e.posts,profile:e.profile,profileDetails:e["profile-details"],"username-history":e["username-history"]}}const Fe={posts:function(e){let t=null;t=e.user.id===e.profile.id?pgettext("profile posts","You have posted no messages."):interpolate(pgettext("profile posts","%(username)s posted no messages."),{username:e.profile.username},!0);let s=null;if(e.posts.isLoaded)if(e.profile.id===e.user.id){const t=npgettext("profile posts","You have posted %(posts)s message.","You have posted %(posts)s messages.",e.profile.posts);s=interpolate(t,{posts:e.profile.posts},!0)}else{const t=npgettext("profile posts","%(username)s has posted %(posts)s message.","%(username)s has posted %(posts)s messages.",e.profile.posts);s=interpolate(t,{username:e.profile.username,posts:e.profile.posts},!0)}else s=pgettext("profile posts","Loading...");return l().createElement(M,(0,R.Z)({api:e.profile.api.posts,emptyMessage:t,header:s,title:pgettext("profile posts title","Posts")},e))},threads:function(e){let t=null;t=e.user.id===e.profile.id?pgettext("profile threads","You have no started threads."):interpolate(pgettext("profile threads","%(username)s started no threads."),{username:e.profile.username},!0);let s=null;if(e.posts.isLoaded)if(e.profile.id===e.user.id){const t=npgettext("profile threads","You have started %(threads)s thread.","You have started %(threads)s threads.",e.profile.threads);s=interpolate(t,{threads:e.profile.threads},!0)}else{const t=npgettext("profile threads","%(username)s has started %(threads)s thread.","%(username)s has started %(threads)s threads.",e.profile.threads);s=interpolate(t,{username:e.profile.username,threads:e.profile.threads},!0)}else s=pgettext("profile threads","Loading...");return l().createElement(M,(0,R.Z)({api:e.profile.api.threads,emptyMessage:t,header:s,title:pgettext("profile threads title","Threads")},e))},followers:ae,follows:class extends ae{setSpecialProps(){this.PRELOADED_DATA_KEY="PROFILE_FOLLOWS",this.TITLE=pgettext("profile follows title","Follows"),this.API_FILTER="follows"}getLabel(){if(this.state.isLoaded){if(this.state.search){let e=npgettext("profile follows","Found %(users)s user.","Found %(users)s users.",this.state.count);return interpolate(e,{users:this.state.count},!0)}if(this.props.profile.id===this.props.user.id){let e=npgettext("profile follows","You are following %(users)s user.","You are following %(users)s users.",this.state.count);return interpolate(e,{users:this.state.count},!0)}{let e=npgettext("profile follows","%(username)s is following %(users)s user.","%(username)s is following %(users)s users.",this.state.count);return interpolate(e,{username:this.props.profile.username,users:this.state.count},!0)}}return pgettext("profile follows","Loading...")}getEmptyMessage(){return this.state.search?pgettext("profile follows","Search returned no users matching specified criteria."):this.props.user.id===this.props.profile.id?pgettext("profile follows","You are not following any users."):interpolate(pgettext("profile follows","%(username)s is not following any users."),{username:this.props.profile.username},!0)}},details:A,"username-history":ne,"ban-details":g};function He(){let e=[];return h.Z.get("PROFILE_PAGES").forEach((function(t){e.push(Object.assign({},t,{path:h.Z.get("PROFILE").url+t.component+"/",component:(0,i.$j)(qe)(Fe[t.component])}))})),e}var Ye=s(39633);h.Z.addInitializer({name:"component:profile",initializer:function(e){e.has("PROFILE")&&e.has("PROFILE_PAGES")&&(0,Ye.Z)({root:h.Z.get("PROFILE").url,component:(0,i.$j)(qe)(Me),paths:He()})},after:"reducer:profile-hydrate"})},32488:function(e,t,s){"use strict";var a,i=s(32233),o=s(4942),n=s(22928),r=s(57588),l=s.n(r),d=s(82211),c=s(43345),p=s(78657),u=s(53904),h=s(55210),m=s(93051);class v extends c.Z{constructor(e){super(e),this.state={isLoading:!1,email:"",validators:{email:[h.Do()]}}}clean(){return!!this.isValid()||(u.Z.error(pgettext("request activation link form","Enter a valid email address.")),!1)}send(){return p.Z.post(i.Z.get("SEND_ACTIVATION_API"),{email:this.state.email})}handleSuccess(e){this.props.callback(e)}handleError(e){["already_active","inactive_admin"].indexOf(e.code)>-1?u.Z.info(e.detail):403===e.status&&e.ban?(0,m.Z)(e.ban):u.Z.apiError(e)}render(){return(0,n.Z)("div",{className:"well well-form well-form-request-activation-link"},void 0,(0,n.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,n.Z)("div",{className:"form-group"},void 0,(0,n.Z)("div",{className:"control-input"},void 0,(0,n.Z)("input",{type:"text",className:"form-control",placeholder:pgettext("request activation link form field","Your e-mail address"),disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email}))),(0,n.Z)(d.Z,{className:"btn-primary btn-block",loading:this.state.isLoading},void 0,pgettext("request activation link form btn","Send link"))))}}class g extends l().Component{getMessage(){return interpolate(pgettext("request activation link form","Activation link was sent to %(email)s"),{email:this.props.user.email},!0)}render(){return(0,n.Z)("div",{className:"well well-form well-form-request-activation-link well-done"},void 0,(0,n.Z)("div",{className:"done-message"},void 0,a||(a=(0,n.Z)("div",{className:"message-icon"},void 0,(0,n.Z)("span",{className:"material-icon"},void 0,"check"))),(0,n.Z)("div",{className:"message-body"},void 0,(0,n.Z)("p",{},void 0,this.getMessage())),(0,n.Z)("button",{className:"btn btn-primary btn-block",type:"button",onClick:this.props.callback},void 0,pgettext("request activation link form btn","Request another link"))))}}var Z=class extends l().Component{constructor(e){super(e),(0,o.Z)(this,"complete",(e=>{this.setState({complete:e})})),(0,o.Z)(this,"reset",(()=>{this.setState({complete:!1})})),this.state={complete:!1}}render(){return this.state.complete?(0,n.Z)(g,{user:this.state.complete,callback:this.reset}):(0,n.Z)(v,{callback:this.complete})}},b=s(4869);i.Z.addInitializer({name:"component:request-activation-link",initializer:function(){document.getElementById("request-activation-link-mount")&&(0,b.Z)(Z,"request-activation-link-mount",!1)},after:"store"})},11768:function(e,t,s){"use strict";var a,i,o=s(32233),n=s(4942),r=s(22928),l=s(57588),d=s.n(l),c=s(73935),p=s.n(c),u=s(82211),h=s(43345),m=s(78657),v=s(53904),g=s(55210),Z=s(93051);class b extends h.Z{constructor(e){super(e),this.state={isLoading:!1,email:"",validators:{email:[g.Do()]}}}clean(){return!!this.isValid()||(v.Z.error(pgettext("request password reset form","Enter a valid email address.")),!1)}send(){return m.Z.post(o.Z.get("SEND_PASSWORD_RESET_API"),{email:this.state.email})}handleSuccess(e){this.props.callback(e)}handleError(e){["inactive_user","inactive_admin"].indexOf(e.code)>-1?this.props.showInactivePage(e):403===e.status&&e.ban?(0,Z.Z)(e.ban):v.Z.apiError(e)}render(){return(0,r.Z)("div",{className:"well well-form well-form-request-password-reset"},void 0,(0,r.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,r.Z)("div",{className:"form-group"},void 0,(0,r.Z)("div",{className:"control-input"},void 0,(0,r.Z)("input",{type:"text",className:"form-control",placeholder:pgettext("request password reset form field","Your e-mail address"),disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email}))),(0,r.Z)(u.Z,{className:"btn-primary btn-block",loading:this.state.isLoading},void 0,pgettext("request password reset form btn","Send link"))))}}class f extends d().Component{getMessage(){return interpolate(pgettext("request password reset form","Reset password link was sent to %(email)s"),{email:this.props.user.email},!0)}render(){return(0,r.Z)("div",{className:"well well-form well-form-request-password-reset well-done"},void 0,(0,r.Z)("div",{className:"done-message"},void 0,a||(a=(0,r.Z)("div",{className:"message-icon"},void 0,(0,r.Z)("span",{className:"material-icon"},void 0,"check"))),(0,r.Z)("div",{className:"message-body"},void 0,(0,r.Z)("p",{},void 0,this.getMessage())),(0,r.Z)("button",{type:"button",className:"btn btn-primary btn-block",onClick:this.props.callback},void 0,pgettext("request password reset form btn","Request another link"))))}}class _ extends d().Component{getActivateButton(){return"inactive_user"===this.props.activation?(0,r.Z)("p",{},void 0,(0,r.Z)("a",{href:o.Z.get("REQUEST_ACTIVATION_URL")},void 0,pgettext("request password reset form error","Activate your account."))):null}render(){return(0,r.Z)("div",{className:"page page-message page-message-info page-forgotten-password-inactive"},void 0,(0,r.Z)("div",{className:"container"},void 0,(0,r.Z)("div",{className:"message-panel"},void 0,i||(i=(0,r.Z)("div",{className:"message-icon"},void 0,(0,r.Z)("span",{className:"material-icon"},void 0,"info_outline"))),(0,r.Z)("div",{className:"message-body"},void 0,(0,r.Z)("p",{className:"lead"},void 0,pgettext("request password reset form error","Your account is inactive.")),(0,r.Z)("p",{},void 0,this.props.message),this.getActivateButton()))))}}var N=class extends d().Component{constructor(e){super(e),(0,n.Z)(this,"complete",(e=>{this.setState({complete:e})})),(0,n.Z)(this,"reset",(()=>{this.setState({complete:!1})})),this.state={complete:!1}}showInactivePage(e){p().render((0,r.Z)(_,{activation:e.code,message:e.detail}),document.getElementById("page-mount"))}render(){return this.state.complete?(0,r.Z)(f,{callback:this.reset,user:this.state.complete}):(0,r.Z)(b,{callback:this.complete,showInactivePage:this.showInactivePage})}},x=s(4869);o.Z.addInitializer({name:"component:request-password-reset",initializer:function(){document.getElementById("request-password-reset-mount")&&(0,x.Z)(N,"request-password-reset-mount",!1)},after:"store"})},61323:function(e,t,s){"use strict";var a,i=s(32233),o=s(4942),n=s(22928),r=s(57588),l=s.n(r),d=s(73935),c=s.n(d),p=s(82211),u=s(43345),h=s(14467),m=s(78657),v=s(98274),g=s(59801),Z=s(53904),b=s(93051),f=s(19755);class _ extends u.Z{constructor(e){super(e),this.state={isLoading:!1,password:""}}clean(){return!!this.state.password.trim().length||(Z.Z.error(pgettext("password reset form","Enter new password.")),!1)}send(){return m.Z.post(i.Z.get("CHANGE_PASSWORD_API"),{password:this.state.password})}handleSuccess(e){this.props.callback(e)}handleError(e){403===e.status&&e.ban?(0,b.Z)(e.ban):Z.Z.apiError(e)}render(){return(0,n.Z)("div",{className:"well well-form well-form-reset-password"},void 0,(0,n.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,n.Z)("div",{className:"form-group"},void 0,(0,n.Z)("div",{className:"control-input"},void 0,(0,n.Z)("input",{type:"password",className:"form-control",placeholder:pgettext("password reset form field","Enter new password"),disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),(0,n.Z)(p.Z,{className:"btn-primary btn-block",loading:this.state.isLoading},void 0,pgettext("password reset form btn","Change password"))))}}class N extends l().Component{getMessage(){return interpolate(pgettext("password reset form","%(username)s, your password has been changed successfully."),{username:this.props.user.username},!0)}showSignIn(){g.Z.show(h.Z)}render(){return(0,n.Z)("div",{className:"page page-message page-message-success page-forgotten-password-changed"},void 0,(0,n.Z)("div",{className:"container"},void 0,(0,n.Z)("div",{className:"message-panel"},void 0,a||(a=(0,n.Z)("div",{className:"message-icon"},void 0,(0,n.Z)("span",{className:"material-icon"},void 0,"check"))),(0,n.Z)("div",{className:"message-body"},void 0,(0,n.Z)("p",{className:"lead"},void 0,this.getMessage()),(0,n.Z)("p",{},void 0,pgettext("password reset form","You will have to sign in using new password before continuing.")),(0,n.Z)("p",{},void 0,(0,n.Z)("button",{type:"button",className:"btn btn-primary",onClick:this.showSignIn},void 0,pgettext("password reset form btn","Sign in")))))))}}var x=class extends l().Component{constructor(){super(...arguments),(0,o.Z)(this,"complete",(e=>{v.Z.softSignOut(),f('#hidden-login-form input[name="redirect_to"]').remove(),c().render((0,n.Z)(N,{user:e}),document.getElementById("page-mount"))}))}render(){return(0,n.Z)(_,{callback:this.complete})}},y=s(4869);i.Z.addInitializer({name:"component:reset-password-form",initializer:function(){document.getElementById("reset-password-form-mount")&&(0,y.Z)(x,"reset-password-form-mount",!1)},after:"store"})},64752:function(e,t,s){"use strict";var a,i=s(22928),o=(s(57588),s(73935)),n=s.n(o),r=s(37424),l=s(62989),d=s(90287);misago.addInitializer({name:"component:search-overlay",initializer:function(e){const t=document.getElementById("search-mount");n().render((0,i.Z)(r.zt,{store:d.Z.getStore()},void 0,a||(a=(0,i.Z)(l.F,{}))),t)},after:"store"})},40949:function(e,t,s){"use strict";var a,i=s(37424),o=s(22928),n=s(87462),r=s(57588),l=s.n(r),d=s(59131),c=s(4942),p=s(32233),u=s(43345),h=s(21981),m=s(16427),v=s(6935),g=s(78657),Z=s(53904),b=s(90287),f=s(98936),_=s(99755),N=class extends u.Z{constructor(e){super(e),(0,c.Z)(this,"onQueryChange",(e=>{this.changeValue("query",e.target.value)})),this.state={isLoading:!1,query:e.search.query}}componentDidMount(){this.state.query.length&&this.handleSubmit()}clean(){return!!this.state.query.trim().length||(Z.Z.error(pgettext("search form","You have to enter search query.")),!1)}send(){b.Z.dispatch((0,m.Vx)({isLoading:!0}));const e=this.state.query.trim();let t=window.location.href;const s=t.indexOf("?q=");return s>0&&(t=t.substring(0,s+3)),window.history.pushState({},"",t+encodeURIComponent(e)),g.Z.get(p.Z.get("SEARCH_API"),{q:e})}handleSuccess(e){b.Z.dispatch((0,m.Vx)({query:this.state.query.trim(),isLoading:!1,providers:e})),e.forEach((e=>{"users"===e.id?b.Z.dispatch((0,v.ZB)(e.results.results)):"threads"===e.id&&b.Z.dispatch((0,h.zD)(e.results))}))}handleError(e){Z.Z.apiError(e),b.Z.dispatch((0,m.Vx)({isLoading:!1}))}render(){return(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)(_.sP,{},void 0,(0,o.Z)(_.mr,{styleName:"site-search"},void 0,(0,o.Z)(_.gC,{styleName:"site-search"},void 0,(0,o.Z)("h1",{},void 0,pgettext("search form title","Search"))),(0,o.Z)(_.eA,{className:"page-header-search-form"},void 0,(0,o.Z)(f.gq,{},void 0,(0,o.Z)(f.kw,{auto:!0},void 0,(0,o.Z)(f.Z6,{},void 0,(0,o.Z)("input",{className:"form-control",disabled:this.state.isLoading,type:"text",value:this.state.query,placeholder:pgettext("search form input","Search"),onChange:this.onQueryChange})),(0,o.Z)(f.Z6,{shrink:!0},void 0,(0,o.Z)("button",{className:"btn btn-secondary btn-icon btn-outline",title:pgettext("search form btn","Search"),disabled:this.state.isLoading},void 0,a||(a=(0,o.Z)("span",{className:"material-icon"},void 0,"search"))))))))))}},x=s(69987);function y(e){return(0,o.Z)("div",{className:"list-group nav-side"},void 0,e.providers.map((e=>(0,o.Z)(x.rU,{activeClassName:"active",className:"list-group-item",to:e.url},e.id,(0,o.Z)("span",{className:"material-icon"},void 0,e.icon),e.name,(0,o.Z)(w,{results:e.results})))))}function w(e){if(!e.results)return null;let t=e.results.count;return t>1e6?t=Math.ceil(t/1e6)+"KK":t>1e3&&(t=Math.ceil(t/1e3)+"K"),(0,o.Z)("span",{className:"badge"},void 0,t)}function k(e){return(0,o.Z)("div",{className:"page page-search"},void 0,(0,o.Z)(N,{provider:e.provider,search:e.search}),(0,o.Z)(d.Z,{},void 0,(0,o.Z)("div",{className:"row"},void 0,(0,o.Z)("div",{className:"col-md-3"},void 0,(0,o.Z)(y,{providers:e.search.providers})),(0,o.Z)("div",{className:"col-md-9"},void 0,e.children,(0,o.Z)(C,{provider:e.provider,search:e.search})))))}function C(e){let t=null;if(e.search.providers.forEach((s=>{s.id===e.provider.id&&(t=s.time)})),null===t)return null;const s=pgettext("search time","Search took %(time)s s to complete");return(0,o.Z)("footer",{className:"search-footer"},void 0,(0,o.Z)("p",{},void 0,interpolate(s,{time:t},!0)))}var S=s(11005),E=s(82211);function T(e){return(0,o.Z)("div",{},void 0,(0,o.Z)(S.Z,{isReady:!0,posts:e.results}),l().createElement(L,e))}s(69092);class L extends l().Component{constructor(){super(...arguments),(0,c.Z)(this,"onClick",(()=>{b.Z.dispatch((0,h.Vx)({isBusy:!0})),g.Z.get(this.props.provider.api,{q:this.props.query,page:this.props.next}).then((e=>{e.forEach((e=>{"threads"===e.id&&(b.Z.dispatch((0,h.R3)(e.results)),b.Z.dispatch((0,m.P0)(e)))})),b.Z.dispatch((0,h.Vx)({isBusy:!1}))}),(e=>{Z.Z.apiError(e),b.Z.dispatch((0,h.Vx)({isBusy:!1}))}))}))}render(){return this.props.more?(0,o.Z)("div",{className:"pager-more"},void 0,(0,o.Z)(E.Z,{className:"btn btn-default btn-outline",loading:this.props.isBusy,onClick:this.onClick},void 0,pgettext("search threads btn","Show more"))):null}}function P(e){let{children:t,loading:s,posts:a,query:i}=e;return a&&a.count?t:i.length?(0,o.Z)("p",{className:"lead"},void 0,s?pgettext("search threads","Loading results..."):pgettext("search threads","No threads matching search query have been found.")):(0,o.Z)("p",{className:"lead"},void 0,pgettext("search threads","Enter at least two characters to search threads."))}var O=s(40429);function I(e){let{children:t,loading:s,query:a,users:i}=e;return i.length?t:a.length?(0,o.Z)("p",{className:"lead"},void 0,s?pgettext("search users","Loading results..."):pgettext("search users","No users matching search query have been found.")):(0,o.Z)("p",{className:"lead"},void 0,pgettext("search users","Enter at least two characters to search users."))}const A={threads:function(e){return(0,o.Z)(k,{provider:e.route.provider,search:e.search},void 0,(0,o.Z)(P,{loading:e.search.isLoading,query:e.search.query,posts:e.posts},void 0,l().createElement(T,(0,n.Z)({provider:e.route.provider,query:e.search.query},e.posts))))},users:function(e){return(0,o.Z)(k,{provider:e.route.provider,search:e.search},void 0,(0,o.Z)(I,{loading:e.search.isLoading,query:e.search.query,users:e.users},void 0,(0,o.Z)(O.Z,{cols:3,isReady:!e.search.isLoading,users:e.users})))}};function R(e){return{posts:e.posts,search:e.search,tick:e.tick.tick,user:e.auth.user,users:e.users}}var D=s(39633);p.Z.addInitializer({name:"component:search",initializer:function(e){var t;"misago:search"===e.get("CURRENT_LINK")&&(0,D.Z)({paths:(t=p.Z.get("SEARCH_PROVIDERS"),t.map((e=>({path:e.url,component:(0,i.$j)(R)(A[e.id]),provider:e}))))})},after:"store"})},78679:function(e,t,s){"use strict";var a,i=s(22928),o=(s(57588),s(73935)),n=s.n(o),r=s(37424),l=s(6333),d=s(90287);misago.addInitializer({name:"component:site-nav-overlay",initializer:function(e){const t=document.getElementById("site-nav-mount");n().render((0,i.Z)(r.zt,{store:d.Z.getStore()},void 0,a||(a=(0,i.Z)(l.Or,{}))),t)},after:"store"})},61814:function(e,t,s){"use strict";var a=s(37424),i=s(32233),o=s(22928),n=s(57588),r=s.n(n);const l={info:"alert-info",success:"alert-success",warning:"alert-warning",error:"alert-danger"};class d extends r().Component{getSnackbarClass(){let e="alerts-snackbar";return this.props.isVisible?e+=" in":e+=" out",e}render(){return(0,o.Z)("div",{className:this.getSnackbarClass()},void 0,(0,o.Z)("p",{className:"alert "+l[this.props.type]},void 0,this.props.message))}}function c(e){return e.snackbar}var p=s(4869);i.Z.addInitializer({name:"component:snackbar",initializer:function(){(0,p.Z)((0,a.$j)(c)(d),"snackbar-mount")},after:"snackbar"})},95920:function(e,t,s){"use strict";var a=s(57588),i=s.n(a),o=s(22928),n=s(4942),r=s(32233),l=s(26106),d=s(82211),c=s(43345),p=s(96359),u=s(78657),h=s(53904),m=s(55210),v=s(59131),g=s(99755),Z=e=>{let{backendName:t}=e;const s=pgettext("social auth title","Sign in with %(backend)s"),a=interpolate(s,{backend:t},!0);return(0,o.Z)(g.sP,{},void 0,(0,o.Z)(g.mr,{styleName:"social-auth"},void 0,(0,o.Z)(g.gC,{styleName:"social-auth"},void 0,(0,o.Z)("h1",{},void 0,a))))};class b extends c.Z{constructor(e){super(e),(0,n.Z)(this,"handlePrivacyPolicyChange",(e=>{const t=e.target.value;this.handleToggleAgreement("privacyPolicy",t)})),(0,n.Z)(this,"handleTermsOfServiceChange",(e=>{const t=e.target.value;this.handleToggleAgreement("termsOfService",t)})),(0,n.Z)(this,"handleToggleAgreement",((e,t)=>{this.setState(((s,a)=>{if(null===s[e])return{errors:{...s.errors,[e]:null},[e]:t};const i=this.state.validators[e][0];return{errors:{...s.errors,[e]:[i(null)]},[e]:null}}))}));const t={email:[m.Do()],username:[m.lG()]};r.Z.get("TERMS_OF_SERVICE_ID")&&(t.termsOfService=[m.fT()]),r.Z.get("PRIVACY_POLICY_ID")&&(t.privacyPolicy=[m.jA()]),this.state={email:e.email||"",emailProtected:!!e.email,username:e.username||"",termsOfService:null,privacyPolicy:null,validators:t,errors:{},isLoading:!1}}clean(){if(this.validate(),-1!==[this.state.email.trim().length,this.state.username.trim().length].indexOf(0))return h.Z.error(pgettext("social auth form","Fill out all fields.")),!1;const{validators:e}=this.state;return r.Z.get("TERMS_OF_SERVICE_ID")&&null===this.state.termsOfService?(h.Z.error(e.termsOfService[0](null)),!1):!r.Z.get("PRIVACY_POLICY_ID")||null!==this.state.privacyPolicy||(h.Z.error(e.privacyPolicy[0](null)),!1)}send(){return u.Z.post(this.props.url,{email:this.state.email,username:this.state.username,terms_of_service:this.state.termsOfService,privacy_policy:this.state.privacyPolicy})}handleSuccess(e){const{onRegistrationComplete:t}=this.props;t(e)}handleError(e){if(200===e.status){const{onRegistrationComplete:e}=this.props,{username:t}=this.state;e({activation:"active",step:"done",username:t})}else if(400===e.status){const t={errors:e};e.email&&(t.emailProtected=!1),this.setState(t)}else h.Z.apiError(e)}render(){const{backend_name:e}=this.props,{email:t,emailProtected:s,username:a,isLoading:i}=this.state;let n=null;if(s){const t=pgettext("social auth form","Your e-mail address has been verified by %(backend)s.");n=interpolate(t,{backend:e},!0)}return(0,o.Z)("div",{className:"page page-social-auth page-social-auth-register"},void 0,(0,o.Z)(Z,{backendName:e}),(0,o.Z)(v.Z,{},void 0,(0,o.Z)("div",{className:"row"},void 0,(0,o.Z)("div",{className:"col-md-6 col-md-offset-3"},void 0,(0,o.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,o.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,o.Z)("div",{className:"panel-heading"},void 0,(0,o.Z)("h3",{className:"panel-title"},void 0,pgettext("social auth form title","Complete your details"))),(0,o.Z)("div",{className:"panel-body"},void 0,(0,o.Z)(p.Z,{for:"id_username",label:pgettext("social auth form field","Username"),validation:this.state.errors.username},void 0,(0,o.Z)("input",{type:"text",id:"id_username",className:"form-control",disabled:i,onChange:this.bindInput("username"),value:a})),(0,o.Z)(p.Z,{for:"id_email",label:pgettext("social auth form field","E-mail address"),helpText:n,validation:s?null:this.state.errors.email},void 0,(0,o.Z)("input",{type:"email",id:"id_email",className:"form-control",disabled:i||s,onChange:this.bindInput("email"),value:t})),(0,o.Z)(l.Z,{errors:this.state.errors,privacyPolicy:this.state.privacyPolicy,termsOfService:this.state.termsOfService,onPrivacyPolicyChange:this.handlePrivacyPolicyChange,onTermsOfServiceChange:this.handleTermsOfServiceChange})),(0,o.Z)("div",{className:"panel-footer"},void 0,(0,o.Z)(d.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,pgettext("social auth form btn","Sign in")))))))))}}var f=e=>{let{activation:t,backend_name:s,username:a}=e,i="",n="";return n="user"===t?pgettext("social auth complete","%(username)s, your account has been created but you need to activate it before you will be able to sign in."):"admin"===t?pgettext("social auth complete","%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in."):pgettext("social auth complete","%(username)s, your account has been created and you have been signed in to it."),i="active"===t?"check":"info_outline",(0,o.Z)("div",{className:"page page-social-auth page-social-auth-register"},void 0,(0,o.Z)(Z,{backendName:s}),(0,o.Z)(v.Z,{},void 0,(0,o.Z)("div",{className:"row"},void 0,(0,o.Z)("div",{className:"col-md-6 col-md-offset-3"},void 0,(0,o.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,o.Z)("div",{className:"panel-heading"},void 0,(0,o.Z)("h3",{className:"panel-title"},void 0,pgettext("social auth complete title","Registration completed!"))),(0,o.Z)("div",{className:"panel-body panel-message-body"},void 0,(0,o.Z)("div",{className:"message-icon"},void 0,(0,o.Z)("span",{className:"material-icon"},void 0,i)),(0,o.Z)("div",{className:"message-body"},void 0,(0,o.Z)("p",{className:"lead"},void 0,interpolate(n,{username:a},!0)),(0,o.Z)("p",{className:"help-block"},void 0,(0,o.Z)("a",{className:"btn btn-default",href:r.Z.get("MISAGO_PATH")},void 0,pgettext("social auth complete link","Return to forum index"))))))))))};class _ extends i().Component{constructor(e){super(e),(0,n.Z)(this,"handleRegistrationComplete",(e=>{let{activation:t,email:s,step:a,username:i}=e;this.setState({activation:t,email:s,step:a,username:i})})),this.state={step:e.step,activation:e.activation||"",email:e.email||"",username:e.username||""}}render(){const{backend_name:e,url:t}=this.props,{activation:s,email:a,step:i,username:n}=this.state;return"register"===i?(0,o.Z)(b,{backend_name:e,email:a,url:t,username:n,onRegistrationComplete:this.handleRegistrationComplete}):(0,o.Z)(f,{activation:s,backend_name:e,email:a,url:t,username:n})}}var N=s(4869);r.Z.addInitializer({name:"component:social-auth",initializer:function(e){if("misago:social-complete"===e.get("CURRENT_LINK")){const t=e.get("SOCIAL_AUTH_FORM");(0,N.Z)(i().createElement(_,t),"page-mount")}},after:"store"})},84333:function(e,t,s){"use strict";var a,i,o,n=s(37424),r=s(22928),l=s(4942),d=s(57588),c=s.n(d),p=s(87462),u=s(43345),h=s(96359),m=s(8154),v=s(7738),g=s(78657),Z=s(59801),b=s(53904),f=s(90287),_=class extends u.Z{constructor(e){super(e),(0,l.Z)(this,"onUsernameChange",(e=>{this.changeValue("username",e.target.value)})),this.state={isLoading:!1,username:""}}clean(){return!!this.state.username.trim().length||(b.Z.error(pgettext("add private thread participant","You have to enter user name.")),!1)}send(){return g.Z.patch(this.props.thread.api.index,[{op:"add",path:"participants",value:this.state.username},{op:"add",path:"acl",value:1}])}handleSuccess(e){f.Z.dispatch((0,v.y8)(e)),f.Z.dispatch(m.gx(e.participants)),b.Z.success(pgettext("add private thread participant","New participant has been added to thread.")),Z.Z.hide()}render(){return(0,r.Z)("div",{className:"modal-dialog modal-sm",role:"document"},void 0,(0,r.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,r.Z)("div",{className:"modal-content"},void 0,a||(a=(0,r.Z)(N,{})),(0,r.Z)("div",{className:"modal-body"},void 0,(0,r.Z)(h.Z,{for:"id_username",label:pgettext("add private thread participant field","User to add")},void 0,(0,r.Z)("input",{id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.onUsernameChange,type:"text",value:this.state.username}))),(0,r.Z)("div",{className:"modal-footer"},void 0,(0,r.Z)("button",{className:"btn btn-block btn-primary",disabled:this.state.isLoading},void 0,pgettext("add private thread participant btn","Add participant")),(0,r.Z)("button",{className:"btn btn-block btn-default","data-dismiss":"modal",disabled:this.state.isLoading,type:"button"},void 0,pgettext("add private thread participant btn","Cancel"))))))}};function N(e){return(0,r.Z)("div",{className:"modal-header"},void 0,(0,r.Z)("button",{"aria-label":pgettext("modal","Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,i||(i=(0,r.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,r.Z)("h4",{className:"modal-title"},void 0,pgettext("add private thread participant modal title","Add participant")))}var x,y,w,k=class extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{Z.Z.show((0,r.Z)(_,{thread:this.props.thread}))}))}render(){return this.props.thread.acl.can_add_participants?(0,r.Z)("div",{className:"col-xs-12 col-sm-3"},void 0,(0,r.Z)("button",{className:"btn btn-default btn-block",onClick:this.onClick,type:"button"},void 0,o||(o=(0,r.Z)("span",{className:"material-icon"},void 0,"person_add")),pgettext("add participant btn","Add participant"))):null}},C=s(32233),S=class extends c().Component{constructor(e){super(e),(0,l.Z)(this,"onClick",(()=>{let e=!1;if(this.isUser)e=window.confirm(pgettext("private thread owner change","Are you sure you want to take over this thread?"));else{const t=pgettext("private thread owner change","Are you sure you want to change thread owner to %(user)s?");e=window.confirm(interpolate(t,{user:this.props.participant.username},!0))}var t,s;e&&(t=this.props.thread,s=this.props.participant,g.Z.patch(t.api.index,[{op:"replace",path:"owner",value:s.id},{op:"add",path:"acl",value:1}]).then((e=>{f.Z.dispatch((0,v.y8)(e)),f.Z.dispatch(m.gx(e.participants));const t=pgettext("thread participants actions","%(user)s has been made new thread owner.");b.Z.success(interpolate(t,{user:s.username},!0))}),(e=>{b.Z.apiError(e)})))})),this.isUser=e.participant.id===e.user.id}render(){return this.props.participant.is_owner?null:this.props.thread.acl.can_change_owner?(0,r.Z)("li",{},void 0,(0,r.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,pgettext("private thread owner change btn","Make owner"))):null}},E=class extends c().Component{constructor(e){super(e),(0,l.Z)(this,"onClick",(()=>{let e=!1;if(this.isUser)e=window.confirm(pgettext("private thread leave","Are you sure you want to leave this thread?"));else{const t=pgettext("private thread leave","Are you sure you want to remove %(user)s from this thread?");e=window.confirm(interpolate(t,{user:this.props.participant.username},!0))}var t,s;e&&(this.isUser?(t=this.props.thread,s=this.props.participant,g.Z.patch(t.api.index,[{op:"remove",path:"participants",value:s.id}]).then((()=>{b.Z.success(pgettext("thread participants actions","You have left this thread.")),window.setTimeout((()=>{window.location=C.Z.get("PRIVATE_THREADS_URL")}),3e3)}),(e=>{b.Z.apiError(e)}))):function(e,t){g.Z.patch(e.api.index,[{op:"remove",path:"participants",value:t.id},{op:"add",path:"acl",value:1}]).then((e=>{f.Z.dispatch((0,v.y8)(e)),f.Z.dispatch(m.gx(e.participants));const s=pgettext("thread participants actions","%(user)s has been removed from this thread.");b.Z.success(interpolate(s,{user:t.username},!0))}),(e=>{b.Z.apiError(e)}))}(this.props.thread,this.props.participant))})),this.isUser=e.participant.id===e.user.id}render(){const e=this.props.user.acl.can_moderate_private_threads;return this.props.userIsOwner||this.isUser||e?(0,r.Z)("li",{},void 0,(0,r.Z)("button",{className:"btn btn-link",onClick:this.onClick,type:"button"},void 0,this.isUser?pgettext("private thread leave btn","Leave thread"):pgettext("private thread leave btn","Remove"))):null}},T=s(19605);function L(e){const t=e.participant;let s="btn btn-default";return t.is_owner&&(s="btn btn-primary"),s+=" btn-user btn-block",(0,r.Z)("div",{className:"col-xs-12 col-sm-3 col-md-2 participant-card"},void 0,(0,r.Z)("div",{className:"dropdown"},void 0,(0,r.Z)("button",{"aria-haspopup":"true","aria-expanded":"false",className:s,"data-toggle":"dropdown",type:"button"},void 0,(0,r.Z)(T.ZP,{size:"34",user:t}),(0,r.Z)("span",{className:"btn-text"},void 0,t.username)),(0,r.Z)("ul",{className:"dropdown-menu stick-to-bottom"},void 0,(0,r.Z)(P,{isOwner:t.is_owner}),x||(x=(0,r.Z)("li",{className:"dropdown-header"})),(0,r.Z)("li",{},void 0,(0,r.Z)("a",{href:t.url},void 0,pgettext("thread participants profile link","See profile"))),y||(y=(0,r.Z)("li",{role:"separator",className:"divider"})),c().createElement(S,e),c().createElement(E,e))))}function P(e){let{isOwner:t}=e;return t?(0,r.Z)("li",{className:"dropdown-header dropdown-header-owner"},void 0,w||(w=(0,r.Z)("span",{className:"material-icon"},void 0,"start")),(0,r.Z)("span",{className:"icon-text"},void 0,pgettext("thread participants owner status","Thread owner"))):null}function O(e){let{participants:t,thread:s,user:a,userIsOwner:i}=e;return(0,r.Z)("div",{className:"participants-cards"},void 0,(0,r.Z)("div",{className:"row"},void 0,t.map((e=>(0,r.Z)(L,{participant:e,thread:s,user:a,userIsOwner:i},e.id)))))}function I(e){return e.participants.length?(0,r.Z)("div",{className:"panel panel-default panel-participants"},void 0,(0,r.Z)("div",{className:"panel-body"},void 0,c().createElement(O,(0,p.Z)({userIsOwner:A(e.user,e.participants)},e)),(0,r.Z)("div",{className:"row"},void 0,(0,r.Z)(k,{thread:e.thread}),(0,r.Z)("div",{className:"col-xs-12 col-sm-9"},void 0,(0,r.Z)("p",{},void 0,function(e){const t=e.length,s=npgettext("thread participants stat","This thread has %(users)s participant.","This thread has %(users)s participants.",t);return interpolate(s,{users:t},!0)}(e.participants)))))):null}function A(e,t){return t[0].id===e.id}var R,D=s(30381),j=s.n(D);function U(e){return(0,r.Z)("div",{className:"poll-choices-bars"},void 0,e.poll.choices.map((t=>(0,r.Z)(z,{choice:t,poll:e.poll},t.hash))))}function z(e){let t=0;return e.choice.votes&&e.poll.votes&&(t=Math.ceil(100*e.choice.votes/e.poll.votes)),(0,r.Z)("dl",{className:"dl-horizontal"},void 0,(0,r.Z)("dt",{},void 0,e.choice.label),(0,r.Z)("dd",{},void 0,(0,r.Z)("div",{className:"progress"},void 0,(0,r.Z)("div",{className:"progress-bar",role:"progressbar","aria-valuenow":t,"aria-valuemin":"0","aria-valuemax":"100",style:{width:t+"%"}},void 0,(0,r.Z)("span",{className:"sr-only"},void 0,B(e.votes,e.proc)))),(0,r.Z)("ul",{className:"list-unstyled list-inline poll-chart"},void 0,(0,r.Z)(M,{proc:t,votes:e.choice.votes}),(0,r.Z)(q,{selected:e.choice.selected}))))}function M(e){return(0,r.Z)("li",{className:"poll-chart-votes"},void 0,B(e.votes,e.proc))}function B(e,t){const s=npgettext("thread poll","%(votes)s vote, %(proc)s% of total.","%(votes)s votes, %(proc)s% of total.",e);return interpolate(s,{votes:e,proc:t},!0)}function q(e){return e.selected?(0,r.Z)("li",{className:"poll-chart-selected"},void 0,R||(R=(0,r.Z)("span",{className:"material-icon"},void 0,"check_box")),pgettext("thread poll","You've voted on this choice.")):null}var F,H,Y,V=s(30337),G=s(3784),$=class extends c().Component{constructor(e){super(e),this.state={isLoading:!0,error:null,data:[]}}componentDidMount(){g.Z.get(this.props.poll.api.votes).then((e=>{const t=e.map((e=>Object.assign({},e,{voters:e.voters.map((e=>Object.assign({},e,{voted_on:j()(e.voted_on)})))})));this.setState({isLoading:!1,data:t})}),(e=>{this.setState({isLoading:!1,error:e.detail})}))}render(){return(0,r.Z)("div",{className:"modal-dialog"+(this.state.error?" modal-message":" modal-sm"),role:"document"},void 0,(0,r.Z)("div",{className:"modal-content"},void 0,(0,r.Z)("div",{className:"modal-header"},void 0,(0,r.Z)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":pgettext("modal","Close")},void 0,F||(F=(0,r.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,r.Z)("h4",{className:"modal-title"},void 0,pgettext("thread poll","Poll votes"))),(0,r.Z)(W,{data:this.state.data,error:this.state.error,isLoading:this.state.isLoading})))}};function W(e){return e.isLoading?H||(H=(0,r.Z)(G.Z,{})):e.error?(0,r.Z)(V.Z,{icon:"error_outline",message:e.error}):(0,r.Z)(Q,{data:e.data})}function Q(e){return(0,r.Z)("div",{className:"modal-body modal-poll-votes"},void 0,(0,r.Z)("ul",{className:"list-unstyled votes-details"},void 0,e.data.map((e=>c().createElement(X,(0,p.Z)({key:e.hash},e))))))}function X(e){return(0,r.Z)("li",{},void 0,(0,r.Z)("h4",{},void 0,e.label),(0,r.Z)(K,{votes:e.votes}),(0,r.Z)(J,{voters:e.voters}),Y||(Y=(0,r.Z)("hr",{})))}function K(e){const t=npgettext("thread poll","%(votes)s user has voted for this choice.","%(votes)s users have voted for this choice.",e.votes),s=interpolate(t,{votes:e.votes},!0);return(0,r.Z)("p",{},void 0,s)}function J(e){return e.voters.length?(0,r.Z)("ul",{className:"list-unstyled"},void 0,e.voters.map((e=>c().createElement(ee,(0,p.Z)({key:e.username},e))))):null}function ee(e){return e.url?(0,r.Z)("li",{},void 0,(0,r.Z)("a",{className:"item-title",href:e.url},void 0,e.username)," ",(0,r.Z)(te,{voted_on:e.voted_on})):(0,r.Z)("li",{},void 0,(0,r.Z)("strong",{},void 0,e.username)," ",(0,r.Z)(te,{voted_on:e.voted_on}))}function te(e){return(0,r.Z)("abbr",{className:"text-muted",title:e.voted_on.format("LLL")},void 0,e.voted_on.fromNow())}var se=s(59752),ae=s(64646);function ie(e){const{isPollOver:t,poll:s,showVoting:a,thread:i}=e;if(!function(e,t,s){return s.is_public||t.can_delete||t.can_edit||t.can_see_votes||t.can_vote&&!e&&(!s.hasSelectedChoices||s.allow_revotes)}(t,s.acl,s))return null;const o=[],n=s.acl.can_vote,l=!s.hasSelectedChoices||s.allow_revotes;return n&&l&&o.push(0),(s.is_public||s.acl.can_see_votes)&&o.push(1),s.acl.can_edit&&o.push(2),s.acl.can_delete&&o.push(3),(0,r.Z)("div",{className:"row poll-options"},void 0,(0,r.Z)(ne,{controls:o,isPollOver:t,poll:s,showVoting:a}),(0,r.Z)(re,{controls:o,poll:s}),(0,r.Z)(le,{controls:o,poll:s,thread:i,onClick:e.edit}),(0,r.Z)(de,{controls:o,poll:s}))}function oe(e,t){let s="col-xs-6";return 1===e.length&&(s="col-xs-12"),3===e.length&&e[0]===t&&(s="col-xs-12"),s+" col-sm-3 col-md-2"}function ne(e){const t=e.poll.acl.can_vote,s=!e.poll.hasSelectedChoices||e.poll.allow_revotes;return t&&s?(0,r.Z)("div",{className:oe(e.controls,0)},void 0,(0,r.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:e.poll.isBusy,onClick:e.showVoting,type:"button"},void 0,pgettext("thread poll","Vote"))):null}class re extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{Z.Z.show((0,r.Z)($,{poll:this.props.poll}))}))}render(){return this.props.poll.is_public||this.props.poll.acl.can_see_votes?(0,r.Z)("div",{className:oe(this.props.controls,1)},void 0,(0,r.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},void 0,pgettext("thread poll","See votes"))):null}}function le(e){return e.poll.acl.can_edit?(0,r.Z)("div",{className:oe(e.controls,2)},void 0,(0,r.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:e.poll.isBusy,onClick:e.onClick,type:"button"},void 0,pgettext("thread poll","Edit"))):null}class de extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{if(!window.confirm(pgettext("thread poll","Are you sure you want to delete this poll? This action is not reversible.")))return!1;f.Z.dispatch(se.n6()),g.Z.delete(this.props.poll.api.index).then(this.handleSuccess,this.handleError)})),(0,l.Z)(this,"handleSuccess",(e=>{b.Z.success(pgettext("thread poll","Poll has been deleted")),f.Z.dispatch(se.Od()),f.Z.dispatch(v.y8(e))})),(0,l.Z)(this,"handleError",(e=>{b.Z.apiError(e),f.Z.dispatch(se.Ar())}))}render(){return this.props.poll.acl.can_delete?(0,r.Z)("div",{className:oe(this.props.controls,3)},void 0,(0,r.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:this.props.poll.isBusy,onClick:this.onClick,type:"button"},void 0,pgettext("thread poll","Delete"))):null}}var ce=s(89627);const pe='%(relative)s';function ue(e){return(0,r.Z)("ul",{className:"list-unstyled list-inline poll-details"},void 0,(0,r.Z)(be,{votes:e.poll.votes}),(0,r.Z)(ge,{poll:e.poll}),(0,r.Z)(fe,{poll:e.poll}),(0,r.Z)(he,{poll:e.poll}))}function he(e){const t=interpolate((0,ce.Z)(pgettext("thread poll","Started by %(poster)s %(posted_on)s.")),{poster:me(e.poll),posted_on:ve(e.poll)},!0);return(0,r.Z)("li",{className:"poll-info-creation",dangerouslySetInnerHTML:{__html:t}})}function me(e){return e.url.poster?interpolate('%(user)s',{url:(0,ce.Z)(e.url.poster),user:(0,ce.Z)(e.poster_name)},!0):interpolate('%(user)s',{user:(0,ce.Z)(e.poster_name)},!0)}function ve(e){return interpolate(pe,{absolute:(0,ce.Z)(e.posted_on.format("LLL")),relative:(0,ce.Z)(e.posted_on.fromNow())},!0)}function ge(e){if(!e.poll.length)return null;const t=interpolate((0,ce.Z)(pgettext("thread poll","Voting ends %(ends_on)s.")),{ends_on:Ze(e.poll)},!0);return(0,r.Z)("li",{className:"poll-info-ends-on",dangerouslySetInnerHTML:{__html:t}})}function Ze(e){return interpolate(pe,{absolute:(0,ce.Z)(e.endsOn.format("LLL")),relative:(0,ce.Z)(e.endsOn.fromNow())},!0)}function be(e){const t=npgettext("thread poll","%(votes)s vote.","%(votes)s votes.",e.votes),s=interpolate(t,{votes:e.votes},!0);return(0,r.Z)("li",{className:"poll-info-votes"},void 0,s)}function fe(e){return e.poll.is_public?(0,r.Z)("li",{className:"poll-info-public"},void 0,pgettext("thread poll","Voting is public.")):null}function _e(e){return(0,r.Z)("div",{className:"panel panel-default panel-poll"},void 0,(0,r.Z)("div",{className:"panel-body"},void 0,(0,r.Z)("h2",{},void 0,e.poll.question),(0,r.Z)(ue,{poll:e.poll}),(0,r.Z)(U,{poll:e.poll}),(0,r.Z)(ie,{isPollOver:e.isPollOver,poll:e.poll,edit:e.edit,showVoting:e.showVoting,thread:e.thread})))}function Ne(e){return(0,r.Z)("ul",{className:"list-unstyled list-inline poll-help"},void 0,(0,r.Z)(xe,{choicesLeft:e.choicesLeft}),(0,r.Z)(ye,{poll:e.poll}))}function xe(e){let{choicesLeft:t}=e;if(0===t)return(0,r.Z)("li",{className:"poll-help-choices-left"},void 0,pgettext("thread poll","You can't select any more choices."));const s=npgettext("thread poll","You can select %(choices)s more choice.","You can select %(choices)s more choices.",t),a=interpolate(s,{choices:t},!0);return(0,r.Z)("li",{className:"poll-help-choices-left"},void 0,a)}function ye(e){return e.poll.allow_revotes?(0,r.Z)("li",{className:"poll-help-allow-revotes"},void 0,pgettext("thread poll","You can change your vote later.")):(0,r.Z)("li",{className:"poll-help-no-revotes"},void 0,pgettext("thread poll","Votes are final."))}function we(e){return(0,r.Z)("ul",{className:"list-unstyled poll-select-choices"},void 0,e.choices.map((t=>(0,r.Z)(ke,{choice:t,toggleChoice:e.toggleChoice},t.hash))))}class ke extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{this.props.toggleChoice(this.props.choice.hash)}))}render(){return(0,r.Z)("li",{className:"poll-select-choice"},void 0,(0,r.Z)("button",{className:this.props.choice.selected?"btn btn-selected":"btn",onClick:this.onClick,type:"button"},void 0,(0,r.Z)("span",{className:"material-icon"},void 0,this.props.choice.selected?"check_box":"check_box_outline_blank"),(0,r.Z)("strong",{},void 0,this.props.choice.label)))}}function Ce(e,t){let s=[];for(const e in t){const a=t[e];a.selected&&s.push(a)}return e.allowed_choices-s.length}var Se,Ee=s(82211),Te=class extends u.Z{constructor(e){super(e),(0,l.Z)(this,"toggleChoice",(e=>{const t=function(e,t){for(const s in e){const a=e[s];if(a.hash===t)return a}return null}(this.state.choices,e);let s=null;s=t.selected?this.deselectChoice(t,e):this.selectChoice(t,e),this.setState({choices:s,choicesLeft:Ce(this.props.poll,s)})})),(0,l.Z)(this,"selectChoice",((e,t)=>{if(!Ce(this.props.poll,this.state.choices))for(const e in this.state.choices.slice()){const s=this.state.choices[e];if(s.selected&&s.hash!=t){s.selected=!1;break}}return this.state.choices.map((e=>Object.assign({},e,{selected:e.hash==t||e.selected})))})),(0,l.Z)(this,"deselectChoice",((e,t)=>this.state.choices.map((e=>Object.assign({},e,{selected:e.hash!=t&&e.selected}))))),this.state={isLoading:!1,choices:e.poll.choices,choicesLeft:Ce(e.poll,e.poll.choices)}}clean(){return this.state.choicesLeft!==this.props.poll.allowed_choices||(b.Z.error(pgettext("thread poll vote","You need to select at least one choice")),!1)}send(){let e=[];for(const t in this.state.choices.slice()){const s=this.state.choices[t];s.selected&&e.push(s.hash)}return g.Z.post(this.props.poll.api.votes,e)}handleSuccess(e){f.Z.dispatch(se.gx(e)),b.Z.success(pgettext("thread poll vote","Your vote has been saved.")),this.props.showResults()}handleError(e){400===e.status?b.Z.error(e.detail):b.Z.apiError(e)}render(){const e=[];return this.props.poll.acl.can_vote&&e.push(0),(this.props.poll.is_public||this.props.poll.acl.can_see_votes)&&e.push(1),this.props.poll.acl.can_edit&&e.push(2),this.props.poll.acl.can_delete&&e.push(3),(0,r.Z)("div",{className:"panel panel-default panel-poll"},void 0,(0,r.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,r.Z)("div",{className:"panel-body"},void 0,(0,r.Z)("h2",{},void 0,this.props.poll.question),(0,r.Z)(ue,{poll:this.props.poll}),(0,r.Z)(we,{choices:this.state.choices,toggleChoice:this.toggleChoice}),(0,r.Z)(Ne,{choicesLeft:this.state.choicesLeft,poll:this.props.poll})),(0,r.Z)("div",{className:"panel-footer"},void 0,(0,r.Z)("div",{className:"row"},void 0,(0,r.Z)("div",{className:oe(e,0)},void 0,(0,r.Z)(Ee.Z,{className:"btn-primary btn-block btn-sm",loading:this.state.isLoading},void 0,pgettext("thread poll vote btn","Save your vote"))),(0,r.Z)("div",{className:oe(e,1)},void 0,(0,r.Z)("button",{className:"btn btn-default btn-block btn-sm",disabled:this.state.isLoading,onClick:this.props.showResults,type:"button"},void 0,pgettext("thread poll vote btn","See results"))),(0,r.Z)(le,{controls:e,poll:this.props.poll,thread:this.props.thread,onClick:this.props.edit}),(0,r.Z)(de,{controls:e,poll:this.props.poll})))))}},Le=class extends c().Component{constructor(e){super(e),(0,l.Z)(this,"showResults",(()=>{this.setState({showResults:!0})})),(0,l.Z)(this,"showVoting",(()=>{this.setState({showResults:!1})}));let t=!0;e.user.id&&!e.poll.hasSelectedChoices&&(t=!1),this.state={showResults:t}}render(){if(!this.props.thread.poll)return null;const e=function(e){return!!e.length&&j()().isAfter(e.endsOn)}(this.props.poll);return e||!this.props.poll.acl.can_vote||this.state.showResults?c().createElement(_e,(0,p.Z)({isPollOver:e,showVoting:this.showVoting},this.props)):c().createElement(Te,(0,p.Z)({showResults:this.showResults},this.props))}},Pe=s(54031),Oe=class extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onAdd",(()=>{let e=this.props.choices.slice();e.push({hash:(0,Pe.ZP)(12),label:""}),this.props.setChoices(e)})),(0,l.Z)(this,"onChange",((e,t)=>{const s=this.props.choices.map((s=>(s.hash===e&&(s.label=t),s)));this.props.setChoices(s)})),(0,l.Z)(this,"onDelete",(e=>{const t=this.props.choices.filter((t=>t.hash!==e));this.props.setChoices(t)}))}render(){return(0,r.Z)("div",{className:"poll-choices-control"},void 0,(0,r.Z)("ul",{className:"list-group"},void 0,this.props.choices.map((e=>(0,r.Z)(Ie,{canDelete:this.props.choices.length>2,choice:e,disabled:this.props.disabled,onChange:this.onChange,onDelete:this.onDelete},e.hash)))),(0,r.Z)("button",{className:"btn btn-default btn-sm",disabled:this.props.disabled,onClick:this.onAdd,type:"button"},void 0,pgettext("thread poll","Add choice")))}};class Ie extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onChange",(e=>{this.props.onChange(this.props.choice.hash,e.target.value)})),(0,l.Z)(this,"onDelete",(()=>{(0===this.props.choice.label.length||window.confirm(pgettext("thread poll","Are you sure you want to remove this choice?")))&&this.props.onDelete(this.props.choice.hash)}))}render(){return(0,r.Z)("li",{className:"list-group-item"},void 0,(0,r.Z)("button",{className:"btn",disabled:!this.props.canDelete||this.props.disabled,onClick:this.onDelete,title:pgettext("thread poll","Remove this choice"),type:"button"},void 0,Se||(Se=(0,r.Z)("span",{className:"material-icon"},void 0,"close"))),(0,r.Z)("input",{disabled:this.props.disabled,maxLength:"255",placeholder:pgettext("thread poll","Poll choice"),type:"text",onChange:this.onChange,value:this.props.choice.label}))}}var Ae=s(7227),Re=class extends u.Z{constructor(e){super(e),(0,l.Z)(this,"setChoices",(e=>{this.setState((t=>({choices:e,errors:Object.assign({},t.errors,{choices:null})})))})),(0,l.Z)(this,"onCancel",(()=>{let e=!1;if(""===this.state.question&&this.state.choices&&this.state.choices.every((e=>""===e.label))&&0===this.state.length&&1===this.state.allowed_choices)return this.props.close();e=this.props.poll?window.confirm(pgettext("thread poll","Are you sure you want to discard changes?")):window.confirm(pgettext("thread poll","Are you sure you want to discard new poll?")),e&&this.props.close()}));const t=e.poll.id?e.poll:{question:"",choices:[{hash:"choice-10000",label:""},{hash:"choice-20000",label:""}],length:0,allowed_choices:1,allow_revotes:0,is_public:0};this.state={isLoading:!1,isEdit:!!t.id,question:t.question,choices:t.choices,length:t.length,allowed_choices:t.allowed_choices,allow_revotes:t.allow_revotes,is_public:t.is_public,validators:{question:[],choices:[],length:[],allowed_choices:[]},errors:{}}}send(){const e={question:this.state.question,choices:this.state.choices,length:this.state.length,allowed_choices:this.state.allowed_choices,allow_revotes:this.state.allow_revotes,is_public:this.state.is_public};return this.state.isEdit?g.Z.put(this.props.poll.api.index,e):g.Z.post(this.props.thread.api.poll,e)}handleSuccess(e){f.Z.dispatch(se.gx(e)),this.state.isEdit?b.Z.success(pgettext("thread poll","Poll has been edited.")):b.Z.success(pgettext("thread poll","Poll has been posted.")),this.props.close()}handleError(e){400===e.status?(e.non_field_errors&&(e.allowed_choices=e.non_field_errors),this.setState({errors:Object.assign({},e)}),b.Z.error(gettext("Form contains errors."))):b.Z.apiError(e)}render(){return(0,r.Z)("div",{className:"poll-form"},void 0,(0,r.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,r.Z)("div",{className:"panel panel-default panel-form"},void 0,(0,r.Z)("div",{className:"panel-heading"},void 0,(0,r.Z)("h3",{className:"panel-title"},void 0,this.state.isEdit?pgettext("thread poll","Edit poll"):pgettext("thread poll","Add poll"))),(0,r.Z)("div",{className:"panel-body"},void 0,(0,r.Z)("fieldset",{},void 0,(0,r.Z)("legend",{},void 0,pgettext("thread poll","Question and choices")),(0,r.Z)(h.Z,{label:pgettext("thread poll","Poll question"),for:"id_questions",validation:this.state.errors.question},void 0,(0,r.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_questions",onChange:this.bindInput("question"),type:"text",maxLength:"255",value:this.state.question})),(0,r.Z)(h.Z,{label:pgettext("thread poll","Available choices"),validation:this.state.errors.choices},void 0,(0,r.Z)(Oe,{choices:this.state.choices,disabled:this.state.isLoading,setChoices:this.setChoices}))),(0,r.Z)("fieldset",{},void 0,(0,r.Z)("legend",{},void 0,pgettext("thread poll","Voting")),(0,r.Z)("div",{className:"row"},void 0,(0,r.Z)("div",{className:"col-xs-12 col-sm-6"},void 0,(0,r.Z)(h.Z,{label:pgettext("thread poll","Poll length"),helpText:pgettext("thread poll","Enter number of days for which voting in this poll should be possible or zero to run this poll indefinitely."),for:"id_length",validation:this.state.errors.length},void 0,(0,r.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_length",onChange:this.bindInput("length"),type:"text",value:this.state.length}))),(0,r.Z)("div",{className:"col-xs-12 col-sm-6"},void 0,(0,r.Z)(h.Z,{label:pgettext("thread poll","Allowed choices"),for:"id_allowed_choices",validation:this.state.errors.allowed_choices},void 0,(0,r.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_allowed_choices",onChange:this.bindInput("allowed_choices"),type:"text",maxLength:"255",value:this.state.allowed_choices})))),(0,r.Z)("div",{className:"row"},void 0,(0,r.Z)(De,{bindInput:this.bindInput,disabled:this.state.isLoading,isEdit:this.state.isEdit,value:this.state.is_public}),(0,r.Z)("div",{className:"col-xs-12 col-sm-6"},void 0,(0,r.Z)(h.Z,{label:pgettext("thread poll","Allow vote changes"),for:"id_allow_revotes"},void 0,(0,r.Z)(Ae.Z,{id:"id_allow_revotes",disabled:this.state.isLoading,iconOn:"check",iconOff:"close",labelOn:pgettext("thread poll","Allow participants to change their vote"),labelOff:pgettext("thread poll","Don't allow participants to change their vote"),onChange:this.bindInput("allow_revotes"),value:this.state.allow_revotes})))))),(0,r.Z)("div",{className:"panel-footer text-right"},void 0,(0,r.Z)("button",{className:"btn btn-default",disabled:this.state.isLoading,onClick:this.onCancel,type:"button"},void 0,pgettext("thread poll","Cancel"))," ",(0,r.Z)(Ee.Z,{className:"btn-primary",loading:this.state.isLoading},void 0,this.state.isEdit?pgettext("thread poll","Save changes"):pgettext("thread poll","Post poll"))))))}};function De(e){return e.isEdit?null:(0,r.Z)("div",{className:"col-xs-12 col-sm-6"},void 0,(0,r.Z)(h.Z,{label:pgettext("thread poll","Make voting public"),helpText:pgettext("thread poll","Making voting public will allow everyone to access detailed list of votes, showing which users voted for which choices and at which times. This option can't be changed after poll's creation. Moderators may see voting details for all polls."),for:"id_is_public"},void 0,(0,r.Z)(Ae.Z,{id:"id_is_public",disabled:e.disabled,iconOn:"visibility",iconOff:"visibility_off",labelOn:pgettext("thread poll","Votes are public"),labelOff:pgettext("thread poll","Votes are hidden"),onChange:e.bindInput("is_public"),value:e.value})))}const je={changed_title:"edit",pinned_globally:"bookmark",pinned_locally:"bookmark_border",unpinned:"panorama_fish_eye",moved:"arrow_forward",merged:"call_merge",approved:"done",opened:"lock_open",closed:"lock_outline",unhid:"visibility",hid:"visibility_off",changed_owner:"grade",tookover:"grade",added_participant:"person_add",owner_left:"person_outline",participant_left:"person_outline",removed_participant:"remove_circle_outline"};var Ue=e=>(0,r.Z)("span",{className:"event-icon-bg"},void 0,(0,r.Z)("span",{className:"material-icon"},void 0,je[e.post.event_type])),ze=s(92747);function Me(e){return e.post.acl.can_hide?(0,r.Z)("li",{className:"event-controls"},void 0,c().createElement(Be,e),c().createElement(qe,e),c().createElement(Fe,e)):null}class Be extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{f.Z.dispatch(ze.r$(this.props.post,{is_hidden:!0,hidden_on:j()(),hidden_by_name:this.props.user.username,url:Object.assign(this.props.post.url,{hidden_by:this.props.user.url})})),g.Z.patch(this.props.post.api.index,[{op:"replace",path:"is-hidden",value:!0}]).then((e=>{f.Z.dispatch(ze.r$(this.props.post,e))}),(e=>{400===e.status?b.Z.error(e.detail[0]):b.Z.apiError(e),f.Z.dispatch(ze.r$(this.props.post,{is_hidden:!1}))}))}))}render(){return this.props.post.is_hidden?null:(0,r.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,pgettext("event hide btn","Hide"))}}class qe extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{f.Z.dispatch(ze.r$(this.props.post,{is_hidden:!1})),g.Z.patch(this.props.post.api.index,[{op:"replace",path:"is-hidden",value:!1}]).then((e=>{f.Z.dispatch(ze.r$(this.props.post,e))}),(e=>{400===e.status?b.Z.error(e.detail[0]):b.Z.apiError(e),f.Z.dispatch(ze.r$(this.props.post,{is_hidden:!0}))}))}))}render(){return this.props.post.is_hidden?(0,r.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,pgettext("event reveal btn","Unhide")):null}}class Fe extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{window.confirm(gettext("event delete","Are you sure you wish to delete this event? This action is not reversible!"))&&this.delete()})),(0,l.Z)(this,"delete",(()=>{f.Z.dispatch(ze.r$(this.props.post,{isDeleted:!0})),g.Z.delete(this.props.post.api.index).then((()=>{b.Z.success(pgettext("event delete","Event has been deleted."))}),(e=>{400===e.status?b.Z.error(e.detail[0]):b.Z.apiError(e),f.Z.dispatch(ze.r$(this.props.post,{isDeleted:!1}))}))}))}render(){return(0,r.Z)("button",{type:"button",className:"btn btn-link",onClick:this.onClick},void 0,pgettext("event delete btn","Delete"))}}const He='%(user)s',Ye='%(user)s';function Ve(e){return(0,r.Z)("ul",{className:"list-inline event-info"},void 0,c().createElement(Ge,e),c().createElement($e,e),c().createElement(Me,e))}function Ge(e){if(e.post.is_hidden){let t=null;t=e.post.url.hidden_by?interpolate(Ye,{url:(0,ce.Z)(e.post.url.hidden_by),user:(0,ce.Z)(e.post.hidden_by_name)},!0):interpolate(He,{user:(0,ce.Z)(e.post.hidden_by_name)},!0);const s=interpolate('%(relative)s',{absolute:(0,ce.Z)(e.post.hidden_on.format("LLL")),relative:(0,ce.Z)(e.post.hidden_on.fromNow())},!0),a=interpolate((0,ce.Z)(pgettext("event info","Hidden by %(event_by)s %(event_on)s.")),{event_by:t,event_on:s},!0);return(0,r.Z)("li",{className:"event-hidden-message",dangerouslySetInnerHTML:{__html:a}})}return null}function $e(e){let t=null;t=e.post.poster?interpolate(Ye,{url:(0,ce.Z)(e.post.poster.url),user:(0,ce.Z)(e.post.poster_name)},!0):interpolate(He,{user:(0,ce.Z)(e.post.poster_name)},!0);const s=interpolate('%(relative)s',{url:(0,ce.Z)(e.post.url.index),absolute:(0,ce.Z)(e.post.posted_on.format("LLL")),relative:(0,ce.Z)(e.post.posted_on.fromNow())},!0),a=interpolate((0,ce.Z)(pgettext("event info","By %(event_by)s %(event_on)s.")),{event_by:t,event_on:s},!0);return(0,r.Z)("li",{className:"event-posters",dangerouslySetInnerHTML:{__html:a}})}const We={pinned_globally:pgettext("event message","Thread has been pinned globally."),pinned_locally:pgettext("event message","Thread has been pinned locally."),unpinned:pgettext("event message","Thread has been unpinned."),approved:pgettext("event message","Thread has been approved."),opened:pgettext("event message","Thread has been opened."),closed:pgettext("event message","Thread has been closed."),unhid:pgettext("event message","Thread has been revealed."),hid:pgettext("event message","Thread has been made hidden."),tookover:pgettext("event message","Took thread over."),owner_left:pgettext("event message","Owner has left thread. This thread is now closed."),participant_left:pgettext("event message","Participant has left thread.")},Qe='%(name)s',Xe='%(name)s';function Ke(e){return We[e.post.event_type]?(0,r.Z)("p",{className:"event-message"},void 0,We[e.post.event_type]):"changed_title"===e.post.event_type?c().createElement(Je,e):"moved"===e.post.event_type?c().createElement(et,e):"merged"===e.post.event_type?c().createElement(tt,e):"changed_owner"===e.post.event_type?c().createElement(st,e):"added_participant"===e.post.event_type?c().createElement(at,e):"removed_participant"===e.post.event_type?c().createElement(it,e):null}function Je(e){const t=(0,ce.Z)(pgettext("event message","Thread title has been changed from %(old_title)s.")),s=interpolate(Xe,{name:(0,ce.Z)(e.post.event_context.old_title)},!0),a=interpolate(t,{old_title:s},!0);return(0,r.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function et(e){const t=(0,ce.Z)(pgettext("event message","Thread has been moved from %(from_category)s.")),s=interpolate(Qe,{url:(0,ce.Z)(e.post.event_context.from_category.url),name:(0,ce.Z)(e.post.event_context.from_category.name)},!0),a=interpolate(t,{from_category:s},!0);return(0,r.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function tt(e){const t=(0,ce.Z)(pgettext("event message","The %(merged_thread)s thread has been merged into this thread.")),s=interpolate(Xe,{name:(0,ce.Z)(e.post.event_context.merged_thread)},!0),a=interpolate(t,{merged_thread:s},!0);return(0,r.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function st(e){const t=(0,ce.Z)(pgettext("event message","Changed thread owner to %(user)s.")),s=interpolate(Qe,{url:(0,ce.Z)(e.post.event_context.user.url),name:(0,ce.Z)(e.post.event_context.user.username)},!0),a=interpolate(t,{user:s},!0);return(0,r.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function at(e){const t=(0,ce.Z)(pgettext("event message","Added %(user)s to thread.")),s=interpolate(Qe,{url:(0,ce.Z)(e.post.event_context.user.url),name:(0,ce.Z)(e.post.event_context.user.username)},!0),a=interpolate(t,{user:s},!0);return(0,r.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function it(e){const t=(0,ce.Z)(pgettext("event message","Removed %(user)s from thread.")),s=interpolate(Qe,{url:(0,ce.Z)(e.post.event_context.user.url),name:(0,ce.Z)(e.post.event_context.user.username)},!0),a=interpolate(t,{user:s},!0);return(0,r.Z)("p",{className:"event-message",dangerouslySetInnerHTML:{__html:a}})}function ot(e){let{post:t}=e;return t.is_read?null:(0,r.Z)("div",{className:"event-label"},void 0,(0,r.Z)("span",{className:"label label-unread"},void 0,pgettext("event unread label","New event")))}var nt=class extends c().Component{constructor(e){super(e),(0,l.Z)(this,"initialize",(e=>{this.initialized=!0,this.observer=new IntersectionObserver((e=>e.forEach(this.callback))),this.observer.observe(e)})),(0,l.Z)(this,"callback",(e=>{!e.isIntersecting||this.props.post.is_read||this.primed||(window.setTimeout((()=>{g.Z.post(this.props.post.api.read)}),0),this.primed=!0,this.destroy())})),this.initialized=!1,this.primed=!1,this.observer=null}destroy(){this.observer&&(this.observer.disconnect(),this.observer=null)}componentWillUnmount(){this.destroy()}render(){const e=!this.initialized&&!this.primed&&!this.props.post.is_read;return c().createElement("div",{className:this.props.className,ref:t=>{t&&e&&this.initialize(t)}},this.props.children)}};function rt(e){let t="event";return e.post.isDeleted?t="hide":e.post.is_hidden&&(t="event post-hidden"),(0,r.Z)("li",{id:"post-"+e.post.id,className:t},void 0,(0,r.Z)(ot,{post:e.post}),(0,r.Z)("div",{className:"event-body"},void 0,(0,r.Z)("div",{className:"event-icon"},void 0,c().createElement(Ue,e)),(0,r.Z)(nt,{className:"event-content",post:e.post},void 0,c().createElement(Ke,e),c().createElement(Ve,e))))}var lt=s(69130),dt=s(48772);function ct(e){return(0,r.Z)("div",{className:"col-xs-12 col-md-6"},void 0,c().createElement(pt,e),(0,r.Z)("div",{className:"post-attachment"},void 0,(0,r.Z)("a",{href:e.attachment.url.index,className:"attachment-name item-title",target:"_blank"},void 0,e.attachment.filename),c().createElement(mt,e)))}function pt(e){return e.attachment.is_image?(0,r.Z)("div",{className:"post-attachment-preview"},void 0,c().createElement(ht,e)):(0,r.Z)("div",{className:"post-attachment-preview"},void 0,c().createElement(ut,e))}function ut(e){return(0,r.Z)("a",{href:e.attachment.url.index,className:"material-icon"},void 0,"insert_drive_file")}function ht(e){const t=e.attachment.url.thumb||e.attachment.url.index;return(0,r.Z)("a",{className:"post-thumbnail",href:e.attachment.url.index,target:"_blank",style:{backgroundImage:'url("'+(0,ce.Z)(t)+'")'}})}function mt(e){let t=null;t=e.attachment.url.uploader?interpolate('%(user)s',{url:(0,ce.Z)(e.attachment.url.uploader),user:(0,ce.Z)(e.attachment.uploader_name)},!0):interpolate('%(user)s',{user:(0,ce.Z)(e.attachment.uploader_name)},!0);const s=interpolate('%(relative)s',{absolute:(0,ce.Z)(e.attachment.uploaded_on.format("LLL")),relative:(0,ce.Z)(e.attachment.uploaded_on.fromNow())},!0),a=interpolate((0,ce.Z)(pgettext("post attachment","%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s.")),{filetype:e.attachment.filetype,size:(0,dt.Z)(e.attachment.size),uploader:t,uploaded_on:s},!0);return(0,r.Z)("p",{className:"post-attachment-description",dangerouslySetInnerHTML:{__html:a}})}function vt(e){return function(e){return(!e.is_hidden||e.acl.can_see_hidden)&&e.attachments}(e.post)?(0,r.Z)("div",{className:"post-attachments"},void 0,(0,lt.Z)(e.post.attachments,2).map((e=>{const t=e.map((e=>e?e.id:0)).join("_");return(0,r.Z)(gt,{row:e},t)}))):null}function gt(e){return(0,r.Z)("div",{className:"row"},void 0,e.row.map((e=>(0,r.Z)(ct,{attachment:e},e?e.id:0))))}var Zt,bt,ft,_t,Nt,xt,yt,wt=s(69092);function kt(e){return e.post.is_hidden&&!e.post.acl.can_see_hidden?c().createElement(St,e):e.post.content?c().createElement(Ct,e):c().createElement(Et,e)}function Ct(e){let{post:t}=e;const s="@"+(t.poster?t.poster.username:t.poster_name);return(0,r.Z)(nt,{className:"post-body",post:t},void 0,(0,r.Z)(wt.Z,{author:s,markup:t.content}))}function St(e){let t=null;t=e.post.hidden_by?interpolate('%(user)s',{url:(0,ce.Z)(e.post.url.hidden_by),user:(0,ce.Z)(e.post.hidden_by_name)},!0):interpolate('%(user)s',{user:(0,ce.Z)(e.post.hidden_by_name)},!0);const s=interpolate('%(relative)s',{absolute:(0,ce.Z)(e.post.hidden_on.format("LLL")),relative:(0,ce.Z)(e.post.hidden_on.fromNow())},!0),a=interpolate((0,ce.Z)(pgettext("post body hidden","Hidden by %(hidden_by)s %(hidden_on)s.")),{hidden_by:t,hidden_on:s},!0);return(0,r.Z)(nt,{className:"post-body post-body-hidden",post:e.post},void 0,(0,r.Z)("p",{className:"lead"},void 0,pgettext("post body hidden","This post is hidden. You cannot see its contents.")),(0,r.Z)("p",{className:"text-muted",dangerouslySetInnerHTML:{__html:a}}))}function Et(e){return(0,r.Z)(nt,{className:"post-body post-body-invalid",post:e.post},void 0,(0,r.Z)("p",{className:"lead"},void 0,pgettext("post body invalid","This post's contents cannot be displayed.")),(0,r.Z)("p",{className:"text-muted"},void 0,pgettext("post body invalid","This error is caused by invalid post content manipulation.")))}function Tt(e){let{post:t,thread:s,user:a}=e;if(!It(t)||t.id!==s.best_answer)return null;let i=null;return i=a.id&&s.best_answer_marked_by===a.id?interpolate(pgettext("post best answer flag","Marked as best answer by you %(marked_on)s."),{marked_on:s.best_answer_marked_on.fromNow()},!0):interpolate(pgettext("post best answer flag","Marked as best answer by %(marked_by)s %(marked_on)s."),{marked_by:s.best_answer_marked_by_name,marked_on:s.best_answer_marked_on.fromNow()},!0),(0,r.Z)("div",{className:"post-status-message post-status-best-answer"},void 0,Zt||(Zt=(0,r.Z)("span",{className:"material-icon"},void 0,"check_box")),(0,r.Z)("p",{},void 0,i))}function Lt(e){return It(e.post)&&e.post.is_hidden?(0,r.Z)("div",{className:"post-status-message post-status-hidden"},void 0,bt||(bt=(0,r.Z)("span",{className:"material-icon"},void 0,"visibility_off")),(0,r.Z)("p",{},void 0,pgettext("post hidden flag","This post is hidden. Only users with permission may see its contents."))):null}function Pt(e){return It(e.post)&&e.post.is_unapproved?(0,r.Z)("div",{className:"post-status-message post-status-unapproved"},void 0,ft||(ft=(0,r.Z)("span",{className:"material-icon"},void 0,"remove_circle_outline")),(0,r.Z)("p",{},void 0,pgettext("post unapproved flag","This post is unapproved. Only users with permission to approve posts and its author may see its contents."))):null}function Ot(e){return It(e.post)&&e.post.is_protected?(0,r.Z)("div",{className:"post-status-message post-status-protected visible-xs-block"},void 0,_t||(_t=(0,r.Z)("span",{className:"material-icon"},void 0,"lock_outline")),(0,r.Z)("p",{},void 0,pgettext("post protected flag","This post is protected. Only moderators may change it."))):null}function It(e){return!e.is_hidden||e.acl.can_see_hidden}function At(e,t,s){g.Z.patch(e.post.api.index,t).then((t=>{f.Z.dispatch(ze.r$(e.post,t))}),(t=>{400===t.status?b.Z.error(t.detail[0]):b.Z.apiError(t),f.Z.dispatch(ze.r$(e.post,s))}))}function Rt(e){const{post:t,user:s}=e;f.Z.dispatch(v.Vx({best_answer:t.id,best_answer_is_protected:t.is_protected,best_answer_marked_on:j()(),best_answer_marked_by:s.id,best_answer_marked_by_name:s.username,best_answer_marked_by_slug:s.slug})),Dt(e,[{op:"replace",path:"best-answer",value:t.id},{op:"add",path:"acl",value:!0}],{best_answer:e.thread.best_answer,best_answer_is_protected:e.thread.best_answer_is_protected,best_answer_marked_on:e.thread.best_answer_marked_on,best_answer_marked_by:e.thread.best_answer_marked_by,best_answer_marked_by_name:e.thread.best_answer_marked_by_name,best_answer_marked_by_slug:e.thread.best_answer_marked_by_slug})}function Dt(e,t,s){g.Z.patch(e.thread.api.index,t).then((e=>{e.best_answer_marked_on&&(e.best_answer_marked_on=j()(e.best_answer_marked_on)),f.Z.dispatch(v.Vx(e))}),(e=>{400===e.status?b.Z.error(e.detail[0]):b.Z.apiError(e),f.Z.dispatch(v.Vx(s))}))}var jt,Ut,zt,Mt,Bt,qt,Ft=class extends c().Component{constructor(e){super(e),this.state={isReady:!1,error:null,likes:[]}}componentDidMount(){g.Z.get(this.props.post.api.likes).then((e=>{this.setState({isReady:!0,likes:e.map(Ht)})}),(e=>{this.setState({isReady:!0,error:e.detail})}))}render(){return this.state.error?(0,r.Z)(Yt,{className:"modal-message"},void 0,(0,r.Z)(V.Z,{message:this.state.error})):this.state.isReady?this.state.likes.length?(0,r.Z)(Yt,{className:"modal-sm",likes:this.state.likes},void 0,(0,r.Z)(Vt,{likes:this.state.likes})):(0,r.Z)(Yt,{className:"modal-message"},void 0,(0,r.Z)(V.Z,{message:pgettext("post likes modal","No users have liked this post.")})):Nt||(Nt=(0,r.Z)(Yt,{className:"modal-sm"},void 0,(0,r.Z)(G.Z,{})))}};function Ht(e){return Object.assign({},e,{liked_on:j()(e.liked_on)})}function Yt(e){let{className:t,children:s,likes:a}=e,i=pgettext("post likes modal title","Post Likes");if(a){const e=a.length,t=npgettext("post likes modal","%(likes)s like","%(likes)s likes",e);i=interpolate(t,{likes:e},!0)}return(0,r.Z)("div",{className:"modal-dialog "+(t||""),role:"document"},void 0,(0,r.Z)("div",{className:"modal-content"},void 0,(0,r.Z)("div",{className:"modal-header"},void 0,(0,r.Z)("button",{"aria-label":pgettext("modal","Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,xt||(xt=(0,r.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,r.Z)("h4",{className:"modal-title"},void 0,i)),s))}function Vt(e){return(0,r.Z)("div",{className:"modal-body modal-post-likers"},void 0,(0,r.Z)("ul",{className:"media-list"},void 0,e.likes.map((e=>c().createElement(Gt,(0,p.Z)({key:e.id},e))))))}function Gt(e){if(e.url){const t={id:e.liker_id,avatars:e.avatars};return(0,r.Z)("li",{className:"media"},void 0,(0,r.Z)("div",{className:"media-left"},void 0,(0,r.Z)("a",{className:"user-avatar",href:e.url},void 0,(0,r.Z)(T.ZP,{size:"50",user:t}))),(0,r.Z)("div",{className:"media-body"},void 0,(0,r.Z)("a",{className:"item-title",href:e.url},void 0,e.username)," ",(0,r.Z)($t,{likedOn:e.liked_on})))}return(0,r.Z)("li",{className:"media"},void 0,yt||(yt=(0,r.Z)("div",{className:"media-left"},void 0,(0,r.Z)("span",{className:"user-avatar"},void 0,(0,r.Z)(T.ZP,{size:"50"})))),(0,r.Z)("div",{className:"media-body"},void 0,(0,r.Z)("strong",{},void 0,e.username)," ",(0,r.Z)($t,{likedOn:e.liked_on})))}function $t(e){return(0,r.Z)("span",{className:"text-muted",title:e.likedOn.format("LLL")},void 0,e.likedOn.fromNow())}function Wt(e){return function(e){return(!e.is_hidden||e.acl.can_see_hidden)&&(e.acl.can_reply||e.acl.can_edit||e.acl.can_see_likes&&(e.last_likes||[]).length||e.acl.can_like)}(e.post)?(0,r.Z)("div",{className:"post-footer"},void 0,c().createElement(Qt,e),c().createElement(Xt,e),c().createElement(Kt,e),c().createElement(Jt,(0,p.Z)({lastLikes:e.post.last_likes,likes:e.post.likes},e)),c().createElement(es,(0,p.Z)({likes:e.post.likes},e)),c().createElement(ss,e),c().createElement(as,e),c().createElement(is,e)):null}class Qt extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{Rt(this.props)}))}render(){const{post:e,thread:t}=this.props;return t.acl.can_mark_best_answer&&e.acl.can_mark_as_best_answer?t.best_answer&&!t.acl.can_change_best_answer?null:(0,r.Z)("button",{className:"hidden-xs btn btn-default btn-sm pull-left",disabled:this.props.post.isBusy||e.id===t.best_answer,onClick:this.onClick,type:"button"},void 0,jt||(jt=(0,r.Z)("span",{className:"material-icon"},void 0,"check_box")),pgettext("post footer btn","Best answer")):null}}class Xt extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{Rt(this.props)}))}render(){const{post:e,thread:t}=this.props;return t.acl.can_mark_best_answer&&e.acl.can_mark_as_best_answer?t.best_answer&&!t.acl.can_change_best_answer?null:(0,r.Z)("button",{className:"visible-xs-inline-block btn btn-default btn-sm pull-left",disabled:this.props.post.isBusy||e.id===t.best_answer,onClick:this.onClick,type:"button"},void 0,Ut||(Ut=(0,r.Z)("span",{className:"material-icon"},void 0,"check_box"))):null}}class Kt extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{this.props.post.is_liked?function(e){f.Z.dispatch(ze.r$(e.post,{is_liked:!1,likes:e.post.likes-1,last_likes:e.post.last_likes.filter((t=>!t.id||t.id!==e.user.id))}));const t={is_liked:e.post.is_liked,likes:e.post.likes,last_likes:e.post.last_likes};At(e,[{op:"replace",path:"is-liked",value:!1}],t)}(this.props):function(e){const t=e.post.last_likes||[],s=[e.user].concat(t),a=s.length>3?s.slice(0,-1):s;f.Z.dispatch(ze.r$(e.post,{is_liked:!0,likes:e.post.likes+1,last_likes:a})),At(e,[{op:"replace",path:"is-liked",value:!0}],{is_liked:e.post.is_liked,likes:e.post.likes,last_likes:e.post.last_likes})}(this.props)}))}render(){if(!this.props.post.acl.can_like)return null;let e="btn btn-default btn-sm pull-left";return this.props.post.is_liked&&(e="btn btn-success btn-sm pull-left"),(0,r.Z)("button",{className:e,disabled:this.props.post.isBusy,onClick:this.onClick,type:"button"},void 0,this.props.post.is_liked?pgettext("post footer btn","Liked"):pgettext("post footer btn","Like"))}}class Jt extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{Z.Z.show((0,r.Z)(Ft,{post:this.props.post}))}))}render(){const e=(this.props.post.last_likes||[]).length>0;return this.props.post.acl.can_see_likes&&e?2===this.props.post.acl.can_see_likes?(0,r.Z)("button",{className:"btn btn-link btn-sm pull-left hidden-xs",onClick:this.onClick,type:"button"},void 0,ts(this.props.likes,this.props.lastLikes)):(0,r.Z)("p",{className:"pull-left hidden-xs"},void 0,ts(this.props.likes,this.props.lastLikes)):null}}class es extends Jt{render(){const e=(this.props.post.last_likes||[]).length>0;return this.props.post.acl.can_see_likes&&e?2===this.props.post.acl.can_see_likes?(0,r.Z)("button",{className:"btn btn-link btn-sm likes-compact pull-left visible-xs-block",onClick:this.onClick,type:"button"},void 0,zt||(zt=(0,r.Z)("span",{className:"material-icon"},void 0,"favorite")),this.props.likes):(0,r.Z)("p",{className:"likes-compact pull-left visible-xs-block"},void 0,Mt||(Mt=(0,r.Z)("span",{className:"material-icon"},void 0,"favorite")),this.props.likes):null}}function ts(e,t){const s=t.slice(0,3).map((e=>e.username));if(1==s.length)return interpolate(pgettext("post likes","%(user)s likes this."),{user:s[0]},!0);const a=e-s.length,i=s.slice(0,-1).join(", "),o=s.slice(-1)[0],n=interpolate(pgettext("post likes","%(users)s and %(last_user)s"),{users:i,last_user:o},!0);if(0===a)return interpolate(pgettext("post likes","%(users)s like this."),{users:n},!0);const r=npgettext("post likes","%(users)s and %(likes)s other user like this.","%(users)s and %(likes)s other users like this.",a);return interpolate(r,{users:s.join(", "),likes:a},!0)}class ss extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{ae.Z.open({mode:"REPLY",thread:this.props.thread,config:this.props.thread.api.editor,submit:this.props.thread.api.posts.index})}))}render(){return this.props.post.acl.can_reply?(0,r.Z)("button",{className:"btn btn-default btn-sm pull-right",type:"button",onClick:this.onClick},void 0,pgettext("post footer btn","Reply")):null}}class as extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{ae.Z.open({mode:"QUOTE",thread:this.props.thread,config:this.props.thread.api.editor,submit:this.props.thread.api.posts.index,context:{reply:this.props.post.id}})}))}render(){return this.props.post.acl.can_reply?(0,r.Z)("button",{className:"btn btn-default btn-sm pull-right",type:"button",onClick:this.onClick},void 0,pgettext("post footer btn","Quote")):null}}class is extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{ae.Z.open({mode:"EDIT",thread:this.props.thread,post:this.props.post,config:this.props.post.api.editor,submit:this.props.post.api.index})}))}render(){return this.props.post.acl.can_edit?(0,r.Z)("button",{className:"hidden-xs btn btn-default btn-sm pull-right",type:"button",onClick:this.onClick},void 0,pgettext("post footer btn","Edit")):null}}var os=class extends u.Z{constructor(e){super(e),(0,l.Z)(this,"onUrlChange",(e=>{this.changeValue("url",e.target.value)})),this.state={isLoading:!1,url:"",validators:{url:[]},errors:{}}}clean(){return!!this.state.url.trim().length||(b.Z.error(pgettext("post move modal","You have to enter link to the other thread.")),!1)}send(){return g.Z.post(this.props.thread.api.posts.move,{new_thread:this.state.url,posts:[this.props.post.id]})}handleSuccess(e){f.Z.dispatch(ze.r$(this.props.post,{isDeleted:!0})),Z.Z.hide(),b.Z.success(pgettext("post move modal","Selected post was moved to the other thread."))}handleError(e){400===e.status?b.Z.error(e.detail):b.Z.apiError(e)}render(){return(0,r.Z)("div",{className:"modal-dialog",role:"document"},void 0,(0,r.Z)("form",{onSubmit:this.handleSubmit},void 0,(0,r.Z)("div",{className:"modal-content"},void 0,Bt||(Bt=(0,r.Z)(ns,{})),(0,r.Z)("div",{className:"modal-body"},void 0,(0,r.Z)(h.Z,{for:"id_url",label:pgettext("post move modal field","Link to thread you want to move post to")},void 0,(0,r.Z)("input",{className:"form-control",disabled:this.state.isLoading,id:"id_url",onChange:this.onUrlChange,value:this.state.url}))),(0,r.Z)("div",{className:"modal-footer"},void 0,(0,r.Z)("button",{className:"btn btn-primary",disabled:this.state.isLoading},void 0,pgettext("post move modal btn","Move post"))))))}};function ns(e){return(0,r.Z)("div",{className:"modal-header"},void 0,(0,r.Z)("button",{"aria-label":pgettext("modal","Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,qt||(qt=(0,r.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,r.Z)("h4",{className:"modal-title"},void 0,pgettext("post move modal title","Move post")))}function rs(e){return(0,r.Z)("div",{className:"modal-body post-changelog-diff"},void 0,(0,r.Z)("ul",{className:"list-unstyled"},void 0,e.diff.map(((e,t)=>(0,r.Z)(ls,{item:e},t)))))}function ls(e){return"?"===e.item[0]?null:(0,r.Z)("li",{className:ds(e.item)},void 0,e.item.substr(2))}function ds(e){let t="diff-item";return"-"===e[0]?t+=" diff-item-sub":"+"===e[0]&&(t+=" diff-item-add"),t}var cs,ps,us,hs,ms,vs=class extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"onClick",(()=>{this.props.revertEdit(this.props.edit.id)}))}render(){return this.props.canRevert?(0,r.Z)("div",{className:"modal-footer visible-xs-block"},void 0,(0,r.Z)(Ee.Z,{className:"btn-default btn-sm btn-block",disabled:this.props.disabled,onClick:this.onClick,title:pgettext("post revert btn","Revert post to state from before this edit.")},void 0,pgettext("post revert btn","Revert"))):null}},gs=class extends c().Component{constructor(){super(...arguments),(0,l.Z)(this,"goLast",(()=>{this.props.goToEdit()})),(0,l.Z)(this,"goForward",(()=>{this.props.goToEdit(this.props.edit.next)})),(0,l.Z)(this,"goBack",(()=>{this.props.goToEdit(this.props.edit.previous)})),(0,l.Z)(this,"revertEdit",(()=>{this.props.revertEdit(this.props.edit.id)}))}render(){return(0,r.Z)("div",{className:"modal-toolbar post-changelog-toolbar"},void 0,(0,r.Z)("div",{className:"row"},void 0,(0,r.Z)("div",{className:"col-xs-12 col-sm-4"},void 0,(0,r.Z)("div",{className:"row"},void 0,(0,r.Z)("div",{className:"col-xs-4"},void 0,(0,r.Z)(Zs,{disabled:this.props.disabled,edit:this.props.edit,onClick:this.goBack})),(0,r.Z)("div",{className:"col-xs-4"},void 0,(0,r.Z)(bs,{disabled:this.props.disabled,edit:this.props.edit,onClick:this.goForward})),(0,r.Z)("div",{className:"col-xs-4"},void 0,(0,r.Z)(fs,{disabled:this.props.disabled,edit:this.props.edit,onClick:this.goLast})))),(0,r.Z)("div",{className:"col-xs-12 col-sm-5 xs-margin-top-half post-change-label"},void 0,(0,r.Z)(Ns,{edit:this.props.edit})),(0,r.Z)(_s,{canRevert:this.props.canRevert,disabled:this.props.disabled,onClick:this.revertEdit})))}};function Zs(e){return(0,r.Z)(Ee.Z,{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.previous,onClick:e.onClick,title:pgettext("post history modal btn","See previous change")},void 0,cs||(cs=(0,r.Z)("span",{className:"material-icon"},void 0,"chevron_left")))}function bs(e){return(0,r.Z)(Ee.Z,{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.next,onClick:e.onClick,title:pgettext("post history modal btn","See next change")},void 0,ps||(ps=(0,r.Z)("span",{className:"material-icon"},void 0,"chevron_right")))}function fs(e){return(0,r.Z)(Ee.Z,{className:"btn-default btn-block btn-icon btn-sm",disabled:e.disabled||!e.edit.next,onClick:e.onClick,title:pgettext("post history modal btn","See previous change")},void 0,us||(us=(0,r.Z)("span",{className:"material-icon"},void 0,"last_page")))}function _s(e){return e.canRevert?(0,r.Z)("div",{className:"col-sm-3 hidden-xs"},void 0,(0,r.Z)(Ee.Z,{className:"btn-default btn-sm btn-block",disabled:e.disabled,onClick:e.onClick,title:pgettext("post history modal btn","Revert post to state from before this edit.")},void 0,pgettext("post history modal btn","Revert"))):null}function Ns(e){let t=null;t=e.edit.url.editor?interpolate('%(user)s',{url:(0,ce.Z)(e.edit.url.editor),user:(0,ce.Z)(e.edit.editor_name)},!0):interpolate('%(user)s',{user:(0,ce.Z)(e.edit.editor_name)},!0);const s=interpolate('%(relative)s',{absolute:(0,ce.Z)(e.edit.edited_on.format("LLL")),relative:(0,ce.Z)(e.edit.edited_on.fromNow())},!0),a=interpolate((0,ce.Z)(pgettext("post history modal","By %(edited_by)s %(edited_on)s.")),{edited_by:t,edited_on:s},!0);return(0,r.Z)("p",{dangerouslySetInnerHTML:{__html:a}})}function xs(e){return Object.assign({},e,{edited_on:j()(e.edited_on)})}var ys=class extends c().Component{constructor(e){var t;super(e),t=this,(0,l.Z)(this,"goToEdit",(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;t.setState({isBusy:!0});let s=t.props.post.api.edits;null!==e&&(s+="?edit="+e),g.Z.get(s).then((e=>{t.setState({isReady:!0,isBusy:!1,edit:xs(e)})}),(e=>{t.setState({isReady:!0,isBusy:!1,error:e.detail})}))})),(0,l.Z)(this,"revertEdit",(e=>{if(this.state.isBusy)return;if(!window.confirm(pgettext("post revert","Are you sure you with to revert this post to the state from before this edit?")))return;this.setState({isBusy:!0});const t=this.props.post.api.edits+"?edit="+e;g.Z.post(t).then((e=>{const t=ze.ZB(e);f.Z.dispatch(ze.r$(e,t)),b.Z.success(pgettext("post revert","Post has been reverted to previous state.")),Z.Z.hide()}),(e=>{b.Z.apiError(e),this.setState({isBusy:!1})}))})),this.state={isReady:!1,isBusy:!0,canRevert:e.post.acl.can_edit,error:null,edit:null}}componentDidMount(){this.goToEdit()}render(){return this.state.error?(0,r.Z)(ws,{className:"modal-dialog modal-message"},void 0,(0,r.Z)(V.Z,{message:this.state.error})):this.state.isReady?(0,r.Z)(ws,{},void 0,(0,r.Z)(gs,{canRevert:this.state.canRevert,disabled:this.state.isBusy,edit:this.state.edit,goToEdit:this.goToEdit,revertEdit:this.revertEdit}),(0,r.Z)(rs,{diff:this.state.edit.diff}),(0,r.Z)(vs,{canRevert:this.state.canRevert,disabled:this.state.isBusy,edit:this.state.edit,revertEdit:this.revertEdit})):hs||(hs=(0,r.Z)(ws,{},void 0,(0,r.Z)(G.Z,{})))}};function ws(e){return(0,r.Z)("div",{className:e.className||"modal-dialog",role:"document"},void 0,(0,r.Z)("div",{className:"modal-content"},void 0,(0,r.Z)("div",{className:"modal-header"},void 0,(0,r.Z)("button",{"aria-label":pgettext("modal","Close"),className:"close","data-dismiss":"modal",type:"button"},void 0,ms||(ms=(0,r.Z)("span",{"aria-hidden":"true"},void 0,"×"))),(0,r.Z)("h4",{className:"modal-title"},void 0,pgettext("post history modal title","Post edits history"))),e.children))}var ks,Cs,Ss,Es,Ts,Ls,Ps,Os,Is,As,Rs,Ds,js,Us,zs,Ms,Bs,qs,Fs,Hs,Ys=s(57026),Vs=s(60471),Gs=s(55210);function $s(e){return c().createElement(Ws,(0,p.Z)({},e,{Form:Qs}))}class Ws extends c().Component{constructor(e){super(e),this.state={isLoaded:!1,isError:!1,categories:[]}}componentDidMount(){g.Z.get(misago.get("THREAD_EDITOR_API")).then((e=>{const t=e.map((e=>Object.assign(e,{disabled:!1===e.post,label:e.name,value:e.id,post:e.post})));this.setState({isLoaded:!0,categories:t})}),(e=>{this.setState({isError:e.detail})}))}render(){return this.state.isError?(0,r.Z)(Ks,{message:this.state.isError}):this.state.isLoaded?c().createElement(Qs,(0,p.Z)({},this.props,{categories:this.state.categories})):ks||(ks=(0,r.Z)(Xs,{}))}}class Qs extends u.Z{constructor(e){super(e),(0,l.Z)(this,"onCategoryChange",(e=>{const t=e.target.value,s={category:t};this.acl[t].can_pin_threads