diff --git a/.env.production.sample b/.env.production.sample index eb1c5a48f..1d8a177aa 100644 --- a/.env.production.sample +++ b/.env.production.sample @@ -69,7 +69,7 @@ SMTP_FROM_ADDRESS=notifications@example.com #SMTP_CA_FILE=/etc/ssl/certs/ca-certificates.crt #SMTP_OPENSSL_VERIFY_MODE=peer #SMTP_ENABLE_STARTTLS_AUTO=true - +#SMTP_TLS=true # Optional user upload path and URL (images, avatars). Default is :rails_root/public/system. If you set this variable, you are responsible for making your HTTP server (eg. nginx) serve these files. # PAPERCLIP_ROOT_PATH=/var/lib/mastodon/public-system diff --git a/Aptfile b/Aptfile index 5e922ca18..48dff1a77 100644 --- a/Aptfile +++ b/Aptfile @@ -1,8 +1,9 @@ -libpq-dev -protobuf-compiler -libprotobuf-dev ffmpeg +libicu-dev +libidn11 +libidn11-dev +libpq-dev +libprotobuf-dev libxdamage1 libxfixes3 -libicu-dev -libidn11-dev +protobuf-compiler diff --git a/app.json b/app.json index a935b8232..09adaac2c 100644 --- a/app.json +++ b/app.json @@ -2,7 +2,7 @@ "name": "Mastodon", "description": "A GNU Social-compatible microblogging server", "repository": "https://github.com/tootsuite/mastodon", - "logo": "https://github.com/tootsuite/mastodon/raw/master/app/javascript/images/logo.svg", + "logo": "https://github.com/tootsuite.png", "env": { "HEROKU": { "description": "Leave this as true", diff --git a/app/javascript/mastodon/emoji.js b/app/javascript/mastodon/emoji.js index 9b58cacf5..5695c86dd 100644 --- a/app/javascript/mastodon/emoji.js +++ b/app/javascript/mastodon/emoji.js @@ -3,6 +3,8 @@ import Trie from 'substring-trie'; const trie = new Trie(Object.keys(unicodeMapping)); +const excluded = ['™', '©', '®']; + function emojify(str) { // This walks through the string from start to end, ignoring any tags (
,
, etc.)
// and replacing valid unicode strings
@@ -19,7 +21,7 @@ function emojify(str) {
insideTag = true;
} else if (!insideTag && (match = trie.search(str.substring(i)))) {
const unicodeStr = match;
- if (unicodeStr in unicodeMapping) {
+ if (unicodeStr in unicodeMapping && excluded.indexOf(unicodeStr) === -1) {
const [filename, shortCode] = unicodeMapping[unicodeStr];
const alt = unicodeStr;
const replacement = ``;
diff --git a/app/javascript/mastodon/load_polyfills.js b/app/javascript/mastodon/load_polyfills.js
index df7889118..8927b7358 100644
--- a/app/javascript/mastodon/load_polyfills.js
+++ b/app/javascript/mastodon/load_polyfills.js
@@ -24,6 +24,8 @@ function loadPolyfills() {
// This avoids shipping them all the polyfills.
const needsExtraPolyfills = !(
window.IntersectionObserver &&
+ window.IntersectionObserverEntry &&
+ 'isIntersecting' in IntersectionObserverEntry.prototype &&
window.requestIdleCallback &&
'object-fit' in (new Image()).style
);
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index 8c21fe22a..d2682ef12 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -18,14 +18,14 @@
"account.unblock_domain": "رفع پنهانسازی از {domain}",
"account.unfollow": "پایان پیگیری",
"account.unmute": "باصدا کردن @{name}",
- "account.view_full_profile": "View full profile",
+ "account.view_full_profile": "نمایش نمایهٔ کامل",
"boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید",
- "bundle_column_error.body": "Something went wrong while loading this component.",
- "bundle_column_error.retry": "Try again",
- "bundle_column_error.title": "Network error",
- "bundle_modal_error.close": "Close",
- "bundle_modal_error.message": "Something went wrong while loading this component.",
- "bundle_modal_error.retry": "Try again",
+ "bundle_column_error.body": "هنگام بازکردن این بخش خطایی رخ داد.",
+ "bundle_column_error.retry": "تلاش دوباره",
+ "bundle_column_error.title": "خطای شبکه",
+ "bundle_modal_error.close": "بستن",
+ "bundle_modal_error.message": "هنگام بازکردن این بخش خطایی رخ داد.",
+ "bundle_modal_error.retry": "تلاش دوباره",
"column.blocks": "کاربران مسدودشده",
"column.community": "نوشتههای محلی",
"column.favourites": "پسندیدهها",
@@ -35,12 +35,12 @@
"column.notifications": "اعلانها",
"column.public": "نوشتههای همهجا",
"column_back_button.label": "بازگشت",
- "column_header.hide_settings": "Hide settings",
- "column_header.moveLeft_settings": "Move column to the left",
- "column_header.moveRight_settings": "Move column to the right",
- "column_header.pin": "Pin",
- "column_header.show_settings": "Show settings",
- "column_header.unpin": "Unpin",
+ "column_header.hide_settings": "نهفتن تنظیمات",
+ "column_header.moveLeft_settings": "انتقال ستون به چپ",
+ "column_header.moveRight_settings": "انتقال ستون به راست",
+ "column_header.pin": "ثابتکردن",
+ "column_header.show_settings": "نمایش تنظیمات",
+ "column_header.unpin": "رهاکردن",
"column_subheading.navigation": "گشت و گذار",
"column_subheading.settings": "تنظیمات",
"compose_form.lock_disclaimer": "حساب شما {locked} نیست. هر کسی میتواند پیگیر شما شود و نوشتههای ویژهٔ پیگیران شما را ببیند.",
@@ -61,8 +61,8 @@
"confirmations.domain_block.message": "آیا جدی جدی میخواهید کل دامین {domain} را مسدود کنید؟ بیشتر وقتها مسدودکردن یا بیصداکردن چند حساب کاربری خاص کافی است و توصیه میشود.",
"confirmations.mute.confirm": "بیصدا کن",
"confirmations.mute.message": "آیا واقعاً میخواهید {name} را بیصدا کنید؟",
- "confirmations.unfollow.confirm": "Unfollow",
- "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
+ "confirmations.unfollow.confirm": "لغو پیگیری",
+ "confirmations.unfollow.message": "آیا واقعاً میخواهید به پیگیری از {name} پایان دهید؟",
"emoji_button.activity": "فعالیت",
"emoji_button.flags": "پرچمها",
"emoji_button.food": "غذا و نوشیدنی",
@@ -94,8 +94,8 @@
"home.column_settings.show_replies": "نمایش پاسخها",
"home.settings": "تنظیمات ستون",
"lightbox.close": "بستن",
- "lightbox.next": "Next",
- "lightbox.previous": "Previous",
+ "lightbox.next": "بعدی",
+ "lightbox.previous": "قبلی",
"loading_indicator.label": "بارگیری...",
"media_gallery.toggle_visible": "تغییر پیدایی",
"missing_indicator.label": "پیدا نشد",
@@ -119,8 +119,8 @@
"notifications.column_settings.favourite": "پسندیدهها:",
"notifications.column_settings.follow": "پیگیران تازه:",
"notifications.column_settings.mention": "نامبردنها:",
- "notifications.column_settings.push": "Push notifications",
- "notifications.column_settings.push_meta": "This device",
+ "notifications.column_settings.push": "اعلانها از سمت سرور",
+ "notifications.column_settings.push_meta": "این دستگاه",
"notifications.column_settings.reblog": "بازبوقها:",
"notifications.column_settings.show": "نمایش در ستون",
"notifications.column_settings.sound": "پخش صدا",
@@ -159,7 +159,7 @@
"report.target": "گزارشدادن",
"search.placeholder": "جستجو",
"search_results.total": "{count, number} {count, plural, one {نتیجه} other {نتیجه}}",
- "standalone.public_title": "A look inside...",
+ "standalone.public_title": "نگاهی به کاربران این سرور...",
"status.cannot_reblog": "این نوشته را نمیشود بازبوقید",
"status.delete": "پاککردن",
"status.favourite": "پسندیدن",
@@ -175,7 +175,7 @@
"status.report": "گزارش دادن @{name}",
"status.sensitive_toggle": "برای دیدن کلیک کنید",
"status.sensitive_warning": "محتوای حساس",
- "status.share": "Share",
+ "status.share": "همرسانی",
"status.show_less": "نهفتن",
"status.show_more": "نمایش",
"status.unmute_conversation": "باصداکردن گفتگو",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index dda0daf7c..4d68c7992 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -94,8 +94,8 @@
"home.column_settings.show_replies": "Reacties tonen",
"home.settings": "Kolom-instellingen",
"lightbox.close": "Sluiten",
- "lightbox.next": "Next",
- "lightbox.previous": "Previous",
+ "lightbox.next": "Volgende",
+ "lightbox.previous": "Vorige",
"loading_indicator.label": "Laden…",
"media_gallery.toggle_visible": "Media wel/niet tonen",
"missing_indicator.label": "Niet gevonden",
diff --git a/app/javascript/mastodon/service_worker/web_push_notifications.js b/app/javascript/mastodon/service_worker/web_push_notifications.js
index 64c457889..acb85f626 100644
--- a/app/javascript/mastodon/service_worker/web_push_notifications.js
+++ b/app/javascript/mastodon/service_worker/web_push_notifications.js
@@ -9,7 +9,7 @@ const notify = options =>
if (notifications.length === MAX_NOTIFICATIONS) {
// Reached the maximum number of notifications, proceed with grouping
const group = {
- title: formatGroupTitle(notifications[0].data.message, notifications.length + 1),
+ title: formatGroupTitle(options.data.message, notifications.length + 1),
body: notifications
.sort((n1, n2) => n1.timestamp < n2.timestamp)
.map(notification => notification.title).join('\n'),
@@ -19,7 +19,7 @@ const notify = options =>
data: {
url: (new URL('/web/notifications', self.location)).href,
count: notifications.length + 1,
- message: notifications[0].data.message,
+ message: options.data.message,
},
};
diff --git a/app/javascript/styles/components.scss b/app/javascript/styles/components.scss
index 3749ead40..34e4b2e72 100644
--- a/app/javascript/styles/components.scss
+++ b/app/javascript/styles/components.scss
@@ -466,10 +466,6 @@
overflow: hidden;
white-space: pre-wrap;
- &:focus {
- outline: rgba($ui-highlight-color, 0.7) solid 2px;
- }
-
.emojione {
width: 18px;
height: 18px;
@@ -571,12 +567,6 @@
}
}
- &:focus,
- &.status-direct:focus {
- outline: 0;
- background-color: lighten($ui-base-color, 10%);
- }
-
&.light {
.status__relative-time {
color: $ui-primary-color;
diff --git a/app/models/web/push_subscription.rb b/app/models/web/push_subscription.rb
index 45ce3298a..e76f61278 100644
--- a/app/models/web/push_subscription.rb
+++ b/app/models/web/push_subscription.rb
@@ -161,6 +161,7 @@ class Web::PushSubscription < ApplicationRecord
content: translate('push_notifications.subscribed.body'),
actions: [],
url: web_url('notifications'),
+ message: translate('push_notifications.group.title'), # Do not pass count, will be formatted in the ServiceWorker
}
),
endpoint: endpoint,
diff --git a/app/views/user_mailer/confirmation_instructions.fa.html.erb b/app/views/user_mailer/confirmation_instructions.fa.html.erb
index cccdaa2c5..3e77e043b 100644
--- a/app/views/user_mailer/confirmation_instructions.fa.html.erb
+++ b/app/views/user_mailer/confirmation_instructions.fa.html.erb
@@ -9,4 +9,4 @@
با احترام,
-
گردانندگان سرور <%= @instance %>
+گردانندگان سرور <%= @instance %>
\ No newline at end of file diff --git a/app/views/user_mailer/confirmation_instructions.fa.text.erb b/app/views/user_mailer/confirmation_instructions.fa.text.erb index 904bd5bfe..76727b3be 100644 --- a/app/views/user_mailer/confirmation_instructions.fa.text.erb +++ b/app/views/user_mailer/confirmation_instructions.fa.text.erb @@ -9,4 +9,4 @@ با احترام، -گردانندگان سرور <%= @instance %> +گردانندگان سرور <%= @instance %> \ No newline at end of file diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 23d2512a2..eb66a9c41 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -1,19 +1,38 @@ --- fa: about: - about_mastodon_html: ماستدون (Mastodon) یک شبکهٔ اجتماعی آزاد و کدباز است. یک جایگزین غیرمتمرکز برای شبکههای تجاری، که نمیگذارد ارتباطهای شما را یک شرکت در انحصار خود بگیرد. یک سرور مورد اعتماد را انتخاب کنید — هر سروری که باشد، همچنان میتوانید با سرورهای دیگر ارتباط داشته باشید. هر کسی میتواند سرور ماستدون خود را راه بیندازد و در شبکهٔ اجتماعی سهیم شود. - about_this: دربارهٔ این سرور - closed_registrations: امکان ثبت نام روی این سرور هماینک فعال نیست. + about_mastodon_html: ماستدون (Mastodon) یک شبکهٔ اجتماعی است که بر اساس پروتکلهای آزاد وب و نرمافزارهای آزاد و کدباز ساخته شده است. این شبکه مانند ایمیل غیرمتمرکز است. + about_this: درباره. + closed_registrations: ثبتنام روی این سرور هماینک فعال نیست. اما شما میتوانید سرور دیگری بیابید و با حسابی که آنجا میسازید دقیقاً به همین شبکه دسترسی داشته باشید. contact: تماس + contact_missing: تعیین نشده + contact_unavailable: موجود نیست description_headline: "%{domain} چیست؟" domain_count_after: سرور دیگر domain_count_before: متصل به - other_instances: سرورهای دیگر + extended_description_html: | +توضیحات تکمیلی نوشته نشده است.
+ features: + humane_approach_body: با آموختن از کاستیهای شبکههای دیگر، ماستدون میخواهد به کمک انتخابهای اخلاقیتر در طراحی خودش با آسیبهای شبکههای اجتماعی مبارزه کند. + humane_approach_title: رویکردی انسانیتر + not_a_product_body: ماستدون یک شبکهٔ تجاری نیست. بدون تبلیغات، بدون دادهکاوی، بدون حصارکشی. هیچ قدرت مرکزیای وجود ندارد. + not_a_product_title: شما یک انسان هستید، نه یک محصول + real_conversation_body: با ۵۰۰ نویسه برای هر نوشته و با پشتیبانی از هشدارهای موردی برای نوشتهها و تصاویر، میتوانید خود را همان گونه که میخواهید ابراز کنید. + real_conversation_title: برای گفتگوهای واقعی + within_reach_body: اپهای متنوع برای iOS، اندروید، و سیستمهای دیگر به خاطر وحود یک اکوسیستم API دوستانه برای برنامهنویسان. از همه جا با دوستان خود ارتباط داشته باشید. + within_reach_title: همیشه در دسترس + find_another_instance: یافتن سرورهای دیگر + generic_description: "%{domain} یک سرور روی شبکه است" + hosted_on: ماستدون میزبانیشده روی %{domain} + learn_more: بیشتر بدانید + other_instances: فهرست سرورها source_code: کدهای منبع status_count_after: چیز نوشتهاند status_count_before: که جمعاً user_count_after: کاربر user_count_before: دارای + what_is_mastodon: ماستدون چیست؟ accounts: follow: پی بگیرید followers: پیگیران @@ -23,12 +42,14 @@ fa: people_who_follow: کسانی که %{name} را پی میگیرند posts: نوشته remote_follow: پیگیری غیرمستقیم + reserved_username: این نام کاربری در دسترس نیست unfollow: پایان پیگیری admin: accounts: are_you_sure: آیا مطمئن هستید؟ confirm: تأیید confirmed: تأیید شد + disable_two_factor_authentication: غیرفعالسازی ورود دومرحلهای display_name: نمایش به نام domain: دامین edit: ویرایش @@ -36,6 +57,7 @@ fa: feed_url: نشانی فید followers: پیگیران follows: پی میگیرد + ip: IP location: all: همه local: محلی @@ -58,17 +80,23 @@ fa: profile_url: نشانی نمایه public: عمومی push_subscription_expires: عضویت از راه PuSH منقضی شد + redownload: بهروزرسانی تصویر نمایه + reset: بازنشانی reset_password: بازنشانی رمز + resubscribe: اشتراک دوباره salmon_url: نشانی Salmon + search: جستجو show: created_reports: گزارشها از طرف این حساب report: گزارش targeted_reports: گزارشها دربارهٔ این حساب silence: بیصدا statuses: نوشتهها + subscribe: اشتراک title: حسابها undo_silenced: واگردانی بیصداکردن undo_suspension: واگردانی تعلیق + unsubscribe: لغو اشتراک username: نام کاربری web: وب domain_blocks: @@ -81,12 +109,14 @@ fa: hint: مسدودسازی دامین جلوی فهرستشدن حسابها در پایگاه داده را نمیگیرد، بلکه به طور خودکار روشهای مدیریتی را روی فعالیتهای فعلی و گذشتهٔ آن حسابها اعمال میکند. severity: desc_html: "بیصداکردن یک حساب نوشتههای آن را برای همه (به جز پیگیرانش) ناپدید میکند. معلقکردن حساب همهٔ نوشتهها، تصویرها، و اطلاعات حساب را پاک میکند." + noop: هیچ silence: بیصداکردن suspend: معلقکردن title: مسدودسازی دامین دیگر reject_media: نپذیرفتن پروندههای تصویری reject_media_hint: تصویرهای ذخیرهشده در اینجا را پاک میکند و جلوی دریافت تصویرها را در آینده میگیرد. بیتأثیر برای معلقشدهها severities: + noop: هیچ silence: بیصداکردن suspend: معلقکردن severity: شدت @@ -106,12 +136,17 @@ fa: domain_name: دامین title: سرورهای شناختهشده reports: + action_taken_by: انجامدهنده + are_you_sure: آیا مطمئن هستید؟ comment: label: توضیح none: خالی delete: پاککردن id: شناسه mark_as_resolved: علامتگذاری به عنوان حلشده + nsfw: + 'false': نمایش پیوستهای تصویری + 'true': نهفتن پیوستهای تصویری report: 'گزارش #%{id}' report_contents: محتوا reported_account: حساب گزارششده @@ -126,22 +161,47 @@ fa: view: نمایش settings: contact_information: - email: یک نشانی ایمیل عمومی وارد کنید - username: یک نام کاربری وارد کنید + email: ایمیل کاری + username: نام کاربری registrations: closed_message: desc_html: وقتی امکان ثبت نام روی سرور فعال نباشد در صفحهٔ اصلی نمایش مییابد<a>
و <em>
.
title: دربارهٔ سایت
site_description_extended:
- desc_html: در صفحهٔ اطلاعات تکمیلی نشان داده میشوداین سایت برخی از اطلاعات مربوط به شما را ثبت میکند. این موارد شامل اطلاعات ثبتنامی شماست، و نیز شامل نوشتههایی است که اینجا میخوانید، مینویسید، یا واکنشهایی که به نوشتههای دیگران نشان میدهید.
+ +وقتی که در این سایت ثبتنام میکنید، ممکن است از شما بخواهیم که نام و نشانی ایمیل خود را وارد کنید. البته بدون ثبتنام نیز میتوان از این سایت بازدید کرد. برای تأیید ایمیل شما، ما یک نشانی اینترنتی یکتا را به آن میفرستیم. اگر آن نشانی را کسی باز کند، ما میفهمیم که آن شما بودهاید و بنابراین نشانی ایمیل متعلق به شماست.
+ +وقتی که عضو باشید و چیزی بنویسید، ما نشانی اینترنتیای (IP) را که نوشته از آن آمده است ثبت میکنیم. سیاههٔ کاری (log) سرور شامل نشانی IP همهٔ درخواستها به سرور است که ما شاید آن را هم ثبت کنیم.
+ +اطلاعاتی را که ما از شما ثبت میکنیم، ممکن است در موارد زیر به کار بروند:
+ +ما روشهای امنیتی گوناگونی را پیاده کردهایم تا امنیت اطلاعات شخصی شما هنگام ثبت، فرستادهشدن، و بازیابی آنها حفظ شود.
+ +ما با حسن نیت تلاش میکنیم تا:
+ +بله. کوکیها پروندههای کوچکی هستند که یک سایت یا خدماتدهندهاش (اگر شما اجازه بدهید) از راه مرورگر در کامپیوتر شما ذخیره میکنند. به کمک این کوکیها سایت میتواند مرورگر شما را بشناسد و اگر شما ثبتنام کرده باشید، حساب شما را به مرورگرتان مرتبط کند.
+ +ما به کمک کوکیها ترجیحات شما را برای بازدیدهای آینده میفهمیم و ذخیره میکنیم و دادههای جامعی دربارهٔ بازدیدها از سایت و برهمکنشها با آن را تهیه میکنیم. به این ترتیب میتوانیم در آینده تجربهٔ کاربری سایت و ابزارهای مربوط به آن را بهتر کنیم. برای داشتن درک بهتری از بازدیدکنندگان این سایت، ما گاهی از خدماتدهندههای دیگر نیز کمک میگیریم. این خدماتدهندهها اجازه ندارند تا از اطلاعاتی که به جای ما جمع میکنند برای کاری به جز بهترکردن کار ما استفاده کنند.
+ +ما اطلاعاتی را که بتواند شما را شناسایی کند به نهادهای دیگر نمیفروشیم، معامله نمیکنیم، یا به هر روش دیگری منتقل نمیکنیم. این شامل نهادهای مورد اعتمادی نمیشود که به ما در گرداندن این سایت یا انجام کارهایمان کمک میکنند، یا به شما خدمات میرسانند، تا جایی که آنها این دادهها را محرمانه نگه دارند. ما همچنین ممکن است اطلاعات شما را به حکم قانون یا برای اِعمال سیاستهای سایت، یا به خاطر حفظ حقوق، داراییها، یا امنیت خودمان یا دیگران منتشر کنیم. ما ممکن است اطلاعات بازدیدکنندگان سایت را که با آن نمیتوان شما را شناسایی کرد برای بازاریابی، تبلیغات، یا هدفهای دیگر به نهادهای دیگر ارائه دهیم.
+ +ما گاهی ممکن است به صلاحدید خودمان محصولات یا خدمات دیگران را در این سایت بگنجانیم یا پیشنهاد دهیم. سایتهای مرتبط با این محصولات و خدمات دارای سیاستهای رازداری جداگانه و مستقل خودشان هستند. بنابراین ما مسئولیتی دربارهٔ محتوا و کنشهای این سایتها به عهده نمیگیریم. با این وجود، ما تلاش میکنیم که این سایت به درستی کار کند و از بازخورد شما برای چنین محصولات و خدماتی استقبال میکنیم.
+ +سایت ما، محصولات و خدماتش همه برای کسانی است که دستکم ۱۳ سال سن داشته باشند. اگر این سرور در خاک ایالات متحدهٔ امریکا قرار دارد و سن شما کمتر از ۱۳ سال است، به خاطر رعایت قانون COPPA (Children's Online Privacy Protection Act) لطفاً این سایت را به کار نبرید.
+ +این سیاست رازداری آنلاین تنها مربوط به اطلاعاتی است که از راه سایت ما گردآوری میشود و شامل اطلاعاتی که به طور آفلاین گردآوری شده نیست.
+ +با استفاده از این سایت، شما موافقت خود را با سیاست رازداری ما اعلام میکنید.
+ +اگر ما سیاست رازداری خود را تغییر دهیم، این تغییرات را در این صفحه خواهیم نوشت.
+ +این نوشته تحت اجازهنامهٔ CC-BY-SA قرار دارد. تاریخ آخرین بهروزرسانی آن ۱۰ خرداد ۱۳۹۲ است.
+ +این نوشته اقتباسی است از سیاست رازداری Discourse.
+ title: "شرایط استفاده و سیاست رازداری %{instance}" time: formats: default: "%d %b %Y, %H:%M" @@ -299,11 +509,13 @@ fa: description_html: اگر ورود دومرحلهای را فعال کنید، برای ورود به سیستم به تلفن خود نیاز خواهید داشت تا برایتان یک کد موقتی بسازد disable: غیرفعالکردن enable: فعالکردن + enabled: ورود دومرحلهای فعال است enabled_success: ورود دومرحلهای با موفقیت فعال شد generate_recovery_codes: ساخت کدهای بازیابی instructions_html: "این کد QR را با برنامهٔ Google Authenticator یا برنامههای TOTP مشابه اسکن کنید. از این به بعد، آن برنامه کدهایی موقتی خواهد ساخت که برای ورود باید آنها را وارد کنید." lost_recovery_codes: با کدهای بازیابی میتوانید اگر تلفن خود را گم کردید به حساب خود دسترسی داشته باشید. اگر کدهای بازیابی خود را گم کردید، آنها را اینجا دوباره بسازید. کدهای بازیابی قبلی شما نامعتبر خواهند شد. manual_instructions: 'اگر نمیتوانید کدها را اسکن کنید و باید آنها را دستی وارد کنید، متن کد امنیتی اینجاست:' + recovery_codes: پشتیبانگیری از کدهای بازیابی recovery_codes_regenerated: کدهای بازیابی با موفقیت ساخته شدند recovery_instructions_html: اگر تلفن خود را گم کردید، میتوانید با یکی از کدهای بازیابی زیر کنترل حساب خود را به دست بگیرید. این کدها را در جای امنی نگه دارید، مثلاً آنها را چاپ کنید و کنار سایر مدارک مهم خود قرار دهید setup: راه اندازی diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index 3de1fe971..71a9d6e1f 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -12,6 +12,7 @@ fa: note: one: '1 حرف باقی مانده' other: '%{count} حرف باقی مانده' + setting_noindex: روی نمایهٔ عمومی و صفحهٔ نوشتههای شما تأثیر میگذارد imports: data: پروندهٔ CSV که از سرور ماستدون دیگری برونسپاری شده sessions: @@ -27,6 +28,7 @@ fa: data: دادهها display_name: نمایش به نام email: نشانی ایمیل + filtered_languages: زبانهای فیلترشده header: تصویر زمینه locale: زبان locked: خصوصیکردن حساب @@ -37,6 +39,11 @@ fa: setting_auto_play_gif: پخش خودکار تصویرهای متحرک setting_boost_modal: نمایش پیغام تأیید پیش از بازبوقیدن setting_default_privacy: حریم خصوصی نوشتهها + setting_default_sensitive: همیشه تصاویر را به عنوان حساس علامت بزن + setting_delete_modal: پیش از پاک کردن یک بوق پیغام تأیید نشان بده + setting_noindex: درخواست از موتورهای جستجو برای لغو فهرستسازی + setting_system_font_ui: بهکاربردن قلم پیشفرض سیستم + setting_unfollow_modal: نمایش پیغام تأیید پیش از لغو پیگیری دیگران severity: شدت type: نوع درونریزی username: نام کاربری (تنها حروف انگلیسی) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index df9cf48b3..aeb5492dc 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -21,7 +21,7 @@ module Mastodon end def flags - 'rc3' + '' end def to_a diff --git a/scalingo.json b/scalingo.json index 8df2caba1..426698b9c 100644 --- a/scalingo.json +++ b/scalingo.json @@ -2,7 +2,7 @@ "name": "Mastodon", "description": "A GNU Social-compatible microblogging server", "repository": "https://github.com/tootsuite/mastodon", - "logo": "https://github.com/tootsuite/mastodon/raw/master/app/javascript/images/logo.svg", + "logo": "https://github.com/tootsuite.png", "env": { "LOCAL_DOMAIN": { "description": "The domain that your Mastodon instance will run on (this can be appname.scalingo.io or a custom domain)",