Merge commit '5acec087caed4a2fdf0fd8ed11f891222496f321' into glitch-soc/merge-upstream
commit
1a0ef0c526
|
@ -7,6 +7,7 @@
|
||||||
':prConcurrentLimitNone', // Remove limit for open PRs at any time.
|
':prConcurrentLimitNone', // Remove limit for open PRs at any time.
|
||||||
':prHourlyLimit2', // Rate limit PR creation to a maximum of two per hour.
|
':prHourlyLimit2', // Rate limit PR creation to a maximum of two per hour.
|
||||||
],
|
],
|
||||||
|
rebaseWhen: 'conflicted',
|
||||||
minimumReleaseAge: '3', // Wait 3 days after the package has been published before upgrading it
|
minimumReleaseAge: '3', // Wait 3 days after the package has been published before upgrading it
|
||||||
// packageRules order is important, they are applied from top to bottom and are merged,
|
// packageRules order is important, they are applied from top to bottom and are merged,
|
||||||
// meaning the most important ones must be at the bottom, for example grouping rules
|
// meaning the most important ones must be at the bottom, for example grouping rules
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# This configuration was generated by
|
# This configuration was generated by
|
||||||
# `rubocop --auto-gen-config --auto-gen-only-exclude --no-offense-counts --no-auto-gen-timestamp`
|
# `rubocop --auto-gen-config --auto-gen-only-exclude --no-offense-counts --no-auto-gen-timestamp`
|
||||||
# using RuboCop version 1.65.0.
|
# using RuboCop version 1.66.1.
|
||||||
# The point is for the user to remove these configuration records
|
# The point is for the user to remove these configuration records
|
||||||
# one by one as the offenses are removed from the code base.
|
# one by one as the offenses are removed from the code base.
|
||||||
# Note that changes in the inspected code, or installation of new
|
# Note that changes in the inspected code, or installation of new
|
||||||
|
@ -35,7 +35,6 @@ Rails/OutputSafety:
|
||||||
# Configuration parameters: AllowedVars.
|
# Configuration parameters: AllowedVars.
|
||||||
Style/FetchEnvVar:
|
Style/FetchEnvVar:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/lib/redis_configuration.rb'
|
|
||||||
- 'app/lib/translation_service.rb'
|
- 'app/lib/translation_service.rb'
|
||||||
- 'config/environments/production.rb'
|
- 'config/environments/production.rb'
|
||||||
- 'config/initializers/2_limited_federation_mode.rb'
|
- 'config/initializers/2_limited_federation_mode.rb'
|
||||||
|
@ -44,7 +43,6 @@ Style/FetchEnvVar:
|
||||||
- 'config/initializers/devise.rb'
|
- 'config/initializers/devise.rb'
|
||||||
- 'config/initializers/paperclip.rb'
|
- 'config/initializers/paperclip.rb'
|
||||||
- 'config/initializers/vapid.rb'
|
- 'config/initializers/vapid.rb'
|
||||||
- 'lib/mastodon/redis_config.rb'
|
|
||||||
- 'lib/tasks/repo.rake'
|
- 'lib/tasks/repo.rake'
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
# This cop supports safe autocorrection (--autocorrect).
|
||||||
|
@ -93,7 +91,6 @@ Style/OptionalBooleanParameter:
|
||||||
- 'app/services/fetch_resource_service.rb'
|
- 'app/services/fetch_resource_service.rb'
|
||||||
- 'app/workers/domain_block_worker.rb'
|
- 'app/workers/domain_block_worker.rb'
|
||||||
- 'app/workers/unfollow_follow_worker.rb'
|
- 'app/workers/unfollow_follow_worker.rb'
|
||||||
- 'lib/mastodon/redis_config.rb'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
# Configuration parameters: EnforcedStyle.
|
# Configuration parameters: EnforcedStyle.
|
||||||
|
|
|
@ -12,7 +12,7 @@ ARG BUILDPLATFORM=${BUILDPLATFORM}
|
||||||
|
|
||||||
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.3.x"]
|
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.3.x"]
|
||||||
# renovate: datasource=docker depName=docker.io/ruby
|
# renovate: datasource=docker depName=docker.io/ruby
|
||||||
ARG RUBY_VERSION="3.3.4"
|
ARG RUBY_VERSION="3.3.5"
|
||||||
# # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
|
# # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
|
||||||
# renovate: datasource=node-version depName=node
|
# renovate: datasource=node-version depName=node
|
||||||
ARG NODE_MAJOR_VERSION="20"
|
ARG NODE_MAJOR_VERSION="20"
|
||||||
|
|
13
Gemfile.lock
13
Gemfile.lock
|
@ -584,7 +584,7 @@ GEM
|
||||||
ostruct (0.6.0)
|
ostruct (0.6.0)
|
||||||
ox (2.14.18)
|
ox (2.14.18)
|
||||||
parallel (1.26.3)
|
parallel (1.26.3)
|
||||||
parser (3.3.4.2)
|
parser (3.3.5.0)
|
||||||
ast (~> 2.4.1)
|
ast (~> 2.4.1)
|
||||||
racc
|
racc
|
||||||
parslet (2.0.0)
|
parslet (2.0.0)
|
||||||
|
@ -698,8 +698,7 @@ GEM
|
||||||
responders (3.1.1)
|
responders (3.1.1)
|
||||||
actionpack (>= 5.2)
|
actionpack (>= 5.2)
|
||||||
railties (>= 5.2)
|
railties (>= 5.2)
|
||||||
rexml (3.3.6)
|
rexml (3.3.7)
|
||||||
strscan
|
|
||||||
rotp (6.3.0)
|
rotp (6.3.0)
|
||||||
rouge (4.3.0)
|
rouge (4.3.0)
|
||||||
rpam2 (4.0.2)
|
rpam2 (4.0.2)
|
||||||
|
@ -735,18 +734,17 @@ GEM
|
||||||
rspec-mocks (~> 3.0)
|
rspec-mocks (~> 3.0)
|
||||||
sidekiq (>= 5, < 8)
|
sidekiq (>= 5, < 8)
|
||||||
rspec-support (3.13.1)
|
rspec-support (3.13.1)
|
||||||
rubocop (1.65.1)
|
rubocop (1.66.1)
|
||||||
json (~> 2.3)
|
json (~> 2.3)
|
||||||
language_server-protocol (>= 3.17.0)
|
language_server-protocol (>= 3.17.0)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
parser (>= 3.3.0.2)
|
parser (>= 3.3.0.2)
|
||||||
rainbow (>= 2.2.2, < 4.0)
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
regexp_parser (>= 2.4, < 3.0)
|
regexp_parser (>= 2.4, < 3.0)
|
||||||
rexml (>= 3.2.5, < 4.0)
|
rubocop-ast (>= 1.32.2, < 2.0)
|
||||||
rubocop-ast (>= 1.31.1, < 2.0)
|
|
||||||
ruby-progressbar (~> 1.7)
|
ruby-progressbar (~> 1.7)
|
||||||
unicode-display_width (>= 2.4.0, < 3.0)
|
unicode-display_width (>= 2.4.0, < 3.0)
|
||||||
rubocop-ast (1.32.1)
|
rubocop-ast (1.32.3)
|
||||||
parser (>= 3.3.1.0)
|
parser (>= 3.3.1.0)
|
||||||
rubocop-capybara (2.21.0)
|
rubocop-capybara (2.21.0)
|
||||||
rubocop (~> 1.41)
|
rubocop (~> 1.41)
|
||||||
|
@ -826,7 +824,6 @@ GEM
|
||||||
stringio (3.1.1)
|
stringio (3.1.1)
|
||||||
strong_migrations (2.0.0)
|
strong_migrations (2.0.0)
|
||||||
activerecord (>= 6.1)
|
activerecord (>= 6.1)
|
||||||
strscan (3.1.0)
|
|
||||||
swd (1.3.0)
|
swd (1.3.0)
|
||||||
activesupport (>= 3)
|
activesupport (>= 3)
|
||||||
attr_required (>= 0.0.5)
|
attr_required (>= 0.0.5)
|
||||||
|
|
|
@ -170,7 +170,7 @@ export const Conversation = ({ conversation, scrollKey, onMoveUp, onMoveDown })
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<HotKeys handlers={handlers}>
|
<HotKeys handlers={handlers}>
|
||||||
<div className={classNames('conversation focusable muted', { 'conversation--unread': unread })} tabIndex={0}>
|
<div className={classNames('conversation focusable muted', { unread })} tabIndex={0}>
|
||||||
<div className='conversation__avatar' onClick={handleClick} role='presentation'>
|
<div className='conversation__avatar' onClick={handleClick} role='presentation'>
|
||||||
<AvatarComposite accounts={accounts} size={48} />
|
<AvatarComposite accounts={accounts} size={48} />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -95,6 +95,8 @@
|
||||||
"block_modal.title": "أتريد حظر هذا المستخدم؟",
|
"block_modal.title": "أتريد حظر هذا المستخدم؟",
|
||||||
"block_modal.you_wont_see_mentions": "لن تر المنشورات التي يُشار فيهم إليه.",
|
"block_modal.you_wont_see_mentions": "لن تر المنشورات التي يُشار فيهم إليه.",
|
||||||
"boost_modal.combo": "يُمكنك الضّغط على {combo} لتخطي هذا في المرة المُقبلة",
|
"boost_modal.combo": "يُمكنك الضّغط على {combo} لتخطي هذا في المرة المُقبلة",
|
||||||
|
"boost_modal.reblog": "أتريد إعادة نشر المنشور؟",
|
||||||
|
"boost_modal.undo_reblog": "أتريد إلغاء إعادة نشر المنشور؟",
|
||||||
"bundle_column_error.copy_stacktrace": "انسخ تقرير الخطأ",
|
"bundle_column_error.copy_stacktrace": "انسخ تقرير الخطأ",
|
||||||
"bundle_column_error.error.body": "لا يمكن تقديم الصفحة المطلوبة. قد يكون بسبب خطأ في التعليمات البرمجية، أو مشكلة توافق المتصفح.",
|
"bundle_column_error.error.body": "لا يمكن تقديم الصفحة المطلوبة. قد يكون بسبب خطأ في التعليمات البرمجية، أو مشكلة توافق المتصفح.",
|
||||||
"bundle_column_error.error.title": "أوه لا!",
|
"bundle_column_error.error.title": "أوه لا!",
|
||||||
|
@ -230,7 +232,7 @@
|
||||||
"domain_pill.who_they_are": "بما أن المعرفات تقول من هو الشخص ومكان وجوده، يمكنك التفاعل مع الناس عبر الويب الاجتماعي لل <button>منصات التي تعمل ب ActivityPub</button>.",
|
"domain_pill.who_they_are": "بما أن المعرفات تقول من هو الشخص ومكان وجوده، يمكنك التفاعل مع الناس عبر الويب الاجتماعي لل <button>منصات التي تعمل ب ActivityPub</button>.",
|
||||||
"domain_pill.who_you_are": "بما أن معرفك يقول من أنت ومكان وجوده، يمكن للناس التفاعل معك عبر الويب الاجتماعي لل <button>منصات التي تعمل ب ActivityPub</button>.",
|
"domain_pill.who_you_are": "بما أن معرفك يقول من أنت ومكان وجوده، يمكن للناس التفاعل معك عبر الويب الاجتماعي لل <button>منصات التي تعمل ب ActivityPub</button>.",
|
||||||
"domain_pill.your_handle": "عنوانك الكامل:",
|
"domain_pill.your_handle": "عنوانك الكامل:",
|
||||||
"domain_pill.your_server": "منزلك الرقمي، حيث تعيش جميع مشاركاتك. لا تحب هذا؟ إنقل الخوادم في أي وقت واخضر متابعينك أيضًا.",
|
"domain_pill.your_server": "موطِنك الرقمي، حيث توجد فيه كافة منشوراتك. ألا يعجبك المكان؟ يمكنك الانتقال بين الخوادم في أي وقت واصطحاب متابعيك أيضاً.",
|
||||||
"domain_pill.your_username": "معرفك الفريد على هذا الخادم. من الممكن العثور على مستخدمين بنفس إسم المستخدم على خوادم مختلفة.",
|
"domain_pill.your_username": "معرفك الفريد على هذا الخادم. من الممكن العثور على مستخدمين بنفس إسم المستخدم على خوادم مختلفة.",
|
||||||
"embed.instructions": "يمكنكم إدماج هذا المنشور على موقعكم الإلكتروني عن طريق نسخ الشفرة أدناه.",
|
"embed.instructions": "يمكنكم إدماج هذا المنشور على موقعكم الإلكتروني عن طريق نسخ الشفرة أدناه.",
|
||||||
"embed.preview": "إليك ما سيبدو عليه:",
|
"embed.preview": "إليك ما سيبدو عليه:",
|
||||||
|
@ -290,7 +292,7 @@
|
||||||
"filter_modal.added.review_and_configure": "لمراجعة وزيادة تكوين فئة عوامل التصفية هذه، انتقل إلى {settings_link}.",
|
"filter_modal.added.review_and_configure": "لمراجعة وزيادة تكوين فئة عوامل التصفية هذه، انتقل إلى {settings_link}.",
|
||||||
"filter_modal.added.review_and_configure_title": "إعدادات التصفية",
|
"filter_modal.added.review_and_configure_title": "إعدادات التصفية",
|
||||||
"filter_modal.added.settings_link": "صفحة الإعدادات",
|
"filter_modal.added.settings_link": "صفحة الإعدادات",
|
||||||
"filter_modal.added.short_explanation": "تمت إضافة هذه المشاركة إلى فئة الفلاتر التالية: {title}.",
|
"filter_modal.added.short_explanation": "تمت إضافة هذا المنشور إلى فئة عوامل التصفية التالية: {title}.",
|
||||||
"filter_modal.added.title": "تمت إضافة عامل التصفية!",
|
"filter_modal.added.title": "تمت إضافة عامل التصفية!",
|
||||||
"filter_modal.select_filter.context_mismatch": "لا ينطبق على هذا السياق",
|
"filter_modal.select_filter.context_mismatch": "لا ينطبق على هذا السياق",
|
||||||
"filter_modal.select_filter.expired": "منتهية الصلاحيّة",
|
"filter_modal.select_filter.expired": "منتهية الصلاحيّة",
|
||||||
|
@ -348,6 +350,9 @@
|
||||||
"hashtag.follow": "اتبع الوسم",
|
"hashtag.follow": "اتبع الوسم",
|
||||||
"hashtag.unfollow": "ألغِ متابعة الوسم",
|
"hashtag.unfollow": "ألغِ متابعة الوسم",
|
||||||
"hashtags.and_other": "…و {count, plural, zero {} one {# واحد آخر} two {# اثنان آخران} few {# آخرون} many {# آخَرًا}other {# آخرون}}",
|
"hashtags.and_other": "…و {count, plural, zero {} one {# واحد آخر} two {# اثنان آخران} few {# آخرون} many {# آخَرًا}other {# آخرون}}",
|
||||||
|
"hints.profiles.see_more_followers": "عرض المزيد من المتابعين على {domain}",
|
||||||
|
"hints.profiles.see_more_posts": "عرض المزيد من المنشورات من {domain}",
|
||||||
|
"hints.threads.see_more": "اطلع على المزيد من الردود على {domain}",
|
||||||
"home.column_settings.show_reblogs": "اعرض المعاد نشرها",
|
"home.column_settings.show_reblogs": "اعرض المعاد نشرها",
|
||||||
"home.column_settings.show_replies": "اعرض الردود",
|
"home.column_settings.show_replies": "اعرض الردود",
|
||||||
"home.hide_announcements": "إخفاء الإعلانات",
|
"home.hide_announcements": "إخفاء الإعلانات",
|
||||||
|
@ -356,8 +361,10 @@
|
||||||
"home.pending_critical_update.title": "تحديث أمان حرج متوفر!",
|
"home.pending_critical_update.title": "تحديث أمان حرج متوفر!",
|
||||||
"home.show_announcements": "إظهار الإعلانات",
|
"home.show_announcements": "إظهار الإعلانات",
|
||||||
"ignore_notifications_modal.disclaimer": "لا يمكن لـ Mastodon إبلاغ المستخدمين بأنك قد تجاهلت إشعاراتهم. تجاهل الإشعارات لن يمنع إرسال الرسائل نفسها.",
|
"ignore_notifications_modal.disclaimer": "لا يمكن لـ Mastodon إبلاغ المستخدمين بأنك قد تجاهلت إشعاراتهم. تجاهل الإشعارات لن يمنع إرسال الرسائل نفسها.",
|
||||||
|
"ignore_notifications_modal.filter_instead": "تصفيتها بدلا من ذلك",
|
||||||
"ignore_notifications_modal.ignore": "تجاهل الإشعارات",
|
"ignore_notifications_modal.ignore": "تجاهل الإشعارات",
|
||||||
"ignore_notifications_modal.limited_accounts_title": "تجاهل الإشعارات من الحسابات التي هي تحت الإشراف؟",
|
"ignore_notifications_modal.limited_accounts_title": "تجاهل الإشعارات من الحسابات التي هي تحت الإشراف؟",
|
||||||
|
"ignore_notifications_modal.new_accounts_title": "تجاهل الإشعارات الصادرة من الحسابات الجديدة؟",
|
||||||
"interaction_modal.description.favourite": "بفضل حساب على ماستدون، يمكنك إضافة هذا المنشور إلى مفضلتك لإبلاغ الناشر عن تقديرك وكذا للاحتفاظ بالمنشور إلى وقت لاحق.",
|
"interaction_modal.description.favourite": "بفضل حساب على ماستدون، يمكنك إضافة هذا المنشور إلى مفضلتك لإبلاغ الناشر عن تقديرك وكذا للاحتفاظ بالمنشور إلى وقت لاحق.",
|
||||||
"interaction_modal.description.follow": "بفضل حساب في ماستدون، يمكنك متابعة {name} وتلقي منشوراته في موجزات خيطك الرئيس.",
|
"interaction_modal.description.follow": "بفضل حساب في ماستدون، يمكنك متابعة {name} وتلقي منشوراته في موجزات خيطك الرئيس.",
|
||||||
"interaction_modal.description.reblog": "مع حساب في ماستدون، يمكنك تعزيز هذا المنشور ومشاركته مع مُتابِعيك.",
|
"interaction_modal.description.reblog": "مع حساب في ماستدون، يمكنك تعزيز هذا المنشور ومشاركته مع مُتابِعيك.",
|
||||||
|
@ -447,6 +454,7 @@
|
||||||
"mute_modal.you_wont_see_mentions": "لن تر المنشورات التي يُشار فيها إليه.",
|
"mute_modal.you_wont_see_mentions": "لن تر المنشورات التي يُشار فيها إليه.",
|
||||||
"mute_modal.you_wont_see_posts": "سيكون بإمكانه رؤية منشوراتك، لكنك لن ترى منشوراته.",
|
"mute_modal.you_wont_see_posts": "سيكون بإمكانه رؤية منشوراتك، لكنك لن ترى منشوراته.",
|
||||||
"navigation_bar.about": "عن",
|
"navigation_bar.about": "عن",
|
||||||
|
"navigation_bar.administration": "الإدارة",
|
||||||
"navigation_bar.advanced_interface": "افتحه في واجهة الويب المتقدمة",
|
"navigation_bar.advanced_interface": "افتحه في واجهة الويب المتقدمة",
|
||||||
"navigation_bar.blocks": "الحسابات المحجوبة",
|
"navigation_bar.blocks": "الحسابات المحجوبة",
|
||||||
"navigation_bar.bookmarks": "الفواصل المرجعية",
|
"navigation_bar.bookmarks": "الفواصل المرجعية",
|
||||||
|
@ -463,6 +471,7 @@
|
||||||
"navigation_bar.follows_and_followers": "المتابِعون والمتابَعون",
|
"navigation_bar.follows_and_followers": "المتابِعون والمتابَعون",
|
||||||
"navigation_bar.lists": "القوائم",
|
"navigation_bar.lists": "القوائم",
|
||||||
"navigation_bar.logout": "خروج",
|
"navigation_bar.logout": "خروج",
|
||||||
|
"navigation_bar.moderation": "الإشراف",
|
||||||
"navigation_bar.mutes": "الحسابات المكتومة",
|
"navigation_bar.mutes": "الحسابات المكتومة",
|
||||||
"navigation_bar.opened_in_classic_interface": "تُفتَح المنشورات والحسابات وغيرها من الصفحات الخاصة بشكل مبدئي على واجهة الويب التقليدية.",
|
"navigation_bar.opened_in_classic_interface": "تُفتَح المنشورات والحسابات وغيرها من الصفحات الخاصة بشكل مبدئي على واجهة الويب التقليدية.",
|
||||||
"navigation_bar.personal": "شخصي",
|
"navigation_bar.personal": "شخصي",
|
||||||
|
@ -484,7 +493,7 @@
|
||||||
"notification.mention": "إشارة",
|
"notification.mention": "إشارة",
|
||||||
"notification.moderation-warning.learn_more": "اعرف المزيد",
|
"notification.moderation-warning.learn_more": "اعرف المزيد",
|
||||||
"notification.moderation_warning": "لقد تلقيت تحذيرًا بالإشراف",
|
"notification.moderation_warning": "لقد تلقيت تحذيرًا بالإشراف",
|
||||||
"notification.moderation_warning.action_delete_statuses": "تم إزالة بعض مشاركاتك.",
|
"notification.moderation_warning.action_delete_statuses": "تم حذف بعض من منشوراتك.",
|
||||||
"notification.moderation_warning.action_disable": "تم تعطيل حسابك.",
|
"notification.moderation_warning.action_disable": "تم تعطيل حسابك.",
|
||||||
"notification.moderation_warning.action_mark_statuses_as_sensitive": "بعض من منشوراتك تم تصنيفها على أنها حساسة.",
|
"notification.moderation_warning.action_mark_statuses_as_sensitive": "بعض من منشوراتك تم تصنيفها على أنها حساسة.",
|
||||||
"notification.moderation_warning.action_none": "لقد تلقى حسابك تحذيرا بالإشراف.",
|
"notification.moderation_warning.action_none": "لقد تلقى حسابك تحذيرا بالإشراف.",
|
||||||
|
@ -502,12 +511,15 @@
|
||||||
"notification.status": "{name} نشر للتو",
|
"notification.status": "{name} نشر للتو",
|
||||||
"notification.update": "عدّلَ {name} منشورًا",
|
"notification.update": "عدّلَ {name} منشورًا",
|
||||||
"notification_requests.accept": "موافقة",
|
"notification_requests.accept": "موافقة",
|
||||||
|
"notification_requests.confirm_accept_multiple.title": "قبول طلبات الإشعار؟",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.title": "تجاهل طلبات الإشعار؟",
|
||||||
"notification_requests.dismiss": "تخطي",
|
"notification_requests.dismiss": "تخطي",
|
||||||
"notification_requests.edit_selection": "تعديل",
|
"notification_requests.edit_selection": "تعديل",
|
||||||
"notification_requests.exit_selection": "تمّ",
|
"notification_requests.exit_selection": "تمّ",
|
||||||
"notification_requests.explainer_for_limited_account": "تم تصفية الإشعارات من هذا الحساب لأن الحساب تم تقييده من قبل مشرف.",
|
"notification_requests.explainer_for_limited_account": "تم تصفية الإشعارات من هذا الحساب لأن الحساب تم تقييده من قبل مشرف.",
|
||||||
"notification_requests.notifications_from": "إشعارات من {name}",
|
"notification_requests.notifications_from": "إشعارات من {name}",
|
||||||
"notification_requests.title": "الإشعارات المصفاة",
|
"notification_requests.title": "الإشعارات المصفاة",
|
||||||
|
"notification_requests.view": "عرض الإشعارات",
|
||||||
"notifications.clear": "مسح الإشعارات",
|
"notifications.clear": "مسح الإشعارات",
|
||||||
"notifications.clear_confirmation": "متأكد من أنك تود مسح جميع الإشعارات الخاصة بك و المتلقاة إلى حد الآن ؟",
|
"notifications.clear_confirmation": "متأكد من أنك تود مسح جميع الإشعارات الخاصة بك و المتلقاة إلى حد الآن ؟",
|
||||||
"notifications.clear_title": "أترغب في مسح الإشعارات؟",
|
"notifications.clear_title": "أترغب في مسح الإشعارات؟",
|
||||||
|
@ -520,7 +532,7 @@
|
||||||
"notifications.column_settings.filter_bar.advanced": "عرض جميع الفئات",
|
"notifications.column_settings.filter_bar.advanced": "عرض جميع الفئات",
|
||||||
"notifications.column_settings.filter_bar.category": "شريط التصفية السريعة",
|
"notifications.column_settings.filter_bar.category": "شريط التصفية السريعة",
|
||||||
"notifications.column_settings.follow": "متابعُون جُدُد:",
|
"notifications.column_settings.follow": "متابعُون جُدُد:",
|
||||||
"notifications.column_settings.follow_request": "الطلبات الجديد لِمتابَعتك:",
|
"notifications.column_settings.follow_request": "الطلبات الجديدة لِمتابَعتك:",
|
||||||
"notifications.column_settings.mention": "الإشارات:",
|
"notifications.column_settings.mention": "الإشارات:",
|
||||||
"notifications.column_settings.poll": "نتائج استطلاع الرأي:",
|
"notifications.column_settings.poll": "نتائج استطلاع الرأي:",
|
||||||
"notifications.column_settings.push": "الإشعارات",
|
"notifications.column_settings.push": "الإشعارات",
|
||||||
|
@ -747,7 +759,7 @@
|
||||||
"status.history.edited": "عدله {name} {date}",
|
"status.history.edited": "عدله {name} {date}",
|
||||||
"status.load_more": "حمّل المزيد",
|
"status.load_more": "حمّل المزيد",
|
||||||
"status.media.open": "اضغط للفتح",
|
"status.media.open": "اضغط للفتح",
|
||||||
"status.media.show": "اضغط للإظهار",
|
"status.media.show": "اضغط لإظهاره",
|
||||||
"status.media_hidden": "وسائط مخفية",
|
"status.media_hidden": "وسائط مخفية",
|
||||||
"status.mention": "أذكُر @{name}",
|
"status.mention": "أذكُر @{name}",
|
||||||
"status.more": "المزيد",
|
"status.more": "المزيد",
|
||||||
|
|
|
@ -356,6 +356,7 @@
|
||||||
"hints.profiles.follows_may_be_missing": "Les abonnements pour ce profil peuvent être manquants.",
|
"hints.profiles.follows_may_be_missing": "Les abonnements pour ce profil peuvent être manquants.",
|
||||||
"hints.profiles.posts_may_be_missing": "Certains messages de ce profil peuvent être manquants.",
|
"hints.profiles.posts_may_be_missing": "Certains messages de ce profil peuvent être manquants.",
|
||||||
"hints.profiles.see_more_followers": "Afficher plus d'abonné·e·s sur {domain}",
|
"hints.profiles.see_more_followers": "Afficher plus d'abonné·e·s sur {domain}",
|
||||||
|
"hints.profiles.see_more_follows": "Afficher plus d'abonné·e·s sur {domain}",
|
||||||
"hints.profiles.see_more_posts": "Voir plus de messages sur {domain}",
|
"hints.profiles.see_more_posts": "Voir plus de messages sur {domain}",
|
||||||
"hints.threads.replies_may_be_missing": "Les réponses provenant des autres serveurs pourraient être manquantes.",
|
"hints.threads.replies_may_be_missing": "Les réponses provenant des autres serveurs pourraient être manquantes.",
|
||||||
"hints.threads.see_more": "Afficher plus de réponses sur {domain}",
|
"hints.threads.see_more": "Afficher plus de réponses sur {domain}",
|
||||||
|
|
|
@ -356,6 +356,7 @@
|
||||||
"hints.profiles.follows_may_be_missing": "Les abonnements pour ce profil peuvent être manquants.",
|
"hints.profiles.follows_may_be_missing": "Les abonnements pour ce profil peuvent être manquants.",
|
||||||
"hints.profiles.posts_may_be_missing": "Certains messages de ce profil peuvent être manquants.",
|
"hints.profiles.posts_may_be_missing": "Certains messages de ce profil peuvent être manquants.",
|
||||||
"hints.profiles.see_more_followers": "Afficher plus d'abonné·e·s sur {domain}",
|
"hints.profiles.see_more_followers": "Afficher plus d'abonné·e·s sur {domain}",
|
||||||
|
"hints.profiles.see_more_follows": "Afficher plus d'abonné·e·s sur {domain}",
|
||||||
"hints.profiles.see_more_posts": "Voir plus de messages sur {domain}",
|
"hints.profiles.see_more_posts": "Voir plus de messages sur {domain}",
|
||||||
"hints.threads.replies_may_be_missing": "Les réponses provenant des autres serveurs pourraient être manquantes.",
|
"hints.threads.replies_may_be_missing": "Les réponses provenant des autres serveurs pourraient être manquantes.",
|
||||||
"hints.threads.see_more": "Afficher plus de réponses sur {domain}",
|
"hints.threads.see_more": "Afficher plus de réponses sur {domain}",
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
"account.in_memoriam": "Em Memória.",
|
"account.in_memoriam": "Em Memória.",
|
||||||
"account.joined_short": "Juntou-se a",
|
"account.joined_short": "Juntou-se a",
|
||||||
"account.languages": "Alterar línguas subscritas",
|
"account.languages": "Alterar línguas subscritas",
|
||||||
"account.link_verified_on": "A posse desta ligação foi verificada em {date}",
|
"account.link_verified_on": "O proprietário desta hiperligação foi verificado em {date}",
|
||||||
"account.locked_info": "Esta conta é privada. O proprietário revê manualmente quem o pode seguir.",
|
"account.locked_info": "Esta conta é privada. O proprietário revê manualmente quem o pode seguir.",
|
||||||
"account.media": "Média",
|
"account.media": "Média",
|
||||||
"account.mention": "Mencionar @{name}",
|
"account.mention": "Mencionar @{name}",
|
||||||
|
@ -154,15 +154,15 @@
|
||||||
"compose_form.lock_disclaimer": "A sua conta não é {locked}. Qualquer pessoa pode segui-lo e ver as publicações direcionadas apenas a seguidores.",
|
"compose_form.lock_disclaimer": "A sua conta não é {locked}. Qualquer pessoa pode segui-lo e ver as publicações direcionadas apenas a seguidores.",
|
||||||
"compose_form.lock_disclaimer.lock": "fechada",
|
"compose_form.lock_disclaimer.lock": "fechada",
|
||||||
"compose_form.placeholder": "Em que está a pensar?",
|
"compose_form.placeholder": "Em que está a pensar?",
|
||||||
"compose_form.poll.duration": "Duração do inquérito",
|
"compose_form.poll.duration": "Duração da sondagem",
|
||||||
"compose_form.poll.multiple": "Escolha múltipla",
|
"compose_form.poll.multiple": "Escolha múltipla",
|
||||||
"compose_form.poll.option_placeholder": "Opção {number}",
|
"compose_form.poll.option_placeholder": "Opção {number}",
|
||||||
"compose_form.poll.single": "Escolha uma",
|
"compose_form.poll.single": "Escolha uma",
|
||||||
"compose_form.poll.switch_to_multiple": "Alterar o inquérito para permitir várias respostas",
|
"compose_form.poll.switch_to_multiple": "Alterar a sondagem para permitir várias respostas",
|
||||||
"compose_form.poll.switch_to_single": "Alterar o inquérito para permitir uma única resposta",
|
"compose_form.poll.switch_to_single": "Alterar a sondagem para permitir uma única resposta",
|
||||||
"compose_form.poll.type": "Estilo",
|
"compose_form.poll.type": "Estilo",
|
||||||
"compose_form.publish": "Publicar",
|
"compose_form.publish": "Publicar",
|
||||||
"compose_form.publish_form": "Publicar",
|
"compose_form.publish_form": "Nova publicação",
|
||||||
"compose_form.reply": "Responder",
|
"compose_form.reply": "Responder",
|
||||||
"compose_form.save_changes": "Atualizar",
|
"compose_form.save_changes": "Atualizar",
|
||||||
"compose_form.spoiler.marked": "Texto escondido atrás de aviso",
|
"compose_form.spoiler.marked": "Texto escondido atrás de aviso",
|
||||||
|
@ -189,7 +189,7 @@
|
||||||
"confirmations.redraft.message": "Tem a certeza de que quer eliminar e reescrever esta publicação? Os favoritos e partilhas perder-se-ão e as respostas à publicação original ficarão órfãs.",
|
"confirmations.redraft.message": "Tem a certeza de que quer eliminar e reescrever esta publicação? Os favoritos e partilhas perder-se-ão e as respostas à publicação original ficarão órfãs.",
|
||||||
"confirmations.redraft.title": "Eliminar e reescrever publicação?",
|
"confirmations.redraft.title": "Eliminar e reescrever publicação?",
|
||||||
"confirmations.reply.confirm": "Responder",
|
"confirmations.reply.confirm": "Responder",
|
||||||
"confirmations.reply.message": "Responder agora irá reescrever a mensagem que está a compor actualmente. Tem a certeza que quer continuar?",
|
"confirmations.reply.message": "Se responder agora, a mensagem que está a escrever será substituída. Tem a certeza que pretende continuar?",
|
||||||
"confirmations.reply.title": "Sobrescrever publicação?",
|
"confirmations.reply.title": "Sobrescrever publicação?",
|
||||||
"confirmations.unfollow.confirm": "Deixar de seguir",
|
"confirmations.unfollow.confirm": "Deixar de seguir",
|
||||||
"confirmations.unfollow.message": "De certeza que queres deixar de seguir {name}?",
|
"confirmations.unfollow.message": "De certeza que queres deixar de seguir {name}?",
|
||||||
|
@ -206,14 +206,14 @@
|
||||||
"directory.federated": "Do fediverso conhecido",
|
"directory.federated": "Do fediverso conhecido",
|
||||||
"directory.local": "Apenas de {domain}",
|
"directory.local": "Apenas de {domain}",
|
||||||
"directory.new_arrivals": "Recém chegados",
|
"directory.new_arrivals": "Recém chegados",
|
||||||
"directory.recently_active": "Com actividade recente",
|
"directory.recently_active": "Recentemente ativo",
|
||||||
"disabled_account_banner.account_settings": "Definições da conta",
|
"disabled_account_banner.account_settings": "Definições da conta",
|
||||||
"disabled_account_banner.text": "A sua conta {disabledAccount} está presentemente desativada.",
|
"disabled_account_banner.text": "A sua conta {disabledAccount} está presentemente desativada.",
|
||||||
"dismissable_banner.community_timeline": "Estas são as publicações públicas mais recentes de pessoas cujas contas são hospedadas por {domain}.",
|
"dismissable_banner.community_timeline": "Estas são as publicações públicas mais recentes de pessoas cujas contas são hospedadas por {domain}.",
|
||||||
"dismissable_banner.dismiss": "Descartar",
|
"dismissable_banner.dismiss": "Descartar",
|
||||||
"dismissable_banner.explore_links": "Essas histórias de notícias estão, no momento, a ser faladas por pessoas neste e noutros servidores da rede descentralizada.",
|
"dismissable_banner.explore_links": "Essas histórias de notícias estão, no momento, a ser faladas por pessoas neste e noutros servidores da rede descentralizada.",
|
||||||
"dismissable_banner.explore_statuses": "Estas são publicações de toda a rede social que estão a ganhar popularidade atualmente. As mensagens mais recentes com mais partilhas e favoritos obtêm uma classificação mais elevada.",
|
"dismissable_banner.explore_statuses": "Estas são publicações de toda a rede social que estão a ganhar popularidade atualmente. As mensagens mais recentes com mais partilhas e favoritos obtêm uma classificação mais elevada.",
|
||||||
"dismissable_banner.explore_tags": "Estas #etiquetas estão presentemente a ganhar atenção entre as pessoas neste e noutros servidores da rede descentralizada.",
|
"dismissable_banner.explore_tags": "Estas são hashtags que estão a ganhar força na rede social atualmente. As hashtags que são utilizadas por mais pessoas diferentes têm uma classificação mais elevada.",
|
||||||
"dismissable_banner.public_timeline": "Estas são as publicações públicas mais recentes de pessoas na rede social que as pessoas em {domain} seguem.",
|
"dismissable_banner.public_timeline": "Estas são as publicações públicas mais recentes de pessoas na rede social que as pessoas em {domain} seguem.",
|
||||||
"domain_block_modal.block": "Bloquear servidor",
|
"domain_block_modal.block": "Bloquear servidor",
|
||||||
"domain_block_modal.block_account_instead": "Bloquear @{name} em alternativa",
|
"domain_block_modal.block_account_instead": "Bloquear @{name} em alternativa",
|
||||||
|
@ -238,7 +238,7 @@
|
||||||
"domain_pill.your_username": "O seu identificador único neste servidor. É possível encontrar utilizadores com o mesmo nome de utilizador em diferentes servidores.",
|
"domain_pill.your_username": "O seu identificador único neste servidor. É possível encontrar utilizadores com o mesmo nome de utilizador em diferentes servidores.",
|
||||||
"embed.instructions": "Incorpore esta publicação no seu site copiando o código abaixo.",
|
"embed.instructions": "Incorpore esta publicação no seu site copiando o código abaixo.",
|
||||||
"embed.preview": "Podes ver aqui como irá ficar:",
|
"embed.preview": "Podes ver aqui como irá ficar:",
|
||||||
"emoji_button.activity": "Actividade",
|
"emoji_button.activity": "Atividade",
|
||||||
"emoji_button.clear": "Limpar",
|
"emoji_button.clear": "Limpar",
|
||||||
"emoji_button.custom": "Personalizar",
|
"emoji_button.custom": "Personalizar",
|
||||||
"emoji_button.flags": "Bandeiras",
|
"emoji_button.flags": "Bandeiras",
|
||||||
|
@ -246,7 +246,7 @@
|
||||||
"emoji_button.label": "Inserir Emoji",
|
"emoji_button.label": "Inserir Emoji",
|
||||||
"emoji_button.nature": "Natureza",
|
"emoji_button.nature": "Natureza",
|
||||||
"emoji_button.not_found": "Nenhum emoji correspondente encontrado",
|
"emoji_button.not_found": "Nenhum emoji correspondente encontrado",
|
||||||
"emoji_button.objects": "Objectos",
|
"emoji_button.objects": "Objetos",
|
||||||
"emoji_button.people": "Pessoas",
|
"emoji_button.people": "Pessoas",
|
||||||
"emoji_button.recent": "Utilizados regularmente",
|
"emoji_button.recent": "Utilizados regularmente",
|
||||||
"emoji_button.search": "Pesquisar...",
|
"emoji_button.search": "Pesquisar...",
|
||||||
|
@ -258,24 +258,24 @@
|
||||||
"empty_column.account_timeline": "Sem publicações por aqui!",
|
"empty_column.account_timeline": "Sem publicações por aqui!",
|
||||||
"empty_column.account_unavailable": "Perfil indisponível",
|
"empty_column.account_unavailable": "Perfil indisponível",
|
||||||
"empty_column.blocks": "Ainda não bloqueaste qualquer utilizador.",
|
"empty_column.blocks": "Ainda não bloqueaste qualquer utilizador.",
|
||||||
"empty_column.bookmarked_statuses": "Ainda não adicionou nenhuma publicação aos itens salvos. Quando adicionar, eles serão exibidos aqui.",
|
"empty_column.bookmarked_statuses": "Ainda não tem nenhuma publicação marcada. Quando marcar uma, ela aparecerá aqui.",
|
||||||
"empty_column.community": "A cronologia local está vazia. Escreve algo público para começar!",
|
"empty_column.community": "A cronologia local está vazia. Escreve algo público para começar!",
|
||||||
"empty_column.direct": "Ainda não tem qualquer menção privada. Quando enviar ou receber uma, ela irá aparecer aqui.",
|
"empty_column.direct": "Ainda não tem qualquer menção privada. Quando enviar ou receber uma, ela irá aparecer aqui.",
|
||||||
"empty_column.domain_blocks": "Ainda não há qualquer domínio escondido.",
|
"empty_column.domain_blocks": "Ainda não há qualquer domínio escondido.",
|
||||||
"empty_column.explore_statuses": "Nada está em alta no momento. Volte mais tarde!",
|
"empty_column.explore_statuses": "Nada é tendência neste momento. Volte mais tarde!",
|
||||||
"empty_column.favourited_statuses": "Ainda não assinalou qualquer publicação como favorita. Quando o fizer, aparecerá aqui.",
|
"empty_column.favourited_statuses": "Ainda não assinalou qualquer publicação como favorita. Quando o fizer, aparecerá aqui.",
|
||||||
"empty_column.favourites": "Ainda ninguém assinalou esta publicação como favorita. Quando alguém o fizer, aparecerá aqui.",
|
"empty_column.favourites": "Ainda ninguém assinalou esta publicação como favorita. Quando alguém o fizer, aparecerá aqui.",
|
||||||
"empty_column.follow_requests": "Ainda não tens nenhum pedido de seguidor. Quando receberes algum, ele irá aparecer aqui.",
|
"empty_column.follow_requests": "Ainda não tens nenhum pedido de seguidor. Quando receberes algum, ele irá aparecer aqui.",
|
||||||
"empty_column.followed_tags": "Ainda não segue nenhuma hashtag. Quando o fizer, ela aparecerá aqui.",
|
"empty_column.followed_tags": "Ainda não segue nenhuma hashtag. Quando o fizer, ela aparecerá aqui.",
|
||||||
"empty_column.hashtag": "Não foram encontradas publicações com essa #etiqueta.",
|
"empty_column.hashtag": "Não foram encontradas publicações com essa #etiqueta.",
|
||||||
"empty_column.home": "Ainda não segues qualquer utilizador. Visita {public} ou utiliza a pesquisa para procurar outros utilizadores.",
|
"empty_column.home": "A sua linha cronológica inicial está vazia! Siga mais pessoas para a preencher.",
|
||||||
"empty_column.list": "Ainda não existem publicações nesta lista. Quando membros desta lista fizerem novas publicações, elas aparecerão aqui.",
|
"empty_column.list": "Ainda não existem publicações nesta lista. Quando membros desta lista fizerem novas publicações, elas aparecerão aqui.",
|
||||||
"empty_column.lists": "Ainda não tem qualquer lista. Quando criar uma, ela irá aparecer aqui.",
|
"empty_column.lists": "Ainda não tem qualquer lista. Quando criar uma, ela irá aparecer aqui.",
|
||||||
"empty_column.mutes": "Ainda não silenciaste qualquer utilizador.",
|
"empty_column.mutes": "Ainda não silenciaste qualquer utilizador.",
|
||||||
"empty_column.notification_requests": "Tudo limpo! Não há nada aqui. Quando você receber novas notificações, elas aparecerão aqui conforme as suas configurações.",
|
"empty_column.notification_requests": "Tudo limpo! Não há nada aqui. Quando você receber novas notificações, elas aparecerão aqui conforme as suas configurações.",
|
||||||
"empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.",
|
"empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.",
|
||||||
"empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para veres aqui os conteúdos públicos",
|
"empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para veres aqui os conteúdos públicos",
|
||||||
"error.unexpected_crash.explanation": "Devido a um erro no nosso código ou a uma compatilidade com o seu navegador, esta página não pôde ser apresentada correctamente.",
|
"error.unexpected_crash.explanation": "Devido a um erro no nosso código ou a um problema de compatibilidade do navegador, esta página não pôde ser apresentada corretamente.",
|
||||||
"error.unexpected_crash.explanation_addons": "Esta página não pôde ser exibida corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.",
|
"error.unexpected_crash.explanation_addons": "Esta página não pôde ser exibida corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.",
|
||||||
"error.unexpected_crash.next_steps": "Tente atualizar a página. Se isso não ajudar, pode usar o Mastodon através de um navegador diferente ou uma aplicação nativa.",
|
"error.unexpected_crash.next_steps": "Tente atualizar a página. Se isso não ajudar, pode usar o Mastodon através de um navegador diferente ou uma aplicação nativa.",
|
||||||
"error.unexpected_crash.next_steps_addons": "Tente desabilitá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.",
|
"error.unexpected_crash.next_steps_addons": "Tente desabilitá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.",
|
||||||
|
@ -355,10 +355,10 @@
|
||||||
"hashtags.and_other": "…e {count, plural, other {mais #}}",
|
"hashtags.and_other": "…e {count, plural, other {mais #}}",
|
||||||
"hints.profiles.followers_may_be_missing": "Podem faltar seguidores neste perfil.",
|
"hints.profiles.followers_may_be_missing": "Podem faltar seguidores neste perfil.",
|
||||||
"hints.profiles.follows_may_be_missing": "O número de perfis seguidos por este perfil pode faltar.",
|
"hints.profiles.follows_may_be_missing": "O número de perfis seguidos por este perfil pode faltar.",
|
||||||
"hints.profiles.posts_may_be_missing": "Podem faltar alguns posts deste perfil.",
|
"hints.profiles.posts_may_be_missing": "Podem faltar algumas publicações deste perfil.",
|
||||||
"hints.profiles.see_more_followers": "Ver mais seguidores no {domain}",
|
"hints.profiles.see_more_followers": "Ver mais seguidores no {domain}",
|
||||||
"hints.profiles.see_more_follows": "Veja mais perfis seguidos em {domain}",
|
"hints.profiles.see_more_follows": "Veja mais perfis seguidos em {domain}",
|
||||||
"hints.profiles.see_more_posts": "Ver mais posts em {domain}",
|
"hints.profiles.see_more_posts": "Ver mais publicações em {domain}",
|
||||||
"home.column_settings.show_reblogs": "Mostrar impulsos",
|
"home.column_settings.show_reblogs": "Mostrar impulsos",
|
||||||
"home.column_settings.show_replies": "Mostrar respostas",
|
"home.column_settings.show_replies": "Mostrar respostas",
|
||||||
"home.hide_announcements": "Ocultar comunicações",
|
"home.hide_announcements": "Ocultar comunicações",
|
||||||
|
@ -406,7 +406,7 @@
|
||||||
"keyboard_shortcuts.my_profile": "para abrir o teu perfil",
|
"keyboard_shortcuts.my_profile": "para abrir o teu perfil",
|
||||||
"keyboard_shortcuts.notifications": "para abrir a coluna das notificações",
|
"keyboard_shortcuts.notifications": "para abrir a coluna das notificações",
|
||||||
"keyboard_shortcuts.open_media": "para abrir media",
|
"keyboard_shortcuts.open_media": "para abrir media",
|
||||||
"keyboard_shortcuts.pinned": "para abrir a lista dos toots fixados",
|
"keyboard_shortcuts.pinned": "Abrir lista de publicações fixadas",
|
||||||
"keyboard_shortcuts.profile": "para abrir o perfil do autor",
|
"keyboard_shortcuts.profile": "para abrir o perfil do autor",
|
||||||
"keyboard_shortcuts.reply": "para responder",
|
"keyboard_shortcuts.reply": "para responder",
|
||||||
"keyboard_shortcuts.requests": "para abrir a lista dos pedidos de seguidor",
|
"keyboard_shortcuts.requests": "para abrir a lista dos pedidos de seguidor",
|
||||||
|
@ -475,7 +475,7 @@
|
||||||
"navigation_bar.mutes": "Utilizadores silenciados",
|
"navigation_bar.mutes": "Utilizadores silenciados",
|
||||||
"navigation_bar.opened_in_classic_interface": "Por norma, publicações, contas, e outras páginas específicas são abertas na interface web clássica.",
|
"navigation_bar.opened_in_classic_interface": "Por norma, publicações, contas, e outras páginas específicas são abertas na interface web clássica.",
|
||||||
"navigation_bar.personal": "Pessoal",
|
"navigation_bar.personal": "Pessoal",
|
||||||
"navigation_bar.pins": "Toots afixados",
|
"navigation_bar.pins": "Publicações fixadas",
|
||||||
"navigation_bar.preferences": "Preferências",
|
"navigation_bar.preferences": "Preferências",
|
||||||
"navigation_bar.public_timeline": "Cronologia federada",
|
"navigation_bar.public_timeline": "Cronologia federada",
|
||||||
"navigation_bar.search": "Pesquisar",
|
"navigation_bar.search": "Pesquisar",
|
||||||
|
@ -504,8 +504,8 @@
|
||||||
"notification.moderation_warning.action_sensitive": "As suas publicações serão, a partir de agora, assinaladas como sensíveis.",
|
"notification.moderation_warning.action_sensitive": "As suas publicações serão, a partir de agora, assinaladas como sensíveis.",
|
||||||
"notification.moderation_warning.action_silence": "A sua conta foi limitada.",
|
"notification.moderation_warning.action_silence": "A sua conta foi limitada.",
|
||||||
"notification.moderation_warning.action_suspend": "A sua conta foi suspensa.",
|
"notification.moderation_warning.action_suspend": "A sua conta foi suspensa.",
|
||||||
"notification.own_poll": "A sua votação terminou",
|
"notification.own_poll": "A sua sondagem terminou",
|
||||||
"notification.poll": "Uma votação em que participaste chegou ao fim",
|
"notification.poll": "Terminou uma sondagem em que votou",
|
||||||
"notification.reblog": "{name} reforçou a tua publicação",
|
"notification.reblog": "{name} reforçou a tua publicação",
|
||||||
"notification.relationships_severance_event": "Perdeu as ligações com {name}",
|
"notification.relationships_severance_event": "Perdeu as ligações com {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Um administrador de {from} suspendeu {target}, o que significa que já não pode receber atualizações dele ou interagir com ele.",
|
"notification.relationships_severance_event.account_suspension": "Um administrador de {from} suspendeu {target}, o que significa que já não pode receber atualizações dele ou interagir com ele.",
|
||||||
|
@ -536,7 +536,7 @@
|
||||||
"notifications.column_settings.follow": "Novos seguidores:",
|
"notifications.column_settings.follow": "Novos seguidores:",
|
||||||
"notifications.column_settings.follow_request": "Novos pedidos de seguidor:",
|
"notifications.column_settings.follow_request": "Novos pedidos de seguidor:",
|
||||||
"notifications.column_settings.mention": "Menções:",
|
"notifications.column_settings.mention": "Menções:",
|
||||||
"notifications.column_settings.poll": "Resultados do inquérito:",
|
"notifications.column_settings.poll": "Resultados da sondagem:",
|
||||||
"notifications.column_settings.push": "Notificações Push",
|
"notifications.column_settings.push": "Notificações Push",
|
||||||
"notifications.column_settings.reblog": "Reforços:",
|
"notifications.column_settings.reblog": "Reforços:",
|
||||||
"notifications.column_settings.show": "Mostrar na coluna",
|
"notifications.column_settings.show": "Mostrar na coluna",
|
||||||
|
@ -550,7 +550,7 @@
|
||||||
"notifications.filter.favourites": "Favoritos",
|
"notifications.filter.favourites": "Favoritos",
|
||||||
"notifications.filter.follows": "Seguidores",
|
"notifications.filter.follows": "Seguidores",
|
||||||
"notifications.filter.mentions": "Menções",
|
"notifications.filter.mentions": "Menções",
|
||||||
"notifications.filter.polls": "Resultados do inquérito",
|
"notifications.filter.polls": "Resultados da sondagem",
|
||||||
"notifications.filter.statuses": "Atualizações de pessoas que você segue",
|
"notifications.filter.statuses": "Atualizações de pessoas que você segue",
|
||||||
"notifications.grant_permission": "Conceder permissão.",
|
"notifications.grant_permission": "Conceder permissão.",
|
||||||
"notifications.group": "{count} notificações",
|
"notifications.group": "{count} notificações",
|
||||||
|
@ -573,7 +573,7 @@
|
||||||
"notifications_permission_banner.title": "Nunca perca nada",
|
"notifications_permission_banner.title": "Nunca perca nada",
|
||||||
"onboarding.action.back": "Voltar atrás",
|
"onboarding.action.back": "Voltar atrás",
|
||||||
"onboarding.actions.back": "Voltar atrás",
|
"onboarding.actions.back": "Voltar atrás",
|
||||||
"onboarding.actions.go_to_explore": "Veja as tendências atuais",
|
"onboarding.actions.go_to_explore": "Ver tendências atuais",
|
||||||
"onboarding.actions.go_to_home": "Ir para a sua página inicial",
|
"onboarding.actions.go_to_home": "Ir para a sua página inicial",
|
||||||
"onboarding.compose.template": "Olá #Mastodon!",
|
"onboarding.compose.template": "Olá #Mastodon!",
|
||||||
"onboarding.follows.empty": "Infelizmente, não é possível mostrar resultados neste momento. Pode tentar utilizar a pesquisa ou navegar na página \"Explorar\" para encontrar pessoas para seguir ou tentar novamente mais tarde.",
|
"onboarding.follows.empty": "Infelizmente, não é possível mostrar resultados neste momento. Pode tentar utilizar a pesquisa ou navegar na página \"Explorar\" para encontrar pessoas para seguir ou tentar novamente mais tarde.",
|
||||||
|
@ -599,7 +599,7 @@
|
||||||
"onboarding.start.title": "Conseguiu!",
|
"onboarding.start.title": "Conseguiu!",
|
||||||
"onboarding.steps.follow_people.body": "Seguir pessoas interessantes é o propósito do Mastodon. ",
|
"onboarding.steps.follow_people.body": "Seguir pessoas interessantes é o propósito do Mastodon. ",
|
||||||
"onboarding.steps.follow_people.title": "Personalize o seu feed",
|
"onboarding.steps.follow_people.title": "Personalize o seu feed",
|
||||||
"onboarding.steps.publish_status.body": "Diga olá ao mundo com texto, fotos, vídeos ou votos {emoji}",
|
"onboarding.steps.publish_status.body": "Diga olá ao mundo com texto, fotos, vídeos ou sondagens {emoji}",
|
||||||
"onboarding.steps.publish_status.title": "Faça a sua primeira publicação",
|
"onboarding.steps.publish_status.title": "Faça a sua primeira publicação",
|
||||||
"onboarding.steps.setup_profile.body": "Promova as suas interações para ter um perfil preenchido. ",
|
"onboarding.steps.setup_profile.body": "Promova as suas interações para ter um perfil preenchido. ",
|
||||||
"onboarding.steps.setup_profile.title": "Personalize o seu perfil",
|
"onboarding.steps.setup_profile.title": "Personalize o seu perfil",
|
||||||
|
@ -608,19 +608,19 @@
|
||||||
"onboarding.tips.2fa": "<strong>Sabia?</strong> Pode proteger a sua conta ativando a autenticação em duas etapas nas configurações de conta. Funciona com qualquer aplicativo TOTP à sua escolha, sem necessitar de um número de telefone!",
|
"onboarding.tips.2fa": "<strong>Sabia?</strong> Pode proteger a sua conta ativando a autenticação em duas etapas nas configurações de conta. Funciona com qualquer aplicativo TOTP à sua escolha, sem necessitar de um número de telefone!",
|
||||||
"onboarding.tips.accounts_from_other_servers": "<strong>Sabia?</strong> Como o Mastodon é descentralizado, alguns perfis que encontra estarão hospedados noutros servidores que não os seus. E ainda assim pode interagir com eles perfeitamente! O servidor deles está na segunda metade do nome de utilizador!",
|
"onboarding.tips.accounts_from_other_servers": "<strong>Sabia?</strong> Como o Mastodon é descentralizado, alguns perfis que encontra estarão hospedados noutros servidores que não os seus. E ainda assim pode interagir com eles perfeitamente! O servidor deles está na segunda metade do nome de utilizador!",
|
||||||
"onboarding.tips.migration": "<strong>Sabia?</strong> Se sentir que o {domain} não é um bom servidor para si, no futuro pode mudar para outro servidor Mastodon sem perder os seus seguidores. Pode até mesmo hospedar o seu próprio servidor!",
|
"onboarding.tips.migration": "<strong>Sabia?</strong> Se sentir que o {domain} não é um bom servidor para si, no futuro pode mudar para outro servidor Mastodon sem perder os seus seguidores. Pode até mesmo hospedar o seu próprio servidor!",
|
||||||
"onboarding.tips.verification": "<strong>Sabia que?</strong> Pode fazer a verificação do seu site, adicionando o link do seu perfil à primeira página do seu site, como também pode adicionar o seu site ao seu perfil? Sem taxas ou documentos!",
|
"onboarding.tips.verification": "<strong>Sabia que?</strong> Pode verificar a sua conta colocando uma hiperligação para o seu perfil Mastodon no seu próprio site e adicionando o site ao seu perfil. Sem taxas ou documentos!",
|
||||||
"password_confirmation.exceeds_maxlength": "A confirmação da palavra-passe excedeu o tamanho máximo ",
|
"password_confirmation.exceeds_maxlength": "A confirmação da palavra-passe excedeu o tamanho máximo ",
|
||||||
"password_confirmation.mismatching": "A confirmação da palavra-passe não corresponde",
|
"password_confirmation.mismatching": "A confirmação da palavra-passe não corresponde",
|
||||||
"picture_in_picture.restore": "Colocá-lo de volta",
|
"picture_in_picture.restore": "Colocá-lo de volta",
|
||||||
"poll.closed": "Fechado",
|
"poll.closed": "Fechado",
|
||||||
"poll.refresh": "Recarregar",
|
"poll.refresh": "Atualizar",
|
||||||
"poll.reveal": "Ver resultados",
|
"poll.reveal": "Ver resultados",
|
||||||
"poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}",
|
"poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}",
|
||||||
"poll.total_votes": "{count, plural, one {# voto} other {# votos}}",
|
"poll.total_votes": "{count, plural, one {# voto} other {# votos}}",
|
||||||
"poll.vote": "Votar",
|
"poll.vote": "Votar",
|
||||||
"poll.voted": "Votaste nesta resposta",
|
"poll.voted": "Votou nesta resposta",
|
||||||
"poll.votes": "{votes, plural, one {# voto } other {# votos}}",
|
"poll.votes": "{votes, plural, one {# voto } other {# votos}}",
|
||||||
"poll_button.add_poll": "Adicionar votação",
|
"poll_button.add_poll": "Adicionar uma sondagem",
|
||||||
"poll_button.remove_poll": "Remover sondagem",
|
"poll_button.remove_poll": "Remover sondagem",
|
||||||
"privacy.change": "Ajustar a privacidade da publicação",
|
"privacy.change": "Ajustar a privacidade da publicação",
|
||||||
"privacy.direct.long": "Todos os mencionados na publicação",
|
"privacy.direct.long": "Todos os mencionados na publicação",
|
||||||
|
@ -635,7 +635,7 @@
|
||||||
"privacy_policy.last_updated": "Última atualização em {date}",
|
"privacy_policy.last_updated": "Última atualização em {date}",
|
||||||
"privacy_policy.title": "Política de privacidade",
|
"privacy_policy.title": "Política de privacidade",
|
||||||
"recommended": "Recomendado",
|
"recommended": "Recomendado",
|
||||||
"refresh": "Actualizar",
|
"refresh": "Atualizar",
|
||||||
"regeneration_indicator.label": "A carregar…",
|
"regeneration_indicator.label": "A carregar…",
|
||||||
"regeneration_indicator.sublabel": "A tua página inicial está a ser preparada!",
|
"regeneration_indicator.sublabel": "A tua página inicial está a ser preparada!",
|
||||||
"relative_time.days": "{number}d",
|
"relative_time.days": "{number}d",
|
||||||
|
@ -677,7 +677,7 @@
|
||||||
"report.reasons.other": "É outra coisa",
|
"report.reasons.other": "É outra coisa",
|
||||||
"report.reasons.other_description": "O problema não se encaixa nas outras categorias",
|
"report.reasons.other_description": "O problema não se encaixa nas outras categorias",
|
||||||
"report.reasons.spam": "É spam",
|
"report.reasons.spam": "É spam",
|
||||||
"report.reasons.spam_description": "Hiperligações maliciosas, contactos falsos, ou respostas repetitivas",
|
"report.reasons.spam_description": "Hiperligações maliciosas, contactos falsos ou respostas repetitivas",
|
||||||
"report.reasons.violation": "Viola as regras do servidor",
|
"report.reasons.violation": "Viola as regras do servidor",
|
||||||
"report.reasons.violation_description": "Está ciente de que infringe regras específicas",
|
"report.reasons.violation_description": "Está ciente de que infringe regras específicas",
|
||||||
"report.rules.subtitle": "Selecione tudo o que se aplicar",
|
"report.rules.subtitle": "Selecione tudo o que se aplicar",
|
||||||
|
@ -733,8 +733,8 @@
|
||||||
"sign_in_banner.create_account": "Criar conta",
|
"sign_in_banner.create_account": "Criar conta",
|
||||||
"sign_in_banner.follow_anyone": "Siga alguém no fediverso e veja tudo em ordem cronológica. Sem algoritmos, anúncios ou clickbait à vista.",
|
"sign_in_banner.follow_anyone": "Siga alguém no fediverso e veja tudo em ordem cronológica. Sem algoritmos, anúncios ou clickbait à vista.",
|
||||||
"sign_in_banner.mastodon_is": "O Mastodon é a melhor maneira de acompanhar o que está a acontecer.",
|
"sign_in_banner.mastodon_is": "O Mastodon é a melhor maneira de acompanhar o que está a acontecer.",
|
||||||
"sign_in_banner.sign_in": "Iniciar Sessão",
|
"sign_in_banner.sign_in": "Iniciar sessão",
|
||||||
"sign_in_banner.sso_redirect": "Inicie Sessão ou Registe-se",
|
"sign_in_banner.sso_redirect": "Inicie sessão ou registe-se",
|
||||||
"status.admin_account": "Abrir a interface de moderação para @{name}",
|
"status.admin_account": "Abrir a interface de moderação para @{name}",
|
||||||
"status.admin_domain": "Abrir interface de moderação para {domain}",
|
"status.admin_domain": "Abrir interface de moderação para {domain}",
|
||||||
"status.admin_status": "Abrir esta publicação na interface de moderação",
|
"status.admin_status": "Abrir esta publicação na interface de moderação",
|
||||||
|
@ -742,7 +742,7 @@
|
||||||
"status.bookmark": "Guardar nos marcadores",
|
"status.bookmark": "Guardar nos marcadores",
|
||||||
"status.cancel_reblog_private": "Deixar de reforçar",
|
"status.cancel_reblog_private": "Deixar de reforçar",
|
||||||
"status.cannot_reblog": "Não é possível partilhar esta publicação",
|
"status.cannot_reblog": "Não é possível partilhar esta publicação",
|
||||||
"status.copy": "Copiar ligação para a publicação",
|
"status.copy": "Copiar hiperligação para a publicação",
|
||||||
"status.delete": "Eliminar",
|
"status.delete": "Eliminar",
|
||||||
"status.detailed_status": "Vista pormenorizada da conversa",
|
"status.detailed_status": "Vista pormenorizada da conversa",
|
||||||
"status.direct": "Mencionar @{name} em privado",
|
"status.direct": "Mencionar @{name} em privado",
|
||||||
|
@ -801,15 +801,15 @@
|
||||||
"time_remaining.moments": "Momentos restantes",
|
"time_remaining.moments": "Momentos restantes",
|
||||||
"time_remaining.seconds": "{número, plural, um {# second} outro {# seconds}} faltam",
|
"time_remaining.seconds": "{número, plural, um {# second} outro {# seconds}} faltam",
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} pessoa} other {{counter} pessoas}} {days, plural, one {no último dia} other {nos últimos {days} dias}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} pessoa} other {{counter} pessoas}} {days, plural, one {no último dia} other {nos últimos {days} dias}}",
|
||||||
"trends.trending_now": "Em alta neste momento",
|
"trends.trending_now": "Tendências atuais",
|
||||||
"ui.beforeunload": "O teu rascunho será perdido se abandonares o Mastodon.",
|
"ui.beforeunload": "O teu rascunho será perdido se abandonares o Mastodon.",
|
||||||
"units.short.billion": "{count}MM",
|
"units.short.billion": "{count}MM",
|
||||||
"units.short.million": "{count}M",
|
"units.short.million": "{count}M",
|
||||||
"units.short.thousand": "{count}m",
|
"units.short.thousand": "{count}m",
|
||||||
"upload_area.title": "Arraste e solte para enviar",
|
"upload_area.title": "Arrastar e largar para enviar",
|
||||||
"upload_button.label": "Juntar imagens, um vídeo, ou um ficheiro de som",
|
"upload_button.label": "Adicionar imagens, um vídeo ou um ficheiro de som",
|
||||||
"upload_error.limit": "Limite máximo do ficheiro a carregar excedido.",
|
"upload_error.limit": "Limite de envio de ficheiros excedido.",
|
||||||
"upload_error.poll": "O carregamento de ficheiros não é permitido em sondagens.",
|
"upload_error.poll": "Não é permitido o envio de ficheiros em sondagens.",
|
||||||
"upload_form.audio_description": "Descreva para pessoas com diminuição da acuidade auditiva",
|
"upload_form.audio_description": "Descreva para pessoas com diminuição da acuidade auditiva",
|
||||||
"upload_form.description": "Descreva para pessoas com diminuição da acuidade visual",
|
"upload_form.description": "Descreva para pessoas com diminuição da acuidade visual",
|
||||||
"upload_form.edit": "Editar",
|
"upload_form.edit": "Editar",
|
||||||
|
@ -820,7 +820,7 @@
|
||||||
"upload_modal.applying": "A aplicar…",
|
"upload_modal.applying": "A aplicar…",
|
||||||
"upload_modal.choose_image": "Escolher imagem",
|
"upload_modal.choose_image": "Escolher imagem",
|
||||||
"upload_modal.description_placeholder": "Grave e cabisbaixo, o filho justo zelava pela querida mãe doente",
|
"upload_modal.description_placeholder": "Grave e cabisbaixo, o filho justo zelava pela querida mãe doente",
|
||||||
"upload_modal.detect_text": "Detectar texto na imagem",
|
"upload_modal.detect_text": "Detetar texto na imagem",
|
||||||
"upload_modal.edit_media": "Editar media",
|
"upload_modal.edit_media": "Editar media",
|
||||||
"upload_modal.hint": "Clique ou arraste o círculo na pré-visualização para escolher o ponto focal que será sempre visível em todas as miniaturas.",
|
"upload_modal.hint": "Clique ou arraste o círculo na pré-visualização para escolher o ponto focal que será sempre visível em todas as miniaturas.",
|
||||||
"upload_modal.preparing_ocr": "A preparar o reconhecimento de caracteres (OCR)…",
|
"upload_modal.preparing_ocr": "A preparar o reconhecimento de caracteres (OCR)…",
|
||||||
|
|
|
@ -2789,7 +2789,7 @@ $ui-header-logo-wordmark-width: 99px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.column {
|
.column {
|
||||||
width: 350px;
|
width: 400px;
|
||||||
position: relative;
|
position: relative;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -2822,7 +2822,7 @@ $ui-header-logo-wordmark-width: 99px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.drawer {
|
.drawer {
|
||||||
width: 300px;
|
width: 350px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
@ -6437,7 +6437,7 @@ a.status-card {
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-option .poll__input {
|
.dialog-option .poll__input {
|
||||||
border-color: $inverted-text-color;
|
border-color: $darker-text-color;
|
||||||
color: $ui-secondary-color;
|
color: $ui-secondary-color;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
@ -6451,13 +6451,13 @@ a.status-card {
|
||||||
&:active,
|
&:active,
|
||||||
&:focus,
|
&:focus,
|
||||||
&:hover {
|
&:hover {
|
||||||
border-color: lighten($inverted-text-color, 15%);
|
border-color: $valid-value-color;
|
||||||
border-width: 4px;
|
border-width: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
border-color: $inverted-text-color;
|
border-color: $valid-value-color;
|
||||||
background: $inverted-text-color;
|
background: $valid-value-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8522,22 +8522,6 @@ noscript {
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&--unread {
|
|
||||||
background: lighten($ui-base-color, 2%);
|
|
||||||
|
|
||||||
&:focus {
|
|
||||||
background: lighten($ui-base-color, 4%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.conversation__content__info {
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conversation__content__relative-time {
|
|
||||||
color: $primary-text-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.announcements {
|
.announcements {
|
||||||
|
@ -8732,7 +8716,8 @@ noscript {
|
||||||
}
|
}
|
||||||
|
|
||||||
.notification,
|
.notification,
|
||||||
.status__wrapper {
|
.status__wrapper,
|
||||||
|
.conversation {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
&.unread {
|
&.unread {
|
||||||
|
@ -10931,6 +10916,7 @@ noscript {
|
||||||
}
|
}
|
||||||
|
|
||||||
.content-warning {
|
.content-warning {
|
||||||
|
box-sizing: border-box;
|
||||||
background: rgba($ui-highlight-color, 0.05);
|
background: rgba($ui-highlight-color, 0.05);
|
||||||
color: $secondary-text-color;
|
color: $secondary-text-color;
|
||||||
border-top: 1px solid;
|
border-top: 1px solid;
|
||||||
|
|
|
@ -28,22 +28,18 @@ class AnnualReport::Archetype < AnnualReport::Source
|
||||||
end
|
end
|
||||||
|
|
||||||
def polls_count
|
def polls_count
|
||||||
@polls_count ||= base_scope.where.not(poll_id: nil).count
|
@polls_count ||= report_statuses.where.not(poll_id: nil).count
|
||||||
end
|
end
|
||||||
|
|
||||||
def reblogs_count
|
def reblogs_count
|
||||||
@reblogs_count ||= base_scope.where.not(reblog_of_id: nil).count
|
@reblogs_count ||= report_statuses.where.not(reblog_of_id: nil).count
|
||||||
end
|
end
|
||||||
|
|
||||||
def replies_count
|
def replies_count
|
||||||
@replies_count ||= base_scope.where.not(in_reply_to_id: nil).where.not(in_reply_to_account_id: @account.id).count
|
@replies_count ||= report_statuses.where.not(in_reply_to_id: nil).where.not(in_reply_to_account_id: @account.id).count
|
||||||
end
|
end
|
||||||
|
|
||||||
def standalone_count
|
def standalone_count
|
||||||
@standalone_count ||= base_scope.without_replies.without_reblogs.count
|
@standalone_count ||= report_statuses.without_replies.without_reblogs.count
|
||||||
end
|
|
||||||
|
|
||||||
def base_scope
|
|
||||||
@account.statuses.where(id: year_as_snowflake_range)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,6 +17,6 @@ class AnnualReport::CommonlyInteractedWithAccounts < AnnualReport::Source
|
||||||
private
|
private
|
||||||
|
|
||||||
def commonly_interacted_with_accounts
|
def commonly_interacted_with_accounts
|
||||||
@account.statuses.reorder(nil).where(id: year_as_snowflake_range).where.not(in_reply_to_account_id: @account.id).group(:in_reply_to_account_id).having('count(*) > 1').order(total: :desc).limit(SET_SIZE).pluck(Arel.sql('in_reply_to_account_id, count(*) AS total'))
|
report_statuses.where.not(in_reply_to_account_id: @account.id).group(:in_reply_to_account_id).having('count(*) > 1').order(total: :desc).limit(SET_SIZE).pluck(Arel.sql('in_reply_to_account_id, count(*) AS total'))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,6 +17,6 @@ class AnnualReport::MostRebloggedAccounts < AnnualReport::Source
|
||||||
private
|
private
|
||||||
|
|
||||||
def most_reblogged_accounts
|
def most_reblogged_accounts
|
||||||
@account.statuses.reorder(nil).where(id: year_as_snowflake_range).where.not(reblog_of_id: nil).joins(reblog: :account).group('accounts.id').having('count(*) > 1').order(total: :desc).limit(SET_SIZE).pluck(Arel.sql('accounts.id, count(*) as total'))
|
report_statuses.where.not(reblog_of_id: nil).joins(reblog: :account).group('accounts.id').having('count(*) > 1').order(total: :desc).limit(SET_SIZE).pluck(Arel.sql('accounts.id, count(*) as total'))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,6 +17,6 @@ class AnnualReport::MostUsedApps < AnnualReport::Source
|
||||||
private
|
private
|
||||||
|
|
||||||
def most_used_apps
|
def most_used_apps
|
||||||
@account.statuses.reorder(nil).where(id: year_as_snowflake_range).joins(:application).group('oauth_applications.name').order(total: :desc).limit(SET_SIZE).pluck(Arel.sql('oauth_applications.name, count(*) as total'))
|
report_statuses.joins(:application).group('oauth_applications.name').order(total: :desc).limit(SET_SIZE).pluck(Arel.sql('oauth_applications.name, count(*) as total'))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,7 +17,7 @@ class AnnualReport::Percentiles < AnnualReport::Source
|
||||||
end
|
end
|
||||||
|
|
||||||
def statuses_created
|
def statuses_created
|
||||||
@statuses_created ||= @account.statuses.where(id: year_as_snowflake_range).count
|
@statuses_created ||= report_statuses.count
|
||||||
end
|
end
|
||||||
|
|
||||||
def total_with_fewer_followers
|
def total_with_fewer_followers
|
||||||
|
|
|
@ -10,6 +10,13 @@ class AnnualReport::Source
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
def report_statuses
|
||||||
|
@account
|
||||||
|
.statuses
|
||||||
|
.where(id: year_as_snowflake_range)
|
||||||
|
.reorder(nil)
|
||||||
|
end
|
||||||
|
|
||||||
def year_as_snowflake_range
|
def year_as_snowflake_range
|
||||||
(beginning_snowflake_id..ending_snowflake_id)
|
(beginning_snowflake_id..ending_snowflake_id)
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,7 +17,7 @@ class AnnualReport::TimeSeries < AnnualReport::Source
|
||||||
private
|
private
|
||||||
|
|
||||||
def statuses_per_month
|
def statuses_per_month
|
||||||
@statuses_per_month ||= @account.statuses.reorder(nil).where(id: year_as_snowflake_range).group(:period).pluck(Arel.sql("date_part('month', created_at)::int AS period, count(*)")).to_h
|
@statuses_per_month ||= report_statuses.group(:period).pluck(Arel.sql("date_part('month', created_at)::int AS period, count(*)")).to_h
|
||||||
end
|
end
|
||||||
|
|
||||||
def following_per_month
|
def following_per_month
|
||||||
|
|
|
@ -17,6 +17,6 @@ class AnnualReport::TopHashtags < AnnualReport::Source
|
||||||
private
|
private
|
||||||
|
|
||||||
def top_hashtags
|
def top_hashtags
|
||||||
Tag.joins(:statuses).where(statuses: { id: @account.statuses.where(id: year_as_snowflake_range).reorder(nil).select(:id) }).group(:id).having('count(*) > 1').order(total: :desc).limit(SET_SIZE).pluck(Arel.sql('COALESCE(tags.display_name, tags.name), count(*) AS total'))
|
Tag.joins(:statuses).where(statuses: { id: report_statuses.select(:id) }).group(:id).having('count(*) > 1').order(total: :desc).limit(SET_SIZE).pluck(Arel.sql('COALESCE(tags.display_name, tags.name), count(*) AS total'))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,6 +16,6 @@ class AnnualReport::TopStatuses < AnnualReport::Source
|
||||||
end
|
end
|
||||||
|
|
||||||
def base_scope
|
def base_scope
|
||||||
@account.statuses.public_visibility.joins(:status_stat).where(id: year_as_snowflake_range).reorder(nil)
|
report_statuses.public_visibility.joins(:status_stat)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,17 +4,11 @@ class AnnualReport::TypeDistribution < AnnualReport::Source
|
||||||
def generate
|
def generate
|
||||||
{
|
{
|
||||||
type_distribution: {
|
type_distribution: {
|
||||||
total: base_scope.count,
|
total: report_statuses.count,
|
||||||
reblogs: base_scope.where.not(reblog_of_id: nil).count,
|
reblogs: report_statuses.where.not(reblog_of_id: nil).count,
|
||||||
replies: base_scope.where.not(in_reply_to_id: nil).where.not(in_reply_to_account_id: @account.id).count,
|
replies: report_statuses.where.not(in_reply_to_id: nil).where.not(in_reply_to_account_id: @account.id).count,
|
||||||
standalone: base_scope.without_replies.without_reblogs.count,
|
standalone: report_statuses.without_replies.without_reblogs.count,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def base_scope
|
|
||||||
@account.statuses.where(id: year_as_snowflake_range)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,7 +12,7 @@ class ApplicationMailer < ActionMailer::Base
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def locale_for_account(account, &block)
|
def locale_for_account(account, &block)
|
||||||
I18n.with_locale(account.user_locale || I18n.locale || I18n.default_locale, &block)
|
I18n.with_locale(account.user_locale || I18n.default_locale, &block)
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_autoreply_headers!
|
def set_autoreply_headers!
|
||||||
|
|
|
@ -33,7 +33,7 @@ class UserMailer < Devise::Mailer
|
||||||
|
|
||||||
return unless @resource.active_for_authentication?
|
return unless @resource.active_for_authentication?
|
||||||
|
|
||||||
I18n.with_locale(locale) do
|
I18n.with_locale(locale(use_current_locale: true)) do
|
||||||
mail subject: default_devise_subject
|
mail subject: default_devise_subject
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -43,7 +43,7 @@ class UserMailer < Devise::Mailer
|
||||||
|
|
||||||
return unless @resource.active_for_authentication?
|
return unless @resource.active_for_authentication?
|
||||||
|
|
||||||
I18n.with_locale(locale) do
|
I18n.with_locale(locale(use_current_locale: true)) do
|
||||||
mail subject: default_devise_subject
|
mail subject: default_devise_subject
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -53,7 +53,7 @@ class UserMailer < Devise::Mailer
|
||||||
|
|
||||||
return unless @resource.active_for_authentication?
|
return unless @resource.active_for_authentication?
|
||||||
|
|
||||||
I18n.with_locale(locale) do
|
I18n.with_locale(locale(use_current_locale: true)) do
|
||||||
mail subject: default_devise_subject
|
mail subject: default_devise_subject
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -63,7 +63,7 @@ class UserMailer < Devise::Mailer
|
||||||
|
|
||||||
return unless @resource.active_for_authentication?
|
return unless @resource.active_for_authentication?
|
||||||
|
|
||||||
I18n.with_locale(locale) do
|
I18n.with_locale(locale(use_current_locale: true)) do
|
||||||
mail subject: default_devise_subject
|
mail subject: default_devise_subject
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -73,7 +73,7 @@ class UserMailer < Devise::Mailer
|
||||||
|
|
||||||
return unless @resource.active_for_authentication?
|
return unless @resource.active_for_authentication?
|
||||||
|
|
||||||
I18n.with_locale(locale) do
|
I18n.with_locale(locale(use_current_locale: true)) do
|
||||||
mail subject: default_devise_subject
|
mail subject: default_devise_subject
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -83,7 +83,7 @@ class UserMailer < Devise::Mailer
|
||||||
|
|
||||||
return unless @resource.active_for_authentication?
|
return unless @resource.active_for_authentication?
|
||||||
|
|
||||||
I18n.with_locale(locale) do
|
I18n.with_locale(locale(use_current_locale: true)) do
|
||||||
mail subject: default_devise_subject
|
mail subject: default_devise_subject
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -93,7 +93,7 @@ class UserMailer < Devise::Mailer
|
||||||
|
|
||||||
return unless @resource.active_for_authentication?
|
return unless @resource.active_for_authentication?
|
||||||
|
|
||||||
I18n.with_locale(locale) do
|
I18n.with_locale(locale(use_current_locale: true)) do
|
||||||
mail subject: default_devise_subject
|
mail subject: default_devise_subject
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -103,7 +103,7 @@ class UserMailer < Devise::Mailer
|
||||||
|
|
||||||
return unless @resource.active_for_authentication?
|
return unless @resource.active_for_authentication?
|
||||||
|
|
||||||
I18n.with_locale(locale) do
|
I18n.with_locale(locale(use_current_locale: true)) do
|
||||||
mail subject: default_devise_subject
|
mail subject: default_devise_subject
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -114,7 +114,7 @@ class UserMailer < Devise::Mailer
|
||||||
|
|
||||||
return unless @resource.active_for_authentication?
|
return unless @resource.active_for_authentication?
|
||||||
|
|
||||||
I18n.with_locale(locale) do
|
I18n.with_locale(locale(use_current_locale: true)) do
|
||||||
mail subject: I18n.t('devise.mailer.webauthn_credential.added.subject')
|
mail subject: I18n.t('devise.mailer.webauthn_credential.added.subject')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -125,7 +125,7 @@ class UserMailer < Devise::Mailer
|
||||||
|
|
||||||
return unless @resource.active_for_authentication?
|
return unless @resource.active_for_authentication?
|
||||||
|
|
||||||
I18n.with_locale(locale) do
|
I18n.with_locale(locale(use_current_locale: true)) do
|
||||||
mail subject: I18n.t('devise.mailer.webauthn_credential.deleted.subject')
|
mail subject: I18n.t('devise.mailer.webauthn_credential.deleted.subject')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -219,7 +219,7 @@ class UserMailer < Devise::Mailer
|
||||||
@instance = Rails.configuration.x.local_domain
|
@instance = Rails.configuration.x.local_domain
|
||||||
end
|
end
|
||||||
|
|
||||||
def locale
|
def locale(use_current_locale: false)
|
||||||
@resource.locale.presence || I18n.locale || I18n.default_locale
|
@resource.locale.presence || (use_current_locale && I18n.locale) || I18n.default_locale
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
%tr
|
%tr{ id: dom_id(invite) }
|
||||||
%td
|
%td
|
||||||
.input-copy
|
.input-copy
|
||||||
.input-copy__wrapper
|
.input-copy__wrapper
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
.applications-list
|
.applications-list
|
||||||
- @applications.each do |application|
|
- @applications.each do |application|
|
||||||
.applications-list__item
|
.applications-list__item{ id: dom_id(application) }
|
||||||
- if application.website.present?
|
- if application.website.present?
|
||||||
= link_to application.name, application.website, target: '_blank', rel: 'noopener noreferrer', class: 'announcements-list__item__title'
|
= link_to application.name, application.website, target: '_blank', rel: 'noopener noreferrer', class: 'announcements-list__item__title'
|
||||||
- else
|
- else
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
= f.input :mode,
|
= f.input :mode,
|
||||||
as: :radio_buttons,
|
as: :radio_buttons,
|
||||||
collection_wrapper_tag: 'ul',
|
collection_wrapper_tag: 'ul',
|
||||||
collection: Import::MODES,
|
collection: Form::Import::MODES,
|
||||||
item_wrapper_tag: 'li',
|
item_wrapper_tag: 'li',
|
||||||
label_method: ->(mode) { safe_join([I18n.t("imports.modes.#{mode}"), content_tag(:span, I18n.t("imports.modes.#{mode}_long"), class: 'hint')]) }
|
label_method: ->(mode) { safe_join([I18n.t("imports.modes.#{mode}"), content_tag(:span, I18n.t("imports.modes.#{mode}_long"), class: 'hint')]) }
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ pt-PT:
|
||||||
expires_at: Prazo
|
expires_at: Prazo
|
||||||
options: Escolhas
|
options: Escolhas
|
||||||
user:
|
user:
|
||||||
agreement: Acordo de serviço
|
agreement: Contrato de prestação de serviço
|
||||||
email: Endereço de correio electrónico
|
email: Endereço de correio electrónico
|
||||||
locale: Região
|
locale: Região
|
||||||
password: Palavra-passe
|
password: Palavra-passe
|
||||||
|
@ -19,7 +19,7 @@ pt-PT:
|
||||||
account:
|
account:
|
||||||
attributes:
|
attributes:
|
||||||
username:
|
username:
|
||||||
invalid: apenas letras, números e underscores
|
invalid: deve conter apenas letras, números e traços inferiores
|
||||||
reserved: está reservado
|
reserved: está reservado
|
||||||
admin/webhook:
|
admin/webhook:
|
||||||
attributes:
|
attributes:
|
||||||
|
@ -43,15 +43,15 @@ pt-PT:
|
||||||
blocked: usa um fornecedor de e-mail que não é permitido
|
blocked: usa um fornecedor de e-mail que não é permitido
|
||||||
unreachable: não parece existir
|
unreachable: não parece existir
|
||||||
role_id:
|
role_id:
|
||||||
elevated: não pode ser maior que o da sua função atual
|
elevated: não pode ser superior à sua função atual
|
||||||
user_role:
|
user_role:
|
||||||
attributes:
|
attributes:
|
||||||
permissions_as_keys:
|
permissions_as_keys:
|
||||||
dangerous: incluir permissões que não são seguras para a função base
|
dangerous: incluir permissões que não são seguras para a função base
|
||||||
elevated: não pode incluir permissões que a sua função atual não possui
|
elevated: não pode incluir permissões que a sua função atual não possua
|
||||||
own_role: não pode ser alterado com a sua função atual
|
own_role: não pode ser alterado com a sua função atual
|
||||||
position:
|
position:
|
||||||
elevated: não pode ser maior que o da sua função atual
|
elevated: não pode ser superior à sua função atual
|
||||||
own_role: não pode ser alterado com a sua função atual
|
own_role: não pode ser alterado com a sua função atual
|
||||||
webhook:
|
webhook:
|
||||||
attributes:
|
attributes:
|
||||||
|
|
|
@ -906,6 +906,7 @@ ar:
|
||||||
moderation:
|
moderation:
|
||||||
title: الحالة
|
title: الحالة
|
||||||
newest: الأحدث
|
newest: الأحدث
|
||||||
|
reset: إعادة التعيين
|
||||||
review: حالة المراجعة
|
review: حالة المراجعة
|
||||||
search: البحث
|
search: البحث
|
||||||
title: الوسوم
|
title: الوسوم
|
||||||
|
@ -985,6 +986,7 @@ ar:
|
||||||
other: مستخدَم من قِبل %{count} شخص خلال الأسبوع الماضي
|
other: مستخدَم من قِبل %{count} شخص خلال الأسبوع الماضي
|
||||||
two: مستخدَم من قِبل %{count} شخصين خلال الأسبوع الماضي
|
two: مستخدَم من قِبل %{count} شخصين خلال الأسبوع الماضي
|
||||||
zero: مستخدَم من قِبل %{count} شخص خلال الأسبوع الماضي
|
zero: مستخدَم من قِبل %{count} شخص خلال الأسبوع الماضي
|
||||||
|
title: التوصيات والرائجة
|
||||||
trending: المتداولة
|
trending: المتداولة
|
||||||
warning_presets:
|
warning_presets:
|
||||||
add_new: إضافة واحد جديد
|
add_new: إضافة واحد جديد
|
||||||
|
@ -1141,8 +1143,10 @@ ar:
|
||||||
security: الأمان
|
security: الأمان
|
||||||
set_new_password: إدخال كلمة مرور جديدة
|
set_new_password: إدخال كلمة مرور جديدة
|
||||||
setup:
|
setup:
|
||||||
|
email_below_hint_html: قم بفحص مجلد البريد المزعج الخاص بك، أو قم بطلب آخر. يمكنك تصحيح عنوان بريدك الإلكتروني إن كان خاطئا.
|
||||||
email_settings_hint_html: انقر على الرابط الذي أرسلناه لك للتحقق من %{email}. سننتظر هنا.
|
email_settings_hint_html: انقر على الرابط الذي أرسلناه لك للتحقق من %{email}. سننتظر هنا.
|
||||||
link_not_received: ألم تحصل على رابط؟
|
link_not_received: ألم تحصل على رابط؟
|
||||||
|
new_confirmation_instructions_sent: سوف تتلقى رسالة بريد إلكتروني جديدة مع رابط التأكيد في غضون بضع دقائق!
|
||||||
title: تحقَّق من بريدك الوارِد
|
title: تحقَّق من بريدك الوارِد
|
||||||
sign_in:
|
sign_in:
|
||||||
preamble_html: قم بتسجيل الدخول باستخدام بيانات الاعتماد الخاصة بك على <strong>%{domain}</strong>. إن استُضيف حسابك على خادم مختلف عن هذا الخادم، لن تتمكن من الولوج هنا.
|
preamble_html: قم بتسجيل الدخول باستخدام بيانات الاعتماد الخاصة بك على <strong>%{domain}</strong>. إن استُضيف حسابك على خادم مختلف عن هذا الخادم، لن تتمكن من الولوج هنا.
|
||||||
|
@ -1153,7 +1157,9 @@ ar:
|
||||||
title: دعنا نجهّز %{domain}.
|
title: دعنا نجهّز %{domain}.
|
||||||
status:
|
status:
|
||||||
account_status: حالة الحساب
|
account_status: حالة الحساب
|
||||||
|
confirming: في انتظار اكتمال تأكيد البريد الإلكتروني.
|
||||||
functional: حسابك يعمل بشكل كامل.
|
functional: حسابك يعمل بشكل كامل.
|
||||||
|
pending: إن طلبك قيد المراجعة من قبل فريقنا. قد يستغرق هذا بعض الوقت. سوف تتلقى بريدا إلكترونيا إذا تمت الموافقة على طلبك.
|
||||||
redirecting_to: حسابك غير نشط لأنه تم تحويله حاليا إلى %{acct}.
|
redirecting_to: حسابك غير نشط لأنه تم تحويله حاليا إلى %{acct}.
|
||||||
self_destruct: نظرًا لإغلاق %{domain}، ستحصل فقط على وصول محدود إلى حسابك.
|
self_destruct: نظرًا لإغلاق %{domain}، ستحصل فقط على وصول محدود إلى حسابك.
|
||||||
view_strikes: عرض العقوبات السابقة المُطَبَّقة ضد حسابك
|
view_strikes: عرض العقوبات السابقة المُطَبَّقة ضد حسابك
|
||||||
|
@ -1196,6 +1202,9 @@ ar:
|
||||||
before: 'يرجى قراءة هذه الملاحظات بتأنّي قبل المواصلة:'
|
before: 'يرجى قراءة هذه الملاحظات بتأنّي قبل المواصلة:'
|
||||||
caches: قد يبقى المحتوى الذي تم تخزينه مؤقتًا مِن طرف الخوادم الأخرى
|
caches: قد يبقى المحتوى الذي تم تخزينه مؤقتًا مِن طرف الخوادم الأخرى
|
||||||
data_removal: سوف تُحذَف منشوراتك والبيانات الأخرى نهائيا
|
data_removal: سوف تُحذَف منشوراتك والبيانات الأخرى نهائيا
|
||||||
|
email_change_html: بإمكانك <a href="%{path}">تغيير عنوان بريدك الإلكتروني</a> دون أن يُحذف حسابك
|
||||||
|
email_contact_html: إن لم تتلقّ أي شيء ، يمكنك مراسلة <a href="mailto:%{email}">%{email}</a> لطلب المساعدة
|
||||||
|
email_reconfirmation_html: إن لم تتلقّ الرسالة الإلكترونية للتأكيد ، بإمكانك <a href="%{path}">إعادة طلبها ثانيةً</a>
|
||||||
irreversible: لن يكون بإمكانك استرجاع أو إعادة تنشيط حسابك
|
irreversible: لن يكون بإمكانك استرجاع أو إعادة تنشيط حسابك
|
||||||
more_details_html: للمزيد مِن التفاصيل ، يرجى الإطلاع على <a href="%{terms_path}">سياسة الخصوصية</a>.
|
more_details_html: للمزيد مِن التفاصيل ، يرجى الإطلاع على <a href="%{terms_path}">سياسة الخصوصية</a>.
|
||||||
username_available: سيصبح اسم مستخدمك متوفرا ثانية
|
username_available: سيصبح اسم مستخدمك متوفرا ثانية
|
||||||
|
@ -1448,7 +1457,7 @@ ar:
|
||||||
two: "%{count} استخدامات"
|
two: "%{count} استخدامات"
|
||||||
zero: "%{count} استخدامات"
|
zero: "%{count} استخدامات"
|
||||||
max_uses_prompt: بلا حدود
|
max_uses_prompt: بلا حدود
|
||||||
prompt: توليد و مشاركة روابط للسماح للآخَرين بالنفاذ إلى مثيل الخادم هذا
|
prompt: توليد و مشاركة روابط للسماح للآخَرين النفاذ إلى هذا الخادم
|
||||||
table:
|
table:
|
||||||
expires_at: تنتهي مدة صلاحيتها في
|
expires_at: تنتهي مدة صلاحيتها في
|
||||||
uses: عدد الاستخدامات
|
uses: عدد الاستخدامات
|
||||||
|
@ -1460,6 +1469,7 @@ ar:
|
||||||
authentication_methods:
|
authentication_methods:
|
||||||
otp: تطبيق المصادقة الثنائية
|
otp: تطبيق المصادقة الثنائية
|
||||||
password: كلمة المرور
|
password: كلمة المرور
|
||||||
|
sign_in_token: رمز الأمان للبريد الإلكتروني
|
||||||
webauthn: مفاتيح الأمان
|
webauthn: مفاتيح الأمان
|
||||||
description_html: إذا رأيت النشاط الذي لا تتعرف عليه، فكر في تغيير كلمة المرور الخاصة بك وتفعيل المصادقة ذات العاملين.
|
description_html: إذا رأيت النشاط الذي لا تتعرف عليه، فكر في تغيير كلمة المرور الخاصة بك وتفعيل المصادقة ذات العاملين.
|
||||||
empty: لا يوجد سجل مصادقة متاح
|
empty: لا يوجد سجل مصادقة متاح
|
||||||
|
@ -1553,6 +1563,7 @@ ar:
|
||||||
update:
|
update:
|
||||||
subject: قام %{name} بتحرير منشور
|
subject: قام %{name} بتحرير منشور
|
||||||
notifications:
|
notifications:
|
||||||
|
administration_emails: إشعارات البريد الإلكتروني الإدارية
|
||||||
email_events_hint: 'اختر الأحداث التي تريد أن تصِلَك اشعارات عنها:'
|
email_events_hint: 'اختر الأحداث التي تريد أن تصِلَك اشعارات عنها:'
|
||||||
number:
|
number:
|
||||||
human:
|
human:
|
||||||
|
@ -1811,13 +1822,13 @@ ar:
|
||||||
keep_media: الاحتفاظ بالمنشورات ذات وسائط مرفقة
|
keep_media: الاحتفاظ بالمنشورات ذات وسائط مرفقة
|
||||||
keep_media_hint: لن تُحذف أي من منشوراتك التي تحتوي على وسائط مرفقة
|
keep_media_hint: لن تُحذف أي من منشوراتك التي تحتوي على وسائط مرفقة
|
||||||
keep_pinned: الاحتفاظ بالمنشورات المثبتة
|
keep_pinned: الاحتفاظ بالمنشورات المثبتة
|
||||||
keep_pinned_hint: لم تقوم بحذف أي من مشاركتك المثبتة
|
keep_pinned_hint: لن تحذف أي من منشوراتك المثبتة
|
||||||
keep_polls: الاحتفاظ باستطلاعات الرأي
|
keep_polls: الاحتفاظ باستطلاعات الرأي
|
||||||
keep_polls_hint: لم تقم بحذف أي من استطلاعاتك
|
keep_polls_hint: لم تقم بحذف أي من استطلاعاتك
|
||||||
keep_self_bookmark: احتفظ بالمنشورات التي أدرجتها في الفواصل المرجعية
|
keep_self_bookmark: احتفظ بالمنشورات التي أدرجتها في الفواصل المرجعية
|
||||||
keep_self_bookmark_hint: لم تقم بحذف مشاركاتك الخاصة إذا قمت بوضع علامة مرجعية عليها
|
keep_self_bookmark_hint: لن تحذف منشوراتك الخاصة إذا قمت بوضع علامة مرجعية عليها
|
||||||
keep_self_fav: احتفظ بالمنشورات التي أدرجتها في المفضلة
|
keep_self_fav: احتفظ بالمنشورات التي أدرجتها في المفضلة
|
||||||
keep_self_fav_hint: لم تقم بحذف مشاركاتك الخاصة إذا كنت قد فضلتهم
|
keep_self_fav_hint: لن تحذف منشوراتك الخاصة إذا كنت قد فضلتها
|
||||||
min_age:
|
min_age:
|
||||||
'1209600': أسبوعان
|
'1209600': أسبوعان
|
||||||
'15778476': 6 أشهر
|
'15778476': 6 أشهر
|
||||||
|
@ -1828,9 +1839,9 @@ ar:
|
||||||
'63113904': سنتان
|
'63113904': سنتان
|
||||||
'7889238': 3 أشهر
|
'7889238': 3 أشهر
|
||||||
min_age_label: عتبة العمر
|
min_age_label: عتبة العمر
|
||||||
min_favs: إبقاء المشاركات المفضلة أكثر من
|
min_favs: إبقاء المنشورات المفضلة على الأقل
|
||||||
min_favs_hint: لن تُحذف أي من منشوراتك التي تلقّت على الأقل هذا العدد من المفضلات. اتركه فارغاً لحذف المنشورات مهما كان عدد المفضلات التي تلقتها
|
min_favs_hint: لن تُحذف أي من منشوراتك التي تلقّت على الأقل هذا العدد من المفضلات. اتركه فارغاً لحذف المنشورات مهما كان عدد المفضلات التي تلقتها
|
||||||
min_reblogs: إبقاء المنشورات المعاد نشرها أكثر من
|
min_reblogs: إبقاء المنشورات المعاد نشرها على الأقل
|
||||||
min_reblogs_hint: لن تُحذف أي من منشوراتك التي أعيد مشاركتها أكثر من هذا العدد من المرات. اتركه فارغاً لحذف المنشورات بغض النظر عن عدد إعادات النشر
|
min_reblogs_hint: لن تُحذف أي من منشوراتك التي أعيد مشاركتها أكثر من هذا العدد من المرات. اتركه فارغاً لحذف المنشورات بغض النظر عن عدد إعادات النشر
|
||||||
stream_entries:
|
stream_entries:
|
||||||
sensitive_content: محتوى حساس
|
sensitive_content: محتوى حساس
|
||||||
|
|
|
@ -2,117 +2,117 @@
|
||||||
pt-PT:
|
pt-PT:
|
||||||
devise:
|
devise:
|
||||||
confirmations:
|
confirmations:
|
||||||
confirmed: O seu endereço correio electrónico foi correctamente confirmado.
|
confirmed: O seu endereço de e-mail foi corretamente confirmado.
|
||||||
send_instructions: Vais receber um e-mail com as instruções para confirmar o teu endereço de e-mail dentro de alguns minutos. Por favor, verifica a caixa de spam se não recebeu o e-mail.
|
send_instructions: Irá receber um e-mail com instruções sobre como confirmar o seu endereço de e-mail dentro de alguns minutos. Verifique a sua pasta de spam se não recebeu este e-mail.
|
||||||
send_paranoid_instructions: Se o teu endereço de e-mail já existir na nossa base de dados, vais receber um e-mail com as instruções de confirmação dentro de alguns minutos. Por favor, verifica a caixa de spam se não recebeu o e-mail.
|
send_paranoid_instructions: Se o seu endereço de e-mail existir na nossa base de dados, receberá um e-mail com instruções sobre como confirmar o seu endereço de e-mail dentro de alguns minutos. Verifique a sua pasta de spam se não recebeu este e-mail.
|
||||||
failure:
|
failure:
|
||||||
already_authenticated: A tua sessão já está aberta.
|
already_authenticated: Já tem sessão iniciada.
|
||||||
inactive: A tua conta ainda não está ativada.
|
inactive: A sua conta ainda não está ativada.
|
||||||
invalid: "%{authentication_keys} ou palavra-passe inválida."
|
invalid: "%{authentication_keys} ou palavra-passe inválida."
|
||||||
last_attempt: Tem só mais uma tentativa antes da sua conta ser bloqueada.
|
last_attempt: Tem só mais uma tentativa antes da sua conta ser bloqueada.
|
||||||
locked: A tua conta está bloqueada.
|
locked: A sua conta está bloqueada.
|
||||||
not_found_in_database: "%{authentication_keys} ou palavra-passe inválida."
|
not_found_in_database: "%{authentication_keys} ou palavra-passe inválida."
|
||||||
omniauth_user_creation_failure: Erro ao criar uma conta para esta identidade.
|
omniauth_user_creation_failure: Erro ao criar uma conta para esta identidade.
|
||||||
pending: A sua conta está ainda a aguardar revisão.
|
pending: A sua conta está ainda a aguardar revisão.
|
||||||
timeout: A tua sessão expirou. Por favor, entra de novo para continuares.
|
timeout: A sua sessão expirou. Inicie sessão novamente para continuar.
|
||||||
unauthenticated: Precisas de entrar na tua conta ou de te registares antes de continuar.
|
unauthenticated: É necessário iniciar sessão ou registar-se antes de continuar.
|
||||||
unconfirmed: Tens de confirmar o teu endereço de e-mail antes de continuar.
|
unconfirmed: Tem de confirmar o seu endereço de e-mail antes de continuar.
|
||||||
mailer:
|
mailer:
|
||||||
confirmation_instructions:
|
confirmation_instructions:
|
||||||
action: Verificar o endereço de e-mail
|
action: Verificar o endereço de e-mail
|
||||||
action_with_app: Confirmar e regressar a %{app}
|
action_with_app: Confirmar e regressar a %{app}
|
||||||
explanation: Criou uma conta em %{host} com este endereço de e-mail. Está a um clique de ativá-la. Se não foi você que fez este registo, por favor ignore esta mensagem.
|
explanation: Foi criada uma conta em %{host} com este endereço de e-mail. Está a um clique de ativá-la. Se não foi você que fez este registo, por favor ignore esta mensagem.
|
||||||
explanation_when_pending: Candidatou-se com um convite para %{host} com este endereço de e-mail. Logo que confirme o seu endereço de e-mail, iremos rever a sua candidatura. Pode iniciar sessão para alterar os seus dados ou eliminar a sua conta, mas não poderá aceder à maioria das funções até que a sua conta seja aprovada. Se a sua inscrição for indeferida, os seus dados serão eliminados, pelo que não será necessária qualquer ação adicional da sua parte. Se não solicitou este convite, queira ignorar este e-mail.
|
explanation_when_pending: Candidatou-se com um convite para %{host} com este endereço de e-mail. Logo que confirme o seu endereço de e-mail, iremos rever a sua candidatura. Pode iniciar sessão para alterar os seus dados ou eliminar a sua conta, mas não poderá aceder à maioria das funções até que a sua conta seja aprovada. Se a sua inscrição for indeferida, os seus dados serão eliminados, pelo que não será necessária qualquer ação adicional da sua parte. Se não solicitou este convite, queira ignorar este e-mail.
|
||||||
extra_html: Por favor leia as <a href="%{terms_path}">regras da instância</a> e os <a href="%{policy_path}">nossos termos de serviço</a>.
|
extra_html: Por favor leia as <a href="%{terms_path}">regras do servidor</a> e os <a href="%{policy_path}">nossos termos de serviço</a>.
|
||||||
subject: 'Mastodon: Instruções de confirmação %{instance}'
|
subject: 'Mastodon: instruções de confirmação para %{instance}'
|
||||||
title: Verificar o endereço de e-mail
|
title: Verificar o endereço de e-mail
|
||||||
email_changed:
|
email_changed:
|
||||||
explanation: 'O e-mail associado à sua conta será alterado para:'
|
explanation: 'O e-mail associado à sua conta será alterado para:'
|
||||||
extra: Se não alterou o seu e-mail, é possível que alguém tenha conseguido aceder à sua conta. Por favor altere a sua palavra-passe imediatamente ou entra em contacto com um administrador da instância se tiver ficado sem acesso à sua conta.
|
extra: Se não alterou o seu e-mail, é possível que alguém tenha conseguido aceder à sua conta. Por favor altere a sua palavra-passe imediatamente ou entre em contacto com um administrador do servidor se tiver ficado sem acesso à sua conta.
|
||||||
subject: 'Mastodon: E-mail alterado'
|
subject: 'Mastodon: e-mail alterado'
|
||||||
title: Novo endereço de e-mail
|
title: Novo endereço de e-mail
|
||||||
password_change:
|
password_change:
|
||||||
explanation: A palavra-passe da tua conta foi alterada.
|
explanation: A palavra-passe da sua conta foi alterada.
|
||||||
extra: Se não alterou a sua palavra-passe, é possível que alguém tenha conseguido aceder à sua conta. Por favor altere a sua palavra-passe imediatamente ou entre em contacto com um administrador da instância se tiver ficado sem acesso à sua conta.
|
extra: Se não alterou a sua palavra-passe, é possível que alguém tenha conseguido aceder à sua conta. Por favor altere a sua palavra-passe imediatamente ou entre em contacto com um administrador do servidor se tiver ficado sem acesso à sua conta.
|
||||||
subject: 'Mastodon: palavra-passe alterada'
|
subject: 'Mastodon: palavra-passe alterada'
|
||||||
title: Palavra-passe alterada
|
title: Palavra-passe alterada
|
||||||
reconfirmation_instructions:
|
reconfirmation_instructions:
|
||||||
explanation: Confirme o seu novo endereço para alterar o e-mail.
|
explanation: Confirme o seu novo endereço para alterar o e-mail.
|
||||||
extra: Se esta mudança não foi iniciada por si, queira ignorar este e-mail. O endereço de correio electrónico da sua conta do Mastodon não irá mudar enquanto não aceder à hiperligação acima.
|
extra: Se esta alteração não foi iniciada por si, ignore este e-mail. O endereço de e-mail da conta Mastodon não será alterado até aceder à hiperligação acima.
|
||||||
subject: 'Mastodon: Confirmação de e-mail %{instance}'
|
subject: 'Mastodon: confirmação de e-mail para %{instance}'
|
||||||
title: Validar o endereço de e-mail
|
title: Validar o endereço de e-mail
|
||||||
reset_password_instructions:
|
reset_password_instructions:
|
||||||
action: Alterar palavra-passe
|
action: Alterar palavra-passe
|
||||||
explanation: Pediste a alteração da palavra-passe da tua conta.
|
explanation: Solicitou uma nova palavra-passe para a sua conta.
|
||||||
extra: Se não fez este pedido, queira ignorar este e-mail. A sua palavra-passe não irá mudar se não aceder à hiperligação acima e criar uma nova.
|
extra: Se não solicitou esta alteração, ignore este e-mail. A sua palavra-passe não será alterada até aceder à hiperligação acima e criar uma nova.
|
||||||
subject: 'Mastodon: Instruções para redefinir a palavra-passe'
|
subject: 'Mastodon: instruções para redefinir a palavra-passe'
|
||||||
title: Solicitar nova palavra-passe
|
title: Solicitar nova palavra-passe
|
||||||
two_factor_disabled:
|
two_factor_disabled:
|
||||||
explanation: O acesso agora é possível usando apenas o endereço de correio eletrónico e palavra-passe.
|
explanation: O início de sessão é agora possível utilizando apenas o endereço de e-mail e a palavra-passe.
|
||||||
subject: 'Mastodon: Autenticação de duas etapas desativada'
|
subject: 'Mastodon: autenticação de duas etapas desativada'
|
||||||
subtitle: A autenticação de dois fatores foi desativada para a sua conta.
|
subtitle: A autenticação de dois fatores foi desativada para a sua conta.
|
||||||
title: 2FA desativado
|
title: 2FA desativado
|
||||||
two_factor_enabled:
|
two_factor_enabled:
|
||||||
explanation: Um token gerado pelo aplicativo TOTP emparelhado será necessário para login.
|
explanation: Para iniciar sessão, será necessário um token gerado pela aplicação TOTP emparelhada.
|
||||||
subject: 'Mastodon: Autenticação em duas etapas ativada'
|
subject: 'Mastodon: autenticação em duas etapas ativada'
|
||||||
subtitle: A autenticação de dois fatores foi habilitada para sua conta.
|
subtitle: A autenticação de dois fatores foi ativada para a sua conta.
|
||||||
title: 2FA ativado
|
title: 2FA ativado
|
||||||
two_factor_recovery_codes_changed:
|
two_factor_recovery_codes_changed:
|
||||||
explanation: Os códigos de recuperação anteriores foram invalidados e novos foram gerados.
|
explanation: Os códigos de recuperação anteriores foram invalidados e foram gerados novos códigos.
|
||||||
subject: 'Mastodon: Gerados novos códigos de recuperação em duas etapas'
|
subject: 'Mastodon: gerados novos códigos de recuperação em duas etapas'
|
||||||
subtitle: Os códigos de recuperação anteriores foram invalidados e novos foram gerados.
|
subtitle: Os códigos de recuperação anteriores foram invalidados e foram gerados novos códigos.
|
||||||
title: Códigos de recuperação 2FA alterados
|
title: Códigos de recuperação 2FA alterados
|
||||||
unlock_instructions:
|
unlock_instructions:
|
||||||
subject: 'Mastodon: Instruções para desbloquear a tua conta'
|
subject: 'Mastodon: instruções para desbloquear'
|
||||||
webauthn_credential:
|
webauthn_credential:
|
||||||
added:
|
added:
|
||||||
explanation: A seguinte chave de segurança foi adicionada à sua conta
|
explanation: A seguinte chave de segurança foi adicionada à sua conta
|
||||||
subject: 'Mastodon: Nova chave de segurança'
|
subject: 'Mastodon: nova chave de segurança'
|
||||||
title: Foi adicionada uma nova chave de segurança
|
title: Foi adicionada uma nova chave de segurança
|
||||||
deleted:
|
deleted:
|
||||||
explanation: A seguinte chave de segurança foi eliminada da sua conta
|
explanation: A seguinte chave de segurança foi eliminada da sua conta
|
||||||
subject: 'Mastodon: Chave de segurança eliminada'
|
subject: 'Mastodon: chave de segurança eliminada'
|
||||||
title: Uma das suas chaves de segurança foi eliminada
|
title: Uma das suas chaves de segurança foi eliminada
|
||||||
webauthn_disabled:
|
webauthn_disabled:
|
||||||
explanation: A autenticação com chaves de segurança foi desativada para sua conta.
|
explanation: A autenticação com chaves de segurança foi desativada para sua conta.
|
||||||
extra: O login agora é possível usando apenas o token gerado pelo aplicativo TOTP emparelhado.
|
extra: O início de sessão é agora possível utilizando apenas o token gerado pela aplicação TOTP emparelhada.
|
||||||
subject: 'Mastodon: Autenticação com chave de segurança desativada'
|
subject: 'Mastodon: autenticação com chave de segurança desativada'
|
||||||
title: Chaves de segurança desativadas
|
title: Chaves de segurança desativadas
|
||||||
webauthn_enabled:
|
webauthn_enabled:
|
||||||
explanation: A autenticação da chave de segurança foi habilitada para sua conta.
|
explanation: A autenticação por chave de segurança foi ativada para a sua conta.
|
||||||
extra: Sua chave de segurança agora pode ser usada para login.
|
extra: A sua chave de segurança pode agora ser utilizada para iniciar sessão.
|
||||||
subject: 'Mastodon: Autenticação com chave de segurança ativada'
|
subject: 'Mastodon: autenticação com chave de segurança ativada'
|
||||||
title: Chaves de segurança ativadas
|
title: Chaves de segurança ativadas
|
||||||
omniauth_callbacks:
|
omniauth_callbacks:
|
||||||
failure: Não foi possível autenticar %{kind} porque "%{reason}".
|
failure: Não foi possível autenticar %{kind} porque "%{reason}".
|
||||||
success: Autenticado correctamente na conta %{kind}.
|
success: Autenticado correctamente na conta %{kind}.
|
||||||
passwords:
|
passwords:
|
||||||
no_token: Não pode aceder a esta página se não vier através da ligação enviada por e-mail para alteração da sua palavra-passe. Se de facto usou essa ligação para chegar até aqui, queira garantir de que usou o endereço URL completo.
|
no_token: Não pode aceder a esta página se não vier através da hiperligação enviada por e-mail para alteração da sua palavra-passe. Se de facto usou essa hiperligação para chegar até aqui, verifique se usou o endereço URL completo.
|
||||||
send_instructions: Vai receber um e-mail com instruções para alterar a palavra-passe dentro de alguns minutos.
|
send_instructions: Se o seu endereço de e-mail existir na nossa base de dados, receberá uma hiperligação de recuperação da palavra-passe no seu endereço de e-mail dentro de alguns minutos. Verifique a sua pasta de spam se não recebeu esta mensagem de correio eletrónico.
|
||||||
send_paranoid_instructions: Se o seu endereço de e-mail existir na nossa base de dados, dentro de alguns minutos irá receber uma ligação para recuperar a palavra-passe.
|
send_paranoid_instructions: Se o seu endereço de e-mail existir na nossa base de dados, receberá uma hiperligação de recuperação da palavra-passe no seu endereço de e-mail dentro de alguns minutos. Verifique a sua pasta de spam se não recebeu esta mensagem de correio eletrónico.
|
||||||
updated: A tua palavra-passe foi alterada. Estás agora autenticado na tua conta.
|
updated: A sua palavra-passe foi alterada com sucesso. Está agora autenticado.
|
||||||
updated_not_active: A tua palavra-passe foi alterada.
|
updated_not_active: A tua palavra-passe foi alterada.
|
||||||
registrations:
|
registrations:
|
||||||
destroyed: Adeus! A tua conta foi cancelada. Esperamos ver-te em breve.
|
destroyed: Adeus! A sua conta foi cancelada com sucesso. Esperamos voltar a vê-lo em breve.
|
||||||
signed_up: Seja bem-vindo! A sua conta foi correctamente registada.
|
signed_up: Bem-vindo! A sua conta foi registada com sucesso.
|
||||||
signed_up_but_inactive: A tua conta foi registada. No entanto ainda não está activa.
|
signed_up_but_inactive: Registou-se com sucesso. No entanto, não foi possível iniciar sessão porque a sua conta ainda não está ativada.
|
||||||
signed_up_but_locked: A sua conta foi correctamente registada. Contudo, não pudemos iniciar sessão porque a sua conta está bloqueada.
|
signed_up_but_locked: Registou-se com sucesso. No entanto, não foi possível iniciar sessão porque a sua conta está bloqueada.
|
||||||
signed_up_but_pending: Foi enviada uma hiperligação de confirmação para o seu correio electrónico. Só depois de clicar na hiperligação avaliaremos a sua inscrição. Será notificado caso a sua conta seja aprovada.
|
signed_up_but_pending: Foi enviada uma mensagem com uma hiperligação de confirmação para o seu endereço de e-mail. Depois de clicar na hiperligação, analisaremos a sua candidatura. Será notificado se for aprovado.
|
||||||
signed_up_but_unconfirmed: Foi enviada uma hiperligação de confirmação para o seu correio electrónico. Queira usar essa hiperligação para activar a sua conta.
|
signed_up_but_unconfirmed: Foi enviada para o seu endereço de e-mail uma mensagem com uma hiperligação de confirmação. Siga a hiperligação para ativar a sua conta. Verifique a sua pasta de spam se não recebeu esta mensagem de e-mail.
|
||||||
update_needs_confirmation: Solicitou uma alteração da informação da sua conta, mas para tal é necessário confirmá-la. Queira ver o seu correio electrónico e seguir a hiperligação para a confirmar. Se não encontrar essa mensagem, veja se está na pasta de lixo electrónico.
|
update_needs_confirmation: Atualizou a sua conta com sucesso, mas temos de verificar o seu novo endereço de e-mail. Verifique o seu e-mail e siga a hiperligação de confirmação para confirmar o seu novo endereço de e-mail. Verifique a sua pasta de spam se não recebeu esta mensagem de correio eletrónico.
|
||||||
updated: A sua conta foi correctamente actualizada.
|
updated: A sua conta foi corretamente atualizada.
|
||||||
sessions:
|
sessions:
|
||||||
already_signed_out: Sessão encerrada.
|
already_signed_out: Sessão encerrada.
|
||||||
signed_in: Sessão iniciada.
|
signed_in: Sessão iniciada.
|
||||||
signed_out: Sessão encerrada.
|
signed_out: Sessão encerrada.
|
||||||
unlocks:
|
unlocks:
|
||||||
send_instructions: Dentro de alguns momentos, irá receber um e-mail com instruções para desbloquear a sua conta. Consulte a sua pasta de lixo electrónico se não o encontrar.
|
send_instructions: Receberá um e-mail com instruções sobre como desbloquear a sua conta dentro de alguns minutos. Verifique a sua pasta de spam se não recebeu este e-mail.
|
||||||
send_paranoid_instructions: Se a sua conta existir, dentro de momentos irá receber um e-mail com instruções para a desbloquear. Consulte a sua pasta de lixo electrónico se não o encontrar.
|
send_paranoid_instructions: Se a sua conta existir, receberá um e-mail com instruções sobre como a desbloquear dentro de alguns minutos. Verifique a sua pasta de spam se não recebeu este e-mail.
|
||||||
unlocked: A sua conta foi correctamente desbloqueada. Queira iniciar uma nova sessão para continuar.
|
unlocked: A sua conta foi desbloqueada com sucesso. Inicie sessão para continuar.
|
||||||
errors:
|
errors:
|
||||||
messages:
|
messages:
|
||||||
already_confirmed: já confirmado, por favor tente iniciar sessão
|
already_confirmed: já confirmado, por favor tente iniciar sessão
|
||||||
confirmation_period_expired: tem de ser confirmado durante %{period}, por favor tenta outra vez
|
confirmation_period_expired: tem de ser confirmado dentro de %{period}, por favor tente outra vez
|
||||||
expired: expirou, por favor tente outra vez
|
expired: expirou, por favor tente outra vez
|
||||||
not_found: não encontrado
|
not_found: não encontrado
|
||||||
not_locked: não estava bloqueada
|
not_locked: não estava bloqueada
|
||||||
|
|
|
@ -4,9 +4,9 @@ pt-PT:
|
||||||
attributes:
|
attributes:
|
||||||
doorkeeper/application:
|
doorkeeper/application:
|
||||||
name: Nome da aplicação
|
name: Nome da aplicação
|
||||||
redirect_uri: URI de redireccionamento
|
redirect_uri: URI de redirecionamento
|
||||||
scopes: Âmbitos
|
scopes: Âmbitos
|
||||||
website: Página na teia da aplicação
|
website: Site da aplicação
|
||||||
errors:
|
errors:
|
||||||
models:
|
models:
|
||||||
doorkeeper/application:
|
doorkeeper/application:
|
||||||
|
@ -31,11 +31,11 @@ pt-PT:
|
||||||
form:
|
form:
|
||||||
error: Ups! Verifique que o formulário não tem erros
|
error: Ups! Verifique que o formulário não tem erros
|
||||||
help:
|
help:
|
||||||
native_redirect_uri: Usa %{native_redirect_uri} para testes locais
|
native_redirect_uri: Usar %{native_redirect_uri} para testes locais
|
||||||
redirect_uri: Utiliza uma linha por URI
|
redirect_uri: Usar uma linha por URI
|
||||||
scopes: Separe as esferas de acção com espaços. Deixe em branco para usar autorizações predefinidas.
|
scopes: Separe os âmbitos de aplicação com espaços. Deixe em branco para utilizar os âmbitos de aplicação predefinidos.
|
||||||
index:
|
index:
|
||||||
application: Aplicações
|
application: Aplicação
|
||||||
callback_url: URL de retorno
|
callback_url: URL de retorno
|
||||||
delete: Eliminar
|
delete: Eliminar
|
||||||
empty: Não tem aplicações.
|
empty: Não tem aplicações.
|
||||||
|
@ -48,31 +48,31 @@ pt-PT:
|
||||||
title: Nova aplicação
|
title: Nova aplicação
|
||||||
show:
|
show:
|
||||||
actions: Ações
|
actions: Ações
|
||||||
application_id: Id de Aplicação
|
application_id: Chave da aplicação
|
||||||
callback_urls: Callback urls
|
callback_urls: URLs de retorno
|
||||||
scopes: Autorizações
|
scopes: Âmbitos
|
||||||
secret: Segredo
|
secret: Segredo
|
||||||
title: 'Aplicação: %{name}'
|
title: 'Aplicação: %{name}'
|
||||||
authorizations:
|
authorizations:
|
||||||
buttons:
|
buttons:
|
||||||
authorize: Autorize
|
authorize: Autorizar
|
||||||
deny: Não autorize
|
deny: Negar
|
||||||
error:
|
error:
|
||||||
title: Ocorreu um erro
|
title: Ocorreu um erro
|
||||||
new:
|
new:
|
||||||
prompt_html: "%{client_name} pretende ter permissão para aceder à sua conta. É uma aplicação de terceiros. <strong>Se não confia nesta aplicação, então não deve autorizá-la.</strong>"
|
prompt_html: "%{client_name} pretende ter permissão para aceder à sua conta. É uma aplicação de terceiros. <strong>Se não confia nesta aplicação, então não deve autorizá-la.</strong>"
|
||||||
review_permissions: Rever permissões
|
review_permissions: Rever permissões
|
||||||
title: Autorização é necessária
|
title: Autorização necessária
|
||||||
show:
|
show:
|
||||||
title: Copiar o código desta autorização e colar na aplicação.
|
title: Copie este código de autorização e cole-o na aplicação.
|
||||||
authorized_applications:
|
authorized_applications:
|
||||||
buttons:
|
buttons:
|
||||||
revoke: Revogar
|
revoke: Revogar
|
||||||
confirmations:
|
confirmations:
|
||||||
revoke: Tens a certeza?
|
revoke: Tem a certeza?
|
||||||
index:
|
index:
|
||||||
authorized_at: Autorizado em %{date}
|
authorized_at: Autorizado em %{date}
|
||||||
description_html: Estas são aplicações que podem aceder à sua conta utilizando a API. Se encontrar aqui aplicativos que não reconhece, ou um aplicativo está com mau funcionamento, pode revogar o seu acesso.
|
description_html: Estas são as aplicações que podem aceder à sua conta utilizando a API. Se houver aplicações que não reconhece aqui, ou se uma aplicação estiver a comportar-se mal, pode revogar o seu acesso.
|
||||||
last_used_at: Última utilização em %{date}
|
last_used_at: Última utilização em %{date}
|
||||||
never_used: Nunca utilizado
|
never_used: Nunca utilizado
|
||||||
scopes: Permissões
|
scopes: Permissões
|
||||||
|
@ -81,15 +81,15 @@ pt-PT:
|
||||||
errors:
|
errors:
|
||||||
messages:
|
messages:
|
||||||
access_denied: O proprietário do recurso ou servidor de autorização negou o pedido.
|
access_denied: O proprietário do recurso ou servidor de autorização negou o pedido.
|
||||||
credential_flow_not_configured: As credenciais da palavra-passe do proprietário do recurso falhou devido a que Doorkeeper.configure.resource_owner_from_credentials não foram configuradas.
|
credential_flow_not_configured: Falha no fluxo de credenciais da palavra-passe do proprietário do recurso porque Doorkeeper.configure.resource_owner_from_credentials não está configurado.
|
||||||
invalid_client: Autenticação do cliente falhou por causa de um cliente desconhecido, nenhum cliente de autenticação incluído ou método de autenticação não suportado.
|
invalid_client: A autenticação do cliente falhou devido a cliente desconhecido, sem autenticação de cliente incluída ou método de autenticação não suportado.
|
||||||
invalid_code_challenge_method: O método de validação do código tem de ser S256, o método simples não é suportado.
|
invalid_code_challenge_method: O método de validação do código tem de ser S256, o método simples não é suportado.
|
||||||
invalid_grant: A concessão de autorização fornecida é inválida, expirou, foi revogada, não corresponde à URI de redirecionamento usada no pedido de autorização ou foi emitida para outro cliente.
|
invalid_grant: A concessão de autorização fornecida é inválida, expirou, foi revogada, não corresponde à URI de redirecionamento usada no pedido de autorização ou foi emitida para outro cliente.
|
||||||
invalid_redirect_uri: A URI de redirecionamento incluída não é válida.
|
invalid_redirect_uri: A URI de redirecionamento incluída não é válida.
|
||||||
invalid_request:
|
invalid_request:
|
||||||
missing_param: 'Parâmetro requerido em falta: %{value}.'
|
missing_param: 'Parâmetro requerido em falta: %{value}.'
|
||||||
request_not_authorized: O pedido precisa ser autorizado. O parâmetro requerido para autorização da solicitação está ausente ou é inválido.
|
request_not_authorized: O pedido tem de ser autorizado. O parâmetro necessário para autorizar o pedido está em falta ou é inválido.
|
||||||
unknown: A solicitação não possui um parâmetro requerido, inclui um valor de parâmetro não suportado ou tem outro tipo de formato incorreto.
|
unknown: O pedido não tem um parâmetro obrigatório, inclui um valor de parâmetro não suportado ou está mal formado.
|
||||||
invalid_resource_owner: As credenciais do proprietário do recurso não são válidas ou o proprietário do recurso não pode ser encontrado
|
invalid_resource_owner: As credenciais do proprietário do recurso não são válidas ou o proprietário do recurso não pode ser encontrado
|
||||||
invalid_scope: O âmbito solicitado é inválido, desconhecido ou tem um formato incorreto.
|
invalid_scope: O âmbito solicitado é inválido, desconhecido ou tem um formato incorreto.
|
||||||
invalid_token:
|
invalid_token:
|
||||||
|
@ -98,7 +98,7 @@ pt-PT:
|
||||||
unknown: O token de acesso é inválido
|
unknown: O token de acesso é inválido
|
||||||
resource_owner_authenticator_not_configured: A procura pelo proprietário do recurso falhou porque Doorkeeper.configure.resource_owner_authenticator não foi configurado.
|
resource_owner_authenticator_not_configured: A procura pelo proprietário do recurso falhou porque Doorkeeper.configure.resource_owner_authenticator não foi configurado.
|
||||||
server_error: O servidor de autorização encontrou uma condição inesperada que impediu o cumprimento do pedido .
|
server_error: O servidor de autorização encontrou uma condição inesperada que impediu o cumprimento do pedido .
|
||||||
temporarily_unavailable: O servidor de autorização não é capaz de lidar com o pedido devido a uma sobrecarga ou mantenimento do servidor.
|
temporarily_unavailable: O servidor de autorização não pode atualmente tratar o pedido devido a uma sobrecarga temporária ou à manutenção do servidor.
|
||||||
unauthorized_client: O cliente não está autorizado a realizar esta solicitação usando este método.
|
unauthorized_client: O cliente não está autorizado a realizar esta solicitação usando este método.
|
||||||
unsupported_grant_type: O tipo de concessão de autorização não é suportado pelo servidor de autorização.
|
unsupported_grant_type: O tipo de concessão de autorização não é suportado pelo servidor de autorização.
|
||||||
unsupported_response_type: O servidor de autorização não suporta este tipo de resposta.
|
unsupported_response_type: O servidor de autorização não suporta este tipo de resposta.
|
||||||
|
@ -125,12 +125,12 @@ pt-PT:
|
||||||
admin/reports: Administração de denúncias
|
admin/reports: Administração de denúncias
|
||||||
all: Acesso total à sua conta Mastodon
|
all: Acesso total à sua conta Mastodon
|
||||||
blocks: Bloqueios
|
blocks: Bloqueios
|
||||||
bookmarks: Itens Salvos
|
bookmarks: Marcadores
|
||||||
conversations: Conversas
|
conversations: Conversas
|
||||||
crypto: Encriptação ponta-a-ponta
|
crypto: Encriptação ponta a ponta
|
||||||
favourites: Favoritos
|
favourites: Favoritos
|
||||||
filters: Filtros
|
filters: Filtros
|
||||||
follow: A seguir, a silenciar, e a bloquear
|
follow: A seguir, a silenciar e a bloquear
|
||||||
follows: Seguidores
|
follows: Seguidores
|
||||||
lists: Listas
|
lists: Listas
|
||||||
media: Anexos de media
|
media: Anexos de media
|
||||||
|
@ -139,7 +139,7 @@ pt-PT:
|
||||||
profile: O seu perfil Mastodon
|
profile: O seu perfil Mastodon
|
||||||
push: Notificações push
|
push: Notificações push
|
||||||
reports: Denúncias
|
reports: Denúncias
|
||||||
search: Pesquisa
|
search: Pesquisar
|
||||||
statuses: Publicações
|
statuses: Publicações
|
||||||
layouts:
|
layouts:
|
||||||
admin:
|
admin:
|
||||||
|
@ -165,14 +165,14 @@ pt-PT:
|
||||||
admin:write:email_domain_blocks: executar ações de moderação no bloqueio de domínios de e-mail
|
admin:write:email_domain_blocks: executar ações de moderação no bloqueio de domínios de e-mail
|
||||||
admin:write:ip_blocks: executar ações de moderação no bloqueio de IPs
|
admin:write:ip_blocks: executar ações de moderação no bloqueio de IPs
|
||||||
admin:write:reports: executar ações de moderação em denúncias
|
admin:write:reports: executar ações de moderação em denúncias
|
||||||
crypto: usa encriptação ponta-a-ponta
|
crypto: usar encriptação ponta a ponta
|
||||||
follow: siga, bloqueie, desbloqueie, e deixa de seguir contas
|
follow: alterar relações de conta
|
||||||
profile: apenas ler as informações do perfil da sua conta
|
profile: ler apenas as informações do perfil da sua conta
|
||||||
push: receber as suas notificações push
|
push: receber as suas notificações push
|
||||||
read: tenha acesso aos dados da tua conta
|
read: ler todos os dados da sua conta
|
||||||
read:accounts: ver as informações da conta
|
read:accounts: ver as informações da conta
|
||||||
read:blocks: ver os seus bloqueios
|
read:blocks: ver os seus bloqueios
|
||||||
read:bookmarks: ver os seus favoritos
|
read:bookmarks: ver os seus marcadores
|
||||||
read:favourites: ver os seus favoritos
|
read:favourites: ver os seus favoritos
|
||||||
read:filters: ver os seus filtros
|
read:filters: ver os seus filtros
|
||||||
read:follows: ver quem você segue
|
read:follows: ver quem você segue
|
||||||
|
@ -181,18 +181,18 @@ pt-PT:
|
||||||
read:notifications: ver as suas notificações
|
read:notifications: ver as suas notificações
|
||||||
read:reports: ver as suas denúncias
|
read:reports: ver as suas denúncias
|
||||||
read:search: pesquisar em seu nome
|
read:search: pesquisar em seu nome
|
||||||
read:statuses: ver todos os estados
|
read:statuses: ver todas as publicações
|
||||||
write: publique por ti
|
write: alterar todos os dados da sua conta
|
||||||
write:accounts: modificar o seu perfil
|
write:accounts: alterar o seu perfil
|
||||||
write:blocks: bloquear contas e domínios
|
write:blocks: bloquear contas e domínios
|
||||||
write:bookmarks: estado dos favoritos
|
write:bookmarks: marcar publicações
|
||||||
write:conversations: silenciar e eliminar conversas
|
write:conversations: silenciar e eliminar conversas
|
||||||
write:favourites: assinalar como favoritas
|
write:favourites: favoritar publicações
|
||||||
write:filters: criar filtros
|
write:filters: criar filtros
|
||||||
write:follows: seguir pessoas
|
write:follows: seguir pessoas
|
||||||
write:lists: criar listas
|
write:lists: criar listas
|
||||||
write:media: carregar arquivos de media
|
write:media: enviar ficheiros de media
|
||||||
write:mutes: silenciar pessoas e conversas
|
write:mutes: silenciar pessoas e conversas
|
||||||
write:notifications: limpar as suas notificações
|
write:notifications: limpar as suas notificações
|
||||||
write:reports: denunciar outras pessoas
|
write:reports: denunciar outras pessoas
|
||||||
write:statuses: publicar estado
|
write:statuses: publicar publicações
|
||||||
|
|
|
@ -343,7 +343,7 @@ gl:
|
||||||
title: Emoticonas personalizadas
|
title: Emoticonas personalizadas
|
||||||
uncategorized: Sen categoría
|
uncategorized: Sen categoría
|
||||||
unlist: Non listar
|
unlist: Non listar
|
||||||
unlisted: Sen listar
|
unlisted: Fóra das listas
|
||||||
update_failed_msg: Non foi posíbel actualizar a emoticona
|
update_failed_msg: Non foi posíbel actualizar a emoticona
|
||||||
updated_msg: Actualizouse a emoticona de xeito correcto!
|
updated_msg: Actualizouse a emoticona de xeito correcto!
|
||||||
upload: Subir
|
upload: Subir
|
||||||
|
@ -1756,7 +1756,7 @@ gl:
|
||||||
private_long: Mostrar só as seguidoras
|
private_long: Mostrar só as seguidoras
|
||||||
public: Público
|
public: Público
|
||||||
public_long: Visible para calquera
|
public_long: Visible para calquera
|
||||||
unlisted: Sen listar
|
unlisted: Fóra das listas
|
||||||
unlisted_long: Visible para calquera, pero non en cronoloxías públicas
|
unlisted_long: Visible para calquera, pero non en cronoloxías públicas
|
||||||
statuses_cleanup:
|
statuses_cleanup:
|
||||||
enabled: Borrar automáticamente publicacións antigas
|
enabled: Borrar automáticamente publicacións antigas
|
||||||
|
|
|
@ -12,8 +12,8 @@ pt-PT:
|
||||||
one: Seguidor
|
one: Seguidor
|
||||||
other: Seguidores
|
other: Seguidores
|
||||||
following: A seguir
|
following: A seguir
|
||||||
instance_actor_flash: Esta conta é um actor virtual usado para representar a própria instância e não um utilizador individual. É usada para motivos de federação e não deve ser suspenso.
|
instance_actor_flash: Esta conta é um ator virtual utilizado para representar o servidor em si e não um utilizador individual. É utilizada para efeitos de federação e não deve ser suspensa.
|
||||||
last_active: última vez activo
|
last_active: última atividade
|
||||||
link_verified_on: A posse desta hiperligação foi verificada em %{date}
|
link_verified_on: A posse desta hiperligação foi verificada em %{date}
|
||||||
nothing_here: Não há nada aqui!
|
nothing_here: Não há nada aqui!
|
||||||
pin_errors:
|
pin_errors:
|
||||||
|
@ -25,19 +25,19 @@ pt-PT:
|
||||||
admin:
|
admin:
|
||||||
account_actions:
|
account_actions:
|
||||||
action: Executar acção
|
action: Executar acção
|
||||||
title: Executar acção de moderação em %{acct}
|
title: Executar ação de moderação em %{acct}
|
||||||
account_moderation_notes:
|
account_moderation_notes:
|
||||||
create: Deixar uma nota
|
create: Deixar uma nota
|
||||||
created_msg: Nota de moderação correctamente criada!
|
created_msg: Nota de moderação criada com sucesso!
|
||||||
destroyed_msg: Nota de moderação destruída!
|
destroyed_msg: Nota de moderação destruída!
|
||||||
accounts:
|
accounts:
|
||||||
approve: Aprovar
|
approve: Aprovar
|
||||||
approved_msg: Inscrição de %{username} aprovada correctamente
|
approved_msg: Inscrição de %{username} aprovada com sucesso
|
||||||
are_you_sure: Tens a certeza?
|
are_you_sure: Tens a certeza?
|
||||||
avatar: Imagem de perfil
|
avatar: Imagem de perfil
|
||||||
by_domain: Domínio
|
by_domain: Domínio
|
||||||
change_email:
|
change_email:
|
||||||
changed_msg: Endereço de correio electrónico alterado!
|
changed_msg: E-mail alterado com sucesso!
|
||||||
current_email: E-mail atual
|
current_email: E-mail atual
|
||||||
label: Alterar e-mail
|
label: Alterar e-mail
|
||||||
new_email: Novo e-mail
|
new_email: Novo e-mail
|
||||||
|
@ -57,12 +57,12 @@ pt-PT:
|
||||||
demote: Despromoveu
|
demote: Despromoveu
|
||||||
destroyed_msg: Os dados de %{username} estão agora em fila de espera para serem eliminados de imediato
|
destroyed_msg: Os dados de %{username} estão agora em fila de espera para serem eliminados de imediato
|
||||||
disable: Congelar
|
disable: Congelar
|
||||||
disable_two_factor_authentication: Desactivar autenticação por dois factores (2FA)
|
disable_two_factor_authentication: Desativar autenticação por dois fatores (2FA)
|
||||||
disabled: Congelada
|
disabled: Congelada
|
||||||
display_name: Nome a mostrar
|
display_name: Nome a mostrar
|
||||||
domain: Domínio
|
domain: Domínio
|
||||||
edit: Editar
|
edit: Editar
|
||||||
email: Correio electrónico
|
email: E-mail
|
||||||
email_status: Estado do e-mail
|
email_status: Estado do e-mail
|
||||||
enable: Descongelar
|
enable: Descongelar
|
||||||
enabled: Ativado
|
enabled: Ativado
|
||||||
|
@ -86,7 +86,7 @@ pt-PT:
|
||||||
memorialized: Em memória
|
memorialized: Em memória
|
||||||
memorialized_msg: Conta %{username} transformada com sucesso em memorial
|
memorialized_msg: Conta %{username} transformada com sucesso em memorial
|
||||||
moderation:
|
moderation:
|
||||||
active: Activo
|
active: Ativo
|
||||||
all: Todos
|
all: Todos
|
||||||
disabled: Desativado
|
disabled: Desativado
|
||||||
pending: Pendente
|
pending: Pendente
|
||||||
|
@ -94,7 +94,7 @@ pt-PT:
|
||||||
suspended: Supensos
|
suspended: Supensos
|
||||||
title: Moderação
|
title: Moderação
|
||||||
moderation_notes: Notas de moderação
|
moderation_notes: Notas de moderação
|
||||||
most_recent_activity: Actividade mais recente
|
most_recent_activity: Atividade mais recente
|
||||||
most_recent_ip: IP mais recente
|
most_recent_ip: IP mais recente
|
||||||
no_account_selected: Nenhuma conta foi alterada porque nenhuma foi selecionada
|
no_account_selected: Nenhuma conta foi alterada porque nenhuma foi selecionada
|
||||||
no_limits_imposed: Sem limites impostos
|
no_limits_imposed: Sem limites impostos
|
||||||
|
@ -111,9 +111,9 @@ pt-PT:
|
||||||
public: Público
|
public: Público
|
||||||
push_subscription_expires: A Inscrição PuSH expira
|
push_subscription_expires: A Inscrição PuSH expira
|
||||||
redownload: Atualizar perfil
|
redownload: Atualizar perfil
|
||||||
redownloaded_msg: Perfil de %{username} correctamente actualizado a partir da origem
|
redownloaded_msg: Perfil de %{username} atualizado a partir da origem com sucesso
|
||||||
reject: Rejeitar
|
reject: Rejeitar
|
||||||
rejected_msg: Inscrição de %{username} correctamente rejeitada
|
rejected_msg: Inscrição de %{username} rejeitada com sucesso
|
||||||
remote_suspension_irreversible: Os dados desta conta foram eliminados irreversivelmente.
|
remote_suspension_irreversible: Os dados desta conta foram eliminados irreversivelmente.
|
||||||
remote_suspension_reversible_hint_html: A conta foi suspensa no servidor de origem e os seus dados serão totalmente eliminados em %{date}. Até lá, o servidor de origem poderá recuperar esta conta sem quaisquer efeitos negativos. Se desejar eliminar todos os dados desta conta imediatamente, pode fazê-lo em baixo.
|
remote_suspension_reversible_hint_html: A conta foi suspensa no servidor de origem e os seus dados serão totalmente eliminados em %{date}. Até lá, o servidor de origem poderá recuperar esta conta sem quaisquer efeitos negativos. Se desejar eliminar todos os dados desta conta imediatamente, pode fazê-lo em baixo.
|
||||||
remove_avatar: Remover a imagem de perfil
|
remove_avatar: Remover a imagem de perfil
|
||||||
|
@ -152,7 +152,7 @@ pt-PT:
|
||||||
title: Contas
|
title: Contas
|
||||||
unblock_email: Desbloquear endereço de e-mail
|
unblock_email: Desbloquear endereço de e-mail
|
||||||
unblocked_email_msg: Endereço de e-mail de %{username} desbloqueado
|
unblocked_email_msg: Endereço de e-mail de %{username} desbloqueado
|
||||||
unconfirmed_email: Correio electrónico por confirmar
|
unconfirmed_email: E-mail por confirmar
|
||||||
undo_sensitized: Desmarcar como problemático
|
undo_sensitized: Desmarcar como problemático
|
||||||
undo_silenced: Desfazer silenciar
|
undo_silenced: Desfazer silenciar
|
||||||
undo_suspension: Desfazer supensão
|
undo_suspension: Desfazer supensão
|
||||||
|
@ -226,7 +226,7 @@ pt-PT:
|
||||||
create_account_warning_html: "%{name} enviou um aviso para %{target}"
|
create_account_warning_html: "%{name} enviou um aviso para %{target}"
|
||||||
create_announcement_html: "%{name} criou o novo anúncio %{target}"
|
create_announcement_html: "%{name} criou o novo anúncio %{target}"
|
||||||
create_custom_emoji_html: "%{name} carregou o novo emoji %{target}"
|
create_custom_emoji_html: "%{name} carregou o novo emoji %{target}"
|
||||||
create_domain_allow_html: "%{name} habilitou a federação com o domínio %{target}"
|
create_domain_allow_html: "%{name} permitiu a federação com o domínio %{target}"
|
||||||
create_domain_block_html: "%{name} bloqueou o domínio %{target}"
|
create_domain_block_html: "%{name} bloqueou o domínio %{target}"
|
||||||
create_ip_block_html: "%{name} criou regra para o IP %{target}"
|
create_ip_block_html: "%{name} criou regra para o IP %{target}"
|
||||||
create_unavailable_domain_html: "%{name} parou a entrega ao domínio %{target}"
|
create_unavailable_domain_html: "%{name} parou a entrega ao domínio %{target}"
|
||||||
|
@ -244,7 +244,7 @@ pt-PT:
|
||||||
disable_2fa_user_html: "%{name} desativou o requerimento de autenticação em dois passos para o utilizador %{target}"
|
disable_2fa_user_html: "%{name} desativou o requerimento de autenticação em dois passos para o utilizador %{target}"
|
||||||
disable_custom_emoji_html: "%{name} desabilitou o emoji %{target}"
|
disable_custom_emoji_html: "%{name} desabilitou o emoji %{target}"
|
||||||
disable_user_html: "%{name} desativou o acesso para o utilizador %{target}"
|
disable_user_html: "%{name} desativou o acesso para o utilizador %{target}"
|
||||||
enable_custom_emoji_html: "%{name} habilitou o emoji %{target}"
|
enable_custom_emoji_html: "%{name} ativou o emoji %{target}"
|
||||||
enable_user_html: "%{name} ativou o acesso para o utilizador %{target}"
|
enable_user_html: "%{name} ativou o acesso para o utilizador %{target}"
|
||||||
memorialize_account_html: "%{name} transformou a conta de %{target} em um memorial"
|
memorialize_account_html: "%{name} transformou a conta de %{target} em um memorial"
|
||||||
promote_user_html: "%{name} promoveu o utilizador %{target}"
|
promote_user_html: "%{name} promoveu o utilizador %{target}"
|
||||||
|
@ -276,22 +276,22 @@ pt-PT:
|
||||||
title: Registo de auditoria
|
title: Registo de auditoria
|
||||||
unavailable_instance: "(nome de domínio indisponível)"
|
unavailable_instance: "(nome de domínio indisponível)"
|
||||||
announcements:
|
announcements:
|
||||||
destroyed_msg: Comunicado correctamente eliminado!
|
destroyed_msg: Comunicado eliminado com sucesso!
|
||||||
edit:
|
edit:
|
||||||
title: Editar comunicado
|
title: Editar comunicado
|
||||||
empty: Nenhum comunicado encontrado.
|
empty: Nenhum comunicado encontrado.
|
||||||
live: Em directo
|
live: Em direto
|
||||||
new:
|
new:
|
||||||
create: Criar comunicado
|
create: Criar comunicado
|
||||||
title: Novo comunicado
|
title: Novo comunicado
|
||||||
publish: Publicar
|
publish: Publicar
|
||||||
published_msg: Comunicado correctamente publicado!
|
published_msg: Comunicado publicado com sucesso!
|
||||||
scheduled_for: Agendado para %{time}
|
scheduled_for: Agendado para %{time}
|
||||||
scheduled_msg: Comunicado agendado para publicação!
|
scheduled_msg: Comunicado agendado para publicação!
|
||||||
title: Comunicados
|
title: Comunicados
|
||||||
unpublish: Anular publicação
|
unpublish: Anular publicação
|
||||||
unpublished_msg: Comunicado correctamente retirado de publicação!
|
unpublished_msg: Comunicado corretamente retirado de publicação!
|
||||||
updated_msg: Comunicado correctamente actualizado!
|
updated_msg: Comunicado atualizado com sucesso!
|
||||||
critical_update_pending: Atualização crítica pendente
|
critical_update_pending: Atualização crítica pendente
|
||||||
custom_emojis:
|
custom_emojis:
|
||||||
assign_category: Atribuir categoria
|
assign_category: Atribuir categoria
|
||||||
|
@ -319,16 +319,16 @@ pt-PT:
|
||||||
not_permitted: Não está autorizado a executar esta ação
|
not_permitted: Não está autorizado a executar esta ação
|
||||||
overwrite: Escrever por cima
|
overwrite: Escrever por cima
|
||||||
shortcode: Código de atalho
|
shortcode: Código de atalho
|
||||||
shortcode_hint: Pelo menos 2 caracteres, apenas caracteres alfanuméricos e underscores
|
shortcode_hint: Pelo menos 2 caracteres, apenas caracteres alfanuméricos e traços inferiores
|
||||||
title: Emojis personalizados
|
title: Emojis personalizados
|
||||||
uncategorized: Não categorizados
|
uncategorized: Não categorizados
|
||||||
unlist: Não listar
|
unlist: Não listar
|
||||||
unlisted: Não inventariado
|
unlisted: Não inventariado
|
||||||
update_failed_msg: Não foi possível atualizar esse emoji
|
update_failed_msg: Não foi possível atualizar esse emoji
|
||||||
updated_msg: Emoji correctamente actualizado!
|
updated_msg: Emoji atualizado com sucesso!
|
||||||
upload: Enviar
|
upload: Enviar
|
||||||
dashboard:
|
dashboard:
|
||||||
active_users: utilizadores activos
|
active_users: utilizadores ativos
|
||||||
interactions: interações
|
interactions: interações
|
||||||
media_storage: Armazenamento de media
|
media_storage: Armazenamento de media
|
||||||
new_users: novos utilizadores
|
new_users: novos utilizadores
|
||||||
|
@ -350,8 +350,8 @@ pt-PT:
|
||||||
sources: Origem de inscrições
|
sources: Origem de inscrições
|
||||||
space: Utilização do espaço
|
space: Utilização do espaço
|
||||||
title: Painel de controlo
|
title: Painel de controlo
|
||||||
top_languages: Principais idiomas activos
|
top_languages: Principais idiomas ativos
|
||||||
top_servers: Servidores mais activos
|
top_servers: Servidores mais ativos
|
||||||
website: Página na teia
|
website: Página na teia
|
||||||
disputes:
|
disputes:
|
||||||
appeals:
|
appeals:
|
||||||
|
@ -359,7 +359,7 @@ pt-PT:
|
||||||
title: Recursos
|
title: Recursos
|
||||||
domain_allows:
|
domain_allows:
|
||||||
add_new: Permitir federação com o domínio
|
add_new: Permitir federação com o domínio
|
||||||
created_msg: Permissão correctamente atribuída para federação
|
created_msg: O domínio foi autorizado com êxito para a federação
|
||||||
destroyed_msg: Revogada a permissão de federação para o domínio
|
destroyed_msg: Revogada a permissão de federação para o domínio
|
||||||
export: Exportar
|
export: Exportar
|
||||||
import: Importar
|
import: Importar
|
||||||
|
@ -385,14 +385,14 @@ pt-PT:
|
||||||
import: Importar
|
import: Importar
|
||||||
new:
|
new:
|
||||||
create: Criar bloqueio
|
create: Criar bloqueio
|
||||||
hint: O bloqueio por domínio não vai prevenir a criação de contas na base de dados, mas irá retroactiva e automaticamente aplicar certos métodos de moderação nessas contas.
|
hint: O bloqueio do domínio não impedirá a criação de registos de contas na base de dados, mas aplicará retroativamente e automaticamente métodos de moderação específicos a essas contas.
|
||||||
severity:
|
severity:
|
||||||
desc_html: "<strong>Limitar</strong> tornará as mensagens das contas neste domínio invisíveis a qualquer pessoa que não as esteja a seguir. <strong>Suspender</strong> removerá do seu servidor todo o conteúdo, media, e dados de perfil das contas deste domínio. Utilize <strong>Nenhum</strong> se apenas quiser rejeitar ficheiros media."
|
desc_html: "<strong>Limitar</strong> tornará as mensagens das contas neste domínio invisíveis a qualquer pessoa que não as esteja a seguir. <strong>Suspender</strong> removerá do seu servidor todo o conteúdo, media, e dados de perfil das contas deste domínio. Utilize <strong>Nenhum</strong> se apenas quiser rejeitar ficheiros media."
|
||||||
noop: Nenhum
|
noop: Nenhum
|
||||||
silence: Limitar
|
silence: Limitar
|
||||||
suspend: Suspender
|
suspend: Suspender
|
||||||
title: Novo bloqueio de domínio
|
title: Novo bloqueio de domínio
|
||||||
no_domain_block_selected: Nenhum bloqueio de domínio foi alterado, pois nenhum foi seleccionado
|
no_domain_block_selected: Nenhum bloqueio de domínio foi alterado pois nenhum foi selecionado
|
||||||
not_permitted: Não está autorizado a executar esta ação
|
not_permitted: Não está autorizado a executar esta ação
|
||||||
obfuscate: Ofuscar nome de domínio
|
obfuscate: Ofuscar nome de domínio
|
||||||
obfuscate_hint: Ofuscar parcialmente o nome de domínio na lista, caso estejam definidas limitações na publicação da lista de domínios
|
obfuscate_hint: Ofuscar parcialmente o nome de domínio na lista, caso estejam definidas limitações na publicação da lista de domínios
|
||||||
|
@ -527,7 +527,7 @@ pt-PT:
|
||||||
title: Convites
|
title: Convites
|
||||||
ip_blocks:
|
ip_blocks:
|
||||||
add_new: Criar regra
|
add_new: Criar regra
|
||||||
created_msg: Nova regra de IP correctamente adicionada
|
created_msg: Nova regra de IP corretamente adicionada
|
||||||
delete: Eliminar
|
delete: Eliminar
|
||||||
expires_in:
|
expires_in:
|
||||||
'1209600': 2 semanas
|
'1209600': 2 semanas
|
||||||
|
@ -547,15 +547,15 @@ pt-PT:
|
||||||
delete: Eliminar
|
delete: Eliminar
|
||||||
description_html: Um <strong>repetidor de federação</strong> é um servidor intermediário que troca grandes volumes de publicações públicas entre instâncias que o subscrevem e publicam. <strong>Ele pode ajudar pequenas e medias instâncias a descobrir conteúdo do fediverso</strong> que, de outro modo, exigiria que os utilizadores locais seguissem manualmente outras pessoas em instâncias remotas.
|
description_html: Um <strong>repetidor de federação</strong> é um servidor intermediário que troca grandes volumes de publicações públicas entre instâncias que o subscrevem e publicam. <strong>Ele pode ajudar pequenas e medias instâncias a descobrir conteúdo do fediverso</strong> que, de outro modo, exigiria que os utilizadores locais seguissem manualmente outras pessoas em instâncias remotas.
|
||||||
disable: Desativar
|
disable: Desativar
|
||||||
disabled: Desactivado
|
disabled: Desativado
|
||||||
enable: Activar
|
enable: Ativar
|
||||||
enable_hint: Uma vez ativado, a tua instância irá assinar todas as publicações deste repetidor e irá começar a enviar as suas publicações públicas para lá.
|
enable_hint: Uma vez ativado, a tua instância irá assinar todas as publicações deste repetidor e irá começar a enviar as suas publicações públicas para lá.
|
||||||
enabled: Ativado
|
enabled: Ativado
|
||||||
inbox_url: URL do repetidor
|
inbox_url: URL do repetidor
|
||||||
pending: À espera da aprovação do repetidor
|
pending: À espera da aprovação do repetidor
|
||||||
save_and_enable: Guardar e ativar
|
save_and_enable: Guardar e ativar
|
||||||
setup: Configurar uma ligação ao repetidor
|
setup: Configurar uma ligação ao repetidor
|
||||||
signatures_not_enabled: Os repetidores não funcionarão correctamente enquanto o modo seguro ou o modo de lista branca estiverem activados
|
signatures_not_enabled: Os repetidores não funcionarão corretamente enquanto o modo seguro ou o modo de lista branca estiverem ativados
|
||||||
status: Estado
|
status: Estado
|
||||||
title: Retransmissores
|
title: Retransmissores
|
||||||
report_notes:
|
report_notes:
|
||||||
|
@ -618,27 +618,27 @@ pt-PT:
|
||||||
reported_by: Denunciado por
|
reported_by: Denunciado por
|
||||||
reported_with_application: Reportado com a aplicação
|
reported_with_application: Reportado com a aplicação
|
||||||
resolved: Resolvido
|
resolved: Resolvido
|
||||||
resolved_msg: Denúncia correctamente resolvida!
|
resolved_msg: Denúncia resolvida com sucesso!
|
||||||
skip_to_actions: Passar para as ações
|
skip_to_actions: Passar para as ações
|
||||||
status: Estado
|
status: Estado
|
||||||
statuses: Conteúdo denunciado
|
statuses: Conteúdo denunciado
|
||||||
statuses_description_html: O conteúdo ofensivo será citado na comunicação com a conta denunciada
|
statuses_description_html: O conteúdo ofensivo será citado na comunicação com a conta denunciada
|
||||||
summary:
|
summary:
|
||||||
action_preambles:
|
action_preambles:
|
||||||
delete_html: 'Você está prestes a <strong>remover</strong> algumas das publicações de <strong>@%{acct}</strong>. Isto irá:'
|
delete_html: 'Está prestes a <strong>remover</strong> algumas das publicações de <strong>@%{acct}</strong>. Isto irá:'
|
||||||
mark_as_sensitive_html: 'Você está prestes a <strong>marcar</strong> alguns dos posts de <strong>@%{acct}</strong>como <strong>sensível</strong>. Isto irá:'
|
mark_as_sensitive_html: 'Está prestes a <strong>marcar</strong> algumas das publicações de <strong>@%{acct}</strong>como <strong>sensível</strong>. Isto irá:'
|
||||||
silence_html: 'Você está prestes a <strong>limitar a conta do</strong> <strong>@%{acct}</strong>. Isto irá:'
|
silence_html: 'Está prestes a <strong>limitar a conta de</strong> <strong>@%{acct}</strong>. Isto irá:'
|
||||||
suspend_html: 'Você está prestes a <strong>suspender a conta de</strong> <strong>@%{acct}</strong>. Isto irá:'
|
suspend_html: 'Está prestes a <strong>suspender a conta de</strong> <strong>@%{acct}</strong>. Isto irá:'
|
||||||
actions:
|
actions:
|
||||||
delete_html: Excluir as publicações ofensivas
|
delete_html: Excluir as publicações ofensivas
|
||||||
mark_as_sensitive_html: Marcar a mídia dos posts ofensivos como sensível
|
mark_as_sensitive_html: Marcar a mídia dos posts ofensivos como sensível
|
||||||
silence_html: Limitar firmemente o alcance de <strong>@%{acct}</strong>, tornando seus perfis e conteúdos apenas visíveis para pessoas que já os estão seguindo ou olhando manualmente no perfil
|
silence_html: Limitar firmemente o alcance de <strong>@%{acct}</strong>, tornando seus perfis e conteúdos apenas visíveis para pessoas que já os estão seguindo ou olhando manualmente no perfil
|
||||||
suspend_html: Suspender <strong>@%{acct}</strong>, tornando seu perfil e conteúdo inacessíveis e impossível de interagir com
|
suspend_html: Suspender <strong>@%{acct}</strong>, tornando seu perfil e conteúdo inacessíveis e impossível de interagir
|
||||||
close_report: 'Marcar relatório #%{id} como resolvido'
|
close_report: 'Marcar relatório #%{id} como resolvido'
|
||||||
close_reports_html: Marcar <strong>todos os</strong> relatórios contra <strong>@%{acct}</strong> como resolvidos
|
close_reports_html: Marcar <strong>todas as</strong> denúncias contra <strong>@%{acct}</strong> como resolvidas
|
||||||
delete_data_html: Excluir <strong>@%{acct}</strong>perfil e conteúdo 30 dias a menos que sejam dessuspensos
|
delete_data_html: Eliminar o perfil de <strong>@%{acct}</strong> e conteúdos daqui a 30 dias, a menos que entretanto sejam suspensos
|
||||||
preview_preamble_html: "<strong>@%{acct}</strong> receberá um aviso com o seguinte conteúdo:"
|
preview_preamble_html: "<strong>@%{acct}</strong> receberá um aviso com o seguinte conteúdo:"
|
||||||
record_strike_html: Registre um ataque contra <strong>@%{acct}</strong> para ajudá-lo a escalar futuras violações desta conta
|
record_strike_html: Registar um ataque contra <strong>@%{acct}</strong> para ajudar a escalar futuras violações desta conta
|
||||||
warning_placeholder: Argumentos adicionais opcionais para a acção de moderação.
|
warning_placeholder: Argumentos adicionais opcionais para a acção de moderação.
|
||||||
target_origin: Origem da conta denunciada
|
target_origin: Origem da conta denunciada
|
||||||
title: Denúncias
|
title: Denúncias
|
||||||
|
@ -693,7 +693,7 @@ pt-PT:
|
||||||
manage_settings: Gerir Configurações
|
manage_settings: Gerir Configurações
|
||||||
manage_settings_description: Permite aos utilizadores alterar as configurações do sítio na teia
|
manage_settings_description: Permite aos utilizadores alterar as configurações do sítio na teia
|
||||||
manage_taxonomies: Gerir Taxonomias
|
manage_taxonomies: Gerir Taxonomias
|
||||||
manage_taxonomies_description: 'Permite aos utilizadores avaliar o conteúdo em alta e atualizar as configurações de #etiquetas'
|
manage_taxonomies_description: Permite aos utilizadores rever o conteúdo em tendência e atualizar as configurações de hashtag
|
||||||
manage_user_access: Gerir Acesso de Utilizador
|
manage_user_access: Gerir Acesso de Utilizador
|
||||||
manage_users: Gerir Utilizadores
|
manage_users: Gerir Utilizadores
|
||||||
manage_users_description: Permite aos utilizadores ver os detalhes de outros utilizadores e executar ações de moderação contra eles
|
manage_users_description: Permite aos utilizadores ver os detalhes de outros utilizadores e executar ações de moderação contra eles
|
||||||
|
@ -743,13 +743,13 @@ pt-PT:
|
||||||
publish_discovered_servers: Publicar servidores descobertos
|
publish_discovered_servers: Publicar servidores descobertos
|
||||||
publish_statistics: Publicar estatísticas
|
publish_statistics: Publicar estatísticas
|
||||||
title: Descobrir
|
title: Descobrir
|
||||||
trends: Em alta
|
trends: Tendências
|
||||||
domain_blocks:
|
domain_blocks:
|
||||||
all: Para toda a gente
|
all: Para toda a gente
|
||||||
disabled: Para ninguém
|
disabled: Para ninguém
|
||||||
users: Para utilizadores locais que se encontrem autenticados
|
users: Para utilizadores locais que se encontrem autenticados
|
||||||
registrations:
|
registrations:
|
||||||
moderation_recommandation: Por favor, certifique-se de que você tem uma equipe de moderação adequada e reativa antes de abrir os registros para todos!
|
moderation_recommandation: Certifique-se de que dispõe de uma equipa de moderação adequada e reativa antes de abrir as inscrições a todos!
|
||||||
preamble: Controle quem pode criar uma conta no seu servidor.
|
preamble: Controle quem pode criar uma conta no seu servidor.
|
||||||
title: Inscrições
|
title: Inscrições
|
||||||
registrations_mode:
|
registrations_mode:
|
||||||
|
@ -757,7 +757,7 @@ pt-PT:
|
||||||
approved: Registo sujeito a aprovação
|
approved: Registo sujeito a aprovação
|
||||||
none: Ninguém se pode registar
|
none: Ninguém se pode registar
|
||||||
open: Qualquer pessoa se pode registar
|
open: Qualquer pessoa se pode registar
|
||||||
warning_hint: Recomendamos o uso de "Aprovação necessária para se cadastrar", a menos que você esteja confiante de que sua equipe de moderação pode lidar com spam e registros maliciosos em tempo hábil.
|
warning_hint: Recomendamos a utilização de “É necessária aprovação para o registo”, a menos que esteja confiante de que a sua equipa de moderação pode tratar o spam e os registos maliciosos de forma atempada.
|
||||||
security:
|
security:
|
||||||
authorized_fetch: Exigir autenticação de servidores federados
|
authorized_fetch: Exigir autenticação de servidores federados
|
||||||
authorized_fetch_hint: Exigir autenticação de servidores federados permite uma aplicação mais rigorosa de bloqueios tanto ao nível do utilizador como do servidor. No entanto, isso é feito à custa de uma diminuição de desempenho, reduz o alcance das suas respostas e pode introduzir problemas de compatibilidade com alguns serviços federados. Além disso, isso não impede os atores mais empenhados de aceder às suas publicações e contas públicas.
|
authorized_fetch_hint: Exigir autenticação de servidores federados permite uma aplicação mais rigorosa de bloqueios tanto ao nível do utilizador como do servidor. No entanto, isso é feito à custa de uma diminuição de desempenho, reduz o alcance das suas respostas e pode introduzir problemas de compatibilidade com alguns serviços federados. Além disso, isso não impede os atores mais empenhados de aceder às suas publicações e contas públicas.
|
||||||
|
@ -766,7 +766,7 @@ pt-PT:
|
||||||
title: Definições do servidor
|
title: Definições do servidor
|
||||||
site_uploads:
|
site_uploads:
|
||||||
delete: Eliminar arquivo carregado
|
delete: Eliminar arquivo carregado
|
||||||
destroyed_msg: Envio de sítio na teia correctamente eliminado!
|
destroyed_msg: Envio do site eliminado com sucesso!
|
||||||
software_updates:
|
software_updates:
|
||||||
critical_update: Crítico — por favor, atualize rapidamente
|
critical_update: Crítico — por favor, atualize rapidamente
|
||||||
documentation_link: Saber mais
|
documentation_link: Saber mais
|
||||||
|
@ -800,7 +800,7 @@ pt-PT:
|
||||||
reblogs: Re-publicacões
|
reblogs: Re-publicacões
|
||||||
status_changed: Publicação alterada
|
status_changed: Publicação alterada
|
||||||
title: Estado das contas
|
title: Estado das contas
|
||||||
trending: Em alta
|
trending: Em tendência
|
||||||
visibility: Visibilidade
|
visibility: Visibilidade
|
||||||
with_media: Com media
|
with_media: Com media
|
||||||
strikes:
|
strikes:
|
||||||
|
@ -823,7 +823,7 @@ pt-PT:
|
||||||
elasticsearch_health_yellow:
|
elasticsearch_health_yellow:
|
||||||
message_html: O cluster elasticsearch não está de boa saúde (estado amarelo), pode querer investigar o motivo
|
message_html: O cluster elasticsearch não está de boa saúde (estado amarelo), pode querer investigar o motivo
|
||||||
elasticsearch_index_mismatch:
|
elasticsearch_index_mismatch:
|
||||||
message_html: Os mapeamentos elasticsearch estão desatualizados. Por favor, execute <code>tootctl search deploy --only=%{value}</code>
|
message_html: Os mapeamentos de índice Elasticsearch estão desatualizados. Execute <code>tootctl search deploy --only=%{value}</code>
|
||||||
elasticsearch_preset:
|
elasticsearch_preset:
|
||||||
action: Ver a documentação
|
action: Ver a documentação
|
||||||
message_html: O seu cluster elasticsearch tem mais de um nó, mas o Mastodon não está configurado para os usar.
|
message_html: O seu cluster elasticsearch tem mais de um nó, mas o Mastodon não está configurado para os usar.
|
||||||
|
@ -831,9 +831,9 @@ pt-PT:
|
||||||
action: Ver documentação
|
action: Ver documentação
|
||||||
message_html: O seu cluster elasticsearch tem apenas um nó, <code>ES_PRESET</code> deve ser configurado para <code>single_node_cluster</code>.
|
message_html: O seu cluster elasticsearch tem apenas um nó, <code>ES_PRESET</code> deve ser configurado para <code>single_node_cluster</code>.
|
||||||
elasticsearch_reset_chewy:
|
elasticsearch_reset_chewy:
|
||||||
message_html: O seu índice de sistema elasticsearch está desatualizado devido a uma mudança de configuração. Por favor, execute <code>tootctl search deploy --reset-chewy</code> para o atualizar.
|
message_html: O seu índice de sistema Elasticsearch está desatualizado devido a uma mudança de configuração. Execute <code>tootctl search deploy --reset-chewy</code> para o atualizar.
|
||||||
elasticsearch_running_check:
|
elasticsearch_running_check:
|
||||||
message_html: Não foi possível conectar ao Elasticsearch. Por favor, verifique se está em execução, ou desabilite a pesquisa de texto completo
|
message_html: Não foi possível conectar ao Elasticsearch. Verifique se está em execução ou desative a pesquisa de texto completo
|
||||||
elasticsearch_version_check:
|
elasticsearch_version_check:
|
||||||
message_html: 'Versão de Elasticsearch incompatível: %{value}'
|
message_html: 'Versão de Elasticsearch incompatível: %{value}'
|
||||||
version_comparison: A versão de Elasticsearch %{running_version} está em execução. No entanto, é obrigatória a versão %{required_version}
|
version_comparison: A versão de Elasticsearch %{running_version} está em execução. No entanto, é obrigatória a versão %{required_version}
|
||||||
|
@ -872,14 +872,14 @@ pt-PT:
|
||||||
review: Estado da revisão
|
review: Estado da revisão
|
||||||
search: Pesquisar
|
search: Pesquisar
|
||||||
title: Hashtags
|
title: Hashtags
|
||||||
updated_msg: 'Definições de #etiquetas correctamente actualizadas'
|
updated_msg: 'Definições de #etiquetas atualizadas com sucesso'
|
||||||
title: Administração
|
title: Administração
|
||||||
trends:
|
trends:
|
||||||
allow: Permitir
|
allow: Permitir
|
||||||
approved: Aprovado
|
approved: Aprovado
|
||||||
disallow: Não permitir
|
disallow: Não permitir
|
||||||
links:
|
links:
|
||||||
allow: Permitir ligação
|
allow: Permitir hiperligação
|
||||||
allow_provider: Permitir editor
|
allow_provider: Permitir editor
|
||||||
description_html: Estas são as ligações que presentemente estão a ser muito partilhadas por contas visíveis pelo seu servidor. Estas podem ajudar os seus utilizador a descobrir o que está a acontecer no mundo. Nenhuma ligação é exibida publicamente até que o editor a aprove. Também pode permitir ou rejeitar ligações em avulso.
|
description_html: Estas são as ligações que presentemente estão a ser muito partilhadas por contas visíveis pelo seu servidor. Estas podem ajudar os seus utilizador a descobrir o que está a acontecer no mundo. Nenhuma ligação é exibida publicamente até que o editor a aprove. Também pode permitir ou rejeitar ligações em avulso.
|
||||||
disallow: Não permitir ligação
|
disallow: Não permitir ligação
|
||||||
|
@ -890,15 +890,15 @@ pt-PT:
|
||||||
shared_by_over_week:
|
shared_by_over_week:
|
||||||
one: Partilhado por uma pessoa na última semana
|
one: Partilhado por uma pessoa na última semana
|
||||||
other: Partilhado por %{count} pessoas na última semana
|
other: Partilhado por %{count} pessoas na última semana
|
||||||
title: Ligações em alta
|
title: Hiperligações em tendência
|
||||||
usage_comparison: Partilhado %{today} vezes hoje, em comparação com %{yesterday} ontem
|
usage_comparison: Partilhado %{today} vezes hoje, em comparação com %{yesterday} ontem
|
||||||
not_allowed_to_trend: Não permitido para tendência
|
not_allowed_to_trend: Não permitido para tendência
|
||||||
only_allowed: Apenas permitidos
|
only_allowed: Apenas permitidos
|
||||||
pending_review: Pendente de revisão
|
pending_review: Pendente de revisão
|
||||||
preview_card_providers:
|
preview_card_providers:
|
||||||
allowed: Ligações deste editor poderão vir a ficar em alta
|
allowed: As hiperligações deste editor podem ser tendência
|
||||||
description_html: Estes são os domínios a partir dos quais ligações são frequentemente partilhadas no seu servidor. As suas ligações não serão colocadas em alta a menos que o seu domínio de origem seja aprovado. A sua aprovação (ou rejeição) estende-se a subdomínios.
|
description_html: Estes são os domínios a partir dos quais ligações são frequentemente partilhadas no seu servidor. As suas ligações não serão colocadas em alta a menos que o seu domínio de origem seja aprovado. A sua aprovação (ou rejeição) estende-se a subdomínios.
|
||||||
rejected: Ligações deste editor não serão postas em alta
|
rejected: As hiperligações deste editor não podem ser tendência
|
||||||
title: Editores
|
title: Editores
|
||||||
rejected: Rejeitado
|
rejected: Rejeitado
|
||||||
statuses:
|
statuses:
|
||||||
|
@ -907,18 +907,18 @@ pt-PT:
|
||||||
description_html: Estas são publicações que o seu servidor conhece e que atualmente estão a ser frequentemente partilhadas e adicionadas aos favoritos. Isto pode ajudar os seus utilizadores, novos e retornados, a encontrar mais pessoas para seguir. Nenhuma publicação será exibida publicamente até que aprove o autor, e o autor permita que a sua conta seja sugerida a outros. Você também pode permitir ou rejeitar publicações individualmente.
|
description_html: Estas são publicações que o seu servidor conhece e que atualmente estão a ser frequentemente partilhadas e adicionadas aos favoritos. Isto pode ajudar os seus utilizadores, novos e retornados, a encontrar mais pessoas para seguir. Nenhuma publicação será exibida publicamente até que aprove o autor, e o autor permita que a sua conta seja sugerida a outros. Você também pode permitir ou rejeitar publicações individualmente.
|
||||||
disallow: Não permitir publicação
|
disallow: Não permitir publicação
|
||||||
disallow_account: Não permitir autor
|
disallow_account: Não permitir autor
|
||||||
no_status_selected: Nenhuma publicação em alta foi alterada, pois nenhuma foi selecionada
|
no_status_selected: Não foram alteradas quaisquer publicações de tendências, uma vez que nenhuma foi selecionada
|
||||||
not_discoverable: O autor optou por não permitir que a sua conta seja sugerida a outros
|
not_discoverable: O autor optou por não permitir que a sua conta seja sugerida a outros
|
||||||
shared_by:
|
shared_by:
|
||||||
one: Partilhado ou adicionado aos marcadores uma vez
|
one: Partilhado ou adicionado aos marcadores uma vez
|
||||||
other: Partilhado e adicionado aos marcadores %{friendly_count} vezes
|
other: Partilhado e adicionado aos marcadores %{friendly_count} vezes
|
||||||
title: Publicações em alta
|
title: Publicações em tendência
|
||||||
tags:
|
tags:
|
||||||
current_score: Pontuação atual %{score}
|
current_score: Pontuação atual %{score}
|
||||||
dashboard:
|
dashboard:
|
||||||
tag_accounts_measure: utilizadores únicos
|
tag_accounts_measure: utilizadores únicos
|
||||||
tag_languages_dimension: Idiomas mais populares
|
tag_languages_dimension: Idiomas mais populares
|
||||||
tag_servers_dimension: Topo de servidores
|
tag_servers_dimension: Servidores mais populares
|
||||||
tag_servers_measure: servidores diferentes
|
tag_servers_measure: servidores diferentes
|
||||||
tag_uses_measure: utilizações totais
|
tag_uses_measure: utilizações totais
|
||||||
description_html: 'Estas são as #etiquetas que aparecem atualmente com frequência em publicações visíveis pelo seu servidor. Isto pode ajudar os seus utilizadores a descobrir o que está ser mais falado no momento. Nenhuma #etiqueta será exibida publicamente até que a aprove.'
|
description_html: 'Estas são as #etiquetas que aparecem atualmente com frequência em publicações visíveis pelo seu servidor. Isto pode ajudar os seus utilizadores a descobrir o que está ser mais falado no momento. Nenhuma #etiqueta será exibida publicamente até que a aprove.'
|
||||||
|
@ -928,15 +928,16 @@ pt-PT:
|
||||||
not_trendable: Não aparecerá nas tendências
|
not_trendable: Não aparecerá nas tendências
|
||||||
not_usable: Não pode ser utilizada
|
not_usable: Não pode ser utilizada
|
||||||
peaked_on_and_decaying: Máximo em %{date}, agora a decair
|
peaked_on_and_decaying: Máximo em %{date}, agora a decair
|
||||||
title: Etiquetas em alta
|
title: Etiquetas em tendência
|
||||||
trendable: Pode aparecer em alta
|
trendable: Pode aparecer nas tendências
|
||||||
trending_rank: 'Em alta #%{rank}'
|
trending_rank: 'Tendência #%{rank}'
|
||||||
usable: Pode ser utilizada
|
usable: Pode ser utilizada
|
||||||
usage_comparison: Utilizada %{today} vezes hoje, em comparação com %{yesterday} ontem
|
usage_comparison: Utilizada %{today} vezes hoje, em comparação com %{yesterday} ontem
|
||||||
used_by_over_week:
|
used_by_over_week:
|
||||||
one: Utilizada por uma pessoa na última semana
|
one: Utilizada por uma pessoa na última semana
|
||||||
other: Utilizada por %{count} pessoas na última semana
|
other: Utilizada por %{count} pessoas na última semana
|
||||||
trending: Em alta
|
title: Recomendações e tendências
|
||||||
|
trending: Em tendência
|
||||||
warning_presets:
|
warning_presets:
|
||||||
add_new: Adicionar novo
|
add_new: Adicionar novo
|
||||||
delete: Eliminar
|
delete: Eliminar
|
||||||
|
@ -946,13 +947,13 @@ pt-PT:
|
||||||
webhooks:
|
webhooks:
|
||||||
add_new: Adicionar endpoint
|
add_new: Adicionar endpoint
|
||||||
delete: Eliminar
|
delete: Eliminar
|
||||||
description_html: Um <strong>webhook</strong> possibilita que o Mastodon envie <strong>notificações em tempo real</strong> de eventos seleccionados, para uma aplicação sua, de modo que esta possa <strong>espoletar ações automaticamente</strong>.
|
description_html: Um <strong>webhook</strong> possibilita que o Mastodon envie <strong>notificações em tempo real</strong> de eventos selecionados, para uma aplicação sua, de modo que esta possa <strong>despoletar ações automaticamente</strong>.
|
||||||
disable: Desativar
|
disable: Desativar
|
||||||
disabled: Desativado
|
disabled: Desativado
|
||||||
edit: Editar endpoint
|
edit: Editar endpoint
|
||||||
empty: Não tem ainda qualquer endpoint de webhook configurado.
|
empty: Não tem ainda qualquer endpoint de webhook configurado.
|
||||||
enable: Ativar
|
enable: Ativar
|
||||||
enabled: Activo
|
enabled: Ativo
|
||||||
enabled_events:
|
enabled_events:
|
||||||
one: 1 evento ativado
|
one: 1 evento ativado
|
||||||
other: "%{count} eventos ativados"
|
other: "%{count} eventos ativados"
|
||||||
|
@ -993,18 +994,18 @@ pt-PT:
|
||||||
body: Foram lançadas novas versões do Mastodon, talvez queira atualizar!
|
body: Foram lançadas novas versões do Mastodon, talvez queira atualizar!
|
||||||
subject: Estão disponíveis novas versões do Mastodon para %{instance}!
|
subject: Estão disponíveis novas versões do Mastodon para %{instance}!
|
||||||
new_trends:
|
new_trends:
|
||||||
body: 'Os seguintes itens precisam ser revistos antes de poderem ser exibidos publicamente:'
|
body: 'Os seguintes itens necessitam de uma revisão antes de poderem ser apresentados publicamente:'
|
||||||
new_trending_links:
|
new_trending_links:
|
||||||
title: Ligações em alta
|
title: Hiperligações em tendência
|
||||||
new_trending_statuses:
|
new_trending_statuses:
|
||||||
title: Publicações em alta
|
title: Publicações em tendência
|
||||||
new_trending_tags:
|
new_trending_tags:
|
||||||
title: Etiquetas em alta
|
title: Etiquetas em tendência
|
||||||
subject: Novas tendências para revisão em %{instance}
|
subject: Novas tendências para revisão em %{instance}
|
||||||
aliases:
|
aliases:
|
||||||
add_new: Criar pseudónimo
|
add_new: Criar pseudónimo
|
||||||
created_msg: Criou com sucesso um novo pseudónimo. Pode agora iniciar a migração da conta antiga.
|
created_msg: Criou com sucesso um novo pseudónimo. Pode agora iniciar a migração da conta antiga.
|
||||||
deleted_msg: O pseudónimo foi correctamente eliminado. Não será mais possível migrar a partir dessa conta.
|
deleted_msg: O pseudónimo foi removido com êxito. Deixará de ser possível passar dessa conta para esta.
|
||||||
empty: Não tem pseudónimos.
|
empty: Não tem pseudónimos.
|
||||||
hint_html: Se quiser mudar de outra conta para esta, pode criar aqui um pseudónimo, que é necessário antes de poder prosseguir com a migração de seguidores da conta antiga para esta. Esta ação por si só é <strong>inofensiva e reversível</strong>. <strong>A migração da conta é iniciada a partir da conta antiga</strong>.
|
hint_html: Se quiser mudar de outra conta para esta, pode criar aqui um pseudónimo, que é necessário antes de poder prosseguir com a migração de seguidores da conta antiga para esta. Esta ação por si só é <strong>inofensiva e reversível</strong>. <strong>A migração da conta é iniciada a partir da conta antiga</strong>.
|
||||||
remove: Desvincular pseudónimo
|
remove: Desvincular pseudónimo
|
||||||
|
@ -1026,8 +1027,8 @@ pt-PT:
|
||||||
view_profile: Ver perfil
|
view_profile: Ver perfil
|
||||||
view_status: Ver publicação
|
view_status: Ver publicação
|
||||||
applications:
|
applications:
|
||||||
created: Aplicação correctamente criada
|
created: Aplicação criada com sucesso
|
||||||
destroyed: Aplicação correctamente eliminada
|
destroyed: Aplicação eliminada com sucesso
|
||||||
logout: Sair
|
logout: Sair
|
||||||
regenerate_token: Regenerar token de acesso
|
regenerate_token: Regenerar token de acesso
|
||||||
token_regenerated: Token de acesso regenerado com sucesso
|
token_regenerated: Token de acesso regenerado com sucesso
|
||||||
|
@ -1036,7 +1037,7 @@ pt-PT:
|
||||||
auth:
|
auth:
|
||||||
apply_for_account: Solicitar uma conta
|
apply_for_account: Solicitar uma conta
|
||||||
captcha_confirmation:
|
captcha_confirmation:
|
||||||
help_html: Se tiver problemas a resolver o CAPTCHA, pode entrar em contacto conosco através de %{email} e poderemos ajudá-lo.
|
help_html: Se tiver problemas a resolver o CAPTCHA, pode entrar em contacto connosco através de %{email} e poderemos ajudá-lo.
|
||||||
hint_html: Só mais uma coisa! Precisamos confirmar que você é um humano (isto para que possamos evitar spam!). Resolva o CAPTCHA abaixo e clique em "Continuar".
|
hint_html: Só mais uma coisa! Precisamos confirmar que você é um humano (isto para que possamos evitar spam!). Resolva o CAPTCHA abaixo e clique em "Continuar".
|
||||||
title: Verificação de segurança
|
title: Verificação de segurança
|
||||||
confirmations:
|
confirmations:
|
||||||
|
@ -1138,7 +1139,7 @@ pt-PT:
|
||||||
confirm_password: Insira sua palavra-passe atual para verificar a sua identidade
|
confirm_password: Insira sua palavra-passe atual para verificar a sua identidade
|
||||||
confirm_username: Insira seu nome de utilizador para confirmar o procedimento
|
confirm_username: Insira seu nome de utilizador para confirmar o procedimento
|
||||||
proceed: Eliminar conta
|
proceed: Eliminar conta
|
||||||
success_msg: A sua conta foi correctamente eliminada
|
success_msg: A sua conta foi eliminada com sucesso
|
||||||
warning:
|
warning:
|
||||||
before: 'Antes de continuar, por favor leia cuidadosamente estas notas:'
|
before: 'Antes de continuar, por favor leia cuidadosamente estas notas:'
|
||||||
caches: O conteúdo que foi armazenado em cache por outras instâncias pode perdurar
|
caches: O conteúdo que foi armazenado em cache por outras instâncias pode perdurar
|
||||||
|
@ -1335,11 +1336,11 @@ pt-PT:
|
||||||
muting: Importando contas silenciadas
|
muting: Importando contas silenciadas
|
||||||
type: Tipo de importação
|
type: Tipo de importação
|
||||||
type_groups:
|
type_groups:
|
||||||
constructive: Seguidores e Marcadores
|
constructive: Seguidores e marcadores
|
||||||
destructive: Bloqueios e silenciamentos
|
destructive: Bloqueios e silenciamentos
|
||||||
types:
|
types:
|
||||||
blocking: Lista de bloqueio
|
blocking: Lista de bloqueio
|
||||||
bookmarks: Itens salvos
|
bookmarks: Marcadores
|
||||||
domain_blocking: Lista de domínios bloqueados
|
domain_blocking: Lista de domínios bloqueados
|
||||||
following: Lista de pessoas que estás a seguir
|
following: Lista de pessoas que estás a seguir
|
||||||
lists: Listas
|
lists: Listas
|
||||||
|
@ -1395,7 +1396,7 @@ pt-PT:
|
||||||
acct: Mudou-se para
|
acct: Mudou-se para
|
||||||
cancel: Cancelar redirecionamento
|
cancel: Cancelar redirecionamento
|
||||||
cancel_explanation: Cancelar o redirecionamento irá reativar a sua conta atual, mas não trará de volta os seguidores que foram migrados para essa conta.
|
cancel_explanation: Cancelar o redirecionamento irá reativar a sua conta atual, mas não trará de volta os seguidores que foram migrados para essa conta.
|
||||||
cancelled_msg: Cancelou correctamente o redireccionamento.
|
cancelled_msg: Cancelou corretamente o redirecionamento.
|
||||||
errors:
|
errors:
|
||||||
already_moved: é a mesma conta para a qual já migrou
|
already_moved: é a mesma conta para a qual já migrou
|
||||||
missing_also_known_as: não é um pseudónimo dessa conta
|
missing_also_known_as: não é um pseudónimo dessa conta
|
||||||
|
@ -1405,13 +1406,13 @@ pt-PT:
|
||||||
followers_count: Seguidores no momento da migração
|
followers_count: Seguidores no momento da migração
|
||||||
incoming_migrations: A migrar de uma conta diferente
|
incoming_migrations: A migrar de uma conta diferente
|
||||||
incoming_migrations_html: Para migrar de outra conta para esta, primeiro você precisa <a href="%{path}">criar um pseudónimo</a>.
|
incoming_migrations_html: Para migrar de outra conta para esta, primeiro você precisa <a href="%{path}">criar um pseudónimo</a>.
|
||||||
moved_msg: A sua conta está agora a ser redireccionada para %{acct} e os seus seguidores estão a ser transferidos.
|
moved_msg: A sua conta está agora a ser redirecionada para %{acct} e os seus seguidores estão a ser transferidos.
|
||||||
not_redirecting: A sua conta não está atualmente a ser redirecionada para nenhuma outra conta.
|
not_redirecting: A sua conta não está atualmente a ser redirecionada para nenhuma outra conta.
|
||||||
on_cooldown: Migrou recentemente a sua conta. Esta função ficará disponível novamente em %{count} dias.
|
on_cooldown: Migrou recentemente a sua conta. Esta função ficará disponível novamente em %{count} dias.
|
||||||
past_migrations: Migrações anteriores
|
past_migrations: Migrações anteriores
|
||||||
proceed_with_move: Migrar seguidores
|
proceed_with_move: Migrar seguidores
|
||||||
redirected_msg: A sua conta está agora a ser redireccionada para %{acct}.
|
redirected_msg: A sua conta está agora a ser redirecionada para %{acct}.
|
||||||
redirecting_to: A sua conta está a ser redireccionada para %{acct}.
|
redirecting_to: A sua conta está a ser redirecionada para %{acct}.
|
||||||
set_redirect: Definir redirecionamento
|
set_redirect: Definir redirecionamento
|
||||||
warning:
|
warning:
|
||||||
backreference_required: A nova conta deve primeiro ser configurada para que esta seja referenciada
|
backreference_required: A nova conta deve primeiro ser configurada para que esta seja referenciada
|
||||||
|
@ -1419,7 +1420,7 @@ pt-PT:
|
||||||
cooldown: Após a migração, há um período de tempo de espera durante o qual não poderá voltar a migrar
|
cooldown: Após a migração, há um período de tempo de espera durante o qual não poderá voltar a migrar
|
||||||
disabled_account: Posteriormente, a sua conta atual não será totalmente utilizável. No entanto, continuará a ter acesso à exportação de dados, bem como à reativação.
|
disabled_account: Posteriormente, a sua conta atual não será totalmente utilizável. No entanto, continuará a ter acesso à exportação de dados, bem como à reativação.
|
||||||
followers: Esta ação irá migrar todos os seguidores da conta atual para a nova conta
|
followers: Esta ação irá migrar todos os seguidores da conta atual para a nova conta
|
||||||
only_redirect_html: Em alternativa, pode <a href="%{path}">apenas colocar um redireccionamento no seu perfil</a>.
|
only_redirect_html: Em alternativa, pode <a href="%{path}">apenas colocar um redirecionamento no seu perfil</a>.
|
||||||
other_data: Nenhum outro dado será migrado automaticamente
|
other_data: Nenhum outro dado será migrado automaticamente
|
||||||
redirect: O perfil da sua conta atual será atualizado com um aviso de redirecionamento e será excluído das pesquisas
|
redirect: O perfil da sua conta atual será atualizado com um aviso de redirecionamento e será excluído das pesquisas
|
||||||
moderation:
|
moderation:
|
||||||
|
@ -1546,7 +1547,7 @@ pt-PT:
|
||||||
remove_selected_follows: Deixar de seguir os utilizadores selecionados
|
remove_selected_follows: Deixar de seguir os utilizadores selecionados
|
||||||
status: Estado da conta
|
status: Estado da conta
|
||||||
remote_follow:
|
remote_follow:
|
||||||
missing_resource: Não foi possível encontrar o URL de redireccionamento para a sua conta
|
missing_resource: Não foi possível encontrar o URL de redirecionamento para a sua conta
|
||||||
reports:
|
reports:
|
||||||
errors:
|
errors:
|
||||||
invalid_rules: não faz referência a regras válidas
|
invalid_rules: não faz referência a regras válidas
|
||||||
|
@ -1639,7 +1640,7 @@ pt-PT:
|
||||||
user_domain_block: Bloqueou %{target_name}
|
user_domain_block: Bloqueou %{target_name}
|
||||||
lost_followers: Seguidores perdidos
|
lost_followers: Seguidores perdidos
|
||||||
lost_follows: Pessoas que segue perdidas
|
lost_follows: Pessoas que segue perdidas
|
||||||
preamble: Pode perder seguidores e pessoas que segue quando bloqueia um domínio ou quando os seus moderadores decidem suspender um servidor remoto. Quando isso acontecer, poderá descarregar listas de relações cessadas, para serem inspeccionadas e possivelmente importadas para outro servidor.
|
preamble: Pode perder seguidores e pessoas que segue quando bloqueia um domínio ou quando os seus moderadores decidem suspender um servidor remoto. Quando isso acontecer, poderá descarregar listas de relações cortadas, para serem inspecionadas e possivelmente importadas para outro servidor.
|
||||||
purged: Informações sobre este servidor foram purgadas pelos administradores do seu servidor.
|
purged: Informações sobre este servidor foram purgadas pelos administradores do seu servidor.
|
||||||
type: Evento
|
type: Evento
|
||||||
statuses:
|
statuses:
|
||||||
|
@ -1706,8 +1707,8 @@ pt-PT:
|
||||||
keep_pinned_hint: Não apagar nenhuma das suas publicações afixadas
|
keep_pinned_hint: Não apagar nenhuma das suas publicações afixadas
|
||||||
keep_polls: Manter sondagens
|
keep_polls: Manter sondagens
|
||||||
keep_polls_hint: Não apaga nenhuma das suas sondagens
|
keep_polls_hint: Não apaga nenhuma das suas sondagens
|
||||||
keep_self_bookmark: Manter as publicações que guardou
|
keep_self_bookmark: Manter as publicações que marcou
|
||||||
keep_self_bookmark_hint: Não apaga as suas próprias publicações se as tiver guardado
|
keep_self_bookmark_hint: Não elimina as suas próprias publicações se as tiver nos marcadores
|
||||||
keep_self_fav: Manter as publicações que marcou
|
keep_self_fav: Manter as publicações que marcou
|
||||||
keep_self_fav_hint: Não apaga as suas próprias publicações se as tiver marcado
|
keep_self_fav_hint: Não apaga as suas próprias publicações se as tiver marcado
|
||||||
min_age:
|
min_age:
|
||||||
|
@ -1852,8 +1853,8 @@ pt-PT:
|
||||||
one: "%{people} pessoa nos últimos 2 dias"
|
one: "%{people} pessoa nos últimos 2 dias"
|
||||||
other: "%{people} pessoas nos últimos 2 dias"
|
other: "%{people} pessoas nos últimos 2 dias"
|
||||||
hashtags_subtitle: Explore o que está em tendência desde os últimos 2 dias
|
hashtags_subtitle: Explore o que está em tendência desde os últimos 2 dias
|
||||||
hashtags_title: Trending hashtags
|
hashtags_title: Etiquetas em tendência
|
||||||
hashtags_view_more: Ver mais hashtags em alta
|
hashtags_view_more: Ver mais etiquetas em tendência
|
||||||
post_action: Compor
|
post_action: Compor
|
||||||
post_step: Diga olá para o mundo com texto, fotos, vídeos ou enquetes.
|
post_step: Diga olá para o mundo com texto, fotos, vídeos ou enquetes.
|
||||||
post_title: Faça a sua primeira publicação
|
post_title: Faça a sua primeira publicação
|
||||||
|
@ -1874,7 +1875,7 @@ pt-PT:
|
||||||
extra_instructions_html: <strong>Dica:</strong> A ligação no seu site pode ser invisível. A parte importante é <code>rel="me"</code> que impede a personificação em sites com conteúdo gerado pelo utilizador. Pode até utilizar uma etiqueta <code>link</code> no cabeçalho da página ao invés de <code>a</code>, mas o HTML deve ser acessível sem executar JavaScript.
|
extra_instructions_html: <strong>Dica:</strong> A ligação no seu site pode ser invisível. A parte importante é <code>rel="me"</code> que impede a personificação em sites com conteúdo gerado pelo utilizador. Pode até utilizar uma etiqueta <code>link</code> no cabeçalho da página ao invés de <code>a</code>, mas o HTML deve ser acessível sem executar JavaScript.
|
||||||
here_is_how: Veja como
|
here_is_how: Veja como
|
||||||
hint_html: "<strong>Verificar a sua identidade no Mastodon é para todos.</strong> Baseado em normas públicas da web, agora e para sempre gratuitas. Tudo o que precisa é de um site pessoal pelo qual as pessoas o reconheçam. Quando coloca no seu perfil uma ligação para esse site, vamos verificar que o site tem uma ligação de volta para o seu perfil e mostrar um indicador visual."
|
hint_html: "<strong>Verificar a sua identidade no Mastodon é para todos.</strong> Baseado em normas públicas da web, agora e para sempre gratuitas. Tudo o que precisa é de um site pessoal pelo qual as pessoas o reconheçam. Quando coloca no seu perfil uma ligação para esse site, vamos verificar que o site tem uma ligação de volta para o seu perfil e mostrar um indicador visual."
|
||||||
instructions_html: Copie e cole o código abaixo no HTML do seu site. Em seguida, adicione o endereço do seu site em um dos campos extras no seu perfil, na aba "Editar perfil" e salve as alterações.
|
instructions_html: Copie e cole o código abaixo no HTML do seu site. Em seguida, adicione o endereço do seu site num dos campos extras no seu perfil, na aba "Editar perfil" e guarde as alterações.
|
||||||
verification: Verificação
|
verification: Verificação
|
||||||
verified_links: As suas ligações verificadas
|
verified_links: As suas ligações verificadas
|
||||||
webauthn_credentials:
|
webauthn_credentials:
|
||||||
|
|
|
@ -206,7 +206,7 @@ ar:
|
||||||
setting_aggregate_reblogs: جمّع المنشورات المعاد نشرها في الخيوط الزمنية
|
setting_aggregate_reblogs: جمّع المنشورات المعاد نشرها في الخيوط الزمنية
|
||||||
setting_always_send_emails: ارسل إشعارات البريد الإلكتروني دائماً
|
setting_always_send_emails: ارسل إشعارات البريد الإلكتروني دائماً
|
||||||
setting_auto_play_gif: تشغيل تلقائي لِوَسائط جيف المتحركة
|
setting_auto_play_gif: تشغيل تلقائي لِوَسائط جيف المتحركة
|
||||||
setting_boost_modal: إظهار مربع حوار التأكيد قبل إعادة مشاركة أي منشور
|
setting_boost_modal: إظهار مربع حوار التأكيد قبل إعادة نشر أي منشور
|
||||||
setting_default_language: لغة النشر
|
setting_default_language: لغة النشر
|
||||||
setting_default_privacy: خصوصية المنشور
|
setting_default_privacy: خصوصية المنشور
|
||||||
setting_default_sensitive: اعتبر الوسائط دائما كمحتوى حساس
|
setting_default_sensitive: اعتبر الوسائط دائما كمحتوى حساس
|
||||||
|
|
|
@ -52,7 +52,7 @@ pt-PT:
|
||||||
locale: O idioma da interface de utilizador, e-mails e notificações push
|
locale: O idioma da interface de utilizador, e-mails e notificações push
|
||||||
password: Use pelo menos 8 caracteres
|
password: Use pelo menos 8 caracteres
|
||||||
phrase: Será correspondido independentemente da capitalização ou do aviso de conteúdo duma publicação
|
phrase: Será correspondido independentemente da capitalização ou do aviso de conteúdo duma publicação
|
||||||
scopes: Quais as API a que será concedido acesso. Se escolher uma abrangência de nível superior, não precisará de as seleccionar individualmente.
|
scopes: Quais as API a que a aplicação terá permissão para aceder. Se selecionar um âmbito de nível superior, não precisa de selecionar âmbitos individuais.
|
||||||
setting_aggregate_reblogs: Não mostrar novos reforços de publicações recentemente reforçadas (só afecta publicações acabadas de reforçar)
|
setting_aggregate_reblogs: Não mostrar novos reforços de publicações recentemente reforçadas (só afecta publicações acabadas de reforçar)
|
||||||
setting_always_send_emails: Normalmente as notificações por e-mail não serão enviadas quando estiver a utilizar ativamente o Mastodon
|
setting_always_send_emails: Normalmente as notificações por e-mail não serão enviadas quando estiver a utilizar ativamente o Mastodon
|
||||||
setting_default_sensitive: Media problemática oculta por padrão, pode ser revelada com um clique
|
setting_default_sensitive: Media problemática oculta por padrão, pode ser revelada com um clique
|
||||||
|
@ -81,7 +81,7 @@ pt-PT:
|
||||||
backups_retention_period: Os utilizadores têm a possibilidade de gerar arquivos das suas mensagens para descarregar mais tarde. Quando definido para um valor positivo, estes arquivos serão automaticamente eliminados do seu armazenamento após o número de dias especificado.
|
backups_retention_period: Os utilizadores têm a possibilidade de gerar arquivos das suas mensagens para descarregar mais tarde. Quando definido para um valor positivo, estes arquivos serão automaticamente eliminados do seu armazenamento após o número de dias especificado.
|
||||||
bootstrap_timeline_accounts: Estas contas serão destacadas no topo das recomendações aos novos utilizadores.
|
bootstrap_timeline_accounts: Estas contas serão destacadas no topo das recomendações aos novos utilizadores.
|
||||||
closed_registrations_message: Apresentado quando as inscrições estiverem encerradas
|
closed_registrations_message: Apresentado quando as inscrições estiverem encerradas
|
||||||
content_cache_retention_period: Todas as publicações de outros servidores (incluindo boosts e respostas) serão eliminadas após o número de dias especificado, independentemente de qualquer interação do utilizador local com essas publicações. Isto inclui publicações em que um utilizador local as tenha marcado como favoritas ou adicionado aos items salvos. As menções privadas entre utilizadores de instâncias diferentes também se perderão e serão impossíveis de restaurar. A utilização desta definição destina-se a instâncias para fins especiais e quebra muitas expectativas dos utilizadores quando implementada para utilização geral.
|
content_cache_retention_period: Todas as publicações de outros servidores (incluindo boosts e respostas) serão eliminadas após o número de dias especificado, independentemente de qualquer interação do utilizador local com essas publicações. Isto inclui publicações em que um utilizador local as tenha marcado ou favoritado. As menções privadas entre utilizadores de instâncias diferentes também se perderão e serão impossíveis de restaurar. A utilização desta definição destina-se a instâncias para fins especiais e quebra muitas expectativas dos utilizadores quando implementada para utilização geral.
|
||||||
custom_css: Pode aplicar estilos personalizados na versão web do Mastodon.
|
custom_css: Pode aplicar estilos personalizados na versão web do Mastodon.
|
||||||
favicon: WEBP, PNG, GIF ou JPG. Substitui o ícone de favorito padrão do Mastodon por um ícone personalizado.
|
favicon: WEBP, PNG, GIF ou JPG. Substitui o ícone de favorito padrão do Mastodon por um ícone personalizado.
|
||||||
mascot: Sobrepõe-se à ilustração na interface web avançada.
|
mascot: Sobrepõe-se à ilustração na interface web avançada.
|
||||||
|
@ -99,9 +99,9 @@ pt-PT:
|
||||||
theme: Tema que os visitantes e os novos utilizadores veem.
|
theme: Tema que os visitantes e os novos utilizadores veem.
|
||||||
thumbnail: Uma imagem de cerca de 2:1, apresentada ao lado da informação do seu servidor.
|
thumbnail: Uma imagem de cerca de 2:1, apresentada ao lado da informação do seu servidor.
|
||||||
timeline_preview: Os visitantes sem sessão iniciada poderão consultar as publicações públicas mais recentes disponíveis no servidor.
|
timeline_preview: Os visitantes sem sessão iniciada poderão consultar as publicações públicas mais recentes disponíveis no servidor.
|
||||||
trendable_by_default: Ignorar a revisão manual do conteúdo em alta. Elementos em avulso poderão ainda assim ser retirados das tendências mesmo após a sua apresentação.
|
trendable_by_default: Ignorar a revisão manual do conteúdo de tendências. Os itens individuais ainda podem ser removidos das tendências após a apresentação.
|
||||||
trends: As publicações em alta mostram quais as publicações, etiquetas e notícias que estão a ganhar destaque no seu servidor.
|
trends: As tendências mostram quais as publicações, etiquetas e notícias que estão a ganhar destaque no seu servidor.
|
||||||
trends_as_landing_page: Mostrar conteúdo de tendências para usuários logados e visitantes em vez de uma descrição deste servidor. Requer que as tendências sejam ativadas.
|
trends_as_landing_page: Mostrar conteúdo de tendências a utilizadores e visitantes com sessão terminada em vez de uma descrição deste servidor. Requer que as tendências estejam ativadas.
|
||||||
form_challenge:
|
form_challenge:
|
||||||
current_password: Está a entrar numa área segura
|
current_password: Está a entrar numa área segura
|
||||||
imports:
|
imports:
|
||||||
|
@ -129,7 +129,7 @@ pt-PT:
|
||||||
tag:
|
tag:
|
||||||
name: Só pode alterar a capitalização das letras, por exemplo, para torná-las mais legíveis
|
name: Só pode alterar a capitalização das letras, por exemplo, para torná-las mais legíveis
|
||||||
user:
|
user:
|
||||||
chosen_languages: Quando seleccionado, só serão mostradas nas cronologias públicas as publicações nos idiomas escolhidos
|
chosen_languages: Quando selecionado, só serão mostradas nas cronologias públicas as publicações nos idiomas escolhidos
|
||||||
role: A função controla que permissões o utilizador tem
|
role: A função controla que permissões o utilizador tem
|
||||||
user_role:
|
user_role:
|
||||||
color: Cor a ser utilizada para a função em toda a interface de utilizador, como RGB no formato hexadecimal
|
color: Cor a ser utilizada para a função em toda a interface de utilizador, como RGB no formato hexadecimal
|
||||||
|
@ -222,7 +222,7 @@ pt-PT:
|
||||||
setting_reduce_motion: Reduz movimento em animações
|
setting_reduce_motion: Reduz movimento em animações
|
||||||
setting_system_font_ui: Usar o tipo de letra padrão do sistema
|
setting_system_font_ui: Usar o tipo de letra padrão do sistema
|
||||||
setting_theme: Tema do sítio
|
setting_theme: Tema do sítio
|
||||||
setting_trends: Mostrar o que está hoje em alta
|
setting_trends: Mostrar as tendências de hoje
|
||||||
setting_unfollow_modal: Solicitar confirmação antes de deixar de seguir alguém
|
setting_unfollow_modal: Solicitar confirmação antes de deixar de seguir alguém
|
||||||
setting_use_blurhash: Mostrar gradientes coloridos para medias ocultas
|
setting_use_blurhash: Mostrar gradientes coloridos para medias ocultas
|
||||||
setting_use_pending_items: Modo lento
|
setting_use_pending_items: Modo lento
|
||||||
|
@ -253,7 +253,7 @@ pt-PT:
|
||||||
mascot: Mascote personalizada (legado)
|
mascot: Mascote personalizada (legado)
|
||||||
media_cache_retention_period: Período de retenção de ficheiros de media em cache
|
media_cache_retention_period: Período de retenção de ficheiros de media em cache
|
||||||
peers_api_enabled: Publicar lista de servidores descobertos na API
|
peers_api_enabled: Publicar lista de servidores descobertos na API
|
||||||
profile_directory: Habilitar diretório de perfis
|
profile_directory: Ativar o diretório de perfis
|
||||||
registrations_mode: Quem se pode inscrever
|
registrations_mode: Quem se pode inscrever
|
||||||
require_invite_text: Requerer uma razão para entrar
|
require_invite_text: Requerer uma razão para entrar
|
||||||
show_domain_blocks: Mostrar domínios bloqueados
|
show_domain_blocks: Mostrar domínios bloqueados
|
||||||
|
@ -268,8 +268,8 @@ pt-PT:
|
||||||
theme: Tema predefinido
|
theme: Tema predefinido
|
||||||
thumbnail: Miniatura do servidor
|
thumbnail: Miniatura do servidor
|
||||||
timeline_preview: Permitir acesso não autenticado às cronologias públicas
|
timeline_preview: Permitir acesso não autenticado às cronologias públicas
|
||||||
trendable_by_default: Permitir publicações em alta sem revisão prévia
|
trendable_by_default: Permitir tendências sem revisão prévia
|
||||||
trends: Activar publicações em alta
|
trends: Ativar tendências
|
||||||
trends_as_landing_page: Usar tendências como página inicial
|
trends_as_landing_page: Usar tendências como página inicial
|
||||||
interactions:
|
interactions:
|
||||||
must_be_follower: Bloquear notificações de não-seguidores
|
must_be_follower: Bloquear notificações de não-seguidores
|
||||||
|
@ -303,7 +303,7 @@ pt-PT:
|
||||||
label: Está disponível uma nova versão do Mastodon
|
label: Está disponível uma nova versão do Mastodon
|
||||||
none: Nunca notificar atualizações (não recomendado)
|
none: Nunca notificar atualizações (não recomendado)
|
||||||
patch: Notificar sobre atualizações de correções de problemas
|
patch: Notificar sobre atualizações de correções de problemas
|
||||||
trending_tag: Uma nova publicação em alta requer avaliação
|
trending_tag: Uma nova publicação em tendência requer revisão
|
||||||
rule:
|
rule:
|
||||||
hint: Informação Adicional
|
hint: Informação Adicional
|
||||||
text: Regra
|
text: Regra
|
||||||
|
@ -313,7 +313,7 @@ pt-PT:
|
||||||
tag:
|
tag:
|
||||||
listable: Permitir que esta etiqueta apareça em pesquisas e no diretório de perfis
|
listable: Permitir que esta etiqueta apareça em pesquisas e no diretório de perfis
|
||||||
name: Etiqueta
|
name: Etiqueta
|
||||||
trendable: Permitir que esta etiqueta apareça em alta
|
trendable: Permitir que esta etiqueta apareça nas tendências
|
||||||
usable: Permitir que as publicações usem esta hashtag localmente
|
usable: Permitir que as publicações usem esta hashtag localmente
|
||||||
user:
|
user:
|
||||||
role: Cargo
|
role: Cargo
|
||||||
|
|
|
@ -57,36 +57,50 @@ class Mastodon::RedisConfiguration
|
||||||
def setup_config(prefix: nil, defaults: {})
|
def setup_config(prefix: nil, defaults: {})
|
||||||
prefix = "#{prefix}REDIS_"
|
prefix = "#{prefix}REDIS_"
|
||||||
|
|
||||||
url = ENV.fetch("#{prefix}URL", nil)
|
url = ENV.fetch("#{prefix}URL", nil)
|
||||||
user = ENV.fetch("#{prefix}USER", nil)
|
user = ENV.fetch("#{prefix}USER", nil)
|
||||||
password = ENV.fetch("#{prefix}PASSWORD", nil)
|
password = ENV.fetch("#{prefix}PASSWORD", nil)
|
||||||
host = ENV.fetch("#{prefix}HOST", defaults[:host])
|
host = ENV.fetch("#{prefix}HOST", defaults[:host])
|
||||||
port = ENV.fetch("#{prefix}PORT", defaults[:port])
|
port = ENV.fetch("#{prefix}PORT", defaults[:port])
|
||||||
db = ENV.fetch("#{prefix}DB", defaults[:db])
|
db = ENV.fetch("#{prefix}DB", defaults[:db])
|
||||||
name = ENV.fetch("#{prefix}SENTINEL_MASTER", nil)
|
|
||||||
sentinels = parse_sentinels(ENV.fetch("#{prefix}SENTINELS", nil))
|
|
||||||
|
|
||||||
return { url:, driver: } if url
|
return { url:, driver: } if url
|
||||||
|
|
||||||
if name.present? && sentinels.present?
|
sentinel_options = setup_sentinels(prefix, default_user: user, default_password: password)
|
||||||
host = name
|
|
||||||
|
if sentinel_options.present?
|
||||||
|
host = sentinel_options[:name]
|
||||||
port = nil
|
port = nil
|
||||||
db ||= 0
|
db ||= 0
|
||||||
else
|
|
||||||
sentinels = nil
|
|
||||||
end
|
end
|
||||||
|
|
||||||
url = construct_uri(host, port, db, user, password)
|
url = construct_uri(host, port, db, user, password)
|
||||||
|
|
||||||
if url.present?
|
if url.present?
|
||||||
{ url:, driver:, name:, sentinels: }
|
{ url:, driver: }.merge(sentinel_options)
|
||||||
else
|
else
|
||||||
# Fall back to base config. This has defaults for the URL
|
# Fall back to base config, which has defaults for the URL
|
||||||
# so this cannot lead to an endless loop.
|
# so this cannot lead to endless recursion.
|
||||||
base
|
base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def setup_sentinels(prefix, default_user: nil, default_password: nil)
|
||||||
|
name = ENV.fetch("#{prefix}SENTINEL_MASTER", nil)
|
||||||
|
sentinel_port = ENV.fetch("#{prefix}SENTINEL_PORT", 26_379)
|
||||||
|
sentinel_list = ENV.fetch("#{prefix}SENTINELS", nil)
|
||||||
|
sentinel_username = ENV.fetch("#{prefix}SENTINEL_USERNAME", default_user)
|
||||||
|
sentinel_password = ENV.fetch("#{prefix}SENTINEL_PASSWORD", default_password)
|
||||||
|
|
||||||
|
sentinels = parse_sentinels(sentinel_list, default_port: sentinel_port)
|
||||||
|
|
||||||
|
if name.present? && sentinels.present?
|
||||||
|
{ name:, sentinels:, sentinel_username:, sentinel_password: }
|
||||||
|
else
|
||||||
|
{}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def construct_uri(host, port, db, user, password)
|
def construct_uri(host, port, db, user, password)
|
||||||
return nil if host.blank?
|
return nil if host.blank?
|
||||||
|
|
||||||
|
@ -96,10 +110,10 @@ class Mastodon::RedisConfiguration
|
||||||
end.normalize.to_str
|
end.normalize.to_str
|
||||||
end
|
end
|
||||||
|
|
||||||
def parse_sentinels(sentinels_string)
|
def parse_sentinels(sentinels_string, default_port: 26_379)
|
||||||
(sentinels_string || '').split(',').map do |sentinel|
|
(sentinels_string || '').split(',').map do |sentinel|
|
||||||
host, port = sentinel.split(':')
|
host, port = sentinel.split(':')
|
||||||
port = port.present? ? port.to_i : 26_379
|
port = (port || default_port).to_i
|
||||||
{ host: host, port: port }
|
{ host: host, port: port }
|
||||||
end.presence
|
end.presence
|
||||||
end
|
end
|
||||||
|
|
|
@ -48,7 +48,7 @@ RSpec.describe Admin::AccountsController do
|
||||||
end
|
end
|
||||||
|
|
||||||
def accounts_table_rows
|
def accounts_table_rows
|
||||||
Nokogiri::Slop(response.body).css('table.accounts-table tr')
|
response.parsed_body.css('table.accounts-table tr')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ RSpec.describe Admin::ExportDomainBlocksController do
|
||||||
end
|
end
|
||||||
|
|
||||||
def batch_table_rows
|
def batch_table_rows
|
||||||
Nokogiri::Slop(response.body).css('body div.batch-table__row')
|
response.parsed_body.css('body div.batch-table__row')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ RSpec.describe Admin::InstancesController do
|
||||||
end
|
end
|
||||||
|
|
||||||
def instance_directory_links
|
def instance_directory_links
|
||||||
Nokogiri::Slop(response.body).css('div.directory__tag a')
|
response.parsed_body.css('div.directory__tag a')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -342,7 +342,7 @@ RSpec.describe Auth::RegistrationsController do
|
||||||
end
|
end
|
||||||
|
|
||||||
def username_error_text
|
def username_error_text
|
||||||
Nokogiri::Slop(response.body).css('.user_account_username .error').text
|
response.parsed_body.css('.user_account_username .error').text
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,84 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
require 'rails_helper'
|
|
||||||
|
|
||||||
RSpec.describe InvitesController do
|
|
||||||
render_views
|
|
||||||
|
|
||||||
let(:user) { Fabricate(:user) }
|
|
||||||
|
|
||||||
before do
|
|
||||||
sign_in user
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'GET #index' do
|
|
||||||
before do
|
|
||||||
Fabricate(:invite, user: user)
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when everyone can invite' do
|
|
||||||
before do
|
|
||||||
UserRole.everyone.update(permissions: UserRole.everyone.permissions | UserRole::FLAGS[:invite_users])
|
|
||||||
get :index
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns http success' do
|
|
||||||
expect(response).to have_http_status(:success)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns private cache control headers' do
|
|
||||||
expect(response.headers['Cache-Control']).to include('private, no-store')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when not everyone can invite' do
|
|
||||||
before do
|
|
||||||
UserRole.everyone.update(permissions: UserRole.everyone.permissions & ~UserRole::FLAGS[:invite_users])
|
|
||||||
get :index
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns http forbidden' do
|
|
||||||
expect(response).to have_http_status(403)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'POST #create' do
|
|
||||||
subject { post :create, params: { invite: { max_uses: '10', expires_in: 1800 } } }
|
|
||||||
|
|
||||||
context 'when everyone can invite' do
|
|
||||||
before do
|
|
||||||
UserRole.everyone.update(permissions: UserRole.everyone.permissions | UserRole::FLAGS[:invite_users])
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'succeeds to create a invite' do
|
|
||||||
expect { subject }.to change(Invite, :count).by(1)
|
|
||||||
expect(subject).to redirect_to invites_path
|
|
||||||
expect(Invite.last).to have_attributes(user_id: user.id, max_uses: 10)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when not everyone can invite' do
|
|
||||||
before do
|
|
||||||
UserRole.everyone.update(permissions: UserRole.everyone.permissions & ~UserRole::FLAGS[:invite_users])
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns http forbidden' do
|
|
||||||
expect(subject).to have_http_status(403)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'DELETE #destroy' do
|
|
||||||
subject { delete :destroy, params: { id: invite.id } }
|
|
||||||
|
|
||||||
let(:invite) { Fabricate(:invite, user: user, expires_at: nil) }
|
|
||||||
|
|
||||||
it 'expires invite and redirects' do
|
|
||||||
expect { subject }
|
|
||||||
.to(change { invite.reload.expired? }.to(true))
|
|
||||||
expect(response)
|
|
||||||
.to redirect_to invites_path
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -100,21 +100,64 @@ RSpec.describe Mastodon::RedisConfiguration do
|
||||||
expect(subject[:url]).to eq 'redis://:testpass1@mainsentinel/0'
|
expect(subject[:url]).to eq 'redis://:testpass1@mainsentinel/0'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'uses the redis password to authenticate with sentinels' do
|
||||||
|
expect(subject[:sentinel_password]).to eq 'testpass1'
|
||||||
|
end
|
||||||
|
|
||||||
it 'includes the sentinel master name and list of sentinels' do
|
it 'includes the sentinel master name and list of sentinels' do
|
||||||
expect(subject[:name]).to eq 'mainsentinel'
|
expect(subject[:name]).to eq 'mainsentinel'
|
||||||
expect(subject[:sentinels]).to contain_exactly({ host: '192.168.0.1', port: 3000 }, { host: '192.168.0.2', port: 4000 })
|
expect(subject[:sentinels]).to contain_exactly({ host: '192.168.0.1', port: 3000 }, { host: '192.168.0.2', port: 4000 })
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "when giving dedicated credentials in `#{prefix}REDIS_SENTINEL_USERNAME` and `#{prefix}REDIS_SENTINEL_PASSWORD`" do
|
||||||
|
around do |example|
|
||||||
|
ClimateControl.modify "#{prefix}REDIS_SENTINEL_USERNAME": 'sentinel_user', "#{prefix}REDIS_SENTINEL_PASSWORD": 'sentinel_pass1' do
|
||||||
|
example.run
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'uses the credential to authenticate with sentinels' do
|
||||||
|
expect(subject[:sentinel_username]).to eq 'sentinel_user'
|
||||||
|
expect(subject[:sentinel_password]).to eq 'sentinel_pass1'
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when giving sentinels without port numbers' do
|
context 'when giving sentinels without port numbers' do
|
||||||
around do |example|
|
context "when no default port is given via `#{prefix}REDIS_SENTINEL_PORT`" do
|
||||||
ClimateControl.modify "#{prefix}REDIS_SENTINELS": '192.168.0.1,192.168.0.2', "#{prefix}REDIS_SENTINEL_MASTER": 'mainsentinel' do
|
around do |example|
|
||||||
example.run
|
ClimateControl.modify "#{prefix}REDIS_SENTINELS": '192.168.0.1,192.168.0.2', "#{prefix}REDIS_SENTINEL_MASTER": 'mainsentinel' do
|
||||||
|
example.run
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'uses the default sentinel port' do
|
||||||
|
expect(subject[:sentinels]).to contain_exactly({ host: '192.168.0.1', port: 26_379 }, { host: '192.168.0.2', port: 26_379 })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'uses the default sentinel port' do
|
context 'when adding port numbers to some, but not all sentinels' do
|
||||||
expect(subject[:sentinels]).to contain_exactly({ host: '192.168.0.1', port: 26_379 }, { host: '192.168.0.2', port: 26_379 })
|
around do |example|
|
||||||
|
ClimateControl.modify "#{prefix}REDIS_SENTINELS": '192.168.0.1:5678,192.168.0.2', "#{prefix}REDIS_SENTINEL_MASTER": 'mainsentinel' do
|
||||||
|
example.run
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'uses the given port number when available and the default otherwise' do
|
||||||
|
expect(subject[:sentinels]).to contain_exactly({ host: '192.168.0.1', port: 5678 }, { host: '192.168.0.2', port: 26_379 })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when a default port is given via `#{prefix}REDIS_SENTINEL_PORT`" do
|
||||||
|
around do |example|
|
||||||
|
ClimateControl.modify "#{prefix}REDIS_SENTINEL_PORT": '1234', "#{prefix}REDIS_SENTINELS": '192.168.0.1,192.168.0.2', "#{prefix}REDIS_SENTINEL_MASTER": 'mainsentinel' do
|
||||||
|
example.run
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'uses the given port number' do
|
||||||
|
expect(subject[:sentinels]).to contain_exactly({ host: '192.168.0.1', port: 1234 }, { host: '192.168.0.2', port: 1234 })
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -128,8 +171,6 @@ RSpec.describe Mastodon::RedisConfiguration do
|
||||||
url: 'redis://localhost:6379/0',
|
url: 'redis://localhost:6379/0',
|
||||||
driver: :hiredis,
|
driver: :hiredis,
|
||||||
namespace: nil,
|
namespace: nil,
|
||||||
name: nil,
|
|
||||||
sentinels: nil,
|
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -162,8 +203,6 @@ RSpec.describe Mastodon::RedisConfiguration do
|
||||||
url: 'redis://:testpass@redis.example.com:3333/3',
|
url: 'redis://:testpass@redis.example.com:3333/3',
|
||||||
driver: :hiredis,
|
driver: :hiredis,
|
||||||
namespace: nil,
|
namespace: nil,
|
||||||
name: nil,
|
|
||||||
sentinels: nil,
|
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -192,8 +231,6 @@ RSpec.describe Mastodon::RedisConfiguration do
|
||||||
namespace: 'cache',
|
namespace: 'cache',
|
||||||
expires_in: 10.minutes,
|
expires_in: 10.minutes,
|
||||||
connect_timeout: 5,
|
connect_timeout: 5,
|
||||||
name: nil,
|
|
||||||
sentinels: nil,
|
|
||||||
pool: {
|
pool: {
|
||||||
size: 5,
|
size: 5,
|
||||||
timeout: 5,
|
timeout: 5,
|
||||||
|
|
|
@ -723,6 +723,30 @@ RSpec.describe Account do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#prepare_contents' do
|
||||||
|
subject { Fabricate.build :account, domain: domain, note: ' padded note ', display_name: ' padded name ' }
|
||||||
|
|
||||||
|
context 'with local account' do
|
||||||
|
let(:domain) { nil }
|
||||||
|
|
||||||
|
it 'strips values' do
|
||||||
|
expect { subject.valid? }
|
||||||
|
.to change(subject, :note).to('padded note')
|
||||||
|
.and(change(subject, :display_name).to('padded name'))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with remote account' do
|
||||||
|
let(:domain) { 'host.example' }
|
||||||
|
|
||||||
|
it 'preserves values' do
|
||||||
|
expect { subject.valid? }
|
||||||
|
.to not_change(subject, :note)
|
||||||
|
.and(not_change(subject, :display_name))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe 'Normalizations' do
|
describe 'Normalizations' do
|
||||||
describe 'username' do
|
describe 'username' do
|
||||||
it { is_expected.to normalize(:username).from(" \u3000bob \t \u00a0 \n ").to('bob') }
|
it { is_expected.to normalize(:username).from(" \u3000bob \t \u00a0 \n ").to('bob') }
|
||||||
|
|
|
@ -64,14 +64,7 @@ RSpec.describe Announcement do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'Validations' do
|
describe 'Validations' do
|
||||||
describe 'text' do
|
it { is_expected.to validate_presence_of(:text) }
|
||||||
it 'validates presence of attribute' do
|
|
||||||
record = Fabricate.build(:announcement, text: nil)
|
|
||||||
|
|
||||||
expect(record).to_not be_valid
|
|
||||||
expect(record.errors[:text]).to be_present
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'ends_at' do
|
describe 'ends_at' do
|
||||||
it 'validates presence when starts_at is present' do
|
it 'validates presence when starts_at is present' do
|
||||||
|
|
|
@ -4,17 +4,8 @@ require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe Block do
|
RSpec.describe Block do
|
||||||
describe 'validations' do
|
describe 'validations' do
|
||||||
it 'is invalid without an account' do
|
it { is_expected.to belong_to(:account).required }
|
||||||
block = Fabricate.build(:block, account: nil)
|
it { is_expected.to belong_to(:target_account).required }
|
||||||
block.valid?
|
|
||||||
expect(block).to model_have_error_on_field(:account)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'is invalid without a target_account' do
|
|
||||||
block = Fabricate.build(:block, target_account: nil)
|
|
||||||
block.valid?
|
|
||||||
expect(block).to model_have_error_on_field(:target_account)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'removes blocking cache after creation' do
|
it 'removes blocking cache after creation' do
|
||||||
|
|
|
@ -4,11 +4,6 @@ require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe CustomEmojiCategory do
|
RSpec.describe CustomEmojiCategory do
|
||||||
describe 'validations' do
|
describe 'validations' do
|
||||||
it 'validates name presence' do
|
it { is_expected.to validate_presence_of(:name) }
|
||||||
record = described_class.new(name: nil)
|
|
||||||
|
|
||||||
expect(record).to_not be_valid
|
|
||||||
expect(record).to model_have_error_on_field(:name)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,19 +4,8 @@ require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe CustomFilter do
|
RSpec.describe CustomFilter do
|
||||||
describe 'Validations' do
|
describe 'Validations' do
|
||||||
it 'requires presence of title' do
|
it { is_expected.to validate_presence_of(:title) }
|
||||||
record = described_class.new(title: '')
|
it { is_expected.to validate_presence_of(:context) }
|
||||||
record.valid?
|
|
||||||
|
|
||||||
expect(record).to model_have_error_on_field(:title)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'requires presence of context' do
|
|
||||||
record = described_class.new(context: nil)
|
|
||||||
record.valid?
|
|
||||||
|
|
||||||
expect(record).to model_have_error_on_field(:context)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'requires non-empty of context' do
|
it 'requires non-empty of context' do
|
||||||
record = described_class.new(context: [])
|
record = described_class.new(context: [])
|
||||||
|
|
|
@ -4,11 +4,7 @@ require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe DomainAllow do
|
RSpec.describe DomainAllow do
|
||||||
describe 'Validations' do
|
describe 'Validations' do
|
||||||
it 'is invalid without a domain' do
|
it { is_expected.to validate_presence_of(:domain) }
|
||||||
domain_allow = Fabricate.build(:domain_allow, domain: nil)
|
|
||||||
domain_allow.valid?
|
|
||||||
expect(domain_allow).to model_have_error_on_field(:domain)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'is invalid if the same normalized domain already exists' do
|
it 'is invalid if the same normalized domain already exists' do
|
||||||
_domain_allow = Fabricate(:domain_allow, domain: 'にゃん')
|
_domain_allow = Fabricate(:domain_allow, domain: 'にゃん')
|
||||||
|
|
|
@ -4,11 +4,7 @@ require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe DomainBlock do
|
RSpec.describe DomainBlock do
|
||||||
describe 'validations' do
|
describe 'validations' do
|
||||||
it 'is invalid without a domain' do
|
it { is_expected.to validate_presence_of(:domain) }
|
||||||
domain_block = Fabricate.build(:domain_block, domain: nil)
|
|
||||||
domain_block.valid?
|
|
||||||
expect(domain_block).to model_have_error_on_field(:domain)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'is invalid if the same normalized domain already exists' do
|
it 'is invalid if the same normalized domain already exists' do
|
||||||
_domain_block = Fabricate(:domain_block, domain: 'にゃん')
|
_domain_block = Fabricate(:domain_block, domain: 'にゃん')
|
||||||
|
|
|
@ -9,17 +9,8 @@ RSpec.describe Follow do
|
||||||
describe 'validations' do
|
describe 'validations' do
|
||||||
subject { described_class.new(account: alice, target_account: bob, rate_limit: true) }
|
subject { described_class.new(account: alice, target_account: bob, rate_limit: true) }
|
||||||
|
|
||||||
it 'is invalid without an account' do
|
it { is_expected.to belong_to(:account).required }
|
||||||
follow = Fabricate.build(:follow, account: nil)
|
it { is_expected.to belong_to(:target_account).required }
|
||||||
follow.valid?
|
|
||||||
expect(follow).to model_have_error_on_field(:account)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'is invalid without a target_account' do
|
|
||||||
follow = Fabricate.build(:follow, target_account: nil)
|
|
||||||
follow.valid?
|
|
||||||
expect(follow).to model_have_error_on_field(:target_account)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'is invalid if account already follows too many people' do
|
it 'is invalid if account already follows too many people' do
|
||||||
alice.update(following_count: FollowLimitValidator::LIMIT)
|
alice.update(following_count: FollowLimitValidator::LIMIT)
|
||||||
|
|
|
@ -3,19 +3,8 @@
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe Import do
|
RSpec.describe Import do
|
||||||
let(:account) { Fabricate(:account) }
|
describe 'Validations' do
|
||||||
let(:type) { 'following' }
|
it { is_expected.to validate_presence_of(:type) }
|
||||||
let(:data) { attachment_fixture('imports.txt') }
|
it { is_expected.to validate_presence_of(:data) }
|
||||||
|
|
||||||
describe 'validations' do
|
|
||||||
it 'is invalid without an type' do
|
|
||||||
import = described_class.create(account: account, data: data)
|
|
||||||
expect(import).to model_have_error_on_field(:type)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'is invalid without a data' do
|
|
||||||
import = described_class.create(account: account, type: type)
|
|
||||||
expect(import).to model_have_error_on_field(:data)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,19 +4,8 @@ require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe IpBlock do
|
RSpec.describe IpBlock do
|
||||||
describe 'validations' do
|
describe 'validations' do
|
||||||
it 'validates ip presence', :aggregate_failures do
|
it { is_expected.to validate_presence_of(:ip) }
|
||||||
ip_block = described_class.new(ip: nil, severity: :no_access)
|
it { is_expected.to validate_presence_of(:severity) }
|
||||||
|
|
||||||
expect(ip_block).to_not be_valid
|
|
||||||
expect(ip_block).to model_have_error_on_field(:ip)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'validates severity presence', :aggregate_failures do
|
|
||||||
ip_block = described_class.new(ip: '127.0.0.1', severity: nil)
|
|
||||||
|
|
||||||
expect(ip_block).to_not be_valid
|
|
||||||
expect(ip_block).to model_have_error_on_field(:severity)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'validates ip uniqueness', :aggregate_failures do
|
it 'validates ip uniqueness', :aggregate_failures do
|
||||||
described_class.create!(ip: '127.0.0.1', severity: :no_access)
|
described_class.create!(ip: '127.0.0.1', severity: :no_access)
|
||||||
|
|
|
@ -3,14 +3,7 @@
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe Marker do
|
RSpec.describe Marker do
|
||||||
describe 'validations' do
|
describe 'Validations' do
|
||||||
describe 'timeline' do
|
it { is_expected.to validate_inclusion_of(:timeline).in_array(described_class::TIMELINES) }
|
||||||
it 'must be included in valid list' do
|
|
||||||
record = described_class.new(timeline: 'not real timeline')
|
|
||||||
|
|
||||||
expect(record).to_not be_valid
|
|
||||||
expect(record).to model_have_error_on_field(:timeline)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -257,12 +257,7 @@ RSpec.describe MediaAttachment, :attachment_processing do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is invalid without file' do
|
it { is_expected.to validate_presence_of(:file) }
|
||||||
media = described_class.new
|
|
||||||
|
|
||||||
expect(media.valid?).to be false
|
|
||||||
expect(media).to model_have_error_on_field(:file)
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'size limit validation' do
|
describe 'size limit validation' do
|
||||||
it 'rejects video files that are too large' do
|
it 'rejects video files that are too large' do
|
||||||
|
|
|
@ -4,16 +4,7 @@ require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe Mention do
|
RSpec.describe Mention do
|
||||||
describe 'validations' do
|
describe 'validations' do
|
||||||
it 'is invalid without an account' do
|
it { is_expected.to belong_to(:account).required }
|
||||||
mention = Fabricate.build(:mention, account: nil)
|
it { is_expected.to belong_to(:status).required }
|
||||||
mention.valid?
|
|
||||||
expect(mention).to model_have_error_on_field(:account)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'is invalid without a status' do
|
|
||||||
mention = Fabricate.build(:mention, status: nil)
|
|
||||||
mention.valid?
|
|
||||||
expect(mention).to model_have_error_on_field(:status)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -32,12 +32,9 @@ RSpec.describe Poll do
|
||||||
|
|
||||||
describe 'validations' do
|
describe 'validations' do
|
||||||
context 'when not valid' do
|
context 'when not valid' do
|
||||||
let(:poll) { Fabricate.build(:poll, expires_at: nil) }
|
subject { Fabricate.build(:poll) }
|
||||||
|
|
||||||
it 'is invalid without an expire date' do
|
it { is_expected.to validate_presence_of(:expires_at) }
|
||||||
poll.valid?
|
|
||||||
expect(poll).to model_have_error_on_field(:expires_at)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -32,11 +32,7 @@ RSpec.describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'validations' do
|
describe 'validations' do
|
||||||
it 'is invalid without an account' do
|
it { is_expected.to belong_to(:account).required }
|
||||||
user = Fabricate.build(:user, account: nil)
|
|
||||||
user.valid?
|
|
||||||
expect(user).to model_have_error_on_field(:account)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'is invalid without a valid email' do
|
it 'is invalid without a valid email' do
|
||||||
user = Fabricate.build(:user, email: 'john@')
|
user = Fabricate.build(:user, email: 'john@')
|
||||||
|
|
|
@ -4,37 +4,10 @@ require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe WebauthnCredential do
|
RSpec.describe WebauthnCredential do
|
||||||
describe 'validations' do
|
describe 'validations' do
|
||||||
it 'is invalid without an external id' do
|
it { is_expected.to validate_presence_of(:external_id) }
|
||||||
webauthn_credential = Fabricate.build(:webauthn_credential, external_id: nil)
|
it { is_expected.to validate_presence_of(:public_key) }
|
||||||
|
it { is_expected.to validate_presence_of(:nickname) }
|
||||||
webauthn_credential.valid?
|
it { is_expected.to validate_presence_of(:sign_count) }
|
||||||
|
|
||||||
expect(webauthn_credential).to model_have_error_on_field(:external_id)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'is invalid without a public key' do
|
|
||||||
webauthn_credential = Fabricate.build(:webauthn_credential, public_key: nil)
|
|
||||||
|
|
||||||
webauthn_credential.valid?
|
|
||||||
|
|
||||||
expect(webauthn_credential).to model_have_error_on_field(:public_key)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'is invalid without a nickname' do
|
|
||||||
webauthn_credential = Fabricate.build(:webauthn_credential, nickname: nil)
|
|
||||||
|
|
||||||
webauthn_credential.valid?
|
|
||||||
|
|
||||||
expect(webauthn_credential).to model_have_error_on_field(:nickname)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'is invalid without a sign_count' do
|
|
||||||
webauthn_credential = Fabricate.build(:webauthn_credential, sign_count: nil)
|
|
||||||
|
|
||||||
webauthn_credential.valid?
|
|
||||||
|
|
||||||
expect(webauthn_credential).to model_have_error_on_field(:sign_count)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'is invalid if already exist a webauthn credential with the same external id' do
|
it 'is invalid if already exist a webauthn credential with the same external id' do
|
||||||
Fabricate(:webauthn_credential, external_id: '_Typ0ygudDnk9YUVWLQayw')
|
Fabricate(:webauthn_credential, external_id: '_Typ0ygudDnk9YUVWLQayw')
|
||||||
|
|
|
@ -6,12 +6,7 @@ RSpec.describe Webhook do
|
||||||
let(:webhook) { Fabricate(:webhook) }
|
let(:webhook) { Fabricate(:webhook) }
|
||||||
|
|
||||||
describe 'Validations' do
|
describe 'Validations' do
|
||||||
it 'requires presence of events' do
|
it { is_expected.to validate_presence_of(:events) }
|
||||||
record = described_class.new(events: nil)
|
|
||||||
record.valid?
|
|
||||||
|
|
||||||
expect(record).to model_have_error_on_field(:events)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'requires non-empty events value' do
|
it 'requires non-empty events value' do
|
||||||
record = described_class.new(events: [])
|
record = described_class.new(events: [])
|
||||||
|
|
|
@ -18,14 +18,16 @@ RSpec.describe 'The account show page' do
|
||||||
end
|
end
|
||||||
|
|
||||||
def head_link_icons
|
def head_link_icons
|
||||||
head_section.css('link[rel=icon]')
|
response
|
||||||
|
.parsed_body
|
||||||
|
.search('html head link[rel=icon]')
|
||||||
end
|
end
|
||||||
|
|
||||||
def head_meta_content(property)
|
def head_meta_content(property)
|
||||||
head_section.meta("[@property='#{property}']")[:content]
|
response
|
||||||
end
|
.parsed_body
|
||||||
|
.search("html head meta[property='#{property}']")
|
||||||
def head_section
|
.attr('content')
|
||||||
Nokogiri::Slop(response.body).html.head
|
.text
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,11 +4,6 @@ require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe 'Instance actor endpoint' do
|
RSpec.describe 'Instance actor endpoint' do
|
||||||
describe 'GET /actor' do
|
describe 'GET /actor' do
|
||||||
before do
|
|
||||||
integration_session.https! # TODO: Move to global rails_helper for all request specs?
|
|
||||||
host! Rails.configuration.x.local_domain # TODO: Move to global rails_helper for all request specs?
|
|
||||||
end
|
|
||||||
|
|
||||||
let!(:original_federation_mode) { Rails.configuration.x.limited_federation_mode }
|
let!(:original_federation_mode) { Rails.configuration.x.limited_federation_mode }
|
||||||
|
|
||||||
shared_examples 'instance actor endpoint' do
|
shared_examples 'instance actor endpoint' do
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe 'Invites' do
|
||||||
|
let(:user) { Fabricate(:user) }
|
||||||
|
|
||||||
|
before { sign_in user }
|
||||||
|
|
||||||
|
context 'when not everyone can invite' do
|
||||||
|
before { UserRole.everyone.update(permissions: UserRole.everyone.permissions & ~UserRole::FLAGS[:invite_users]) }
|
||||||
|
|
||||||
|
describe 'GET /invites' do
|
||||||
|
it 'returns http forbidden' do
|
||||||
|
get invites_path
|
||||||
|
|
||||||
|
expect(response)
|
||||||
|
.to have_http_status(403)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'POST /invites' do
|
||||||
|
it 'returns http forbidden' do
|
||||||
|
post invites_path, params: { invite: { max_users: '10', expires_in: 1800 } }
|
||||||
|
|
||||||
|
expect(response)
|
||||||
|
.to have_http_status(403)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,14 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
RSpec::Matchers.define :have_private_cache_control do
|
||||||
|
match do |page|
|
||||||
|
page.response_headers['Cache-Control'] == 'private, no-store'
|
||||||
|
end
|
||||||
|
|
||||||
|
failure_message do |page|
|
||||||
|
<<~ERROR
|
||||||
|
Expected page to have `Cache-Control` header with `private, no-store` but it has:
|
||||||
|
#{page.response_headers['Cache-Control']}
|
||||||
|
ERROR
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,86 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe 'Invites' do
|
||||||
|
include ActionView::RecordIdentifier
|
||||||
|
|
||||||
|
let(:user) { Fabricate :user }
|
||||||
|
|
||||||
|
before do
|
||||||
|
host! 'localhost:3000' # TODO: Move into before for all system specs?
|
||||||
|
sign_in user
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'Viewing invites' do
|
||||||
|
it 'Lists existing user invites' do
|
||||||
|
invite = Fabricate :invite, user: user
|
||||||
|
|
||||||
|
visit invites_path
|
||||||
|
|
||||||
|
within css_id(invite) do
|
||||||
|
expect(page)
|
||||||
|
.to have_content(invite.uses)
|
||||||
|
.and have_private_cache_control
|
||||||
|
expect(copyable_field.value)
|
||||||
|
.to eq(public_invite_url(invite_code: invite.code))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'Creating a new invite' do
|
||||||
|
it 'Saves the invite for the user' do
|
||||||
|
visit invites_path
|
||||||
|
|
||||||
|
fill_invite_form
|
||||||
|
|
||||||
|
expect { submit_form }
|
||||||
|
.to change(user.invites, :count).by(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'Deleting an existing invite' do
|
||||||
|
it 'Expires the invite' do
|
||||||
|
invite = Fabricate :invite, user: user
|
||||||
|
|
||||||
|
visit invites_path
|
||||||
|
|
||||||
|
expect { delete_invite(invite) }
|
||||||
|
.to change { invite.reload.expired? }.to(true)
|
||||||
|
|
||||||
|
within css_id(invite) do
|
||||||
|
expect(page).to have_content I18n.t('invites.expired')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def css_id(record)
|
||||||
|
"##{dom_id(record)}" # TODO: Extract to system spec helper?
|
||||||
|
end
|
||||||
|
|
||||||
|
def copyable_field
|
||||||
|
within '.input-copy' do
|
||||||
|
find(:field, type: :text, readonly: true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def submit_form
|
||||||
|
click_on I18n.t('invites.generate')
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete_invite(invite)
|
||||||
|
within css_id(invite) do
|
||||||
|
click_on I18n.t('invites.delete')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def fill_invite_form
|
||||||
|
select I18n.t('invites.max_uses', count: 100),
|
||||||
|
from: I18n.t('simple_form.labels.defaults.max_uses')
|
||||||
|
select I18n.t("invites.expires_in.#{30.minutes.to_i}"),
|
||||||
|
from: I18n.t('simple_form.labels.defaults.expires_in')
|
||||||
|
check I18n.t('simple_form.labels.defaults.autofollow')
|
||||||
|
end
|
||||||
|
end
|
|
@ -6,11 +6,14 @@ RSpec.describe 'Tags' do
|
||||||
describe 'Viewing a tag' do
|
describe 'Viewing a tag' do
|
||||||
let(:tag) { Fabricate(:tag, name: 'test') }
|
let(:tag) { Fabricate(:tag, name: 'test') }
|
||||||
|
|
||||||
|
before { sign_in Fabricate(:user) }
|
||||||
|
|
||||||
it 'visits the tag page and renders the web app' do
|
it 'visits the tag page and renders the web app' do
|
||||||
visit tag_path(tag)
|
visit tag_path(tag)
|
||||||
|
|
||||||
expect(page)
|
expect(page)
|
||||||
.to have_css('noscript', text: /Mastodon/)
|
.to have_css('noscript', text: /Mastodon/)
|
||||||
|
.and have_private_cache_control
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
110
yarn.lock
110
yarn.lock
|
@ -6727,26 +6727,26 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"cssnano-preset-default@npm:^7.0.5":
|
"cssnano-preset-default@npm:^7.0.6":
|
||||||
version: 7.0.5
|
version: 7.0.6
|
||||||
resolution: "cssnano-preset-default@npm:7.0.5"
|
resolution: "cssnano-preset-default@npm:7.0.6"
|
||||||
dependencies:
|
dependencies:
|
||||||
browserslist: "npm:^4.23.3"
|
browserslist: "npm:^4.23.3"
|
||||||
css-declaration-sorter: "npm:^7.2.0"
|
css-declaration-sorter: "npm:^7.2.0"
|
||||||
cssnano-utils: "npm:^5.0.0"
|
cssnano-utils: "npm:^5.0.0"
|
||||||
postcss-calc: "npm:^10.0.1"
|
postcss-calc: "npm:^10.0.2"
|
||||||
postcss-colormin: "npm:^7.0.2"
|
postcss-colormin: "npm:^7.0.2"
|
||||||
postcss-convert-values: "npm:^7.0.3"
|
postcss-convert-values: "npm:^7.0.4"
|
||||||
postcss-discard-comments: "npm:^7.0.2"
|
postcss-discard-comments: "npm:^7.0.3"
|
||||||
postcss-discard-duplicates: "npm:^7.0.1"
|
postcss-discard-duplicates: "npm:^7.0.1"
|
||||||
postcss-discard-empty: "npm:^7.0.0"
|
postcss-discard-empty: "npm:^7.0.0"
|
||||||
postcss-discard-overridden: "npm:^7.0.0"
|
postcss-discard-overridden: "npm:^7.0.0"
|
||||||
postcss-merge-longhand: "npm:^7.0.3"
|
postcss-merge-longhand: "npm:^7.0.4"
|
||||||
postcss-merge-rules: "npm:^7.0.3"
|
postcss-merge-rules: "npm:^7.0.4"
|
||||||
postcss-minify-font-values: "npm:^7.0.0"
|
postcss-minify-font-values: "npm:^7.0.0"
|
||||||
postcss-minify-gradients: "npm:^7.0.0"
|
postcss-minify-gradients: "npm:^7.0.0"
|
||||||
postcss-minify-params: "npm:^7.0.2"
|
postcss-minify-params: "npm:^7.0.2"
|
||||||
postcss-minify-selectors: "npm:^7.0.3"
|
postcss-minify-selectors: "npm:^7.0.4"
|
||||||
postcss-normalize-charset: "npm:^7.0.0"
|
postcss-normalize-charset: "npm:^7.0.0"
|
||||||
postcss-normalize-display-values: "npm:^7.0.0"
|
postcss-normalize-display-values: "npm:^7.0.0"
|
||||||
postcss-normalize-positions: "npm:^7.0.0"
|
postcss-normalize-positions: "npm:^7.0.0"
|
||||||
|
@ -6760,10 +6760,10 @@ __metadata:
|
||||||
postcss-reduce-initial: "npm:^7.0.2"
|
postcss-reduce-initial: "npm:^7.0.2"
|
||||||
postcss-reduce-transforms: "npm:^7.0.0"
|
postcss-reduce-transforms: "npm:^7.0.0"
|
||||||
postcss-svgo: "npm:^7.0.1"
|
postcss-svgo: "npm:^7.0.1"
|
||||||
postcss-unique-selectors: "npm:^7.0.2"
|
postcss-unique-selectors: "npm:^7.0.3"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4.31
|
postcss: ^8.4.31
|
||||||
checksum: 10c0/ffa7c6fa16c6ad98b7732fc563de74d492e6ad6d243a9f00431c0cbdbc576bcd49226d2695d881465d32dea0a2916add40ac10e7560dd7b5de9fd0fa25ee081b
|
checksum: 10c0/5c827a9f6b35475267af0512d55f569994b8334eb06565498daa2070ef52f0cdd2013f5efc1cbc0b4664370f491b0080f93c8ee56a7730d38fdf451fb65b030c
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -6777,14 +6777,14 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"cssnano@npm:^7.0.0":
|
"cssnano@npm:^7.0.0":
|
||||||
version: 7.0.5
|
version: 7.0.6
|
||||||
resolution: "cssnano@npm:7.0.5"
|
resolution: "cssnano@npm:7.0.6"
|
||||||
dependencies:
|
dependencies:
|
||||||
cssnano-preset-default: "npm:^7.0.5"
|
cssnano-preset-default: "npm:^7.0.6"
|
||||||
lilconfig: "npm:^3.1.2"
|
lilconfig: "npm:^3.1.2"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4.31
|
postcss: ^8.4.31
|
||||||
checksum: 10c0/cb43ed964787dca33efb44d8f4fea8a49c495db44d1d12940493f0dd5d63db78e01c5b140fe42b480b332733602a25f4c85186d00977eb3070b29f7422761985
|
checksum: 10c0/19ff09931a1531e7c0c0d8928da554d99213aa0bb1f3b93cc6b4987727d60a8cd5537b113a5cf4f95cc1db65bba3f2b35476bd63bb57e7469d4eab73e07d736d
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -13302,15 +13302,15 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"postcss-calc@npm:^10.0.1":
|
"postcss-calc@npm:^10.0.2":
|
||||||
version: 10.0.1
|
version: 10.0.2
|
||||||
resolution: "postcss-calc@npm:10.0.1"
|
resolution: "postcss-calc@npm:10.0.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
postcss-selector-parser: "npm:^6.1.1"
|
postcss-selector-parser: "npm:^6.1.2"
|
||||||
postcss-value-parser: "npm:^4.2.0"
|
postcss-value-parser: "npm:^4.2.0"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4.38
|
postcss: ^8.4.38
|
||||||
checksum: 10c0/5e38cc6f082f87e82067497b41684410784223ecd3701bf52242ea9f2f467f1fad6b5a561f8aa3be307d89435b4060f58aeb27c4064003586daf653cc4d91fef
|
checksum: 10c0/f57c9db7a7a2f3a0cdf45990089c051248d995bb2b9d1bd1fcd1634507851e92ea85bbc71a3594e359e9e9287ba0a820c90d6d292126a4b735cda364a86ce9cf
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -13378,15 +13378,15 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"postcss-convert-values@npm:^7.0.3":
|
"postcss-convert-values@npm:^7.0.4":
|
||||||
version: 7.0.3
|
version: 7.0.4
|
||||||
resolution: "postcss-convert-values@npm:7.0.3"
|
resolution: "postcss-convert-values@npm:7.0.4"
|
||||||
dependencies:
|
dependencies:
|
||||||
browserslist: "npm:^4.23.3"
|
browserslist: "npm:^4.23.3"
|
||||||
postcss-value-parser: "npm:^4.2.0"
|
postcss-value-parser: "npm:^4.2.0"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4.31
|
postcss: ^8.4.31
|
||||||
checksum: 10c0/dbb6278bd8d8b11e448933d823426c883bff3f6abeaa23c7530cc4668b9da6f714e073840f280273f8a14022c3a99eb461ec732f7539e062b32f5281e1be6526
|
checksum: 10c0/9839b29f7c638672115c9fef5ed7df016aa43ea9dd42a4a2ace16e6a49c75246d2c19f3e03a6409ed3bc7c2fa4de6203bf5789cef8268c76618326b68e3bc591
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -13444,14 +13444,14 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"postcss-discard-comments@npm:^7.0.2":
|
"postcss-discard-comments@npm:^7.0.3":
|
||||||
version: 7.0.2
|
version: 7.0.3
|
||||||
resolution: "postcss-discard-comments@npm:7.0.2"
|
resolution: "postcss-discard-comments@npm:7.0.3"
|
||||||
dependencies:
|
dependencies:
|
||||||
postcss-selector-parser: "npm:^6.1.1"
|
postcss-selector-parser: "npm:^6.1.2"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4.31
|
postcss: ^8.4.31
|
||||||
checksum: 10c0/c01632e643b6ec1f61ad59efe06a9e8dfc7fcedeb1551ae48fc33fa801353f6222e31954286cd97171c694f34c2b4c7f7a2213fd0f913e37c34d0353258ed234
|
checksum: 10c0/7700c8fb9a83c6ea5cc784267b9afd6e2968fda0358d583af5913baa28dfc91b0f2a4bd0b2bd62a86ebcb8dadb2547e287beae25b5a097e21c1f723367ccf112
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -13596,29 +13596,29 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"postcss-merge-longhand@npm:^7.0.3":
|
"postcss-merge-longhand@npm:^7.0.4":
|
||||||
version: 7.0.3
|
version: 7.0.4
|
||||||
resolution: "postcss-merge-longhand@npm:7.0.3"
|
resolution: "postcss-merge-longhand@npm:7.0.4"
|
||||||
dependencies:
|
dependencies:
|
||||||
postcss-value-parser: "npm:^4.2.0"
|
postcss-value-parser: "npm:^4.2.0"
|
||||||
stylehacks: "npm:^7.0.3"
|
stylehacks: "npm:^7.0.4"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4.31
|
postcss: ^8.4.31
|
||||||
checksum: 10c0/b968c3d16f3edc6075b20219a1165c089dc454a6a42951dcdfc94adb932fb96ef7bcd465c6cd21b0e5b55ac08921355ddbbbc7cdcf87a345e4bef8b3cdd2e7e9
|
checksum: 10c0/6f50f7775dd361f83daf1acb3e0001d700ed2b7b9bea02df172143adc7fa196ce9209c9e482010ce36fd704512433b62692c5ab2eef5226db71ea3e694654dc7
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"postcss-merge-rules@npm:^7.0.3":
|
"postcss-merge-rules@npm:^7.0.4":
|
||||||
version: 7.0.3
|
version: 7.0.4
|
||||||
resolution: "postcss-merge-rules@npm:7.0.3"
|
resolution: "postcss-merge-rules@npm:7.0.4"
|
||||||
dependencies:
|
dependencies:
|
||||||
browserslist: "npm:^4.23.3"
|
browserslist: "npm:^4.23.3"
|
||||||
caniuse-api: "npm:^3.0.0"
|
caniuse-api: "npm:^3.0.0"
|
||||||
cssnano-utils: "npm:^5.0.0"
|
cssnano-utils: "npm:^5.0.0"
|
||||||
postcss-selector-parser: "npm:^6.1.1"
|
postcss-selector-parser: "npm:^6.1.2"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4.31
|
postcss: ^8.4.31
|
||||||
checksum: 10c0/3cd20484ab6d15c62eded408248d5eeaba52a573935943f933865680e070a0e75b3a7447802c575bc86e1fae667cf51d9d5766537835d9b8c090337b5adf928e
|
checksum: 10c0/fffdcef4ada68e92ab8e6dc34a3b9aa2b87188cd4d08f5ba0ff2aff7e3e3c7f086830748ff64db091b5ccb9ac59ac37cfaab1268ed3efb50ab9c4f3714eb5f6d
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -13659,15 +13659,15 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"postcss-minify-selectors@npm:^7.0.3":
|
"postcss-minify-selectors@npm:^7.0.4":
|
||||||
version: 7.0.3
|
version: 7.0.4
|
||||||
resolution: "postcss-minify-selectors@npm:7.0.3"
|
resolution: "postcss-minify-selectors@npm:7.0.4"
|
||||||
dependencies:
|
dependencies:
|
||||||
cssesc: "npm:^3.0.0"
|
cssesc: "npm:^3.0.0"
|
||||||
postcss-selector-parser: "npm:^6.1.1"
|
postcss-selector-parser: "npm:^6.1.2"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4.31
|
postcss: ^8.4.31
|
||||||
checksum: 10c0/5211f63a1672f646a1bab57bd8eac0816d42adacb5e286ad5e6e342a795bb0d086bd6044a1b338311ca28f33f2c1833165ee611eaa671287379821ba3c5d68ad
|
checksum: 10c0/212b8f3d62eb2a27ed57d4e76b75b0886806ddb9e2497c0bb79308fa75dabaaaa4ed2b97734896e87603272d05231fd74aee2c256a48d77aa468b5b64cc7866a
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -14028,7 +14028,7 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.0, postcss-selector-parser@npm:^6.1.1, postcss-selector-parser@npm:^6.1.2":
|
"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.0, postcss-selector-parser@npm:^6.1.2":
|
||||||
version: 6.1.2
|
version: 6.1.2
|
||||||
resolution: "postcss-selector-parser@npm:6.1.2"
|
resolution: "postcss-selector-parser@npm:6.1.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -14050,14 +14050,14 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"postcss-unique-selectors@npm:^7.0.2":
|
"postcss-unique-selectors@npm:^7.0.3":
|
||||||
version: 7.0.2
|
version: 7.0.3
|
||||||
resolution: "postcss-unique-selectors@npm:7.0.2"
|
resolution: "postcss-unique-selectors@npm:7.0.3"
|
||||||
dependencies:
|
dependencies:
|
||||||
postcss-selector-parser: "npm:^6.1.1"
|
postcss-selector-parser: "npm:^6.1.2"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4.31
|
postcss: ^8.4.31
|
||||||
checksum: 10c0/cc54c57cd1c5a6e3e166ec63cc036d9e2df80b05e508d9ce754ca4193bf8c1bfcc16b3c6f0d81b8352a3282201d249b90bb87abacfcfb9065c9e3705ea5d110e
|
checksum: 10c0/2eb90eb0745d1e29d411ea5108f1cd9737de5b8f739cabc717074872bc4015950c9963f870b23b33b9ef45e7887eecfe5560cffee56616d4e0b8d0fac4f7cb10
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -16575,15 +16575,15 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"stylehacks@npm:^7.0.3":
|
"stylehacks@npm:^7.0.4":
|
||||||
version: 7.0.3
|
version: 7.0.4
|
||||||
resolution: "stylehacks@npm:7.0.3"
|
resolution: "stylehacks@npm:7.0.4"
|
||||||
dependencies:
|
dependencies:
|
||||||
browserslist: "npm:^4.23.3"
|
browserslist: "npm:^4.23.3"
|
||||||
postcss-selector-parser: "npm:^6.1.1"
|
postcss-selector-parser: "npm:^6.1.2"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4.31
|
postcss: ^8.4.31
|
||||||
checksum: 10c0/5030334b06ef705b5700444dab120b540b09159e935e75b60f25bd56db1d85f0d11755f0b0f64ce3f12c5a72ff1b6f57fea49c26d18eb0de2334d6a143b94f8d
|
checksum: 10c0/b4d0b280ba274503ecc04111cc11c713e0d65db079fbcd8b42d6350be1cca20e28611eddee93b419aa208176a0d3a5fff83d83ef958d1876713809b6a2787c0c
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue