aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar AmirHossein <marjani.amir@gmail.com> 2023-08-07 11:39:31 +0330
committerGravatar GitHub <noreply@github.com> 2023-08-07 10:09:31 +0200
commit6d8a5429cbcd8ba1142bf365785cd351f762f81a (patch)
tree2ebe31047a239a8597970980942087895a4d4b11
parent8f188b57ee20f188a9f882fdf6e5cbf5efa0028d (diff)
Add Persian/فارسی Language (#5571)
* Add Persian/فارسی Language * Fix i18n * make fix-all And several manual fixes * Exclude Persian from English typo check * Update CREDITS.md I added myself to the list * Credits alphabetic order --------- Co-authored-by: AmirHossein <marjani@outlook.com> Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
-rw-r--r--.typos.toml2
-rw-r--r--CREDITS.md1
-rw-r--r--app/i18n/cz/gen.php1
-rw-r--r--app/i18n/de/gen.php1
-rw-r--r--app/i18n/el/gen.php1
-rw-r--r--app/i18n/en-us/gen.php1
-rw-r--r--app/i18n/en/gen.php1
-rw-r--r--app/i18n/es/gen.php1
-rw-r--r--app/i18n/fa/admin.php230
-rw-r--r--app/i18n/fa/conf.php302
-rw-r--r--app/i18n/fa/feedback.php144
-rw-r--r--app/i18n/fa/gen.php246
-rw-r--r--app/i18n/fa/index.php76
-rw-r--r--app/i18n/fa/install.php136
-rw-r--r--app/i18n/fa/sub.php214
-rw-r--r--app/i18n/fa/user.php54
-rw-r--r--app/i18n/fr/gen.php1
-rw-r--r--app/i18n/he/gen.php1
-rw-r--r--app/i18n/id/gen.php1
-rw-r--r--app/i18n/it/gen.php1
-rw-r--r--app/i18n/ja/gen.php1
-rw-r--r--app/i18n/ko/gen.php1
-rw-r--r--app/i18n/lv/gen.php1
-rw-r--r--app/i18n/nl/gen.php1
-rw-r--r--app/i18n/oc/gen.php1
-rw-r--r--app/i18n/pl/gen.php1
-rw-r--r--app/i18n/pt-br/gen.php1
-rw-r--r--app/i18n/ru/gen.php1
-rw-r--r--app/i18n/sk/gen.php1
-rw-r--r--app/i18n/tr/gen.php1
-rw-r--r--app/i18n/zh-cn/gen.php1
-rw-r--r--app/i18n/zh-tw/gen.php1
32 files changed, 1427 insertions, 0 deletions
diff --git a/.typos.toml b/.typos.toml
index aef37ca17..32c8afe53 100644
--- a/.typos.toml
+++ b/.typos.toml
@@ -17,6 +17,7 @@ extend-exclude = [
"app/i18n/cz/",
"app/i18n/de/",
"app/i18n/es/",
+ "app/i18n/fa/",
"app/i18n/fr/",
"app/i18n/he/",
"app/i18n/id/",
@@ -32,6 +33,7 @@ extend-exclude = [
"app/i18n/sk/",
"app/i18n/tr/",
"app/i18n/zh-cn/",
+ "app/i18n/zh-tw/",
"bin/",
"CHANGELOG-old.md",
"composer.lock",
diff --git a/CREDITS.md b/CREDITS.md
index 21dc96728..70da1885f 100644
--- a/CREDITS.md
+++ b/CREDITS.md
@@ -18,6 +18,7 @@ People are sorted by name so please keep this order.
* [Alexis Degrugillier](https://github.com/aledeg): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:aledeg)
* [Alwaysin](https://github.com/Alwaysin): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Alwaysin)
* [Amaury Carrade](https://github.com/AmauryCarrade): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:AmauryCarrade), [Web](https://amaury.carrade.eu/)
+* [AmirHossein Marjani](https://github.com/Marjani): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Marjani)
* [Amrul Izwan](https://github.com/amrulizwan): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:amrulizwan)
* [Andrew Barrow](https://github.com/acbgbca): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:acbgbca)
* [Andrew Hunter](https://github.com/rexbron): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:rexbron)
diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php
index a3dedc176..069035ccd 100644
--- a/app/i18n/cz/gen.php
+++ b/app/i18n/cz/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php
index 426bf4032..3e7faeee9 100644
--- a/app/i18n/de/gen.php
+++ b/app/i18n/de/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/el/gen.php b/app/i18n/el/gen.php
index 47a89e38f..16dd83c9c 100644
--- a/app/i18n/el/gen.php
+++ b/app/i18n/el/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php
index d6cd70b6b..2a58885d4 100644
--- a/app/i18n/en-us/gen.php
+++ b/app/i18n/en-us/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php
index 37d78dc59..1bd8095e3 100644
--- a/app/i18n/en/gen.php
+++ b/app/i18n/en/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English',
'en-us' => 'English (United States)',
'es' => 'Español',
+ 'fa' => 'فارسی',
'fr' => 'Français',
'he' => 'עברית',
'id' => 'Bahasa Indonesia',
diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php
index 2498aa9c0..aeb4d3a7e 100644
--- a/app/i18n/es/gen.php
+++ b/app/i18n/es/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/fa/admin.php b/app/i18n/fa/admin.php
new file mode 100644
index 000000000..e93b76988
--- /dev/null
+++ b/app/i18n/fa/admin.php
@@ -0,0 +1,230 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its */
+/* state. When there is no comment, it means the entry is fully translated. */
+/* The recognized comments are (comment matching is case-insensitive): */
+/* + TODO: the entry has never been translated. */
+/* + DIRTY: the entry has been translated but needs to be updated. */
+/* + IGNORE: the entry does not need to be translated. */
+/* When a comment is not recognized, it is discarded. */
+/******************************************************************************/
+
+return array(
+ 'auth' => array(
+ 'allow_anonymous' => ' اجازه خواندن ناشناس مقالات کاربر پیش‌فرض (%s)',
+ 'allow_anonymous_refresh' => ' اجازه بازخوانی ناشناس مقالات را بدهید',
+ 'api_enabled' => ' اجازه دسترسی به <abbr>API</abbr> <small>(الزامی برای برنامه های تلفن همراه)</small>',
+ 'form' => ' فرم وب (سنتی',
+ 'http' => ' HTTP (برای کاربران پیشرفته با HTTPS)',
+ 'none' => ' هیچ (خطرناک)',
+ 'title' => ' احراز هویت',
+ 'token' => ' نشانه احراز هویت',
+ 'token_help' => ' امکان دسترسی به خروجی RSS کاربر پیش فرض بدون احراز هویت را می دهد:',
+ 'type' => ' روش احراز هویت',
+ 'unsafe_autologin' => ' اجازه ورود خودکار ناامن را با استفاده از قالب:',
+ ),
+ 'check_install' => array(
+ 'cache' => array(
+ 'nok' => ' مجوزهای دایرکتوری <em>./data/cache</em> را بررسی کنید. سرور HTTP باید مجوز نوشتن داشته باشد.',
+ 'ok' => ' مجوزهای دایرکتوری کش خوب است.',
+ ),
+ 'categories' => array(
+ 'nok' => ' جدول دسته بندی به درستی پیکربندی نشده است.',
+ 'ok' => ' جدول رده درست است.',
+ ),
+ 'connection' => array(
+ 'nok' => ' اتصال به پایگاه داده نمی تواند برقرار شود.',
+ 'ok' => ' اتصال به پایگاه داده مشکلی ندارد.',
+ ),
+ 'ctype' => array(
+ 'nok' => ' نمی توان یک کتابخانه مورد نیاز برای بررسی نوع کاراکتر (php-ctype) پیدا کرد.',
+ 'ok' => ' شما کتابخانه مورد نیاز برای بررسی نوع کاراکتر (ctype) دارید.',
+ ),
+ 'curl' => array(
+ 'nok' => ' نمی توان کتابخانه cURL (بسته php-curl) را پیدا کرد.',
+ 'ok' => ' شما کتابخانه cURL را دارید.',
+ ),
+ 'data' => array(
+ 'nok' => ' مجوزهای دایرکتوری <em>./data</em> را بررسی کنید. سرور HTTP باید مجوز نوشتن داشته باشد.',
+ 'ok' => ' مجوزهای دایرکتوری داده ها خوب است.',
+ ),
+ 'database' => ' نصب پایگاه داده',
+ 'dom' => array(
+ 'nok' => ' نمی توان یک کتابخانه مورد نیاز برای مرور DOM (بسته php-xml) پیدا کرد.',
+ 'ok' => ' شما کتابخانه مورد نیاز برای مرور DOM را دارید.',
+ ),
+ 'entries' => array(
+ 'nok' => ' جدول ورودی به درستی پیکربندی نشده است.',
+ 'ok' => ' جدول ورودی اشکالی ندارد.',
+ ),
+ 'favicons' => array(
+ 'nok' => ' مجوزهای دایرکتوری <em>./data/favicons</em> را بررسی کنید. سرور HTTP باید مجوز نوشتن داشته باشد.',
+ 'ok' => ' مجوزهای موجود در فهرست فاویکون ها خوب است.',
+ ),
+ 'feeds' => array(
+ 'nok' => ' جدول خوراک به درستی پیکربندی نشده است.',
+ 'ok' => ' جدول خوراک درست است.',
+ ),
+ 'fileinfo' => array(
+ 'nok' => ' نمی توان کتابخانه اطلاعات فایل PHP (بسته اطلاعات فایل) را پیدا کرد.',
+ 'ok' => ' شما کتابخانه fileinfo را دارید.',
+ ),
+ 'files' => ' نصب فایل',
+ 'json' => array(
+ 'nok' => ' JSON (بسته php-json) را نمی توان پیدا کرد.',
+ 'ok' => ' شما پسوند JSON دارید.',
+ ),
+ 'mbstring' => array(
+ 'nok' => ' نمی توان کتابخانه mbstring توصیه شده برای یونیکد را پیدا کرد.',
+ 'ok' => ' شما کتابخانه mbstring توصیه شده برای یونیکد را دارید.',
+ ),
+ 'pcre' => array(
+ 'nok' => ' نمی توان یک کتابخانه مورد نیاز برای عبارات منظم (php-pcre) پیدا کرد.',
+ 'ok' => ' شما کتابخانه مورد نیاز برای عبارات منظم (PCRE) را دارید.',
+ ),
+ 'pdo' => array(
+ 'nok' => ' PDO یا یکی از درایورهای پشتیبانی شده (pdo_mysql',
+ 'ok' => ' شما دارای PDO و حداقل یکی از درایورهای پشتیبانی شده (pdo_mysql',
+ ),
+ 'php' => array(
+ '_' => ' نصب پی اچ پی',
+ 'nok' => ' نسخه PHP شما %s است اما FreshRSS حداقل به نسخه %s نیاز دارد.',
+ 'ok' => ' نسخه PHP شما (%s) با FreshRSS سازگار است.',
+ ),
+ 'tables' => array(
+ 'nok' => ' یک یا چند جدول مفقود در پایگاه داده وجود دارد.',
+ 'ok' => ' جداول مناسب در پایگاه داده وجود دارد.',
+ ),
+ 'title' => ' بررسی نصب',
+ 'tokens' => array(
+ 'nok' => ' مجوزهای دایرکتوری <em>./data/tokens</em> را بررسی کنید. سرور HTTP باید مجوز نوشتن داشته باشد',
+ 'ok' => ' مجوزهای دایرکتوری توکن ها خوب است.',
+ ),
+ 'users' => array(
+ 'nok' => ' مجوزهای فهرست <em>./data/users</em> را بررسی کنید. سرور HTTP باید مجوز نوشتن داشته باشد',
+ 'ok' => ' مجوزهای دایرکتوری کاربران خوب است.',
+ ),
+ 'zip' => array(
+ 'nok' => ' نمی توان پسوند ZIP (بسته php-zip) را پیدا کرد.',
+ 'ok' => ' شما پسوند ZIP را دارید.',
+ ),
+ ),
+ 'extensions' => array(
+ 'author' => ' نویسنده',
+ 'community' => ' پسوندهای جامعه موجود',
+ 'description' => ' توضیحات',
+ 'disabled' => ' معلول',
+ 'empty_list' => ' هیچ برنامه افزودنی نصب شده ای وجود ندارد',
+ 'enabled' => ' فعال است',
+ 'latest' => ' نصب شده است',
+ 'name' => ' نام',
+ 'no_configure_view' => ' این برنامه افزودنی قابل پیکربندی نیست.',
+ 'system' => array(
+ '_' => ' پسوندهای سیستم',
+ 'no_rights' => ' پسوند سیستم (شما مجوزهای لازم را ندارید)',
+ ),
+ 'title' => ' برنامه های افزودنی',
+ 'update' => ' به روز رسانی موجود است',
+ 'user' => ' پسوندهای کاربر',
+ 'version' => ' نسخه',
+ ),
+ 'stats' => array(
+ '_' => 'آمار',
+ 'all_feeds' => ' همه فیدها',
+ 'category' => ' دسته',
+ 'entry_count' => ' تعداد ورودی',
+ 'entry_per_category' => ' ورودی در هر دسته',
+ 'entry_per_day' => ' ورودی در روز (30 روز گذشته)',
+ 'entry_per_day_of_week' => ' در هر روز هفته (میانگین: %2f پیام)',
+ 'entry_per_hour' => ' در ساعت (میانگین: %2f پیام)',
+ 'entry_per_month' => ' در هر ماه (میانگین: %2f پیام)',
+ 'entry_repartition' => ' پارتیشن مجدد ورودی ها',
+ 'feed' => ' خوراک',
+ 'feed_per_category' => ' فید در هر دسته',
+ 'idle' => ' تغذیه بیکار',
+ 'main' => ' آمار اصلی',
+ 'main_stream' => ' جریان اصلی',
+ 'no_idle' => ' هیچ فید بیکار وجود ندارد!',
+ 'number_entries' => ' %d مقاله',
+ 'percent_of_total' => ' درصد از کل',
+ 'repartition' => ' تقسیم مجدد مقالات',
+ 'status_favorites' => ' موارد دلخواه',
+ 'status_read' => ' بخوانید',
+ 'status_total' => ' مجموع',
+ 'status_unread' => ' خوانده نشده',
+ 'title' => 'آمار',
+ 'top_feed' => ' ده فید برتر',
+ ),
+ 'system' => array(
+ '_' => ' پیکربندی سیستم',
+ 'auto-update-url' => ' به روز رسانی خودکار URL سرور',
+ 'cookie-duration' => array(
+ 'help' => ' در ثانیه',
+ 'number' => ' مدت زمان ورود به سیستم',
+ ),
+ 'force_email_validation' => ' اعتبارسنجی آدرس ایمیل اجباری',
+ 'instance-name' => ' نام نمونه',
+ 'max-categories' => ' حداکثر تعداد دسته ها برای هر کاربر',
+ 'max-feeds' => ' حداکثر تعداد فید برای هر کاربر',
+ 'registration' => array(
+ 'number' => ' حداکثر تعداد حساب ها',
+ 'select' => array(
+ 'label' => ' فرم ثبت نام',
+ 'option' => array(
+ 'noform' => ' معلولین: بدون فرم ثبت نام',
+ 'nolimit' => ' فعال: بدون محدودیت حساب',
+ 'setaccountsnumber' => ' حداکثر تنظیم کنید. تعداد حساب ها',
+ ),
+ ),
+ 'status' => array(
+ 'disabled' => ' فرم غیرفعال است',
+ 'enabled' => ' فرم فعال است',
+ ),
+ 'title' => 'فرم ثبت نام کاربر',
+ ),
+ 'tos' => array(
+ 'disabled' => ' داده نشده است',
+ 'enabled' => ' <a href="./?a=tos">فعال است</a>',
+ 'help' => ' نحوه <a href="https://freshrss.github.io/FreshRSS/en/admins/12_User_management.html#enable-terms-of-service-tos" target="_blank">فعال کردن شرایط خدمات </a>',
+ ),
+ ),
+ 'update' => array(
+ '_' => ' FreshRSS را به روز کنید',
+ 'apply' => ' شروع به روز رسانی',
+ 'changelog' => ' تغییرات',
+ 'check' => ' به روز رسانی های جدید را بررسی کنید',
+ 'copiedFromURL' => 'update.php از %s به ./data کپی شد',
+ 'current_version' => ' نسخه نصب شده فعلی',
+ 'last' => ' آخرین بررسی',
+ 'loading' => ' به روز رسانی…',
+ 'none' => ' به روز رسانی در دسترس نیست',
+ 'releaseChannel' => array(
+ '_' => ' کانال انتشار',
+ 'edge' => ' انتشار نورد ("لبه")',
+ 'latest' => ' انتشار پایدار ("آخرین")',
+ ),
+ 'title' => ' FreshRSS را به روز کنید',
+ 'viaGit' => ' به روز رسانی از طریق git و Github.com شروع شد',
+ ),
+ 'user' => array(
+ 'admin' => ' مدیر',
+ 'article_count' => ' مقالات',
+ 'back_to_manage' => ' ← بازگشت به لیست کاربران',
+ 'create' => ' ایجاد کاربر جدید',
+ 'database_size' => ' اندازه پایگاه داده',
+ 'email' => ' آدرس ایمیل',
+ 'enabled' => ' فعال است',
+ 'feed_count' => ' فیدها',
+ 'is_admin' => ' مدیر است',
+ 'language' => ' زبان',
+ 'last_user_activity' => ' آخرین فعالیت کاربر',
+ 'list' => ' لیست کاربران',
+ 'number' => ' %d حساب ایجاد شده است',
+ 'numbers' => ' %d حساب ایجاد شده است',
+ 'password_form' => ' رمز عبور<br /><small>(برایروش ورود به فرم وب)</small>',
+ 'password_format' => ' حداقل 7 کاراکتر',
+ 'title' => ' مدیریت کاربران',
+ 'username' => ' نام کاربری',
+ ),
+);
diff --git a/app/i18n/fa/conf.php b/app/i18n/fa/conf.php
new file mode 100644
index 000000000..a2c7291a1
--- /dev/null
+++ b/app/i18n/fa/conf.php
@@ -0,0 +1,302 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its */
+/* state. When there is no comment, it means the entry is fully translated. */
+/* The recognized comments are (comment matching is case-insensitive): */
+/* + TODO: the entry has never been translated. */
+/* + DIRTY: the entry has been translated but needs to be updated. */
+/* + IGNORE: the entry does not need to be translated. */
+/* When a comment is not recognized, it is discarded. */
+/******************************************************************************/
+
+return array(
+ 'archiving' => array(
+ '_' => ' بایگانی',
+ 'exception' => ' استثناء پاکسازی',
+ 'help' => ' گزینه های بیشتری در تنظیمات فید فردی موجود است',
+ 'keep_favourites' => ' هرگز موارد دلخواه را حذف نکنید',
+ 'keep_labels' => ' هرگز برچسب ها را حذف نکنید',
+ 'keep_max' => ' حداکثر تعداد مقالات برای نگهداری در هر فید',
+ 'keep_min_by_feed' => ' حداقل تعداد مقالات برای نگهداری در هر فید',
+ 'keep_period' => ' حداکثر سن مقالات برای نگهداری',
+ 'keep_unreads' => ' هرگز مقالات خوانده نشده را حذف نکنید',
+ 'maintenance' => ' تعمیر و نگهداری',
+ 'optimize' => ' پایگاه داده را بهینه کنید',
+ 'optimize_help' => ' گاهی اوقات برای کاهش اندازه پایگاه داده اجرا کنید',
+ 'policy' => ' سیاست پاکسازی',
+ 'policy_warning' => ' اگر سیاست پاکسازی انتخاب نشود',
+ 'purge_now' => ' اکنون پاکسازی کنید',
+ 'title' => ' بایگانی',
+ 'ttl' => ' به‌طور خودکار بیشتر از آن رفرش نکنید',
+ ),
+ 'display' => array(
+ '_' => ' نمایش',
+ 'darkMode' => array(
+ '_' => ' حالت تاریک خودکار (بتا)',
+ 'auto' => ' خودکار',
+ 'no' => ' شماره',
+ ),
+ 'icon' => array(
+ 'bottom_line' => ' خط پایین',
+ 'display_authors' => ' نویسندگان',
+ 'entry' => ' نمادهای مقاله',
+ 'publication_date' => ' تاریخ انتشار',
+ 'related_tags' => ' برچسب های مقاله',
+ 'sharing' => ' اشتراک گذاری',
+ 'summary' => ' خلاصه',
+ 'top_line' => ' خط بالا',
+ ),
+ 'language' => ' زبان',
+ 'notif_html5' => array(
+ 'seconds' => ' ثانیه (0 به معنای عدم وجود مهلت زمانی است)',
+ 'timeout' => ' وقفه اعلان HTML5',
+ ),
+ 'show_nav_buttons' => ' دکمه های ناوبری را نشان دهید',
+ 'theme' => array(
+ '_' => ' موضوع',
+ 'deprecated' => array(
+ '_' => ' منسوخ شده است',
+ 'description' => ' این طرح زمینه دیگر پشتیبانی نمی‌شود و در <a href="https://freshrss.github.io/FreshRSS/en/users/05_Configuration.html#theme" target="_blank">آینده در دسترس نخواهد بود انتشار FreshRSS</a>',
+ ),
+ ),
+ 'theme_not_available' => ' طرح زمینه "%s" دیگر در دسترس نیست. لطفا موضوع دیگری را انتخاب کنید.',
+ 'thumbnail' => array(
+ 'label' => ' تصویر بند انگشتی',
+ 'landscape' => ' منظره',
+ 'none' => ' هیچ',
+ 'portrait' => ' پرتره',
+ 'square' => ' مربع',
+ ),
+ 'timezone' => ' منطقه زمانی',
+ 'title' => ' نمایش',
+ 'website' => array(
+ 'full' => ' نماد و نام',
+ 'icon' => ' فقط نماد',
+ 'label' => ' وب سایت',
+ 'name' => ' فقط نام',
+ 'none' => ' هیچکدام',
+ ),
+ 'width' => array(
+ 'content' => ' عرض محتوا',
+ 'large' => ' عریض',
+ 'medium' => ' متوسط',
+ 'no_limit' => ' عرض کامل',
+ 'thin' => ' باریک',
+ ),
+ ),
+ 'logs' => array(
+ 'loglist' => array(
+ 'level' => ' سطح گزارش',
+ 'message' => ' پیام ورود',
+ 'timestamp' => ' مهر زمان',
+ ),
+ 'pagination' => array(
+ 'first' => ' اول',
+ 'last' => ' آخرین',
+ 'next' => ' بعدی',
+ 'previous' => ' قبلی',
+ ),
+ ),
+ 'profile' => array(
+ '_' => ' مدیریت پروفایل',
+ 'api' => ' مدیریت API',
+ 'delete' => array(
+ '_' => ' حذف اکانت',
+ 'warn' => ' حساب شما و تمام داده های مرتبط حذف خواهد شد.',
+ ),
+ 'email' => ' آدرس ایمیل',
+ 'password_api' => ' رمز عبور API<br /><small>(مثلاً برای برنامه های تلفن همراه)</small>',
+ 'password_form' => ' رمز عبور<br /><small>(برای روش ورود به فرم وب)</small>',
+ 'password_format' => ' حداقل 7 کاراکتر',
+ 'title' => ' نمایه',
+ ),
+ 'query' => array(
+ '_' => ' پرس و جوهای کاربر',
+ 'deprecated' => ' این عبارت دیگر معتبر نیست. دسته یا فید ارجاع شده حذف شده است.',
+ 'filter' => array(
+ '_' => ' فیلتر اعمال شده:',
+ 'categories' => ' نمایش بر اساس دسته بندی',
+ 'feeds' => ' نمایش با فید',
+ 'order' => ' مرتب سازی بر اساس تاریخ',
+ 'search' => ' بیان',
+ 'state' => ' ایالت',
+ 'tags' => ' نمایش بر اساس برچسب',
+ 'type' => ' نوع',
+ ),
+ 'get_all' => ' نمایش همه مقالات',
+ 'get_category' => ' دسته «%s» را نمایش دهید',
+ 'get_favorite' => ' نمایش مقالات مورد علاقه',
+ 'get_feed' => ' فید "%s" را نمایش دهید',
+ 'name' => ' نام',
+ 'no_filter' => ' بدون فیلتر',
+ 'number' => ' پرس و جو n°%d',
+ 'order_asc' => ' ابتدا قدیمی ترین مقالات را نمایش دهید',
+ 'order_desc' => ' ابتدا جدیدترین مقالات را نمایش دهید',
+ 'search' => ' «%s» را جستجو کنید',
+ 'state_0' => 'نمایش همه مقالات',
+ 'state_1' => 'نمایش مقالات خوانده شده',
+ 'state_2' => 'نمایش مقالات خوانده نشده',
+ 'state_3' => 'نمایش همه مقالات',
+ 'state_4' => ' نمایش مقالات مورد علاقه',
+ 'state_5' => ' نمایش مقالات مورد علاقه خوانده شده',
+ 'state_6' => 'نمایش مقالات مورد علاقه خوانده نشده',
+ 'state_7' => ' نمایش مقالات مورد علاقه',
+ 'state_8' => ' نمایش مقالات مورد علاقه نیست',
+ 'state_9' => ' نمایش مقالات مورد علاقه خوانده نشده',
+ 'state_10' => ' نمایش مقالات خوانده نشده و نه مورد علاقه',
+ 'state_11' => ' نمایش مقالات مورد علاقه نیست',
+ 'state_12' => ' نمایش همه مقالات',
+ 'state_13' => ' نمایش مقالات خوانده شده',
+ 'state_14' => ' نمایش مقالات خوانده نشده',
+ 'state_15' => ' نمایش همه مقالات',
+ 'title' => ' پرس و جوهای کاربر',
+ ),
+ 'reading' => array(
+ '_' => ' خواندن',
+ 'after_onread' => ' بعد از "علامت گذاری همه به عنوان خوانده شده"',
+ 'always_show_favorites' => ' نمایش همه مقالات در موارد دلخواه به طور پیش فرض',
+ 'article' => array(
+ 'authors_date' => array(
+ '_' => ' نویسندگان و تاریخ',
+ 'both' => ' در سرصفحه و پاورقی',
+ 'footer' => ' در پاورقی',
+ 'header' => ' در سربرگ',
+ 'none' => ' هیچکدام',
+ ),
+ 'feed_name' => array(
+ 'above_title' => ' بالای عنوان/برچسب ها',
+ 'none' => ' هیچ',
+ 'with_authors' => ' در نویسندگان و ردیف تاریخ',
+ ),
+ 'feed_title' => ' عنوان خوراک',
+ 'tags' => array(
+ '_' => ' برچسب ها',
+ 'both' => ' در سرصفحه و پاورقی',
+ 'footer' => ' در پاورقی',
+ 'header' => ' در سربرگ',
+ 'none' => ' هیچ',
+ ),
+ 'tags_max' => array(
+ '_' => ' حداکثر تعداد برچسب نشان داده شده است',
+ 'help' => '0 به این معنی است: همه برچسب ها را نشان دهید و آنها را جمع نکنید',
+ ),
+ ),
+ 'articles_per_page' => ' تعداد مقاله در هر صفحه',
+ 'auto_load_more' => ' مقالات بیشتری را در پایین صفحه بارگذاری کنید',
+ 'auto_remove_article' => ' مخفی کردن مقالات پس از خواندن',
+ 'confirm_enabled' => ' یک دیالوگ تأیید را روی اقدامات "علامت گذاری همه به عنوان خوانده شده" نمایش دهید',
+ 'display_articles_unfolded' => ' نمایش مقالاتی که به طور پیش فرض باز شده اند',
+ 'display_categories_unfolded' => ' دسته بندی هایی که باید آشکار شوند',
+ 'headline' => array(
+ 'articles' => ' مقالات: باز/بستن',
+ 'articles_header_footer' => ' مقالات: سرصفحه / پاورقی',
+ 'categories' => ' ناوبری چپ: دسته ها',
+ 'mark_as_read' => ' مقاله را به عنوان خوانده شده علامت گذاری کنید',
+ 'misc' => ' متفرقه',
+ 'view' => ' مشاهده',
+ ),
+ 'hide_read_feeds' => ' دسته‌ها و فیدها را بدون مقاله خوانده نشده پنهان کنید (با پیکربندی «نمایش همه مقاله‌ها» کار نمی‌کند)',
+ 'img_with_lazyload' => ' از حالت <em>بار تنبل</em> برای بارگیری تصاویر استفاده کنید',
+ 'jump_next' => ' پرش به خواهر و برادر خوانده نشده بعدی (فید یا دسته)',
+ 'mark_updated_article_unread' => ' مقالات به روز شده را به عنوان خوانده نشده علامت گذاری کنید',
+ 'number_divided_when_reader' => ' در نمای خواندن بر 2 تقسیم کنید.',
+ 'read' => array(
+ 'article_open_on_website' => ' هنگامی که مقاله در وب سایت اصلی خود باز می شود',
+ 'article_viewed' => ' هنگام مشاهده مقاله',
+ 'keep_max_n_unread' => ' حداکثر تعداد مقالات خوانده نشده',
+ 'scroll' => ' در حین پیمایش',
+ 'upon_gone' => ' زمانی که دیگر در فید اخبار بالادستی نیست',
+ 'upon_reception' => ' پس از دریافت مقاله',
+ 'when' => ' علامت گذاری یک مقاله به عنوان خوانده شده…',
+ 'when_same_title' => ' اگر عنوان یکسانی از قبل در <i>n</i> جدیدترین مقالات بالا وجود داشته باشد',
+ ),
+ 'show' => array(
+ '_' => ' مقالات برای نمایش',
+ 'active_category' => ' دسته فعال',
+ 'adaptive' => ' نمایش را تنظیم کنید',
+ 'all_articles' => ' نمایش همه مقالات',
+ 'all_categories' => ' همه دسته ها',
+ 'no_category' => ' بدون دسته',
+ 'remember_categories' => ' دسته بندی های باز را به خاطر بسپارید',
+ 'unread' => ' فقط خوانده نشده را نشان دهد',
+ ),
+ 'show_fav_unread_help' => ' روی برچسب ها نیز اعمال می شود',
+ 'sides_close_article' => ' با کلیک کردن خارج از ناحیه متن مقاله',
+ 'sort' => array(
+ '_' => ' ترتیب مرتب سازی',
+ 'newer_first' => ' ابتدا جدیدترین',
+ 'older_first' => ' اول قدیمی ترین',
+ ),
+ 'sticky_post' => ' وقتی باز شد مقاله را به بالا بچسبانید',
+ 'title' => ' خواندن',
+ 'view' => array(
+ 'default' => ' نمای پیش فرض',
+ 'global' => ' نمای جهانی',
+ 'normal' => ' نمای عادی',
+ 'reader' => ' مشاهده خواندن',
+ ),
+ ),
+ 'sharing' => array(
+ '_' => ' اشتراک گذاری',
+ 'add' => ' یک روش اشتراک گذاری اضافه کنید',
+ 'blogotext' => ' وبلاگ متن',
+ 'deprecated' => ' این سرویس منسوخ شده است و در <a href="https://freshrss.github.io/FreshRSS/en/users/08_sharing_services.html" title="باز کردن اسناد برای اطلاعات بیشتر" target= از FreshRSS حذف خواهد شد. "_blank">نسخه آینده</a>.',
+ 'diaspora' => ' دیاسپورا*',
+ 'email' => ' ایمیل',
+ 'facebook' => ' فیس بوک',
+ 'more_information' => ' اطلاعات بیشتر',
+ 'print' => ' چاپ',
+ 'raindrop' => ' Raindrop.io',
+ 'remove' => ' روش اشتراک گذاری را حذف کنید',
+ 'shaarli' => ' شعرلی',
+ 'share_name' => ' نام اشتراک گذاری برای نمایش',
+ 'share_url' => ' URL را برای استفاده به اشتراک بگذارید',
+ 'title' => ' اشتراک گذاری',
+ 'twitter' => ' توییتر',
+ 'wallabag' => 'والباگ',
+ ),
+ 'shortcut' => array(
+ '_' => ' میانبرها',
+ 'article_action' => ' اقدامات ماده',
+ 'auto_share' => ' اشتراک گذاری',
+ 'auto_share_help' => ' اگر فقط یک حالت اشتراک گذاری وجود داشته باشد',
+ 'close_dropdown' => ' منوها را ببندید',
+ 'collapse_article' => ' فروپاشی',
+ 'first_article' => ' اولین مقاله را باز کنید',
+ 'focus_search' => ' به کادر جستجو دسترسی پیدا کنید',
+ 'global_view' => ' تغییر به نمای جهانی',
+ 'help' => ' نمایش اسناد',
+ 'javascript' => ' برای استفاده از میانبرها باید جاوا اسکریپت فعال باشد',
+ 'last_article' => ' آخرین مقاله را باز کنید',
+ 'load_more' => ' بارگذاری مقالات بیشتر',
+ 'mark_favorite' => ' موارد دلخواه را تغییر دهید',
+ 'mark_read' => ' خواندن را تغییر دهید',
+ 'navigation' => ' ناوبری',
+ 'navigation_help' => ' با اصلاح‌کننده <kbd>⇧ Shift</kbd>',
+ 'navigation_no_mod_help' => ' میانبرهای پیمایش زیر از اصلاح کننده ها پشتیبانی نمی کنند.',
+ 'next_article' => ' مقاله بعدی را باز کنید',
+ 'next_unread_article' => ' مقاله خوانده نشده بعدی را باز کنید',
+ 'non_standard' => ' برخی از کلیدها (<kbd>%s</kbd>) ممکن است به عنوان میانبر کار نکنند.',
+ 'normal_view' => ' تبدیل به نمای عادی',
+ 'other_action' => ' سایر اقدامات',
+ 'previous_article' => ' مقاله قبلی را باز کنید',
+ 'reading_view' => ' به نمای خواندن بروید',
+ 'rss_view' => ' به عنوان فید RSS باز شود',
+ 'see_on_website' => ' به وب سایت اصلی مراجعه کنید',
+ 'shift_for_all_read' => '+ <kbd>Alt ⎇</kbd> برای علامت گذاری مقالات قبلی به عنوان خوانده شده<br />+ <kbd>⇧ Shift</kbd> برای علامت گذاری همه مقالات به عنوان خوانده شده',
+ 'skip_next_article' => ' فوکوس بعدی بدون باز کردن',
+ 'skip_previous_article' => ' فوکوس قبلی بدون باز کردن',
+ 'title' => ' میانبرها',
+ 'toggle_media' => ' پخش/مکث رسانه',
+ 'user_filter' => ' به درخواست های کاربر دسترسی پیدا کنید',
+ 'user_filter_help' => ' اگر فقط یک درخواست کاربر وجود داشته باشد',
+ 'views' => ' بازدید',
+ ),
+ 'user' => array(
+ 'articles_and_size' => '%s مقاله (%s)',
+ 'current' => ' کاربر فعلی',
+ 'is_admin' => ' مدیر است',
+ 'users' => ' کاربران',
+ ),
+);
diff --git a/app/i18n/fa/feedback.php b/app/i18n/fa/feedback.php
new file mode 100644
index 000000000..68424df36
--- /dev/null
+++ b/app/i18n/fa/feedback.php
@@ -0,0 +1,144 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its */
+/* state. When there is no comment, it means the entry is fully translated. */
+/* The recognized comments are (comment matching is case-insensitive): */
+/* + TODO: the entry has never been translated. */
+/* + DIRTY: the entry has been translated but needs to be updated. */
+/* + IGNORE: the entry does not need to be translated. */
+/* When a comment is not recognized, it is discarded. */
+/******************************************************************************/
+
+return array(
+ 'access' => array(
+ 'denied' => ' شما اجازه دسترسی به این صفحه را ندارید',
+ 'not_found' => ' شما به دنبال صفحه ای هستید که وجود ندارد',
+ ),
+ 'admin' => array(
+ 'optimization_complete' => ' بهینه سازی کامل شد',
+ ),
+ 'api' => array(
+ 'password' => array(
+ 'failed' => ' رمز عبور شما قابل تغییر نیست',
+ 'updated' => ' رمز عبور شما اصلاح شده است',
+ ),
+ ),
+ 'auth' => array(
+ 'login' => array(
+ 'invalid' => ' ورود نامعتبر است',
+ 'success' => ' شما متصل هستید',
+ ),
+ 'logout' => array(
+ 'success' => ' شما قطع شده اید',
+ ),
+ ),
+ 'conf' => array(
+ 'error' => ' هنگام ذخیره پیکربندی خطایی روی داد',
+ 'query_created' => ' پرس و جو "%s" ایجاد شده است.',
+ 'shortcuts_updated' => ' میانبرها به روز شده اند',
+ 'updated' => ' پیکربندی به روز شده است',
+ ),
+ 'extensions' => array(
+ 'already_enabled' => '%s قبلاً فعال شده است',
+ 'cannot_remove' => ' %s قابل حذف نیست',
+ 'disable' => array(
+ 'ko' => '%s را نمی توان غیرفعال کرد. برای جزئیات <a href="%s">گزارش‌های FreshRSS</a> را بررسی کنید.',
+ 'ok' => ' %s اکنون غیرفعال است',
+ ),
+ 'enable' => array(
+ 'ko' => ' %s را نمی توان فعال کرد. برای جزئیات <a href="%s">گزارش‌های FreshRSS</a> را بررسی کنید.',
+ 'ok' => ' %s اکنون فعال است',
+ ),
+ 'no_access' => ' شما به %s دسترسی ندارید',
+ 'not_enabled' => '%s فعال نیست',
+ 'not_found' => '%s وجود ندارد',
+ 'removed' => '%s حذف شد',
+ ),
+ 'import_export' => array(
+ 'export_no_zip_extension' => ' پسوند ZIP در سرور شما وجود ندارد. لطفا سعی کنید فایل ها را یکی یکی صادر کنید.',
+ 'feeds_imported' => ' فیدهای شما وارد شده اند و اکنون به روز خواهند شد',
+ 'feeds_imported_with_errors' => ' فیدهای شما وارد شده است',
+ 'file_cannot_be_uploaded' => ' فایل قابل آپلود نیست!',
+ 'no_zip_extension' => ' پسوند ZIP در سرور شما وجود ندارد.',
+ 'zip_error' => ' در حین پردازش ZIP خطایی روی داد.',
+ ),
+ 'profile' => array(
+ 'error' => ' نمایه شما قابل تغییر نیست',
+ 'updated' => ' نمایه شما اصلاح شده است',
+ ),
+ 'sub' => array(
+ 'actualize' => ' به روز رسانی',
+ 'articles' => array(
+ 'marked_read' => ' مقالات انتخاب شده به عنوان خوانده شده علامت گذاری شده اند.',
+ 'marked_unread' => ' مقالات به عنوان خوانده نشده علامت گذاری شده اند.',
+ ),
+ 'category' => array(
+ 'created' => ' رده %s ایجاد شده است.',
+ 'deleted' => ' دسته حذف شده است.',
+ 'emptied' => ' رده خالی شده است',
+ 'error' => ' دسته را نمی توان به روز کرد',
+ 'name_exists' => ' نام دسته از قبل وجود دارد.',
+ 'no_id' => ' شما باید شناسه دسته را مشخص کنید.',
+ 'no_name' => ' نام دسته نمی تواند خالی باشد.',
+ 'not_delete_default' => ' شما نمی توانید دسته بندی پیش فرض را حذف کنید!',
+ 'not_exist' => ' دسته بندی وجود ندارد!',
+ 'over_max' => ' شما به حد مجاز دسته بندی خود رسیده اید (%d)',
+ 'updated' => ' رده به روز شده است.',
+ ),
+ 'feed' => array(
+ 'actualized' => '<em>%s</em> به روز شده است',
+ 'actualizeds' => ' فیدهای RSS به روز شده اند',
+ 'added' => ' فید RSS <em>%s</em> اضافه شده است',
+ 'already_subscribed' => ' شما قبلاً در <em>%s</em> مشترک شده اید',
+ 'cache_cleared' => '<em>%s</em> کش پاک شده است',
+ 'deleted' => ' فید حذف شده است',
+ 'error' => ' فید را نمی توان به روز کرد',
+ 'internal_problem' => ' فید خبری اضافه نشد. برای جزئیات <a href="%s">گزارش‌های FreshRSS</a> را بررسی کنید. می‌توانید با اضافه کردن <code>#force_feed</code> به URL',
+ 'invalid_url' => ' URL <em>%s</em> نامعتبر است',
+ 'n_actualized' => ' %d فید به روز شده است',
+ 'n_entries_deleted' => ' %d مقاله حذف شده است',
+ 'no_refresh' => ' هیچ فید برای تازه کردن وجود ندارد',
+ 'not_added' => '<em>%s</em> اضافه نشد',
+ 'not_found' => ' فید یافت نمی شود',
+ 'over_max' => ' شما به حد مجاز فید خود رسیده اید (%d)',
+ 'reloaded' => '<em>%s</em> دوباره بارگیری شده است',
+ 'selector_preview' => array(
+ 'http_error' => ' محتوای وب سایت بارگیری نشد.',
+ 'no_entries' => ' هیچ مقاله ای در این فید وجود ندارد. برای ایجاد پیش نمایش به حداقل یک مقاله نیاز دارید.',
+ 'no_feed' => ' خطای داخلی (فید یافت نمی شود).',
+ 'no_result' => ' انتخابگر با چیزی مطابقت نداشت. به عنوان یک بازگشت',
+ 'selector_empty' => ' انتخابگر خالی است. برای ایجاد پیش نمایش باید یکی را تعریف کنید.',
+ ),
+ 'updated' => ' فید به روز شده است',
+ ),
+ 'purge_completed' => ' پاکسازی کامل شد (%d مقاله حذف شد)',
+ ),
+ 'tag' => array(
+ 'created' => ' برچسب "%s" ایجاد شده است.',
+ 'name_exists' => ' نام برچسب از قبل وجود دارد.',
+ 'renamed' => ' برچسب "%s" به "%s" تغییر نام داده است.',
+ ),
+ 'update' => array(
+ 'can_apply' => ' به‌روزرسانی FreshRSS موجود است: <strong>نسخه %s</strong>.',
+ 'error' => ' فرآیند به روز رسانی با خطا مواجه شده است: %s',
+ 'file_is_nok' => ' به‌روزرسانی FreshRSS موجود است (<strong>نسخه %s</strong>)',
+ 'finished' => ' به روز رسانی کامل شد!',
+ 'none' => ' به روز رسانی در دسترس نیست',
+ 'server_not_found' => ' سرور به روز رسانی یافت نمی شود. [%s]',
+ ),
+ 'user' => array(
+ 'created' => array(
+ '_' => ' کاربر %s ایجاد شده است',
+ 'error' => ' کاربر %s نمی تواند ایجاد شود',
+ ),
+ 'deleted' => array(
+ '_' => ' کاربر %s حذف شده است',
+ 'error' => ' کاربر %s قابل حذف نیست',
+ ),
+ 'updated' => array(
+ '_' => ' کاربر %s به روز شده است',
+ 'error' => ' کاربر %s به روز نشده است',
+ ),
+ ),
+);
diff --git a/app/i18n/fa/gen.php b/app/i18n/fa/gen.php
new file mode 100644
index 000000000..162fc7c8d
--- /dev/null
+++ b/app/i18n/fa/gen.php
@@ -0,0 +1,246 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its */
+/* state. When there is no comment, it means the entry is fully translated. */
+/* The recognized comments are (comment matching is case-insensitive): */
+/* + TODO: the entry has never been translated. */
+/* + DIRTY: the entry has been translated but needs to be updated. */
+/* + IGNORE: the entry does not need to be translated. */
+/* When a comment is not recognized, it is discarded. */
+/******************************************************************************/
+
+return array(
+ 'action' => array(
+ 'actualize' => ' فیدها را به روز کنید',
+ 'add' => ' اضافه کنید',
+ 'back' => '← به عقب برگرد',
+ 'back_to_rss_feeds' => '← به فیدهای RSS خود برگردید',
+ 'cancel' => ' لغو',
+ 'create' => ' ایجاد کنید',
+ 'delete_muted_feeds' => ' فیدهای خاموش را حذف کنید',
+ 'demote' => ' تنزل دادن',
+ 'disable' => ' غیر فعال کردن',
+ 'empty' => ' خالی',
+ 'enable' => ' فعال کنید',
+ 'export' => ' صادرات',
+ 'filter' => ' فیلتر',
+ 'import' => ' واردات',
+ 'load_default_shortcuts' => ' میانبرهای پیش فرض را بارگیری کنید',
+ 'manage' => ' مدیریت',
+ 'mark_read' => ' علامت گذاری به عنوان خوانده شده',
+ 'open_url' => ' URL را باز کنید',
+ 'promote' => ' ترویج',
+ 'purge' => ' پاکسازی',
+ 'refresh_opml' => ' OPML را بازخوانی کنید',
+ 'remove' => ' حذف کنید',
+ 'rename' => ' تغییر نام',
+ 'see_website' => ' به وب سایت مراجعه کنید',
+ 'submit' => ' ارسال کنید',
+ 'truncate' => ' تمام مقالات را حذف کنید',
+ 'update' => ' به روز رسانی',
+ ),
+ 'auth' => array(
+ 'accept_tos' => ' من <a href="%s">شرایط خدمات</a> را می پذیرم.',
+ 'email' => ' آدرس ایمیل',
+ 'keep_logged_in' => ' مرا به سیستم <small>(%s روز)</small> نگه دارید',
+ 'login' => ' ورود',
+ 'logout' => ' خروج',
+ 'password' => array(
+ '_' => ' رمز عبور',
+ 'format' => '<small>حداقل 7 نویسه</small>',
+ ),
+ 'registration' => array(
+ '_' => ' حساب جدید',
+ 'ask' => ' یک حساب کاربری ایجاد کنید؟',
+ 'title' => ' ایجاد حساب',
+ ),
+ 'username' => array(
+ '_' => ' نام کاربری',
+ 'format' => '<small>حداکثر 16 نویسه الفبای عددی</small>',
+ ),
+ ),
+ 'date' => array(
+ 'Apr' => '\\A\\p\\r\\i\\l', // TODO
+ 'Aug' => '\\A\\u\\g\\u\\s\\t', // TODO
+ 'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r', // TODO
+ 'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y', // TODO
+ 'Jan' => '\\J\\a\\n\\u\\a\\r\\y', // TODO
+ 'Jul' => '\\J\\u\\l\\y', // TODO
+ 'Jun' => '\\J\\u\\n\\e', // TODO
+ 'Mar' => '\\M\\a\\r\\c\\h', // TODO
+ 'May' => '\\M\\a\\y', // TODO
+ 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', // TODO
+ 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', // TODO
+ 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', // TODO
+ 'apr' => ' آوریل',
+ 'april' => ' آوریل',
+ 'aug' => ' آگوست',
+ 'august' => ' آگوست',
+ 'before_yesterday' => ' قبل از دیروز',
+ 'dec' => ' دسامبر',
+ 'december' => ' دسامبر',
+ 'feb' => ' فوریه',
+ 'february' => ' فوریه',
+ 'format_date' => 'j %s Y', // TODO
+ 'format_date_hour' => 'j %s Y \\a\\t H\\:i', // TODO
+ 'fri' => ' جمعه',
+ 'jan' => ' ژانویه',
+ 'january' => ' ژانویه',
+ 'jul' => ' ژوئیه',
+ 'july' => ' ژوئیه',
+ 'jun' => ' ژوئن',
+ 'june' => ' ژوئن',
+ 'last_2_year' => ' دو سال گذشته',
+ 'last_3_month' => ' سه ماه گذشته',
+ 'last_3_year' => ' سه سال گذشته',
+ 'last_5_year' => ' پنج سال گذشته',
+ 'last_6_month' => ' شش ماه گذشته',
+ 'last_month' => ' ماه گذشته',
+ 'last_week' => ' هفته گذشته',
+ 'last_year' => ' سال گذشته',
+ 'mar' => ' مارس.',
+ 'march' => ' مارس',
+ 'may' => ' مه',
+ 'may_' => ' مه',
+ 'mon' => ' دوشنبه',
+ 'month' => ' ماه',
+ 'nov' => ' نوامبر',
+ 'november' => ' نوامبر',
+ 'oct' => ' اکتبر',
+ 'october' => ' اکتبر',
+ 'sat' => ' شنبه',
+ 'sep' => ' سپتامبر.',
+ 'september' => ' سپتامبر',
+ 'sun' => ' یکشنبه',
+ 'thu' => ' پنجشنبه',
+ 'today' => ' امروز',
+ 'tue' => ' سه شنبه',
+ 'wed' => ' چهارشنبه',
+ 'yesterday' => ' دیروز',
+ ),
+ 'dir' => 'rtl',
+ 'freshrss' => array(
+ '_' => ' FreshRSS',
+ 'about' => 'درباره FreshRSS',
+ ),
+ 'js' => array(
+ 'category_empty' => ' دسته خالی',
+ 'confirm_action' => ' آیا مطمئن هستید که می خواهید این عمل را انجام دهید؟ نمی توان آن را لغو کرد!',
+ 'confirm_action_feed_cat' => ' آیا مطمئن هستید که می خواهید این عمل را انجام دهید؟ موارد دلخواه و درخواست های کاربر مرتبط را از دست خواهید داد. نمی توان آن را لغو کرد!',
+ 'feedback' => array(
+ 'body_new_articles' => ' %%d مقاله جدید برای خواندن در FreshRSS وجود دارد.',
+ 'body_unread_articles' => ' (خوانده نشده: %%d)',
+ 'request_failed' => ' یک درخواست شکست خورده است',
+ 'title_new_articles' => ' FreshRSS: مقالات جدید!',
+ ),
+ 'new_article' => 'مقالات جدیدی موجود است',
+ 'should_be_activated' => ' جاوا اسکریپت باید فعال باشد',
+ ),
+ 'lang' => array(
+ 'cz' => 'Čeština', // IGNORE
+ 'de' => 'Deutsch', // IGNORE
+ 'el' => 'Ελληνικά', // IGNORE
+ 'en' => 'English', // IGNORE
+ 'en-us' => 'English (United States)', // IGNORE
+ 'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
+ 'fr' => 'Français', // IGNORE
+ 'he' => 'עברית', // IGNORE
+ 'id' => 'Bahasa Indonesia', // IGNORE
+ 'it' => 'Italiano', // IGNORE
+ 'ja' => '日本語', // IGNORE
+ 'ko' => '한국어', // IGNORE
+ 'lv' => 'Latviešu', // IGNORE
+ 'nl' => 'Nederlands', // IGNORE
+ 'oc' => 'Occitan', // IGNORE
+ 'pl' => 'Polski', // IGNORE
+ 'pt-br' => 'Português (Brasil)', // IGNORE
+ 'ru' => 'Русский', // IGNORE
+ 'sk' => 'Slovenčina', // IGNORE
+ 'tr' => 'Türkçe', // IGNORE
+ 'zh-cn' => '简体中文', // IGNORE
+ 'zh-tw' => '正體中文', // IGNORE
+ ),
+ 'menu' => array(
+ 'about' => ' در مورد',
+ 'account' => ' حساب',
+ 'admin' => ' اداره',
+ 'archiving' => ' آرشیو',
+ 'authentication' => ' احراز هویت',
+ 'check_install' => ' بررسی نصب',
+ 'configuration' => ' پیکربندی',
+ 'display' => 'نمایش',
+ 'extensions' => ' برنامه های افزودنی',
+ 'logs' => ' سیاهههای مربوط',
+ 'queries' => ' پرس و جوهای کاربر',
+ 'reading' => ' خواندن',
+ 'search' => ' کلمات یا #برچسب ها را جستجو کنید',
+ 'search_help' => ' به مستندات <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">پارامترهای جستجوی پیشرفته</a مراجعه کنید >',
+ 'sharing' => ' اشتراک گذاری',
+ 'shortcuts' => ' میانبرها',
+ 'stats' => 'آمار',
+ 'system' => ' پیکربندی سیستم',
+ 'update' => ' به روز رسانی',
+ 'user_management' => ' مدیریت کاربران',
+ 'user_profile' => ' نمایه',
+ ),
+ 'period' => array(
+ 'days' => ' روز',
+ 'hours' => ' ساعت',
+ 'months' => ' ماه',
+ 'weeks' => ' هفته',
+ 'years' => ' سال',
+ ),
+ 'share' => array(
+ 'Known' => ' سایت های مبتنی بر شناخته شده',
+ 'archiveORG' => ' archive.org',
+ 'archivePH' => ' archive.ph',
+ 'blogotext' => ' وبلاگ متن',
+ 'buffer' => ' بافر',
+ 'clipboard' => ' کلیپ بورد',
+ 'diaspora' => ' دیاسپورا*',
+ 'email' => ' ایمیل',
+ 'email-webmail-firefox-fix' => ' ایمیل (وب میل - تعمیر برای فایرفاکس)',
+ 'facebook' => ' فیس بوک',
+ 'gnusocial' => ' گنو اجتماعی',
+ 'jdh' => 'ژورنال دو هکر',
+ 'lemmy' => ' لمی',
+ 'linkding' => ' پیوند دادن',
+ 'linkedin' => ' لینکدین',
+ 'mastodon' => ' ماستودون',
+ 'movim' => ' Movim',
+ 'omnivore' => ' همه چیزخوار',
+ 'pinboard' => ' پینبرد',
+ 'pinterest' => ' پینترست',
+ 'pocket' => ' جیبی',
+ 'print' => ' چاپ',
+ 'raindrop' => ' Raindrop.io',
+ 'reddit' => ' Reddit',
+ 'shaarli' => ' شعرلی',
+ 'twitter' => ' توییتر',
+ 'wallabag' => ' wallabag نسخه 1',
+ 'wallabagv2' => ' wallabag نسخه 2',
+ 'web-sharing-api' => ' اشتراک گذاری سیستم',
+ 'whatsapp' => ' واتساپ',
+ 'xing' => ' زینگ',
+ ),
+ 'short' => array(
+ 'attention' => ' هشدار!',
+ 'blank_to_disable' => ' برای غیرفعال کردن',
+ 'by_author' => ' توسط:',
+ 'by_default' => ' به طور پیش فرض',
+ 'damn' => ' انفجار!',
+ 'default_category' => ' دسته بندی نشده',
+ 'no' => ' شماره',
+ 'not_applicable' => ' در دسترس نیست',
+ 'ok' => ' باشه!',
+ 'or' => ' یا',
+ 'yes' => ' بله',
+ ),
+ 'stream' => array(
+ 'load_more' => ' بارگذاری مقالات بیشتر',
+ 'mark_all_read' => ' همه را به عنوان خوانده شده علامت گذاری کنید',
+ 'nothing_to_load' => ' مقاله دیگری وجود ندارد',
+ ),
+);
diff --git a/app/i18n/fa/index.php b/app/i18n/fa/index.php
new file mode 100644
index 000000000..5396d04b7
--- /dev/null
+++ b/app/i18n/fa/index.php
@@ -0,0 +1,76 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its */
+/* state. When there is no comment, it means the entry is fully translated. */
+/* The recognized comments are (comment matching is case-insensitive): */
+/* + TODO: the entry has never been translated. */
+/* + DIRTY: the entry has been translated but needs to be updated. */
+/* + IGNORE: the entry does not need to be translated. */
+/* When a comment is not recognized, it is discarded. */
+/******************************************************************************/
+
+return array(
+ 'about' => array(
+ '_' => ' در مورد',
+ 'agpl3' => ' <a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
+ 'bugs_reports' => ' گزارش اشکال',
+ 'credits' => ' اعتبار',
+ 'credits_content' => ' برخی از عناصر طراحی از <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> می آیند',
+ 'documentation' => ' اسناد و مدارک',
+ 'freshrss_description' => ' FreshRSS یک جمع کننده و خواننده RSS خود میزبان است. این به شما امکان می دهد بدون نیاز به مرور از یک وب سایت به وب سایت دیگر',
+ 'github' => ' <a href="https://github.com/FreshRSS/FreshRSS/issues">در Github</a>',
+ 'license' => ' مجوز',
+ 'project_website' => ' وب سایت پروژه',
+ 'title' => ' در مورد',
+ 'version' => ' نسخه',
+ ),
+ 'feed' => array(
+ 'add' => ' لطفاً چند فید اضافه کنید.',
+ 'empty' => ' هیچ مقاله ای برای نمایش وجود ندارد.',
+ 'rss_of' => ' فید RSS %s',
+ 'title' => ' جریان اصلی',
+ 'title_fav' => ' موارد دلخواه',
+ 'title_global' => ' نمای جهانی',
+ ),
+ 'log' => array(
+ '_' => ' سیاهههای مربوط',
+ 'clear' => ' سیاهههای مربوط را پاک کنید',
+ 'empty' => ' فایل لاگ خالی است',
+ 'title' => ' سیاهههای مربوط',
+ ),
+ 'menu' => array(
+ 'about' => ' درباره FreshRSS',
+ 'before_one_day' => ' بزرگتر از یک روز',
+ 'before_one_week' => ' بزرگتر از یک هفته',
+ 'bookmark_query' => ' درخواست فعلی را نشانک‌گذاری کنید',
+ 'favorites' => ' موارد دلخواه (%s)',
+ 'global_view' => ' نمای جهانی',
+ 'main_stream' => ' جریان اصلی',
+ 'mark_all_read' => ' همه را به عنوان خوانده شده علامت گذاری کنید',
+ 'mark_cat_read' => ' دسته را به عنوان خوانده شده علامت گذاری کنید',
+ 'mark_feed_read' => ' فید را به عنوان خوانده شده علامت گذاری کنید',
+ 'mark_selection_unread' => ' انتخاب را به عنوان خوانده نشده علامت گذاری کنید',
+ 'newer_first' => ' ابتدا جدیدتر',
+ 'non-starred' => ' موارد غیر مورد علاقه را نشان دهید',
+ 'normal_view' => ' نمای عادی',
+ 'older_first' => ' اول مسن ترین',
+ 'queries' => ' پرس و جوهای کاربر',
+ 'read' => ' نمایش خوانده شده',
+ 'reader_view' => ' مشاهده خواندن',
+ 'rss_view' => ' خوراک RSS',
+ 'search_short' => ' جستجو',
+ 'starred' => ' نمایش موارد دلخواه',
+ 'stats' => ' آمار',
+ 'subscription' => ' مدیریت اشتراک',
+ 'tags' => ' برچسب های من',
+ 'unread' => ' نمایش خوانده نشده',
+ ),
+ 'share' => ' به اشتراک بگذارید',
+ 'tag' => array(
+ 'related' => ' برچسب های مقاله',
+ ),
+ 'tos' => array(
+ 'title' => ' شرایط خدمات',
+ ),
+);
diff --git a/app/i18n/fa/install.php b/app/i18n/fa/install.php
new file mode 100644
index 000000000..7d86b78d0
--- /dev/null
+++ b/app/i18n/fa/install.php
@@ -0,0 +1,136 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its */
+/* state. When there is no comment, it means the entry is fully translated. */
+/* The recognized comments are (comment matching is case-insensitive): */
+/* + TODO: the entry has never been translated. */
+/* + DIRTY: the entry has been translated but needs to be updated. */
+/* + IGNORE: the entry does not need to be translated. */
+/* When a comment is not recognized, it is discarded. */
+/******************************************************************************/
+
+return array(
+ 'action' => array(
+ 'finish' => 'Complete installation', // TODO
+ 'fix_errors_before' => 'Please all fix errors before continuing to the next step.', // TODO
+ 'keep_install' => 'Keep previous configuration', // TODO
+ 'next_step' => 'Go to the next step', // TODO
+ 'reinstall' => 'Reinstall FreshRSS', // TODO
+ ),
+ 'auth' => array(
+ 'form' => 'Web form (traditional',
+ 'http' => 'HTTP (for advanced users with HTTPS)', // TODO
+ 'none' => 'None (dangerous)', // TODO
+ 'password_form' => 'Password<br /><small>(for the Web-form login method)</small>', // TODO
+ 'password_format' => 'At least 7 characters', // TODO
+ 'type' => 'Authentication method', // TODO
+ ),
+ 'bdd' => array(
+ '_' => 'Database', // TODO
+ 'conf' => array(
+ '_' => 'Database configuration', // TODO
+ 'ko' => 'Verify your database configuration.', // TODO
+ 'ok' => 'Database configuration has been saved.', // TODO
+ ),
+ 'host' => 'Host', // TODO
+ 'password' => 'Database password', // TODO
+ 'prefix' => 'Table prefix', // TODO
+ 'type' => 'Type of database', // TODO
+ 'username' => 'Database username', // TODO
+ ),
+ 'check' => array(
+ '_' => 'Checks', // TODO
+ 'already_installed' => 'We have detected that FreshRSS is already installed!', // TODO
+ 'cache' => array(
+ 'nok' => 'Check permissions on the <em>%1$s</em> directory for <em>%2$s</em> user. The HTTP server must have write permission.', // TODO
+ 'ok' => 'Permissions on the cache directory are good.', // TODO
+ ),
+ 'ctype' => array(
+ 'nok' => 'Cannot find the required library for character type checking (php-ctype).', // TODO
+ 'ok' => 'You have the required library for character type checking (ctype).', // TODO
+ ),
+ 'curl' => array(
+ 'nok' => 'Cannot find the cURL library (php-curl package).', // TODO
+ 'ok' => 'You have the cURL library.', // TODO
+ ),
+ 'data' => array(
+ 'nok' => 'Check permissions on the <em>%1$s</em> directory for <em>%2$s</em> user. The HTTP server must have write permission.', // TODO
+ 'ok' => 'Permissions on the data directory are good.', // TODO
+ ),
+ 'dom' => array(
+ 'nok' => 'Cannot find the required library to browse the DOM.', // TODO
+ 'ok' => 'You have the required library to browse the DOM.', // TODO
+ ),
+ 'favicons' => array(
+ 'nok' => 'Check permissions on the <em>%1$s</em> directory for <em>%2$s</em> user. The HTTP server must have write permission.', // TODO
+ 'ok' => 'Permissions on the favicons directory are good.', // TODO
+ ),
+ 'fileinfo' => array(
+ 'nok' => 'Cannot find the PHP fileinfo library (fileinfo package).', // TODO
+ 'ok' => 'You have the fileinfo library.', // TODO
+ ),
+ 'json' => array(
+ 'nok' => 'Cannot find the recommended library to parse JSON.', // TODO
+ 'ok' => 'You have the recommended library to parse JSON.', // TODO
+ ),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', // TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', // TODO
+ ),
+ 'pcre' => array(
+ 'nok' => 'Cannot find the required library for regular expressions (php-pcre).', // TODO
+ 'ok' => 'You have the required library for regular expressions (PCRE).', // TODO
+ ),
+ 'pdo' => array(
+ 'nok' => 'Cannot find PDO or one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', // TODO
+ 'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', // TODO
+ ),
+ 'php' => array(
+ 'nok' => 'Your PHP version is %s, but FreshRSS requires at least version %s.', // TODO
+ 'ok' => 'Your PHP version, %s, is compatible with FreshRSS.', // TODO
+ ),
+ 'reload' => 'Check again', // TODO
+ 'tmp' => array(
+ 'nok' => 'Check permissions on the <em>%1$s</em> directory for <em>%2$s</em> user. The HTTP server must have write permissions.', // TODO
+ 'ok' => 'Permissions on the temp directory are good.', // TODO
+ ),
+ 'unknown_process_username' => 'unknown', // TODO
+ 'users' => array(
+ 'nok' => 'Check permissions on the <em>%1$s</em> directory for <em>%2$s</em> user. The HTTP server must have write permissions.', // TODO
+ 'ok' => 'Permissions on the users directory are good.', // TODO
+ ),
+ 'xml' => array(
+ 'nok' => 'Cannot find the required library to parse XML.', // TODO
+ 'ok' => 'You have the required library to parse XML.', // TODO
+ ),
+ ),
+ 'conf' => array(
+ '_' => 'General configuration', // TODO
+ 'ok' => 'General configuration has been saved.', // TODO
+ ),
+ 'congratulations' => 'Congratulations!', // TODO
+ 'default_user' => array(
+ '_' => 'Username of the default user', // TODO
+ 'max_char' => 'maximum 16 alphanumeric characters', // TODO
+ ),
+ 'fix_errors_before' => 'Please fix errors before continuing to the next step.', // TODO
+ 'javascript_is_better' => 'FreshRSS is more pleasant with JavaScript enabled', // TODO
+ 'js' => array(
+ 'confirm_reinstall' => 'You will lose your previous configuration by reinstalling FreshRSS. Are you sure you want to continue?', // TODO
+ ),
+ 'language' => array(
+ '_' => 'Language', // TODO
+ 'choose' => 'Choose a language for FreshRSS', // TODO
+ 'defined' => 'Language has been defined.', // TODO
+ ),
+ 'missing_applied_migrations' => 'Something went wrong; you should create an empty file <em>%s</em> manually.', // TODO
+ 'ok' => 'The installation process was successful.', // TODO
+ 'session' => array(
+ 'nok' => 'The web server seems to be incorrectly configured for cookies required for PHP sessions!', // TODO
+ ),
+ 'step' => 'step %d', // TODO
+ 'steps' => 'Steps', // TODO
+ 'this_is_the_end' => 'This is the end', // TODO
+ 'title' => 'Installation · FreshRSS', // TODO
+);
diff --git a/app/i18n/fa/sub.php b/app/i18n/fa/sub.php
new file mode 100644
index 000000000..ca789d7b6
--- /dev/null
+++ b/app/i18n/fa/sub.php
@@ -0,0 +1,214 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its */
+/* state. When there is no comment, it means the entry is fully translated. */
+/* The recognized comments are (comment matching is case-insensitive): */
+/* + TODO: the entry has never been translated. */
+/* + DIRTY: the entry has been translated but needs to be updated. */
+/* + IGNORE: the entry does not need to be translated. */
+/* When a comment is not recognized, it is discarded. */
+/******************************************************************************/
+
+return array(
+ 'api' => array(
+ 'documentation' => ' URL زیر را برای استفاده از آن در یک ابزار خارجی کپی کنید.',
+ 'title' => ' API',
+ ),
+ 'bookmarklet' => array(
+ 'documentation' => ' این دکمه را به نوار ابزار نشانک‌های خود بکشید یا روی آن راست کلیک کرده و «Bookmark This Link» را انتخاب کنید. سپس روی دکمه "اشتراک" در هر صفحه ای که می خواهید مشترک شوید کلیک کنید.',
+ 'label' => ' مشترک شوید',
+ 'title' => ' Bookmarklet',
+ ),
+ 'category' => array(
+ '_' => ' دسته',
+ 'add' => ' یک دسته اضافه کنید',
+ 'archiving' => ' بایگانی',
+ 'dynamic_opml' => array(
+ '_' => ' OPML پویا',
+ 'help' => ' URL را به <a href="http://opml.org/" target="_blank">فایل OPML</a> ارائه دهید تا به صورت پویا این دسته با فیدها پر شود.',
+ ),
+ 'empty' => ' دسته خالی',
+ 'information' => ' اطلاعات',
+ 'opml_url' => ' URL OPML',
+ 'position' => ' موقعیت نمایش',
+ 'position_help' => ' برای کنترل ترتیب مرتب سازی دسته بندی',
+ 'title' => ' عنوان',
+ ),
+ 'feed' => array(
+ 'accept_cookies' => ' کوکی ها را بپذیرید',
+ 'accept_cookies_help' => ' به سرور فید اجازه دهید تا کوکی ها را تنظیم کند (فقط برای مدت زمان درخواست در حافظه ذخیره می شود)',
+ 'add' => ' یک فید RSS اضافه کنید',
+ 'advanced' => ' پیشرفته',
+ 'archiving' => ' بایگانی',
+ 'auth' => array(
+ 'configuration' => ' ورود',
+ 'help' => ' دسترسی به فیدهای RSS محافظت شده HTTP را می دهد',
+ 'http' => ' احراز هویت HTTP',
+ 'password' => ' رمز عبور HTTP',
+ 'username' => ' نام کاربری HTTP',
+ ),
+ 'clear_cache' => ' همیشه حافظه پنهان را پاک کنید',
+ 'content_action' => array(
+ '_' => ' اقدام محتوا هنگام واکشی محتوای مقاله',
+ 'append' => ' پس از محتوای موجود اضافه کنید',
+ 'prepend' => ' قبل از محتوای موجود اضافه کنید',
+ 'replace' => ' محتوای موجود را جایگزین کنید',
+ ),
+ 'css_cookie' => ' هنگام واکشی محتوای مقاله از کوکی ها استفاده کنید',
+ 'css_cookie_help' => ' مثال: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>',
+ 'css_help' => ' فیدهای RSS کوتاه شده را بازیابی می کند (احتیاط',
+ 'css_path' => ' انتخاب کننده CSS مقاله در وب سایت اصلی',
+ 'css_path_filter' => array(
+ '_' => ' انتخابگر CSS از عناصر برای حذف',
+ 'help' => ' یک انتخابگر CSS ممکن است لیستی باشد مانند: <kbd>.footer',
+ ),
+ 'description' => ' توضیحات',
+ 'empty' => ' این فید خالی است. لطفاً بررسی کنید که هنوز نگهداری می شود.',
+ 'error' => ' این فید با مشکل مواجه شده است. لطفاً بررسی کنید که همیشه در دسترس است و سپس آن را به روز کنید.',
+ 'filteractions' => array(
+ '_' => ' اعمال فیلتر',
+ 'help' => ' در هر خط یک فیلتر جستجو بنویسید. اپراتورها <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">مستندات را ببینید</a>.',
+ ),
+ 'information' => ' اطلاعات',
+ 'keep_min' => ' حداقل تعداد مقالات برای نگهداری',
+ 'kind' => array(
+ '_' => ' نوع منبع خوراک',
+ 'html_xpath' => array(
+ '_' => ' HTML + XPath (خراش دادن وب)',
+ 'feed_title' => array(
+ '_' => ' عنوان خوراک',
+ 'help' => ' مثال: <code>//title</code> یا یک رشته ثابت: <code>"فید سفارشی من"</code>',
+ ),
+ 'help' => '<dfn><a href="https://www.w3.org/TR/xpath-10/" target="_blank">XPath 1.0</a></dfn> یک زبان جستجوی استاندارد برای پیشرفته است کاربران',
+ 'item' => array(
+ '_' => ' یافتن اخبار <strong>اقلام</strong><br /><small>(مهمترین)</small>',
+ 'help' => ' مثال: <code>//div[@class="news-item"]</code>',
+ ),
+ 'item_author' => array(
+ '_' => ' نویسنده مورد',
+ 'help' => ' همچنین می تواند یک رشته ثابت باشد. مثال: <code>"ناشناس"</code>',
+ ),
+ 'item_categories' => ' برچسب های آیتم',
+ 'item_content' => array(
+ '_' => ' محتوای مورد',
+ 'help' => ' مثالی برای گرفتن کامل مورد: <code>.</code>',
+ ),
+ 'item_thumbnail' => array(
+ '_' => ' تصویر کوچک مورد',
+ 'help' => ' مثال: <code>فرزند::img/@src</code>',
+ ),
+ 'item_timeFormat' => array(
+ '_' => ' فرمت تاریخ/زمان سفارشی',
+ 'help' => ' اختیاری. قالبی که توسط <a href="https://php.net/datetime.createfromformat" target="_blank"><code>DateTime::createFromFormat()</code></a> پشتیبانی می‌شود',
+ ),
+ 'item_timestamp' => array(
+ '_' => ' تاریخ مورد',
+ 'help' => ' نتیجه با <a href="https://php.net/strtotime" target="_blank"><code>strtotime()</code></a> تجزیه خواهد شد',
+ ),
+ 'item_title' => array(
+ '_' => ' عنوان مورد',
+ 'help' => ' به طور خاص از <a href="https://developer.mozilla.org/docs/Web/XPath/Axes" target="_blank">محور XPath</a> <code>فرزند::</code استفاده کنید > مانند <code>فرزند::h2</code>',
+ ),
+ 'item_uid' => array(
+ '_' => ' شناسه منحصر به فرد مورد',
+ 'help' => ' اختیاری. مثال: <code>فرزند::div/@data-uri</code>',
+ ),
+ 'item_uri' => array(
+ '_' => ' پیوند مورد (URL)',
+ 'help' => ' مثال: <code>فرزند::a/@href</code>',
+ ),
+ 'relative' => 'XPath (نسبت به مورد) برای:',
+ 'xpath' => ' XPath برای:',
+ ),
+ 'rss' => ' RSS / Atom (پیش‌فرض)',
+ 'xml_xpath' => ' XML + XPath',
+ ),
+ 'maintenance' => array(
+ 'clear_cache' => ' کش را پاک کنید',
+ 'clear_cache_help' => ' کش این فید را پاک کنید.',
+ 'reload_articles' => ' بارگذاری مجدد مقالات',
+ 'reload_articles_help' => ' تعداد زیادی مقاله را بارگیری مجدد کنید و در صورت تعریف انتخابگر',
+ 'title' => ' تعمیر و نگهداری',
+ ),
+ 'max_http_redir' => ' حداکثر تغییر مسیر HTTP',
+ 'max_http_redir_help' => ' روی 0 تنظیم کنید یا برای غیرفعال کردن آن را خالی بگذارید',
+ 'moved_category_deleted' => ' هنگامی که یک دسته را حذف می کنید',
+ 'mute' => ' بی صدا',
+ 'no_selected' => ' هیچ خوراکی انتخاب نشده است.',
+ 'number_entries' => ' %d مقاله',
+ 'priority' => array(
+ '_' => ' دید',
+ 'archived' => ' نشان داده نشود (بایگانی شده)',
+ 'main_stream' => ' نمایش در جریان اصلی',
+ 'normal' => ' نمایش در دسته بندی خود',
+ ),
+ 'proxy' => ' یک پروکسی برای واکشی این فید تنظیم کنید',
+ 'proxy_help' => ' یک پروتکل (به عنوان مثال: SOCKS5) انتخاب کنید و آدرس پراکسی را وارد کنید (به عنوان مثال: <kbd>127.0.0.1:1080</kbd>)',
+ 'selector_preview' => array(
+ 'show_raw' => ' نمایش کد منبع',
+ 'show_rendered' => 'نمایش محتوا',
+ ),
+ 'show' => array(
+ 'all' => ' نمایش همه فیدها',
+ 'error' => ' نمایش فقط فیدهای دارای خطا',
+ ),
+ 'showing' => array(
+ 'error' => ' نمایش فقط فیدهای دارای خطا',
+ ),
+ 'ssl_verify' => ' امنیت SSL را تأیید کنید',
+ 'stats' => ' آمار',
+ 'think_to_add' => ' می توانید چند فید اضافه کنید.',
+ 'timeout' => ' تایم اوت در ثانیه',
+ 'title' => ' عنوان',
+ 'title_add' => ' یک فید RSS اضافه کنید',
+ 'ttl' => ' به‌طور خودکار بیشتر از آن رفرش نکنید',
+ 'url' => ' URL فید',
+ 'useragent' => ' عامل کاربر را برای واکشی این فید تنظیم کنید',
+ 'useragent_help' => ' مثال: <kbd>Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)</kbd>',
+ 'validator' => ' اعتبار خوراک را بررسی کنید',
+ 'website' => ' آدرس وب سایت',
+ 'websub' => ' اطلاع رسانی فوری با WebSub',
+ ),
+ 'import_export' => array(
+ 'export' => ' صادرات',
+ 'export_labelled' => ' مقالات برچسب دار خود را صادر کنید',
+ 'export_opml' => ' لیست صادرات فیدها (OPML)',
+ 'export_starred' => ' موارد دلخواه خود را صادر کنید',
+ 'feed_list' => ' فهرست %s مقاله',
+ 'file_to_import' => ' فایل برای وارد کردن<br />(OPML',
+ 'file_to_import_no_zip' => ' فایل برای وارد کردن<br /> (OPML یا JSON)',
+ 'import' => 'واردات',
+ 'starred_list' => ' فهرست مقالات مورد علاقه',
+ 'title' => ' واردات / صادرات',
+ ),
+ 'menu' => array(
+ 'add' => ' یک فید یا دسته اضافه کنید',
+ 'import_export' => ' واردات / صادرات',
+ 'label_management' => ' مدیریت برچسب',
+ 'stats' => array(
+ 'idle' => ' تغذیه بیکار',
+ 'main' => ' آمار اصلی',
+ 'repartition' => ' تقسیم مجدد مقالات',
+ ),
+ 'subscription_management' => ' مدیریت اشتراک',
+ 'subscription_tools' => 'ابزارهای اشتراک',
+ ),
+ 'tag' => array(
+ 'name' => ' نام',
+ 'new_name' => ' نام جدید',
+ 'old_name' => ' نام قدیمی',
+ ),
+ 'title' => array(
+ '_' => ' مدیریت اشتراک',
+ 'add' => ' یک فید یا دسته اضافه کنید',
+ 'add_category' => ' یک دسته اضافه کنید',
+ 'add_dynamic_opml' => ' OPML پویا را اضافه کنید',
+ 'add_feed' => ' یک فید اضافه کنید',
+ 'add_label' => ' یک برچسب اضافه کنید',
+ 'delete_label' => ' یک برچسب را حذف کنید',
+ 'feed_management' => ' فیدهای RSS را مدیریت می کندment',
+ 'rename_label' => ' نام یک برچسب را تغییر دهید',
+ 'subscription_tools' => 'ابزارهای اشتراک',
+ ),
+);
diff --git a/app/i18n/fa/user.php b/app/i18n/fa/user.php
new file mode 100644
index 000000000..a15647620
--- /dev/null
+++ b/app/i18n/fa/user.php
@@ -0,0 +1,54 @@
+<?php
+
+/******************************************************************************/
+/* Each entry of that file can be associated with a comment to indicate its */
+/* state. When there is no comment, it means the entry is fully translated. */
+/* The recognized comments are (comment matching is case-insensitive): */
+/* + TODO: the entry has never been translated. */
+/* + DIRTY: the entry has been translated but needs to be updated. */
+/* + IGNORE: the entry does not need to be translated. */
+/* When a comment is not recognized, it is discarded. */
+/******************************************************************************/
+
+return array(
+ 'email' => array(
+ 'feedback' => array(
+ 'invalid' => ' این آدرس ایمیل نامعتبر است.',
+ 'required' => ' یک آدرس ایمیل مورد نیاز است.',
+ ),
+ 'validation' => array(
+ 'change_email' => ' می‌توانید آدرس ایمیل خود را <a href="%s">در صفحه نمایه</a> تغییر دهید.',
+ 'email_sent_to' => ' ما یک ایمیل برای شما به آدرس <strong>%s</strong> ارسال کردیم. لطفاً دستورالعمل های آن را برای تأیید اعتبار آدرس خود دنبال کنید.',
+ 'feedback' => array(
+ 'email_failed' => ' به دلیل یک خطای پیکربندی سرور نتوانستیم برای شما ایمیل ارسال کنیم.',
+ 'email_sent' => ' یک ایمیل به آدرس شما ارسال شده است.',
+ 'error' => ' اعتبار آدرس ایمیل ناموفق بود.',
+ 'ok' => ' این آدرس ایمیل تایید شده است.',
+ 'unnecessary' => ' این آدرس ایمیل قبلاً تأیید شده است.',
+ 'wrong_token' => ' این آدرس ایمیل به دلیل یک توکن اشتباه تأیید نشد.',
+ ),
+ 'need_to' => ' قبل از اینکه بتوانید از %s استفاده کنید',
+ 'resend_email' => ' ایمیل را دوباره ارسال کنید',
+ 'title' => ' اعتبار سنجی آدرس ایمیل',
+ ),
+ ),
+ 'mailer' => array(
+ 'email_need_validation' => array(
+ 'body' => ' شما به تازگی در %s ثبت نام کرده اید',
+ 'title' => ' باید حساب خود را تأیید کنید',
+ 'welcome' => ' خوش آمدید %s',
+ ),
+ ),
+ 'password' => array(
+ 'invalid' => ' رمز عبور نامعتبر است.',
+ ),
+ 'tos' => array(
+ 'feedback' => array(
+ 'invalid' => ' برای اینکه بتوانید ثبت نام کنید باید شرایط خدمات را بپذیرید.',
+ ),
+ ),
+ 'username' => array(
+ 'invalid' => ' این نام کاربری نامعتبر است.',
+ 'taken' => ' این نام کاربری',
+ ),
+);
diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php
index e1f0feb1d..b068995c7 100644
--- a/app/i18n/fr/gen.php
+++ b/app/i18n/fr/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php
index 01adc9a9e..f11c6c02a 100644
--- a/app/i18n/he/gen.php
+++ b/app/i18n/he/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/id/gen.php b/app/i18n/id/gen.php
index 80228677d..db6dcb97d 100644
--- a/app/i18n/id/gen.php
+++ b/app/i18n/id/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php
index 7376f8265..709f2a0a5 100644
--- a/app/i18n/it/gen.php
+++ b/app/i18n/it/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php
index d52cb5217..3d35adbd9 100644
--- a/app/i18n/ja/gen.php
+++ b/app/i18n/ja/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php
index e3ed5754c..e5a842375 100644
--- a/app/i18n/ko/gen.php
+++ b/app/i18n/ko/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/lv/gen.php b/app/i18n/lv/gen.php
index 96701c043..70e6f6191 100644
--- a/app/i18n/lv/gen.php
+++ b/app/i18n/lv/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php
index 4fd88f546..d7eb7f565 100644
--- a/app/i18n/nl/gen.php
+++ b/app/i18n/nl/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php
index c4af26737..ee649c506 100644
--- a/app/i18n/oc/gen.php
+++ b/app/i18n/oc/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php
index 83c423464..c4d4c338a 100644
--- a/app/i18n/pl/gen.php
+++ b/app/i18n/pl/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php
index d705fe180..9e9200833 100644
--- a/app/i18n/pt-br/gen.php
+++ b/app/i18n/pt-br/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php
index 86ae0273d..01b1d68ce 100644
--- a/app/i18n/ru/gen.php
+++ b/app/i18n/ru/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php
index 980869cb6..3900fdcd3 100644
--- a/app/i18n/sk/gen.php
+++ b/app/i18n/sk/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php
index 8b298fa56..707b58ea8 100644
--- a/app/i18n/tr/gen.php
+++ b/app/i18n/tr/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php
index 155671978..0cb9696cf 100644
--- a/app/i18n/zh-cn/gen.php
+++ b/app/i18n/zh-cn/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE
diff --git a/app/i18n/zh-tw/gen.php b/app/i18n/zh-tw/gen.php
index 1f0a0aff4..ef3a8cf18 100644
--- a/app/i18n/zh-tw/gen.php
+++ b/app/i18n/zh-tw/gen.php
@@ -144,6 +144,7 @@ return array(
'en' => 'English', // IGNORE
'en-us' => 'English (United States)', // IGNORE
'es' => 'Español', // IGNORE
+ 'fa' => 'فارسی', // IGNORE
'fr' => 'Français', // IGNORE
'he' => 'עברית', // IGNORE
'id' => 'Bahasa Indonesia', // IGNORE