Merge branch 'main' into glitch-soc/merge-upstream

This commit is contained in:
Claire
2023-09-19 17:07:29 +02:00
11 changed files with 90 additions and 242 deletions

View File

@@ -4,11 +4,11 @@
"about.disclaimer": "ম্যাস্টোডন একটি ফ্রি, ওপেন সোর্স সফটওয়্যার এবং ম্যাস্টোডন জিজিএমবিএইচ এর একটি ট্রেডমার্ক।",
"about.domain_blocks.no_reason_available": "কারণ দর্শানো যাচ্ছে না",
"about.domain_blocks.preamble": "ম্যাস্টোডন সাধারণত আপনাকে ফেদিভার্স এ অন্য কোনও সার্ভারের ব্যবহারকারীদের থেকে সামগ্রী দেখতে এবং তাদের সাথে আলাপচারিতা করার সুযোগ দেয়। এই ব্যতিক্রম যে এই বিশেষ সার্ভারে তৈরি করা হয়েছে।",
"about.domain_blocks.silenced.explanation": "আপনি সাধারণত এই সার্ভার থেকে প্রোফাইল এবং বিষয়বস্তু দেখতে পারবেন না, যদি না আপনি স্পষ্টভাবে এটি দেখেন বা অনুসরণ করে এটি নির্বাচন করেন",
"about.domain_blocks.silenced.explanation": "আপনি সাধারণত এই সার্ভার থেকে প্রোফাইল এবং বিষয়বস্তু দেখতে পারবেন না, যদি না আপনি নিজে থেকেই এটাকে ফলো না করেন.",
"about.domain_blocks.silenced.title": "সীমিত",
"about.domain_blocks.suspended.explanation": "এই সার্ভার থেকে কোনও ডেটা প্রক্রিয়াজাতকরণ, সংরক্ষণ বা আদান-প্রদান করা হবে না, তাই এই সার্ভার ব্যবহারকারীদের সাথে কোনও মিথস্ক্রিয়া বা যোগাযোগকে অসম্ভব করে তুলেছে।",
"about.domain_blocks.suspended.title": "সাসপেন্ড করা হয়েছে",
"about.not_available": "এই তথ্য এই সার্ভারে উপলব্ধ করা হয়নি",
"about.not_available": "এই তথ্য এই সার্ভারে উন্মুক্ত করা হয়নি.",
"about.powered_by": "{mastodon} দ্বারা তৈরি বিকেন্দ্রীভূত সামাজিক মিডিয়া।",
"about.rules": "সার্ভারের নিয়মাবলী",
"account.account_note_header": "বিজ্ঞপ্তি",
@@ -16,45 +16,45 @@
"account.badges.bot": "বট",
"account.badges.group": "দল",
"account.block": "@{name} কে ব্লক করো",
"account.block_domain": "{domain} থেকে সব লুকাও",
"account.block_short": "অবরোধ",
"account.block_domain": "{domain} কে ব্লক করুন",
"account.block_short": "ব্লক",
"account.blocked": "অবরুদ্ধ",
"account.browse_more_on_origin_server": "মূল প্রোফাইলটিতে আরও ব্রাউজ করুন",
"account.cancel_follow_request": "অনুসরণ অনুরোধ প্রত্যাহার করুন",
"account.direct": "গোপনে মেনশন করুন @{name}",
"account.disable_notifications": "আমাকে জানানো বন্ধ করো যখন @{name} পোস্ট করবে",
"account.domain_blocked": "ডোমেন গোপন করুন",
"account.edit_profile": "প্রোফাইল পরিবর্তন করুন",
"account.domain_blocked": "ডোমেব্লক কর",
"account.edit_profile": "প্রোফাইল সম্পাদনা করুন",
"account.enable_notifications": "আমাকে জানাবে যখন @{name} পোস্ট করবে",
"account.endorse": "নিজের পাতায় দেখান",
"account.endorse": "প্রোফাইলে ফিচার করুন",
"account.featured_tags.last_status_at": "{date} এ সর্বশেষ পোস্ট",
"account.featured_tags.last_status_never": "কোনো পোস্ট নেই",
"account.featured_tags.title": "{name}-এর বৈশিষ্ট্যযুক্ত হ্যাশট্যাগগুলি৷",
"account.featured_tags.title": "{name} এর ফিচার করা Hashtag সমূহ",
"account.follow": "অনুসরণ",
"account.followers": "অনুসরণকারী",
"account.followers.empty": "এই ব্যক্তিকে এখনো কেউ অনুসরণ করে না",
"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.follows.empty": "এই সদস্য কাকে এখনো ফলো করেন না.",
"account.follows_you": "আপনাকে ফলো করে",
"account.go_to_profile": "প্রোফাইলে যান",
"account.hide_reblogs": "@{name}'র সমর্থনগুলি লুকিয়ে ফেলুন",
"account.in_memoriam": "স্মৃতিসৌধে।",
"account.in_memoriam": "স্মৃতিতে.",
"account.joined_short": "যোগ দিয়েছেন",
"account.languages": "সাবস্ক্রাইব করা ভাষা পরিবর্তন করুন",
"account.link_verified_on": "এই লিংকের মালিকানা চেক করা হয়েছে {date} তারিখে",
"account.locked_info": "এই নিবন্ধনের গোপনীয়তার ক্ষেত্র তালা দেওয়া আছে। নিবন্ধনকারী অনুসরণ করার অনুমতি যাদেরকে দেবেন, শুধু তারাই অনুসরণ করতে পারবেন",
"account.locked_info": "এই একাউন্ট লক করানি যাদেরকে ফলো করার অনুমতি যাদেরকে দেবেন, শুধু তারাই ফলো করতে পারবেন.",
"account.media": "মিডিয়া",
"account.mention": "@{name} কে উল্লেখ করুন",
"account.mention": "@{name} কে মেনশন করুন",
"account.moved_to": "{name} নির্দেশ করেছে যে তাদের নতুন অ্যাকাউন্ট এখন হলো:",
"account.mute": "@{name} কে নিঃশব্দ করুন",
"account.mute_notifications_short": "বিজ্ঞপ্তি নিংশব্দ",
"account.mute_short": "নিঃশব্দ",
"account.muted": "নিঃশব্দ",
"account.no_bio": "কোনো বর্ণনা দেওয়া হয়নি",
"account.mute_notifications_short": "নোটিফিকেশন মিউট করুন",
"account.mute_short": "মিউট করুন",
"account.muted": "মিউট করা",
"account.no_bio": "কোনো বর্ণনা দেওয়া হয়নি.",
"account.open_original_page": "মূল পৃষ্ঠা খুলুন",
"account.posts": "টুট",
"account.posts": "পোষ্টসমূহ",
"account.posts_with_replies": "টুট এবং মতামত",
"account.report": "@{name} কে রিপোর্ট করুন",
"account.requested": "অনুমতির অপেক্ষা। অনুসরণ করার অনুরোধ বাতিল করতে এখানে ক্লিক করুন",
@@ -76,6 +76,9 @@
"admin.dashboard.retention.average": "গড়",
"admin.dashboard.retention.cohort": "সাইন আপের মাস",
"admin.dashboard.retention.cohort_size": "নতুন ব্যবহারকারী",
"admin.impact_report.instance_accounts": "যেসব একাউন্ট এর প্রোফাইল এটি ডিলিট করবে",
"admin.impact_report.instance_followers": "যেসব ফলোয়ারদের আমাদের ইউজাররা হারাবে",
"admin.impact_report.instance_follows": "যেসব ফলোয়ারদের তাদের ইউজার হারাবে",
"alert.rate_limited.message": "{retry_time, time, medium} -এর পরে আবার প্রচেষ্টা করুন।",
"alert.rate_limited.title": "হার সীমিত",
"alert.unexpected.message": "সমস্যা অপ্রত্যাশিত.",
@@ -131,7 +134,9 @@
"community.column_settings.remote_only": "শুধুমাত্র দূরবর্তী",
"compose.language.change": "ভাষা পরিবর্তন করুন",
"compose.language.search": "ভাষা অনুসন্ধান করুন...",
"compose.published.body": "পোষ্ট publish করা হয়েছে.",
"compose.published.open": "দেখো",
"compose.saved.body": "পোস্ট সংরক্ষণ করা হয়েছে.",
"compose_form.direct_message_warning_learn_more": "আরো জানুন",
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
"compose_form.hashtag_warning": "এই পোস্টটি কোনো হ্যাশট্যাগের বিষয় নয় কারণ এটি সর্বজনীনভাবে উপলব্ধ নয়। শুধুমাত্র জনসাধারণের কাছে পোস্ট করা বার্তাই হ্যাশট্যাগ দ্বারা অনুসন্ধান করা যেতে পারে।",
@@ -165,9 +170,11 @@
"confirmations.delete_list.confirm": "মুছে ফেলুন",
"confirmations.delete_list.message": "আপনি কি নিশ্চিত যে আপনি এই তালিকাটি স্থায়িভাবে মুছে ফেলতে চান ?",
"confirmations.discard_edit_media.confirm": "বাতিল করো",
"confirmations.discard_edit_media.message": "মিডিয়া Description বা Preview তে আপনার আপনার অসংরক্ষিত পরিবর্তন আছে, সেগুলো বাতিল করবেন?",
"confirmations.domain_block.confirm": "এই ডোমেন থেকে সব লুকান",
"confirmations.domain_block.message": "আপনি কি সত্যিই সত্যই নিশ্চিত যে আপনি পুরো {domain}'টি ব্লক করতে চান? বেশিরভাগ ক্ষেত্রে কয়েকটি লক্ষ্যযুক্ত ব্লক বা নীরবতা যথেষ্ট এবং পছন্দসই। আপনি কোনও পাবলিক টাইমলাইন বা আপনার বিজ্ঞপ্তিগুলিতে সেই ডোমেন থেকে সামগ্রী দেখতে পাবেন না। সেই ডোমেন থেকে আপনার অনুসরণকারীদের সরানো হবে।",
"confirmations.edit.confirm": "সম্পাদন",
"confirmations.edit.message": "এখন সম্পাদনা করলে আপনি যে মেসেজ লিখছেন তা overwrite করবে, চালিয়ে যেতে চান?",
"confirmations.logout.confirm": "প্রস্থান",
"confirmations.logout.message": "আপনি লগ আউট করতে চান?",
"confirmations.mute.confirm": "সরিয়ে ফেলুন",
@@ -187,6 +194,8 @@
"directory.local": "শুধু {domain} থেকে",
"directory.new_arrivals": "নতুন আগত",
"directory.recently_active": "সম্প্রতি সক্রিয়",
"disabled_account_banner.account_settings": "একাউন্ট সেটিংস",
"disabled_account_banner.text": "আপনার একাউন্ট {disabledAccount} বর্তমানে বন্ধ করা.",
"dismissable_banner.dismiss": "সরাও",
"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.",

View File

@@ -341,6 +341,7 @@
"keyboard_shortcuts.direct": "që të hapni shtyllën e përmendjeve private",
"keyboard_shortcuts.down": "Për zbritje poshtë nëpër listë",
"keyboard_shortcuts.enter": "Për hapje postimi",
"keyboard_shortcuts.favourite": "I vini shenjë postimit si të parapëlqyer",
"keyboard_shortcuts.favourites": "Hapni listë të parapëlqyerish",
"keyboard_shortcuts.federated": "Për hapje rrjedhe kohore të të federuarave",
"keyboard_shortcuts.heading": "Shkurtore tastiere",
@@ -629,6 +630,7 @@
"status.edited": "Përpunuar më {date}",
"status.edited_x_times": "Përpunuar {count, plural, one {{count} herë} other {{count} herë}}",
"status.embed": "Trupëzim",
"status.favourite": "I vini shenjë si të parapëlqyer",
"status.filter": "Filtroje këtë postim",
"status.filtered": "I filtruar",
"status.hide": "Fshihe postimin",

View File

@@ -68,26 +68,13 @@ class Request
# about 15s in total
TIMEOUT = { connect_timeout: 5, read_timeout: 10, write_timeout: 10, read_deadline: 30 }.freeze
# Workaround for overly-eager decoding of percent-encoded characters in Addressable::URI#normalized_path
# https://github.com/sporkmonger/addressable/issues/366
URI_NORMALIZER = lambda do |uri|
uri = HTTP::URI.parse(uri)
HTTP::URI.new(
scheme: uri.normalized_scheme,
authority: uri.normalized_authority,
path: Addressable::URI.normalize_path(encode_non_ascii(uri.path)).presence || '/',
query: encode_non_ascii(uri.query)
)
end
include RoutingHelper
def initialize(verb, url, **options)
raise ArgumentError if url.blank?
@verb = verb
@url = URI_NORMALIZER.call(url)
@url = Addressable::URI.parse(url).normalize
@http_client = options.delete(:http_client)
@allow_local = options.delete(:allow_local)
@options = options.merge(socket_class: use_proxy? || @allow_local ? ProxySocket : Socket)
@@ -151,14 +138,8 @@ class Request
%w(http https).include?(parsed_url.scheme) && parsed_url.host.present?
end
NON_ASCII_PATTERN = /[^\x00-\x7F]+/
def encode_non_ascii(str)
str&.gsub(NON_ASCII_PATTERN) { |substr| CGI.escape(substr.encode(Encoding::UTF_8)) }
end
def http_client
HTTP.use(:auto_inflate).use(normalize_uri: { normalizer: URI_NORMALIZER }).follow(max_hops: 3)
HTTP.use(:auto_inflate).follow(max_hops: 3)
end
end

View File

@@ -7,18 +7,18 @@ class TagManager
include RoutingHelper
def web_domain?(domain)
domain.nil? || domain.delete('/').casecmp(Rails.configuration.x.web_domain).zero?
domain.nil? || domain.delete_suffix('/').casecmp(Rails.configuration.x.web_domain).zero?
end
def local_domain?(domain)
domain.nil? || domain.delete('/').casecmp(Rails.configuration.x.local_domain).zero?
domain.nil? || domain.delete_suffix('/').casecmp(Rails.configuration.x.local_domain).zero?
end
def normalize_domain(domain)
return if domain.nil?
uri = Addressable::URI.new
uri.host = domain.delete('/')
uri.host = domain.delete_suffix('/')
uri.normalized_host
end

View File

@@ -75,7 +75,9 @@ class TranslateStatusService < BaseService
case source
when :content
status_translation.content = unwrap_emoji_shortcodes(translation.text).to_html
node = unwrap_emoji_shortcodes(translation.text)
Sanitize.node!(node, Sanitize::Config::MASTODON_STRICT)
status_translation.content = node.to_html
when :spoiler_text
status_translation.spoiler_text = unwrap_emoji_shortcodes(translation.text).content
when Poll::Option