about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/components/locales/fa.jsx146
-rw-r--r--app/assets/javascripts/components/locales/index.jsx2
-rw-r--r--app/helpers/application_helper.rb2
-rw-r--r--app/helpers/settings_helper.rb1
-rw-r--r--config/application.rb1
-rw-r--r--config/locales/devise.fa.yml61
-rw-r--r--config/locales/doorkeeper.fa.yml113
-rw-r--r--config/locales/fa.yml324
-rw-r--r--config/locales/simple_form.fa.yml51
9 files changed, 700 insertions, 1 deletions
diff --git a/app/assets/javascripts/components/locales/fa.jsx b/app/assets/javascripts/components/locales/fa.jsx
new file mode 100644
index 000000000..ed46a890b
--- /dev/null
+++ b/app/assets/javascripts/components/locales/fa.jsx
@@ -0,0 +1,146 @@
+/**
+ * Note for Contributors:
+ * This file (en.jsx) serve as a template for other languages.
+ * To make other contributors' life easier, please REMEMBER:
+ *   1. to add your new string here; and
+ *   2. to remove old strings that are no longer needed; and
+ *   3. to sort the strings by the key.
+ *   4. To rename the `en` const name and export default name to match your locale.
+ * Thanks!
+ */
+const fa = {
+  "account.block": "@{name} را مسدود کن",
+  "account.disclaimer": "این کاربر عضو سرور متفاوتی است. شاید عدد واقعی بیشتر از این باشد.",
+  "account.edit_profile": "ویرایش نمایه",
+  "account.follow": "پی بگیرید",
+  "account.followers": "پیگیران",
+  "account.follows_you": "پیگیر شماست",
+  "account.follows": "پی می‌گیرد",
+  "account.mention": "نام‌بردن از @{name}",
+  "account.mute": "بی‌صدا کردن @{name}",
+  "account.posts": "نوشته‌ها",
+  "account.report": "گزارش @{name}",
+  "account.requested": "در انتظار پذیرش",
+  "account.unblock": "رفع انسداد @{name}",
+  "account.unfollow": "پایان پیگیری",
+  "account.unmute": "باصدا کردن @{name}",
+  "boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید",
+  "column_back_button.label": "بازگشت",
+  "column.blocks": "کاربران مسدودشده",
+  "column.community": "نوشته‌های محلی",
+  "column.favourites": "پسندیده‌ها",
+  "column.follow_requests": "درخواست‌های پیگیری",
+  "column.home": "خانه",
+  "column.mutes": "کاربران بی‌صداشده",
+  "column.notifications": "اعلان‌ها",
+  "column.public": "نوشته‌های همه‌جا",
+  "compose_form.placeholder": "تازه چه خبر؟",
+  "compose_form.privacy_disclaimer": "نوشتهٔ خصوصی شما به کاربران نام‌برده‌شده در {domains} فرستاده می‌شود. آیا به {domainsCount, plural, one {آن سرور} other {آن سرورها}} اعتماد دارید؟ تنظیمات حریم خصوصی نوشته‌ها تنها در سرورهای ماستدون کار می‌کند. اگر {domains} {domainsCount, plural, one {یک سرور ماستدون نباشد} other {سرورهای ماستدون نباشند}}، اشاره‌ای به خصوصی‌بودن نوشتهٔ شما نخواهد شد و شاید نوشتهٔ شما هم‌رسان شود یا برای کاربرانی که نمی‌خواهید نمایش یابد.",
+  "compose_form.publish": "بوق",
+  "compose_form.sensitive": "تصاویر حساس هستند",
+  "compose_form.spoiler_placeholder": "هشدار محتوا",
+  "compose_form.spoiler": "نوشته را پشت هشدار پنهان کنید",
+  "emoji_button.label": "افزودن شکلک",
+  "emoji_button.search": "جستجو...",
+  "emoji_button.people": "مردم",
+  "emoji_button.nature": "طبیعت",
+  "emoji_button.food": "غذا و نوشیدنی",
+  "emoji_button.activity": "فعالیت",
+  "emoji_button.travel": "سفر و مکان",
+  "emoji_button.objects": "اشیا",
+  "emoji_button.symbols": "نمادها",
+  "emoji_button.flags": "پرچم‌ها",
+  "empty_column.community": "فهرست نوشته‌های محلی خالی است. چیزی بنویسید تا چرخش بچرخد!",
+  "empty_column.hashtag": "هنوز هیچ چیزی با این هشتگ نیست.",
+  "empty_column.home.public_timeline": "فهرست نوشته‌های همه‌جا",
+  "empty_column.home": "شما هنوز پیگیر کسی نیستید. {public} را ببینید یا چیزی را جستجو کنید تا کاربران دیگر را ببینید.",
+  "empty_column.notifications": "هنوز هیچ اعلانی ندارید. به نوشته‌های دیگران واکنش نشان دهید تا گفتگو آغاز شود.",
+  "empty_column.public": "این‌جا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران دیگر را پی بگیرید تا این‌جا پر شود",
+  "follow_request.authorize": "اجازه دهید",
+  "follow_request.reject": "اجازه ندهید",
+  "getting_started.apps": "اپ‌های گوناگونی در دسترس‌اند",
+  "getting_started.heading": "آغاز کنید",
+  "getting_started.open_source_notice": "ماستدون یک نرم‌افزار آزاد است. می‌توانید در ساخت آن مشارکت کنید یا مشکلاتش را در {github} گزارش دهید. {apps}.",
+  "home.column_settings.advanced": "پیشرفته",
+  "home.column_settings.basic": "اصلی",
+  "home.column_settings.filter_regex": "با عبارت‌های باقاعده فیلتر کنید",
+  "home.column_settings.show_reblogs": "نمایش بازبوق‌ها",
+  "home.column_settings.show_replies": "نمایش پاسخ‌ها",
+  "home.settings": "تنظیمات ستون",
+  "lightbox.close": "بستن",
+  "loading_indicator.label": "بارگیری...",
+  "media_gallery.toggle_visible": "تغییر پیدایی",
+  "missing_indicator.label": "پیدا نشد",
+  "navigation_bar.blocks": "کاربران مسدودشده",
+  "navigation_bar.community_timeline": "نوشته‌های محلی",
+  "navigation_bar.edit_profile": "ویرایش نمایه",
+  "navigation_bar.favourites": "پسندیده‌ها",
+  "navigation_bar.follow_requests": "درخواست‌های پیگیری",
+  "navigation_bar.info": "اطلاعات تکمیلی",
+  "navigation_bar.logout": "خروج",
+  "navigation_bar.mutes": "کاربران بی‌صداشده",
+  "navigation_bar.preferences": "ترجیحات",
+  "navigation_bar.public_timeline": "نوشته‌های همه‌جا",
+  "notification.favourite": "{name} نوشتهٔ شما را پسندید",
+  "notification.follow": "{name} پیگیر شما شد",
+  "notification.mention": "{name} از شما نام برد",
+  "notification.reblog": "{name} نوشتهٔ شما را بازبوقید",
+  "notifications.clear_confirmation": "واقعاً می‌خواهید همهٔ اعلان‌هایتان را برای همیشه پاک کنید؟",
+  "notifications.clear": "پاک‌کردن اعلان‌ها",
+  "notifications.column_settings.alert": "اعلان در کامپیوتر",
+  "notifications.column_settings.favourite": "پسندیده‌ها:",
+  "notifications.column_settings.follow": "پیگیران تازه:",
+  "notifications.column_settings.mention": "نام‌بردن‌ها:",
+  "notifications.column_settings.reblog": "بازبوق‌ها:",
+  "notifications.column_settings.show": "در ستون نشان بده",
+  "notifications.column_settings.sound": "صدا را پخش کن",
+  "notifications.settings": "تنظیمات ستون",
+  "privacy.change": "تنظیم حریم خصوصی نوشته‌ها",
+  "privacy.direct.long": "تنها به کاربران نام‌برده‌شده نشان بده",
+  "privacy.direct.short": "مستقیم",
+  "privacy.private.long": "تنها به پیگیران نشان بده",
+  "privacy.private.short": "خصوصی",
+  "privacy.public.long": "در فهرست نوشته‌های عمومی نشان بده",
+  "privacy.public.short": "عمومی",
+  "privacy.unlisted.long": "در فهرست نوشته‌های همه‌جا نشان نده",
+  "privacy.unlisted.short": "فهرست‌نشده",
+  "reply_indicator.cancel": "لغو",
+  "report.heading": "گزارش تازه",
+  "report.placeholder": "توضیح اضافه",
+  "report.submit": "بفرست",
+  "report.target": "گزارش‌دادن",
+  "search_results.total": "{count, number} {count, plural, one {نتیجه} other {نتیجه}}",
+  "search.placeholder": "جستجو",
+  "search.status_by": "نوشتهٔ {name}",
+  "status.delete": "پاک‌کردن",
+  "status.favourite": "پسندیدن",
+  "status.load_more": "بیشتر نشان بده",
+  "status.media_hidden": "تصویر پنهان شده",
+  "status.mention": "از @{name} نام ببرید",
+  "status.open": "این نوشته را باز کن",
+  "status.reblog": "بوق",
+  "status.cannot_reblog": "این نوشته را نمی‌شود بازبوقید",
+  "status.reblogged_by": "{name} بازبوقید",
+  "status.reply": "پاسخ",
+  "status.replyAll": "به نوشته پاسخ دهید",
+  "status.report": "@{name} را گزارش دهید",
+  "status.sensitive_toggle": "برای دیدن کلیک کنید",
+  "status.sensitive_warning": "محتوای حساس",
+  "status.show_less": "نهفتن",
+  "status.show_more": "نمایش",
+  "tabs_bar.compose": "بنویسید",
+  "tabs_bar.federated_timeline": "همگانی",
+  "tabs_bar.home": "خانه",
+  "tabs_bar.local_timeline": "محلی",
+  "tabs_bar.notifications": "اعلان‌ها",
+  "upload_area.title": "برای بارگذاری به این‌جا بکشید",
+  "upload_button.label": "افزودن تصویر",
+  "upload_form.undo": "واگردانی",
+  "upload_progress.label": "بارگذاری...",
+  "video_player.toggle_sound": "تغییر صداداری",
+  "video_player.toggle_visible": "تغییر پیدایی",
+  "video_player.expand": "بازکردن ویدیو",
+  "video_player.video_error": "ویدیو نمی‌تواند پخش شود",
+};
+
+export default fa;
diff --git a/app/assets/javascripts/components/locales/index.jsx b/app/assets/javascripts/components/locales/index.jsx
index 9bda9a83e..9d187774a 100644
--- a/app/assets/javascripts/components/locales/index.jsx
+++ b/app/assets/javascripts/components/locales/index.jsx
@@ -2,6 +2,7 @@ import ar from './ar';
 import en from './en';
 import de from './de';
 import es from './es';
+import fa from './fa';
 import hr from './hr';
 import hu from './hu';
 import io from './io';
@@ -27,6 +28,7 @@ const locales = {
   en,
   de,
   es,
+  fa,
   hr,
   hu,
   io,
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index e2ea94856..ba6803b4b 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -10,7 +10,7 @@ module ApplicationHelper
   end
 
   def add_rtl_body_class(other_classes)
-    other_classes = "#{other_classes} rtl" if [:ar].include?(I18n.locale)
+    other_classes = "#{other_classes} rtl" if [:ar, :fa].include?(I18n.locale)
     other_classes
   end
 end
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
index 128e1e98c..cbc0adbba 100644
--- a/app/helpers/settings_helper.rb
+++ b/app/helpers/settings_helper.rb
@@ -8,6 +8,7 @@ module SettingsHelper
     de: 'Deutsch',
     eo: 'Esperanto',
     es: 'Español',
+    fa: 'فارسی',
     fi: 'Suomi',
     fr: 'Français',
     hr: 'Hrvatski',
diff --git a/config/application.rb b/config/application.rb
index dddc3e4fb..7711b96a0 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -32,6 +32,7 @@ module Mastodon
       :de,
       :eo,
       :es,
+      :fa,
       :fi,
       :fr,
       :hr,
diff --git a/config/locales/devise.fa.yml b/config/locales/devise.fa.yml
new file mode 100644
index 000000000..6fa9b5917
--- /dev/null
+++ b/config/locales/devise.fa.yml
@@ -0,0 +1,61 @@
+---
+fa:
+  devise:
+    confirmations:
+      confirmed: نشانی ایمیل شما با موفقیت تأیید شد.
+      send_instructions: تا دقایقی دیگر ایمیلی خواهید گرفت که به شما می‌گوید چگونه باید نشانی ایمیل خود را تأیید کنید.
+      send_paranoid_instructions: اگر ایمیل شما در پایگاه دادهٔ ما موجود باشد، تا دقایقی دیگر ایمیلی خواهید گرفت که به شما می‌گوید چگونه باید نشانی ایمیل خود را تأیید کنید.
+    failure:
+      already_authenticated: شما الان هم وارد سیستم هستید.
+      inactive: حساب شما هنوز فعال نشده است.
+      invalid: خطای %{authentication_keys} یا رمز نامعتبر.
+      last_attempt: پیش از آن که حساب شما قفل شود، یک فرصت دیگر دارید.
+      locked: حساب شما قفل شده است.
+      not_found_in_database: خطای %{authentication_keys} یا رمز نامعتبر.
+      timeout: مهلت این ورود شما به سر رسید. برای ادامه، دوباره وارد شوید.
+      unauthenticated: برای ادامه باید وارد شوید یا ثبت نام کنید.
+      unconfirmed: برای ادامه باید نشانی ایمیل خود را تأیید کنید.
+    mailer:
+      confirmation_instructions:
+        subject: 'Mastodon: راهنمایی برای تأیید %{instance}'
+      password_change:
+        subject: 'ماستدون: رمزتان عوض شد'
+      reset_password_instructions:
+        subject: 'ماستدون: راهنمایی برای بازنشانی رمز'
+      unlock_instructions:
+        subject: 'ماستدون: راهنمایی برای بازکردن قفل'
+    omniauth_callbacks:
+      failure: تصدیق اعتبار شما از راه %{kind} انجام نشد زیرا "%{reason}".
+      success: تصدیق اعتبار شما از %{kind} با موفقیت انجام شد.
+    passwords:
+      no_token: این صفحه را تنها از راه یک ایمیل بازنشانی رمز می‌شود دید. اگر از چنین ایمیلی می‌آیید، لطفاً مطمئن شوید که نشانی موجود در ایمیل را کامل به کار برده‌اید.
+      send_instructions: اگر ایمیل شما در پایگاه دادهٔ ما موجود باشد، تا دقایقی دیگر یک ایمیل بازیابی رمز دریافت خواهید کرد.
+      send_paranoid_instructions: اگر ایمیل شما در پایگاه دادهٔ ما موجود باشد، تا دقایقی دیگر یک ایمیل بازیابی رمز دریافت خواهید کرد.
+      updated: رمز شما با موفقیت تغییر کرد. شما الان وارد سیستم هستید.
+      updated_not_active: رمز شما با موفقیت تغییر کرد.
+    registrations:
+      destroyed: بدرود! حساب شما با موفقیت لغو شد. امیدواریم دوباره شما را ببینیم.
+      signed_up: خوش آمدید! شما با موفقیت ثبت نام کردید.
+      signed_up_but_inactive: خوش آمدید! شما با موفقیت ثبت نام کردید. ولی هنوز وارد سیستم نیستید زیرا حساب شما هنوز فعال نیست.
+      signed_up_but_locked: خوش آمدید! شما با موفقیت ثبت نام کردید. ولی هنوز وارد سیستم نیستید زیرا حساب شما قفل شده است.
+      signed_up_but_unconfirmed: یک پیغام برای تأیید به نشانی ایمیل شما فرستاده شده. لطفاً پیوند موجود در ایمیل را دنبال کنید تا حسابتان فعال شود.
+      update_needs_confirmation: شما با موفقیت حسابتان را به‌روز کردید، ولی لازم است که ما نشانی ایمیل تازهٔ شما را تأیید کنیم. لطفاً ایمیل خود را ببینید و پیوند موجود در ایمیل را دنبال کنید تا تا نشانی ایمیل تازهٔ شما تأیید شود.
+      updated: حساب شما با موفقبت به‌روز شد.
+    sessions:
+      already_signed_out: با موفقیت خارج شدید.
+      signed_in: با موفقیت وارد شدید.
+      signed_out: با موفقیت خارج شدید.
+    unlocks:
+      send_instructions: تا دقایقی دیگر ایمیلی خواهید گرفت که به شما می‌گوید چگونه باید قفل حساب خود را باز کنید.
+      send_paranoid_instructions: اگر حساب شما موجود باشد، تا دقایقی دیگر ایمیلی خواهید گرفت که به شما می‌گوید چگونه باید قفل آن را باز کنید.
+      unlocked: قفل حساب شما با موفقیت باز شد. لطفاً برای ادامه وارد سیستم شوید.
+  errors:
+    messages:
+      already_confirmed: تأیید شده، لطفاً وارد شوید
+      confirmation_period_expired: باید ظرف %{period} تأیید شود، لطفاً دوباره درخواست دهید
+      expired: مهلتش به سر رسید، لطفاً دوباره درخواست دهید
+      not_found: پیدا نشد
+      not_locked: قفل نبود
+      not_saved:
+        one: 'خطایی نگذاشت که این %{resource} ذخیره شود'
+        other: "به خاطر %{count} خطا، این %{resource} ذخیره نشد"
diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml
new file mode 100644
index 000000000..bab777f58
--- /dev/null
+++ b/config/locales/doorkeeper.fa.yml
@@ -0,0 +1,113 @@
+---
+fa:
+  activerecord:
+    attributes:
+      doorkeeper/application:
+        name: Name
+        redirect_uri: Redirect URI
+    errors:
+      models:
+        doorkeeper/application:
+          attributes:
+            redirect_uri:
+              fragment_present: cannot contain a fragment.
+              invalid_uri: must be a valid URI.
+              relative_uri: must be an absolute URI.
+              secured_uri: must be an HTTPS/SSL URI.
+  doorkeeper:
+    applications:
+      buttons:
+        authorize: Authorize
+        cancel: Cancel
+        destroy: Destroy
+        edit: Edit
+        submit: Submit
+      confirmations:
+        destroy: Are you sure?
+      edit:
+        title: Edit application
+      form:
+        error: Whoops! Check your form for possible errors
+      help:
+        native_redirect_uri: Use %{native_redirect_uri} for local tests
+        redirect_uri: Use one line per URI
+        scopes: Separate scopes with spaces. Leave blank to use the default scopes.
+      index:
+        callback_url: Callback URL
+        name: Name
+        new: New Application
+        title: Your applications
+      new:
+        title: New Application
+      show:
+        actions: Actions
+        application_id: Application Id
+        callback_urls: Callback urls
+        scopes: Scopes
+        secret: Secret
+        title: 'Application: %{name}'
+    authorizations:
+      buttons:
+        authorize: Authorize
+        deny: Deny
+      error:
+        title: An error has occurred
+      new:
+        able_to: It will be able to
+        prompt: Application %{client_name} requests access to your account
+        title: Authorization required
+      show:
+        title: Authorization code
+    authorized_applications:
+      buttons:
+        revoke: Revoke
+      confirmations:
+        revoke: Are you sure?
+      index:
+        application: Application
+        created_at: Authorized
+        date_format: "%Y-%m-%d %H:%M:%S"
+        scopes: Scopes
+        title: Your authorized applications
+    errors:
+      messages:
+        access_denied: The resource owner or authorization server denied the request.
+        credential_flow_not_configured: Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured.
+        invalid_client: Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method.
+        invalid_grant: The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.
+        invalid_redirect_uri: The redirect uri included is not valid.
+        invalid_request: The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.
+        invalid_resource_owner: The provided resource owner credentials are not valid, or resource owner cannot be found
+        invalid_scope: The requested scope is invalid, unknown, or malformed.
+        invalid_token:
+          expired: The access token expired
+          revoked: The access token was revoked
+          unknown: The access token is invalid
+        resource_owner_authenticator_not_configured: Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfiged.
+        server_error: The authorization server encountered an unexpected condition which prevented it from fulfilling the request.
+        temporarily_unavailable: The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server.
+        unauthorized_client: The client is not authorized to perform this request using this method.
+        unsupported_grant_type: The authorization grant type is not supported by the authorization server.
+        unsupported_response_type: The authorization server does not support this response type.
+    flash:
+      applications:
+        create:
+          notice: Application created.
+        destroy:
+          notice: Application deleted.
+        update:
+          notice: Application updated.
+      authorized_applications:
+        destroy:
+          notice: Application revoked.
+    layouts:
+      admin:
+        nav:
+          applications: Applications
+          oauth2_provider: OAuth2 Provider
+      application:
+        title: OAuth authorization required
+    scopes:
+      follow: follow, block, unblock and unfollow accounts
+      read: read your account's data
+      write: post on your behalf
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
new file mode 100644
index 000000000..d118582a0
--- /dev/null
+++ b/config/locales/fa.yml
@@ -0,0 +1,324 @@
+---
+fa:
+  about:
+    about_mastodon: ماستدون (Mastodon) یک شبکهٔ اجتماعی <em>آزاد و کدباز</em> است. یک جایگزین <em>غیرمتمرکز</em> برای شبکه‌های تجاری، که نمی‌گذارد ارتباط‌های شما را یک شرکت در انحصار خود بگیرد. یک سرور مورد اعتماد را انتخاب کنید&mdash;هر سروری که باشد، همچنان می‌توانید با سرورهای دیگر ارتباط داشته باشید. هر کسی می‌تواند سرور ماستدون خود را راه بیندازد و در <em>شبکهٔ اجتماعی</em> سهیم شود.
+    about_this: دربارهٔ این سرور
+    apps: برنامه‌ها
+    business_email: 'ایمیل کاری:'
+    closed_registrations: "امکان ثبت نام روی این سرور هم‌اینک فعال نیست."
+    contact: تماس
+    description_headline: "%{domain} چیست؟"
+    domain_count_after: سرورهای دیگر
+    domain_count_before: متصل به
+    features:
+      api: رابط برنامه‌نویسی برای برنامه‌ها و سرویس‌های دیگر
+      blocks: ابزارهای قدرتمند برای مسدود یا بی‌صدا کردن دیگران
+      characters: ۵۰۰ حرف برای هر نوشته
+      chronology: نمایش نوشته‌های دیگران به ترتیب زمانی
+      ethics: 'اخلاق‌مدار: بدون تبلیغات، بدون ردگیری'
+      gifv: تصاویر متحرک و ویدیوهای کوتاه
+      privacy: تنظیمات حریم خصوصی جداگانه برای هر نوشته
+      public: نمایش نوشته‌های عمومی دیگران از همه‌جا
+    features_headline: برگ‌های برندهٔ ماستدون
+    get_started: آغاز کنید
+    links: پیوندها
+    other_instances: سرورهای دیگر
+    source_code: کدهای منبع
+    status_count_after: چیز نوشته‌اند
+    status_count_before: که جمعاً
+    terms: شرایط استفاده
+    user_count_after: کاربر
+    user_count_before: دارای
+    version: نسخه
+  accounts:
+    follow: پی بگیرید
+    followers: پیگیران
+    following: پی می‌گیرد
+    nothing_here: این‌جا چیزی نیست!
+    people_followed_by: کسانی که %{name} پی می‌گیرد
+    people_who_follow: کسانی که %{name} را پی می‌گیرند
+    posts: نوشته
+    remote_follow: پیگیری غیرمستقیم
+    unfollow: پایان پیگیری
+  activitypub:
+    outbox:
+      name: "صندوق خروجی %{account_name}"
+      summary: "مجموعه‌ای از فعالیت‌های کاربر %{account_name}."
+    activity:
+      create:
+        name: "%{account_name} یادداشتی نوشت."
+      announce:
+        name: "%{account_name} فعالیتی آغاز کرد."
+  admin:
+    accounts:
+      are_you_sure: آیا مطمئن هستید؟
+      confirm: تأیید
+      confirmed: تأیید شد
+      display_name: نمایش به نام
+      domain: دامین
+      edit: ویرایش
+      email: ایمیل
+      feed_url: نشانی فید
+      followers: پیگیران
+      follows: پی می‌گیرد
+      location:
+        all: همه
+        local: محلی
+        remote: غیرمستقیم
+        title: مکان
+      media_attachments: ضمیمه‌های تصویری
+      moderation:
+        all: همه
+        silenced: بی‌صدا شده
+        suspended: معلق شده
+        title: مدیریت
+      most_recent_activity: آخرین فعالیت‌ها
+      most_recent_ip: آخرین IP ها
+      not_subscribed: عضو نیست
+      order:
+        alphabetic: الفبایی
+        most_recent: تازه‌ترین‌ها
+        title: ترتیب
+      perform_full_suspension: Perform full suspension
+      profile_url: نشانی نمایه
+      public: عمومی
+      push_subscription_expires: عضویت از راه PuSH منقضی شد
+      reset_password: بازنشانی رمز
+      salmon_url: نشانی Salmon
+      show:
+        created_reports: گزارش‌ها از طرف این حساب
+        report: گزارش
+        targeted_reports: گزارش‌ها دربارهٔ این حساب
+      silence: بی‌صدا
+      statuses: نوشته‌ها
+      title: حساب‌ها
+      undo_silenced: واگردانی بی‌صداکردن
+      undo_suspension: واگردانی تعلیق
+      username: نام کاربری
+      web: وب
+    domain_blocks:
+      add_new: افزودن تازه
+      created_msg: مسدودکردن دامین در حال انجام است
+      destroyed_msg: مسدودکردن دامین واگردانده شد
+      domain: دامین
+      new:
+        create: مسدودسازی
+        hint: مسدودسازی دامین جلوی فهرست‌شدن حساب‌ها در پایگاه داده را نمی‌گیرد، بلکه به طور خودکار روش‌های مدیریتی را روی فعالیت‌های فعلی و گذشتهٔ آن حساب‌ها اعمال می‌کند.
+        severity:
+          desc_html: "<strong>بی‌صداکردن</strong> یک حساب نوشته‌های آن را برای همه (به جز پیگیرانش) ناپدید می‌کند. <strong>معلق‌کردن</strong> حساب همهٔ نوشته‌ها، تصویرها، و اطلاعات حساب را پاک می‌کند."
+          silence: بی‌صداکردن
+          suspend: معلق‌کردن
+        title: مسدودسازی دامین دیگر
+      reject_media: نپذیرفتن پرونده‌های تصویری
+      reject_media_hint: تصویرهای ذخیره‌شده در این‌جا را پاک می‌کند و جلوی دریافت تصویرها را در آینده می‌گیرد. بی‌تأثیر برای معلق‌شده‌ها
+      severities:
+        silence: بی‌صداکردن
+        suspend: معلق‌کردن
+      severity: شدت
+      show:
+        affected_accounts:
+          one: روی یک حساب در پایگاه داده تأثیر گذاشت
+          other: "روی %{count} حساب در پایگاه داده تأثیر گذاشت"
+        retroactive:
+          silence: بی‌صداشدن همهٔ حساب‌های این دامین را لغو کن
+          suspend: معلق‌شدن همهٔ حساب‌های این دامین را لغو کن
+        title: واگردانی مسدودسازی دامنه برای %{domain}
+        undo: واگردانی
+      title: دامین‌های مسدودشده
+      undo: واگردانی
+    instances:
+      account_count: حساب‌های شناخته‌شده
+      domain_name: دامین
+      title: سرورهای شناخته‌شده
+    pubsubhubbub:
+      callback_url: نشانی Callback
+      confirmed: تأییدشده
+      expires_in: مهلت منقضی‌شدن
+      last_delivery: آخرین ارسال
+      title: PubSubHubbub
+      topic: موضوع
+    reports:
+      comment:
+        label: توضیح
+        none: خالی
+      delete: پاک‌کردن
+      id: شناسه
+      mark_as_resolved: علامت‌گذاری به عنوان حل‌شده
+      report: 'گزارش #%{id}'
+      reported_account: حساب گزارش‌شده
+      reported_by: گزارش از طرف
+      resolved: حل‌شده
+      silence_account: بی‌صدا کردن حساب
+      status: نوشته
+      suspend_account: معلق‌کردن حساب
+      target: هدف
+      title: گزارش‌ها
+      unresolved: حل‌نشده
+      view: نمایش
+    settings:
+      click_to_edit: برای ویرایش کلیک کنید
+      contact_information:
+        email: یک نشانی ایمیل عمومی وارد کنید
+        label: اطلاعات تماس
+        username: یک نام کاربری وارد کنید
+      registrations:
+        closed_message:
+          desc_html: وقتی امکان ثبت نام روی سرور فعال نباشد در صفحهٔ اصلی نمایش می‌یابد<br>می‌توانید HTML بنویسید
+          title: پیغام برای فعال‌نبودن ثبت نام
+        open:
+          disabled: غیرفعال
+          enabled: فعال
+          title: امکان ثبت نام
+      setting: تنظیمات
+      site_description:
+        desc_html: روی صفحهٔ اصلی نمایش می‌یابد و همچنین به عنوان تگ‌های HTML.<br>می‌توانید HTML بنویسید, به‌ویژه <code>&lt;a&gt;</code> و <code>&lt;em&gt;</code>.
+        title: دربارهٔ سایت
+      site_description_extended:
+        desc_html: در صفحهٔ اطلاعات تکمیلی نشان داده می‌شود<br>می‌توانید HTML بنویسید
+        title: اطلاعات بیشتر دربارهٔ سایت
+      site_title: نام سایت
+      title: تنظیمات سایت
+    title: مدیریت
+  application_mailer:
+    settings: 'تغییر تنظیمات ایمیل: %{link}'
+    signature: اعلان‌های ماستدون از %{instance}
+    view: 'نمایش:'
+  applications:
+    invalid_url: نشانی واردشده معتبر نیست
+  auth:
+    change_password: اطلاعات حساب
+    didnt_get_confirmation: راهنمایی برای تأیید را دریافت نکردید؟
+    forgot_password: رمزتان را گم کرده‌اید؟
+    login: ورود
+    logout: خروج
+    register: عضو شوید
+    resend_confirmation: راهنمایی برای تأیید را دوباره بفرست
+    reset_password: بازنشانی رمز
+    set_new_password: تعیین رمز تازه
+  authorize_follow:
+    error: متأسفانه حین یافتن آن حساب خطایی رخ داد
+    follow: پی بگیرید
+    prompt_html: 'شما (<strong>%{self}</strong>) می‌خواهید این حساب را پی بگیرید:'
+    title: پیگیری %{acct}
+  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_seconds: همین الان
+      over_x_years: "%{count} سال"
+      x_days: "%{count} روز"
+      x_minutes: "%{count} دقیقه"
+      x_months: "%{count} ماه"
+      x_seconds: "%{count} ثانیه"
+  errors:
+    '403': شما اجازهٔ دیدن این صفحه را ندارید.
+    '404': صفحه‌ای که می‌خواستید ببینید وجود ندارد.
+    '410': صفحه‌ای که می‌خواستید ببینید دیگر وجود ندارد.
+    '422':
+      content: تأیید امنیتی انجام نشد. آیا مرورگر شما کوکی‌ها را مسدود می‌کند؟
+      title: تأیید امنیتی شکست خورد
+  exports:
+    blocks: حساب‌های مسدودشده
+    csv: CSV
+    follows: حساب‌های پی‌گرفته
+    mutes: حساب‌های بی‌صداشده
+    storage: تصویرهای ذخیره‌شده
+  generic:
+    changes_saved_msg: تغییرات با موفقیت ذخیره شدند!
+    powered_by: نیرو گرفته از %{link}
+    save_changes: ذخیرهٔ تغییرات
+    validation_errors:
+      one: یک چیزی هنوز درست نیست! لطفاً خطاهای زیر را ببینید
+      other: یک چیزی هنوز درست نیست! لطفاً %{count} خطای زیر را ببینید
+  imports:
+    preface: شما می‌توانید داده‌هایی از قبیل کاربرانی که پی می‌گرفتید یا مسدود می‌کردید را در حساب خود روی این سرور درون‌ریزی کنید. برای این کار پرونده‌هایی که از سرور دیگر برون‌سپاری کرده‌اید را به‌کار ببرید.
+    success: داده‌های شما با موفقیت بارگذاری شد و به زودی پردازش می‌شود
+    types:
+      blocking: فهرست مسدودشده‌ها
+      following: فهرست پی‌گیری‌ها
+      muting: فهرست بی‌صداشده‌ها
+    upload: بارگذاری
+  landing_strip_html: <strong>%{name}</strong> کاربری روی <strong>%{domain}</strong> است. شما با داشتن حساب روی هر سروری می‌توانید نوشته‌های او را پیگیری کرده یا با او ارتباط داشته باشید. اگر هنوز حسابی ندارید <a href="%{sign_up_path}">این‌جا حساب باز کنید</a>.
+  media_attachments:
+    validations:
+      images_and_video: نمی‌توان برای نوشته‌ای که تصویر دارد ویدیو بارگذاری کرد
+      too_many: نمی‌توان بیشتر از ۴ تصویر بارگذاری کرد
+  notification_mailer:
+    digest:
+      body: 'خلاصه‌ای از آن‌چه از زمان آخرین بازدید شما در %{since} روی %{instance} رخ داد :'
+      mention: "%{name} این‌جا از شما نام برد:"
+      new_followers_summary:
+        one: شما یک پیگیر تازه دارید! ای ول!
+        other: شما %{count} پیگیر تازه دارید! چه عالی!
+      subject:
+        one: "یک اعلان تازه از زمان آخرین بازدید شما \U0001F418"
+        other: "%{count} اعلان تازه از زمان آخرین بازدید شما \U0001F418"
+    favourite:
+      body: '%{name} این نوشتهٔ شما را پسندید:'
+      subject: "%{name} نوشتهٔ شما را پسندید"
+    follow:
+      body: "%{name} هم‌اینک پیگیر شماست!"
+      subject: "%{name} هم‌اینک پیگیر شماست"
+    follow_request:
+      body: "%{name} می‌خواهد پیگیر نوشته‌های شما باشد"
+      subject: 'منتظر پیگیری: %{name}'
+    mention:
+      body: '%{name} در این‌جا از شما نام برد:'
+      subject: '%{name} از شما نام برد'
+    reblog:
+      body: '%{name} نوشتهٔ شما را بازبوقید:'
+      subject: "%{name} نوشتهٔ شما را بازبوقید"
+  pagination:
+    next: بعدی
+    prev: قبلی
+    truncate: "&hellip;"
+  remote_follow:
+    acct: نشانی حساب username@domain خود را این‌جا بنویسید
+    missing_resource: نشانی اینترنتی برای رسیدن به حساب شما پیدا نشد
+    proceed: درخواست پیگیری
+    prompt: 'شما قرار است این حساب را پیگیری کنید:'
+  settings:
+    authorized_apps: برنامه‌های مجاز
+    back: بازگشت به ماستدون
+    edit_profile: ویرایش نمایه
+    export: برون‌سپاری داده‌ها
+    import: درون‌ریزی
+    preferences: ترجیحات
+    settings: تنظیمات
+    two_factor_authentication: ورود دومرحله‌ای
+  statuses:
+    open_in_web: بازکردن در وب
+    over_character_limit: از حد مجاز %{max} حرف فراتر رفتید
+    show_more: نمایش
+    visibilities:
+      private: نمایش تنها به پیگیران
+      public: عمومی
+      unlisted: عمومی، ولی در فهرست نوشته‌ها نمایش نده 
+  stream_entries:
+    click_to_show: برای نمایش کلیک کنید
+    reblogged: بازبوقیده
+    sensitive_content: محتوای حساس
+  time:
+    formats:
+      default: "%b %d, %Y, %H:%M"
+  two_factor_authentication:
+    code_hint: برای تأیید، کدی را که برنامهٔ تأییدکننده ساخته است وارد کنید
+    description_html: اگر <strong>ورود دومرحله‌ای</strong> را فعال کنید، برای ورود به سیستم به تلفن خود نیاز خواهید داشت تا برایتان یک کد موقتی بسازد
+    disable: غیرفعال‌کردن
+    enable: فعال‌کردن
+    enabled_success: ورود دومرحله‌ای با موفقیت فعال شد
+    generate_recovery_codes: ساخت کدهای بازیابی
+    instructions_html: "<strong>این کد QR را با برنامهٔ Google Authenticator یا برنامه‌های TOTP مشابه اسکن کنید</strong>. از این به بعد، آن برنامه کدهایی موقتی خواهد ساخت که برای ورود باید آن‌ها را وارد کنید."
+    lost_recovery_codes: با کدهای بازیابی می‌توانید اگر تلفن خود را گم کردید به حساب خود دسترسی داشته باشید. اگر کدهای بازیابی خود را گم کردید، آن‌ها را این‌جا دوباره بسازید. کدهای بازیابی قبلی شما نامعتبر خواهند شد.
+    manual_instructions: 'اگر نمی‌توانید کدها را اسکن کنید و باید آن‌ها را دستی وارد کنید، متن کد امنیتی این‌جاست:'
+    recovery_codes_regenerated: کدهای بازیابی با موفقیت ساخته شدند
+    recovery_instructions: اگر تلفن خود را گم کردید، می‌توانید با یکی از کدهای بازیابی زیر کنترل حساب خود را به دست بگیرید. این کدها را در جای امنی نگه دارید، مثلاً آن‌ها را چاپ کنید و کنار سایر مدارک مهم خود قرار دهید
+    setup: راه اندازی
+    wrong_code: کدی که وارد کردید نامعتبر بود! آیا ساعت سرور و ساعت دستگاه شما درست تنظیم شده‌اند؟
+  users:
+    invalid_email: نشانی ایمیل نامعتبر است
+    invalid_otp_token: کد ورود دومرحله‌ای نامعتبر است
diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml
new file mode 100644
index 000000000..b0af0575a
--- /dev/null
+++ b/config/locales/simple_form.fa.yml
@@ -0,0 +1,51 @@
+---
+en:
+  simple_form:
+    hints:
+      defaults:
+        avatar: یکی از قالب‌های PNG یا  GIF یا JPG. بیشترین اندازه ۲ مگابایت. تصویر به اندازهٔ ۱۲۰×۱۲۰ پیکسل تبدیل خواهد شد.
+        display_name: '%{counter} حرف باقی مانده'
+        header: یکی از قالب‌های PNG یا  GIF یا JPG. بیشترین اندازه ۲ مگابایت. تصویر به اندازهٔ ۳۳۵×۷۰۰ پیکسل تبدیل خواهد شد
+        locked: باید پیگیران تازه را خودتان تأیید کنید. حریم خصوصی پیش‌فرض نوشته‌ها را روی پیگیران تنظیم می‌کند
+        note: '%{counter} حرف باقی مانده'
+      imports:
+        data: پروندهٔ CSV که از سرور ماستدون دیگری برون‌سپاری شده
+      sessions:
+        otp: کد تأیید دومرحله‌ای را از تلفن خود وارد کنید یا یکی از کدهای بازیابی را به کار ببرید.
+    labels:
+      defaults:
+        avatar: تصویر نمایه
+        confirm_new_password: تأیید رمز تازه
+        confirm_password: تأیید رمز
+        current_password: رمز فعلی
+        data: داده‌ها
+        display_name: نمایش به نام
+        email: نشانی ایمیل
+        header: موضوع
+        locale: تصویر زمینه
+        locked: خصوصی‌کردن حساب
+        new_password: رمز تازه
+        note: دربارهٔ شما
+        otp_attempt: کد ورود دومرحله‌ای
+        password: رمز
+        setting_auto_play_gif: پخش خودکار تصویرهای متحرک
+        setting_boost_modal: نمایش پیغام تأیید پیش از بازبوقیدن
+        setting_default_privacy: حریم خصوصی نوشته‌ها
+        severity: شدت
+        type: نوع درون‌ریزی
+        username: نام کاربری
+      interactions:
+        must_be_follower: مسدودکردن اعلان‌های همه به جز پیگیران 
+        must_be_following: مسدودکردن اعلان‌های کسانی که شما پی نمی‌گیرید
+      notification_emails:
+        digest: خلاصه‌کردن چند اعلان در یک ایمیل
+        favourite: وقتی کسی نوشتهٔ شما پسندید ایمیل بفرست
+        follow: وقتی کسی پیگیر شما شد ایمیل بفرست
+        follow_request: وقتی کسی درخواست پیگیری کرد ایمیل بفرست
+        mention: وقتی کسی از شما نام برد ایمیل بفرست
+        reblog: وقتی کسی نوشتهٔ شما را بازبوقید ایمیل بفرست
+    'no': 'خیر'
+    required:
+      mark: "*"
+      text: ضروری
+    'yes': 'بله'