From 68ec1d180ae38abca56f2e848db58d23224813de Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Wed, 4 Oct 2023 08:23:50 +0100 Subject: [PATCH 01/29] Fix language sorting in settings (#27158) --- app/helpers/languages_helper.rb | 18 +++++++++++++ app/helpers/settings_helper.rb | 6 ++++- .../preferences/appearance/show.html.haml | 2 +- spec/helpers/languages_helper_spec.rb | 26 +++++++++++++++++++ 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index c42c4c23efc44c..ddb10aa25f5196 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -230,6 +230,24 @@ module LanguagesHelper 'sr-Latn': 'Srpski (latinica)', }.freeze + # Helper for self.sorted_locale_keys + private_class_method def self.locale_name_for_sorting(locale) + if locale.blank? || locale == 'und' + '000' + elsif (supported_locale = SUPPORTED_LOCALES[locale.to_sym]) + ASCIIFolding.new.fold(supported_locale[1]).downcase + elsif (regional_locale = REGIONAL_LOCALE_NAMES[locale.to_sym]) + ASCIIFolding.new.fold(regional_locale).downcase + else + locale + end + end + + # Sort locales by native name for dropdown menus + def self.sorted_locale_keys(locale_keys) + locale_keys.sort_by { |key, _| locale_name_for_sorting(key) } + end + def native_locale_name(locale) if locale.blank? || locale == 'und' I18n.t('generic.none') diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 889ca7f402def0..fce36bf43e99d0 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -2,7 +2,11 @@ module SettingsHelper def filterable_languages - LanguagesHelper::SUPPORTED_LOCALES.keys + LanguagesHelper.sorted_locale_keys(LanguagesHelper::SUPPORTED_LOCALES.keys) + end + + def ui_languages + LanguagesHelper.sorted_locale_keys(I18n.available_locales) end def session_device_icon(session) diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml index ea33487c3cf909..11fa2bfc435d78 100644 --- a/app/views/settings/preferences/appearance/show.html.haml +++ b/app/views/settings/preferences/appearance/show.html.haml @@ -7,7 +7,7 @@ = simple_form_for current_user, url: settings_preferences_appearance_path, html: { method: :put, id: 'edit_user' } do |f| .fields-row .fields-group.fields-row__column.fields-row__column-6 - = f.input :locale, collection: I18n.available_locales, wrapper: :with_label, include_blank: false, label_method: ->(locale) { native_locale_name(locale) }, selected: I18n.locale, hint: false + = f.input :locale, collection: ui_languages, wrapper: :with_label, include_blank: false, label_method: ->(locale) { native_locale_name(locale) }, selected: I18n.locale, hint: false .fields-group.fields-row__column.fields-row__column-6 = f.input :time_zone, wrapper: :with_label, collection: ActiveSupport::TimeZone.all.map { |tz| ["(GMT#{tz.formatted_offset}) #{tz.name}", tz.tzinfo.name] }, hint: false diff --git a/spec/helpers/languages_helper_spec.rb b/spec/helpers/languages_helper_spec.rb index 98c8064a3355d1..99461b293ba6f9 100644 --- a/spec/helpers/languages_helper_spec.rb +++ b/spec/helpers/languages_helper_spec.rb @@ -60,4 +60,30 @@ end end end + + describe 'sorted_locales' do + context 'when sorting with native name' do + it 'returns Suomi after Gàidhlig' do + expect(described_class.sorted_locale_keys(%w(fi gd))).to eq(%w(gd fi)) + end + end + + context 'when sorting with diacritics' do + it 'returns Íslensk before Suomi' do + expect(described_class.sorted_locale_keys(%w(fi is))).to eq(%w(is fi)) + end + end + + context 'when sorting with non-Latin' do + it 'returns Suomi before Amharic' do + expect(described_class.sorted_locale_keys(%w(am fi))).to eq(%w(fi am)) + end + end + + context 'when sorting with local variants' do + it 'returns variant in-line' do + expect(described_class.sorted_locale_keys(%w(en eo en-GB))).to eq(%w(en en-GB eo)) + end + end + end end From 72cec47c13d0f3050e223fc31bfbef73f75ff893 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 4 Oct 2023 04:17:36 -0400 Subject: [PATCH 02/29] Silence deprecation warning in CacheBuster spec (#27264) --- spec/lib/cache_buster_spec.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spec/lib/cache_buster_spec.rb b/spec/lib/cache_buster_spec.rb index 84085608e8544e..3dc62a8154e25d 100644 --- a/spec/lib/cache_buster_spec.rb +++ b/spec/lib/cache_buster_spec.rb @@ -28,6 +28,14 @@ end context 'when using default options' do + around do |example| + # Disables the CacheBuster.new deprecation warning about default arguments. + # Remove this `silence` block when default arg support is removed from CacheBuster + ActiveSupport::Deprecation.silence do + example.run + end + end + include_examples 'makes_request' end From 8e4251f9e75992c13cbb3acd2d47a895278b3fbf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 10:53:04 +0200 Subject: [PATCH 03/29] New Crowdin Translations (automated) (#27270) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/si.json | 290 ++++++------- config/locales/devise.si.yml | 18 +- config/locales/doorkeeper.si.yml | 72 ++-- config/locales/eu.yml | 3 + config/locales/si.yml | 524 +++++++++++++----------- config/locales/simple_form.si.yml | 88 ++-- 6 files changed, 511 insertions(+), 484 deletions(-) diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 2c6979b018ee38..4d116bfd31cc64 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -1,79 +1,77 @@ { + "about.blocks": "මැදිහත්කරණ සේවාදායක", + "about.contact": "සබඳතාව:", + "about.domain_blocks.suspended.title": "අත්හිටුවා ඇත", + "about.rules": "සේවාදායකයේ නීති", "account.account_note_header": "සටහන", "account.add_or_remove_from_list": "ලැයිස්තු වලින් එකතු හෝ ඉවත් කරන්න", - "account.badges.bot": "ස්වයං ක්‍රමලේඛය", "account.badges.group": "සමූහය", "account.block": "@{name} අවහිර කරන්න", "account.block_domain": "{domain} වසම අවහිර කරන්න", + "account.block_short": "අවහිර", "account.blocked": "අවහිර කර ඇත", "account.browse_more_on_origin_server": "මුල් පැතිකඩෙහි තවත් පිරික්සන්න", - "account.cancel_follow_request": "Withdraw follow request", "account.disable_notifications": "@{name} පළ කරන විට මට දැනුම් නොදෙන්න", "account.domain_blocked": "වසම අවහිර කර ඇත", "account.edit_profile": "පැතිකඩ සංස්කරණය", "account.enable_notifications": "@{name} පළ කරන විට මට දැනුම් දෙන්න", "account.endorse": "පැතිකඩෙහි විශේෂාංගය", + "account.featured_tags.last_status_never": "ලිපි නැත", "account.follow": "අනුගමනය", "account.followers": "අනුගාමිකයින්", "account.followers.empty": "කිසිවෙක් අනුගමනය කර නැත.", - "account.followers_counter": "{count, plural, one {{counter} අනුගාමිකයෙක්} other {{counter} අනුගාමිකයින්}}", "account.following": "අනුගමනය", "account.following_counter": "{count, plural, one {අනුගාමිකයින් {counter}} other {අනුගාමිකයින් {counter}}}", "account.follows.empty": "තවමත් කිසිවෙක් අනුගමනය නොකරයි.", "account.follows_you": "ඔබව අනුගමනය කරයි", - "account.hide_reblogs": "@{name}සිට බූස්ට් සඟවන්න", + "account.go_to_profile": "පැතිකඩට යන්න", "account.link_verified_on": "මෙම සබැඳියේ අයිතිය {date} දී පරීක්‍ෂා කෙරිණි", - "account.locked_info": "මෙම ගිණුමේ රහස්‍යතා තත්ත්වය අගුලු දමා ඇත. හිමිකරු ඔවුන් අනුගමනය කළ හැක්කේ කාටදැයි හස්තීයව සමාලෝචනය කරයි.", "account.media": "මාධ්‍යය", - "account.mention": "@{name} සැඳහුම", + "account.mention": "@{name} සඳහන් කරන්ක", "account.mute": "@{name} නිහඬ කරන්න", + "account.mute_short": "නිහඬ", "account.muted": "නිහඬ කළා", "account.posts": "ලිපි", - "account.posts_with_replies": "ටූට්ස් සහ පිළිතුරු", + "account.posts_with_replies": "ලිපි සහ පිළිතුරු", "account.report": "@{name} වාර්තා කරන්න", - "account.requested": "අනුමැතිය බලාපොරොත්තුවෙන්", "account.share": "@{name} ගේ පැතිකඩ බෙදාගන්න", - "account.show_reblogs": "@{name}සිට බූස්ට් පෙන්වන්න", - "account.statuses_counter": "{count, plural, one {{counter} ටූට්} other {{counter} ටූට්ස්}}", "account.unblock": "@{name} අනවහිර කරන්න", "account.unblock_domain": "{domain} වසම අනවහිර කරන්න", "account.unblock_short": "අනවහිර", "account.unendorse": "පැතිකඩෙහි විශේෂාංග නොකරන්න", - "account.unfollow": "අනුගමනය නොකරන්න", - "account.unmute": "@{name}නිහඬ නොකරන්න", "account.unmute_short": "නොනිහඬ", "account_note.placeholder": "සටහන යෙදීමට ඔබන්න", - "admin.dashboard.daily_retention": "ලියාපදිංචි වීමෙන් පසු දිනකට පරිශීලක රඳවා ගැනීමේ අනුපාතය", - "admin.dashboard.monthly_retention": "ලියාපදිංචි වීමෙන් පසු මාසය අනුව පරිශීලක රඳවා ගැනීමේ අනුපාතය", - "admin.dashboard.retention.average": "සාමාන්යය", - "admin.dashboard.retention.cohort": "ලියාපදිංචි වීමේ මාසය", + "admin.dashboard.retention.cohort": "ලියාපදිංචි මාසය", "admin.dashboard.retention.cohort_size": "නව පරිශ්‍රීලකයින්", "alert.rate_limited.message": "{retry_time, time, medium} කට පසුව උත්සාහ කරන්න.", - "alert.rate_limited.title": "මිල සීමා සහිතයි", - "alert.unexpected.message": "අනපේක්ෂිත දෝෂයක් ඇතිවුනා.", + "alert.rate_limited.title": "අනුපාතනය වී ඇත", + "alert.unexpected.message": "අනපේක්‍ෂිත දෝෂයක් සිදු විය.", "alert.unexpected.title": "අපොයි!", "announcement.announcement": "නිවේදනය", - "attachments_list.unprocessed": "(සැකසුම් නොකළ)", "audio.hide": "හඬපටය සඟවන්න", "autosuggest_hashtag.per_week": "සතියකට {count}", - "boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට ඔබට {combo} එබිය හැක", + "boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට {combo} එබීමට හැකිය", "bundle_column_error.retry": "නැවත උත්සාහ කරන්න", "bundle_modal_error.close": "වසන්න", - "bundle_modal_error.message": "මෙම සංරචකය පූරණය කිරීමේදී යම් දෙයක් වැරදී ඇත.", + "bundle_modal_error.message": "මෙම සංරචකය පූරණයේ දී යම් දෙයක් වැරදී ඇත.", "bundle_modal_error.retry": "නැවත උත්සාහ කරන්න", + "closed_registrations_modal.find_another_server": "වෙනත් සේවාදායක", "column.about": "පිලිබඳව", "column.blocks": "අවහිර කළ අය", - "column.bookmarks": "පොත් යොමු", - "column.community": "දේශීය කාලරේඛාව", + "column.bookmarks": "පොත්යොමු", + "column.community": "ස්ථානීය කාලරේඛාව", + "column.direct": "පෞද්ගලික සැඳහුම්", "column.directory": "පැතිකඩ පිරික්සන්න", "column.domain_blocks": "අවහිර කළ වසම්", + "column.favourites": "ප්‍රියතමයන්", + "column.firehose": "සජීව සංග්‍රහ", "column.follow_requests": "අනුගමන ඉල්ලීම්", "column.home": "මුල් පිටුව", - "column.lists": "ලේඛන", + "column.lists": "ලැයිස්තු", "column.mutes": "නිහඬ කළ අය", "column.notifications": "දැනුම්දීම්", "column.pins": "ඇමිණූ ලිපි", - "column.public": "ෆෙඩරේටඩ් කාලරේඛාව", + "column.public": "ඒකාබද්ධ කාලරේඛාව", "column_back_button.label": "ආපසු", "column_header.hide_settings": "සැකසුම් සඟවන්න", "column_header.moveLeft_settings": "තීරුව වමට ගෙනයන්න", @@ -87,70 +85,60 @@ "community.column_settings.remote_only": "දුරස්ථව පමණයි", "compose.language.change": "භාෂාව සංශෝධනය", "compose.language.search": "භාෂා සොයන්න...", + "compose.published.body": "ලිපිය පළ විය.", + "compose.published.open": "අරින්න", + "compose.saved.body": "ලිපිය සුරැකිණි.", "compose_form.direct_message_warning_learn_more": "තව දැනගන්න", - "compose_form.encryption_warning": "Mastodon හි පළ කිරීම් අන්තයේ සිට අවසානය දක්වා සංකේතනය කර නොමැත. Mastodon හරහා කිසිදු සංවේදී තොරතුරක් බෙදා නොගන්න.", - "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", - "compose_form.lock_disclaimer": "ඔබගේ ගිණුම {locked}නොවේ. ඔබගේ අනුගාමිකයින්ට පමණක් පළ කිරීම් බැලීමට ඕනෑම කෙනෙකුට ඔබව අනුගමනය කළ හැක.", + "compose_form.encryption_warning": "මාස්ටඩන් වෙත පළ කරන දෑ අන්ත සංකේතනයෙන් ආරක්‍ෂා නොවේ. මාස්ටඩන් හරහා කිසිදු සංවේදී තොරතුරක් බෙදා නොගන්න.", "compose_form.lock_disclaimer.lock": "අගුළු දමා ඇත", "compose_form.placeholder": "ඔබගේ සිතුවිලි මොනවාද?", "compose_form.poll.add_option": "තේරීමක් යොදන්න", "compose_form.poll.duration": "මත විමසීමේ කාලය", "compose_form.poll.option_placeholder": "තේරීම {number}", "compose_form.poll.remove_option": "මෙම ඉවත් කරන්න", - "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයක් ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", - "compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", + "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයකට මත විමසුම වෙනස් කරන්න", + "compose_form.poll.switch_to_single": "තනි තේරීමකට මත විමසුම වෙනස් කරන්න", "compose_form.publish": "ප්‍රකාශනය", "compose_form.publish_form": "නව ලිපිය", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "වෙනස්කම් සුරකින්න", - "compose_form.sensitive.hide": "{count, plural, one {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න} other {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න}}", - "compose_form.sensitive.marked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත}}", - "compose_form.sensitive.unmarked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත}}", - "compose_form.spoiler.marked": "අනතුරු ඇඟවීම පිටුපස පෙළ සඟවා ඇත", - "compose_form.spoiler.unmarked": "ප්‍රයෝජනය සඟවා නැත", "compose_form.spoiler_placeholder": "අවවාදය මෙහි ලියන්න", "confirmation_modal.cancel": "අවලංගු", "confirmations.block.block_and_report": "අවහිර කර වාර්තා කරන්න", "confirmations.block.confirm": "අවහිර", "confirmations.block.message": "ඔබට {name} අවහිර කිරීමට වුවමනා ද?", "confirmations.delete.confirm": "මකන්න", - "confirmations.delete.message": "ඔබට මෙම තත්ත්වය මැකීමට අවශ්‍ය බව විශ්වාසද?", + "confirmations.delete.message": "ඔබට මෙම ලිපිය මැකීමට වුවමනා ද?", "confirmations.delete_list.confirm": "මකන්න", - "confirmations.delete_list.message": "ඔබට මෙම ලැයිස්තුව ස්ථිරවම මැකීමට අවශ්‍ය බව විශ්වාසද?", + "confirmations.delete_list.message": "ඔබට මෙම ලැයිස්තුව සදහටම මැකීමට වුවමනා ද?", "confirmations.discard_edit_media.confirm": "ඉවත ලන්න", "confirmations.discard_edit_media.message": "ඔබට මාධ්‍ය විස්තරයට හෝ පෙරදසුනට නොසුරකින ලද වෙනස්කම් තිබේ, කෙසේ වෙතත් ඒවා ඉවත දමන්නද?", "confirmations.domain_block.confirm": "සම්පූර්ණ වසම අවහිර කරන්න", - "confirmations.domain_block.message": "ඔබට සම්පූර්ණ {domain}අවහිර කිරීමට අවශ්‍ය බව ඔබට සැබවින්ම විශ්වාසද? බොහෝ අවස්ථාවලදී ඉලක්කගත බ්ලොක් හෝ නිශ්ශබ්ද කිරීම් කිහිපයක් ප්රමාණවත් වන අතර වඩාත් යෝග්ය වේ. ඔබ කිසිදු පොදු කාලරාමුවක හෝ ඔබගේ දැනුම්දීම් වල එම වසමේ අන්තර්ගතය නොදකිනු ඇත. එම වසමෙන් ඔබගේ අනුගාමිකයින් ඉවත් කරනු ලැබේ.", + "confirmations.edit.confirm": "සංස්කරණය", "confirmations.logout.confirm": "නික්මෙන්න", "confirmations.logout.message": "ඔබට නික්මෙන්න අවශ්‍ය බව විශ්වාසද?", "confirmations.mute.confirm": "නිශ්ශබ්ද", - "confirmations.mute.explanation": "මෙය ඔවුන්ගෙන් පළ කිරීම් සහ ඒවා සඳහන් කරන පළ කිරීම් සඟවයි, නමුත් එය ඔවුන්ට ඔබේ පළ කිරීම් බැලීමට සහ ඔබව අනුගමනය කිරීමට තවමත් ඉඩ ලබා දේ.", - "confirmations.mute.message": "ඔබට {name} නිශ්ශබ්ද කිරීමට අවශ්‍ය බව විශ්වාසද?", - "confirmations.redraft.confirm": "මකන්න සහ නැවත කෙටුම්පත් කරන්න", + "confirmations.mute.message": "{name} නිහඬ කිරීමට වුවමනා ද?", "confirmations.reply.confirm": "පිළිතුර", - "confirmations.reply.message": "දැන් පිළිතුරු දීම ඔබ දැනට රචනා කරන පණිවිඩය උඩින් ලියයි. ඔබට ඉදිරියට යාමට අවශ්‍ය බව විශ්වාසද?", - "confirmations.unfollow.confirm": "අනුගමනය නොකරන්න", - "confirmations.unfollow.message": "ඔබට {name}අනුගමනය නොකිරීමට අවශ්‍ය බව විශ්වාසද?", "conversation.delete": "සංවාදය මකන්න", "conversation.mark_as_read": "කියවූ බව යොදන්න", "conversation.open": "සංවාදය බලන්න", "conversation.with": "{names} සමඟ", "copypaste.copied": "පිටපත් විය", - "directory.federated": "දන්නා fediverse වලින්", + "copypaste.copy_to_clipboard": "පසුරුපුවරුවට පිටපතක්", + "directory.federated": "දන්නා ෆෙඩිවර්ස් වෙතින්", "directory.local": "{domain} වෙතින් පමණි", "directory.new_arrivals": "නව පැමිණීම්", "directory.recently_active": "මෑත දී සක්‍රියයි", - "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", - "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", + "disabled_account_banner.account_settings": "ගිණුමේ සැකසුම්", "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම තත්ත්වය ඔබේ වෙබ් අඩවියට ඇතුළත් කරන්න.", - "embed.preview": "එය පෙනෙන්නේ කෙසේද යන්න මෙන්න:", + "embed.preview": "මෙන්න එය පෙනෙන අන්දම:", "emoji_button.activity": "ක්‍රියාකාරකම", "emoji_button.clear": "මකන්න", "emoji_button.custom": "අභිරුචි", - "emoji_button.flags": "කොඩි", "emoji_button.food": "ආහාර සහ පාන", "emoji_button.label": "ඉමොජි යොදන්න", - "emoji_button.nature": "ස්වභාවික", + "emoji_button.nature": "සොබාදහම", "emoji_button.not_found": "ගැළපෙන ඉමෝජි හමු නොවිණි", "emoji_button.objects": "වස්තූන්", "emoji_button.people": "මිනිසුන්", @@ -164,154 +152,145 @@ "empty_column.account_unavailable": "පැතිකඩ නොතිබේ", "empty_column.blocks": "කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", "empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.", - "empty_column.community": "දේශීය කාලරේඛාව හිස් ය. පන්දුව පෙරළීමට ප්‍රසිද්ධියේ යමක් ලියන්න!", "empty_column.domain_blocks": "අවහිර කරන ලද වසම් නැත.", "empty_column.explore_statuses": "දැන් කිසිවක් නැඹුරු නොවේ. පසුව නැවත පරීක්ෂා කරන්න!", - "empty_column.follow_requests": "ඔබට තවමත් අනුගමනය කිරීමේ ඉල්ලීම් කිසිවක් නොමැත. ඔබට එකක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", - "empty_column.hashtag": "මෙම හැෂ් ටැග් එකේ තවම කිසිවක් නොමැත.", - "empty_column.home": "ඔබගේ නිවසේ කාලරේඛාව හිස්ය! එය පිරවීම සඳහා තවත් පුද්ගලයින් අනුගමනය කරන්න. {suggestions}", - "empty_column.list": "මෙම ලැයිස්තුවේ තවමත් කිසිවක් නොමැත. මෙම ලැයිස්තුවේ සාමාජිකයන් නව තත්ව පළ කරන විට, ඔවුන් මෙහි දිස් වනු ඇත.", + "empty_column.follow_requests": "ඔබට තවමත් අනුගමන ඉල්ලීම් ලැබී නැත. ඉල්ලීමක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", + "empty_column.home": "ඔබගේ මුල් පිටුව හිස් ය! මෙය පිරවීමට බොහෝ පුද්ගලයින් අනුගමනය කරන්න.", "empty_column.lists": "ඔබට තවමත් ලැයිස්තු කිසිවක් නැත. ඔබ එකක් සාදන විට, එය මෙහි පෙන්වනු ඇත.", "empty_column.mutes": "ඔබ තවමත් කිසිදු පරිශීලකයෙකු නිහඬ කර නැත.", - "empty_column.notifications": "ඔබට තවම දැනුම්දීම් කිසිවක් නැත. වෙනත් පුද්ගලයින් ඔබ සමඟ අන්තර් ක්‍රියා කරන විට, ඔබ එය මෙහි දකිනු ඇත.", - "empty_column.public": "මෙහි කිසිවක් නැත! යමක් ප්‍රසිද්ධියේ ලියන්න, නැතහොත් එය පිරවීම සඳහා වෙනත් සේවාදායකයන්ගෙන් පරිශීලකයන් හස්තීයව අනුගමනය කරන්න", + "empty_column.notifications": "ඔබට දැනුම්දීම් ලැබී නැත. අන් අය සහ ඔබ අතර අන්‍යෝන්‍ය බලපවත්වන දෑ මෙහි දිස්වනු ඇත.", "error.unexpected_crash.explanation": "අපගේ කේතයේ දෝෂයක් හෝ බ්‍රවුසර ගැළපුම් ගැටලුවක් හේතුවෙන්, මෙම පිටුව නිවැරදිව ප්‍රදර්ශනය කළ නොහැක.", "error.unexpected_crash.explanation_addons": "මෙම පිටුව නිවැරදිව ප්‍රදර්ශනය කළ නොහැක. මෙම දෝෂය බ්‍රවුසර ඇඩෝනයක් හෝ ස්වයංක්‍රීය පරිවර්තන මෙවලම් නිසා ඇති විය හැක.", - "error.unexpected_crash.next_steps": "පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.", - "error.unexpected_crash.next_steps_addons": "ඒවා අක්‍රිය කර පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.", - "errors.unexpected_crash.copy_stacktrace": "ස්ටැක්ට්රේස් පසුරු පුවරුවට පිටපත් කරන්න", + "error.unexpected_crash.next_steps": "පිටුව නැවුම් කර බලන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.", + "error.unexpected_crash.next_steps_addons": "ඒවා අබල කර පිටුව නැවුම් කරන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.", "errors.unexpected_crash.report_issue": "ගැටළුව වාර්තාව", "explore.search_results": "සෙවුම් ප්‍රතිඵල", - "explore.title": "ගවේශණය", + "explore.suggested_follows": "පුද්ගලයින්", + "explore.title": "ගවේශනය", + "explore.trending_links": "පුවත්", + "explore.trending_statuses": "ලිපි", "filter_modal.added.expired_title": "පෙරහන ඉකුත්ය!", "filter_modal.added.review_and_configure_title": "පෙරහන් සැකසුම්", "filter_modal.added.settings_link": "සැකසුම් පිටුව", + "filter_modal.added.title": "පෙරහන එක් කළා!", "filter_modal.select_filter.expired": "ඉකුත්ය", "filter_modal.select_filter.prompt_new": "නව ප්‍රවර්ගය: {name}", "filter_modal.select_filter.search": "සොයන්න හෝ සාදන්න", - "follow_request.authorize": "අවසරලත්", + "filter_modal.select_filter.title": "මෙම ලිපිය පෙරන්න", + "filter_modal.title.status": "ලිපියක් පෙරන්න", + "firehose.local": "මෙම සේවාදායකය", + "firehose.remote": "වෙනත් සේවාදායක", "follow_request.reject": "ප්‍රතික්‍ෂේප", - "follow_requests.unlocked_explanation": "ඔබගේ ගිණුම අගුලු දමා නොතිබුණද, {domain} කාර්ය මණ්ඩලය සිතුවේ ඔබට මෙම ගිණුම් වලින් ලැබෙන ඉල්ලීම් හස්තීයව සමාලෝචනය කිරීමට අවශ්‍ය විය හැකි බවයි.", + "footer.about": "පිළිබඳව", + "footer.directory": "පැතිකඩ නාමාවලිය", + "footer.get_app": "යෙදුම ගන්න", + "footer.invite": "ආරාධනා කරන්න", + "footer.keyboard_shortcuts": "යතුරුපුවරුවේ කෙටිමං", + "footer.privacy_policy": "රහස්‍යතා ප්‍රතිපත්තිය", + "footer.source_code": "මූලාශ්‍ර කේතය බලන්න", + "footer.status": "තත්‍වය", "generic.saved": "සුරැකිණි", "getting_started.heading": "පටන් ගන්න", "hashtag.column_header.tag_mode.all": "සහ {additional}", "hashtag.column_header.tag_mode.any": "හෝ {additional}", - "hashtag.column_header.tag_mode.none": "{additional}නොමැතිව", "hashtag.column_settings.select.no_options_message": "යෝජනා හමු නොවිණි", - "hashtag.column_settings.select.placeholder": "හැෂ් ටැග්…ඇතුලත් කරන්න", "hashtag.column_settings.tag_mode.all": "මේ සියල්ලම", - "hashtag.column_settings.tag_mode.any": "ඇතුළත් එකක්", "hashtag.column_settings.tag_mode.none": "මේ කිසිවක් නැත", "hashtag.column_settings.tag_toggle": "මෙම තීරුවේ අමතර ටැග් ඇතුළත් කරන්න", + "home.actions.go_to_explore": "නැගී එන දෑ බලන්න", + "home.actions.go_to_suggestions": "පුද්ගලයින් සොයන්න", "home.column_settings.basic": "මූලික", - "home.column_settings.show_reblogs": "බූස්ට් පෙන්වන්න", "home.column_settings.show_replies": "පිළිතුරු පෙන්වන්න", + "home.explore_prompt.title": "මෙය ඔබගේ මාස්ටඩන් මුල් පිටුවයි.", "home.hide_announcements": "නිවේදන සඟවන්න", + "home.pending_critical_update.link": "යාවත්කාල බලන්න", "home.show_announcements": "නිවේදන පෙන්වන්න", - "intervals.full.days": "{number, plural, one {# දින} other {# දින}}", - "intervals.full.hours": "{number, plural, one {# පැය} other {# පැය}}", - "intervals.full.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}}", + "interaction_modal.on_this_server": "මෙම සේවාදායකයෙහි", + "intervals.full.days": "{number, plural, one {දවස් #} other {දවස් #}}", + "intervals.full.hours": "{number, plural, one {පැය #} other {පැය #}}", + "intervals.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}}", "keyboard_shortcuts.back": "ආපසු යාත්‍රණය", - "keyboard_shortcuts.blocked": "අවහිර කළ පරිශීලක ලැයිස්තුව විවෘත කිරීමට", - "keyboard_shortcuts.boost": "වැඩි කිරීමට", - "keyboard_shortcuts.column": "එක් තීරුවක තත්ත්වය නාභිගත කිරීමට", - "keyboard_shortcuts.compose": "රචනා පාඨ ප්‍රදේශය නාභිගත කිරීමට", "keyboard_shortcuts.description": "සවිස්තරය", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "ලැයිස්තුවේ පහළට ගමන් කිරීමට", + "keyboard_shortcuts.down": "ලැයිස්තුවේ පහළට ගෙනයන්න", "keyboard_shortcuts.enter": "ලිපිය අරින්න", + "keyboard_shortcuts.favourites": "ප්‍රියතමයන් ලැයිස්තුව අරින්න", "keyboard_shortcuts.federated": "ෆෙඩරේටඩ් කාලරාමුව විවෘත කිරීමට", "keyboard_shortcuts.heading": "යතුරුපුවරු කෙටිමං", - "keyboard_shortcuts.home": "නිවසේ කාලරේඛාව විවෘත කිරීමට", "keyboard_shortcuts.hotkey": "උණු යතුර", - "keyboard_shortcuts.legend": "මෙම පුරාවෘත්තය ප්රදර්ශනය කිරීමට", "keyboard_shortcuts.local": "දේශීය කාලරේඛාව විවෘත කිරීමට", "keyboard_shortcuts.mention": "කතුවරයා සඳහන් කිරීමට", - "keyboard_shortcuts.muted": "නිශ්ශබ්ද පරිශීලක ලැයිස්තුව විවෘත කිරීමට", + "keyboard_shortcuts.muted": "නිහඬ කළ අය පෙන්වන්න", "keyboard_shortcuts.my_profile": "ඔබගේ පැතිකඩ අරින්න", "keyboard_shortcuts.notifications": "දැනුම්දීම් තීරුව විවෘත කිරීමට", "keyboard_shortcuts.open_media": "මාධ්‍ය අරින්න", - "keyboard_shortcuts.pinned": "ඇමිණූ ලිපි ලේඛනය අරින්න", + "keyboard_shortcuts.pinned": "ඇමිණූ ලිපි ලැයිස්තුව අරින්න", "keyboard_shortcuts.profile": "කතෘගේ පැතිකඩ අරින්න", "keyboard_shortcuts.reply": "පිළිතුරු දීමට", - "keyboard_shortcuts.requests": "පහත ඉල්ලීම් ලැයිස්තුව විවෘත කිරීමට", - "keyboard_shortcuts.search": "සෙවුම් අවධානය යොමු කිරීමට", - "keyboard_shortcuts.spoilers": "CW ක්ෂේත්‍රය පෙන්වීමට/සැඟවීමට", + "keyboard_shortcuts.spoilers": "CW ක්‍ෂේත්‍රය පෙන්වන්න/සඟවන්න", "keyboard_shortcuts.start": "\"පටන් ගන්න\" තීරුව අරින්න", - "keyboard_shortcuts.toggle_hidden": "CW පිටුපස පෙළ පෙන්වීමට/සැඟවීමට", "keyboard_shortcuts.toggle_sensitivity": "මාධ්‍ය පෙන්වන්න/සඟවන්න", "keyboard_shortcuts.toot": "නව ලිපියක් අරඹන්න", - "keyboard_shortcuts.unfocus": "අවධානය යොමු නොකිරීමට textarea/search රචනා කරන්න", - "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට යාමට", + "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට ගෙනයන්න", "lightbox.close": "වසන්න", - "lightbox.compress": "රූප බැලීමේ කොටුව සම්පීඩනය කරන්න", - "lightbox.expand": "රූප දර්ශන පෙට්ටිය දිග හරින්න", "lightbox.next": "ඊළඟ", "lightbox.previous": "පෙර", "limited_account_hint.action": "කෙසේ හෝ පැතිකඩ පෙන්වන්න", - "lists.account.add": "ලේඛනයට දමන්න", - "lists.account.remove": "ලේඛනයෙන් ඉවතලන්න", - "lists.delete": "ලේඛනය මකන්න", - "lists.edit": "ලේඛනය සංස්කරණය", + "lists.account.add": "ලැයිස්තුවට දමන්න", + "lists.account.remove": "ලැයිස්තුවෙන් ඉවතලන්න", + "lists.delete": "ලැයිස්තුව මකන්න", + "lists.edit": "ලැයිස්තුව සංස්කරණය", "lists.edit.submit": "සිරැසිය සංශෝධනය", - "lists.new.create": "ලැයිස්තුව එකතු කරන්න", - "lists.new.title_placeholder": "නව ලැයිස්තු මාතෘකාව", - "lists.replies_policy.followed": "අනුගමනය කරන ඕනෑම පරිශීලකයෙක්", - "lists.replies_policy.list": "ලැයිස්තුවේ සාමාජිකයන්", + "lists.new.title_placeholder": "නව ලැයිස්තුවේ සිරැසිය", + "lists.replies_policy.list": "ලැයිස්තුවේ සාමාජිකයින්", "lists.replies_policy.none": "කිසිවෙක් නැත", "lists.replies_policy.title": "පිළිතුරු පෙන්වන්න:", - "lists.search": "ඔබ අනුගමනය කරන පුද්ගලයින් අතර සොයන්න", - "lists.subheading": "ඔබගේ ලේඛන", - "load_pending": "{count, plural, one {# නව අයිතමයක්} other {නව අයිතම #ක්}}", + "lists.subheading": "ඔබගේ ලැයිස්තු", "loading_indicator.label": "පූරණය වෙමින්...", - "media_gallery.toggle_visible": "{number, plural, one {රූපය සඟවන්න} other {පින්තූර සඟවන්න}}", "mute_modal.duration": "පරාසය", - "mute_modal.hide_notifications": "මෙම පරිශීලකයාගෙන් දැනුම්දීම් සඟවන්නද?", - "mute_modal.indefinite": "අවිනිශ්චිත", + "mute_modal.hide_notifications": "මෙම පුද්ගලයාගේ දැනුම්දීම් සඟවන්නද?", + "navigation_bar.about": "පිළිබඳව", "navigation_bar.blocks": "අවහිර කළ අය", "navigation_bar.bookmarks": "පොත්යොමු", - "navigation_bar.community_timeline": "දේශීය කාලරේඛාව", - "navigation_bar.compose": "නව ටූට් සාදන්න", - "navigation_bar.discover": "සොයා ගන්න", + "navigation_bar.community_timeline": "ස්ථානීය කාලරේඛාව", + "navigation_bar.compose": "නව ලිපියක් ලියන්න", + "navigation_bar.direct": "පෞද්ගලික සැඳහුම්", "navigation_bar.domain_blocks": "අවහිර කළ වසම්", "navigation_bar.edit_profile": "පැතිකඩ සංස්කරණය", - "navigation_bar.explore": "ගවේෂණය කරන්න", + "navigation_bar.explore": "ගවේශනය", + "navigation_bar.favourites": "ප්‍රියතමයන්", "navigation_bar.filters": "නිහඬ කළ වචන", "navigation_bar.follow_requests": "අනුගමන ඉල්ලීම්", "navigation_bar.follows_and_followers": "අනුගමනය හා අනුගාමිකයින්", - "navigation_bar.lists": "ලේඛන", + "navigation_bar.lists": "ලැයිස්තු", "navigation_bar.logout": "නික්මෙන්න", "navigation_bar.mutes": "නිහඬ කළ අය", "navigation_bar.personal": "පුද්ගලික", "navigation_bar.pins": "ඇමිණූ ලිපි", "navigation_bar.preferences": "අභිප්‍රේත", - "navigation_bar.public_timeline": "ෆෙඩරේටඩ් කාලරේඛාව", + "navigation_bar.public_timeline": "ඒකාබද්ධ කාලරේඛාව", + "navigation_bar.search": "සොයන්න", "navigation_bar.security": "ආරක්ෂාව", "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", - "notification.admin.report": "{name} වාර්තා {target}", - "notification.admin.sign_up": "{name} අත්සන් කර ඇත", "notification.follow": "{name} ඔබව අනුගමනය කළා", - "notification.follow_request": "{name} ඔබව අනුගමනය කිරීමට ඉල්ලා ඇත", "notification.mention": "{name} ඔබව සඳහන් කර ඇත", "notification.own_poll": "ඔබගේ මත විමසුම නිමයි", "notification.poll": "ඔබ ඡන්දය දුන් මත විමසුමක් නිමයි", - "notification.reblog": "{name} ඔබේ තත්ත්වය ඉහළ නැංවීය", "notification.status": "{name} දැන් පළ කළා", - "notification.update": "{name} පළ කිරීමක් සංස්කරණය කළා", + "notification.update": "{name} ලිපියක් සංස්කරණය කළා", "notifications.clear": "දැනුම්දීම් මකන්න", - "notifications.clear_confirmation": "ඔබට ඔබගේ සියලු දැනුම්දීම් ස්ථිරවම හිස් කිරීමට අවශ්‍ය බව විශ්වාසද?", + "notifications.clear_confirmation": "දැනුම්දීම් සියල්ල හිස් කිරීමට වුවමනා ද?", "notifications.column_settings.admin.report": "නව වාර්තා:", "notifications.column_settings.admin.sign_up": "නව ලියාපදිංචි:", "notifications.column_settings.alert": "වැඩතල දැනුම්දීම්", + "notifications.column_settings.favourite": "ප්‍රියතමයන්:", "notifications.column_settings.filter_bar.advanced": "සියළු ප්‍රවර්ග පෙන්වන්න", "notifications.column_settings.filter_bar.category": "ඉක්මන් පෙරහන් තීරුව", "notifications.column_settings.filter_bar.show_bar": "පෙරහන් තීරුව පෙන්වන්න", "notifications.column_settings.follow": "නව අනුගාමිකයින්:", "notifications.column_settings.follow_request": "නව අනුගමන ඉල්ලීම්:", "notifications.column_settings.mention": "සැඳහුම්:", - "notifications.column_settings.poll": "ඡන්ද ප්‍රතිඵල:", + "notifications.column_settings.poll": "මත විමසුමේ ප්‍රතිඵල:", "notifications.column_settings.push": "තල්ලු දැනුම්දීම්", - "notifications.column_settings.reblog": "තල්ලු කිරීම්:", "notifications.column_settings.show": "තීරුවෙහි පෙන්වන්න", "notifications.column_settings.sound": "ශබ්දය වාදනය", "notifications.column_settings.status": "නව ලිපි:", @@ -319,38 +298,26 @@ "notifications.column_settings.unread_notifications.highlight": "නොකියවූ දැනුම්දීම් ඉස්මතු කරන්න", "notifications.column_settings.update": "සංශෝධන:", "notifications.filter.all": "සියල්ල", - "notifications.filter.boosts": "බූස්ට් කරයි", + "notifications.filter.favourites": "ප්‍රියතමයන්", "notifications.filter.follows": "අනුගමනය", "notifications.filter.mentions": "සැඳහුම්", - "notifications.filter.polls": "ඡන්ද ප්‍රතිඵල", - "notifications.filter.statuses": "ඔබ අනුගමනය කරන පුද්ගලයින්ගෙන් යාවත්කාලීන", - "notifications.grant_permission": "අවසර දෙන්න.", + "notifications.filter.polls": "මත විමසුමේ ප්‍රතිඵල", "notifications.group": "දැනුම්දීම් {count}", "notifications.mark_as_read": "සියළු දැනුම්දීම් කියවූ බව යොදන්න", - "notifications.permission_denied": "කලින් ප්‍රතික්ෂේප කළ බ්‍රවුසර අවසර ඉල්ලීම හේතුවෙන් ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත", - "notifications.permission_denied_alert": "බ්‍රවුසර අවසරය පෙර ප්‍රතික්ෂේප කර ඇති බැවින්, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කළ නොහැක", - "notifications.permission_required": "අවශ්‍ය අවසරය ලබා දී නොමැති නිසා ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත.", "notifications_permission_banner.enable": "වැඩතල දැනුම්දීම් සබල කරන්න", - "notifications_permission_banner.how_to_control": "Mastodon විවෘතව නොමැති විට දැනුම්දීම් ලබා ගැනීමට, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කරන්න. ඔබට ඒවා සක්‍රිය කළ පසු ඉහත {icon} බොත්තම හරහා ඩෙස්ක්ටොප් දැනුම්දීම් ජනනය කරන්නේ කුමන ආකාරයේ අන්තර්ක්‍රියාද යන්න නිවැරදිව පාලනය කළ හැක.", - "notifications_permission_banner.title": "කිසිම දෙයක් අතපසු කරන්න එපා", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", - "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", - "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", - "onboarding.steps.publish_status.body": "Say hello to the world.", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", - "onboarding.steps.setup_profile.title": "Customize your profile", - "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", + "notifications_permission_banner.title": "කිසිවක් අතපසු නොකරන්න", + "onboarding.compose.template": "ආයුබෝ #මාස්ටඩන්!", + "onboarding.share.title": "ඔබගේ පැතිකඩ බෙදාගන්න", + "onboarding.steps.publish_status.title": "පළමු ලිපිය පළ කරන්න", + "onboarding.steps.setup_profile.title": "ඔබගේ පැතිකඩ අභිරුචිකරණය", + "onboarding.steps.share_profile.body": "මාස්ටඩන් හි ඔබව සොයා ගන්නේ කෙසේදැයි යහළුවන්ට දන්වන්න", + "onboarding.steps.share_profile.title": "ඔබගේ පැතිකඩ බෙදාගන්න", "poll.closed": "වසා ඇත", "poll.refresh": "නැවුම් කරන්න", + "poll.reveal": "ප්‍රතිඵල බලන්න", "poll.vote": "ඡන්දය", "poll.voted": "ඔබ මෙම උත්තරයට ඡන්දය දී ඇත", - "poll_button.add_poll": "මත විමසුමක් යොදන්න", + "poll_button.add_poll": "මත විමසුමක් අරඹන්න", "poll_button.remove_poll": "මත විමසුම ඉවතලන්න", "privacy.change": "ලිපියේ රහස්‍යතාව සංශෝධනය", "privacy.direct.long": "සඳහන් කළ අයට දිස්වෙයි", @@ -363,6 +330,7 @@ "refresh": "නැවුම් කරන්න", "regeneration_indicator.label": "පූරණය වෙමින්…", "relative_time.days": "ද. {number}", + "relative_time.full.days": "{number, plural, one {දවස් #} other {දවස් #}} කට පෙර", "relative_time.full.hours": "{number, plural, one {පැය #} other {පැය #}} කට පෙර", "relative_time.full.just_now": "මේ දැන්", "relative_time.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} කට පෙර", @@ -377,10 +345,9 @@ "report.categories.other": "වෙනත්", "report.categories.spam": "ආයාචිත", "report.categories.violation": "අන්තර්ගතය නිසා සේවාදායකයේ නීතියක් හෝ කිහිපයක් කඩ වේ", - "report.category.subtitle": "හොඳම ගැලපීම තෝරන්න", "report.category.title": "මෙම {type}සමඟ සිදුවන්නේ කුමක්දැයි අපට කියන්න", "report.category.title_account": "පැතිකඩ", - "report.category.title_status": "තැපැල්", + "report.category.title_status": "ලිපිය", "report.close": "අහවරයි", "report.comment.title": "අප දැනගත යුතු යැයි ඔබ සිතන තවත් යමක් තිබේද?", "report.forward": "{target} වෙත හරවන්න", @@ -391,7 +358,7 @@ "report.placeholder": "අමතර අදහස්", "report.reasons.dislike": "මම එයට අකැමතියි", "report.reasons.dislike_description": "ඒක බලන්න ඕන දෙයක් නෙවෙයි", - "report.reasons.other": "ඒක වෙන දෙයක්", + "report.reasons.other": "එය වෙනත් දෙයක්", "report.reasons.other_description": "ගැටළුව වෙනත් වර්ග වලට නොගැලපේ", "report.reasons.spam": "එය අයාචිතයි", "report.reasons.spam_description": "අනිෂ්ට සබැඳි, ව්‍යාජ නියැලීම, හෝ පුනරාවර්තන පිළිතුරු", @@ -402,8 +369,8 @@ "report.statuses.subtitle": "අදාළ සියල්ල තෝරන්න", "report.statuses.title": "මෙම වාර්තාව උපස්ථ කරන පෝස්ට් තිබේද?", "report.submit": "යොමන්න", - "report.target": "වාර්තාව {target}", - "report.thanks.take_action": "Mastodon හි ඔබ දකින දේ පාලනය කිරීම සඳහා ඔබේ විකල්ප මෙන්න:", + "report.target": "{target} වාර්තා කිරීම", + "report.thanks.take_action": "මාස්ටඩන් හි ඔබ දකින දෑ පාලනයට තිබෙන විකල්ප:", "report.thanks.take_action_actionable": "අපි මෙය සමාලෝචනය කරන අතරතුර, ඔබට @{name}ට එරෙහිව පියවර ගත හැක:", "report.thanks.title": "මෙය නොපෙන්විය යුතුද?", "report.thanks.title_actionable": "වාර්තා කිරීමට ස්තූතියි, අපි මේ ගැන සොයා බලමු.", @@ -415,8 +382,9 @@ "report_notification.categories.violation": "නීතිය කඩ කිරීම", "report_notification.open": "විවෘත වාර්තාව", "search.placeholder": "සොයන්න", + "search.quick_action.open_url": "ලිපිනය මාස්ටඩන්හි අරින්න", + "search.search_or_paste": "සොයන්න හෝ ඒ.ස.නි. අලවන්න", "search_results.all": "සියල්ල", - "search_results.hashtags": "හැෂ් ටැග්", "search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය", "search_results.see_all": "සියල්ල බලන්න", "search_results.statuses": "ලිපි", @@ -424,24 +392,23 @@ "server_banner.learn_more": "තව දැනගන්න", "sign_in_banner.create_account": "ගිණුමක් සාදන්න", "sign_in_banner.sign_in": "පිවිසෙන්න", - "status.admin_account": "@{name}සඳහා මධ්‍යස්ථ අතුරුමුහුණත විවෘත කරන්න", - "status.admin_status": "මධ්‍යස්ථ අතුරුමුහුණතෙහි මෙම තත්ත්වය විවෘත කරන්න", + "status.admin_status": "මෙම ලිපිය මැදිහත්කරණ අතුරුමුහුණතෙහි අරින්න", "status.block": "@{name} අවහිර", "status.bookmark": "පොත්යොමුවක්", - "status.cannot_reblog": "මෙම තනතුර වැඩි කළ නොහැක", - "status.copy": "තත්වයට සබැඳිය පිටපත් කරන්න", "status.delete": "මකන්න", "status.detailed_status": "විස්තරාත්මක සංවාද දැක්ම", "status.edit": "සංස්කරණය", "status.edited": "සංශෝධිතයි {date}", "status.edited_x_times": "සංශෝධිතයි {count, plural, one {වාර {count}} other {වාර {count}}}", "status.embed": "කාවැද්දූ", + "status.filter": "මෙම ලිපිය පෙරන්න", "status.filtered": "පෙරන ලද", + "status.hide": "ලිපිය සඟවන්න", "status.history.created": "{name} නිර්මාණය {date}", "status.history.edited": "{name} සංස්කරණය {date}", "status.load_more": "තව පූරණය", "status.media_hidden": "මාධ්‍ය සඟවා ඇත", - "status.mention": "@{name} සැඳහුම", + "status.mention": "@{name} සඳහන් කරන්ක", "status.more": "තව", "status.mute": "@{name} නිහඬව", "status.mute_conversation": "සංවාදය නිහඬව", @@ -449,14 +416,10 @@ "status.pin": "පැතිකඩට අමුණන්න", "status.pinned": "ඇමිණූ ලිපියකි", "status.read_more": "තව කියවන්න", - "status.reblog": "බූස්ට් කරන්න", - "status.reblog_private": "මුල් දෘශ්‍යතාව සමඟ වැඩි කරන්න", - "status.reblogs.empty": "තාම කවුරුත් මේ toot එක boost කරලා නැහැ. යමෙකු එසේ කළ විට, ඔවුන් මෙහි පෙන්වනු ඇත.", - "status.redraft": "මකන්න සහ නැවත කෙටුම්පත", "status.remove_bookmark": "පොත්යොමුව ඉවතලන්න", "status.reply": "පිළිතුරු", "status.replyAll": "නූලට පිළිතුරු දෙන්න", - "status.report": "@{name} වාර්තාව", + "status.report": "@{name} වාර්තා කරන්න", "status.sensitive_warning": "සංවේදී අන්තර්ගතයකි", "status.share": "බෙදාගන්න", "status.show_filter_reason": "කෙසේ වුවද පෙන්වන්න", @@ -464,29 +427,29 @@ "status.show_less_all": "සියල්ල අඩුවෙන් පෙන්වන්න", "status.show_more": "තවත් පෙන්වන්න", "status.show_more_all": "සියල්ල වැඩියෙන් පෙන්වන්න", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", + "status.translate": "පරිවර්තනය", + "status.translated_from_with": "{provider} මගින් {lang} භාෂාවෙන් පරිවර්තනය කර ඇත", + "status.uncached_media_warning": "පෙරදසුන නැත", "status.unmute_conversation": "සංවාදය නොනිහඬ", "status.unpin": "පැතිකඩෙන් ගළවන්න", "subscribed_languages.save": "වෙනස්කම් සුරකින්න", "tabs_bar.home": "මුල් පිටුව", "tabs_bar.notifications": "දැනුම්දීම්", - "time_remaining.days": "{number, plural, one {# දින} other {# දින}} අත්හැරියා", - "time_remaining.hours": "{number, plural, one {# පැය} other {# පැය}} අත්හැරියා", - "time_remaining.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}} අත්හැරියා", - "time_remaining.moments": "ඉතිරිව ඇති මොහොත", - "time_remaining.seconds": "{number, plural, one {# දෙවැනි} other {# තත්පර}} අත්හැරියා", + "time_remaining.days": "{number, plural, one {දවස් #} other {දවස් #}} ක් ඉතිරිය", + "time_remaining.hours": "{number, plural, one {පැය #} other {පැය #}} ක් ඉතිරිය", + "time_remaining.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} ක් ඉතිරිය", + "time_remaining.seconds": "{number, plural, one {තත්පර #} other {තත්පර #}} ක් ඉතිරිය", "timeline_hint.remote_resource_not_displayed": "වෙනත් සේවාදායකයන්ගෙන් {resource} දර්ශනය නොවේ.", "timeline_hint.resources.followers": "අනුගාමිකයින්", "timeline_hint.resources.follows": "අනුගමනය", "timeline_hint.resources.statuses": "පරණ ලිපි", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}", "trends.trending_now": "දැන් ප්‍රවණතාවය", "ui.beforeunload": "ඔබ මාස්ටඩන් හැර ගියහොත් කටුපිටපත අහිමි වේ.", "units.short.billion": "{count}බී", "units.short.million": "ද.ල. {count}", "units.short.thousand": "{count}කි", "upload_area.title": "උඩුගතයට ඇද දමන්න", - "upload_button.label": "රූප, දෘශ්‍යක හෝ හඬපට යොදන්න", + "upload_button.label": "රූප, දෘශ්‍යක හෝ හඬපට අමුණන්න", "upload_error.limit": "සීමාව ඉක්මවා ඇත.", "upload_error.poll": "මත විමසුම් සමඟ ගොනු යෙදීමට ඉඩ නොදේ.", "upload_form.audio_description": "නොඇසෙන අය සඳහා විස්තර කරන්න", @@ -507,6 +470,7 @@ "upload_modal.preview_label": "පෙරදසුන ({ratio})", "upload_progress.label": "උඩුගත වෙමින්...", "upload_progress.processing": "සැකසෙමින්…", + "username.taken": "නම දැනටමත් අරගෙන ඇත", "video.close": "දෘශ්‍යකය වසන්න", "video.download": "ගොනුව බාගන්න", "video.exit_fullscreen": "පූර්ණ තිරයෙන් පිටවන්න", diff --git a/config/locales/devise.si.yml b/config/locales/devise.si.yml index a20057cef94282..c866bed0e93b42 100644 --- a/config/locales/devise.si.yml +++ b/config/locales/devise.si.yml @@ -23,7 +23,6 @@ si: explanation: ඔබ මෙම ඊමේල් ලිපිනය සමඟ %{host} හි ගිණුමක් සාදා ඇත. ඔබ එය සක්‍රිය කිරීමට එක ක්ලික් කිරීමක් ඇත. මේ ඔබ නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. explanation_when_pending: ඔබ මෙම විද්‍යුත් තැපැල් ලිපිනය සමඟ %{host} වෙත ආරාධනාවක් සඳහා ඉල්ලුම් කළා. ඔබ ඔබගේ විද්‍යුත් තැපැල් ලිපිනය තහවුරු කළ පසු, අපි ඔබගේ අයදුම්පත සමාලෝචනය කරන්නෙමු. ඔබගේ විස්තර වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට ඔබට පුරනය විය හැක, නමුත් ඔබගේ ගිණුම අනුමත වන තුරු ඔබට බොහෝ කාර්යයන් වෙත ප්‍රවේශ විය නොහැක. ඔබගේ අයදුම්පත ප්‍රතික්ෂේප කළහොත්, ඔබගේ දත්ත ඉවත් කරනු ඇත, එබැවින් ඔබෙන් වැඩිදුර ක්‍රියාමාර්ග අවශ්‍ය නොවනු ඇත. මේ ඔබ නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. extra_html: කරුණාකර සේවාදායකයේ නීති සහ අපගේ සේවා කොන්දේසිද පරීක්ෂා කරන්න. - subject: 'Mastodon: %{instance}සඳහා තහවුරු කිරීමේ උපදෙස්' title: වි. තැපෑල තහවුරු කරන්න email_changed: explanation: 'ඔබගේ ගිණුම සඳහා ඊමේල් ලිපිනය වෙනස් වෙමින් පවතී:' @@ -33,30 +32,26 @@ si: password_change: explanation: ඔබගේ ගිණුම සඳහා මුරපදය වෙනස් කර ඇත. extra: ඔබ ඔබගේ මුරපදය වෙනස් නොකළේ නම්, යමෙකු ඔබගේ ගිණුමට ප්‍රවේශය ලබා ගෙන ඇති බව පෙනෙන්නට තිබේ. ඔබගේ ගිණුමෙන් අගුලු දමා ඇත්නම් කරුණාකර ඔබගේ මුරපදය වහාම වෙනස් කරන්න හෝ සේවාදායක පරිපාලක අමතන්න. - subject: 'Mastodon: මුරපදය වෙනස් විය' + subject: 'මාස්ටඩන්: මුරපදය වෙනස් විය' title: මුරපදය වෙනස් විය reconfirmation_instructions: explanation: ඔබගේ ඊමේල් වෙනස් කිරීමට නව ලිපිනය තහවුරු කරන්න. - extra: මෙම වෙනස ඔබ විසින් ආරම්භ කරන ලද්දක් නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. ඔබ ඉහත සබැඳියට ප්‍රවේශ වන තෙක් Mastodon ගිණුම සඳහා ඊමේල් ලිපිනය වෙනස් නොවේ. - subject: 'Mastodon: %{instance}සඳහා විද්‍යුත් තැපෑල තහවුරු කරන්න' title: වි-තැපෑල තහවුරු කරන්න reset_password_instructions: action: මුරපදය වෙනස් කරන්න explanation: ඔබ ඔබගේ ගිණුම සඳහා නව මුරපදයක් ඉල්ලා ඇත. extra: ඔබ මෙය ඉල්ලා නොසිටියේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. ඔබ ඉහත සබැඳියට ප්‍රවේශ වී අලුත් එකක් සාදන තෙක් ඔබේ මුරපදය වෙනස් නොවනු ඇත. - subject: 'Mastodon: මුරපද උපදෙස් යළි පිහිටුවන්න' + subject: 'මාස්ටඩන්: මුරපදය යළි සැකසීමේ උපදෙස්' title: මුරපදය යළි සැකසීම two_factor_disabled: explanation: ඔබගේ ගිණුම සඳහා ද්වි-සාධක සත්‍යාපනය අබල කර ඇත. විද්‍යුත් තැපැල් ලිපිනය සහ මුරපදය පමණක් භාවිතයෙන් දැන් පුරනය විය හැක. - subject: 'Mastodon: ද්වි සාධක සත්‍යාපනය අක්‍රීය කර ඇත' title: ද්විපියවර අබලයි two_factor_enabled: explanation: ඔබගේ ගිණුම සඳහා ද්වි-සාධක සත්‍යාපනය සක්‍රීය කර ඇත. යුගල කළ TOTP යෙදුම මගින් ජනනය කරන ලද ටෝකනයක් පුරනය වීමට අවශ්‍ය වනු ඇත. - subject: 'Mastodon: ද්වි සාධක සත්‍යාපනය සක්‍රීය කර ඇත' title: ද්විපියවර සබලයි two_factor_recovery_codes_changed: explanation: පෙර ප්‍රතිසාධන කේත අවලංගු කර නව ඒවා උත්පාදනය කර ඇත. - subject: 'Mastodon: ද්වි-සාධක ප්‍රතිසාධන කේත නැවත උත්පාදනය කරන ලදී' + subject: 'මාස්ටඩන්: ද්වි-සාධක ප්‍රතිසාධන කේත නැවත උත්පාදනය කෙරිණි' title: ද්විපියවර ප්‍රතිසාධන කේත වෙනස් විය unlock_instructions: subject: 'මාස්ටඩන්: අගුළු හැරීමේ උපදේශ' @@ -67,15 +62,13 @@ si: title: ආරක්‍ෂණ යතුරක් එකතු කර ඇත deleted: explanation: පහත ආරක්ෂක යතුර ඔබගේ ගිණුමෙන් මකා ඇත - subject: 'Mastodon: ආරක්ෂක යතුර මකා ඇත' + subject: 'මාස්ටඩන්: ආරක්‍ෂණ යතුර මකා ඇත' title: ඔබගේ ආරක්ෂක යතුරු වලින් එකක් මකා ඇත webauthn_disabled: explanation: ඔබගේ ගිණුම සඳහා ආරක්ෂක යතුරු සමඟ සත්‍යාපනය අබල කර ඇත. යුගල කළ TOTP යෙදුම මගින් ජනනය කරන ලද ටෝකනය පමණක් භාවිතයෙන් දැන් පුරනය විය හැක. - subject: 'Mastodon: ආරක්ෂක යතුරු සමඟ සත්‍යාපනය අක්‍රිය කර ඇත' title: ආරක්‍ෂණ යතුරු අබල කර ඇත webauthn_enabled: explanation: ඔබගේ ගිණුම සඳහා ආරක්ෂක යතුරු සත්‍යාපනය සක්‍රීය කර ඇත. ඔබගේ ආරක්ෂක යතුර දැන් පුරනය වීම සඳහා භාවිතා කළ හැක. - subject: 'Mastodon: ආරක්ෂක යතුරු සත්‍යාපනය සක්‍රීය කර ඇත' title: ආරක්‍ෂණ යතුරු සබල කර ඇත omniauth_callbacks: failure: '"%{reason}" නිසා %{kind} සිට ඔබව සත්‍යාපනය කළ නොහැක.' @@ -108,8 +101,7 @@ si: already_confirmed: දැනටමත් තහවුරු කර ඇත, කරුණාකර පුරනය වීමට උත්සාහ කරන්න confirmation_period_expired: "%{period}තුළ තහවුරු කළ යුතුය, කරුණාකර අලුත් එකක් ඉල්ලන්න" expired: කල් ඉකුත් වී ඇත, කරුණාකර අලුත් එකක් ඉල්ලන්න - not_found: හමු වුණේ නැහැ - not_locked: අගුලු දමා නොතිබුණි + not_found: හමු නොවිණි not_saved: one: '1 දෝෂයක් මෙම %{resource} සුරැකීම තහනම් කර ඇත:' other: 'දෝෂ %{count} කින් මෙම %{resource} සුරැකීම තහනම් කර ඇත:' diff --git a/config/locales/doorkeeper.si.yml b/config/locales/doorkeeper.si.yml index 2307f63c0ae73c..31b38444d39462 100644 --- a/config/locales/doorkeeper.si.yml +++ b/config/locales/doorkeeper.si.yml @@ -74,9 +74,9 @@ si: authorized_at: "%{date}මත අවසර දී ඇත" description_html: මේවා API භාවිතයෙන් ඔබගේ ගිණුමට ප්‍රවේශ විය හැකි යෙදුම් වේ. ඔබ මෙහි හඳුනා නොගත් යෙදුම් තිබේ නම්, හෝ යෙදුමක් වැරදි ලෙස හැසිරෙන්නේ නම්, ඔබට එහි ප්‍රවේශය අවලංගු කළ හැක. last_used_at: අවසන් වරට භාවිතා කළේ %{date} - never_used: කවදාවත් පාවිච්චි කළේ නැහැ + never_used: භාවිතා කර නැත scopes: අවසර - superapp: අභ්යන්තර + superapp: අභ්‍යන්තර title: ඔබගේ බලයලත් අයදුම්පත් errors: messages: @@ -104,33 +104,34 @@ si: flash: applications: create: - notice: යෙදුම නිර්මාණය කරන ලදී. + notice: යෙදුම සෑදිණි. destroy: - notice: යෙදුම මකා ඇත. + notice: යෙදුම මැකිණි. update: - notice: යෙදුම යාවත්කාලීන කරන ලදී. + notice: යෙදුම යාවත්කාල විය. authorized_applications: destroy: notice: අයදුම්පත අවලංගු කරන ලදී. grouped_scopes: access: - read: කියවීමට පමණක් ප්‍රවේශය - read/write: කියවීමට සහ ලිවීමට ප්‍රවේශය - write: ලිවීමට පමණක් ප්‍රවේශය + read: ප්‍රවේශය කියවීමට පමණි + read/write: කියවීමට හා ලිවීමට ප්‍රවේශය + write: ප්‍රවේශය ලිවීමට පමණි title: accounts: ගිණුම් - admin/accounts: ගිණුම් පරිපාලනය + admin/accounts: ගිණුම් කළමනාකරණය admin/all: සියලුම පරිපාලන කාර්යයන් admin/reports: වාර්තා පරිපාලනය + all: ඔබගේ මාස්ටඩන් ගිණුමට පූර්ණ ප්‍රවේශය blocks: කුට්ටි - bookmarks: පිටු සලකුණු + bookmarks: පොත්යොමු conversations: සංවාද crypto: අන්ත සංකේතනය + favourites: ප්‍රියතමයන් filters: පෙරහන් follows: පහත සඳහන් lists: ලැයිස්තු - media: මාධ්ය ඇමුණුම් - mutes: නිහඬ කරයි + media: මාධ්‍ය ඇමුණුම් notifications: දැනුම්දීම් push: තල්ලු දැනුම්දීම් reports: වාර්තා @@ -142,39 +143,40 @@ si: applications: යෙදුම් oauth2_provider: වි.සත්‍යා.2 (OAuth) සැපයුම්කරු application: - title: වි.සත්යා. (OAuth) තොරතුරු අවශ්‍යයි + title: වි.සත්‍යා. (OAuth) අනුමැතිය අවශ්‍යයයි scopes: - admin:read: සේවාදායකයේ ඇති සියලුම දත්ත කියවන්න - admin:read:accounts: සියලුම ගිණුම් වල සංවේදී තොරතුරු කියවන්න - admin:read:reports: සියලුම වාර්තා සහ වාර්තා කළ ගිණුම් වල සංවේදී තොරතුරු කියවන්න - admin:write: සේවාදායකයේ සියලුම දත්ත වෙනස් කරන්න - admin:write:accounts: ගිණුම් මත මධ්‍යස්ථ ක්‍රියා සිදු කරන්න - admin:write:reports: වාර්තා මත මධ්‍යස්ථ ක්‍රියා සිදු කරන්න - crypto: end-to-end encryption භාවිතා කරන්න + admin:read: සේවාදායකයේ ඇති සියලුම දත්ත කියවයි + admin:read:accounts: සියලුම ගිණුම් වල සංවේදී තොරතුරු කියවයි + admin:read:reports: සියලුම වාර්තා සහ වාර්තා කළ ගිණුම් වල සංවේදී තොරතුරු කියවයි + admin:write: සේවාදායකයේ සියලුම දත්ත සංශෝධනය කරයි + admin:write:accounts: ගිණුම් සඳහා මැදිහත්කරණ ක්‍රියාමාර්ග ගනියි + admin:write:reports: වාර්තා සඳහා මැදිහත්කරණ ක්‍රියාමාර්ග ගනියි + crypto: අන්ත සංකේතනය භාවිතා කරයි follow: ගිණුම් සබඳතා වෙනස් කරන්න - push: ඔබගේ තල්ලු දැනුම්දීම් ලබා ගන්න - read: ඔබගේ ගිණුමේ සියලුම දත්ත කියවන්න - read:accounts: ගිණුම් තොරතුරු බලන්න + push: ඔබගේ තල්ලු දැනුම්දීම් ලබන්න + read: ඔබගේ ගිණුමේ සියලුම දත්ත කියවයි + read:accounts: ගිණුම්වල තොරතුරු දකියි read:blocks: ඔබගේ වාරණ බලන්න - read:bookmarks: ඔබගේ පිටු සලකුණු බලන්න + read:bookmarks: ඔබගේ පොත්යොමු දකියි + read:favourites: ඔබගේ ප්‍රියතමයන් බලන්න read:filters: ඔබගේ පෙරහන් බලන්න read:follows: ඔබගේ පහත සඳහන් බලන්න read:lists: ඔබගේ ලැයිස්තු බලන්න read:mutes: ඔබේ ගොළු බලන්න - read:notifications: ඔබගේ දැනුම්දීම් බලන්න + read:notifications: ඔබගේ දැනුම්දීම් බලයි read:reports: ඔබගේ වාර්තා බලන්න - read:search: ඔබ වෙනුවෙන් සොයන්න - read:statuses: සියලුම පෝස්ට් බලන්න + read:search: ඔබ වෙනුවෙන් සොයයි + read:statuses: සියලු ලිපි බලයි write: ඔබගේ ගිණුමේ සියලුම දත්ත වෙනස් කරන්න write:accounts: ඔබගේ පැතිකඩ වෙනස් කරන්න - write:blocks: ගිණුම් සහ වසම් අවහිර කරන්න - write:bookmarks: පිටු සලකුණු සටහන් + write:blocks: ගිණුම් සහ වසම් අවහිර කරයි + write:bookmarks: ලිපි වලට පොත්යොමු තබයි write:conversations: සංවාද නිහඬ කිරීම සහ මකා දැමීම - write:filters: පෙරහන් කරන්න + write:favourites: ප්‍රියතම ලිපි + write:filters: පෙරහන් සාදයි write:follows: මිනිසුන් අනුගමනය කරන්න write:lists: ලැයිස්තු සාදන්න - write:media: මාධ්‍ය ගොනු උඩුගත කරන්න - write:mutes: මිනිසුන් සහ සංවාද කරන්න - write:notifications: ඔබගේ දැනුම්දීම් හිස්කරන්න - write:reports: වෙනත් පුද්ගලයින් වාර්තා කරන්න - write:statuses: පළ කිරීම් පළ කරන්න + write:media: මාධ්‍ය ගොනු උඩුගත කරයි + write:mutes: සංවාද හා පුද්ගලයින් නිහඬ කරයි + write:notifications: ඔබගේ දැනුම්දීම් හිස් කරයි + write:statuses: ලිපි පළ කරයි diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 7ca7f63a5bdb62..d21259ee77e3d0 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -785,6 +785,9 @@ eu: release_notes: Bertsio oharrak title: Eguneraketak eskuragarri type: Mota + types: + major: Argitalpen handia + minor: Argitalpen txikia version: Bertsioa statuses: account: Egilea diff --git a/config/locales/si.yml b/config/locales/si.yml index 45be8b76f2af8f..787d6fde38a4c7 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1,10 +1,11 @@ --- si: about: - about_mastodon_html: 'අනාගත සමාජ ජාලය: දැන්වීම් නැත, ආයතනික නිරීක්ෂණ නැත, සදාචාරාත්මක සැලසුම් සහ විමධ්‍යගත කිරීම! Mastodon සමඟ ඔබේ දත්ත අයිති කරගන්න!' - contact_missing: සකස් කර නැත + about_mastodon_html: 'අනාගත සමාජ ජාලය: දැන්වීම් නැත, සංස්ථානික අවේක්‍ෂණ නැත, යහපතට නිර්මිතයි සහ විමධ්‍යගතයි! මාස්ටඩන් සමඟ ඔබගේ දත්ත අයිතිව තබාගන්න!' + contact_missing: සකසා නැත contact_unavailable: අ/නොවේ - hosted_on: Mastodon %{domain}හි සත්කාරකත්වය දරයි + hosted_on: "%{domain} හරහා සත්කාරකත්‍වය ලබයි" + title: පිළිබඳව accounts: follow: අනුගමනය followers: @@ -14,7 +15,7 @@ si: instance_actor_flash: මෙම ගිණුම සේවාදායකයම නියෝජනය කිරීමට භාවිතා කරන අතථ්‍ය නළුවෙකු වන අතර කිසිදු තනි පරිශීලකයෙකු නොවේ. එය ෆෙඩරේෂන් අරමුණු සඳහා භාවිතා කරන අතර අත්හිටුවිය යුතු නොවේ. last_active: අවසාන ක්රියාකාරී link_verified_on: මෙම සබැඳියේ හිමිකාරිත්වය %{date}හි පරීක්ෂා කරන ලදී - nothing_here: මෙහි කිසිත් නැත! + nothing_here: මෙහි කිසිවක් නැත! pin_errors: following: ඔබට අනුමත කිරීමට අවශ්‍ය පුද්ගලයා ඔබ දැනටමත් අනුගමනය කරමින් සිටිය යුතුය posts: @@ -23,51 +24,49 @@ si: posts_tab_heading: ලිපි admin: account_actions: - action: ක්‍රියාව සිදු කරන්න - title: "%{acct}මත මධ්‍යස්ථ ක්‍රියාව සිදු කරන්න" + action: ක්‍රියාමාර්ගයක් ගන්න account_moderation_notes: - create: සටහන හැරයන්න - created_msg: මධ්‍යස්ථ සටහන සාර්ථකව සාදන ලදී! - destroyed_msg: මධ්‍යස්ථ සටහන සාර්ථකව විනාශ විය! + create: සටහනක් තබන්න accounts: add_email_domain_block: වි-තැපැල් වසම අවහිර කරන්න - approve: අනුමත කරන්න + approve: අනුමැතිය approved_msg: "%{username}හි ලියාපදිංචි වීමේ යෙදුම සාර්ථකව අනුමත කරන ලදී" are_you_sure: ඔබට විශ්වාසද? - avatar: අවතාරය + avatar: ප්‍රතිරූපය by_domain: වසම change_email: + changed_msg: වි-තැපෑල සාර්ථකව වෙනස් විය! current_email: වත්මන් වි-තැපෑල label: වි-තැපෑල වෙනස් කරන්න new_email: නව විද්‍යුත් තැපෑල submit: වි-තැපෑල වෙනස් කරන්න title: "%{username} සඳහා වි-තැපෑල වෙනස් කරන්න" + change_role: + changed_msg: භූමිකාව සාර්ථකව වෙනස් විය! + label: භූමිකාව වෙනස් කරන්න + no_role: නව භූමිකාව + title: "%{username} සඳහා භූමිකාව වෙනස් කරන්න" confirm: සනාථ කරන්න - confirmed: තහවුරු කර ඇත + confirmed: සනාථ කර ඇත confirming: සනාථ කරමින් custom: අභිරුචි delete: දත්ත මකන්න - deleted: මකා දමන ලදී - demote: පහත් කරන්න + deleted: මකා ඇත destroyed_msg: "%{username}හි දත්ත ඉක්මනින් මකා දැමීමට පෝලිම් කර ඇත" - disable: කැටි කරන්න disable_sign_in_token_auth: ඊමේල් ටෝකන් සත්‍යාපනය අක්‍රීය කරන්න disable_two_factor_authentication: 2FA අබල කරන්න - disabled: ශීත කළ display_name: ප්රදර්ශන නාමය domain: වසම edit: සංස්කරණය email: විද්‍යුත් තැපෑල email_status: වි-තැපෑලෙහි තත්වය - enable: කැටි කිරීම ඉවත් කරන්න enable_sign_in_token_auth: විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සබල කරන්න enabled: සබල කර ඇත enabled_msg: "%{username}ගේ ගිණුම සාර්ථකව අත්හිටුවා ඇත" followers: අනුගාමිකයින් - follows: පහත සඳහන් header: ශීර්ෂය inbox_url: එන ලිපි URL - invite_request_text: එක්වීම සඳහා + invite_request_text: එක්වීමට හේතුව invited_by: විසින් ආරාධනා කරන ලදී ip: අ.ජා. කෙ. (IP) joined: එක් වී ඇත @@ -84,12 +83,13 @@ si: moderation: active: සක්‍රීයයි all: සියල්ල - pending: පොරොත්තුවෙන් + disabled: අබලයි + pending: පොරොත්තු suspended: අත්හිටුවන ලදි - title: මධ්යස්ථභාවය - moderation_notes: මධ්‍යස්ථ සටහන් + title: මැදිහත්කරණය + moderation_notes: මැදිහත්කරණ සටහන් most_recent_activity: වඩාත්ම මෑත ක්රියාකාරිත්වය - most_recent_ip: ඊට වඩා අ.ජා.කේ.(IP) + most_recent_ip: මෑත අ.ජා.කෙ. (IP) no_account_selected: කිසිවක් තෝරා නොගත් බැවින් ගිණුම් කිසිවක් වෙනස් කර නැත no_limits_imposed: සීමාවන් පනවා නැත not_subscribed: දායක වී නැත @@ -99,37 +99,36 @@ si: previous_strikes_description_html: one: මෙම ගිණුමට එක වර්ජනයක් ඇත. other: මෙම ගිණුමේ වර්ජන %{count} ඇත. - promote: ප්රවර්ධනය කරන්න protocol: කෙටුම්පත - public: ප්රසිද්ධ + public: ප්‍රසිද්ධ push_subscription_expires: පුෂ් දායකත්වය කල් ඉකුත් වේ - redownload: පැතිකඩ නැවුම්කරන්න + redownload: පැතිකඩ නැවුම් කරන්න redownloaded_msg: මූලාරම්භයේ සිට %{username}හි පැතිකඩ සාර්ථකව නැවුම් කරන ලදී reject: ප්‍රතික්ෂේප rejected_msg: "%{username}හි ලියාපදිංචි වීමේ අයදුම්පත සාර්ථකව ප්‍රතික්ෂේප විය" - remove_avatar: අවතාරය ඉවත් කරන්න + remove_avatar: ප්‍රතිරූපය ඉවත් කරන්න remove_header: ශීර්ෂය ඉවත්කරන්න removed_avatar_msg: "%{username}ගේ අවතාර රූපය සාර්ථකව ඉවත් කරන ලදී" removed_header_msg: "%{username}හි ශීර්ෂ රූපය සාර්ථකව ඉවත් කරන ලදී" resend_confirmation: already_confirmed: මෙම පරිශීලකයා දැනටමත් තහවුරු කර ඇත reset: නැවත සකසන්න - reset_password: මුරපදය නැවතසකසන්න + reset_password: මුරපදය යළි සකසන්න resubscribe: නැවත දායක වන්න + role: භූමිකාව search: සොයන්න search_same_email_domain: එකම විද්‍යුත් තැපැල් වසම සහිත වෙනත් පරිශීලකයන් search_same_ip: එකම IP සහිත වෙනත් පරිශීලකයන් + security: ආරක්‍ෂාව security_measures: only_password: මුරපදය පමණි password_and_2fa: මුරපදය සහ 2FA - sensitive: සංවේදී sensitized: සංවේදී ලෙස සලකුණු කර ඇත shared_inbox_url: බෙදාගත් එන ලිපි URL show: created_reports: වාර්තා හැදුවා targeted_reports: වෙනත් අය විසින් වාර්තා කරන ලදී - silence: සීමාව - silenced: සීමාසහිත + silenced: සීමා සහිතයි statuses: ලිපි strikes: පෙර වැඩ වර්ජන subscribe: දායක වන්න @@ -147,26 +146,25 @@ si: unsilenced_msg: "%{username}ගිණුමේ සීමාව සාර්ථකව ඉවත් කරන ලදී" unsubscribe: දායක නොවන්න unsuspended_msg: "%{username}ගිණුම සාර්ථකව අත්හිටුවන ලදී" - username: පරිශීලක නාමය + username: පරිශ්‍රීලක නාමය view_domain: වසම සඳහා සාරාංශය බලන්න warn: අවවාද web: වියමන - whitelisted: ෆෙඩරේෂන් සඳහා අවසර ඇත + whitelisted: ඒකාබද්ධයට ඉඩ දී ඇත action_logs: action_types: approve_appeal: අභියාචනය අනුමත කරන්න approve_user: පරිශීලක අනුමත කරන්න assigned_to_self_report: වාර්තාව පැවරීම - change_email_user: පරිශීලකයින්ට වි-තැපෑල වෙනස් කරන්න confirm_user: පරිශීලක තහවුරු කරන්න create_account_warning: අවවාදයක් සාදන්න create_announcement: නිවේදනය සාදන්න create_custom_emoji: අභිරුචි ඉමොජි සාදන්න - create_domain_allow: වසම් ඉඩදීමක් සාදන්න - create_domain_block: වසම් අවහිරයක් සාදන්න + create_domain_allow: වසමකට ඉඩදීම සාදන්න create_email_domain_block: ඊමේල් ඩොමේන් බ්ලොක් එකක් සාදන්න create_ip_block: අ.ජා. කෙ. (IP) නීතියක් සාදන්න create_unavailable_domain: ලබා ගත නොහැකි වසම සාදන්න + create_user_role: භූමිකාව සාදන්න demote_user: පරිශීලකයා පහත් කරන්න destroy_announcement: නිවේදනය මකන්න destroy_custom_emoji: අභිරුචි ඉමොජි මකන්න @@ -178,23 +176,21 @@ si: destroy_status: පළ කිරීම මකන්න destroy_unavailable_domain: ලබා ගත නොහැකි වසම මකන්න disable_2fa_user: 2FA අබල කරන්න - disable_custom_emoji: අභිරුචි ඉමොජි අබල කරන්න + disable_custom_emoji: අභිරුචි ඉමෝජි අබල කරන්න disable_sign_in_token_auth_user: පරිශීලකයා සඳහා ඊමේල් ටෝකන් සත්‍යාපනය අක්‍රීය කරන්න - disable_user: පරිශීලනය කරන්න - enable_custom_emoji: අභිරුචි ඉමොජි සබල කරන්න + enable_custom_emoji: අභිරුචි ඉමෝජි සබල කරන්න enable_sign_in_token_auth_user: පරිශීලකයා සඳහා විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සක්‍රීය කරන්න enable_user: පරිශීලක සබල කරන්න memorialize_account: ගිණුම අනුස්මරණ කරන්න - promote_user: පරිශීලක ප්රවර්ධනය කරන්න reject_appeal: අභියාචනය ප්‍රතික්ෂේප කරන්න reject_user: පරිශීලක ප්‍රතික්ෂේප කරන්න - remove_avatar_user: Avatar ඉවත් කරන්න - reopen_report: වාර්තාව නැවත විවෘත කරන්න - reset_password_user: මුරපදය නැවතසකසන්න + remove_avatar_user: ප්‍රතිරූපය ඉවත් කරන්න + reopen_report: වාර්තාව නැවත අරින්න + reset_password_user: මුරපදය යළි සකසන්න resolve_report: වාර්තාව විසඳන්න sensitive_account: බල සංවේදී ගිණුම silence_account: ගිණුම සීමා කරන්න - suspend_account: සැලකිය යුතු + suspend_account: ගිණුම අත්හිටුවන්න unassigned_report: වාර්තාව පැවරීම ඉවත් කරන්න unblock_email_account: ඊමේල් ලිපිනය අවහිර කිරීම ඉවත් කරන්න unsensitive_account: බල සංවේදී ගිණුම අහෝසි කරන්න @@ -205,7 +201,6 @@ si: update_domain_block: ඩොමේන් බ්ලොක් යාවත්කාලීන කරන්න update_status: පළ කිරීම යාවත්කාලීන කරන්න actions: - approve_appeal_html: "%{name} අනුමත මධ්‍යස්ථ තීරණ අභියාචනය %{target}සිට" approve_user_html: "%{name} අනුමත ලියාපදිංචිය %{target}සිට" assigned_to_self_report_html: "%{name} වාර්තාව %{target} තමන්ටම පවරා ඇත" change_email_user_html: "%{name} පරිශීලක %{target}ගේ ඊමේල් ලිපිනය වෙනස් කළේය" @@ -236,7 +231,6 @@ si: enable_user_html: පරිශීලක %{target}සඳහා %{name} සක්‍රීය පුරනය වීම memorialize_account_html: "%{name} %{target}ගේ ගිණුම සිහිවටන පිටුවක් බවට පත් කළේය" promote_user_html: "%{name} උසස් පරිශීලක %{target}" - reject_appeal_html: "%{name} %{target}සිට මධ්‍යස්ථ තීරණ අභියාචනය ප්‍රතික්ෂේප කරන ලදී" reject_user_html: "%{name} %{target}සිට ලියාපදිංචි වීම ප්‍රතික්ෂේප විය" remove_avatar_user_html: "%{name} %{target}ගේ අවතාරය ඉවත් කරන ලදී" reopen_report_html: "%{name} නැවත විවෘත කළ වාර්තාව %{target}" @@ -255,8 +249,8 @@ si: update_domain_block_html: "%{target}සඳහා %{name} යාවත්කාලීන කරන ලද වසම් වාරණ" update_status_html: "%{name} %{target}යාවත්කාලීන කරන ලද පළ කිරීම" empty: ලඝු-සටහන් හමු නොවිණි. - filter_by_action: ක්‍රියාව අනුව පෙරන්න - filter_by_user: පරිශීලක අනුව පෙරන්න + filter_by_action: ක්‍රියාමාර්ගය අනුව පෙරන්න + filter_by_user: පරිශ්‍රීලකයා අනුව පෙරන්න title: විගණන සටහන announcements: destroyed_msg: නිවේදනය සාර්ථකව මකා ඇත! @@ -279,22 +273,22 @@ si: assign_category: කාණ්ඩය පැවරීම by_domain: වසම copied_msg: ඉමොජි වල දේශීය පිටපත සාර්ථකව සාදන ලදී - copy: පිටපත් + copy: පිටපතක් copy_failed_msg: එම ඉමොජියේ දේශීය පිටපතක් සෑදීමට නොහැකි විය create_new_category: නව ප්‍රවර්ගයක් සාදන්න created_msg: ඉමොජි සාර්ථකව නිර්මාණය කළා! delete: මකන්න destroyed_msg: Emojo සාර්ථකව විනාශ විය! disable: අබල කරන්න - disabled: අබල කර ඇත + disabled: අබලයි disabled_msg: එම ඉමොජිය සාර්ථකව අබල කරන ලදී - emoji: ඉමොජි + emoji: ඉමෝජි enable: සබල කරන්න - enabled: සබල කර ඇත + enabled: සබලයි enabled_msg: එම ඉමොජි සාර්ථකව සබල කරන ලදී image_hint: PNG හෝ GIF %{size}දක්වා list: ලැයිස්තුව - listed: ලැයිස්තුගත කර ඇත + listed: ලැයිස්තුගත new: title: නව අභිරුචි ඉමොජි එක් කරන්න not_permitted: මෙම ක්‍රියාව සිදු කිරීමට ඔබට අවසර නැත @@ -313,7 +307,7 @@ si: interactions: අන්තර්ක්රියා media_storage: මාධ්ය ගබඩාව new_users: නව පරිශීලකයන් - opened_reports: වාර්තා විවෘත විය + opened_reports: විවෘත වාර්තා pending_appeals_html: one: "%{count} අභියාචනයක් බලාපොරොත්තු වේ" other: "%{count} අභියාචනා පොරොත්තු" @@ -329,11 +323,11 @@ si: resolved_reports: වාර්තා විසඳා ඇත software: මෘදුකාංගය sources: ලියාපදිංචි මූලාශ්‍ර - space: අවකාශය භාවිතය + space: ඉඩ භාවිතය title: උපකරණ පුවරුව top_languages: ඉහළම ක්රියාකාරී භාෂා top_servers: ඉහළම ක්රියාකාරී සේවාදායකයන් - website: වෙබ් අඩවිය + website: අඩවිය disputes: appeals: empty: අභියාචනා හමු නොවීය. @@ -353,7 +347,6 @@ si: existing_domain_block_html: ඔබ දැනටමත් %{name}මත දැඩි සීමාවන් පනවා ඇත, ඔබට එය අවහිර කිරීම ඉවත් කිරීමට අවශ්‍යයි. new: create: බ්ලොක් එකක් සාදන්න - hint: ඩොමේන් බ්ලොක් එක දත්ත සමුදාය තුල ගිණුම් ඇතුලත් කිරීම් නිර්මාණය වීම වලක්වන්නේ නැත, නමුත් එම ගිණුම් වලට ප්‍රතික්‍රියාශීලීව සහ ස්වයංක්‍රීයව විශේෂිත මධ්‍යස්ථ ක්‍රම යොදනු ඇත. severity: noop: කිසිවක් නැත suspend: අත්හිටුවන්න @@ -361,7 +354,6 @@ si: obfuscate: අපැහැදිලි වසම් නාමය obfuscate_hint: වසම් සීමාවන් ලැයිස්තුව ප්‍රචාරණය කිරීම සබල කර ඇත්නම් ලැයිස්තුවේ වසම් නාමය අර්ධ වශයෙන් අපැහැදිලි කරන්න private_comment: පුද්ගලික අදහස - private_comment_hint: පරිපාලකයින් විසින් අභ්‍යන්තර භාවිතය සඳහා මෙම වසම් සීමාව ගැන අදහස් දක්වන්න. public_comment: ප්‍රසිද්ධ අදහස public_comment_hint: වසම් සීමාවන් ලැයිස්තුව ප්‍රචාරණය කිරීම සබල කර ඇත්නම්, සාමාන්‍ය ජනතාව සඳහා මෙම වසම් සීමාව ගැන අදහස් දක්වන්න. reject_media: මාධ්‍ය ගොනු ප්‍රතික්ෂේප කරන්න @@ -415,16 +407,16 @@ si: by_domain: වසම confirm_purge: ඔබට මෙම වසමෙන් දත්ත ස්ථිරවම මැකීමට අවශ්‍ය බව විශ්වාසද? content_policies: - comment: අභ්යන්තර සටහන + comment: අභ්‍යන්තර සටහන description_html: ඔබට මෙම වසම සහ එහි ඕනෑම උප වසමකින් සියලුම ගිණුම් වලට අදාළ වන අන්තර්ගත ප්‍රතිපත්ති නිර්වචනය කළ හැක. policies: reject_media: මාධ්‍ය ප්‍රතික්ෂේප කරන්න reject_reports: වාර්තා ප්‍රතික්ෂේප කරන්න silence: සීමාව suspend: අත්හිටුවන්න - policy: ප්රතිපත්ති + policy: ප්‍රතිපත්තිය reason: පොදු හේතුව - title: අන්තර්ගත ප්රතිපත්ති + title: අන්තර්ගත ප්‍රතිපත්ති dashboard: instance_accounts_dimension: වැඩිපුරම අනුගමනය කරන ගිණුම් instance_accounts_measure: ගබඩා කර ඇති ගිණුම් @@ -452,7 +444,7 @@ si: moderation: all: සියල්ල limited: සීමා සහිතයි - title: මධ්යස්ථභාවය + title: මැදිහත්කරණය private_comment: පුද්ගලික අදහස public_comment: ප්‍රසිද්ධ අදහස purge: පිරිසිදු කරන්න @@ -468,7 +460,6 @@ si: deactivate_all: සියල්ල අක්‍රිය කරන්න filter: all: සියල්ල - available: පවතින expired: ඉකුත් වී ඇත title: පෙරහන title: ඇරයුම් @@ -494,13 +485,13 @@ si: delete: මකන්න description_html: "ෆෙඩරේෂන් රිලේ යනු එයට දායක වී ප්‍රකාශයට පත් කරන සේවාදායකයන් අතර විශාල ප්‍රසිද්ධ පළ කිරීම් හුවමාරු කරන අතරමැදි සේවාදායකයකි. එය කුඩා සහ මධ්‍යම සේවාදායකයන්ට fediverseවෙතින් අන්තර්ගතය සොයා ගැනීමට උදවු කළ හැකි අතර, එසේ නොමැති නම් දේශීය පරිශීලකයින්ට දුරස්ථ සේවාදායකයන් මත වෙනත් පුද්ගලයින් හස්තීයව අනුගමනය කිරීම අවශ්‍ය වේ." disable: අබල කරන්න - disabled: අබල කර ඇත + disabled: අබලයි enable: සබල කරන්න enable_hint: සක්‍රිය කළ පසු, ඔබේ සේවාදායකය මෙම රිලේ වෙතින් සියලුම පොදු පළ කිරීම් සඳහා දායක වන අතර, මෙම සේවාදායකයේ පොදු පළ කිරීම් එයට යැවීම ආරම්භ කරනු ඇත. enabled: සබල කර ඇත inbox_url: රිලේ URL pending: රිලේ අනුමැතිය සඳහා රැඳී සිටිමින් - save_and_enable: සුරකින්න සහ සක්රිය කරන්න + save_and_enable: සුරකින්න හා සබල කරන්න setup: රිලේ සම්බන්ධතාවයක් සකසන්න signatures_not_enabled: ආරක්ෂිත මාදිලිය හෝ සීමිත ෆෙඩරේෂන් මාදිලිය සබල කර ඇති අතර රිලේ නිවැරදිව ක්‍රියා නොකරනු ඇත status: තත්වය @@ -524,21 +515,21 @@ si: add_to_report: වාර්තා කිරීමට තවත් එක් කරන්න are_you_sure: ඔබට විශ්වාසද? assign_to_self: මට පවරන්න - assigned: පවරා ඇති උපපරිපාලක by_target_domain: වාර්තා කළ ගිණුමෙහි වසම - category: වර්ගය + cancel: අවලංගු + category: ප්‍රවර්ගය category_description_html: මෙම ගිණුම සහ/හෝ අන්තර්ගතය වාර්තා කළ හේතුව වාර්තා කළ ගිණුම සමඟ සන්නිවේදනයේ සඳහන් කරනු ඇත comment: none: කිසිවක් නැත comment_description_html: 'වැඩි විස්තර සැපයීම සඳහා, %{name} ලිවීය:' created_at: වාර්තා කර ඇත - delete_and_resolve: පළ කිරීම් මකන්න - forwarded: යොමු කළා - forwarded_to: "%{domain}වෙත යොමු කරන ලදී" + delete_and_resolve: ලිපි මකන්න + forwarded: හරවා යවා ඇත + forwarded_to: "%{domain} වෙත හරවා යැවිණි" mark_as_resolved: විසඳා ඇති ලෙස ලකුණු කරන්න mark_as_sensitive: සංවේදී ලෙස ලකුණු කරන්න mark_as_unresolved: නොවිසඳුනු ලෙස ලකුණු කරන්න - no_one_assigned: කිසි කෙනෙක නැහැ + no_one_assigned: කිසිවෙක් නැත notes: create: සටහන එකතු කරන්න create_and_resolve: සටහන සමඟ විසඳන්න @@ -546,10 +537,9 @@ si: delete: මකන්න placeholder: ගෙන ඇති ක්‍රියාමාර්ග, හෝ වෙනත් අදාළ යාවත්කාලීන විස්තර කරන්න... title: සටහන් - notes_description_html: අනෙකුත් උපපරිපාලකයින්ට සහ ඔබේ අනාගතයට සටහන් බලන්න සහ තබන්න quick_actions_description_html: 'වාර්තා කළ අන්තර්ගතය බැලීමට ඉක්මන් ක්‍රියාමාර්ගයක් ගන්න හෝ පහළට අනුචලනය කරන්න:' remote_user_placeholder: "%{instance}සිට දුරස්ථ පරිශීලකයා" - reopen: වාර්තාව නැවත විවෘත කරන්න + reopen: වාර්තාව නැවත අරින්න report: "@%{id} වාර්තා කරන්න" reported_account: වාර්තා කළ ගිණුම reported_by: විසින් වාර්තා @@ -562,17 +552,46 @@ si: target_origin: වාර්තා කළ ගිණුමේ ආරම්භය title: වාර්තා unassign: පැවරීම ඉවත් කරන්න + unknown_action_msg: 'නොදන්නා ක්‍රියාමාර්ගයකි: %{action}' unresolved: නොවිසඳී ඇත updated_at: යාවත්කාලීන කරන ලදී view_profile: පැතිකඩ බලන්න + roles: + categories: + administration: පරිපාලනය + devops: DevOps + invites: ඇරයුම් + moderation: මැදිහත්කරණය + special: විශේෂ + delete: මකන්න + privileges: + invite_users: ආරාධනා කරන්න + manage_announcements: නිවේදනය කළමනාකරණය + manage_federation: ඒකාබද්ධ කළමනාකරණය + manage_invites: ආරාධනා කළමනාකරණය + manage_reports: වාර්තා කළමනාකරණය + manage_roles: භූමිකා කළමනාකරණය + manage_rules: නීති කළමනාකරණය + manage_settings: සැකසුම් කළමනාකරණය + manage_user_access: ප්‍රවේශය කළමනාකරණය + manage_users: පරිශ්‍රීලකයින් කළමනාකරණය + view_dashboard: උපකරණ පුවරුව බලන්න + view_devops: DevOps + title: භූමිකා rules: - add_new: නීතිය එකතු කරන්න delete: මකන්න description_html: බොහෝ දෙනා සේවා කොන්දේසි කියවා එකඟ වූ බව ප්‍රකාශ කරන අතර, සාමාන්‍යයෙන් මිනිසුන් ගැටලුවක් පැනනඟින තුරු කියවා නොගනිති. පැතලි බුලට් පොයින්ට් ලිස්ට් එකකින් ඒවා ලබා දීමෙන් බැලූ බැල්මට ඔබේ සේවාදායකයේ නීති බැලීම පහසු කරන්න. තනි නීති කෙටි හා සරලව තබා ගැනීමට උත්සාහ කරන්න, නමුත් ඒවා විවිධ අයිතම වලට බෙදීමට උත්සාහ නොකරන්න. - edit: නීතිය සංස්කරණය කරන්න + edit: නීතිය සංස්කරණය empty: තවමත් සේවාදායක රීති නිර්වචනය කර නොමැත. title: සේවාදායකයේ නීති settings: + about: + manage_rules: සේවාදායකයේ නීති කළමනාකරණය + title: පිළිබඳව + appearance: + title: පෙනුම + discovery: + profile_directory: පැතිකඩ නාමාවලිය domain_blocks: all: හැමෝටම disabled: කාටවත් නෑ @@ -582,26 +601,43 @@ si: approved: ලියාපදිංචි වීමට අනුමැතිය අවශ්‍යයි none: කිසිවෙකුට ලියාපදිංචි විය නොහැක open: ඕනෑම කෙනෙකුට ලියාපදිංචි විය හැක + title: සේවාදායකයේ සැකසුම් site_uploads: delete: උඩුගත කළ ගොනුව මකන්න destroyed_msg: අඩවිය උඩුගත කිරීම සාර්ථකව මකා ඇත! + software_updates: + documentation_link: තව දැනගන්න + release_notes: නිකුතු සටහන් + title: තිබෙන යාවත්කාල + type: වර්ගය + version: අනුවාදය statuses: - back_to_account: ගිණුම් පිටුවට ආපසු යන්න - back_to_report: වාර්තා පිටුවට ආපසු යන්න + account: කර්තෘ + application: යෙදුම + back_to_account: ගිණුමේ පිටුවට ආපසු + back_to_report: වාර්තා පිටුවට ආපසු batch: remove_from_report: වාර්තාවෙන් ඉවත් කරන්න report: වාර්තාව - deleted: මකා දමන ලදී + deleted: මකා ඇත + favourites: ප්‍රියතමයන් + history: අනුවාද ඉතිහාසය + language: භාෂාව media: title: මාධ්‍යය + metadata: පාරදත්ත no_status_selected: කිසිවක් තෝරා නොගත් බැවින් තනතුරු කිසිවක් වෙනස් කර නැත - title: ගිණුම් තනතුරු - with_media: මාධ්‍ය දායකත්වය + open: ලිපිය අරින්න + original_status: මුල් ලිපිය + status_changed: ලිපිය සංශෝධිතයි + title: ගිණුමේ ලිපි + trending: නැගී එන + with_media: මාධ්‍ය සමඟ strikes: actions: - delete_statuses: "%{target}ගේ පළ කිරීම් %{name} මකා දමන ලදී" + delete_statuses: "%{target}ගේ ලිපි %{name} මකා ඇත" disable: "%{name} %{target}ගේ ගිණුම නිශ්චල කළේය" - mark_statuses_as_sensitive: "%{name} %{target}ගේ පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත" + mark_statuses_as_sensitive: "%{target}ගේ ලිපි සංවේදී බව %{name} සලකුණු කර ඇත" none: "%{name} %{target}අනතුරු ඇඟවීමක් යවා ඇත" sensitive: "%{name} %{target}ගේ ගිණුම සංවේදී ලෙස ලකුණු කර ඇත" silence: "%{name} සීමිත %{target}ගිණුමක්" @@ -611,28 +647,35 @@ si: system_checks: database_schema_check: message_html: පොරොත්තු දත්ත සමුදා සංක්‍රමණයන් ඇත. යෙදුම අපේක්ෂිත පරිදි ක්‍රියා කරන බව සහතික කිරීමට කරුණාකර ඒවා ධාවනය කරන්න + elasticsearch_preset: + action: ප්‍රලේඛනය බලන්න + elasticsearch_preset_single_node: + action: ප්‍රලේඛනය බලන්න elasticsearch_running_check: message_html: Elasticsearch වෙත සම්බන්ධ වීමට නොහැකි විය. කරුණාකර එය ක්‍රියාත්මක වන බව පරීක්ෂා කරන්න, නැතහොත් සම්පූර්ණ පෙළ සෙවීම අක්‍රීය කරන්න elasticsearch_version_check: message_html: 'නොගැලපෙන ඉලාස්ටික් සෙවුම් අනුවාදය: %{value}' version_comparison: Elasticsearch %{running_version} ක්‍රියාත්මක වන අතර %{required_version} අවශ්‍ය වේ rules_check: - action: සේවාදායක නීති කළමනාකරණය කරන්න + action: සේවාදායකයේ නීති කළමනාකරණය message_html: ඔබ සේවාදායක රීති කිසිවක් නිර්වචනය කර නැත. sidekiq_process_check: message_html: "%{value} පෝලිම්(ය) සඳහා Sidekiq ක්‍රියාවලියක් ක්‍රියාත්මක නොවේ. කරුණාකර ඔබේ Sidekiq වින්‍යාසය සමාලෝචනය කරන්න" + software_version_critical_check: + action: තිබෙන යාවත්කාල බලන්න + software_version_patch_check: + action: තිබෙන යාවත්කාල බලන්න tags: review: තත්‍වය සමාලෝචනය updated_msg: Hashtag සැකසුම් සාර්ථකව යාවත්කාලීන කරන ලදී title: පරිපාලනය trends: - allow: ඉඩ දෙන්න - approved: අනුමත කළා + allow: ඉඩදෙන්න + approved: අනුමතයි disallow: අවසර නොදෙන්න links: - allow: සබැඳියට ඉඩ දෙන්න + allow: සබැඳියට ඉඩදෙන්න allow_provider: ප්‍රකාශකයාට ඉඩ දෙන්න - description_html: මේවා ඔබගේ සේවාදායකය විසින් පළ කිරීම් දකින ගිණුම් මගින් දැනට බොහෝ සෙයින් බෙදා ගන්නා සබැඳි වේ. එය ඔබගේ පරිශීලකයින්ට ලෝකයේ සිදුවෙමින් පවතින දේ සොයා ගැනීමට උදවු කළ හැක. ඔබ ප්‍රකාශකයා අනුමත කරන තුරු සබැඳි කිසිවක් ප්‍රසිද්ධියේ ප්‍රදර්ශනය නොවේ. ඔබට තනි සබැඳිවලට ඉඩ දීමට හෝ ප්‍රතික්ෂේප කිරීමටද හැකිය. disallow: සබැඳියට ඉඩ නොදෙන්න disallow_provider: ප්‍රකාශකයාට ඉඩ නොදෙන්න shared_by_over_week: @@ -640,7 +683,6 @@ si: other: පසුගිය සතිය පුරා පුද්ගලයින් %{count} දෙනෙකු විසින් බෙදා ගන්නා ලදී title: නැඟී එන සබැඳි usage_comparison: ඊයේ %{yesterday} හා සසඳන විට අද %{today} වරක් බෙදා ගන්නා ලදී - only_allowed: අවසර දී ඇත pending_review: පොරොත්තු සමාලෝචනය preview_card_providers: allowed: මෙම ප්‍රකාශකයාගේ සබැඳි නැඹුරු විය හැක @@ -651,14 +693,13 @@ si: statuses: allow: පළ කිරීමට ඉඩ දෙන්න allow_account: කතුවරයාට ඉඩ දෙන්න - description_html: මේ වන විට ඔබේ සේවාදායකය දන්නා පෝස්ට් මේ වන විට බොහෝ බෙදාහරින සහ මේ මොහොතේ වැඩි කැමැත්තක් දක්වයි. එය ඔබගේ නව සහ නැවත පැමිණෙන පරිශීලකයින්ට අනුගමනය කිරීමට තවත් පුද්ගලයින් සොයා ගැනීමට උදවු කළ හැක. ඔබ කර්තෘ අනුමත කරන තෙක් පළ කිරීම් කිසිවක් ප්‍රසිද්ධියේ නොපෙන්වන අතර, කර්තෘ තම ගිණුම අන් අයට යෝජනා කිරීමට ඉඩ දෙයි. ඔබට තනි පළ කිරීම්වලට ඉඩ දීමට හෝ ප්‍රතික්ෂේප කිරීමටද හැකිය. disallow: පළ කිරීමට ඉඩ නොදෙන්න disallow_account: කතුවරයාට ඉඩ නොදෙන්න not_discoverable: කර්තෘ සොයා ගත හැකි බව තෝරාගෙන නැත shared_by: one: එක් වරක් බෙදාගත් හෝ ප්‍රිය කරන ලදී other: "%{friendly_count} වරක් බෙදාගෙන ප්‍රිය කරන ලදී" - title: ප්‍රවණතා පළ කිරීම් + title: නැගී එන ලිපි tags: current_score: වත්මන් ලකුණු %{score} dashboard: @@ -667,9 +708,8 @@ si: tag_servers_dimension: ඉහළම සේවාදායකයන් tag_servers_measure: විවිධ සේවාදායකයන් tag_uses_measure: සම්පූර්ණ භාවිතය - description_html: මේවා දැනට ඔබගේ සේවාදායකය දකින බොහෝ පළ කිරීම් වල දිස්වන හැෂ් ටැග් වේ. මේ මොහොතේ මිනිසුන් වැඩිපුරම කතා කරන්නේ කුමක් දැයි සොයා ගැනීමට එය ඔබගේ පරිශීලකයින්ට උදවු කළ හැක. ඔබ ඒවා අනුමත කරන තුරු හෑෂ් ටැග් ප්‍රසිද්ධියේ නොපෙන්වයි. - listable: යෝජනා කළ හැක - not_listable: යෝජනා නොකරනු ඇත + listable: යෝජනා කළ හැකිය + not_listable: යෝජනා නොවනු ඇත not_trendable: ප්‍රවණතා යටතේ දිස් නොවනු ඇත not_usable: භාවිතා කළ නොහැක peaked_on_and_decaying: "%{date}හි උච්චතම, දැන් දිරාපත් වෙමින් පවතී" @@ -692,7 +732,6 @@ si: webhooks: add_new: අන්ත ලක්ෂ්‍යය එක් කරන්න delete: මකන්න - description_html: A webhook Mastodon හට තෝරාගත් සිදුවීම් පිළිබඳ තත්‍ය කාලීන දැනුම්දීම් ක් ඔබේම යෙදුමට තල්ලු කිරීමට හැකියාව ලබා දෙයි, එම නිසා ඔබේ යෙදුමට ස්වයංක්‍රීයව ප්‍රතික්‍රියා අවුලුවාලීමට හැකිය. disable: අක්රිය කරන්න disabled: ආබාධිතයි edit: අන්ත ලක්ෂ්‍යය සංස්කරණය කරන්න @@ -700,8 +739,8 @@ si: enable: සබල කරන්න enabled: ක්රියාකාරී enabled_events: - one: 1 සබල කළ සිදුවීමක් - other: "%{count} සබල කළ සිදුවීම්" + one: සබල සිදුවීම් 1 + other: සබල සිදුවීම් %{count} events: සිදුවීම් new: නව webhook rotate_secret: රහස කරකවන්න @@ -718,9 +757,6 @@ si: sensitive: ඔවුන්ගේ ගිණුම සංවේදී ලෙස සලකුණු කිරීමට silence: ඔවුන්ගේ ගිණුම සීමා කිරීමට suspend: ඔවුන්ගේ ගිණුම අත්හිටුවීමට - body: "%{target} යනු %{type}ක් වූ %{date}සිට %{action_taken_by} කින් මධ්‍යස්ථ තීරණයක් අභියාචනා කරයි. ඔවුන් මෙසේ ලිවීය." - next_steps: ඔබට මධ්‍යස්ථ තීරණය අවලංගු කිරීමට අභියාචනය අනුමත කළ හැකිය, නැතහොත් එය නොසලකා හරින්න. - subject: "%{username} යනු %{instance}හි මධ්‍යස්ථ තීරණයකට අභියාචනා කරයි" new_pending_account: body: නව ගිණුමේ විස්තර පහතින්. ඔබට මෙම යෙදුම අනුමත කිරීමට හෝ ප්‍රතික්ෂේප කිරීමට හැකිය. subject: නව ගිණුම සමාලෝචනය සඳහා %{instance} (%{username}) @@ -747,25 +783,25 @@ si: hint_html: ඔබට වෙනත් ගිණුමකින් මෙය වෙත මාරු වීමට අවශ්‍ය නම්, මෙහිදී ඔබට අන්වර්ථ නාමයක් සෑදිය හැක, එය පැරණි ගිණුමෙන් අනුගාමිකයින් මෙම ගිණුමට ගෙන යාමට පෙර අවශ්‍ය වේ. මෙම ක්‍රියාවම හානිකර නොවන සහ ආපසු හැරවිය හැකිවේ. ගිණුම් සංක්‍රමණය පැරණි ගිණුමෙන් ආරම්භ වේ. remove: අන්වර්ථය විසන්ධි කරන්න appearance: - advanced_web_interface: උසස් වියමන අතුරුමුහුණත + advanced_web_interface: සංකීර්ණ අතුරු මුහුණත advanced_web_interface_hint: 'ඔබට ඔබේ සම්පූර්ණ තිරයේ පළල භාවිතා කිරීමට අවශ්‍ය නම්, උසස් වෙබ් අතුරු මුහුණත ඔබට අවශ්‍ය පරිදි එකම වේලාවක බොහෝ තොරතුරු බැලීමට විවිධ තීරු වින්‍යාස කිරීමට ඉඩ දෙයි: නිවස, දැනුම්දීම්, ෆෙඩරේටඩ් කාලරාමුව, ඕනෑම ලැයිස්තු සහ හැෂ් ටැග්.' animations_and_accessibility: සජීවිකරණ සහ ප්‍රවේශ්‍යතාව confirmation_dialogs: තහවුරු කිරීමේ සංවාද discovery: සොයාගැනීම localization: - body: Mastodon ස්වේච්ඡා සේවකයන් විසින් පරිවර්තනය කර ඇත. + body: මාස්ටඩන් ස්වේච්ඡාවෙන් පරිවර්තනය කර ඇත. guide_link: https://crowdin.com/project/mastodon guide_link_text: සෑම කෙනෙකුටම දායක විය හැකිය. - sensitive_content: සංවේදී අන්තර්ගතය + sensitive_content: සංවේදී අන්තර්ගත application_mailer: notification_preferences: ඊමේල් මනාප වෙනස් කරන්න salutation: "%{name}," settings: 'ඊමේල් මනාප වෙනස් කරන්න: %{link}' view: 'දැක්ම:' view_profile: පැතිකඩ බලන්න - view_status: පළ කිරීම බලන්න + view_status: ලිපිය බලන්න applications: - created: යෙදුම සාර්ථකව නිර්මාණය කරන ලදී + created: යෙදුම සාර්ථකව සෑදිණි destroyed: යෙදුම සාර්ථකව මකා ඇත regenerate_token: ප්‍රවේශ ටෝකනය නැවත උත්පාදනය කරන්න token_regenerated: ප්‍රවේශ ටෝකනය සාර්ථකව ප්‍රතිජනනය කරන ලදී @@ -775,9 +811,8 @@ si: delete_account: ගිණුම මකන්න delete_account_html: ඔබට ඔබගේ ගිණුම මකා දැමීමට අවශ්‍ය නම්, ඔබට මෙතැනින් ඉදිරියට යා හැක. තහවුරු කිරීම සඳහා ඔබෙන් අසනු ඇත. description: - prefix_invited_by_user: "@%{name} ඔබට Mastodon හි මෙම සේවාදායකයට සම්බන්ධ වීමට ආරාධනා කරයි!" + prefix_invited_by_user: "@%{name} මෙම මාස්ටඩන් සේවාදායකයට ආරාධනා කර ඇත!" prefix_sign_up: අදම මාස්ටඩන් හි ලියාපදිංචි වන්න! - suffix: ගිණුමක් සමඟ, ඔබට ඕනෑම Mastodon සේවාදායකයකින් සහ තවත් බොහෝ දේ භාවිතා කරන්නන් සමඟ පුද්ගලයින් අනුගමනය කිරීමට, යාවත්කාලීන කිරීම් පළ කිරීමට සහ පණිවිඩ හුවමාරු කර ගැනීමට හැකි වනු ඇත! dont_have_your_security_key: ඔබගේ ආරක්ෂක යතුර නොමැතිද? forgot_password: මුරපදය අමතක වුනාද? invalid_reset_password_token: මුරපද යළි පිහිටුවීමේ ටෝකනය අවලංගු හෝ කල් ඉකුත් වී ඇත. කරුණාකර අලුත් එකක් ඉල්ලන්න. @@ -788,11 +823,13 @@ si: logout: නික්මෙන්න migrate_account: වෙනත් ගිණුමකට යන්න migrate_account_html: ඔබට මෙම ගිණුම වෙනත් එකකට හරවා යැවීමට අවශ්‍ය නම්, ඔබට එය මෙහි වින්‍යාසගත කළ හැක. - or_log_in_with: හෝ සමඟින් පිවිසෙන්න register: ලියාපදිංචිය registration_closed: "%{instance} නව සාමාජිකයින් පිළිගන්නේ නැත" - reset_password: මුරපදය නැවත සකසන්න - security: ආරක්ෂාව + reset_password: මුරපදය යළි සකසන්න + rules: + accept: පිළිගන්න + back: ආපසු + security: ආරක්‍ෂාව set_new_password: නව මුරපදය සකසන්න status: account_status: ගිණුමේ තත්වය @@ -802,11 +839,11 @@ si: redirecting_to: එය දැනට %{acct}වෙත හරවා යවන බැවින් ඔබගේ ගිණුම අක්‍රියයි. view_strikes: ඔබගේ ගිණුමට එරෙහිව පසුගිය වර්ජන බලන්න too_fast: පෝරමය ඉතා වේගයෙන් ඉදිරිපත් කර ඇත, නැවත උත්සාහ කරන්න. - use_security_key: ආරක්ෂක යතුර භාවිතා කරන්න + use_security_key: ආරක්‍ෂණ යතුර භාවිතා කරන්න challenge: confirm: ඉදිරියට hint_html: "ඉඟිය: අපි ඉදිරි පැය සඳහා නැවත ඔබගේ මුරපදය ඔබෙන් නොඉල්ලමු." - invalid_password: නොවන මුරපදයකි + invalid_password: මුරපදය වැරදිය prompt: ඉදිරියට යාමට මුරපදය තහවුරු කරන්න crypto: errors: @@ -814,20 +851,24 @@ si: invalid_signature: වලංගු Ed25519 අත්සනක් නොවේ date: formats: - default: "%b %d, %Y" - with_month_name: "%B %d, %Y" + default: "%Y %b %d" + with_month_name: "%Y %B %d" datetime: distance_in_words: about_x_hours: පැය %{count} about_x_months: මාස %{count} + about_x_years: ව.%{count} + almost_x_years: ව.%{count} half_a_minute: මේ දැන් - less_than_x_minutes: මීටර් %{count} + less_than_x_minutes: විනාඩි %{count} less_than_x_seconds: මේ දැන් - x_minutes: මීටර් %{count} + over_x_years: ව.%{count} + x_days: ද.%{count} + x_minutes: විනාඩි %{count} x_months: මාස %{count} - x_seconds: "%{count}තත්" + x_seconds: තත්. %{count} deletes: - challenge_not_passed: ඔබ ඇතුළත් කළ තොරතුරු නිවැරදි නැත + challenge_not_passed: ඔබ ඇතුල් කරන ලද තොරතුරු වැරදියි confirm_password: ඔබගේ අනන්‍යතාවය තහවුරු කිරීමට ඔබගේ වත්මන් මුරපදය ඇතුලත් කරන්න confirm_username: ක්රියා පටිපාටිය තහවුරු කිරීමට ඔබගේ පරිශීලක නාමය ඇතුලත් කරන්න proceed: ගිණුම මකන්න @@ -875,6 +916,9 @@ si: your_appeal_rejected: ඔබගේ අභියාචනය ප්‍රතික්ෂේප කර ඇත domain_validator: invalid_domain: වලංගු ඩොමේන් නාමයක් නොවේ + edit_profile: + basic_information: මූලික තොරතුරු + other: වෙනත් errors: '400': ඔබ ඉදිරිපත් කළ ඉල්ලීම අවලංගු හෝ විකෘති විය. '403': ඔබට මෙම පිටුව බැලීමට අවසර නැත. @@ -884,27 +928,28 @@ si: '422': content: ආරක්ෂක සත්‍යාපනය අසාර්ථක විය. ඔබ කුකීස් අවහිර කරනවාද? title: ආරක්ෂක සත්‍යාපනය අසාර්ථක විය - '429': ඉල්ලීම් වැඩියි + '429': ඉල්ලීම් බොහෝය '500': content: අපට කණගාටුයි, නමුත් අපගේ පැත්තෙන් යමක් වැරදී ඇත. - title: මෙම පිටුව නිවැරදි නොවේ + title: මෙම පිටුව වැරදියි '503': තාවකාලික සේවාදායකයේ අසාර්ථක වීමක් හේතුවෙන් පිටුව සේවය කිරීමට නොහැකි විය. - noscript_html: Mastodon වෙබ් යෙදුම භාවිතා කිරීමට, කරුණාකර JavaScript සක්‍රීය කරන්න. විකල්පයක් ලෙස, ඔබේ වේදිකාව සඳහා එකක් උත්සාහ කරන්න. + noscript_html: මාස්ටඩන් වියමන යෙදුම භාවිතා කිරීමට ජාවාස්ක්‍රිප්ට් සබල කරන්න. ඊට අමතරව, ඔබගේ වේදිකාව සඳහා වන නිසග යෙදුමක් අත්හදා බලන්න. existing_username_validator: not_found: එම පරිශීලක නාමය සහිත දේශීය පරිශීලකයෙකු සොයා ගැනීමට නොහැකි විය not_found_multiple: "%{usernames}සොයා ගැනීමට නොහැකි විය" exports: archive_takeout: date: දිනය - download: ඔබගේ සුරක්ෂිතභාවය බාගන්න + download: ඔබගේ සංරක්‍ෂිතය බාගන්න hint_html: ඔබට ඔබගේ පළ කිරීම් සහ උඩුගත කළ මාධ්‍යහි සංරක්ෂිතයක් ඉල්ලා සිටිය හැක. නිර්යාත කළ දත්ත ActivityPub ආකෘතියෙන්, ඕනෑම අනුකූල මෘදුකාංගයකට කියවිය හැකිය. ඔබට දින 7කට වරක් ලේඛනාගාරයක් ඉල්ලා සිටිය හැක. in_progress: ඔබගේ සංරක්ෂිතය සම්පාදනය කරමින්... request: ඔබගේ සංරක්ෂිතය ඉල්ලන්න size: ප්‍රමාණය blocks: ඔබ අවහිර කරන්න - bookmarks: පොත් යොමු කරන්න + bookmarks: පොත්යොමු + csv: CSV domain_blocks: වසම් අවහිර කිරීම් - lists: ලැයිස්තුව + lists: ලැයිස්තු mutes: ඔබ නිහඬ කරන්න storage: මාධ්‍ය ගබඩාව featured_tags: @@ -913,13 +958,14 @@ si: filters: contexts: account: පැතිකඩයන් - home: නිවස සහ ලැයිස්තු + home: මුල සහ ලැයිස්තු notifications: දැනුම්දීම් public: පොදු කාලරේඛා thread: සංවාද edit: add_keyword: මූල පදය එක් කරන්න keywords: මූල පද + statuses: තනි ලිපි title: පෙරහන සංස්කරණය errors: deprecated_api_multiple_keywords: මෙම පරාමිති පෙරහන් මූල පද එකකට වඩා අදාළ වන බැවින් මෙම යෙදුමෙන් වෙනස් කළ නොහැක. වඩාත් මෑත යෙදුමක් හෝ වෙබ් අතුරු මුහුණතක් භාවිතා කරන්න. @@ -927,21 +973,32 @@ si: index: contexts: "%{contexts}හි පෙරහන්" delete: මකන්න - empty: ඔබට පෙරහන් නොමැත. - expires_in: "%{distance}කින් කල් ඉකුත් වේ" - expires_on: "%{date}දින කල් ඉකුත් වේ" + empty: ඔබ සතුව පෙරහන් නැත. + expires_in: "%{distance} කින් ඉකුත් වේ" + expires_on: "%{date} දී ඉකුත් වේ" keywords: - one: "%{count} මූල පදය" - other: "%{count} මූල පද" + one: මූල පද %{count} + other: මූල පද %{count} + statuses: + one: ලිපි %{count} + other: ලිපි %{count} title: පෙරහන් new: save: නව පෙරහන සුරකින්න title: නව පෙරහනක් එකතු කරන්න + statuses: + back_to_filter: පෙරහනට ආපසු + batch: + remove: පෙරහනෙන් ඉවතලන්න + index: + title: පෙරූ ලිපි generic: all: සියල්ල - changes_saved_msg: වෙනස්කම් සාර්ථකව සුරකින ලදී! + cancel: අවලංගු + changes_saved_msg: වෙනස්කම් සාර්ථකව සුරැකිණි! copy: පිටපතක් delete: මකන්න + deselect: සියල්ල නොතෝරන්න none: කිසිවක් නැත order_by: විසින් ඇණවුම් කරන්න save_changes: වෙනස්කම් සුරකින්න @@ -951,24 +1008,30 @@ si: other: යමක් තවමත් හරි නැත! කරුණාකර පහත දෝෂ %{count} ක් සමාලෝචනය කරන්න imports: errors: + empty: හිස් CSV ගොනුවකි over_rows_processing_limit: පේළි %{count} කට වඩා අඩංගු වේ + too_large: ගොනුව ඉතා විශාලයි + imported: ආයාත විය modes: - merge: ඒකාබද්ධ කරන්න + merge: ඒකාබද්ධ merge_long: පවතින වාර්තා තබා නව ඒවා එකතු කරන්න overwrite: උඩින් ලියන්න overwrite_long: වත්මන් වාර්තා නව ඒවා සමඟ ප්‍රතිස්ථාපනය කරන්න preface: ඔබ අනුගමන කරන හෝ අවහිර කරන පුද්ගලයින්ගේ ලැයිස්තුවක් වැනි වෙනත් සේවාදායකයකින් ඔබ නිර්යාත කර ඇති දත්ත ඔබට ආයාත කළ හැක. success: ඔබගේ දත්ත සාර්ථකව උඩුගත කර ඇති අතර නියමිත වේලාවට සැකසෙනු ඇත + titles: + lists: ලැයිස්තු ආයාත වෙමින් types: - blocking: අවහිර කිරීමේ ලැයිස්තුව - bookmarks: පොත් යොමු - domain_blocking: වසම් අවහිර කිරීමේ ලැයිස්තුව - following: පහත ලැයිස්තුව + blocking: අවහිර ලැයිස්තුව + bookmarks: පොත්යොමු + domain_blocking: වසම් අවහිර ලැයිස්තුව + following: අනුගමන ලැයිස්තුව + lists: ලැයිස්තු muting: නිහඬ කිරීමේ ලැයිස්තුව upload: උඩුගත කරන්න invites: - delete: අක්රිය කරන්න - expired: කල් ඉකුත් වී ඇත + delete: අක්‍රිය කරන්න + expired: ඉකුත් වී ඇත expires_in: '1800': විනාඩි 30 '21600': පැය 6 @@ -987,7 +1050,7 @@ si: table: expires_at: කල් ඉකුත් වේ uses: භාවිතා කරයි - title: මිනිසුන්ට ආරාධනා කරන්න + title: ආරාධනා කරන්න login_activities: authentication_methods: otp: ද්වි-සාධක සත්‍යාපන යෙදුම @@ -1036,7 +1099,7 @@ si: other_data: වෙනත් දත්ත කිසිවක් ස්වයංක්‍රීයව ගෙන නොයනු ඇත redirect: ඔබගේ ජංගම ගිණුමේ පැතිකඩ යළි-යොමු කිරීමේ දැන්වීමක් සමඟ යාවත්කාලීන කෙරෙන අතර සෙවුම් වලින් බැහැර කරනු ලැබේ moderation: - title: මධ්යස්ථභාවය + title: මැදිහත්කරණය move_handler: carry_blocks_over_text: මෙම පරිශීලකයා ඔබ අවහිර කර තිබූ %{acct}සිට මාරු විය. carry_mutes_over_text: මෙම පරිශීලකයා ඔබ නිශ්ශබ්ද කර තිබූ %{acct}වෙතින් මාරු විය. @@ -1044,37 +1107,31 @@ si: notification_mailer: admin: report: - subject: "%{name} වාර්තාවක් ඉදිරිපත් කළේය" + subject: "%{name} වාර්තාවක් යොමු කර ඇත" sign_up: subject: "%{name} අත්සන් කර ඇත" favourite: - body: 'ඔබේ පළ කිරීම %{name}විසින් ප්‍රිය කරන ලදී:' - subject: "%{name} ඔබගේ පළ කිරීම ප්‍රිය කරන ලදී" - title: නව ප්රියතම + body: "%{name} ඔබගේ ලිපියට ප්‍රිය කළා:" + subject: "%{name} ඔබගේ ලිපියට ප්‍රිය කළා" + title: නව ප්‍රියතමය follow: body: "%{name} දැන් ඔබව අනුගමනය කරයි!" subject: "%{name} දැන් ඔබව අනුගමනය කරයි" title: නව අනුගාමිකයෙක් follow_request: - action: අනුගමනය කරන ඉල්ලීම් කළමනාකරණය කරන්න + action: අනුගමන ඉල්ලීම් කළමනාකරණය body: "%{name} ඔබව අනුගමනය කිරීමට ඉල්ලා ඇත" subject: 'පොරොත්තු අනුගාමිකයා: %{name}' - title: නව අනුගමනය ඉල්ලීම + title: නව අනුගමන ඉල්ලීම mention: action: පිළිතුර - body: 'ඔබව මෙහි %{name} කින් සඳහන් කර ඇත:' - subject: ඔබව %{name}මගින් සඳහන් කර ඇත + body: "%{name} ඔබව මෙහි සඳහන් කර ඇත:" + subject: "%{name} ඔබව සඳහන් කර ඇත" title: නව සඳැහුම - poll: - subject: "%{name} න් මත විමසුමක් අවසන් විය" - reblog: - body: 'ඔබේ පළ කිරීම %{name}කින් වැඩි කරන ලදී:' - subject: "%{name} ඔබේ පළ කිරීම ඉහළ නැංවීය" - title: නව තල්ලුවක් status: subject: "%{name} දැන් පළ කළා" update: - subject: "%{name} පළ කිරීමක් සංස්කරණය කළා" + subject: "%{name} ලිපිය සංශෝධනය කළා" notifications: email_events: ඊමේල් දැනුම්දීම් සඳහා සිදුවීම් email_events_hint: 'ඔබට දැනුම්දීම් ලැබීමට අවශ්‍ය සිදුවීම් තෝරන්න:' @@ -1084,11 +1141,8 @@ si: decimal_units: format: "%n%u" units: - billion: බී million: ද.ල. - quadrillion: ප්‍රශ්නය thousand: ද. - trillion: ටී otp_authentication: code_hint: තහවුරු කිරීමට ඔබගේ සත්‍යාපන යෙදුම මගින් ජනනය කරන ලද කේතය ඇතුළු කරන්න description_html: ඔබ සත්‍යාපන යෙදුමක් භාවිතයෙන් ද්වි-සාධක සත්‍යාපනය සක්‍රීය කරන්නේ නම්, ලොගින් වීමේදී ඔබට ඔබගේ දුරකථනය සන්තකයේ තබා ගැනීමට අවශ්‍ය වනු ඇත, එය ඔබට ඇතුළු වීමට ටෝකන ජනනය කරයි. @@ -1105,19 +1159,21 @@ si: truncate: "…" polls: errors: - already_voted: ඔබ දැනටමත් මෙම මත විමසුමට ඡන්දය දී ඇත - duplicate_options: අනුපිටපත් අයිතම අඩංගු වේ + already_voted: ඔබ මෙම මත විමසුමට ඡන්දය දී ඇත duration_too_long: අනාගතයට බොහෝ දුරයි - duration_too_short: ඉතා ඉක්මනින් වේ - expired: මත විමසුම දැනටමත් අවසන් වී ඇත + expired: මත විමසුම දැනටමත් නිමා වී ඇත invalid_choice: තෝරාගත් ඡන්ද විකල්පය නොපවතී - over_character_limit: එක් එක් අක්ෂර %{max} ට වඩා දිගු විය නොහැක - too_few_options: එක් අයිතමයකට වඩා තිබිය යුතුය - too_many_options: අයිතම %{max} කට වඩා අඩංගු විය නොහැක + self_vote: ඔබගේ මත විමසුමට ජන්දය දීමට නොහැකිය + too_few_options: එක් අථකයකට වඩා තිබිය යුතුය + too_many_options: අථක %{max} කට වඩා අඩංගු නොවිය යුතුය preferences: other: වෙනත් posting_defaults: පෙරනිමි පළ කිරීම public_timelines: පොදු කාලරේඛා + privacy: + search: සොයන්න + privacy_policy: + title: රහස්‍යතා ප්‍රතිපත්තිය reactions: errors: limit_reached: විවිධ ප්‍රතික්‍රියා වල සීමාව ළඟා විය @@ -1133,7 +1189,7 @@ si: most_recent: මෑතකාලීන moved: මාරු කළා mutual: අන්යෝන්ය - primary: ප්රාථමික + primary: ප්‍රාථමික relationship: සම්බන්ධතාවය remove_selected_domains: තෝරාගත් වසම් වලින් සියලුම අනුගාමිකයින් ඉවත් කරන්න remove_selected_followers: තෝරාගත් අනුගාමිකයින් ඉවත් කරන්න @@ -1158,36 +1214,45 @@ si: browser: අතිරික්සුව browsers: alipay: අලිපේ + blackberry: බ්ලැක්බෙරි chrome: ක්‍රෝම් edge: මයික්‍රොසොෆ්ට් එඩ්ගේ electron: ඉලෙක්ට්‍රෝන් firefox: ෆයර්ෆොක්ස් generic: නොදන්නා අතිරික්සුවකි + huawei_browser: හුආවේ අතිරික්සුව ie: ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් micro_messenger: මයික්‍රොමැසෙන්ජර් - nokia: Nokia S40 Ovi බ්‍රව්සරය + nokia: නොකියා S40 Ovi අතිරික්සුව opera: ඔපෙරා otter: ඔටර් + phantom_js: PhantomJS qq: කියුකියු අතිරික්සුව safari: සෆාරි + uc_browser: UC අතිරික්සුව + unknown_browser: නොදන්නා අතිරික්සුවකි weibo: වෙයිබො - current_session: වත්මන් සැසිය - description: "%{browser} මත %{platform}" - explanation: මේවා දැනට ඔබගේ Mastodon ගිණුමට ලොග් වී ඇති වෙබ් බ්‍රව්සර් වේ. + current_session: වත්මන් වාරය + description: "%{platform} හි %{browser}" + explanation: ඔබගේ මාස්ටඩන් ගිණුමට පිවිසීම සඳහා භාවිතා කර තිබෙන අතිරික්සු. ip: අ.ජා. කෙ. (IP) platforms: adobe_air: ඇඩෝබි එයාර් android: ඇන්ඩ්‍රොයිඩ් + blackberry: බ්ලැක්බෙරි + chrome_os: ChromeOS firefox_os: ෆයර්ෆොක්ස් ඕඑස් ios: අයිඕඑස් + kai_os: KaiOS linux: ලිනක්ස් mac: මැක්ඕඑස් + unknown_platform: නොදන්නා වේදිකාවකි windows: වින්ඩෝස් windows_mobile: වින්ඩෝස් මොබයිල් windows_phone: වින්ඩෝස් පෝන් revoke: අවලංගු කරන්න - revoke_success: සැසිය සාර්ථකව අවලංගු කරන ලදී - title: සැසිවාර + revoke_success: වාරය සාර්ථකව අවලංගු කෙරිණි + title: වාර view_authentication_history: ඔබගේ ගිණුමේ සත්‍යාපන ඉතිහාසය බලන්න settings: account: ගිණුම @@ -1195,8 +1260,8 @@ si: aliases: ගිණුම් අන්වර්ථ නාමයන් appearance: පෙනුම authorized_apps: අවසර ලත් යෙදුම් - back: Mastodon වෙත නැවත යන්න - delete: ගිණුම මකා දැමීම + back: මාස්ටඩන් වෙත ආපසු + delete: ගිණුම මැකීම development: සංවර්ධනය edit_profile: පැතිකඩ සංස්කරණය export: දත්ත නිර්යාතය @@ -1205,13 +1270,12 @@ si: import_and_export: ආයාත හා නිර්යාත migrate: ගිණුම් සංක්‍රමණය notifications: දැනුම්දීම් - preferences: මනාප - profile: පැතිකඩ + preferences: අභිප්‍රේත + profile: ප්‍රසිද්ධ පැතිකඩ relationships: අනුගාමිකයින් සහ අනුගාමිකයින් statuses_cleanup: ස්වයංක්‍රීය පළ කිරීම් මකාදැමීම - strikes: මධ්‍යස්ථ වැඩ වර්ජන two_factor_authentication: ද්වි සාධක Aut - webauthn_authentication: ආරක්ෂක යතුරු + webauthn_authentication: ආරක්‍ෂණ යතුරු statuses: attached: audio: @@ -1219,14 +1283,13 @@ si: other: "%{count} ශ්රව්ය" description: 'අමුණා ඇත: %{attached}' image: - one: "%{count} රූපය" - other: පින්තූර %{count} + one: රූප %{count} + other: රූප %{count} video: - one: "%{count} වීඩියෝ" - other: වීඩියෝ %{count} - boosted_from_html: "%{acct_link}සිට වැඩි කරන ලදී" + one: දෘශ්‍යක %{count} + other: දෘශ්‍යක %{count} content_warning: 'අන්තර්ගත අනතුරු ඇඟවීම: %{warning}' - default_language: අතුරු මුහුණත් භාෂාවට සමානයි + default_language: අතුරු මුහුණතේ භාෂාවම disallowed_hashtags: one: 'අනුමත නොකළ හැෂ් ටැගයක් අඩංගු විය: %{tags}' other: 'අනුමත නොකළ හැෂ් ටැග් අඩංගු විය: %{tags}' @@ -1239,15 +1302,14 @@ si: direct: සඳහන් කළ පරිශීලකයින්ට පමණක් පෙනෙන පළ කිරීම් ඇමිණිය නොහැක limit: ඔබ දැනටමත් උපරිම පළ කිරීම් සංඛ්‍යාව අමුණා ඇත ownership: වෙනත් කෙනෙකුගේ පළ කිරීමක් ඇමිණිය නොහැක - reblog: බූස්ට් එකක් ඇලවිය නොහැක poll: total_people: - one: "%{count} පුද්ගලයෙක්" - other: පුද්ගලයන් %{count} + one: පුද්ගලයින් %{count} + other: පුද්ගලයින් %{count} total_votes: - one: "%{count} ඡන්ද" + one: ඡන්ද %{count} යි other: ඡන්ද %{count} යි - vote: ඡන්දය දෙන්න + vote: ඡන්දය show_more: තව පෙන්වන්න show_newer: අලුත්ම පෙන්වන්න show_older: පැරණි පෙන්වන්න @@ -1264,37 +1326,32 @@ si: statuses_cleanup: enabled: පැරණි පළ කිරීම් ස්වයංක්‍රීයව මකන්න enabled_hint: ඔබේ පළ කිරීම් පහත ව්‍යතිරේකවලින් එකකට ගැලපෙන්නේ නම් මිස, ඒවා නිශ්චිත වයස් සීමාවකට ළඟා වූ පසු ස්වයංක්‍රීයව මකයි - exceptions: ව්යතිරේක + exceptions: හැර දැමීම් explanation: පළ කිරීම් මකා දැමීම මිල අධික මෙහෙයුමක් වන බැවින්, සේවාදායකය වෙනත් ආකාරයකින් කාර්යබහුල නොවන විට කාලයත් සමඟ මෙය සෙමින් සිදු කෙරේ. මෙම හේතුව නිසා, ඔබේ පළ කිරීම් වයස් සීමාවට ළඟා වූ පසු ටික වේලාවකට පසුව මකා දැමිය හැක. - ignore_favs: ප්‍රියතමයන් නොසලකා හරින්න - ignore_reblogs: වැඩි කිරීම් නොසලකා හරින්න + ignore_favs: ප්‍රියතමයන් නොසලකන්න interaction_exceptions: අන්තර්ක්‍රියා මත පදනම් වූ ව්‍යතිරේක - interaction_exceptions_explanation: පළ කිරීම් වරක් ඒවා ඉක්මවා ගිය පසු ප්‍රියතම හෝ බූස්ට් සීමාවට පහළින් ගියහොත් ඒවා මැකීමට සහතිකයක් නොමැති බව සලකන්න. - keep_direct: සෘජු පණිවිඩ තබා ගන්න - keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මකන්නේ නැත - keep_media: මාධ්‍ය ඇමුණුම් සමඟ පළ කිරීම් තබා ගන්න + keep_direct: සෘජු පණිවිඩ තබාගන්න + keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මැකෙන්නේ නැත + keep_media: මාධ්‍ය ඇමුණුම් සහිත ලිපි තබාගන්න keep_media_hint: මාධ්‍ය ඇමුණුම් ඇති ඔබේ පළ කිරීම් කිසිවක් මකන්නේ නැත keep_pinned: ඇමිණූ ලිපි තබාගන්න keep_pinned_hint: ඔබ ඇමිණූ ලිපි කිසිවක් නොමැකෙයි - keep_polls: ඡන්ද තබා ගන්න - keep_polls_hint: ඔබගේ ඡන්ද විමසීම් කිසිවක් මකන්නේ නැත - keep_self_bookmark: ඔබ පිටු සලකුණු කළ පළ කිරීම් තබා ගන්න - keep_self_bookmark_hint: ඔබ ඔබේම පළ කිරීම් පිටු සලකුණු කර ඇත්නම් ඒවා මකා නොදමන්න - keep_self_fav: ඔබ කැමති පළ කිරීම් තබා ගන්න - keep_self_fav_hint: ඔබ ඒවාට කැමති නම් ඔබේම පළ කිරීම් මකා නොදමන්න + keep_polls_hint: ඔබගේ මත විමසුම් මැකෙන්නේ නැත + keep_self_bookmark: ඔබ පොත්යොමු තැබූ ලිපි තබාගන්න + keep_self_bookmark_hint: ඔබගේම ලිපි වලට පොත්යොමු තබා ඇත්නම් ඒවා මකා නොදැමෙයි + keep_self_fav: ඔබ ප්‍රිය කළ ලිපි තබාගන්න + keep_self_fav_hint: ඔබගේම ලිපි වලට ප්‍රිය කර ඇත්නම් ඒවා මකා නොදැමෙයි min_age: - '1209600': සති 2 යි - '15778476': මාස 6 යි - '2629746': මාස 1 යි - '31556952': වසර 1 යි - '5259492': මාස 2 ක් - '604800': 1 සතිය - '63113904': අවුරුදු 2 ක් - '7889238': මාස 3 යි + '1209600': සති 2 + '15778476': මාස 6 + '2629746': මාස 1 + '31556952': අවුරුදු 1 + '5259492': මාස 2 + '604800': සති 1 + '63113904': අවුරුදු 2 + '7889238': මාස 3 min_age_label: වයස් සීමාව - min_favs: අඩුම තරමින් පෝස්ට් ප්‍රිය කරන ලෙස තබා ගන්න - min_reblogs: අඩුම තරමේ පෝස්ට් බූස්ට් කරගෙන තියාගන්න - min_reblogs_hint: අඩුම තරමින් මෙම වාර ගණන වැඩි කර ඇති ඔබගේ පළ කිරීම් කිසිවක් මකා නොදමන්න. බූස්ට් ගණන නොතකා පළ කිරීම් මැකීමට හිස්ව තබන්න + min_favs: අවම වශයෙන් ප්‍රිය කළ ලිපි තබාගන්න stream_entries: sensitive_content: සංවේදී අන්තර්ගතයකි strikes: @@ -1303,11 +1360,15 @@ si: tags: does_not_match_previous_name: පෙර නමට නොගැලපේ themes: - contrast: Mastodon (ඉහළ වෙනස) - default: මැස්ටෝඩන් (අඳුරු) - mastodon-light: මැස්ටෝඩන් (ආලෝකය) + default: මාස්ටඩන් (අඳුරු) + mastodon-light: මාස්ටඩන් (දීප්ත) + time: + formats: + default: "%Y %b %d, %H:%M" + month: "%Y %b" + with_time_zone: "%Y %b %d, %H:%M %Z" two_factor_authentication: - add: එකතු කරන්න + add: එකතු disable: 2FA අබල කරන්න disabled_success: ද්වි-සාධක සත්‍යාපනය සාර්ථකව අබල කර ඇත edit: සංස්කරණය @@ -1332,11 +1393,11 @@ si: subject: "%{date} සිට ඔබගේ අභියාචනය ප්‍රතික්ෂේප කර ඇත" title: අභියාචනය ප්‍රතික්ෂේප විය backup_ready: - explanation: ඔබ ඔබේ Mastodon ගිණුමේ සම්පූර්ණ උපස්ථයක් ඉල්ලා ඇත. එය දැන් බාගත කිරීම සඳහා සූදානම්! + explanation: ඔබගේ මාස්ටඩන් ගිණුමේ පූර්ණ උපස්ථයක් ඉල්ලා ඇත. එය දැන් බාගැනීමට හැකිය! subject: ඔබගේ සංරක්ෂිතය බාගැනීමට සූදානම්ය title: සංරක්ෂිත රැගෙන යාම suspicious_sign_in: - change_password: ඔබගේ මුරපදය වෙනස් කරන්න + change_password: මුරපදය වෙනස් කරන්න details: 'පුරනය වීමේ විස්තර මෙන්න:' explanation: අපි නව IP ලිපිනයකින් ඔබගේ ගිණුමට පුරනය වීමක් අනාවරණය කරගෙන ඇත. further_actions_html: මෙය ඔබ නොවේ නම්, අපි ඔබට වහාම %{action} ලෙස නිර්දේශ කර ඔබගේ ගිණුම සුරක්ෂිතව තබා ගැනීමට සාධක දෙකක සත්‍යාපනය සබල කරන්න. @@ -1349,9 +1410,7 @@ si: spam: ආයාචිත තැපැල් violation: අන්තර්ගතය පහත ප්‍රජා මාර්ගෝපදේශ උල්ලංඝනය කරයි explanation: - delete_statuses: ඔබගේ සමහර පළ කිරීම් ප්‍රජා මාර්ගෝපදේශ එකක් හෝ කිහිපයක් උල්ලංඝනය කරන බව සොයා ගෙන ඇති අතර පසුව %{instance}හි උපපරිපාලකයින් විසින් ඉවත් කර ඇත. disable: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැක, නමුත් ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත නොවෙනස්ව පවතී. ඔබට ඔබගේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට, ගිණුම් සැකසීම් වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට හැකිය. - mark_statuses_as_sensitive: ඔබගේ සමහර පළ කිරීම් %{instance}හි පරිපාලකයින් විසින් සංවේදී ලෙස සලකුණු කර ඇත. මෙයින් අදහස් කරන්නේ පෙරදසුනක් දර්ශනය වීමට පෙර පුද්ගලයින්ට පළ කිරීම් වල මාධ්‍ය තට්ටු කිරීමට අවශ්‍ය වනු ඇති බවයි. අනාගතයේදී පළ කිරීමේදී ඔබට මාධ්‍ය සංවේදී ලෙස සලකුණු කළ හැක. sensitive: මෙතැන් සිට, ඔබගේ උඩුගත කරන ලද සියලුම මාධ්‍ය ගොනු සංවේදී ලෙස සලකුණු කර ක්ලික්-හරහා අනතුරු ඇඟවීමක් පිටුපස සඟවනු ඇත. silence: ඔබට තවමත් ඔබගේ ගිණුම භාවිතා කළ හැකි නමුත් දැනටමත් ඔබව අනුගමනය කරන පුද්ගලයින් පමණක් මෙම සේවාදායකයේ ඔබගේ පළ කිරීම් දකිනු ඇති අතර, විවිධ සොයාගැනීම් විශේෂාංග වලින් ඔබව බැහැර කරනු ලැබිය හැක. කෙසේ වෙතත්, අනෙක් අය තවමත් ඔබව අතින් අනුගමනය කළ හැක. suspend: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැකි අතර, ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත තවදුරටත් ප්‍රවේශ විය නොහැක. දින 30කින් පමණ දත්ත සම්පූර්ණයෙන් ඉවත් කරන තෙක් ඔබට තවමත් ඔබේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට පුරනය විය හැක, නමුත් ඔබව අත්හිටුවීම මගහැර යාම වැළැක්වීමට අපි මූලික දත්ත කිහිපයක් රඳවා ගන්නෙමු. @@ -1361,25 +1420,25 @@ si: delete_statuses: "%{acct} හි ඔබගේ පළ කිරීම් ඉවත් කර ඇත" disable: ඔබගේ ගිණුම %{acct} කර ඇත mark_statuses_as_sensitive: "%{acct} හි ඔබගේ පළ කිරීම් සංවේදී ලෙස සලකුණු කර ඇත" - none: "%{acct}සඳහා අනතුරු ඇඟවීම" - sensitive: "%{acct} හි ඔබගේ පළ කිරීම් මෙතැන් සිට සංවේදී ලෙස සලකුණු කෙරේ" + none: "%{acct} සඳහා අවවාදය" + sensitive: ඔබගේ %{acct} ලිපිය මේ මොහොතේ සිට සංවේදී ලෙස සලකයි silence: ඔබගේ ගිණුම %{acct} සීමා කර ඇත suspend: ඔබගේ ගිණුම %{acct} අත්හිටුවා ඇත title: - delete_statuses: පළ කිරීම් ඉවත් කරන ලදී + delete_statuses: ලිපි ඉවත් කර ඇත disable: ගිණුම නිශ්චල කර ඇත mark_statuses_as_sensitive: පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත none: අවවාදයයි - sensitive: ගිණුම සංවේදී ලෙස ලකුණු කර ඇත - silence: ගිණුම සීමා සහිතයි + sensitive: ගිණුම සංවේදී බව යොදා ඇත + silence: ගිණුම සීමා කර ඇත suspend: ගිණුම අත්හිටුවා ඇත welcome: - edit_profile_action: සැකසුම් පැතිකඩ + edit_profile_action: පැතිකඩ පිහිටුවන්න explanation: ඔබ ආරම්භ කිරීමට උපදෙස් කිහිපයක් මෙන්න - final_action: පළ කිරීම ආරම්භ කරන්න + final_action: ලිපි පළ කරන්න full_handle: ඔබේ සම්පූර්ණ හසුරුව full_handle_hint: මෙය ඔබ ඔබේ මිතුරන්ට පවසනු ඇත, එවිට ඔවුන්ට වෙනත් සේවාදායකයකින් ඔබට පණිවිඩ යැවීමට හෝ අනුගමනය කිරීමට හැකිය. - subject: Mastodon වෙත සාදරයෙන් පිළිගනිමු + subject: මාස්ටඩන් වෙත පිළිගනිමු title: නැවට සාදරයෙන් පිළිගනිමු, %{name}! users: follow_limit_reached: ඔබට පුද්ගලයින් %{limit} කට වඩා අනුගමනය කළ නොහැක @@ -1388,9 +1447,10 @@ si: seamless_external_login: ඔබ බාහිර සේවාවක් හරහා ලොග් වී ඇත, එබැවින් මුරපදය සහ ඊමේල් සැකසුම් නොමැත. signed_in_as: 'මෙසේ පුරනය වී ඇත:' verification: - verification: සත්යාපනය + here_is_how: කෙසේදැයි මෙන්න + verification: සත්‍යාපනය webauthn_credentials: - add: නව ආරක්ෂක යතුර එක් කරන්න + add: නව ආරක්‍ෂණ යතුර එක් කරන්න create: error: ඔබගේ ආරක්ෂක යතුර එක් කිරීමේ ගැටලුවක් ඇති විය. කරුණාකර නැවත උත්සාහ කරන්න. success: ඔබගේ ආරක්ෂක යතුර සාර්ථකව එක් කරන ලදී. @@ -1400,9 +1460,9 @@ si: destroy: error: ඔබගේ ආරක්ෂක යතුර මැකීමේ ගැටලුවක් ඇති විය. කරුණාකර නැවත උත්සාහ කරන්න. success: ඔබගේ ආරක්ෂක යතුර සාර්ථකව මකා ඇත. - invalid_credential: වලංගු නොවන ආරක්ෂක යතුර + invalid_credential: ආරක්‍ෂණ යතුර වලංගු නොවේ nickname_hint: ඔබගේ නව ආරක්ෂක යතුරේ අන්වර්ථ නාමය ඇතුළත් කරන්න not_enabled: ඔබ තවමත් WebAuthn සබල කර නැත not_supported: මෙම බ්‍රවුසරය ආරක්ෂක යතුරු සඳහා සහය නොදක්වයි otp_required: ආරක්ෂක යතුරු භාවිතා කිරීමට කරුණාකර පළමුව ද්වි-සාධක සත්‍යාපනය සක්‍රීය කරන්න. - registered_on: "%{date}හි ලියාපදිංචි වී ඇත" + registered_on: "%{date} දී ලියාපදිංචි වී ඇත" diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index 23e63ef42c059e..917d3791f66f36 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -7,10 +7,9 @@ si: account_migration: acct: ඔබට යාමට අවශ්‍ය ගිණුමේ username@domain සඳහන් කරන්න account_warning_preset: - text: ඔබට URL, හෑෂ් ටැග් සහ සඳහන් කිරීම් වැනි පෝස්ට් සින්ටැක්ස් භාවිතා කළ හැක + text: ඔබට ඒ.ස.නි., පූරක අනන්‍යන සහ සැඳහුම් වැනි ලිපි පද ගැළපුම් භාවිතා කිරීමට හැකිය title: විකල්ප. ලබන්නාට නොපෙනේ admin_account_action: - include_statuses: මධ්‍යස්ථ ක්‍රියාව හෝ අනතුරු ඇඟවීමට හේතු වී ඇත්තේ කුමන පළ කිරීම්දැයි පරිශීලකයා දකිනු ඇත send_email_notification: පරිශීලකයාට ඔවුන්ගේ ගිණුම සමඟ සිදු වූ දේ පිළිබඳ පැහැදිලි කිරීමක් ලැබෙනු ඇත text_html: විකල්ප. ඔබට post syntax භාවිතා කළ හැක. කාලය ඉතිරි කර ගැනීම සඳහා ඔබට අනතුරු ඇඟවීමේ කළ හැක type_html: "%{acct}සමඟ කළ යුතු දේ තෝරන්න" @@ -38,17 +37,16 @@ si: email: ඔබට තහවුරු කිරීමේ විද්‍යුත් තැපෑලක් එවනු ලැබේ header: PNG, GIF හෝ JPG. වැඩිම %{size}. %{dimensions}px දක්වා අඩු කරනු ඇත inbox_url: ඔබට භාවිතා කිරීමට අවශ්‍ය රිලේ හි මුල් පිටුවෙන් URL එක පිටපත් කරන්න - irreversible: පෙරහන පසුව ඉවත් කළද, පෙරූ පළ කිරීම් ආපසු හැරවිය නොහැකි ලෙස අතුරුදහන් වනු ඇත - locale: පරිශීලක අතුරුමුහුණතේ භාෂාව, ඊමේල් සහ තල්ලු දැනුම්දීම් + irreversible: පෙරහන පසුව ඉවත් කළ ද, පෙරූ ලිපි අප්‍රතිවර්ත්‍යව අතුරුදහන් වනු ඇත + locale: වි-තැපැල්, තල්ලු දැනුම්දීම් සහ පරිශ්‍රීලක අතුරුමුහුණතේ භාෂාව password: අවම වශයෙන් අක්ෂර 8 ක් භාවිතා කරන්න - phrase: පළ කිරීමක පෙළ හෝ අන්තර්ගත අනතුරු ඇඟවීම නොසලකා ගැලපේ + phrase: ලිපිවල පෙළ හෝ අන්තර්ගත අවවාද නොසලකා ගැළපෙනු ඇත scopes: යෙදුමට ප්‍රවේශ වීමට ඉඩ දෙන්නේ කුමන API වලටද. ඔබ ඉහළ මට්ටමේ විෂය පථයක් තෝරා ගන්නේ නම්, ඔබට තනි ඒවා තෝරා ගැනීමට අවශ්‍ය නොවේ. - setting_aggregate_reblogs: මෑතකදී බූස්ට් කරන ලද පළ කිරීම් සඳහා නව බූස්ට් පෙන්වන්න එපා (අලුතින් ලැබුණු බූස්ට් වලට පමණක් බලපායි) - setting_always_send_emails: සාමාන්‍යයෙන් ඔබ Mastodon සක්‍රියව භාවිතා කරන විට විද්‍යුත් තැපැල් දැනුම්දීම් නොයවනු ඇත + setting_always_send_emails: ඔබ නිතර මාස්ටඩන් භාවිතා කරන විට වි-තැපැල් දැනුම්දීම් නොලැබෙයි setting_default_sensitive: සංවේදී මාධ්‍ය පෙරනිමියෙන් සඟවා ඇති අතර ක්ලික් කිරීමකින් හෙළිදරව් කළ හැක - setting_display_media_default: සංවේදී ලෙස සලකුණු කළ මාධ්‍ය සඟවන්න - setting_display_media_hide_all: සෑම විටම මාධ්‍ය සඟවන්න - setting_display_media_show_all: සෑම විටම මාධ්‍ය පෙන්වන්න + setting_display_media_default: සංවේදී බව සලකුණු කළ මාධ්‍ය සඟවන්න + setting_display_media_hide_all: සැමවිට මාධ්‍ය සඟවන්න + setting_display_media_show_all: සැමවිට මාධ්‍ය පෙන්වන්න setting_use_blurhash: අනුක්‍රමණ සැඟවුණු දෘශ්‍යවල වර්ණ මත පදනම් වන නමුත් ඕනෑම විස්තරයක් අපැහැදිලි කරයි setting_use_pending_items: සංග්‍රහය ස්වයංක්‍රීයව අනුචලනය කරනවා වෙනුවට ක්ලික් කිරීමක් පිටුපස කාලරේඛා යාවත්කාලීන සඟවන්න whole_word: මූල පදය හෝ වාක්‍ය ඛණ්ඩය අක්ෂරාංක පමණක් වන විට, එය යෙදෙන්නේ එය සම්පූර්ණ වචනයට ගැලපේ නම් පමණි @@ -58,14 +56,14 @@ si: domain: මෙය විද්‍යුත් තැපැල් ලිපිනයේ හෝ එය භාවිතා කරන MX වාර්තාවේ පෙන්වන ඩොමේන් නාමය විය හැක. ලියාපදිංචි වූ පසු ඒවා පරීක්ෂා කරනු ලැබේ. with_dns_records: ලබා දී ඇති වසමේ DNS වාර්තා විසඳීමට උත්සාහ කරන අතර ප්‍රතිඵල ද අවහිර කරනු ලැබේ filters: - action: පළ කිරීමක් පෙරහනට ගැළපෙන විට සිදු කළ යුතු ක්‍රියාව තෝරන්න + action: ලිපියක් පෙරහනට ගැළපෙන විට ඉටු විය යුතු ක්‍රියාමාර්ගය තෝරන්න actions: hide: පෙරහන් කළ අන්තර්ගතය සම්පූර්ණයෙන්ම සඟවන්න, එය නොපවතින ලෙස හැසිරෙන්න warn: පෙරහන මාතෘකාව සඳහන් කරන අනතුරු ඇඟවීමක් පිටුපස පෙරූ අන්තර්ගතය සඟවන්න form_challenge: current_password: ඔබ ආරක්ෂිත ප්‍රදේශයකට ඇතුල් වේ imports: - data: CSV ගොනුව වෙනත් Mastodon සේවාදායකයකින් අපනයනය කරන ලදී + data: CSV ගොනුව වෙනත් මාස්ටඩන් සේවාදායකයකින් නිර්යාත කර ඇත invite_request: text: මෙය ඔබගේ අයදුම්පත සමාලෝචනය කිරීමට අපට උපකාරී වනු ඇත ip_block: @@ -84,7 +82,7 @@ si: tag: name: ඔබට අකුරු වල ආවරණය පමණක් වෙනස් කළ හැකිය, උදාහරණයක් ලෙස, එය වඩාත් කියවිය හැකි කිරීමට user: - chosen_languages: පරීක්ෂා කළ විට, තෝරාගත් භාෂාවලින් පළ කිරීම් පමණක් පොදු කාලරේඛා තුළ සංදර්ශන කෙරේ + chosen_languages: සබල නම්, තෝරාගත් භාෂාවල ලිපි පමණක් ප්‍රසිද්ධ කාල රේඛාවේ දිස්වේ webhook: events: යැවීමට සිදුවීම් තෝරන්න url: සිදුවීම් යවනු ලබන ස්ථානය @@ -99,16 +97,16 @@ si: acct: නව ගිණුමේ හැසිරවීම account_warning_preset: text: පෙර සැකසූ පෙළ - title: ශීර්ෂය + title: සිරැසිය admin_account_action: - include_statuses: විද්‍යුත් තැපෑලෙහි වාර්තා කරන ලද පළ කිරීම් ඇතුළත් කරන්න + include_statuses: වි-තැපෑලට වාර්තා කරන ලද ලිපි ද ඇතුළත් කරන්න send_email_notification: විද්‍යුත් තැපෑලෙන් පරිශීලකයාට දැනුම් දෙන්න text: අභිරුචි අනතුරු ඇඟවීම type: ක්‍රියාමාර්ගය types: disable: කැටි කරන්න none: අනතුරු ඇඟවීමක් යවන්න - sensitive: පවතී + sensitive: සංවේදීතාව silence: සීමාව suspend: අත්හිටුවන්න warning_preset_id: අනතුරු ඇඟවීමේ පෙරසිටුවක් භාවිතා කරන්න @@ -123,12 +121,11 @@ si: defaults: autofollow: ඔබගේ ගිණුම අනුගමනය කිරීමට ආරාධනා කරන්න avatar: අවතාරය - bot: මෙය ස්වයං ක්‍රමලේඛගත ගිණුමකි - chosen_languages: භාෂා පෙරහන් කරන්න - confirm_new_password: නව මුර පදය තහවුරු කරන්න - confirm_password: මුරපදය තහවුරු කර ඇත - context: සන්දර්භ පෙරහන් කරන්න - current_password: වත්මන් මුර පදය + chosen_languages: භාෂා පෙරන්න + confirm_new_password: නව මුරපදය තහවුරු කරන්න + confirm_password: මුරපදය තහවුරු කරන්න + context: සන්දර්භ පෙරන්න + current_password: වත්මන් මුරපදය data: දත්ත display_name: ප්රදර්ශන නාමය email: වි-තැපැල් ලිපිනය @@ -138,28 +135,25 @@ si: honeypot: "%{label} (පුරවන්න එපා)" inbox_url: රිලේ එන ලිපි URL irreversible: සැඟවීම වෙනුවට අතහරින්න - locale: අතුරු මුහුණත භාෂාව + locale: අතුරු මුහුණතේ භාෂාව max_uses: උපරිම භාවිත ගණන new_password: නව මුරපදය - note: ජෛව otp_attempt: ද්වි සාධක කේතය password: මුරපදය phrase: මූල පදය හෝ වාක්‍ය ඛණ්ඩය setting_advanced_layout: උසස් වෙබ් අතුරු මුහුණත සබල කරන්න - setting_aggregate_reblogs: කණ්ඩායම් කාලරේඛාව වැඩි කරයි setting_always_send_emails: සෑම විටම විද්‍යුත් තැපැල් දැනුම්දීම් යවන්න setting_auto_play_gif: සජීවිකරණ GIF ස්වයංක්‍රීයව ධාවනය කරන්න - setting_boost_modal: වැඩි කිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න - setting_default_language: පළ කිරීමේ භාෂාව - setting_default_privacy: පුද්ගලිකත්වය පළ කිරීම - setting_default_sensitive: සෑම විටම මාධ්‍ය සංවේදී ලෙස සලකුණු කරන්න - setting_delete_modal: පළ කිරීමක් මැකීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න + setting_default_language: ලිපිවල භාෂාව + setting_default_privacy: ලිපියේ රහස්‍යතාව + setting_default_sensitive: සෑමවිට මාධ්‍ය සංවේදී බව සලකුණු කරන්න + setting_delete_modal: ලිපියක් මැකීමට පෙර ඒ ගැන විමසන්න setting_disable_swiping: ස්වයිප් චලන අක්‍රීය කරන්න setting_display_media: මාධ්ය සංදර්ශකය - setting_display_media_default: පෙරනිමිය + setting_display_media_default: පෙරනිමි setting_display_media_hide_all: සියල්ල සඟවන්න setting_display_media_show_all: සියල්ල පෙන්වන්න - setting_expand_spoilers: අන්තර්ගත අනතුරු ඇඟවීම් සමඟ සලකුණු කර ඇති පළ කිරීම් සැමවිටම පුළුල් කරන්න + setting_expand_spoilers: අන්තර්ගත අවවාද සහිත ලිපි සැමවිට දිගහරින්න setting_hide_network: ඔබගේ ජාලය සඟවන්න setting_reduce_motion: සජීවිකරණවල චලනය අඩු කරන්න setting_system_font_ui: පද්ධතියේ පෙරනිමි අකුරු භාවිතා කරන්න @@ -167,10 +161,10 @@ si: setting_trends: අද ප්‍රවණතා පෙන්වන්න setting_unfollow_modal: යමෙකු අනුගමනය නොකිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න setting_use_blurhash: සැඟවුණු මාධ්‍ය සඳහා වර්ණවත් අනුක්‍රමික පෙන්වන්න - setting_use_pending_items: මන්දගාමී මාදිලිය + setting_use_pending_items: මන්දගාමී ප්‍රකාරය severity: බරපතලකම sign_in_token_attempt: ආරක්‍ෂණ කේතය - title: ශීර්ෂය + title: සිරැසිය type: ආයාත වර්ගය username: පරිශීලක නාමය username_or_email: පරි. නාමය හෝ වි-තැපෑල @@ -183,10 +177,16 @@ si: actions: hide: සම්පූර්ණයෙන්ම සඟවන්න warn: අනතුරු ඇඟවීමක් සමඟ සඟවන්න + form_admin_settings: + custom_css: අභිරුචි CSS + profile_directory: පැතිකඩ නාමාවලිය සබල කරන්න + site_terms: රහස්‍යතා ප්‍රතිපත්තිය + site_title: සේවාදායකයේ නම + theme: පෙරනිමි තේමාව interactions: must_be_follower: අනුගාමිකයින් නොවන අයගේ දැනුම්දීම් අවහිර කරන්න must_be_following: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගේ දැනුම්දීම් අවහිර කරන්න - must_be_following_dm: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගෙන් සෘජු පණිවිඩ අවහිර කරන්න + must_be_following_dm: ඔබ නොදන්නා අයගෙන් සෘජු පණිවිඩ ලැබීම අවහිර කරන්න invite: comment: අදහස invite_request: @@ -195,18 +195,16 @@ si: comment: අදහස ip: අ.ජා. කෙ. (IP) severities: - no_access: ප්රවේශය අවහිර කරන්න + no_access: ප්‍රවේශය අවහිර කරන්න sign_up_requires_approval: ලියාපදිංචි වීම සීමා කරන්න severity: නීතිය notification_emails: - appeal: යමෙක් උපපරිපාලක තීරණයකට අභියාචනා කරයි digest: digest ඊමේල් යවන්න - favourite: කවුරුහරි ඔබේ පළ කිරීම ප්‍රිය කළා + favourite: යමෙක් ඔබගේ ලිපියට ප්‍රිය කළා follow: කවුරුහරි ඔබව අනුගමනය කළා follow_request: කවුරුහරි ඔබව අනුගමනය කරන ලෙස ඉල්ලා සිටියේය mention: කවුරුහරි ඔබව සඳහන් කළා pending_account: නව ගිණුම සමාලෝචනය අවශ්‍යයි - reblog: කවුරුහරි ඔබේ පළ කිරීම වැඩි කළා report: නව වාර්තාවක් ඉදිරිපත් කෙරේ trending_tag: නව ප්‍රවණතාවයට සමාලෝචනයක් අවශ්‍ය වේ rule: @@ -215,11 +213,19 @@ si: listable: මෙම හැෂ් ටැගය සෙවීම් සහ යෝජනා වල දිස් වීමට ඉඩ දෙන්න name: හෑෂ් ටැගය trendable: මෙම හැෂ් ටැගය ප්‍රවණතා යටතේ දිස් වීමට ඉඩ දෙන්න - usable: මෙම හැෂ් ටැගය භාවිතා කිරීමට පළ කිරීම් වලට ඉඩ දෙන්න + usable: ලිපි සඳහා මෙම පූරක අනන්‍යනය භාවිතයට ඉඩදෙන්න + user: + role: භූමිකාව + time_zone: වේලා කලාපය + user_role: + color: චිහ්නයේ පාට + name: නම + permissions_as_keys: අවසර + position: ප්‍රමුඛත්‍වය webhook: events: සබල කළ සිදුවීම් url: අන්ත ලක්ෂ්‍ය URL - 'no': නැත + 'no': නැහැ recommended: නිර්දේශිත required: mark: "*" From 235bef36d07334c31f0b21ad3ae67e8d508f2b3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Thu, 5 Oct 2023 16:37:27 +0900 Subject: [PATCH 04/29] =?UTF-8?q?Add:=20=E6=A4=9C=E7=B4=A2=E8=A8=B1?= =?UTF-8?q?=E5=8F=AF=E3=80=8C=E3=83=AD=E3=83=BC=E3=82=AB=E3=83=AB=E3=81=A8?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AD=E3=83=AF=E3=83=BC=E3=80=8D=20(#60)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/searchability_dropdown.jsx | 3 ++ .../status/components/detailed_status.jsx | 2 + app/javascript/mastodon/locales/en.json | 2 + app/javascript/mastodon/locales/ja.json | 2 + app/lib/account_statuses_filter.rb | 2 +- app/lib/importer/statuses_index_importer.rb | 2 +- app/lib/search_query_transformer.rb | 12 +++--- app/models/concerns/status_search_concern.rb | 2 +- app/models/status.rb | 25 ++++++++---- app/models/trends/statuses.rb | 3 +- app/serializers/rest/status_serializer.rb | 2 +- app/services/delivery_antenna_service.rb | 8 ++-- app/services/fan_out_on_write_service.rb | 2 +- app/services/post_status_service.rb | 4 +- .../preferences/reaching/show.html.haml | 2 +- config/locales/en.yml | 2 + config/locales/ja.yml | 2 + spec/lib/status_reach_finder_spec.rb | 16 ++++++++ spec/models/status_spec.rb | 27 +++++++++++++ spec/models/tag_feed_spec.rb | 18 +++++++++ .../services/statuses_search_service_spec.rb | 39 +++++++++++++++++++ .../activitypub/note_serializer_spec.rb | 28 ++++++++++++- .../services/fan_out_on_write_service_spec.rb | 9 +++++ spec/services/post_status_service_spec.rb | 21 ++++++++++ 24 files changed, 210 insertions(+), 25 deletions(-) diff --git a/app/javascript/mastodon/features/compose/components/searchability_dropdown.jsx b/app/javascript/mastodon/features/compose/components/searchability_dropdown.jsx index e7a002b9d88678..3b597e7735c99a 100644 --- a/app/javascript/mastodon/features/compose/components/searchability_dropdown.jsx +++ b/app/javascript/mastodon/features/compose/components/searchability_dropdown.jsx @@ -15,6 +15,8 @@ import { IconButton } from '../../../components/icon_button'; const messages = defineMessages({ public_short: { id: 'searchability.public.short', defaultMessage: 'Public' }, public_long: { id: 'searchability.public.long', defaultMessage: 'Anyone can find' }, + public_unlisted_short: { id: 'searchability.public_unlisted.short', defaultMessage: 'Public unlisted' }, + public_unlisted_long: { id: 'searchability.public_unlisted.long', defaultMessage: 'Local users and followers can find' }, private_short: { id: 'searchability.unlisted.short', defaultMessage: 'Followers' }, private_long: { id: 'searchability.unlisted.long', defaultMessage: 'Your followers can find' }, direct_short: { id: 'searchability.private.short', defaultMessage: 'Reactionners' }, @@ -223,6 +225,7 @@ class SearchabilityDropdown extends PureComponent { this.options = [ { icon: 'globe', value: 'public', text: formatMessage(messages.public_short), meta: formatMessage(messages.public_long) }, + { icon: 'cloud', value: 'public_unlisted', text: formatMessage(messages.public_unlisted_short), meta: formatMessage(messages.public_unlisted_long) }, { icon: 'unlock', value: 'private', text: formatMessage(messages.private_short), meta: formatMessage(messages.private_long) }, { icon: 'lock', value: 'direct', text: formatMessage(messages.direct_short), meta: formatMessage(messages.direct_long) }, { icon: 'at', value: 'limited', text: formatMessage(messages.limited_short), meta: formatMessage(messages.limited_long) }, diff --git a/app/javascript/mastodon/features/status/components/detailed_status.jsx b/app/javascript/mastodon/features/status/components/detailed_status.jsx index e9568bf9d0ccf5..ce60f2459c143b 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.jsx +++ b/app/javascript/mastodon/features/status/components/detailed_status.jsx @@ -38,6 +38,7 @@ const messages = defineMessages({ personal_short: { id: 'privacy.personal.short', defaultMessage: 'Yourself only' }, direct_short: { id: 'privacy.direct.short', defaultMessage: 'Mentioned people only' }, searchability_public_short: { id: 'searchability.public.short', defaultMessage: 'Public' }, + searchability_public_unlisted_short: { id: 'searchability.public_unlisted.short', defaultMessage: 'Public unlisted' }, searchability_private_short: { id: 'searchability.unlisted.short', defaultMessage: 'Followers' }, searchability_direct_short: { id: 'searchability.private.short', defaultMessage: 'Reactionners' }, searchability_limited_short: { id: 'searchability.direct.short', defaultMessage: 'Self only' }, @@ -270,6 +271,7 @@ class DetailedStatus extends ImmutablePureComponent { const searchabilityIconInfo = { 'public': { icon: 'globe', text: intl.formatMessage(messages.searchability_public_short) }, + 'public_unlisted': { icon: 'cloud', text: intl.formatMessage(messages.searchability_public_unlisted_short) }, 'private': { icon: 'unlock', text: intl.formatMessage(messages.searchability_private_short) }, 'direct': { icon: 'lock', text: intl.formatMessage(messages.searchability_direct_short) }, 'limited': { icon: 'at', text: intl.formatMessage(messages.searchability_limited_short) }, diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 780a5df5c8e5bc..8fbc847d1a90f3 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -629,6 +629,8 @@ "searchability.private.short": "Reactionners", "searchability.public.long": "Anyone can find", "searchability.public.short": "Everyone", + "searchability.public_unlisted.long": "Local users and followers can find", + "searchability.public_unlisted.short": "Local and followers", "searchability.unlisted.long": "Your followers and reactionners can find", "searchability.unlisted.short": "Followers and reactionners", "search_popout.domain": "domain", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index fdd4e0cdc19e3f..4d5f0cbc9a7ac4 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -714,6 +714,8 @@ "searchability.private.short": "反応者のみ", "searchability.public.long": "この投稿は誰でも検索できます", "searchability.public.short": "誰でも", + "searchability.public_unlisted.long": "ローカルユーザーとフォロワーが検索できます", + "searchability.public_unlisted.short": "ローカルとフォロワー", "searchability.unlisted.long": "この投稿はあなたのフォロワーと反応者だけが検索できます", "searchability.unlisted.short": "フォロワーと反応者", "search_popout.domain": "ドメイン", diff --git a/app/lib/account_statuses_filter.rb b/app/lib/account_statuses_filter.rb index 9a4a2b5d6ea4fc..4ff59756102896 100644 --- a/app/lib/account_statuses_filter.rb +++ b/app/lib/account_statuses_filter.rb @@ -26,7 +26,7 @@ def results scope.merge!(no_reblogs_scope) if exclude_reblogs? scope.merge!(hashtag_scope) if tagged? - available_searchabilities = [:public, :unlisted, :private, :direct, :limited, nil] + available_searchabilities = [:public, :public_unlisted, :unlisted, :private, :direct, :limited, nil] available_visibilities = [:public, :public_unlisted, :login, :unlisted, :private, :direct, :limited] available_searchabilities = [:public] if domain_block&.reject_send_not_public_searchability diff --git a/app/lib/importer/statuses_index_importer.rb b/app/lib/importer/statuses_index_importer.rb index 9fbce14478f581..5a8fa29c869b17 100644 --- a/app/lib/importer/statuses_index_importer.rb +++ b/app/lib/importer/statuses_index_importer.rb @@ -23,7 +23,7 @@ def import! to_index.map do |object| # This is unlikely to happen, but the post may have been # un-interacted with since it was queued for indexing - if object.searchable_by.empty? && %w(public private).exclude?(object.searchability) + if object.searchable_by.empty? && %w(public public_unlisted private).exclude?(object.searchability) deleted += 1 { delete: { _id: object.id } } else diff --git a/app/lib/search_query_transformer.rb b/app/lib/search_query_transformer.rb index ba4383f6741bf5..567b10ade2b107 100644 --- a/app/lib/search_query_transformer.rb +++ b/app/lib/search_query_transformer.rb @@ -89,10 +89,10 @@ def default_filter public_index, searchability_limited, ] - definition_should << searchability_public if %i(public).include?(@searchability) - definition_should << searchability_private if %i(public unlisted private).include?(@searchability) - definition_should << searchable_by_me if %i(public unlisted private direct).include?(@searchability) - definition_should << self_posts if %i(public unlisted private direct).exclude?(@searchability) + definition_should << searchability_public if %i(public public_unlisted).include?(@searchability) + definition_should << searchability_private if %i(public public_unlisted unlisted private).include?(@searchability) + definition_should << searchable_by_me if %i(public public_unlisted unlisted private direct).include?(@searchability) + definition_should << self_posts if %i(public public_unlisted unlisted private direct).exclude?(@searchability) { bool: { @@ -199,8 +199,8 @@ def searchability_limited def following_account_ids return @following_account_ids if defined?(@following_account_ids) - account_exists_sql = Account.where('accounts.id = follows.target_account_id').where(searchability: %w(public private)).reorder(nil).select(1).to_sql - status_exists_sql = Status.where('statuses.account_id = follows.target_account_id').where(reblog_of_id: nil).where(searchability: %w(public private)).reorder(nil).select(1).to_sql + account_exists_sql = Account.where('accounts.id = follows.target_account_id').where(searchability: %w(public public_unlisted private)).reorder(nil).select(1).to_sql + status_exists_sql = Status.where('statuses.account_id = follows.target_account_id').where(reblog_of_id: nil).where(searchability: %w(public public_unlisted private)).reorder(nil).select(1).to_sql following_accounts = Follow.where(account_id: @options[:current_account].id).merge(Account.where("EXISTS (#{account_exists_sql})").or(Account.where("EXISTS (#{status_exists_sql})"))) @following_account_ids = following_accounts.pluck(:target_account_id) end diff --git a/app/models/concerns/status_search_concern.rb b/app/models/concerns/status_search_concern.rb index 376f82e509fbe2..e73a12d5115210 100644 --- a/app/models/concerns/status_search_concern.rb +++ b/app/models/concerns/status_search_concern.rb @@ -5,7 +5,7 @@ module StatusSearchConcern included do scope :indexable, -> { without_reblogs.where(visibility: [:public, :login], searchability: nil).joins(:account).where(account: { indexable: true }) } - scope :remote_dynamic_searchability, -> { remote.where(searchability: [:public, :private]) } + scope :remote_dynamic_searchability, -> { remote.where(searchability: [:public, :public_unlisted, :private]) } end def searchable_by diff --git a/app/models/status.rb b/app/models/status.rb index 4c076ca5d7b745..5a33411aba0f85 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -129,7 +129,7 @@ class Status < ApplicationRecord scope :without_replies, -> { where('statuses.reply = FALSE OR statuses.in_reply_to_account_id = statuses.account_id') } scope :without_reblogs, -> { where(statuses: { reblog_of_id: nil }) } scope :with_public_visibility, -> { where(visibility: [:public, :public_unlisted, :login]) } - scope :with_public_search_visibility, -> { merge(where(visibility: [:public, :public_unlisted, :login]).or(Status.where(searchability: :public))) } + scope :with_public_search_visibility, -> { merge(where(visibility: [:public, :public_unlisted, :login]).or(Status.where(searchability: [:public, :public_unlisted]))) } scope :with_global_timeline_visibility, -> { where(visibility: [:public, :login]) } scope :tagged_with, ->(tag_ids) { joins(:statuses_tags).where(statuses_tags: { tag_id: tag_ids }) } scope :excluding_silenced_accounts, -> { left_outer_joins(:account).where(accounts: { silenced_at: nil }) } @@ -442,19 +442,26 @@ def requires_review_notification? def compute_searchability local = account.local? + check_searchability = public_unlisted_searchability? ? 'public' : searchability - return 'private' if public_searchability? && account.silenced? + return 'private' if %w(public public_unlisted).include?(check_searchability) && account.silenced? return 'direct' if unsupported_searchability? - return searchability if local && !searchability.nil? - return 'direct' if local || [:public, :private, :direct, :limited].exclude?(account.searchability.to_sym) + return check_searchability if local && !check_searchability.nil? + return 'direct' if local || %i(public private direct limited).exclude?(account.searchability.to_sym) account_searchability = Status.searchabilities[account.searchability] - status_searchability = Status.searchabilities[searchability.nil? ? 'direct' : searchability] + status_searchability = Status.searchabilities[check_searchability.nil? ? 'direct' : check_searchability] Status.searchabilities.invert.fetch([account_searchability, status_searchability].max) || 'direct' end def compute_searchability_activitypub - return 'private' if public_unlisted_visibility? && public_searchability? + return 'private' if public_unlisted_searchability? + + compute_searchability + end + + def compute_searchability_local + return 'public_unlisted' if public_unlisted_searchability? compute_searchability end @@ -477,6 +484,10 @@ def selectable_reblog_visibilities end def selectable_searchabilities + searchabilities.keys - %w(unsupported) + end + + def selectable_searchabilities_for_search searchabilities.keys - %w(public_unlisted unsupported) end @@ -620,7 +631,7 @@ def set_searchability elsif visibility == 'limited' :limited elsif visibility == 'private' - searchability == 'public' ? :private : searchability + searchability == 'public' || searchability == 'public_unlisted' ? :private : searchability elsif visibility == 'direct' searchability == 'limited' ? :limited : :direct else diff --git a/app/models/trends/statuses.rb b/app/models/trends/statuses.rb index f2c04f220ddb22..c7fe097904b040 100644 --- a/app/models/trends/statuses.rb +++ b/app/models/trends/statuses.rb @@ -106,7 +106,8 @@ def klass private def eligible?(status) - (status.searchability.nil? || status.public_searchability?) && (status.public_visibility? || status.public_unlisted_visibility?) && + (status.searchability.nil? || status.compute_searchability == 'public') && + (status.public_visibility? || status.public_unlisted_visibility?) && status.account.discoverable? && !status.account.silenced? && status.spoiler_text.blank? && (!status.sensitive? || status.media_attachments.none?) && !status.reply? && valid_locale?(status.language) end diff --git a/app/serializers/rest/status_serializer.rb b/app/serializers/rest/status_serializer.rb index e9ac924f7ee897..1fcc939cdbd0e9 100644 --- a/app/serializers/rest/status_serializer.rb +++ b/app/serializers/rest/status_serializer.rb @@ -93,7 +93,7 @@ def limited_scope end def searchability - object.compute_searchability + object.compute_searchability_local end def sensitive diff --git a/app/services/delivery_antenna_service.rb b/app/services/delivery_antenna_service.rb index 3d263219954ac4..fb60473c302643 100644 --- a/app/services/delivery_antenna_service.rb +++ b/app/services/delivery_antenna_service.rb @@ -64,8 +64,10 @@ def delivery! next if antenna.exclude_accounts&.include?(@status.account_id) next if antenna.exclude_domains&.include?(domain) next if antenna.exclude_tags&.any? { |tag_id| tag_ids.include?(tag_id) } - next if @status.unlisted_visibility? && !@status.public_searchability? && follower_ids.exclude?(antenna.account_id) - next if @status.unlisted_visibility? && @status.public_searchability? && follower_ids.exclude?(antenna.account_id) && antenna.any_keywords && antenna.any_tags + + searchability = @status.compute_searchability + next if @status.unlisted_visibility? && searchability != 'public' && follower_ids.exclude?(antenna.account_id) + next if @status.unlisted_visibility? && searchability == 'public' && follower_ids.exclude?(antenna.account_id) && antenna.any_keywords && antenna.any_tags collection.push(antenna) end @@ -121,7 +123,7 @@ def followers_only? when :public, :public_unlisted, :login, :limited false when :unlisted - !@status.public_searchability? + @status.compute_searchability != 'public' else true end diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index a2e2653813ab4d..b56474ddf61a9e 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -218,6 +218,6 @@ def broadcastable_unlisted? end def broadcastable_unlisted2? - @status.unlisted_visibility? && @status.public_searchability? && !@status.reblog? && !@account.silenced? + @status.unlisted_visibility? && @status.compute_searchability == 'public' && !@status.reblog? && !@account.silenced? end end diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index bf2ba2cdbf9ea5..cdd1aa86747e89 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -81,7 +81,7 @@ def preprocess_attributes! @visibility = :public_unlisted if @visibility&.to_sym == :public && !@options[:force_visibility] && !@options[:application]&.superapp && @account.user&.setting_public_post_to_unlisted && Setting.enable_public_unlisted_visibility @limited_scope = @options[:visibility]&.to_sym if @visibility == :limited @searchability = searchability - @searchability = :private if @account.silenced? && @searchability&.to_sym == :public + @searchability = :private if @account.silenced? && %i(public public_unlisted).include?(@searchability&.to_sym) @markdown = @options[:markdown] || false @scheduled_at = @options[:scheduled_at]&.to_datetime @scheduled_at = nil if scheduled_in_the_past? @@ -129,6 +129,8 @@ def searchability case @options[:searchability]&.to_sym when :public case @visibility&.to_sym when :public, :public_unlisted, :login, :unlisted then :public when :private then :private else :direct end + when :public_unlisted + case @visibility&.to_sym when :public, :public_unlisted, :login, :unlisted then :public_unlisted when :private then :private else :direct end when :private case @visibility&.to_sym when :public, :public_unlisted, :login, :unlisted, :private then :private else :direct end when :direct diff --git a/app/views/settings/preferences/reaching/show.html.haml b/app/views/settings/preferences/reaching/show.html.haml index 03077758aa32cb..3e330ad590bb17 100644 --- a/app/views/settings/preferences/reaching/show.html.haml +++ b/app/views/settings/preferences/reaching/show.html.haml @@ -41,7 +41,7 @@ .fields-row .fields-group.fields-row__column.fields-row__column-12 - = ff.input :default_searchability_of_search, collection: Status.selectable_searchabilities, wrapper: :with_label, kmyblue: true, include_blank: false, label_method: lambda { |searchability| safe_join([I18n.t("statuses.searchabilities.#{searchability}"), I18n.t("statuses.searchabilities.#{searchability}_search_long")], ' - ') }, required: false, hint: false, label: I18n.t('simple_form.labels.defaults.setting_default_searchability_of_search') + = ff.input :default_searchability_of_search, collection: Status.selectable_searchabilities_for_search, wrapper: :with_label, kmyblue: true, include_blank: false, label_method: lambda { |searchability| safe_join([I18n.t("statuses.searchabilities.#{searchability}"), I18n.t("statuses.searchabilities.#{searchability}_search_long")], ' - ') }, required: false, hint: false, label: I18n.t('simple_form.labels.defaults.setting_default_searchability_of_search') .fields-group = ff.input :use_public_index, wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_use_public_index') diff --git a/config/locales/en.yml b/config/locales/en.yml index d56dd1d3fbade6..8633f4dfc03097 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1836,6 +1836,8 @@ en: public: Public public_long: Anyone can find public_search_long: You can search all posts permitted to search + public_unlisted: Local and followers + public_unlisted_long: Local users and followers can find show_more: Show more show_newer: Show newer show_older: Show older diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 2447395e88c65c..87de99e51528f8 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1814,6 +1814,8 @@ ja: public: 誰でも public_long: この投稿は誰でも検索できます public_search_long: 検索が許可された全ての投稿が検索できます + public_unlisted: ローカルとフォロワー + public_unlisted_long: ローカル・フォロワー・反応者のみが検索できます show_more: もっと見る show_newer: 新しいものを表示 show_older: 古いものを表示 diff --git a/spec/lib/status_reach_finder_spec.rb b/spec/lib/status_reach_finder_spec.rb index ba319b5423418d..3d51fedb1458af 100644 --- a/spec/lib/status_reach_finder_spec.rb +++ b/spec/lib/status_reach_finder_spec.rb @@ -67,6 +67,22 @@ end end + context 'when misskey with public_unlisted searchability' do + let(:sender_software) { 'misskey' } + let(:searchability) { :public_unlisted } + + it 'send status without setting' do + expect(subject.inboxes).to include 'https://foo.bar/inbox' + expect(subject.inboxes_for_misskey).to_not include 'https://foo.bar/inbox' + end + + it 'send status with setting' do + alice.user.settings.update(reject_unlisted_subscription: 'true') + expect(subject.inboxes).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes_for_misskey).to include 'https://foo.bar/inbox' + end + end + context 'when misskey with public searchability' do let(:sender_software) { 'misskey' } diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index 36f4fddec9528c..96f6bb56c9db95 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -137,6 +137,15 @@ end end + context 'when public-public_unlisted but silenced' do + let(:silenced_at) { Time.now.utc } + let(:status_searchability) { :public_unlisted } + + it 'returns private' do + expect(subject.compute_searchability).to eq 'private' + end + end + context 'when public-private' do let(:status_searchability) { :private } @@ -215,6 +224,24 @@ expect(subject.compute_searchability).to eq 'public' end end + + context 'when public-public_unlisted of local account' do + let(:account_searchability) { :public } + let(:account_domain) { nil } + let(:status_searchability) { :public_unlisted } + + it 'returns public' do + expect(subject.compute_searchability).to eq 'public' + end + + it 'returns public_unlisted for local' do + expect(subject.compute_searchability_local).to eq 'public_unlisted' + end + + it 'returns private for activitypub' do + expect(subject.compute_searchability_activitypub).to eq 'private' + end + end end describe '#quote' do diff --git a/spec/models/tag_feed_spec.rb b/spec/models/tag_feed_spec.rb index 270797ccd8cccb..5206e7cedec436 100644 --- a/spec/models/tag_feed_spec.rb +++ b/spec/models/tag_feed_spec.rb @@ -91,18 +91,36 @@ expect(results).to include status_tagged_with_cats end + it 'unlisted/public_unlisted_searchability post returns' do + status_tagged_with_cats.update(visibility: :unlisted, searchability: :public_unlisted) + results = described_class.new(tag_cats, nil).get(20) + expect(results).to include status_tagged_with_cats + end + it 'unlisted/public_searchability post returns with account' do status_tagged_with_cats.update(visibility: :unlisted, searchability: :public) results = described_class.new(tag_cats, account).get(20) expect(results).to include status_tagged_with_cats end + it 'unlisted/public_unlisted_searchability post returns with account' do + status_tagged_with_cats.update(visibility: :unlisted, searchability: :public_unlisted) + results = described_class.new(tag_cats, account).get(20) + expect(results).to include status_tagged_with_cats + end + it 'private post not returns' do status_tagged_with_cats.update(visibility: :private, searchability: :public) results = described_class.new(tag_cats, nil).get(20) expect(results).to_not include status_tagged_with_cats end + it 'private, public_unlisted post not returns' do + status_tagged_with_cats.update(visibility: :private, searchability: :public_unlisted) + results = described_class.new(tag_cats, nil).get(20) + expect(results).to_not include status_tagged_with_cats + end + it 'private post not returns with account' do status_tagged_with_cats.update(visibility: :private, searchability: :public) results = described_class.new(tag_cats, account).get(20) diff --git a/spec/search/services/statuses_search_service_spec.rb b/spec/search/services/statuses_search_service_spec.rb index c0d4116ae0378d..51245f73541d98 100644 --- a/spec/search/services/statuses_search_service_spec.rb +++ b/spec/search/services/statuses_search_service_spec.rb @@ -63,6 +63,45 @@ end end + context 'when public_unlisted searchability' do + let(:searchability) { :public_unlisted } + let(:account) { other } + + context 'with other account' do + it 'search status' do + expect(subject.count).to eq 1 + expect(subject).to include status.id + end + end + + context 'with follower' do + let(:account) { following } + + it 'search status' do + expect(subject.count).to eq 1 + expect(subject).to include status.id + end + end + + context 'with reacted user' do + let(:account) { reacted } + + it 'search status' do + expect(subject.count).to eq 1 + expect(subject).to include status.id + end + end + + context 'with self' do + let(:account) { alice } + + it 'search status' do + expect(subject.count).to eq 1 + expect(subject).to include status.id + end + end + end + context 'when private searchability' do let(:searchability) { :private } let(:account) { other } diff --git a/spec/serializers/activitypub/note_serializer_spec.rb b/spec/serializers/activitypub/note_serializer_spec.rb index 910b5010ecf39e..a9760c799c2876 100644 --- a/spec/serializers/activitypub/note_serializer_spec.rb +++ b/spec/serializers/activitypub/note_serializer_spec.rb @@ -5,9 +5,11 @@ describe ActivityPub::NoteSerializer do subject { JSON.parse(@serialization.to_json) } + let(:visibility) { :public } + let(:searchability) { :public } let!(:account) { Fabricate(:account) } let!(:other) { Fabricate(:account) } - let!(:parent) { Fabricate(:status, account: account, visibility: :public) } + let!(:parent) { Fabricate(:status, account: account, visibility: visibility, searchability: searchability) } let!(:reply_by_account_first) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_account_next) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_other_first) { Fabricate(:status, account: other, thread: parent, visibility: :public) } @@ -46,6 +48,30 @@ expect(subject['replies']['first']['items']).to_not include(reply_by_account_visibility_direct.uri) end + it 'send as public visibility' do + expect(subject['to']).to include 'https://www.w3.org/ns/activitystreams#Public' + end + + context 'when public_unlisted visibility' do + let(:visibility) { :public_unlisted } + + it 'send as unlisted visibility' do + expect(subject['to']).to_not include 'https://www.w3.org/ns/activitystreams#Public' + end + end + + it 'send as public searchability' do + expect(subject['searchableBy']).to include 'https://www.w3.org/ns/activitystreams#Public' + end + + context 'when public_unlisted searchability' do + let(:searchability) { :public_unlisted } + + it 'send as private searchability' do + expect(subject['searchableBy']).to_not include 'https://www.w3.org/ns/activitystreams#Public' + end + end + context 'when has quote but no_convert setting' do let(:referred) { Fabricate(:status) } diff --git a/spec/services/fan_out_on_write_service_spec.rb b/spec/services/fan_out_on_write_service_spec.rb index 65db23214a4607..34169fcb714c79 100644 --- a/spec/services/fan_out_on_write_service_spec.rb +++ b/spec/services/fan_out_on_write_service_spec.rb @@ -363,6 +363,15 @@ def antenna_with_options(owner, **options) expect(redis).to_not have_received(:publish).with('timeline:public', anything) end + context 'with searchability public_unlisted' do + let(:searchability) { 'public_unlisted' } + + it 'is not broadcast to the hashtag stream' do + expect(redis).to have_received(:publish).with('timeline:hashtag:hoge', anything) + expect(redis).to have_received(:publish).with('timeline:hashtag:hoge:local', anything) + end + end + context 'with searchability private' do let(:searchability) { 'private' } diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb index 5e2a54c264a30f..529ab09969bdd9 100644 --- a/spec/services/post_status_service_spec.rb +++ b/spec/services/post_status_service_spec.rb @@ -127,6 +127,13 @@ expect(status.searchability).to eq 'private' end + it 'creates a status with limited searchability for silenced users with public_unlisted searchability' do + status = subject.call(Fabricate(:account, silenced: true), text: 'test', searchability: :public_unlisted, visibility: :public) + + expect(status).to be_persisted + expect(status.searchability).to eq 'private' + end + it 'creates a status with the given searchability=public / visibility=unlisted' do status = create_status_with_options(searchability: :public, visibility: :unlisted) @@ -134,6 +141,13 @@ expect(status.searchability).to eq 'public' end + it 'creates a status with the given searchability=public_unlisted / visibility=unlisted' do + status = create_status_with_options(searchability: :public_unlisted, visibility: :unlisted) + + expect(status).to be_persisted + expect(status.searchability).to eq 'public_unlisted' + end + it 'creates a status with the given searchability=public / visibility=private' do status = create_status_with_options(searchability: :public, visibility: :private) @@ -141,6 +155,13 @@ expect(status.searchability).to eq 'private' end + it 'creates a status with the given searchability=public_unlisted / visibility=private' do + status = create_status_with_options(searchability: :public_unlisted, visibility: :private) + + expect(status).to be_persisted + expect(status.searchability).to eq 'private' + end + it 'creates a status for the given application' do application = Fabricate(:application) From 40ba6e119b7457161fd43b449875d0fb9d473c1a Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 5 Oct 2023 09:50:08 +0200 Subject: [PATCH 05/29] Fix Vary headers not being set on some redirects (#27272) --- app/controllers/concerns/web_app_controller_concern.rb | 10 ++++++---- app/controllers/follower_accounts_controller.rb | 1 - app/controllers/following_accounts_controller.rb | 1 - spec/requests/cache_spec.rb | 1 + 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/controllers/concerns/web_app_controller_concern.rb b/app/controllers/concerns/web_app_controller_concern.rb index 273d7344caa04b..5687d6e5b60ade 100644 --- a/app/controllers/concerns/web_app_controller_concern.rb +++ b/app/controllers/concerns/web_app_controller_concern.rb @@ -4,10 +4,10 @@ module WebAppControllerConcern extend ActiveSupport::Concern included do - prepend_before_action :redirect_unauthenticated_to_permalinks! - before_action :set_app_body_class - vary_by 'Accept, Accept-Language, Cookie' + + before_action :redirect_unauthenticated_to_permalinks! + before_action :set_app_body_class end def skip_csrf_meta_tags? @@ -22,7 +22,9 @@ def redirect_unauthenticated_to_permalinks! return if user_signed_in? && current_account.moved_to_account_id.nil? redirect_path = PermalinkRedirector.new(request.path).redirect_path + return if redirect_path.blank? - redirect_to(redirect_path) if redirect_path.present? + expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in? + redirect_to(redirect_path) end end diff --git a/app/controllers/follower_accounts_controller.rb b/app/controllers/follower_accounts_controller.rb index ffdbd01802e28f..5effd9495e3583 100644 --- a/app/controllers/follower_accounts_controller.rb +++ b/app/controllers/follower_accounts_controller.rb @@ -3,7 +3,6 @@ class FollowerAccountsController < ApplicationController include AccountControllerConcern include SignatureVerification - include WebAppControllerConcern vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' } diff --git a/app/controllers/following_accounts_controller.rb b/app/controllers/following_accounts_controller.rb index cce296f9fd6b43..268fad96d09b68 100644 --- a/app/controllers/following_accounts_controller.rb +++ b/app/controllers/following_accounts_controller.rb @@ -3,7 +3,6 @@ class FollowingAccountsController < ApplicationController include AccountControllerConcern include SignatureVerification - include WebAppControllerConcern vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' } diff --git a/spec/requests/cache_spec.rb b/spec/requests/cache_spec.rb index 178d19ed0daf97..c391c8b3da9f51 100644 --- a/spec/requests/cache_spec.rb +++ b/spec/requests/cache_spec.rb @@ -30,6 +30,7 @@ module TestEndpoints /directory /@alice /@alice/110224538612341312 + /deck/home ).freeze # Endpoints that should be cachable when accessed anonymously but have a Vary From d22515861ea00b2544ff869a4c3623900e7017ff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 10:28:47 +0200 Subject: [PATCH 06/29] Update dependency @reduxjs/toolkit to v1.9.7 (#27275) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4a14c22ce2a555..8604dcce2576af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1825,9 +1825,9 @@ integrity sha512-tOQQBVH8LsUpGXqDnk+kaOGVsgZ8maHAhEiw3Git3p88q+c0Slgu47HuDnL6sVxeCfz24zbq7dOjsVYDiTpDIA== "@reduxjs/toolkit@^1.9.5": - version "1.9.6" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.6.tgz#fc968b45fe5b17ff90932c4556960d9c1078365a" - integrity sha512-Gc4ikl90ORF4viIdAkY06JNUnODjKfGxZRwATM30EdHq8hLSVoSrwXne5dd739yenP5bJxAX7tLuOWK5RPGtrw== + version "1.9.7" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.7.tgz#7fc07c0b0ebec52043f8cb43510cf346405f78a6" + integrity sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ== dependencies: immer "^9.0.21" redux "^4.2.1" From 3c13d7060031f0db8fd805fe3b4dd24187f8c809 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 5 Oct 2023 13:10:17 +0200 Subject: [PATCH 07/29] Add mention of YJIT in admin dashboard if enabled (#27283) --- app/lib/admin/metrics/dimension/software_versions_dimension.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/lib/admin/metrics/dimension/software_versions_dimension.rb b/app/lib/admin/metrics/dimension/software_versions_dimension.rb index 72a98a88ab78c4..ccf556eae0864a 100644 --- a/app/lib/admin/metrics/dimension/software_versions_dimension.rb +++ b/app/lib/admin/metrics/dimension/software_versions_dimension.rb @@ -25,7 +25,8 @@ def mastodon_version end def ruby_version - value = "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}" + yjit = defined?(RubyVM::YJIT) && RubyVM::YJIT.enabled? + value = "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}#{yjit ? ' +YJIT' : ''}" { key: 'ruby', From 32ab4744727187c07961ef89385882851d33882a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 13:13:14 +0200 Subject: [PATCH 08/29] New Crowdin Translations (automated) (#27277) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/bn.json | 1 + app/javascript/mastodon/locales/ms.json | 1 + app/javascript/mastodon/locales/si.json | 16 ++- config/locales/doorkeeper.si.yml | 8 +- config/locales/ko.yml | 2 +- config/locales/si.yml | 142 ++++++++++++------------ config/locales/simple_form.si.yml | 23 ++-- 7 files changed, 98 insertions(+), 95 deletions(-) diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 4b055f53a410f4..85d6f2474a04e5 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -190,6 +190,7 @@ "conversation.open": "কথপোকথন দেখান", "conversation.with": "{names} এর সঙ্গে", "copypaste.copied": "অনুলিপিকৃত", + "copypaste.copy_to_clipboard": "ক্লিপবোর্ডে কপি করুন", "directory.federated": "পরিচিত ফেডিভারসের থেকে", "directory.local": "শুধু {domain} থেকে", "directory.new_arrivals": "নতুন আগত", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index c6993c809c4c46..3814e691516c01 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -593,6 +593,7 @@ "search_results.all": "Semua", "search_results.hashtags": "Tanda pagar", "search_results.nothing_found": "Tidak dapat menemui apa-apa untuk istilah carian tersebut", + "search_results.see_all": "Lihat semua", "search_results.statuses": "Hantaran", "search_results.title": "Mencari {q}", "server_banner.about_active_users": "Pengguna pelayan ini sepanjang 30 hari yang lalu (Pengguna Aktif Bulanan)", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 4d116bfd31cc64..632e716bca223f 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -1,6 +1,7 @@ { "about.blocks": "මැදිහත්කරණ සේවාදායක", "about.contact": "සබඳතාව:", + "about.disclaimer": "මාස්ටඩන් යනු නිදහස් විවෘත මූලාශ්‍ර මෘදුකාංගයකි. එය මාස්ටඩන් gGmbH හි වෙළඳ නාමයකි.", "about.domain_blocks.suspended.title": "අත්හිටුවා ඇත", "about.rules": "සේවාදායකයේ නීති", "account.account_note_header": "සටහන", @@ -25,6 +26,7 @@ "account.follows.empty": "තවමත් කිසිවෙක් අනුගමනය නොකරයි.", "account.follows_you": "ඔබව අනුගමනය කරයි", "account.go_to_profile": "පැතිකඩට යන්න", + "account.joined_short": "එක් වූ දිනය", "account.link_verified_on": "මෙම සබැඳියේ අයිතිය {date} දී පරීක්‍ෂා කෙරිණි", "account.media": "මාධ්‍යය", "account.mention": "@{name} සඳහන් කරන්ක", @@ -102,6 +104,8 @@ "compose_form.publish_form": "නව ලිපිය", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "වෙනස්කම් සුරකින්න", + "compose_form.spoiler.marked": "අන්තර්ගත අවවාදය ඉවත් කරන්න", + "compose_form.spoiler.unmarked": "අන්තර්ගත අවවාදයක් එක් කරන්න", "compose_form.spoiler_placeholder": "අවවාදය මෙහි ලියන්න", "confirmation_modal.cancel": "අවලංගු", "confirmations.block.block_and_report": "අවහිර කර වාර්තා කරන්න", @@ -131,7 +135,7 @@ "directory.new_arrivals": "නව පැමිණීම්", "directory.recently_active": "මෑත දී සක්‍රියයි", "disabled_account_banner.account_settings": "ගිණුමේ සැකසුම්", - "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම තත්ත්වය ඔබේ වෙබ් අඩවියට ඇතුළත් කරන්න.", + "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම ලිපිය ඔබගේ අඩවියට කාවද්දන්න.", "embed.preview": "මෙන්න එය පෙනෙන අන්දම:", "emoji_button.activity": "ක්‍රියාකාරකම", "emoji_button.clear": "මකන්න", @@ -151,7 +155,7 @@ "empty_column.account_timeline": "මෙහි ලිපි නැත!", "empty_column.account_unavailable": "පැතිකඩ නොතිබේ", "empty_column.blocks": "කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", - "empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.", + "empty_column.bookmarked_statuses": "ඔබ සතුව පොත්යොමු තබන ලද ලිපි කිසිවක් නැත. ඔබ පොත්යොමුවක් තබන විට, එය මෙහි දිස්වනු ඇත.", "empty_column.domain_blocks": "අවහිර කරන ලද වසම් නැත.", "empty_column.explore_statuses": "දැන් කිසිවක් නැඹුරු නොවේ. පසුව නැවත පරීක්ෂා කරන්න!", "empty_column.follow_requests": "ඔබට තවමත් අනුගමන ඉල්ලීම් ලැබී නැත. ඉල්ලීමක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", @@ -353,7 +357,7 @@ "report.forward": "{target} වෙත හරවන්න", "report.forward_hint": "ගිණුම වෙනත් සේවාදායකයකින්. වාර්තාවේ නිර්නාමික පිටපතක් එතනටත් එවන්න?", "report.mute": "නිහඬ", - "report.mute_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට තවමත් ඔබව අනුගමනය කිරීමට සහ ඔබේ පළ කිරීම් දැකීමට හැකි අතර ඒවා නිශ්ශබ්ද කර ඇති බව නොදැනේ.", + "report.mute_explanation": "ඔබ ඔවුන්ගේ ලිපි නොදකිනු ඇත. ඔවුන්ට තවමත් ඔබව අනුගමනයට සහ ඔබගේ ලිපි දැකීමට හැකි අතර ඔවුන්ව නිහඬ කර ඇති බව දැන ගැනීමට නොහැකිය.", "report.next": "ඊළඟ", "report.placeholder": "අමතර අදහස්", "report.reasons.dislike": "මම එයට අකැමතියි", @@ -367,7 +371,7 @@ "report.rules.subtitle": "අදාළ සියල්ල තෝරන්න", "report.rules.title": "කුමන නීති උල්ලංඝනය කරන්නේද?", "report.statuses.subtitle": "අදාළ සියල්ල තෝරන්න", - "report.statuses.title": "මෙම වාර්තාව උපස්ථ කරන පෝස්ට් තිබේද?", + "report.statuses.title": "මෙම වාර්තාව උපස්ථ කළ ලිපි තිබේ ද?", "report.submit": "යොමන්න", "report.target": "{target} වාර්තා කිරීම", "report.thanks.take_action": "මාස්ටඩන් හි ඔබ දකින දෑ පාලනයට තිබෙන විකල්ප:", @@ -375,7 +379,7 @@ "report.thanks.title": "මෙය නොපෙන්විය යුතුද?", "report.thanks.title_actionable": "වාර්තා කිරීමට ස්තූතියි, අපි මේ ගැන සොයා බලමු.", "report.unfollow": "@{name}අනුගමනය නොකරන්න", - "report.unfollow_explanation": "ඔබ මෙම ගිණුම අනුගමනය කරයි. ඔබේ නිවසේ සංග්‍රහයේ ඔවුන්ගේ පළ කිරීම් තවදුරටත් නොදැකීමට, ඒවා අනුගමනය නොකරන්න.", + "report.unfollow_explanation": "ඔබ මෙම ගිණුම අනුගමනය කරයි. ඔබගේ මුල් පිටුවේ ඔවුන්ගේ ලිපි නොදැකීමට, ඔවුන්ව තවදුරටත් අනුගමනය නොකරන්න.", "report_notification.attached_statuses": "{count, plural, one {ලිපි {count}} other {ලිපි {count} ක්}} අමුණා ඇත", "report_notification.categories.other": "වෙනත්", "report_notification.categories.spam": "ආයාචිත", @@ -443,7 +447,7 @@ "timeline_hint.resources.followers": "අනුගාමිකයින්", "timeline_hint.resources.follows": "අනුගමනය", "timeline_hint.resources.statuses": "පරණ ලිපි", - "trends.trending_now": "දැන් ප්‍රවණතාවය", + "trends.trending_now": "දැන් නැගී එන", "ui.beforeunload": "ඔබ මාස්ටඩන් හැර ගියහොත් කටුපිටපත අහිමි වේ.", "units.short.billion": "{count}බී", "units.short.million": "ද.ල. {count}", diff --git a/config/locales/doorkeeper.si.yml b/config/locales/doorkeeper.si.yml index 31b38444d39462..d3550cf5989b78 100644 --- a/config/locales/doorkeeper.si.yml +++ b/config/locales/doorkeeper.si.yml @@ -58,10 +58,10 @@ si: authorize: සත්‍යාපනය deny: ප්‍රතික්ෂේප කරන්න error: - title: දෝෂයක් සිදුවී ඇත + title: දෝෂයක් සිදු වී ඇත new: prompt_html: "%{client_name} ඔබගේ ගිණුමට ප්‍රවේශ වීමට අවසර ලබා ගැනීමට කැමති වේ. එය තෙවන පාර්ශවීය යෙදුමකි. ඔබ එය විශ්වාස නොකරන්නේ නම්, ඔබ එයට අවසර නොදිය යුතුය." - review_permissions: අවසර සමාලෝචනය කරන්න + review_permissions: අවසර සමාලෝචනය title: බලය පැවරීමේ අවශ්ය show: title: මෙම අවසර කේතය පිටපත් කර එය යෙදුමට අලවන්න. @@ -73,11 +73,11 @@ si: index: authorized_at: "%{date}මත අවසර දී ඇත" description_html: මේවා API භාවිතයෙන් ඔබගේ ගිණුමට ප්‍රවේශ විය හැකි යෙදුම් වේ. ඔබ මෙහි හඳුනා නොගත් යෙදුම් තිබේ නම්, හෝ යෙදුමක් වැරදි ලෙස හැසිරෙන්නේ නම්, ඔබට එහි ප්‍රවේශය අවලංගු කළ හැක. - last_used_at: අවසන් වරට භාවිතා කළේ %{date} + last_used_at: අන්තිම භාවිතය %{date} never_used: භාවිතා කර නැත scopes: අවසර superapp: අභ්‍යන්තර - title: ඔබගේ බලයලත් අයදුම්පත් + title: ඔබගේ බලයලත් යෙදුම් errors: messages: access_denied: සම්පත් හිමිකරු හෝ අවසර සේවාදායකය ඉල්ලීම ප්‍රතික්ෂේප කළේය. diff --git a/config/locales/ko.yml b/config/locales/ko.yml index cc3fd07c49c311..ff337cc6ca6ed3 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -47,7 +47,7 @@ ko: label: 역할 변경 no_role: 역할 없음 title: "%{username}의 역할 변경" - confirm: 확정 + confirm: 신원 확인 confirmed: 확인됨 confirming: 확인 중 custom: 사용자 지정 diff --git a/config/locales/si.yml b/config/locales/si.yml index 787d6fde38a4c7..51e1b838f3d60e 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -16,8 +16,6 @@ si: last_active: අවසාන ක්රියාකාරී link_verified_on: මෙම සබැඳියේ හිමිකාරිත්වය %{date}හි පරීක්ෂා කරන ලදී nothing_here: මෙහි කිසිවක් නැත! - pin_errors: - following: ඔබට අනුමත කිරීමට අවශ්‍ය පුද්ගලයා ඔබ දැනටමත් අනුගමනය කරමින් සිටිය යුතුය posts: one: ලිපිය other: ලිපි @@ -69,7 +67,7 @@ si: invite_request_text: එක්වීමට හේතුව invited_by: විසින් ආරාධනා කරන ලදී ip: අ.ජා. කෙ. (IP) - joined: එක් වී ඇත + joined: එක් වූ දිනය location: all: සියල්ල local: ස්ථානීය @@ -123,7 +121,7 @@ si: security_measures: only_password: මුරපදය පමණි password_and_2fa: මුරපදය සහ 2FA - sensitized: සංවේදී ලෙස සලකුණු කර ඇත + sensitized: සංවේදී බව සලකුණු කර ඇත shared_inbox_url: බෙදාගත් එන ලිපි URL show: created_reports: වාර්තා හැදුවා @@ -173,7 +171,7 @@ si: destroy_email_domain_block: ඊමේල් ඩොමේන් බ්ලොක් එක මකන්න destroy_instance: වසම පිරිසිදු කරන්න destroy_ip_block: IP රීතිය මකන්න - destroy_status: පළ කිරීම මකන්න + destroy_status: ලිපිය මකන්න destroy_unavailable_domain: ලබා ගත නොහැකි වසම මකන්න disable_2fa_user: 2FA අබල කරන්න disable_custom_emoji: අභිරුචි ඉමෝජි අබල කරන්න @@ -199,7 +197,7 @@ si: update_announcement: නිවේදනය යාවත්කාල කරන්න update_custom_emoji: අභිරුචි ඉමොජි යාවත්කාලීන කරන්න update_domain_block: ඩොමේන් බ්ලොක් යාවත්කාලීන කරන්න - update_status: පළ කිරීම යාවත්කාලීන කරන්න + update_status: ලිපිය යාවත්කාල කරන්න actions: approve_user_html: "%{name} අනුමත ලියාපදිංචිය %{target}සිට" assigned_to_self_report_html: "%{name} වාර්තාව %{target} තමන්ටම පවරා ඇත" @@ -220,7 +218,6 @@ si: destroy_email_domain_block_html: "%{name} අවහිර නොකළ විද්‍යුත් තැපැල් වසම %{target}" destroy_instance_html: "%{name} පිරිසිදු කරන ලද වසම %{target}" destroy_ip_block_html: IP %{target}සඳහා %{name} මකා දැමූ රීතිය - destroy_status_html: "%{name} පෝස්ට් %{target}විසින් ඉවත් කරන ලදී" destroy_unavailable_domain_html: "%{name} වසම %{target}වෙත බෙදා හැරීම නැවත ආරම්භ විය" disable_2fa_user_html: "%{name} පරිශීලක %{target}සඳහා සාධක දෙකක අවශ්‍යතාවය අක්‍රීය කර ඇත" disable_custom_emoji_html: "%{name} ආබාධිත ඉමොජි %{target}" @@ -236,18 +233,17 @@ si: reopen_report_html: "%{name} නැවත විවෘත කළ වාර්තාව %{target}" reset_password_user_html: "%{name} පරිශීලක %{target}හි මුරපදය යළි පිහිටුවන්න" resolve_report_html: "%{name} විසඳන ලද වාර්තාව %{target}" - sensitive_account_html: "%{name} %{target}හි මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත" + sensitive_account_html: "%{target}ගේ මාධ්‍ය සංවේදී බව %{name} සලකුණු කර ඇත" silence_account_html: "%{name} සීමිත %{target}ගිණුමක්" suspend_account_html: "%{name} %{target}ගේ ගිණුම අත්හිටුවා ඇත" unassigned_report_html: "%{name} පවරා නොදුන් වාර්තාව %{target}" unblock_email_account_html: "%{name} %{target}ගේ ඊමේල් ලිපිනය අවහිර කිරීම ඉවත් කරන ලදී" - unsensitive_account_html: "%{name} සලකුණු නොකළ %{target}ගේ මාධ්‍ය සංවේදී ලෙස" + unsensitive_account_html: "%{target}ගේ මාධ්‍ය සංවේදී බව %{name} ඉවත් කර ඇත" unsilence_account_html: "%{target}ගිණුමේ %{name} undid සීමාව" unsuspend_account_html: "%{name} අත්හිටුවන ලද %{target}ගිණුම" update_announcement_html: "%{name} යාවත්කාලීන නිවේදනය %{target}" update_custom_emoji_html: "%{name} යාවත්කාලීන කළ ඉමොජි %{target}" update_domain_block_html: "%{target}සඳහා %{name} යාවත්කාලීන කරන ලද වසම් වාරණ" - update_status_html: "%{name} %{target}යාවත්කාලීන කරන ලද පළ කිරීම" empty: ලඝු-සටහන් හමු නොවිණි. filter_by_action: ක්‍රියාමාර්ගය අනුව පෙරන්න filter_by_user: පරිශ්‍රීලකයා අනුව පෙරන්න @@ -305,8 +301,8 @@ si: dashboard: active_users: ක්රියාකාරී පරිශීලකයන් interactions: අන්තර්ක්රියා - media_storage: මාධ්ය ගබඩාව - new_users: නව පරිශීලකයන් + media_storage: මාධ්‍ය ආචයනය + new_users: නව පරිශ්‍රීලකයින් opened_reports: විවෘත වාර්තා pending_appeals_html: one: "%{count} අභියාචනයක් බලාපොරොත්තු වේ" @@ -435,7 +431,7 @@ si: unavailable: ලබා ගත නොහැක delivery_available: බෙදා හැරීම ලබා ගත හැකිය delivery_error_days: බෙදා හැරීමේ දෝෂ සහිත දින - delivery_error_hint: දින %{count} ක් සඳහා බෙදා හැරීම කළ නොහැකි නම්, එය ස්වයංක්‍රීයව බෙදා හැරිය නොහැකි ලෙස ලකුණු කරනු ලැබේ. + delivery_error_hint: දවස් %{count} කින් බාරදීමට නොහැකි වුවහොත්, බාරදීමට නොහැකි බව ස්වයංක්‍රීයව සලකුණු වේ. destroyed_msg: "%{domain} සිට දත්ත දැන් ආසන්න මකාදැමීම සඳහා පෝලිම් කර ඇත." empty: වසම් කිසිවක් හමු නොවීය. known_accounts: @@ -454,7 +450,7 @@ si: total_followed_by_them: ඔවුන් විසින් අනුගමනය කරන ලදී total_followed_by_us: අප විසින් අනුගමනය කරන ලදී total_reported: ඔවුන් ගැන වාර්තා - total_storage: මාධ්ය ඇමුණුම් + total_storage: මාධ්‍ය ඇමුණුම් totals_time_period_hint_html: පහත දැක්වෙන එකතුවෙහි සියලු කාලය සඳහා දත්ත ඇතුළත් වේ. invites: deactivate_all: සියල්ල අක්‍රිය කරන්න @@ -483,11 +479,9 @@ si: relays: add_new: නව රිලේ එක් කරන්න delete: මකන්න - description_html: "ෆෙඩරේෂන් රිලේ යනු එයට දායක වී ප්‍රකාශයට පත් කරන සේවාදායකයන් අතර විශාල ප්‍රසිද්ධ පළ කිරීම් හුවමාරු කරන අතරමැදි සේවාදායකයකි. එය කුඩා සහ මධ්‍යම සේවාදායකයන්ට fediverseවෙතින් අන්තර්ගතය සොයා ගැනීමට උදවු කළ හැකි අතර, එසේ නොමැති නම් දේශීය පරිශීලකයින්ට දුරස්ථ සේවාදායකයන් මත වෙනත් පුද්ගලයින් හස්තීයව අනුගමනය කිරීම අවශ්‍ය වේ." disable: අබල කරන්න disabled: අබලයි enable: සබල කරන්න - enable_hint: සක්‍රිය කළ පසු, ඔබේ සේවාදායකය මෙම රිලේ වෙතින් සියලුම පොදු පළ කිරීම් සඳහා දායක වන අතර, මෙම සේවාදායකයේ පොදු පළ කිරීම් එයට යැවීම ආරම්භ කරනු ඇත. enabled: සබල කර ඇත inbox_url: රිලේ URL pending: රිලේ අනුමැතිය සඳහා රැඳී සිටිමින් @@ -507,8 +501,6 @@ si: action_log: විගණන සටහන action_taken_by: විසින් ගන්නා ලද පියවර actions: - delete_description_html: වාර්තා කරන ලද පළ කිරීම් මකා දැමෙනු ඇති අතර එම ගිණුමේම අනාගත උල්ලංඝනයන් තීව්‍ර කිරීමට ඔබට උදවු කිරීමට වර්ජනයක් වාර්තා කරනු ඇත. - mark_as_sensitive_description_html: වාර්තා කරන ලද පළ කිරීම් වල මාධ්‍ය සංවේදී ලෙස සලකුණු කරනු ලබන අතර එම ගිණුම මගින් අනාගත උල්ලංඝනයන් උත්සන්න කිරීමට ඔබට උපකාර කිරීමට වර්ජනයක් වාර්තා කරනු ඇත. other_description_html: ගිණුමේ හැසිරීම පාලනය කිරීම සහ වාර්තා කළ ගිණුමට සන්නිවේදනය අභිරුචිකරණය කිරීම සඳහා තවත් විකල්ප බලන්න. resolve_description_html: වාර්තා කරන ලද ගිණුමට එරෙහිව කිසිදු ක්‍රියාමාර්ගයක් නොගනු ඇත, වැඩ වර්ජනයක් වාර්තා නොකෙරේ, වාර්තාව වසා දමනු ඇත. actions_description_html: මෙම වාර්තාව විසඳීමට ගත යුතු ක්‍රියාමාර්ගය තීරණය කරන්න. ඔබ වාර්තා කරන ලද ගිණුමට එරෙහිව දණ්ඩනීය ක්‍රියාමාර්ගයක් ගන්නේ නම්, Spam කාණ්ඩය තෝරාගත් විට හැර, ඔවුන්ට විද්‍යුත් තැපෑලෙන් දැනුම්දීමක් යවනු ලැබේ. @@ -526,14 +518,14 @@ si: delete_and_resolve: ලිපි මකන්න forwarded: හරවා යවා ඇත forwarded_to: "%{domain} වෙත හරවා යැවිණි" - mark_as_resolved: විසඳා ඇති ලෙස ලකුණු කරන්න - mark_as_sensitive: සංවේදී ලෙස ලකුණු කරන්න - mark_as_unresolved: නොවිසඳුනු ලෙස ලකුණු කරන්න + mark_as_resolved: විසඳූ බව යොදන්න + mark_as_sensitive: සංවේදී බව යොදන්න + mark_as_unresolved: නොවිසඳූ බව යොදන්න no_one_assigned: කිසිවෙක් නැත notes: create: සටහන එකතු කරන්න - create_and_resolve: සටහන සමඟ විසඳන්න - create_and_unresolve: සටහනක් සමඟ නැවත විවෘත කරන්න + create_and_resolve: සටහනක් සමඟ විසඳන්න + create_and_unresolve: සටහනක් සමඟ නැවත අරින්න delete: මකන්න placeholder: ගෙන ඇති ක්‍රියාමාර්ග, හෝ වෙනත් අදාළ යාවත්කාලීන විස්තර කරන්න... title: සටහන් @@ -564,7 +556,12 @@ si: moderation: මැදිහත්කරණය special: විශේෂ delete: මකන්න + permissions_count: + one: අවසර %{count} + other: අවසර %{count} privileges: + administrator: පරිපාලක + delete_user_data: පරිශ්‍රීලක දත්ත මකන්න invite_users: ආරාධනා කරන්න manage_announcements: නිවේදනය කළමනාකරණය manage_federation: ඒකාබද්ධ කළමනාකරණය @@ -592,6 +589,7 @@ si: title: පෙනුම discovery: profile_directory: පැතිකඩ නාමාවලිය + public_timelines: ප්‍රසිද්ධ කාලරේඛා domain_blocks: all: හැමෝටම disabled: කාටවත් නෑ @@ -626,7 +624,7 @@ si: media: title: මාධ්‍යය metadata: පාරදත්ත - no_status_selected: කිසිවක් තෝරා නොගත් බැවින් තනතුරු කිසිවක් වෙනස් කර නැත + no_status_selected: කිසිවක් නොතේරූ බැවින් ලිපි කිසිවක් වෙනස් කර නැත open: ලිපිය අරින්න original_status: මුල් ලිපිය status_changed: ලිපිය සංශෝධිතයි @@ -639,7 +637,7 @@ si: disable: "%{name} %{target}ගේ ගිණුම නිශ්චල කළේය" mark_statuses_as_sensitive: "%{target}ගේ ලිපි සංවේදී බව %{name} සලකුණු කර ඇත" none: "%{name} %{target}අනතුරු ඇඟවීමක් යවා ඇත" - sensitive: "%{name} %{target}ගේ ගිණුම සංවේදී ලෙස ලකුණු කර ඇත" + sensitive: "%{target}ගේ ගිණුම සංවේදී බව %{name} සලකුණු කර ඇත" silence: "%{name} සීමිත %{target}ගිණුමක්" suspend: "%{name} %{target}ගේ ගිණුම අත්හිටුවා ඇත" appeal_approved: අභියාචනා කළා @@ -691,9 +689,9 @@ si: title: ප්‍රකාශකයන් rejected: ප්‍රතික්ෂේප කළා statuses: - allow: පළ කිරීමට ඉඩ දෙන්න + allow: පළ කිරීමට ඉඩදෙන්න allow_account: කතුවරයාට ඉඩ දෙන්න - disallow: පළ කිරීමට ඉඩ නොදෙන්න + disallow: ප්‍රකාශනයට ඉඩ නොදෙන්න disallow_account: කතුවරයාට ඉඩ නොදෙන්න not_discoverable: කර්තෘ සොයා ගත හැකි බව තෝරාගෙන නැත shared_by: @@ -732,12 +730,12 @@ si: webhooks: add_new: අන්ත ලක්ෂ්‍යය එක් කරන්න delete: මකන්න - disable: අක්රිය කරන්න - disabled: ආබාධිතයි + disable: අබල කරන්න + disabled: අබලයි edit: අන්ත ලක්ෂ්‍යය සංස්කරණය කරන්න empty: ඔබට තවම වින්‍යාස කර ඇති කිසිදු webhook අන්ත ලක්ෂ්‍යයක් නොමැත. enable: සබල කරන්න - enabled: ක්රියාකාරී + enabled: ක්‍රියාත්මකයි enabled_events: one: සබල සිදුවීම් 1 other: සබල සිදුවීම් %{count} @@ -752,7 +750,6 @@ si: actions: delete_statuses: ඔවුන්ගේ පළ කිරීම් මකා දැමීමට disable: ඔවුන්ගේ ගිණුම කැටි කිරීමට - mark_statuses_as_sensitive: ඔවුන්ගේ තනතුරු සංවේදී ලෙස සලකුණු කිරීමට none: අනතුරු ඇඟවීමක් sensitive: ඔවුන්ගේ ගිණුම සංවේදී ලෙස සලකුණු කිරීමට silence: ඔවුන්ගේ ගිණුම සීමා කිරීමට @@ -769,7 +766,7 @@ si: new_trending_links: title: නැඟී එන සබැඳි new_trending_statuses: - title: ප්‍රවණතා පළ කිරීම් + title: නැගී එන ලිපි new_trending_tags: no_approved_tags: දැනට අනුමත ප්‍රවණතා හැෂ් ටැග් නොමැත. requirements: 'මෙම ඕනෑම අපේක්ෂකයෙකුට #%{rank} අනුමත ප්‍රවණතා හැෂ් ටැගය අභිබවා යා හැකිය, එය දැනට ලකුණු %{lowest_tag_score}ක් සමඟ #%{lowest_tag_name} වේ.' @@ -803,11 +800,13 @@ si: applications: created: යෙදුම සාර්ථකව සෑදිණි destroyed: යෙදුම සාර්ථකව මකා ඇත + logout: නික්මෙන්න regenerate_token: ප්‍රවේශ ටෝකනය නැවත උත්පාදනය කරන්න token_regenerated: ප්‍රවේශ ටෝකනය සාර්ථකව ප්‍රතිජනනය කරන ලදී warning: මෙම දත්ත සමඟ ඉතා ප්රවේශම් වන්න. එය කිසි විටෙක කිසිවෙකු සමඟ බෙදා නොගන්න! your_token: ඔබේ ප්‍රවේශ ටෝකනය auth: + apply_for_account: ගිණුමක් ඉල්ලන්න delete_account: ගිණුම මකන්න delete_account_html: ඔබට ඔබගේ ගිණුම මකා දැමීමට අවශ්‍ය නම්, ඔබට මෙතැනින් ඉදිරියට යා හැක. තහවුරු කිරීම සඳහා ඔබෙන් අසනු ඇත. description: @@ -823,14 +822,25 @@ si: logout: නික්මෙන්න migrate_account: වෙනත් ගිණුමකට යන්න migrate_account_html: ඔබට මෙම ගිණුම වෙනත් එකකට හරවා යැවීමට අවශ්‍ය නම්, ඔබට එය මෙහි වින්‍යාසගත කළ හැක. + progress: + details: ඔබගේ විස්තර + rules: නීති පිළිගන්න + providers: + cas: CAS + saml: SAML register: ලියාපදිංචිය registration_closed: "%{instance} නව සාමාජිකයින් පිළිගන්නේ නැත" reset_password: මුරපදය යළි සකසන්න rules: accept: පිළිගන්න back: ආපසු + title_invited: ඔබට ආරාධනා කර ඇත. security: ආරක්‍ෂාව set_new_password: නව මුරපදය සකසන්න + setup: + title: ඔබගේ එනලිපි බලන්න + sign_in: + title: "%{domain} වෙත පිවිසෙන්න" status: account_status: ගිණුමේ තත්වය confirming: විද්‍යුත් තැපෑල තහවුරු කිරීම සම්පූර්ණ කිරීම සඳහා රැඳී සිටිමින්. @@ -876,7 +886,7 @@ si: warning: before: 'ඉදිරියට යාමට පෙර, කරුණාකර මෙම සටහන් හොඳින් කියවන්න:' caches: වෙනත් සේවාදායකයන් විසින් හැඹිලිගත කර ඇති අන්තර්ගතය දිගටම පැවතිය හැක - data_removal: ඔබගේ පළ කිරීම් සහ අනෙකුත් දත්ත ස්ථිරවම ඉවත් කරනු ලැබේ + data_removal: ඔබගේ ලිපි සහ අනෙකුත් දත්ත සදහටම ඉවත් කෙරෙනු ඇත email_change_html: ඔබට ඔබගේ ගිණුම මකා කළ හැක email_contact_html: එය තවමත් නොපැමිණියේ නම්, ඔබට උදව් සඳහා %{email} විද්‍යුත් තැපෑලෙන් යැවිය හැක email_reconfirmation_html: ඔබට තහවුරු කිරීමේ විද්‍යුත් තැපෑල නොලැබුනේ නම්, ඔබට එය නැවත ඉල්ලා සිටිය හැක @@ -900,13 +910,12 @@ si: description_html: මේවා ඔබගේ ගිණුමට එරෙහිව ගන්නා ලද ක්‍රියා සහ %{instance}හි කාර්ය මණ්ඩලය විසින් ඔබට එවා ඇති අනතුරු ඇඟවීම් වේ. recipient: වෙත යොමු කරන ලදී reject_appeal: අභියාචනය ප්‍රතික්ෂේප කරන්න - status: 'පළ කිරීම #%{id}' - status_removed: පළ කිරීම දැනටමත් පද්ධතියෙන් ඉවත් කර ඇත + status: "#%{id} ලිපිය" + status_removed: ලිපිය දැනටමත් පද්ධතියෙන් ඉවත් කර ඇත title: "%{action} සිට %{date}" title_actions: - delete_statuses: පසු ඉවත් කිරීම + delete_statuses: ලිපි ඉවත් කිරීම disable: ගිණුම කැටි කිරීම - mark_statuses_as_sensitive: තනතුරු සංවේදී ලෙස සලකුණු කිරීම none: අවවාදයයි sensitive: ගිණුම සංවේදී ලෙස සලකුණු කිරීම silence: ගිණුම සීමා කිරීම @@ -941,7 +950,7 @@ si: archive_takeout: date: දිනය download: ඔබගේ සංරක්‍ෂිතය බාගන්න - hint_html: ඔබට ඔබගේ පළ කිරීම් සහ උඩුගත කළ මාධ්‍යහි සංරක්ෂිතයක් ඉල්ලා සිටිය හැක. නිර්යාත කළ දත්ත ActivityPub ආකෘතියෙන්, ඕනෑම අනුකූල මෘදුකාංගයකට කියවිය හැකිය. ඔබට දින 7කට වරක් ලේඛනාගාරයක් ඉල්ලා සිටිය හැක. + hint_html: ඔබට ලිපි සහ උඩුගත කළ මාධ්‍යවල සංරක්‍ෂණයක් ඉල්ලීමට හැකිය. නිර්යාත කළ දත්ත ActivityPub ආකෘතියට ගැළපෙන ඕනෑම මෘදුකාංගයකින් කියවීමට හැකිය. ඔබට දවස් 7 කට වරක් සංරක්‍ෂණයක් ඉල්ලීමට හැකිය. in_progress: ඔබගේ සංරක්ෂිතය සම්පාදනය කරමින්... request: ඔබගේ සංරක්ෂිතය ඉල්ලන්න size: ප්‍රමාණය @@ -951,16 +960,15 @@ si: domain_blocks: වසම් අවහිර කිරීම් lists: ලැයිස්තු mutes: ඔබ නිහඬ කරන්න - storage: මාධ්‍ය ගබඩාව + storage: මාධ්‍ය ආචයනය featured_tags: add_new: අලුතින් එකතු කරන්න - hint_html: "විශේෂාංගගත හැෂ් ටැග් මොනවාද? ඒවා ඔබේ පොදු පැතිකඩෙහි ප්‍රමුඛව ප්‍රදර්ශනය වන අතර එම හැෂ් ටැග් යටතේ ඔබේ පොදු පළ කිරීම් බ්‍රවුස් කිරීමට මිනිසුන්ට ඉඩ සලසයි. නිර්මාණාත්මක කෘති හෝ දිගු කාලීන ව්යාපෘති පිළිබඳ වාර්තාවක් තබා ගැනීම සඳහා ඔවුන් විශිෂ්ට මෙවලමක් වේ." filters: contexts: account: පැතිකඩයන් home: මුල සහ ලැයිස්තු notifications: දැනුම්දීම් - public: පොදු කාලරේඛා + public: ප්‍රසිද්ධ කාලරේඛා thread: සංවාද edit: add_keyword: මූල පදය එක් කරන්න @@ -1018,9 +1026,12 @@ si: overwrite: උඩින් ලියන්න overwrite_long: වත්මන් වාර්තා නව ඒවා සමඟ ප්‍රතිස්ථාපනය කරන්න preface: ඔබ අනුගමන කරන හෝ අවහිර කරන පුද්ගලයින්ගේ ලැයිස්තුවක් වැනි වෙනත් සේවාදායකයකින් ඔබ නිර්යාත කර ඇති දත්ත ඔබට ආයාත කළ හැක. + status: තත්‍වය success: ඔබගේ දත්ත සාර්ථකව උඩුගත කර ඇති අතර නියමිත වේලාවට සැකසෙනු ඇත titles: lists: ලැයිස්තු ආයාත වෙමින් + type_groups: + constructive: අනුගමන හා පොත්යොමු types: blocking: අවහිර ලැයිස්තුව bookmarks: පොත්යොමු @@ -1064,7 +1075,7 @@ si: title: සත්‍යාපන ඉතිහාසය media_attachments: validations: - images_and_video: දැනටමත් පින්තූර අඩංගු පළ කිරීමකට වීඩියෝවක් ඇමිණිය නොහැක + images_and_video: දැනටමත් රූප අඩංගු ලිපියකට දෘශ්‍යකයක් ඇමිණීමට නොහැකිය not_ready: සැකසීම අවසන් නොකළ ගොනු ඇමිණිය නොහැක. මොහොතකින් නැවත උත්සාහ කරන්න! too_many: ගොනු 4කට වඩා ඇමිණිය නොහැක migrations: @@ -1168,8 +1179,8 @@ si: too_many_options: අථක %{max} කට වඩා අඩංගු නොවිය යුතුය preferences: other: වෙනත් - posting_defaults: පෙරනිමි පළ කිරීම - public_timelines: පොදු කාලරේඛා + posting_defaults: සැමවිට පළ කරන ආකාරය + public_timelines: ප්‍රසිද්ධ කාලරේඛා privacy: search: සොයන්න privacy_policy: @@ -1203,11 +1214,8 @@ si: rss: content_warning: 'අන්තර්ගත අනතුරු ඇඟවීම:' descriptions: - account: "@%{acct}සිට පොදු පළ කිරීම්" - tag: "#%{hashtag}ටැග් කර ඇති පොදු පළ කිරීම්" + account: "@%{acct} වෙතින් ප්‍රසිද්ධ ලිපි" scheduled_statuses: - over_daily_limit: ඔබ අද දිනට නියමිත පළ කිරීම් %{limit} සීමාව ඉක්මවා ඇත - over_total_limit: ඔබ නියමිත පළ කිරීම් %{limit} සීමාව ඉක්මවා ඇත too_soon: නියමිත දිනය අනාගතයේ විය යුතුය sessions: activity: අවසාන ක්‍රියාකාරකම @@ -1259,7 +1267,7 @@ si: account_settings: ගිණුමේ සැකසුම් aliases: ගිණුම් අන්වර්ථ නාමයන් appearance: පෙනුම - authorized_apps: අවසර ලත් යෙදුම් + authorized_apps: බලයලත් යෙදුම් back: මාස්ටඩන් වෙත ආපසු delete: ගිණුම මැකීම development: සංවර්ධනය @@ -1273,7 +1281,7 @@ si: preferences: අභිප්‍රේත profile: ප්‍රසිද්ධ පැතිකඩ relationships: අනුගාමිකයින් සහ අනුගාමිකයින් - statuses_cleanup: ස්වයංක්‍රීය පළ කිරීම් මකාදැමීම + statuses_cleanup: ස්වයංක්‍රීය ලිපි මැකීම two_factor_authentication: ද්වි සාධක Aut webauthn_authentication: ආරක්‍ෂණ යතුරු statuses: @@ -1295,13 +1303,13 @@ si: other: 'අනුමත නොකළ හැෂ් ටැග් අඩංගු විය: %{tags}' edited_at_html: සංස්කරණය %{date} errors: - in_reply_not_found: ඔබ පිළිතුරු දීමට උත්සාහ කරන පළ කිරීම පවතින බවක් නොපෙනේ. + in_reply_not_found: ඔබ පිළිතුරු දීමට තැත් කරන ලිපිය නොපවතින බව පෙනෙයි. open_in_web: වෙබයේ විවෘත කරන්න over_character_limit: අක්ෂර සීමාව %{max} ඉක්මවා ඇත pin_errors: - direct: සඳහන් කළ පරිශීලකයින්ට පමණක් පෙනෙන පළ කිරීම් ඇමිණිය නොහැක - limit: ඔබ දැනටමත් උපරිම පළ කිරීම් සංඛ්‍යාව අමුණා ඇත - ownership: වෙනත් කෙනෙකුගේ පළ කිරීමක් ඇමිණිය නොහැක + direct: සඳහන් කළ අයට පමණක් පෙනෙන ලිපි ඇමිණීමට නොහැකිය + limit: දැනටමත් මුදුනට ඇමිණිමට හැකි ලිපි සීමාවට ළඟා වී ඇත + ownership: වෙනත් අයගේ ලිපි ඇමිණීමට නොහැකිය poll: total_people: one: පුද්ගලයින් %{count} @@ -1324,16 +1332,14 @@ si: unlisted: ලැයිස්තුගත නොකළ unlisted_long: සෑම කෙනෙකුටම දැකිය හැක, නමුත් පොදු කාලරාමුවෙහි ලැයිස්තුගත කර නොමැත statuses_cleanup: - enabled: පැරණි පළ කිරීම් ස්වයංක්‍රීයව මකන්න - enabled_hint: ඔබේ පළ කිරීම් පහත ව්‍යතිරේකවලින් එකකට ගැලපෙන්නේ නම් මිස, ඒවා නිශ්චිත වයස් සීමාවකට ළඟා වූ පසු ස්වයංක්‍රීයව මකයි + enabled: පරණ ලිපි ස්වයංක්‍රීයව මකන්න exceptions: හැර දැමීම් - explanation: පළ කිරීම් මකා දැමීම මිල අධික මෙහෙයුමක් වන බැවින්, සේවාදායකය වෙනත් ආකාරයකින් කාර්යබහුල නොවන විට කාලයත් සමඟ මෙය සෙමින් සිදු කෙරේ. මෙම හේතුව නිසා, ඔබේ පළ කිරීම් වයස් සීමාවට ළඟා වූ පසු ටික වේලාවකට පසුව මකා දැමිය හැක. ignore_favs: ප්‍රියතමයන් නොසලකන්න interaction_exceptions: අන්තර්ක්‍රියා මත පදනම් වූ ව්‍යතිරේක keep_direct: සෘජු පණිවිඩ තබාගන්න keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මැකෙන්නේ නැත keep_media: මාධ්‍ය ඇමුණුම් සහිත ලිපි තබාගන්න - keep_media_hint: මාධ්‍ය ඇමුණුම් ඇති ඔබේ පළ කිරීම් කිසිවක් මකන්නේ නැත + keep_media_hint: මාධ්‍ය ඇමුණුම් සහිත ඔබගේ ලිපි කිසිවක් මැකෙන්නේ නැත keep_pinned: ඇමිණූ ලිපි තබාගන්න keep_pinned_hint: ඔබ ඇමිණූ ලිපි කිසිවක් නොමැකෙයි keep_polls_hint: ඔබගේ මත විමසුම් මැකෙන්නේ නැත @@ -1374,12 +1380,12 @@ si: edit: සංස්කරණය enabled: ද්වි-සාධක සත්‍යාපනය සක්‍රීය කර ඇත enabled_success: ද්වි-සාධක සත්‍යාපනය සාර්ථකව සබල කර ඇත - generate_recovery_codes: ප්‍රතිසාධන කේත ජනනය කරන්න + generate_recovery_codes: ප්‍රතිසාධන කේත උත්පාදනය කරන්න lost_recovery_codes: ඔබගේ දුරකථනය නැති වුවහොත් ඔබගේ ගිණුමට ප්‍රවේශය නැවත ලබා ගැනීමට ප්‍රතිසාධන කේත ඔබට ඉඩ සලසයි. ඔබට ඔබේ ප්‍රතිසාධන කේත නැති වී ඇත්නම්, ඔබට ඒවා මෙහි නැවත උත්පාදනය කළ හැක. ඔබගේ පැරණි ප්‍රතිසාධන කේත අවලංගු වනු ඇත. - methods: ද්වි සාධක ක්රම + methods: ද්වි සාධක ක්‍රම otp: Authenticator යෙදුම - recovery_codes: උපස්ථ ප්‍රතිසාධන කේත - recovery_codes_regenerated: ප්‍රතිසාධන කේත සාර්ථකව ප්‍රතිජනනය කරන ලදී + recovery_codes: ප්‍රතිසාධන කේත උපස්ථය + recovery_codes_regenerated: ප්‍රතිසාධන කේත නැවත උත්පාදනය කෙරිණි recovery_instructions_html: ඔබට කවදා හෝ ඔබගේ දුරකථනයට ප්‍රවේශය අහිමි වුවහොත්, ඔබගේ ගිණුමට ප්‍රවේශය නැවත ලබා ගැනීමට පහත ප්‍රතිසාධන කේත වලින් එකක් භාවිතා කළ හැක. ප්‍රතිසාධන කේත ආරක්ෂිතව තබා ගන්න. උදාහරණයක් ලෙස, ඔබට ඒවා මුද්‍රණය කර වෙනත් වැදගත් ලේඛන සමඟ ගබඩා කළ හැකිය. webauthn: ආරක්‍ෂණ යතුරු user_mailer: @@ -1407,19 +1413,17 @@ si: appeal: අභියාචනයක් ඉදිරිපත් කරන්න appeal_description: මෙය දෝෂයක් බව ඔබ විශ්වාස කරන්නේ නම්, ඔබට %{instance}හි කාර්ය මණ්ඩලයට අභියාචනයක් ඉදිරිපත් කළ හැක. categories: - spam: ආයාචිත තැපැල් + spam: ආයාචිත violation: අන්තර්ගතය පහත ප්‍රජා මාර්ගෝපදේශ උල්ලංඝනය කරයි explanation: disable: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැක, නමුත් ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත නොවෙනස්ව පවතී. ඔබට ඔබගේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට, ගිණුම් සැකසීම් වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට හැකිය. - sensitive: මෙතැන් සිට, ඔබගේ උඩුගත කරන ලද සියලුම මාධ්‍ය ගොනු සංවේදී ලෙස සලකුණු කර ක්ලික්-හරහා අනතුරු ඇඟවීමක් පිටුපස සඟවනු ඇත. - silence: ඔබට තවමත් ඔබගේ ගිණුම භාවිතා කළ හැකි නමුත් දැනටමත් ඔබව අනුගමනය කරන පුද්ගලයින් පමණක් මෙම සේවාදායකයේ ඔබගේ පළ කිරීම් දකිනු ඇති අතර, විවිධ සොයාගැනීම් විශේෂාංග වලින් ඔබව බැහැර කරනු ලැබිය හැක. කෙසේ වෙතත්, අනෙක් අය තවමත් ඔබව අතින් අනුගමනය කළ හැක. + sensitive: මේ මොහොත් සිට ඔබ උඩුගත කරන සියලුම මාධ්‍ය ගොනු සංවේදී ලෙස සලකා අවවාදයක් පිටුපස සඟවනු ඇත. suspend: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැකි අතර, ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත තවදුරටත් ප්‍රවේශ විය නොහැක. දින 30කින් පමණ දත්ත සම්පූර්ණයෙන් ඉවත් කරන තෙක් ඔබට තවමත් ඔබේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට පුරනය විය හැක, නමුත් ඔබව අත්හිටුවීම මගහැර යාම වැළැක්වීමට අපි මූලික දත්ත කිහිපයක් රඳවා ගන්නෙමු. reason: 'හේතුව:' - statuses: 'උපුටා දක්වන ලද පළ කිරීම්:' subject: - delete_statuses: "%{acct} හි ඔබගේ පළ කිරීම් ඉවත් කර ඇත" + delete_statuses: "%{acct} හි ඔබගේ ලිපිය ඉවත් කර ඇත" disable: ඔබගේ ගිණුම %{acct} කර ඇත - mark_statuses_as_sensitive: "%{acct} හි ඔබගේ පළ කිරීම් සංවේදී ලෙස සලකුණු කර ඇත" + mark_statuses_as_sensitive: ඔබගේ %{acct} ලිපි සංවේදී බව සලකුණු කර ඇත none: "%{acct} සඳහා අවවාදය" sensitive: ඔබගේ %{acct} ලිපිය මේ මොහොතේ සිට සංවේදී ලෙස සලකයි silence: ඔබගේ ගිණුම %{acct} සීමා කර ඇත @@ -1427,7 +1431,7 @@ si: title: delete_statuses: ලිපි ඉවත් කර ඇත disable: ගිණුම නිශ්චල කර ඇත - mark_statuses_as_sensitive: පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත + mark_statuses_as_sensitive: ලිපි සංවේදී බව සලකුණු කර ඇත none: අවවාදයයි sensitive: ගිණුම සංවේදී බව යොදා ඇත silence: ගිණුම සීමා කර ඇත diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index 917d3791f66f36..7e529c0eee273c 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -11,7 +11,6 @@ si: title: විකල්ප. ලබන්නාට නොපෙනේ admin_account_action: send_email_notification: පරිශීලකයාට ඔවුන්ගේ ගිණුම සමඟ සිදු වූ දේ පිළිබඳ පැහැදිලි කිරීමක් ලැබෙනු ඇත - text_html: විකල්ප. ඔබට post syntax භාවිතා කළ හැක. කාලය ඉතිරි කර ගැනීම සඳහා ඔබට අනතුරු ඇඟවීමේ කළ හැක type_html: "%{acct}සමඟ කළ යුතු දේ තෝරන්න" types: disable: පරිශීලකයාගේ ගිණුම භාවිතා කිරීමෙන් වළක්වන්න, නමුත් ඔවුන්ගේ අන්තර්ගතය මකා දැමීම හෝ සඟවන්න එපා. @@ -23,7 +22,7 @@ si: ends_at: විකල්ප. මෙම අවස්ථාවේදී නිවේදනය ස්වයංක්‍රීයව ප්‍රකාශනය කිරීමෙන් ඉවත් වනු ඇත scheduled_at: නිවේදනය වහාම ප්‍රකාශයට පත් කිරීමට හිස්ව තබන්න starts_at: විකල්ප. ඔබගේ නිවේදනය නිශ්චිත කාල පරාසයකට බැඳී ඇත්නම් - text: ඔබට post syntax භාවිතා කළ හැක. කරුණාකර පරිශීලකයාගේ තිරය මත නිවේදනය ලබා ගන්නා ඉඩ ගැන සැලකිලිමත් වන්න + text: ඔබට ලිපි පද ගැළපුම් භාවිතා කිරීමට හැකිය. කරුණාකර නිවේදනයෙන් පරිශ්‍රීලකයින්ගේ තිරයේ ඉඩ කෙතරම් ඇහිරෙනවා ද පිළිබඳව සැලකිලිමත් වන්න appeal: text: ඔබට වර්ජනයකට අභියාචනා කළ හැක්කේ එක් වරක් පමණි defaults: @@ -120,7 +119,7 @@ si: text: මෙම තීරණය ආපසු හැරවිය යුත්තේ මන්දැයි පැහැදිලි කරන්න defaults: autofollow: ඔබගේ ගිණුම අනුගමනය කිරීමට ආරාධනා කරන්න - avatar: අවතාරය + avatar: පැතිකඩ ඡායාරූපය chosen_languages: භාෂා පෙරන්න confirm_new_password: නව මුරපදය තහවුරු කරන්න confirm_password: මුරපදය තහවුරු කරන්න @@ -148,7 +147,6 @@ si: setting_default_privacy: ලිපියේ රහස්‍යතාව setting_default_sensitive: සෑමවිට මාධ්‍ය සංවේදී බව සලකුණු කරන්න setting_delete_modal: ලිපියක් මැකීමට පෙර ඒ ගැන විමසන්න - setting_disable_swiping: ස්වයිප් චලන අක්‍රීය කරන්න setting_display_media: මාධ්ය සංදර්ශකය setting_display_media_default: පෙරනිමි setting_display_media_hide_all: සියල්ල සඟවන්න @@ -156,7 +154,7 @@ si: setting_expand_spoilers: අන්තර්ගත අවවාද සහිත ලිපි සැමවිට දිගහරින්න setting_hide_network: ඔබගේ ජාලය සඟවන්න setting_reduce_motion: සජීවිකරණවල චලනය අඩු කරන්න - setting_system_font_ui: පද්ධතියේ පෙරනිමි අකුරු භාවිතා කරන්න + setting_system_font_ui: පද්ධතියේ පෙරනිමි රුවකුරු භාවිතා කරන්න setting_theme: අඩවියේ තේමාව setting_trends: අද ප්‍රවණතා පෙන්වන්න setting_unfollow_modal: යමෙකු අනුගමනය නොකිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න @@ -175,8 +173,8 @@ si: name: හෑෂ් ටැගය filters: actions: - hide: සම්පූර්ණයෙන්ම සඟවන්න - warn: අනතුරු ඇඟවීමක් සමඟ සඟවන්න + hide: මුළුමනින්ම සඟවන්න + warn: අවවාදයක් සහිතව සඟවන්න form_admin_settings: custom_css: අභිරුචි CSS profile_directory: පැතිකඩ නාමාවලිය සබල කරන්න @@ -184,8 +182,6 @@ si: site_title: සේවාදායකයේ නම theme: පෙරනිමි තේමාව interactions: - must_be_follower: අනුගාමිකයින් නොවන අයගේ දැනුම්දීම් අවහිර කරන්න - must_be_following: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගේ දැනුම්දීම් අවහිර කරන්න must_be_following_dm: ඔබ නොදන්නා අයගෙන් සෘජු පණිවිඩ ලැබීම අවහිර කරන්න invite: comment: අදහස @@ -201,12 +197,9 @@ si: notification_emails: digest: digest ඊමේල් යවන්න favourite: යමෙක් ඔබගේ ලිපියට ප්‍රිය කළා - follow: කවුරුහරි ඔබව අනුගමනය කළා - follow_request: කවුරුහරි ඔබව අනුගමනය කරන ලෙස ඉල්ලා සිටියේය - mention: කවුරුහරි ඔබව සඳහන් කළා - pending_account: නව ගිණුම සමාලෝචනය අවශ්‍යයි - report: නව වාර්තාවක් ඉදිරිපත් කෙරේ - trending_tag: නව ප්‍රවණතාවයට සමාලෝචනයක් අවශ්‍ය වේ + follow: යමෙක් ඔබව අනුගමනය කළා + mention: යමෙක් ඔබව සඳහන් කළා + report: නව වාර්තාවක් යොමු කර ඇත rule: text: නීතිය tag: From 2b98e2ecd6224ad41d38f5febd31efa7e4de316d Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 5 Oct 2023 16:33:54 +0200 Subject: [PATCH 09/29] Fix auto-loading-more when not scrolled (#27286) --- app/javascript/mastodon/components/scrollable_list.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/scrollable_list.jsx b/app/javascript/mastodon/components/scrollable_list.jsx index 7672a4e424089d..79dc481362b15c 100644 --- a/app/javascript/mastodon/components/scrollable_list.jsx +++ b/app/javascript/mastodon/components/scrollable_list.jsx @@ -78,7 +78,7 @@ class ScrollableList extends PureComponent { const clientHeight = this.getClientHeight(); const offset = scrollHeight - scrollTop - clientHeight; - if (400 > offset && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) { + if (scrollTop > 0 && offset < 400 && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) { this.props.onLoadMore(); } From 5606a179330ba257274c6bc86aa2179cfb32d914 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 16:35:05 +0200 Subject: [PATCH 10/29] Update dependency sidekiq to v6.5.10 (#27287) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 33dc8cb9b458dc..9c1f5d1b942c7f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -691,7 +691,7 @@ GEM rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) semantic_range (3.0.0) - sidekiq (6.5.9) + sidekiq (6.5.10) connection_pool (>= 2.2.5, < 3) rack (~> 2.0) redis (>= 4.5.0, < 5) From 165ec6c7795665f15edc31a1f9b6346bde1e8303 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 5 Oct 2023 15:23:42 -0400 Subject: [PATCH 11/29] Remove bundle audit skipping sidekiq CVE (#27291) --- .bundler-audit.yml | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 .bundler-audit.yml diff --git a/.bundler-audit.yml b/.bundler-audit.yml deleted file mode 100644 index a457fc41e8787e..00000000000000 --- a/.bundler-audit.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -ignore: - # Sidekiq security issue, fixes in the latest Sidekiq 7 but we can not upgrade. Will be fixed in Sidekiq 6.5.10 - - CVE-2023-26141 From c4cff3d7621e8408b46c45dd049e418d4d4fcc7a Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Fri, 6 Oct 2023 11:33:43 +0200 Subject: [PATCH 12/29] Remove Capistrano (#27295) --- .gitignore | 3 --- .prettierignore | 3 --- Capfile | 15 --------------- Gemfile | 6 ------ Gemfile.lock | 27 --------------------------- 5 files changed, 54 deletions(-) delete mode 100644 Capfile diff --git a/.gitignore b/.gitignore index 2bc8b18c8f0346..cb442609a1a088 100644 --- a/.gitignore +++ b/.gitignore @@ -31,9 +31,6 @@ # Ignore Vagrant files .vagrant/ -# Ignore Capistrano customizations -/config/deploy/* - # Ignore IDE files .vscode/ .idea/ diff --git a/.prettierignore b/.prettierignore index 91029f665da9e3..305f0fd753d48e 100644 --- a/.prettierignore +++ b/.prettierignore @@ -31,9 +31,6 @@ # Ignore Vagrant files .vagrant/ -# Ignore Capistrano customizations -/config/deploy/* - # Ignore IDE files .vscode/ .idea/ diff --git a/Capfile b/Capfile deleted file mode 100644 index 86efa5bacf8d6b..00000000000000 --- a/Capfile +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -require 'capistrano/setup' -require 'capistrano/deploy' -require 'capistrano/scm/git' - -install_plugin Capistrano::SCM::Git - -require 'capistrano/rbenv' -require 'capistrano/bundler' -require 'capistrano/yarn' -require 'capistrano/rails/assets' -require 'capistrano/rails/migrations' - -Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r } diff --git a/Gemfile b/Gemfile index 6f20ff25a564c5..17cbabd3be1f7d 100644 --- a/Gemfile +++ b/Gemfile @@ -170,12 +170,6 @@ group :development do # Linter CLI for HAML files gem 'haml_lint', require: false - # Deployment automation - gem 'capistrano', '~> 3.17' - gem 'capistrano-rails', '~> 1.6' - gem 'capistrano-rbenv', '~> 2.2' - gem 'capistrano-yarn', '~> 2.0' - # Validate missing i18n keys gem 'i18n-tasks', '~> 1.0', require: false end diff --git a/Gemfile.lock b/Gemfile.lock index 9c1f5d1b942c7f..b4fe022ea80074 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -112,8 +112,6 @@ GEM addressable (2.8.5) public_suffix (>= 2.0.2, < 6.0) aes_key_wrap (1.1.0) - airbrussh (1.4.1) - sshkit (>= 1.6.1, != 1.7.0) android_key_attestation (0.3.0) annotate (3.2.0) activerecord (>= 3.2, < 8.0) @@ -175,21 +173,6 @@ GEM bundler-audit (0.9.1) bundler (>= 1.2.0, < 3) thor (~> 1.0) - capistrano (3.17.3) - airbrussh (>= 1.0.0) - i18n - rake (>= 10.0.0) - sshkit (>= 1.9.0) - capistrano-bundler (2.1.0) - capistrano (~> 3.1) - capistrano-rails (1.6.3) - capistrano (~> 3.1) - capistrano-bundler (>= 1.1, < 3) - capistrano-rbenv (2.2.0) - capistrano (~> 3.1) - sshkit (~> 1.3) - capistrano-yarn (2.0.2) - capistrano (~> 3.0) capybara (3.39.2) addressable matrix @@ -473,11 +456,8 @@ GEM net-protocol net-protocol (0.2.1) timeout - net-scp (4.0.0) - net-ssh (>= 2.6.5, < 8.0.0) net-smtp (0.3.3) net-protocol - net-ssh (7.1.0) nio4r (2.5.9) nokogiri (1.15.4) mini_portile2 (~> 2.8.2) @@ -726,9 +706,6 @@ GEM actionpack (>= 5.2) activesupport (>= 5.2) sprockets (>= 3.0.0) - sshkit (1.21.5) - net-scp (>= 1.1.2) - net-ssh (>= 2.8.0) stackprof (0.2.25) statsd-ruby (1.5.0) stoplight (3.0.2) @@ -829,10 +806,6 @@ DEPENDENCIES brakeman (~> 6.0) browser bundler-audit (~> 0.9) - capistrano (~> 3.17) - capistrano-rails (~> 1.6) - capistrano-rbenv (~> 2.2) - capistrano-yarn (~> 2.0) capybara (~> 3.39) charlock_holmes (~> 0.7.7) chewy (~> 7.3) From 027c1bef8d0314dfd800d345d322d8023f2383f7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 11:43:30 +0200 Subject: [PATCH 13/29] Update dependency active_model_serializers to v0.10.14 (#27303) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index b4fe022ea80074..c64487c2e13f6a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -84,9 +84,9 @@ GEM erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - active_model_serializers (0.10.13) - actionpack (>= 4.1, < 7.1) - activemodel (>= 4.1, < 7.1) + active_model_serializers (0.10.14) + actionpack (>= 4.1) + activemodel (>= 4.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) activejob (7.0.8) From e0b54ed3e16f9320751fdccfaeebb384f65b3113 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 11:49:09 +0200 Subject: [PATCH 14/29] New Crowdin Translations (automated) (#27304) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fi.json | 2 +- app/javascript/mastodon/locales/lv.json | 54 ++++++++++++------------- app/javascript/mastodon/locales/ru.json | 2 +- config/locales/lv.yml | 4 +- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 4c920b038f12ce..87d7c90c418940 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -686,7 +686,7 @@ "timeline_hint.resources.followers": "Seuraajat", "timeline_hint.resources.follows": "seurattua", "timeline_hint.resources.statuses": "Vanhemmat julkaisut", - "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} viimeisten {days, plural, one {päivän} other {{days} päivän}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} {days, plural, one {viimeisen päivän} other {viimeisten {days} päivän}} aikana", "trends.trending_now": "Suosittua nyt", "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.", "units.short.billion": "{count} mrd.", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index aab7b9a8fb5dbe..7f71d9318b5ccf 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -161,13 +161,13 @@ "compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu", "compose_form.spoiler_placeholder": "Ieraksti savu brīdinājumu šeit", "confirmation_modal.cancel": "Atcelt", - "confirmations.block.block_and_report": "Bloķēt un Ziņot", + "confirmations.block.block_and_report": "Bloķēt un ziņot", "confirmations.block.confirm": "Bloķēt", "confirmations.block.message": "Vai tiešām vēlies bloķēt {name}?", "confirmations.cancel_follow_request.confirm": "Atsaukt pieprasījumu", "confirmations.cancel_follow_request.message": "Vai tiešām vēlies atsaukt pieprasījumu sekot {name}?", "confirmations.delete.confirm": "Dzēst", - "confirmations.delete.message": "Vai tiešām vēlies dzēst šo ziņu?", + "confirmations.delete.message": "Vai tiešām vēlies dzēst šo ierakstu?", "confirmations.delete_list.confirm": "Dzēst", "confirmations.delete_list.message": "Vai tiešam vēlies neatgriezeniski dzēst šo sarakstu?", "confirmations.discard_edit_media.confirm": "Atmest", @@ -244,7 +244,7 @@ "empty_column.public": "Šeit vēl nekā nav! Ieraksti ko publiski vai pieseko lietotājiem no citiem serveriem", "error.unexpected_crash.explanation": "Koda kļūdas vai pārlūkprogrammas saderības problēmas dēļ šo lapu nevarēja parādīt pareizi.", "error.unexpected_crash.explanation_addons": "Šo lapu nevarēja parādīt pareizi. Šo kļūdu, iespējams, izraisīja pārlūkprogrammas papildinājums vai automātiskās tulkošanas rīki.", - "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, vari lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", + "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "error.unexpected_crash.next_steps_addons": "Mēģini tos atspējot un atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "errors.unexpected_crash.copy_stacktrace": "Kopēt stacktrace uz starpliktuvi", "errors.unexpected_crash.report_issue": "Ziņot par problēmu", @@ -309,11 +309,11 @@ "home.column_settings.show_replies": "Rādīt atbildes", "home.explore_prompt.body": "Tavā mājas plūsmā būs dažādu ziņu sajaukums no atsaucēm, kurām esi izvēlējies sekot, personām, kurām esi izvēlējies sekot, un ziņām, kuras tās izceļ. Ja tas šķiet pārāk kluss, iespējams, vēlēsies:", "home.explore_prompt.title": "Šī ir tava Mastodon mājvieta.", - "home.hide_announcements": "Slēpt anonsus", + "home.hide_announcements": "Slēpt paziņojumus", "home.pending_critical_update.body": "Lūdzu, pēc iespējas ātrāk atjaunini savu Mastodon serveri!", "home.pending_critical_update.link": "Skatīt jauninājumus", "home.pending_critical_update.title": "Pieejams kritisks drošības jauninājums!", - "home.show_announcements": "Rādīt anonsus", + "home.show_announcements": "Rādīt paziņojumus", "interaction_modal.description.favourite": "Ar Mastodon kontu tu vari pievienot šo ziņu izlasei, lai informētu autoru, ka to novērtē, un saglabātu to vēlākai lasīšanai.", "interaction_modal.description.follow": "Ar Mastodon kontu tu vari sekot {name}, lai saņemtu viņu ziņas savā mājas plūsmā.", "interaction_modal.description.reblog": "Izmantojot kontu Mastodon, tu vari izcelt šo ziņu, lai kopīgotu to ar saviem sekotājiem.", @@ -369,7 +369,7 @@ "lightbox.close": "Aizvērt", "lightbox.compress": "Saspiest attēla skata lodziņu", "lightbox.expand": "Izvērst attēla skata lodziņu", - "lightbox.next": "Nākamais", + "lightbox.next": "Tālāk", "lightbox.previous": "Iepriekšējais", "limited_account_hint.action": "Tik un tā rādīt profilu", "limited_account_hint.title": "{domain} moderatori ir paslēpuši šo profilu.", @@ -422,8 +422,8 @@ "navigation_bar.search": "Meklēt", "navigation_bar.security": "Drošība", "not_signed_in_indicator.not_signed_in": "Lai piekļūtu šim resursam, tev ir jāpierakstās.", - "notification.admin.report": "{name} sūdzējās par {target}", - "notification.admin.sign_up": "{name} pierakstījās", + "notification.admin.report": "{name} ziņoja par {target}", + "notification.admin.sign_up": "{name} ir pierakstījies", "notification.favourite": "{name} pievienoja tavu ziņu izlasei", "notification.follow": "{name} uzsāka tev sekot", "notification.follow_request": "{name} nosūtīja tev sekošanas pieprasījumu", @@ -435,7 +435,7 @@ "notification.update": "{name} rediģēja ierakstu", "notifications.clear": "Notīrīt paziņojumus", "notifications.clear_confirmation": "Vai tiešām vēlies neatgriezeniski notīrīt visus savus paziņojumus?", - "notifications.column_settings.admin.report": "Jaunas sūdzības:", + "notifications.column_settings.admin.report": "Jauni ziņojumi:", "notifications.column_settings.admin.sign_up": "Jaunas pierakstīšanās:", "notifications.column_settings.alert": "Darbvirsmas paziņojumi", "notifications.column_settings.favourite": "Izlase:", @@ -445,7 +445,7 @@ "notifications.column_settings.follow": "Jauni sekotāji:", "notifications.column_settings.follow_request": "Jauni sekošanas pieprasījumi:", "notifications.column_settings.mention": "Pieminējumi:", - "notifications.column_settings.poll": "Aptauju rezultāti:", + "notifications.column_settings.poll": "Aptaujas rezultāti:", "notifications.column_settings.push": "Uznirstošie paziņojumi", "notifications.column_settings.reblog": "Pastiprinātie ieraksti:", "notifications.column_settings.show": "Rādīt kolonnā", @@ -457,13 +457,13 @@ "notifications.filter.all": "Visi", "notifications.filter.boosts": "Pastiprinātie ieraksti", "notifications.filter.favourites": "Izlases", - "notifications.filter.follows": "Sekošana", + "notifications.filter.follows": "Seko", "notifications.filter.mentions": "Pieminējumi", - "notifications.filter.polls": "Aptauju rezultāti", + "notifications.filter.polls": "Aptaujas rezultāti", "notifications.filter.statuses": "Jaunumi no cilvēkiem, kuriem tu seko", "notifications.grant_permission": "Piešķirt atļauju.", "notifications.group": "{count} paziņojumi", - "notifications.mark_as_read": "Atzīmēt visus paziņojumus kā izlasītus", + "notifications.mark_as_read": "Atzīmēt katru paziņojumu kā izlasītu", "notifications.permission_denied": "Darbvirsmas paziņojumi nav pieejami, jo iepriekš tika noraidīts pārlūka atļauju pieprasījums", "notifications.permission_denied_alert": "Darbvirsmas paziņojumus nevar iespējot, jo pārlūkprogrammai atļauja tika iepriekš atteikta", "notifications.permission_required": "Darbvirsmas paziņojumi nav pieejami, jo nav piešķirta nepieciešamā atļauja.", @@ -563,25 +563,25 @@ "report.reasons.spam": "Tas ir spams", "report.reasons.spam_description": "Ļaunprātīgas saites, viltus iesaistīšana vai atkārtotas atbildes", "report.reasons.violation": "Tas pārkāpj servera noteikumus", - "report.reasons.violation_description": "Tu zini, ka tas pārkāpj konkrētus noteikumus", + "report.reasons.violation_description": "Tu zini, ka tas pārkāpj īpašus noteikumus", "report.rules.subtitle": "Atlasi visus atbilstošos", "report.rules.title": "Kuri noteikumi tiek pārkāpti?", "report.statuses.subtitle": "Atlasi visus atbilstošos", "report.statuses.title": "Vai ir kādi ieraksti, kas atbalsta šo sūdzību?", "report.submit": "Iesniegt", - "report.target": "Sūdzība par {target}", - "report.thanks.take_action": "Vari veikt šīs darbības, lai kontrolētu Mastodon redzamo saturu:", + "report.target": "Ziņošana par: {target}", + "report.thanks.take_action": "Tālāk ir norādītas iespējas, kā kontrolēt Mastodon redzamo saturu:", "report.thanks.take_action_actionable": "Kamēr mēs to izskatām, tu vari veikt darbības pret @{name}:", "report.thanks.title": "Vai nevēlies to redzēt?", "report.thanks.title_actionable": "Paldies, ka ziņoji, mēs to izskatīsim.", "report.unfollow": "Pārtraukt sekot @{name}", "report.unfollow_explanation": "Tu seko šim kontam. Lai vairs neredzētu viņu ziņas savā mājas plūsmā, pārtrauc viņiem sekot.", - "report_notification.attached_statuses": "{count, plural, one {Pievienots {count} ieraksts} other {Pievienoti {count} ieraksti}}", + "report_notification.attached_statuses": "Pievienoti {count, plural,one {{count} sūtījums} other {{count} sūtījumi}}", "report_notification.categories.legal": "Tiesisks", "report_notification.categories.other": "Cita", "report_notification.categories.spam": "Spams", "report_notification.categories.violation": "Noteikumu pārkāpums", - "report_notification.open": "Atvērt sūdzību", + "report_notification.open": "Atvērt ziņojumu", "search.no_recent_searches": "Nav nesen veiktu meklējumu", "search.placeholder": "Meklēšana", "search.quick_action.account_search": "Profili atbilst {x}", @@ -628,7 +628,7 @@ "status.direct_indicator": "Pieminēts privāti", "status.edit": "Rediģēt", "status.edited": "Rediģēts {date}", - "status.edited_x_times": "Rediģēts {count, plural, one {{count} reizi} other {{count} reizes}}", + "status.edited_x_times": "Rediģēts {count, plural, one {{count} reize} other {{count} reizes}}", "status.embed": "Iestrādāt", "status.favourite": "Iecienīts", "status.filter": "Filtrē šo ziņu", @@ -656,8 +656,8 @@ "status.remove_bookmark": "Noņemt grāmatzīmi", "status.replied_to": "Atbildēja {name}", "status.reply": "Atbildēt", - "status.replyAll": "Atbildēt uz pavedienu", - "status.report": "Sūdzēties par @{name}", + "status.replyAll": "Atbildēt uz tematu", + "status.report": "Ziņot par @{name}", "status.sensitive_warning": "Sensitīvs saturs", "status.share": "Kopīgot", "status.show_filter_reason": "Tomēr rādīt", @@ -668,7 +668,7 @@ "status.show_original": "Rādīt oriģinālu", "status.title.with_attachments": "{user} publicējis {attachmentCount, plural, one {pielikumu} other {{attachmentCount} pielikumus}}", "status.translate": "Tulkot", - "status.translated_from_with": "Tulkots no {lang}, izmantojot {provider}", + "status.translated_from_with": "Tulkots no {lang} izmantojot {provider}", "status.uncached_media_warning": "Priekšskatījums nav pieejams", "status.unmute_conversation": "Noņemt sarunas apklusinājumu", "status.unpin": "Noņemt profila piespraudumu", @@ -681,16 +681,16 @@ "time_remaining.hours": "{number, plural, one {Atlikusi # stunda} other {Atlikušas # stundas}}", "time_remaining.minutes": "{number, plural, one {Atlikusi # minūte} other {Atlikušas # minūtes}}", "time_remaining.moments": "Atlikuši daži mirkļi", - "time_remaining.seconds": "{number, plural, one {Atlikusi # sekunde} other {Atlikušas # sekundes}}", + "time_remaining.seconds": "Atlikušas {number, plural, one {# sekunde} other {# sekundes}}", "timeline_hint.remote_resource_not_displayed": "{resource} no citiem serveriem nav parādīti.", "timeline_hint.resources.followers": "Sekotāji", - "timeline_hint.resources.follows": "Sekojošie", + "timeline_hint.resources.follows": "Seko", "timeline_hint.resources.statuses": "Vecāki ieraksti", "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} cilvēki}} par {days, plural, one {# dienu} other {{days} dienām}}", "trends.trending_now": "Aktuālās tendences", - "ui.beforeunload": "Ja pametīsiet Mastodon, jūsu melnraksts tiks zaudēts.", + "ui.beforeunload": "Ja pametīsit Mastodonu, jūsu melnraksts tiks zaudēts.", "units.short.billion": "{count}Mjd", - "units.short.million": "{count}Mjn", + "units.short.million": "{count}M", "units.short.thousand": "{count}Tk", "upload_area.title": "Velc un nomet, lai augšupielādētu", "upload_button.label": "Pievienot bildi, video vai audio datni", @@ -707,7 +707,7 @@ "upload_modal.apply": "Pielietot", "upload_modal.applying": "Pielieto…", "upload_modal.choose_image": "Izvēlēties attēlu", - "upload_modal.description_placeholder": "Raibais runcis Rīgā ratu rumbā rūc", + "upload_modal.description_placeholder": "Raibais runcis rīgā ratu rumbā rūc", "upload_modal.detect_text": "Noteikt tekstu no attēla", "upload_modal.edit_media": "Rediģēt multividi", "upload_modal.hint": "Noklikšķini vai velc apli priekšskatījumā, lai izvēlētos fokusa punktu, kas vienmēr būs redzams visos sīktēlos.", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index ae9cef593849bc..69db89dc86f0b3 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -537,7 +537,7 @@ "relative_time.today": "сегодня", "reply_indicator.cancel": "Отмена", "report.block": "Заблокировать", - "report.block_explanation": "В перестаните видеть посты этого пользователя, а он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять что вы заблокировали его/её.", + "report.block_explanation": "Вы перестанете видеть посты этого пользователя, и он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять, что вы заблокировали его/её.", "report.categories.legal": "Правовая информация", "report.categories.other": "Другое", "report.categories.spam": "Спам", diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 02a34fd8563231..28a1a33dcb6540 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -460,7 +460,7 @@ lv: description_html: Tu gatavojies importēt domēna bloku sarakstu. Lūdzu, ļoti rūpīgi pārskati šo sarakstu, it īpaši, ja tu pats neesi to veidojis. existing_relationships_warning: Esošās sekošanas attiecības private_comment_description_html: 'Lai palīdzētu tev izsekot, no kurienes nāk importētie bloki, tiks izveidoti importētie bloki ar šādu privātu komentāru: %{comment}' - private_comment_template: Importēts no %{source} %{date} + private_comment_template: Importēt no %{source} %{date} title: Importēt bloķētos domēnus invalid_domain_block: 'Viens vai vairāki domēna bloķi tika izlaisti šādas kļūdas(-u) dēļ: %{error}' new: @@ -1107,7 +1107,7 @@ lv: new_confirmation_instructions_sent: Pēc dažām minūtēm saņemsi jaunu e-pastu ar apstiprinājuma saiti! title: Pārbaudi savu iesūtni sign_in: - preamble_html: Pierakstieties ar saviem %{domain} akreditācijas datiem. Ja jūsu konts ir mitināts citā serverī, jūs nevarēsit pieteikties šeit. + preamble_html: Piesakies ar saviem %{domain} akreditācijas datiem. Ja tavs konts ir mitināts citā serverī, tu nevarēsi pieteikties šeit. title: Pierakstīties %{domain} sign_up: manual_review: Reģistrācijas domēnā %{domain} manuāli pārbauda mūsu moderatori. Lai palīdzētu mums apstrādāt tavu reģistrāciju, uzraksti mazliet par sevi un to, kāpēc vēlies kontu %{domain}. From dd88cef84bc233508bc7388cb974b0a096dbdb39 Mon Sep 17 00:00:00 2001 From: KMY Date: Fri, 6 Oct 2023 18:59:10 +0900 Subject: [PATCH 15/29] =?UTF-8?q?#63=20NodeInfo=E3=81=A7=E3=81=AE`fedibird?= =?UTF-8?q?=5Fcapabilities`=E5=85=AC=E9=96=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/kmyblue_capabilities_helper.rb | 31 +++++++++++++++++++ app/serializers/nodeinfo/serializer.rb | 5 ++- app/serializers/rest/instance_serializer.rb | 26 +--------------- .../rest/v1/instance_serializer.rb | 26 +--------------- 4 files changed, 37 insertions(+), 51 deletions(-) create mode 100644 app/helpers/kmyblue_capabilities_helper.rb diff --git a/app/helpers/kmyblue_capabilities_helper.rb b/app/helpers/kmyblue_capabilities_helper.rb new file mode 100644 index 00000000000000..7ad1d55fc4dd53 --- /dev/null +++ b/app/helpers/kmyblue_capabilities_helper.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module KmyblueCapabilitiesHelper + def fedibird_capabilities + capabilities = [ + :enable_wide_emoji, + :kmyblue_searchability, + :searchability, + :kmyblue_markdown, + :kmyblue_reaction_deck, + :kmyblue_visibility_login, + :status_reference, + :visibility_mutual, + :visibility_limited, + :kmyblue_limited_scope, + :kmyblue_antenna, + :kmyblue_bookmark_category, + :kmyblue_quote, + :kmyblue_searchability_limited, + ] + + capabilities << :profile_search unless Chewy.enabled? + if Setting.enable_emoji_reaction + capabilities << :emoji_reaction + capabilities << :enable_wide_emoji_reaction + end + capabilities << :kmyblue_visibility_public_unlisted if Setting.enable_public_unlisted_visibility + + capabilities + end +end diff --git a/app/serializers/nodeinfo/serializer.rb b/app/serializers/nodeinfo/serializer.rb index f70cc38f0697f8..df8bc07611522a 100644 --- a/app/serializers/nodeinfo/serializer.rb +++ b/app/serializers/nodeinfo/serializer.rb @@ -2,6 +2,7 @@ class NodeInfo::Serializer < ActiveModel::Serializer include RoutingHelper + include KmyblueCapabilitiesHelper attributes :version, :software, :protocols, :services, :usage, :open_registrations, :metadata @@ -38,7 +39,9 @@ def open_registrations end def metadata - {} + { + fedibird_capabilities: fedibird_capabilities, + } end private diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index 9b52277bf04d1b..ed4e40523aa42b 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -8,6 +8,7 @@ class ContactSerializer < ActiveModel::Serializer end include RoutingHelper + include KmyblueCapabilitiesHelper attributes :domain, :title, :version, :source_url, :description, :usage, :thumbnail, :languages, :configuration, @@ -105,31 +106,6 @@ def registrations } end - # for third party apps - def fedibird_capabilities - capabilities = [ - :enable_wide_emoji, - :enable_wide_emoji_reaction, - :kmyblue_searchability, - :searchability, - :kmyblue_markdown, - :kmyblue_reaction_deck, - :kmyblue_visibility_login, - :status_reference, - :visibility_mutual, - :visibility_limited, - :kmyblue_limited_scope, - :kmyblue_antenna, - :kmyblue_bookmark_category, - ] - - capabilities << :profile_search unless Chewy.enabled? - capabilities << :emoji_reaction if Setting.enable_emoji_reaction - capabilities << :kmyblue_visibility_public_unlisted if Setting.enable_public_unlisted_visibility - - capabilities - end - private def registrations_enabled? diff --git a/app/serializers/rest/v1/instance_serializer.rb b/app/serializers/rest/v1/instance_serializer.rb index 64951b3db5293d..d0473f5f97ca1c 100644 --- a/app/serializers/rest/v1/instance_serializer.rb +++ b/app/serializers/rest/v1/instance_serializer.rb @@ -2,6 +2,7 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer include RoutingHelper + include KmyblueCapabilitiesHelper attributes :uri, :title, :short_description, :description, :email, :version, :urls, :stats, :thumbnail, @@ -114,31 +115,6 @@ def invites_enabled UserRole.everyone.can?(:invite_users) end - # for third party apps - def fedibird_capabilities - capabilities = [ - :enable_wide_emoji, - :enable_wide_emoji_reaction, - :kmyblue_searchability, - :searchability, - :kmyblue_markdown, - :kmyblue_reaction_deck, - :kmyblue_visibility_login, - :status_reference, - :visibility_mutual, - :visibility_limited, - :kmyblue_limited_scope, - :kmyblue_antenna, - :kmyblue_bookmark_category, - ] - - capabilities << :profile_search unless Chewy.enabled? - capabilities << :emoji_reaction if Setting.enable_emoji_reaction - capabilities << :kmyblue_visibility_public_unlisted if Setting.enable_public_unlisted_visibility - - capabilities - end - private def instance_presenter From f95a995b81ba270ff534064cbfc1c7f0bda8a4b3 Mon Sep 17 00:00:00 2001 From: KMY Date: Fri, 6 Oct 2023 19:00:19 +0900 Subject: [PATCH 16/29] =?UTF-8?q?Capabilities=E3=81=AE=E6=A4=9C=E7=B4=A2?= =?UTF-8?q?=E8=A8=B1=E5=8F=AF=E3=81=AB=E3=83=AD=E3=83=BC=E3=82=AB=E3=83=AB?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/kmyblue_capabilities_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/kmyblue_capabilities_helper.rb b/app/helpers/kmyblue_capabilities_helper.rb index 7ad1d55fc4dd53..5b3b89f9e9d9dd 100644 --- a/app/helpers/kmyblue_capabilities_helper.rb +++ b/app/helpers/kmyblue_capabilities_helper.rb @@ -17,6 +17,7 @@ def fedibird_capabilities :kmyblue_bookmark_category, :kmyblue_quote, :kmyblue_searchability_limited, + :kmyblue_searchability_public_unlisted, ] capabilities << :profile_search unless Chewy.enabled? From 4d59dfb1c619ebec44243acc7f21dc3edb9feb3b Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 6 Oct 2023 12:58:02 +0200 Subject: [PATCH 17/29] Fix some remote posts getting truncated (#27307) --- .../mastodon/components/__tests__/hashtag_bar.tsx | 15 +++++++++++++++ .../mastodon/components/hashtag_bar.tsx | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx b/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx index 1856b7109e6ec1..b7225fc92e01e4 100644 --- a/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx +++ b/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx @@ -45,6 +45,21 @@ describe('computeHashtagBarForStatus', () => { ); }); + it('does not truncate the contents when the last child is a text node', () => { + const status = createStatus( + 'this is a #test. Some more text', + ['test'], + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual([]); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"this is a #test. Some more text"`, + ); + }); + it('extract tags from the last line', () => { const status = createStatus( '

Simple text

#hashtag

', diff --git a/app/javascript/mastodon/components/hashtag_bar.tsx b/app/javascript/mastodon/components/hashtag_bar.tsx index d45a6e20eb6dc4..91fa9221983a70 100644 --- a/app/javascript/mastodon/components/hashtag_bar.tsx +++ b/app/javascript/mastodon/components/hashtag_bar.tsx @@ -109,7 +109,7 @@ export function computeHashtagBarForStatus(status: StatusLike): { const lastChild = template.content.lastChild; - if (!lastChild) return defaultResult; + if (!lastChild || lastChild.nodeType === Node.TEXT_NODE) return defaultResult; template.content.removeChild(lastChild); const contentWithoutLastLine = template; From 340c390849c8a265dd11d0132e49b01042c58567 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 6 Oct 2023 12:58:16 +0200 Subject: [PATCH 18/29] =?UTF-8?q?Fix=20crash=20when=20filtering=20for=20?= =?UTF-8?q?=E2=80=9Cdormant=E2=80=9D=20relationships=20(#27306)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/account.rb | 2 +- app/models/relationship_filter.rb | 2 +- spec/models/relationship_filter_spec.rb | 68 +++++++++++++++++-------- 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/app/models/account.rb b/app/models/account.rb index bb70b3a7b89697..a25ebc4aaf15d3 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -127,7 +127,7 @@ class Account < ApplicationRecord scope :searchable, -> { without_unapproved.without_suspended.where(moved_to_account_id: nil) } scope :discoverable, -> { searchable.without_silenced.where(discoverable: true).joins(:account_stat) } scope :followable_by, ->(account) { joins(arel_table.join(Follow.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(Follow.arel_table[:target_account_id]).and(Follow.arel_table[:account_id].eq(account.id))).join_sources).where(Follow.arel_table[:id].eq(nil)).joins(arel_table.join(FollowRequest.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(FollowRequest.arel_table[:target_account_id]).and(FollowRequest.arel_table[:account_id].eq(account.id))).join_sources).where(FollowRequest.arel_table[:id].eq(nil)) } - scope :by_recent_status, -> { order(Arel.sql('account_stats.last_status_at DESC NULLS LAST')) } + scope :by_recent_status, -> { includes(:account_stat).merge(AccountStat.order('last_status_at DESC NULLS LAST')).references(:account_stat) } scope :by_recent_sign_in, -> { order(Arel.sql('users.current_sign_in_at DESC NULLS LAST')) } scope :popular, -> { order('account_stats.followers_count desc') } scope :by_domain_and_subdomains, ->(domain) { where(domain: Instance.by_domain_and_subdomains(domain).select(:domain)) } diff --git a/app/models/relationship_filter.rb b/app/models/relationship_filter.rb index 955d7d188ae2a5..d686f9ed89db44 100644 --- a/app/models/relationship_filter.rb +++ b/app/models/relationship_filter.rb @@ -114,7 +114,7 @@ def order_scope(value) def activity_scope(value) case value when 'dormant' - AccountStat.where(last_status_at: nil).or(AccountStat.where(AccountStat.arel_table[:last_status_at].lt(1.month.ago))) + Account.joins(:account_stat).where(account_stat: { last_status_at: [nil, ...1.month.ago] }) else raise Mastodon::InvalidParameterError, "Unknown activity: #{value}" end diff --git a/spec/models/relationship_filter_spec.rb b/spec/models/relationship_filter_spec.rb index ac318857748adc..fccd42aaad0622 100644 --- a/spec/models/relationship_filter_spec.rb +++ b/spec/models/relationship_filter_spec.rb @@ -6,32 +6,60 @@ let(:account) { Fabricate(:account) } describe '#results' do - context 'when default params are used' do - subject do - described_class.new(account, 'order' => 'active').results - end + let(:account_of_7_months) { Fabricate(:account_stat, statuses_count: 1, last_status_at: 7.months.ago).account } + let(:account_of_1_day) { Fabricate(:account_stat, statuses_count: 1, last_status_at: 1.day.ago).account } + let(:account_of_3_days) { Fabricate(:account_stat, statuses_count: 1, last_status_at: 3.days.ago).account } + let(:silent_account) { Fabricate(:account_stat, statuses_count: 0, last_status_at: nil).account } + + before do + account.follow!(account_of_7_months) + account.follow!(account_of_1_day) + account.follow!(account_of_3_days) + account.follow!(silent_account) + end - before do - add_following_account_with(last_status_at: 7.days.ago) - add_following_account_with(last_status_at: 1.day.ago) - add_following_account_with(last_status_at: 3.days.ago) + context 'when ordering by last activity' do + context 'when not filtering' do + subject do + described_class.new(account, 'order' => 'active').results + end + + it 'returns followings ordered by last activity' do + expect(subject).to eq [account_of_1_day, account_of_3_days, account_of_7_months, silent_account] + end end - it 'returns followings ordered by last activity' do - expected_result = account.following.eager_load(:account_stat).reorder(nil).by_recent_status + context 'when filtering for dormant accounts' do + subject do + described_class.new(account, 'order' => 'active', 'activity' => 'dormant').results + end - expect(subject).to eq expected_result + it 'returns dormant followings ordered by last activity' do + expect(subject).to eq [account_of_7_months, silent_account] + end end end - end - def add_following_account_with(last_status_at:) - following_account = Fabricate(:account) - Fabricate(:account_stat, account: following_account, - last_status_at: last_status_at, - statuses_count: 1, - following_count: 0, - followers_count: 0) - Fabricate(:follow, account: account, target_account: following_account).account + context 'when ordering by account creation' do + context 'when not filtering' do + subject do + described_class.new(account, 'order' => 'recent').results + end + + it 'returns followings ordered by last account creation' do + expect(subject).to eq [silent_account, account_of_3_days, account_of_1_day, account_of_7_months] + end + end + + context 'when filtering for dormant accounts' do + subject do + described_class.new(account, 'order' => 'recent', 'activity' => 'dormant').results + end + + it 'returns dormant followings ordered by last activity' do + expect(subject).to eq [silent_account, account_of_7_months] + end + end + end end end From 3171afc36a9472a0a027e3e2c7397c4dd880b703 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Fri, 6 Oct 2023 10:02:55 -0500 Subject: [PATCH 19/29] Add Elasticsearch index size to Admin dashboard (#27301) Co-authored-by: Claire --- .../dimension/space_usage_dimension.rb | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/app/lib/admin/metrics/dimension/space_usage_dimension.rb b/app/lib/admin/metrics/dimension/space_usage_dimension.rb index cc856089047b40..f1b6dba0403008 100644 --- a/app/lib/admin/metrics/dimension/space_usage_dimension.rb +++ b/app/lib/admin/metrics/dimension/space_usage_dimension.rb @@ -11,7 +11,7 @@ def key protected def perform_query - [postgresql_size, redis_size, media_size] + [postgresql_size, redis_size, media_size, search_size].compact end def postgresql_size @@ -65,4 +65,22 @@ def redis_info redis.info end end + + def search_size + return unless Chewy.enabled? + + client_info = Chewy.client.info + + value = Chewy.client.indices.stats['indices'].values.sum { |index_data| index_data['primaries']['store']['size_in_bytes'] } + + { + key: 'search', + human_key: client_info.dig('version', 'distribution') == 'opensearch' ? 'OpenSearch' : 'Elasticsearch', + value: value.to_s, + unit: 'bytes', + human_value: number_to_human_size(value), + } + rescue Faraday::ConnectionFailed, Elasticsearch::Transport::Transport::Error + nil + end end From 3262d1f1b62a984343f0f6c67c1d18921daabb0a Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 6 Oct 2023 17:46:04 +0200 Subject: [PATCH 20/29] Fix incorrect serialization of regional languages in `contentMap` (#27207) --- app/lib/activitypub/case_transform.rb | 2 ++ .../serializers/activitypub/note_serializer_spec.rb | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/lib/activitypub/case_transform.rb b/app/lib/activitypub/case_transform.rb index da2c5eb8b05774..bf5de722103a88 100644 --- a/app/lib/activitypub/case_transform.rb +++ b/app/lib/activitypub/case_transform.rb @@ -14,6 +14,8 @@ def camel_lower(value) when String camel_lower_cache[value] ||= if value.start_with?('_:') "_:#{value.delete_prefix('_:').underscore.camelize(:lower)}" + elsif LanguagesHelper::ISO_639_1_REGIONAL.key?(value.to_sym) + value else value.underscore.camelize(:lower) end diff --git a/spec/serializers/activitypub/note_serializer_spec.rb b/spec/serializers/activitypub/note_serializer_spec.rb index 4b2b8ec875667f..31ee31f132f4c3 100644 --- a/spec/serializers/activitypub/note_serializer_spec.rb +++ b/spec/serializers/activitypub/note_serializer_spec.rb @@ -7,7 +7,7 @@ let!(:account) { Fabricate(:account) } let!(:other) { Fabricate(:account) } - let!(:parent) { Fabricate(:status, account: account, visibility: :public) } + let!(:parent) { Fabricate(:status, account: account, visibility: :public, language: 'zh-TW') } let!(:reply_by_account_first) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_account_next) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_other_first) { Fabricate(:status, account: other, thread: parent, visibility: :public) } @@ -18,8 +18,15 @@ @serialization = ActiveModelSerializers::SerializableResource.new(parent, serializer: described_class, adapter: ActivityPub::Adapter) end - it 'has a Note type' do - expect(subject['type']).to eql('Note') + it 'has the expected shape' do + expect(subject).to include({ + '@context' => include('https://www.w3.org/ns/activitystreams'), + 'type' => 'Note', + 'attributedTo' => ActivityPub::TagManager.instance.uri_for(account), + 'contentMap' => include({ + 'zh-TW' => a_kind_of(String), + }), + }) end it 'has a replies collection' do From f0fac9be8f4f0308dbeda8520a35e615da3b3c1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Sat, 7 Oct 2023 11:57:38 +0900 Subject: [PATCH 21/29] =?UTF-8?q?=E4=BB=96=E3=82=B5=E3=83=BC=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=81=8B=E3=82=89=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?= =?UTF-8?q?=E7=B5=B5=E6=96=87=E5=AD=97=E3=81=AB=E3=82=88=E3=82=8B=E3=82=B9?= =?UTF-8?q?=E3=82=BF=E3=83=B3=E3=83=97=E3=82=92=E5=8F=97=E3=81=91=E5=8F=96?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E6=99=82=E3=81=AB=E3=80=81=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=82=BB=E3=83=B3=E3=82=B9=E6=83=85=E5=A0=B1=E3=82=92=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E3=81=99=E3=82=8B=EF=BC=8B=E3=81=A4=E3=81=84=E3=81=A7?= =?UTF-8?q?=E3=81=AB=E3=83=86=E3=82=B9=E3=83=88=20(#65)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Wip: スタンプを他サーバーから受信するテスト作成、カスタム絵文字にdomainプロパティを追加 * Wip: ドメインに関するイレギュラーな状況に対応 * Wip: 他のサーバーのカスタム絵文字を送信するときのID変更処理を追加 * Wip: カスタム絵文字のIDを判定する場所を変更 * Wip: カスタム絵文字のURIを返す処理を削除(不要) * Wip: 絵文字リアクション受け入れ処理リファクタリング * Wip: 外部へ送信するカスタム絵文字データにライセンス情報を追加、ライセンス情報の受信をテストに追加 * Wip: ドメインブロックのテストを追加 * Wip: ついでに通常のドメインブロックを追加 --- app/lib/activitypub/activity/like.rb | 58 +++-- .../activitypub/parser/custom_emoji_parser.rb | 2 +- .../activitypub/emoji_serializer.rb | 8 +- spec/lib/activitypub/activity/like_spec.rb | 221 +++++++++++++++++- 4 files changed, 273 insertions(+), 16 deletions(-) diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index ebfac9a86882bf..5e34cc9dc547c2 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -7,7 +7,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity def perform @original_status = status_from_uri(object_uri) - return if @original_status.nil? || delete_arrived_first?(@json['id']) || reject_favourite? + return if @original_status.nil? || delete_arrived_first?(@json['id']) || block_domain? || reject_favourite? if shortcode.nil? || !Setting.enable_emoji_reaction process_favourite @@ -34,19 +34,11 @@ def process_favourite def process_emoji_reaction return if !@original_status.account.local? && !Setting.receive_other_servers_emoji_reaction + # custom emoji + emoji = nil if emoji_tag.present? - return if emoji_tag['id'].blank? || emoji_tag['name'].blank? || emoji_tag['icon'].blank? || emoji_tag['icon']['url'].blank? - - image_url = emoji_tag['icon']['url'] - uri = emoji_tag['id'] - domain = URI.split(uri)[2] - - emoji = CustomEmoji.find_or_create_by!(shortcode: shortcode, domain: domain) do |emoji_data| - emoji_data.uri = uri - emoji_data.image_remote_url = image_url - end - - Trends.statuses.register(@original_status) + emoji = process_emoji(emoji_tag) + return if emoji.nil? end reaction = nil @@ -58,6 +50,7 @@ def process_emoji_reaction reaction = @original_status.emoji_reactions.create!(account: @account, name: shortcode, custom_emoji: emoji, uri: @json['id']) end + Trends.statuses.register(@original_status) write_stream(reaction) if @original_status.account.local? @@ -95,6 +88,45 @@ def shortcode end end + def process_emoji(tag) + custom_emoji_parser = ActivityPub::Parser::CustomEmojiParser.new(tag) + + return if custom_emoji_parser.shortcode.blank? || custom_emoji_parser.image_remote_url.blank? + + emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) + + return unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) + + domain = emoji_tag['domain'] || URI.split(custom_emoji_parser.uri)[2] || @account.domain + domain = nil if domain == Rails.configuration.x.local_domain || domain == Rails.configuration.x.web_domain + + return if domain.present? && skip_download?(domain) + + begin + emoji ||= CustomEmoji.new( + domain: domain, + shortcode: custom_emoji_parser.shortcode, + uri: custom_emoji_parser.uri, + is_sensitive: custom_emoji_parser.is_sensitive, + license: custom_emoji_parser.license + ) + emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.save + rescue Seahorse::Client::NetworkingError => e + Rails.logger.warn "Error storing emoji: #{e}" + end + + emoji + end + + def skip_download?(domain) + DomainBlock.reject_media?(domain) + end + + def block_domain? + DomainBlock.blocked?(@account.domain) + end + def misskey_favourite? misskey_shortcode = @json['_misskey_reaction']&.delete(':') diff --git a/app/lib/activitypub/parser/custom_emoji_parser.rb b/app/lib/activitypub/parser/custom_emoji_parser.rb index 481199c72d993e..e217b5ec96fb04 100644 --- a/app/lib/activitypub/parser/custom_emoji_parser.rb +++ b/app/lib/activitypub/parser/custom_emoji_parser.rb @@ -30,6 +30,6 @@ def is_sensitive # rubocop:disable Naming/PredicateName end def license - @json['license'] + @json['license'] || @json['licence'] end end diff --git a/app/serializers/activitypub/emoji_serializer.rb b/app/serializers/activitypub/emoji_serializer.rb index 4dc38f3ea6e571..98525d3131ab18 100644 --- a/app/serializers/activitypub/emoji_serializer.rb +++ b/app/serializers/activitypub/emoji_serializer.rb @@ -5,7 +5,9 @@ class ActivityPub::EmojiSerializer < ActivityPub::Serializer context_extensions :emoji - attributes :id, :type, :name, :updated + attributes :id, :type, :domain, :name, :is_sensitive, :updated + + attribute :license, if: -> { object.license.present? } has_one :icon, serializer: ActivityPub::ImageSerializer @@ -17,6 +19,10 @@ def type 'Emoji' end + def domain + object.domain.presence || Rails.configuration.x.local_domain + end + def icon object.image end diff --git a/spec/lib/activitypub/activity/like_spec.rb b/spec/lib/activitypub/activity/like_spec.rb index 51493f7bc87da4..bdeda34f12ed22 100644 --- a/spec/lib/activitypub/activity/like_spec.rb +++ b/spec/lib/activitypub/activity/like_spec.rb @@ -29,6 +29,225 @@ end end + describe '#perform when receive emoji reaction' do + subject do + described_class.new(json, sender).perform + EmojiReaction.where(status: status) + end + + before do + stub_request(:get, 'http://example.com/emoji.png').to_return(body: attachment_fixture('emojo.png')) + end + + let(:json) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'foo', + type: 'Like', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: ActivityPub::TagManager.instance.uri_for(status), + content: content, + tag: tag, + }.with_indifferent_access + end + let(:content) { nil } + let(:tag) { nil } + + context 'with unicode emoji' do + let(:content) { '😀' } + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq '😀' + expect(subject.first.account).to eq sender + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + license: 'Everyone but Ohagi', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'example.com' + expect(sender.favourited?(status)).to be false + end + + it 'custom emoji license is saved' do + expect(subject.first.custom_emoji.license).to eq 'Everyone but Ohagi' + end + end + + context 'with custom emoji and custom domain' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + domain: 'post.kmycode.net', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'post.kmycode.net' + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji but invalid id' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'example.com' + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji but local domain' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'aaa', + type: 'Emoji', + domain: Rails.configuration.x.local_domain, + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to be_nil + expect(sender.favourited?(status)).to be false + end + end + + context 'with unicode emoji and reject_media enabled' do + let(:content) { '😀' } + + before do + Fabricate(:domain_block, domain: 'example.com', severity: :noop, reject_media: true) + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq '😀' + expect(subject.first.account).to eq sender + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji and reject_media enabled' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + before do + Fabricate(:domain_block, domain: 'example.com', severity: :noop, reject_media: true) + end + + it 'create emoji reaction' do + expect(subject.count).to eq 0 + expect(sender.favourited?(status)).to be false + end + end + + context 'when emoji reaction is disabled' do + let(:content) { '😀' } + + before do + Form::AdminSettings.new(enable_emoji_reaction: false).save + end + + it 'create emoji reaction' do + expect(subject.count).to eq 0 + expect(sender.favourited?(status)).to be true + end + end + + context 'when emoji reaction between other servers is disabled' do + let(:recipient) { Fabricate(:account, domain: 'narrow.com', uri: 'https://narrow.com/') } + let(:content) { '😀' } + + before do + Form::AdminSettings.new(receive_other_servers_emoji_reaction: false).save + end + + it 'create emoji reaction' do + expect(subject.count).to eq 0 + expect(sender.favourited?(status)).to be false + end + end + + context 'when emoji reaction between other servers is disabled but that status is local' do + let(:content) { '😀' } + + before do + Form::AdminSettings.new(receive_other_servers_emoji_reaction: false).save + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq '😀' + expect(subject.first.account).to eq sender + expect(sender.favourited?(status)).to be false + end + end + end + describe '#perform when domain_block' do subject { described_class.new(json, sender) } @@ -50,7 +269,7 @@ subject.perform end - it 'does not create a favourite from sender to status', pending: 'considering spec' do + it 'does not create a favourite from sender to status' do expect(sender.favourited?(status)).to be false end end From 09020c6b211dd88c29ebc5cbb7bc5571de836287 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 12:13:18 +0900 Subject: [PATCH 22/29] =?UTF-8?q?Fix:=20=E3=81=99=E3=81=A7=E3=81=AB?= =?UTF-8?q?=E5=90=8C=E3=81=98=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0=E7=B5=B5?= =?UTF-8?q?=E6=96=87=E5=AD=97=E3=81=8C=E5=AD=98=E5=9C=A8=E3=81=99=E3=82=8B?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=80=81=E3=82=B9=E3=82=BF=E3=83=B3=E3=83=97?= =?UTF-8?q?=E3=82=92=E5=8F=97=E3=81=91=E5=85=A5=E3=82=8C=E3=81=AA=E3=81=84?= =?UTF-8?q?=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/like.rb | 14 ++++++----- spec/lib/activitypub/activity/like_spec.rb | 29 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index 5e34cc9dc547c2..298a81b2928656 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -93,15 +93,17 @@ def process_emoji(tag) return if custom_emoji_parser.shortcode.blank? || custom_emoji_parser.image_remote_url.blank? - emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) - - return unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) - - domain = emoji_tag['domain'] || URI.split(custom_emoji_parser.uri)[2] || @account.domain + domain = tag['domain'] || URI.split(custom_emoji_parser.uri)[2] || @account.domain domain = nil if domain == Rails.configuration.x.local_domain || domain == Rails.configuration.x.web_domain - return if domain.present? && skip_download?(domain) + emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: domain) + + return emoji unless emoji.nil? || + custom_emoji_parser.image_remote_url != emoji.image_remote_url || + (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) || + custom_emoji_parser.license != emoji.license + begin emoji ||= CustomEmoji.new( domain: domain, diff --git a/spec/lib/activitypub/activity/like_spec.rb b/spec/lib/activitypub/activity/like_spec.rb index bdeda34f12ed22..9991ba37dc8a82 100644 --- a/spec/lib/activitypub/activity/like_spec.rb +++ b/spec/lib/activitypub/activity/like_spec.rb @@ -93,6 +93,35 @@ end end + context 'with custom emoji but that is existing on local server' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + license: 'Everyone but Ohagi', + } + end + + before do + Fabricate(:custom_emoji, domain: 'example.com', uri: 'https://example.com/aaa', image_remote_url: 'http://example.com/emoji.png', shortcode: 'tinking', license: 'Everyone but Ohagi') + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'example.com' + expect(sender.favourited?(status)).to be false + end + end + context 'with custom emoji and custom domain' do let(:content) { ':tinking:' } let(:tag) do From f6780a23970a9ae4a0cf409ba5c62b3137fec520 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 12:22:53 +0900 Subject: [PATCH 23/29] =?UTF-8?q?Fix:=20=E3=83=A9=E3=82=A4=E3=82=BB?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E3=81=AE=E6=9B=B4=E6=96=B0=E5=87=A6=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/like.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index 298a81b2928656..9d2abcccf5d46d 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -108,11 +108,11 @@ def process_emoji(tag) emoji ||= CustomEmoji.new( domain: domain, shortcode: custom_emoji_parser.shortcode, - uri: custom_emoji_parser.uri, - is_sensitive: custom_emoji_parser.is_sensitive, - license: custom_emoji_parser.license + uri: custom_emoji_parser.uri ) emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.license = custom_emoji_parser.license + emoji.is_sensitive = custom_emoji_parser.is_sensitive emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" From 22d03b06dab920839b59eb78baa96939cd127467 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 12:25:29 +0900 Subject: [PATCH 24/29] =?UTF-8?q?=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?= =?UTF-8?q?=E7=B5=B5=E6=96=87=E5=AD=97=E3=81=AE=E3=83=A9=E3=82=A4=E3=82=BB?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E5=A4=89=E6=9B=B4=E3=82=92=E4=BB=96=E3=81=AE?= =?UTF-8?q?=E5=A0=B4=E6=89=80=E3=81=A7=E3=82=82=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/create.rb | 11 +++++++---- .../activitypub/process_status_update_service.rb | 9 +++++++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index bebdd7034061f3..48b855f3b94a47 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -256,17 +256,20 @@ def process_emoji(tag) emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) - return unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) + return unless emoji.nil? || + custom_emoji_parser.image_remote_url != emoji.image_remote_url || + (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) || + custom_emoji_parser.license != emoji.license begin emoji ||= CustomEmoji.new( domain: @account.domain, shortcode: custom_emoji_parser.shortcode, - uri: custom_emoji_parser.uri, - is_sensitive: custom_emoji_parser.is_sensitive, - license: custom_emoji_parser.license + uri: custom_emoji_parser.uri ) emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.license = custom_emoji_parser.license + emoji.is_sensitive = custom_emoji_parser.is_sensitive emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index 6da0880a9389c0..c7bc93f7813fe6 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -239,11 +239,16 @@ def update_emojis! emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) - next unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) + next unless emoji.nil? || + custom_emoji_parser.image_remote_url != emoji.image_remote_url || + (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) || + custom_emoji_parser.license != emoji.license begin - emoji ||= CustomEmoji.new(domain: @account.domain, shortcode: custom_emoji_parser.shortcode, uri: custom_emoji_parser.uri, is_sensitive: custom_emoji_parser.is_sensitive, license: custom_emoji_parser.license) + emoji ||= CustomEmoji.new(domain: @account.domain, shortcode: custom_emoji_parser.shortcode, uri: custom_emoji_parser.uri) emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.license = custom_emoji_parser.license + emoji.is_sensitive = custom_emoji_parser.is_sensitive emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" From 41c1aaf54d6b85738ffaad785eb7e4e3fe4ac5bf Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 13:07:35 +0900 Subject: [PATCH 25/29] =?UTF-8?q?Add:=20=E3=83=97=E3=83=AD=E3=82=AD?= =?UTF-8?q?=E3=82=B7=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E3=82=92?= =?UTF-8?q?=E5=8B=95=E7=9A=84=E3=81=AB=E8=AD=98=E5=88=A5=E3=81=99=E3=82=8B?= =?UTF-8?q?=E7=B0=A1=E6=98=93=E7=9A=84=E3=81=AA=E4=BB=95=E7=B5=84=E3=81=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/follow.rb | 22 +++++++- spec/lib/activitypub/activity/follow_spec.rb | 51 ++++++++++++++++++- .../process_account_service_spec.rb | 1 + 3 files changed, 72 insertions(+), 2 deletions(-) diff --git a/app/lib/activitypub/activity/follow.rb b/app/lib/activitypub/activity/follow.rb index a586298eec3225..f19bd1f7c86341 100644 --- a/app/lib/activitypub/activity/follow.rb +++ b/app/lib/activitypub/activity/follow.rb @@ -30,7 +30,7 @@ def perform follow_request = FollowRequest.create!(account: @account, target_account: target_account, uri: @json['id']) - if target_account.locked? || @account.silenced? || block_straight_follow? || (@account.bot? && target_account.user&.setting_lock_follow_from_bot) + if target_account.locked? || @account.silenced? || block_straight_follow? || ((@account.bot? || proxy_account?) && target_account.user&.setting_lock_follow_from_bot) LocalNotificationWorker.perform_async(target_account.id, follow_request.id, 'FollowRequest', 'follow_request') else AuthorizeFollowService.new.call(@account, target_account) @@ -50,4 +50,24 @@ def block_straight_follow? def block_new_follow? @block_new_follow ||= DomainBlock.reject_new_follow?(@account.domain) end + + def proxy_account? + (@account.username.downcase.include?('proxy') || + @account.username.downcase.include?('followbot') || + @account.display_name&.downcase&.include?('proxy') || + @account.display_name&.include?('プロキシ') || + @account.note&.downcase&.include?('proxy') || + @account.note&.include?('プロキシ')) && proxyable_software? + end + + def proxyable_software? + info = instance_info + return false if info.nil? + + %w(misskey calckey firefish meisskey cherrypick).include?(info.software) + end + + def instance_info + @instance_info ||= InstanceInfo.find_by(domain: @account.domain) + end end diff --git a/spec/lib/activitypub/activity/follow_spec.rb b/spec/lib/activitypub/activity/follow_spec.rb index 890ebe27509516..2626c036a44b79 100644 --- a/spec/lib/activitypub/activity/follow_spec.rb +++ b/spec/lib/activitypub/activity/follow_spec.rb @@ -4,7 +4,8 @@ RSpec.describe ActivityPub::Activity::Follow do let(:actor_type) { 'Person' } - let(:sender) { Fabricate(:account, domain: 'example.com', inbox_url: 'https://example.com/inbox', actor_type: actor_type) } + let(:note) { '' } + let(:sender) { Fabricate(:account, domain: 'example.com', inbox_url: 'https://example.com/inbox', actor_type: actor_type, note: note) } let(:recipient) { Fabricate(:account) } let(:json) do @@ -103,6 +104,54 @@ end end + context 'when unlocked misskey proxy account but locked from bot' do + let(:note) { 'i am proxy.' } + + before do + Fabricate(:instance_info, domain: 'example.com', software: 'misskey') + recipient.user.settings['lock_follow_from_bot'] = true + recipient.user.save! + subject.perform + end + + it 'does not create a follow from sender to recipient' do + expect(sender.following?(recipient)).to be false + end + + it 'creates a follow request' do + expect(sender.requested?(recipient)).to be true + expect(sender.follow_requests.find_by(target_account: recipient).uri).to eq 'foo' + end + end + + context 'when unlocked mastodon proxy account but locked from bot' do + let(:note) { 'i am proxy.' } + + before do + Fabricate(:instance_info, domain: 'example.com', software: 'mastodon') + recipient.user.settings['lock_follow_from_bot'] = true + recipient.user.save! + subject.perform + end + + it 'does not create a follow from sender to recipient' do + expect(sender.following?(recipient)).to be true + end + end + + context 'when unlocked misskey normal account but locked from bot' do + before do + Fabricate(:instance_info, domain: 'example.com', software: 'misskey') + recipient.user.settings['lock_follow_from_bot'] = true + recipient.user.save! + subject.perform + end + + it 'does not create a follow from sender to recipient' do + expect(sender.following?(recipient)).to be true + end + end + context 'when domain block reject_straight_follow' do before do Fabricate(:domain_block, domain: 'example.com', reject_straight_follow: true) diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb index b23aa1cea34c59..fe2c7cda99cffa 100644 --- a/spec/services/activitypub/process_account_service_spec.rb +++ b/spec/services/activitypub/process_account_service_spec.rb @@ -21,6 +21,7 @@ searchableBy: searchable_by, indexable: indexable, summary: sender_bio, + actor_type: 'Person', }.with_indifferent_access end From d94713594c29aee76124b2cfcaf6f0f00f0226c4 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 13:17:47 +0900 Subject: [PATCH 26/29] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=AD=E3=82=B7?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E3=83=AD=E3=82=B8=E3=83=83=E3=82=AF=E3=82=92?= =?UTF-8?q?=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/follow.rb | 7 ++++--- spec/lib/activitypub/activity/follow_spec.rb | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/app/lib/activitypub/activity/follow.rb b/app/lib/activitypub/activity/follow.rb index f19bd1f7c86341..8d9e37f172cdd1 100644 --- a/app/lib/activitypub/activity/follow.rb +++ b/app/lib/activitypub/activity/follow.rb @@ -52,11 +52,12 @@ def block_new_follow? end def proxy_account? - (@account.username.downcase.include?('proxy') || - @account.username.downcase.include?('followbot') || + (@account.username.downcase.include?('_proxy') || + @account.username.downcase.end_with?('proxy') || + @account.username.downcase.include?('_bot_') || + @account.username.downcase.end_with?('bot') || @account.display_name&.downcase&.include?('proxy') || @account.display_name&.include?('プロキシ') || - @account.note&.downcase&.include?('proxy') || @account.note&.include?('プロキシ')) && proxyable_software? end diff --git a/spec/lib/activitypub/activity/follow_spec.rb b/spec/lib/activitypub/activity/follow_spec.rb index 2626c036a44b79..57f2b077182dcc 100644 --- a/spec/lib/activitypub/activity/follow_spec.rb +++ b/spec/lib/activitypub/activity/follow_spec.rb @@ -4,8 +4,8 @@ RSpec.describe ActivityPub::Activity::Follow do let(:actor_type) { 'Person' } - let(:note) { '' } - let(:sender) { Fabricate(:account, domain: 'example.com', inbox_url: 'https://example.com/inbox', actor_type: actor_type, note: note) } + let(:display_name) { '' } + let(:sender) { Fabricate(:account, domain: 'example.com', inbox_url: 'https://example.com/inbox', actor_type: actor_type, display_name: display_name) } let(:recipient) { Fabricate(:account) } let(:json) do @@ -105,7 +105,7 @@ end context 'when unlocked misskey proxy account but locked from bot' do - let(:note) { 'i am proxy.' } + let(:display_name) { 'i am proxy.' } before do Fabricate(:instance_info, domain: 'example.com', software: 'misskey') @@ -125,7 +125,7 @@ end context 'when unlocked mastodon proxy account but locked from bot' do - let(:note) { 'i am proxy.' } + let(:display_name) { 'i am proxy.' } before do Fabricate(:instance_info, domain: 'example.com', software: 'mastodon') From 5a960c3abd896514c3aeb1340a289e97232d4ccc Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 13:24:04 +0900 Subject: [PATCH 27/29] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=AD=E3=82=B7?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E6=9D=A1=E4=BB=B6=E3=82=92=E5=BD=A9=E5=BA=A6?= =?UTF-8?q?=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/follow.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/lib/activitypub/activity/follow.rb b/app/lib/activitypub/activity/follow.rb index 8d9e37f172cdd1..d1297bcfe85243 100644 --- a/app/lib/activitypub/activity/follow.rb +++ b/app/lib/activitypub/activity/follow.rb @@ -58,7 +58,9 @@ def proxy_account? @account.username.downcase.end_with?('bot') || @account.display_name&.downcase&.include?('proxy') || @account.display_name&.include?('プロキシ') || - @account.note&.include?('プロキシ')) && proxyable_software? + @account.note&.include?('プロキシ')) && + (@account.following_count.zero? || @account.following_count > @account.followers_count) && + proxyable_software? end def proxyable_software? From 7cd6252841bbb33cbbd72161f2fadb3f8b6fce37 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 14:09:02 +0900 Subject: [PATCH 28/29] =?UTF-8?q?Fix:=20Account=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=8C=E3=81=9F=E3=81=BE=E3=81=AB=E8=90=BD=E3=81=A1?= =?UTF-8?q?=E3=82=8B=E5=95=8F=E9=A1=8C=EF=BC=88Mastodon=E6=9C=AC=E5=AE=B6?= =?UTF-8?q?=E3=81=AE=E5=95=8F=E9=A1=8C=EF=BC=9F=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/models/account_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index fc30b0916779c6..dd1f63ce750927 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -854,7 +854,7 @@ match = Fabricate(:account, username: 'pattern_and_suffix') account = Fabricate(:account, username: 'prefix_and_pattern') - expect(described_class.matches_username('pattern')).to eq [match, account] + expect(described_class.matches_username('pattern')).to contain_exactly(match, account) end end From 583f5fe906d39920c0f336f334f12966c808e4a2 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 15:31:35 +0900 Subject: [PATCH 29/29] =?UTF-8?q?=E4=BB=96=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=82=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/models/account_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index dd1f63ce750927..c13d57c7614cc1 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -845,7 +845,7 @@ match = Fabricate(:account, display_name: 'pattern and suffix') account = Fabricate(:account, display_name: 'prefix and pattern') - expect(described_class.matches_display_name('pattern')).to eq [match, account] + expect(described_class.matches_display_name('pattern')).to contain_exactly(match, account) end end