From 68ac691de7e45e1d3612e42ddd24474710ef9eb3 Mon Sep 17 00:00:00 2001 From: Goudarz Jafari Date: Fri, 6 Feb 2026 10:24:23 +0330 Subject: [PATCH 1/7] feat(i18n): add Persian translations --- static/locales/fa.json | 297 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100644 static/locales/fa.json diff --git a/static/locales/fa.json b/static/locales/fa.json new file mode 100644 index 00000000..d03040e1 --- /dev/null +++ b/static/locales/fa.json @@ -0,0 +1,297 @@ +{ + "app": { + "title": "OxiCloud", + "description": "سیستم ذخیره‌سازی ابری ساده‌گرا" + }, + "nav": { + "files": "پرونده‌ها", + "shared": "هم‌رسانی شده", + "recent": "اخیر", + "favorites": "موردعلاقه‌ها", + "trash": "سطل زباله" + }, + "actions": { + "search": "جست‌و‌جوی پرونده‌ها..", + "new_folder": "پوشهٔ جدید", + "upload": "بارگذاری", + "rename": "تغییر نام", + "move": "انتقال به...", + "move_to": "انتقال به", + "delete": "حذف", + "download": "بارگیری", + "view": "مشاهده", + "cancel": "لغو", + "confirm": "تأیید", + "share": "هم‌رسانی", + "copy": "رونوشت", + "notify": "آگاه‌سازی", + "send": "ارسال", + "clear_recent": "پاک‌کردن موارد اخیر", + "logout": "خروج", + "create": "ایجاد", + "search_btn": "جست‌و‌جو" + }, + "share": { + "dialogTitle": "پیوند هم‌رسانی", + "linkLabel": "پیوند هم‌سانی:", + "copyLink": "رونوشت", + "permissions": "دسترسی‌ها:", + "permissionRead": "خواندن", + "permissionWrite": "نوشتن", + "permissionReshare": "هم‌رسانی دوباره", + "password": "محافظت با گذرواژه:", + "generatePassword": "تولید", + "expiration": "تاریخ انقضا:", + "update": "به‌روزرسانی هم‌رسانی", + "remove": "پاک‌کردن هم‌رسانی", + "notifyTitle": "ارسال آگاه‌سازی", + "notifyEmailLabel": "نشانی رایانامه:", + "notifyMessageLabel": "پیام (اختیاری):", + "notifySend": "ارسال آگاه‌سازی", + "shareWithOthers": "هم‌رسانی با دیگران", + "sharePublicly": "هم‌رسانی عمومی", + "shareSettings": "تنظیمات هم‌رسانی", + "shareCopied": "پیوند به بُریده‌دان رونوشت شد", + "shareCreated": "پیوند هم‌رسانی با موفقیت ایجاد شد", + "shareUpdated": "تنظیمات هم‌رسانی با موفقیت به‌روزرسانی شد", + "shareRemoved": "هم‌رسانی با موفقیت پاک شد" + }, + "share_dialogTitle": "پیوند هم‌رسانی", + "share_linkLabel": "پیوند هم‌رسانی:", + "share_copyLink": "رونوشت", + "share_permissions": "دسترسی‌ها:", + "share_permissionRead": "خواندن", + "share_permissionWrite": "نوشتن", + "share_permissionReshare": "هم‌رسانی دوباره", + "share_password": "محافظت با گذرواژه:", + "share_generatePassword": "تولید", + "share_expiration": "تاریخ انقضا:", + "share_update": "به‌روزرسانی هم‌رسانی", + "share_remove": "پاک‌کردن هم‌رسانی", + "share_notifyTitle": "ارسال آگاه‌سازی", + "share_notifyEmailLabel": "نشانی رایانامه:", + "share_notifyMessageLabel": "پیام (اختیاری):", + "share_notifySend": "ارسال آگاه‌سازی", + "shared": { + "backToFiles": "بازگشت به پرونده‌ها", + "pageTitle": "منابع هم‌رسانی شده", + "pageDescription": "مدیریت پرونده‌ها و پوشه‌های هم‌رسانی شده شما", + "filterType": "نوع:", + "filterAll": "همه", + "filterFiles": "پرونده‌ها", + "filterFolders": "پوشه‌ها", + "sortBy": "مرتب‌سازی بر اساس:", + "sortByName": "نام", + "sortByDate": "تاریخ هم‌رسانی", + "sortByExpiration": "تاریخ انقضا", + "search": "جست‌و‌جو", + "colName": "نام", + "colType": "نوع", + "colDateShared": "تاریخ هم‌رسانی", + "colExpiration": "تاریخ انقضا", + "colPermissions": "دسترسی‌ها", + "colPassword": "گذرواژه", + "colActions": "عملیات", + "emptyStateTitle": "هنوز هیچ منبعی هم‌رسانی نشده است", + "emptyStateDesc": "وقتی پرونده‌ها یا پوشه‌ها را هم‌رسانی کنید، اینجا نمایش داده می‌شوند", + "goToFiles": "رفتن به پرونده‌ها", + "typeFile": "پرونده", + "typeFolder": "پوشه", + "noExpiration": "بدون انقضا", + "hasPassword": "بله", + "noPassword": "خیر", + "editShare": "ویرایش هم‌رسانی", + "notifyShare": "آگاه‌سازی کسی", + "copyLink": "رونوشت پیوند", + "removeShare": "حذف هم‌رسانی", + "linkCopied": "پیوند به بُریده‌دان رونوشت شد", + "linkCopyFailed": "رونوشت پیوند ناموفق بود", + "itemUpdated": "تنظیمات هم‌رسانی با موفقیت به‌روزرسانی شد", + "itemRemoved": "هم‌رسانی با موفقیت پاک شد", + "invalidEmail": "لطفا یک نشانی رایانامه معتبر وارد کنید", + "notificationSent": "آگاه‌سازی با موفقیت ارسال شد", + "notificationFailed": "ارسال آگاه‌سازی ناموفق بود", + "shared_backToFiles": "بازگشت به پرونده‌ها", + "shared_pageTitle": "منابع هم‌رسانی شده", + "shared_pageDescription": "مدیریت پرونده‌ها و پوشه‌های هم‌رسانی شده شما", + "shared_filterType": "نوع:", + "shared_filterAll": "همه", + "shared_filterFiles": "پرونده‌ها", + "shared_filterFolders": "پوشه‌ها", + "shared_sortBy": "مرتب‌سازی بر اساس:", + "shared_sortByName": "نام", + "shared_sortByDate": "تاریخ هم‌رسانی", + "shared_sortByExpiration": "تاریخ انقضا", + "shared_search": "جست‌و‌جو", + "shared_colName": "نام", + "shared_colType": "نوع", + "shared_colDateShared": "تاریخ هم‌رسانی", + "shared_colExpiration": "تاریخ انقضا", + "shared_colPermissions": "دسترسی‌ها", + "shared_colPassword": "گذرواژه", + "shared_colActions": "عملیات", + "shared_emptyStateTitle": "هنوز هیچ منبعی هم‌رسانی نشده است", + "shared_emptyStateDesc": "وقتی پرونده‌ها یا پوشه‌ها را هم‌رسانی کنید، اینجا نمایش داده می‌شوند", + "shared_goToFiles": "رفتن به پرونده‌ها", + "shared_typeFile": "پرونده", + "shared_typeFolder": "پوشه", + "shared_noExpiration": "بدون انقضا", + "shared_hasPassword": "بله", + "shared_noPassword": "خیر", + "shared_editShare": "ویرایش هم‌رسانی", + "shared_notifyShare": "آگاه‌سازی کسی", + "shared_copyLink": "رونوشت پیوند", + "shared_removeShare": "حذف هم‌رسانی", + "shared_linkCopied": "پیوند به بُریده‌دان رونوشت شد", + "shared_linkCopyFailed": "رونوشت پیوند ناموفق بود", + "shared_itemUpdated": "تنظیمات هم‌رسانی با موفقیت به‌روزرسانی شد", + "shared_itemRemoved": "هم‌رسانی با موفقیت پاک شد", + "shared_invalidEmail": "لطفا یک نشانی رایانامه معتبر وارد کنید", + "shared_notificationSent": "آگاه‌سازی با موفقیت ارسال شد", + "shared_notificationFailed": "ارسال آگاه‌سازی ناموفق بود" + }, + "files": { + "name": "نام", + "type": "نوع", + "size": "اندازه", + "modified": "تاریخ تغییر", + "no_files": "هنوز هیچ پرونده‌ای در این پوشه وجود ندارد", + "view_grid": "نمای شبکه‌ای", + "view_list": "نمای فهرستی", + "file_types": { + "document": "سند", + "image": "تصویر", + "video": "ویدیو", + "audio": "صوتی", + "pdf": "PDF", + "text": "متن", + "folder": "پوشه" + } + }, + "dialogs": { + "rename_folder": "تغییر نام پوشه", + "new_name": "نام جدید", + "new_folder_title": "پوشه جدید", + "folder_name": "نام پوشه", + "folder_placeholder": "پوشه من", + "rename_title": "تغییر نام", + "move_file": "انتقال پرونده", + "select_destination": "انتخاب پوشهٔ مقصد", + "root": "ریشه", + "delete_confirmation": "آیا مطمئن هستید که می‌خواهید حذف کنید", + "and_contents": "و همهٔ محتویات آن", + "no_undo": "این عملیات قابل بازگردانی نیست", + "share_file": "هم‌رسانی پرونده", + "existing_shares": "هم‌رسانی موجود", + "share_options": "گزینه‌های هم‌رسانی", + "password": "گذرواژه", + "expiration": "تاریخ انقضا", + "permissions": "دسترسی‌ها", + "generated_link": "پیوند تولید شده", + "notify": "ارسال آگاه‌سازی", + "recipient": "گیرنده", + "message": "پیام" + }, + "dropzone": { + "drag_files": "پرونده‌ها را اینجا بکشید یا برای انتخاب کلیک کنید", + "drop_files": "پرونده‌ها را رها کنید تا بارگذاری شوند" + }, + "permissions": { + "read": "خواندن", + "write": "نوشتن", + "reshare": "هم‌رسانی دوباره" + }, + "errors": { + "file_not_found": "پرونده پیدا نشد", + "folder_not_found": "پوشه پیدا نشد", + "delete_error": "خطا در پاک کردن", + "upload_error": "خطا در بارگذاری پرونده", + "rename_error": "خطا در تغییر نام", + "move_error": "خطا در انتقال", + "empty_name": "نام نمی‌تواند خالی باشد", + "name_exists": "پرونده یا پوشه‌ای با این نام قبلا وجود دارد", + "generic_error": "خطایی رخ داده است" + }, + "breadcrumb": { + "home": "صفحه اصلی" + }, + "trash": { + "empty_trash": "خالی کردن سطل زباله", + "empty_state": "سطل زباله خالی است", + "original_location": "محل اصلی", + "deleted_date": "تاریخ حذف", + "actions": "عملیات", + "restore": "بازیابی", + "delete_permanently": "حذف دائمی", + "empty_confirm": "آیا مطمئن هستید که می‌خواهید سطل زباله را خالی کنید؟ این کار همهٔ موارد را به‌طور دائمی حذف خواهد کرد." + }, + "auth": { + "login_title": "ورود", + "username": "نام‌کاربری", + "username_placeholder": "نام‌کاربری خود را وارد کنید", + "password": "گذرواژه", + "password_placeholder": "گذرواژه خود را وارد کنید", + "login_button": "ورود", + "no_account": "حساب کاربری ندارید؟", + "register": "نام‌نویسی", + "admin_setup": "اولین بار است؟", + "setup": "راه‌اندازی اولیه مدیریت", + "register_title": "ایجاد حساب کاربری", + "email": "رایانامه", + "email_placeholder": "رایانامه خود را وارد کنید", + "confirm_password": "تأیید گذرواژه", + "confirm_password_placeholder": "گذرواژه خود را تأیید کنید", + "register_button": "ایجاد حساب کاربری", + "have_account": "حساب کاربری دارید؟", + "login": "ورود", + "setup_title": "راه‌اندازی اولیه", + "setup_step1": "مدیر", + "setup_step2": "سیستم", + "setup_step3": "تکمیل", + "admin_username": "نام‌کاربری مدیر", + "admin_email": "رایانامه مدیر", + "admin_password": "گذرواژه مدیر", + "create_admin": "ایجاد مدیر", + "back_to_login": "قبلا راه‌اندازی شده است؟", + "admin_success": "حساب کاربری مدیر با موفقیت ایجاد شد! اکنون می‌توانید وارد شوید.", + "account_success": "حساب کاربری با موفقیت ایجاد شد! اکنون می‌توانید وارد شوید.", + "passwords_mismatch": "گذرواژه‌ها مطابقت ندارند", + "admin_create_error": "خطا در ایجاد حساب کاربری مدیر" + }, + "storage": { + "title": "فضای ذخیره‌سازی", + "calculating": "در حال محاسبه...", + "used": "{{percentage}}% استفاده شده ({{used}} / {{total}})" + }, + "viewer": { + "unsupported_file": "این نوع پرونده قابل پیش‌نمایش نیست.", + "download_file": "بارگیری پرونده", + "zoom_in": "بزرگ‌نمایی", + "zoom_out": "کوچک‌نمایی", + "zoom_reset": "بازنشانی بزرگ‌نمایی" + }, + "language_selector": { + "title": "خوش آمدید به OxiCloud", + "subtitle": "لطفا زبان خود را انتخاب کنید", + "continue": "ادامه", + "languages": { + "en": "English", + "es": "Español", + "zh": "中文", + "fa": "فارسی" + } + }, + "favorites": { + "empty_state": "هنوز هیچ مورد علاقه‌ای وجود ندارد", + "empty_hint": "برای افزودن به موارد علاقه‌مند، پرونده‌ها یا پوشه‌ها را ستاره‌دار کنید", + "add": "افزودن به موارد علاقه‌مند", + "remove": "حذف از موارد علاقه‌مند" + }, + "recent": { + "title": "اخیر", + "clear": "پاک کردن اخیر", + "accessed": "دسترسی یافته", + "empty_state": "هنوز هیچ پروندهٔ اخیر وجود ندارد", + "empty_hint": "پرونده‌هایی که باز می‌کنید اینجا ظاهر می‌شوند" + } +} \ No newline at end of file From 421f354a8ea99f82bc611d2511bf55b79834237f Mon Sep 17 00:00:00 2001 From: Goudarz Jafari Date: Fri, 6 Feb 2026 10:28:32 +0330 Subject: [PATCH 2/7] feat(i18n): add Persian(fa) to language list --- static/js/languageSelector.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/static/js/languageSelector.js b/static/js/languageSelector.js index c3d15135..4f418f81 100644 --- a/static/js/languageSelector.js +++ b/static/js/languageSelector.js @@ -7,7 +7,8 @@ const languages = [ { code: 'en', name: 'English', flag: '🇬🇧' }, { code: 'es', name: 'Español', flag: '🇪🇸' }, - { code: 'zh', name: '中文', flag: '🇨🇳' } + { code: 'zh', name: '中文', flag: '🇨🇳' }, + { code: 'fa', name: 'فارسی', flag: '🦁' } ]; /** From 65aeefd508380cc25bf80cd6a5cc62503ddb5f86 Mon Sep 17 00:00:00 2001 From: Goudarz Jafari Date: Fri, 6 Feb 2026 10:29:05 +0330 Subject: [PATCH 3/7] feat(i18n): add Persian(fa) to language list --- static/locales/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/static/locales/en.json b/static/locales/en.json index 9f248edc..75174688 100644 --- a/static/locales/en.json +++ b/static/locales/en.json @@ -277,7 +277,8 @@ "languages": { "en": "English", "es": "Español", - "zh": "中文" + "zh": "中文", + "fa": "فارسی" } }, "favorites": { From 7008c22c12d7b35bdb7ab211b964f8e074921520 Mon Sep 17 00:00:00 2001 From: Goudarz Jafari Date: Fri, 6 Feb 2026 10:29:13 +0330 Subject: [PATCH 4/7] feat(i18n): add Persian(fa) to language list --- static/locales/es.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/static/locales/es.json b/static/locales/es.json index 7e221514..27c46c88 100644 --- a/static/locales/es.json +++ b/static/locales/es.json @@ -277,7 +277,8 @@ "languages": { "en": "English", "es": "Español", - "zh": "中文" + "zh": "中文", + "fa": "فارسی" } }, "favorites": { From fac45c4d44700638d99837dbb1a22096e53b12c1 Mon Sep 17 00:00:00 2001 From: Goudarz Jafari Date: Fri, 6 Feb 2026 10:29:19 +0330 Subject: [PATCH 5/7] feat(i18n): add Persian(fa) to language list --- static/locales/zh.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/static/locales/zh.json b/static/locales/zh.json index 0dcddbb5..d8bb687c 100644 --- a/static/locales/zh.json +++ b/static/locales/zh.json @@ -239,7 +239,8 @@ "languages": { "en": "English", "es": "Español", - "zh": "中文" + "zh": "中文", + "fa": "فارسی" } }, "favorites": { From 2c5c67311e393c3964cdce340dd16253793098e5 Mon Sep 17 00:00:00 2001 From: Goudarz Jafari Date: Fri, 6 Feb 2026 10:30:26 +0330 Subject: [PATCH 6/7] feat(i18n): add Persian(fa) to language list --- static/js/i18n.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/js/i18n.js b/static/js/i18n.js index 6da8c004..4be868d9 100644 --- a/static/js/i18n.js +++ b/static/js/i18n.js @@ -12,7 +12,7 @@ let currentLocale = 'en'; // Supported locales -const supportedLocales = ['en', 'es', 'zh']; +const supportedLocales = ['en', 'es', 'zh', 'fa']; // Fallback to English if locale is not supported if (!supportedLocales.includes(currentLocale)) { From f9cac2037dadbbde977c43b07049f6e5e896b09f Mon Sep 17 00:00:00 2001 From: Goudarz Jafari Date: Fri, 6 Feb 2026 10:31:48 +0330 Subject: [PATCH 7/7] docs(i18n): document Persian(fa) language support --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d8c4336b..aac5cb8e 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ NextCloud was too slow on my home server. So I built OxiCloud: a file storage sy | **Fast** | Rust with LTO optimization. Sub-second responses. | | **Clean UI** | Works on desktop and mobile. No clutter. | | **Easy setup** | One binary, one database, done. | -| **Multi-language** | English and Spanish out of the box. | +| **Multi-language** | English, Spanish and Persian out of the box. | ## Quick Start