mirror of
https://github.com/garethgeorge/backrest.git
synced 2026-09-26 18:05:34 +00:00
feat: localization support
This commit is contained in:
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"inlang.vs-code-extension"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"$schema": "https://inlang.com/schema/inlang-message-format",
|
||||
"example_message": "مرحباً بالعالم {username}",
|
||||
"add_plan_modal_error_template_not_found": "لم يتم العثور على القالب",
|
||||
"add_plan_modal_error_plan_delete_not_found": "فشل تحديث الإعدادات، ولم يتم العثور على خطة الحذف",
|
||||
"add_plan_modal_success_plan_deleted": "تم حذف الخطة من ملف الإعدادات، ولكن ليس من مستودع restic. ستبقى اللقطات في وحدة التخزين، وسيتم تتبع العمليات حتى يتم حذفها يدويًا. لا يُنصح بإعادة استخدام مُعرّف خطة محذوفة إذا تم إجراء نسخ احتياطية مسبقًا.",
|
||||
"add_plan_modal_error_destroy_prefix": "خطأ في التدمير:",
|
||||
"add_plan_modal_error_operation_prefix": "خطأ في العملية: ",
|
||||
"add_plan_modal_title_update": "خطة التحديث",
|
||||
"add_plan_modal_title_add": "إضافة خطة",
|
||||
"add_plan_modal_button_cancel": "يلغي",
|
||||
"add_plan_modal_button_delete": "يمسح",
|
||||
"add_plan_modal_button_confirm_delete": "تأكيد الحذف",
|
||||
"add_plan_modal_button_submit": "يُقدِّم",
|
||||
"add_plan_modal_field_plan_name": "اسم الخطة",
|
||||
"add_plan_modal_field_plan_name_tooltip": "معرّف فريد يُحدد هذه الخطة في واجهة المستخدم الخلفية (مثلاً s3-myplan). لا يمكن تغيير هذا المعرّف بعد الإنشاء.",
|
||||
"add_plan_modal_validation_plan_name_required": "يرجى إدخال اسم الخطة",
|
||||
"add_plan_modal_validation_plan_exists": "خطة بهذا الاسم موجودة بالفعل",
|
||||
"add_plan_modal_validation_plan_name_pattern": "يجب أن يكون الاسم أبجديًا رقميًا مع استخدام الشرطات أو الشرطات السفلية كفواصل.",
|
||||
"add_plan_modal_field_repository": "مستودع",
|
||||
"add_plan_modal_field_repository_tooltip": "المستودع الذي سيخزن فيه برنامج Backrest لقطاتك.",
|
||||
"add_plan_modal_validation_repository_required": "الرجاء اختيار المستودع",
|
||||
"add_plan_modal_field_paths": "المسارات",
|
||||
"add_plan_modal_field_paths_tooltip": "أدخل مسارات الملفات المراد نسخها احتياطياً، مسار واحد في كل سطر. تتوفر ميزة الإكمال التلقائي أثناء الكتابة.",
|
||||
"add_plan_modal_validation_paths_required": "يرجى إدخال مسار واحد على الأقل للنسخ الاحتياطي",
|
||||
"add_plan_modal_validation_paths_valid_required": "يرجى إدخال مسار واحد صالح على الأقل للنسخ الاحتياطي",
|
||||
"add_plan_modal_field_paths_placeholder": "أدخل المسارات، مسار واحد في كل سطر\nمثال\n/home/user/documents\n/home/user/photos",
|
||||
"add_plan_modal_field_excludes": "باستثناء",
|
||||
"add_plan_modal_field_excludes_tooltip_prefix": "المسارات التي يجب استبعادها من النسخ الاحتياطية. راجع ",
|
||||
"add_plan_modal_field_excludes_tooltip_link": "أطباء ريستيك",
|
||||
"add_plan_modal_field_excludes_tooltip_suffix": " للمزيد من المعلومات.",
|
||||
"add_plan_modal_field_excludes_add": "إضافة استثناء Glob",
|
||||
"add_plan_modal_field_iexcludes": "يستثني (غير حساس لحالة الأحرف)",
|
||||
"add_plan_modal_field_iexcludes_tooltip_prefix": "مسارات غير حساسة لحالة الأحرف لاستبعادها من النسخ الاحتياطية. راجع ",
|
||||
"add_plan_modal_field_iexcludes_add": "إضافة استثناء غير حساس لحالة الأحرف",
|
||||
"add_plan_modal_field_schedule": "جدول النسخ الاحتياطي",
|
||||
"add_plan_modal_field_backup_flags": "علامات النسخ الاحتياطي",
|
||||
"add_plan_modal_field_backup_flags_tooltip": "خيارات إضافية لإضافتها إلى أمر \"النسخ الاحتياطي للشبكة\"",
|
||||
"add_plan_modal_field_backup_flags_add": "تعيين العلم",
|
||||
"add_plan_modal_validation_flag_pattern": "يجب أن تكون القيمة علامة سطر أوامر، على سبيل المثال انظر restic backup --help",
|
||||
"add_plan_modal_preview_json": "تكوين الخطة بصيغة JSON",
|
||||
"add_plan_modal_see_guide_prefix": "يرى ",
|
||||
"add_plan_modal_see_guide_link": "دليل البدء السريع لاستخدام مسند الظهر",
|
||||
"add_plan_modal_see_guide_suffix": " للحصول على تعليمات حول تكوين الخطة.",
|
||||
"add_plan_modal_field_hooks": "خطافات",
|
||||
"settings_success_updated": "تم تحديث الإعدادات",
|
||||
"settings_error_operation": "خطأ في العملية: ",
|
||||
"button_cancel": "يلغي",
|
||||
"button_close": "يغلق",
|
||||
"button_save": "يحفظ",
|
||||
"settings_initial_setup_title": "الإعداد الأولي لمسند الظهر! ",
|
||||
"settings_initial_setup_message": "لقد اكتشف برنامج Backrest أنه ليس لديك أي مستخدمين مُهيئين، يُرجى إضافة مستخدم واحد على الأقل لتأمين واجهة الويب.",
|
||||
"settings_initial_setup_hint": "يمكنك إضافة المزيد من المستخدمين لاحقًا، أو إذا نسيت كلمة المرور الخاصة بك، يمكنك إعادة تعيين المستخدمين عن طريق تعديل ملف التكوين (عادةً ما يكون في $HOME/.backrest/config.json).",
|
||||
"settings_field_instance_id": "معرّف المثيل",
|
||||
"settings_validation_instance_id_required": "معرف المثيل مطلوب",
|
||||
"settings_validation_instance_id_pattern": "يجب أن يكون مُعرّف المثيل أبجديًا رقميًا مع السماح باستخدام '_-.' كفواصل",
|
||||
"settings_field_instance_id_tooltip": "سيُستخدم اسم المثيل لتحديد تثبيت مسند الظهر هذا. اختر قيمة بعناية لأنه لا يمكن تغييرها لاحقًا.",
|
||||
"settings_field_instance_id_placeholder": "معرّف فريد لهذه النسخة (مثلاً my-backrest-server)",
|
||||
"settings_section_authentication": "المصادقة",
|
||||
"settings_section_multihost": "الهوية والمشاركة متعددة المضيفين",
|
||||
"settings_section_preview": "معاينة",
|
||||
"settings_auth_disable": "تعطيل المصادقة",
|
||||
"settings_auth_users": "المستخدمون",
|
||||
"settings_auth_name_required": "الاسم مطلوب",
|
||||
"settings_auth_name_pattern": "يجب أن يكون الاسم أبجديًا رقميًا مع استخدام الشرطات أو الشرطات السفلية كفواصل.",
|
||||
"settings_auth_username_placeholder": "اسم المستخدم",
|
||||
"settings_auth_password_required": "كلمة المرور مطلوبة",
|
||||
"settings_auth_password_placeholder": "كلمة المرور",
|
||||
"settings_auth_add_user": "إضافة مستخدم",
|
||||
"settings_multihost_intro": "تتيح لك خاصية الهوية متعددة المضيفين مشاركة المستودعات بين عدة نسخ من Backrest. وهذا مفيد لتتبع حالة النسخ الاحتياطي لمجموعة من الأنظمة.",
|
||||
"settings_multihost_warning": "تحذير: هذه الميزة تجريبية للغاية وقد تخضع لتغييرات غير متوافقة مع الإصدارات في المستقبل، مما سيتطلب تحديث جميع النسخ في نفس الوقت.",
|
||||
"settings_multihost_identity": "هوية متعددة المضيفين",
|
||||
"settings_multihost_identity_required": "يلزم وجود هوية متعددة المضيفين",
|
||||
"settings_multihost_identity_tooltip": "تُستخدم هوية المضيف المتعدد لتحديد هذه النسخة في بيئة متعددة المضيفين. وهي مشتقة تشفيرياً من المفتاح العام لهذه النسخة.",
|
||||
"settings_multihost_identity_placeholder": "هوية فريدة متعددة المضيفين",
|
||||
"button_copy": "ينسخ",
|
||||
"settings_multihost_authorized_clients": "العملاء المعتمدون",
|
||||
"settings_multihost_authorized_clients_tooltip": "العملاء المعتمدون هم مثيلات Backrest الأخرى المسموح لها بالوصول إلى المستودعات على هذا المثيل.",
|
||||
"settings_multihost_authorized_client_item": "العميل المعتمد",
|
||||
"settings_multihost_known_hosts": "المضيفون المعروفون",
|
||||
"settings_multihost_known_hosts_tooltip": "المضيفون المعروفون هم مثيلات Backrest الأخرى التي يمكن لهذا المثيل الاتصال بها.",
|
||||
"settings_multihost_known_host_item": "المضيف المعروف",
|
||||
"settings_peer_instance_id": "معرّف المثيل",
|
||||
"settings_peer_instance_id_placeholder": "مثال: خادم النسخ الاحتياطي الخاص بي",
|
||||
"settings_peer_key_id": "معرف المفتاح",
|
||||
"settings_peer_key_id_required": "يلزم وجود معرف المفتاح",
|
||||
"settings_peer_key_id_placeholder": "معرّف المفتاح العام",
|
||||
"settings_peer_verified": "تم التحقق",
|
||||
"settings_peer_instance_url": "عنوان URL للمثيل",
|
||||
"settings_peer_instance_url_required": "عنوان URL الخاص بالمثيل مطلوب للمضيفين المعروفين",
|
||||
"settings_peer_instance_url_pattern": "الرجاء إدخال عنوان URL صالح",
|
||||
"settings_peer_instance_url_placeholder": "https://example.com:9898",
|
||||
"settings_peer_permissions": "الأذونات",
|
||||
"settings_peer_permission_type": "يكتب",
|
||||
"settings_peer_permission_type_required": "نوع الإذن مطلوب",
|
||||
"settings_permission_edit_repo": "تعديل إعدادات المستودع",
|
||||
"settings_permission_read_ops": "عمليات القراءة",
|
||||
"settings_permission_type_placeholder": "حدد نوع الإذن",
|
||||
"settings_peer_permission_scopes": "النطاقات",
|
||||
"settings_peer_permission_scopes_required": "يلزم وجود نطاق واحد على الأقل",
|
||||
"settings_permission_scope_all": "جميع المستودعات (*)",
|
||||
"settings_permission_scope_placeholder": "حدد المستودعات أو استخدم * للجميع",
|
||||
"settings_peer_add_permission": "إضافة إذن",
|
||||
"settings_peer_add_button": "أضف {itemTypeName}",
|
||||
"peer_default_name": "نظير",
|
||||
"repo_error_index": "فشل فهرسة اللقطات: ",
|
||||
"repo_info_unlocking": "جارٍ فتح المستودع...",
|
||||
"repo_success_unlocked": "تم فتح المستودع.",
|
||||
"repo_error_unlock": "فشل فتح المستودع: ",
|
||||
"repo_error_stats": "فشل في حساب الإحصائيات: ",
|
||||
"repo_error_prune": "فشل في عملية التقليم: ",
|
||||
"repo_error_check": "فشل في التحقق: ",
|
||||
"repo_deleted_message": "تم حذف المستودع",
|
||||
"repo_tab_tree": "عرض الشجرة",
|
||||
"repo_tab_list": "عرض القائمة",
|
||||
"repo_history_title": "سجل عمليات النسخ الاحتياطي",
|
||||
"repo_tab_stats": "الإحصائيات",
|
||||
"loading": "تحميل...",
|
||||
"repo_button_run_command": "تشغيل الأمر",
|
||||
"repo_tooltip_run_command": "للمستخدمين المتقدمين: افتحوا نافذة طرفية لـ restic لتنفيذ الأوامر على المستودع. أعيدوا فهرسة اللقطات لتعكس أي تغييرات في Backrest.",
|
||||
"repo_button_index": "لقطات الفهرس",
|
||||
"repo_tooltip_index": "يقوم بفهرسة اللقطات في المستودع. كما يتم فهرسة اللقطات تلقائيًا بعد كل عملية نسخ احتياطي.",
|
||||
"repo_button_unlock": "فتح المستودع",
|
||||
"repo_tooltip_unlock": "يزيل ملفات القفل ويتحقق من وجود أخطاء في المستودع. لا تقم بتشغيله إلا إذا كنت متأكدًا من عدم وصول أي نظام آخر إلى المستودع.",
|
||||
"repo_button_prune": "قم بالتقليم الآن",
|
||||
"repo_tooltip_prune": "يُجري عملية تقليم على المستودع لإزالة اللقطات القديمة وتوفير مساحة تخزين إضافية.",
|
||||
"repo_button_check": "تحقق الآن",
|
||||
"repo_tooltip_check": "يقوم بتشغيل عملية فحص على المستودع للتحقق من سلامة المستودع.",
|
||||
"repo_button_stats": "حساب الإحصائيات",
|
||||
"repo_tooltip_stats": "يقوم بتشغيل إحصائيات restic على المستودع، وقد تكون هذه عملية بطيئة.",
|
||||
"settings_modal_title": "إعدادات",
|
||||
"app_breadcrumb_repo": "مستودع",
|
||||
"app_breadcrumb_peer": "نظير",
|
||||
"app_breadcrumb_plan": "يخطط",
|
||||
"app_breadcrumb_summary": "ملخص",
|
||||
"app_breadcrumb_getting_started": "ابدء",
|
||||
"app_page_not_found": "الصفحة غير موجودة",
|
||||
"app_repo_not_found": "لم يتم العثور على المستودع {repoId}",
|
||||
"app_plan_not_found": "الخطة {planId} غير موجودة",
|
||||
"app_unknown_peer": "نظير مجهول",
|
||||
"app_unknown_repo": "مستودع غير معروف",
|
||||
"app_remote_repo_title": "المستودع البعيد: {id}",
|
||||
"app_logout": "تسجيل الخروج",
|
||||
"app_menu_plans": "الخطط",
|
||||
"app_menu_add_plan": "إضافة خطة",
|
||||
"app_menu_repos": "المستودعات",
|
||||
"app_menu_add_repo": "إضافة مستودع",
|
||||
"app_menu_remote_instances": "النسخ البعيدة",
|
||||
"app_menu_settings": "إعدادات",
|
||||
"app_error_initial_config": "فشل جلب الإعدادات الأولية، وهذا يعني عادةً أن واجهة المستخدم لم تتمكن من الاتصال بالخادم الخلفي.",
|
||||
"login_success": "تم تسجيل الدخول",
|
||||
"login_error": "فشل تسجيل الدخول: ",
|
||||
"login_title": "تسجيل الدخول",
|
||||
"login_username_required": "يرجى إدخال اسم المستخدم الخاص بك",
|
||||
"login_username_placeholder": "اسم المستخدم",
|
||||
"login_password_required": "الرجاء إدخال كلمة المرور الخاصة بك!",
|
||||
"login_password_placeholder": "كلمة المرور",
|
||||
"login_button": "تسجيل الدخول"
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"$schema": "https://inlang.com/schema/inlang-message-format",
|
||||
"example_message": "হ্যালো ওয়ার্ল্ড {username}",
|
||||
"add_plan_modal_error_template_not_found": "টেমপ্লেট পাওয়া যায়নি",
|
||||
"add_plan_modal_error_plan_delete_not_found": "কনফিগারেশন আপডেট করতে ব্যর্থ, মুছে ফেলার পরিকল্পনা পাওয়া যায়নি",
|
||||
"add_plan_modal_success_plan_deleted": "কনফিগারেশন থেকে প্ল্যান মুছে ফেলা হয়েছে, কিন্তু রেস্টিক রেপো থেকে নয়। স্ন্যাপশটগুলি স্টোরেজে থাকবে এবং ম্যানুয়ালি মুছে ফেলা না হওয়া পর্যন্ত ক্রিয়াকলাপগুলি ট্র্যাক করা হবে। যদি ইতিমধ্যেই ব্যাকআপ নেওয়া হয়ে থাকে তবে মুছে ফেলা প্ল্যান আইডি পুনরায় ব্যবহার করার পরামর্শ দেওয়া হয় না।",
|
||||
"add_plan_modal_error_destroy_prefix": "ত্রুটি ধ্বংস করুন:",
|
||||
"add_plan_modal_error_operation_prefix": "অপারেশন ত্রুটি: ",
|
||||
"add_plan_modal_title_update": "পরিকল্পনা আপডেট করুন",
|
||||
"add_plan_modal_title_add": "পরিকল্পনা যোগ করুন",
|
||||
"add_plan_modal_button_cancel": "বাতিল করুন",
|
||||
"add_plan_modal_button_delete": "মুছে ফেলুন",
|
||||
"add_plan_modal_button_confirm_delete": "মুছে ফেলা নিশ্চিত করুন",
|
||||
"add_plan_modal_button_submit": "জমা দিন",
|
||||
"add_plan_modal_field_plan_name": "পরিকল্পনার নাম",
|
||||
"add_plan_modal_field_plan_name_tooltip": "ব্যাকরেস্ট UI-তে এই প্ল্যানটি সনাক্তকারী অনন্য আইডি (যেমন s3-myplan)। তৈরির পরে এটি পরিবর্তন করা যাবে না।",
|
||||
"add_plan_modal_validation_plan_name_required": "দয়া করে পরিকল্পনার নাম লিখুন",
|
||||
"add_plan_modal_validation_plan_exists": "নামের প্ল্যানটি ইতিমধ্যেই বিদ্যমান",
|
||||
"add_plan_modal_validation_plan_name_pattern": "নামটি অবশ্যই আলফানিউমেরিক হতে হবে এবং বিভাজক হিসেবে ড্যাশ বা আন্ডারস্কোর ব্যবহার করতে হবে",
|
||||
"add_plan_modal_field_repository": "সংগ্রহস্থল",
|
||||
"add_plan_modal_field_repository_tooltip": "ব্যাকরেস্টের রেপোতে আপনার স্ন্যাপশটগুলি সংরক্ষণ করা হবে।",
|
||||
"add_plan_modal_validation_repository_required": "অনুগ্রহ করে সংগ্রহস্থল নির্বাচন করুন",
|
||||
"add_plan_modal_field_paths": "পথ",
|
||||
"add_plan_modal_field_paths_tooltip": "ব্যাকআপের জন্য ফাইল পাথ লিখুন, প্রতি লাইনে একটি করে। টাইপ করার সাথে সাথে স্বয়ংসম্পূর্ণতা উপলব্ধ।",
|
||||
"add_plan_modal_validation_paths_required": "ব্যাকআপ নেওয়ার জন্য অন্তত একটি পথ লিখুন।",
|
||||
"add_plan_modal_validation_paths_valid_required": "ব্যাকআপ নেওয়ার জন্য কমপক্ষে একটি বৈধ পথ লিখুন।",
|
||||
"add_plan_modal_field_paths_placeholder": "প্রতি লাইনে একটি করে পাথ লিখুন\nযেমন\n/হোম/ব্যবহারকারী/নথিপত্র\n/হোম/ব্যবহারকারী/ছবি",
|
||||
"add_plan_modal_field_excludes": "বাদ দেয়",
|
||||
"add_plan_modal_field_excludes_tooltip_prefix": "আপনার ব্যাকআপ থেকে বাদ দেওয়ার পথগুলি। দেখুন ",
|
||||
"add_plan_modal_field_excludes_tooltip_link": "রেস্টিক ডক্স",
|
||||
"add_plan_modal_field_excludes_tooltip_suffix": " আরও তথ্যের জন্য.",
|
||||
"add_plan_modal_field_excludes_add": "এক্সক্লুশন গ্লোব যোগ করুন",
|
||||
"add_plan_modal_field_iexcludes": "বাদ (কেস অসংবেদনশীল)",
|
||||
"add_plan_modal_field_iexcludes_tooltip_prefix": "আপনার ব্যাকআপ থেকে বাদ দেওয়ার জন্য কেস-সংবেদনশীল পাথ। দেখুন ",
|
||||
"add_plan_modal_field_iexcludes_add": "কেস ইনসেনসিটিভ এক্সক্লুশন গ্লোব যোগ করুন",
|
||||
"add_plan_modal_field_schedule": "ব্যাকআপ সময়সূচী",
|
||||
"add_plan_modal_field_backup_flags": "ব্যাকআপ ফ্ল্যাগ",
|
||||
"add_plan_modal_field_backup_flags_tooltip": "'restic backup' কমান্ডে অতিরিক্ত পতাকা যোগ করতে হবে",
|
||||
"add_plan_modal_field_backup_flags_add": "পতাকা সেট করুন",
|
||||
"add_plan_modal_validation_flag_pattern": "মানটি একটি CLI পতাকা হওয়া উচিত, যেমন restic backup --help দেখুন",
|
||||
"add_plan_modal_preview_json": "JSON হিসেবে প্ল্যান কনফিগারেশন",
|
||||
"add_plan_modal_see_guide_prefix": "দেখা ",
|
||||
"add_plan_modal_see_guide_link": "ব্যাকরেস্ট শুরু করার নির্দেশিকা",
|
||||
"add_plan_modal_see_guide_suffix": " পরিকল্পনা কনফিগারেশন নির্দেশাবলীর জন্য।",
|
||||
"add_plan_modal_field_hooks": "হুকস",
|
||||
"settings_success_updated": "সেটিংস আপডেট করা হয়েছে",
|
||||
"settings_error_operation": "অপারেশন ত্রুটি: ",
|
||||
"button_cancel": "বাতিল করুন",
|
||||
"button_close": "বন্ধ করা",
|
||||
"button_save": "সংরক্ষণ করুন",
|
||||
"settings_initial_setup_title": "প্রাথমিক ব্যাকরেস্ট সেটআপ! ",
|
||||
"settings_initial_setup_message": "ব্যাকরেস্ট সনাক্ত করেছে যে আপনার কোনও ব্যবহারকারী কনফিগার করা নেই, ওয়েব ইন্টারফেসটি সুরক্ষিত করতে দয়া করে কমপক্ষে একজন ব্যবহারকারী যুক্ত করুন।",
|
||||
"settings_initial_setup_hint": "আপনি পরে আরও ব্যবহারকারী যোগ করতে পারেন অথবা, যদি আপনি আপনার পাসওয়ার্ড ভুলে যান, তাহলে কনফিগারেশন ফাইল সম্পাদনা করে ব্যবহারকারীদের পুনরায় সেট করুন (সাধারণত $HOME/.backrest/config.json-এ)",
|
||||
"settings_field_instance_id": "ইনস্ট্যান্স আইডি",
|
||||
"settings_validation_instance_id_required": "ইনস্ট্যান্স আইডি প্রয়োজন",
|
||||
"settings_validation_instance_id_pattern": "ইনস্ট্যান্স আইডি অবশ্যই আলফানিউমেরিক হতে হবে এবং '_-.' বিভাজক হিসেবে অনুমোদিত হতে হবে।",
|
||||
"settings_field_instance_id_tooltip": "এই ব্যাকরেস্ট ইনস্টলটি সনাক্ত করতে ইনস্ট্যান্স নামটি ব্যবহার করা হবে। একটি মান সাবধানে নির্বাচন করুন কারণ এটি পরে পরিবর্তন করা যাবে না।",
|
||||
"settings_field_instance_id_placeholder": "এই ইনস্ট্যান্সের জন্য অনন্য ইনস্ট্যান্স আইডি (যেমন my-backrest-server)",
|
||||
"settings_section_authentication": "প্রমাণীকরণ",
|
||||
"settings_section_multihost": "মাল্টিহোস্ট আইডেন্টিটি এবং শেয়ারিং",
|
||||
"settings_section_preview": "প্রিভিউ",
|
||||
"settings_auth_disable": "প্রমাণীকরণ অক্ষম করুন",
|
||||
"settings_auth_users": "ব্যবহারকারীরা",
|
||||
"settings_auth_name_required": "নাম প্রয়োজন",
|
||||
"settings_auth_name_pattern": "নামটি অবশ্যই আলফানিউমেরিক হতে হবে এবং বিভাজক হিসেবে ড্যাশ বা আন্ডারস্কোর ব্যবহার করতে হবে",
|
||||
"settings_auth_username_placeholder": "ব্যবহারকারীর নাম",
|
||||
"settings_auth_password_required": "পাসওয়ার্ড প্রয়োজন।",
|
||||
"settings_auth_password_placeholder": "পাসওয়ার্ড",
|
||||
"settings_auth_add_user": "ব্যবহারকারী যোগ করুন",
|
||||
"settings_multihost_intro": "মাল্টিহোস্ট আইডেন্টিটি আপনাকে একাধিক ব্যাকরেস্ট ইনস্ট্যান্সের মধ্যে রিপোজিটরি শেয়ার করতে দেয়। এটি সিস্টেমের সংগ্রহের ব্যাকআপ স্ট্যাটাস ট্র্যাক রাখার জন্য কার্যকর।",
|
||||
"settings_multihost_warning": "সতর্কতা: এই বৈশিষ্ট্যটি খুবই পরীক্ষামূলক এবং ভবিষ্যতে সংস্করণে অসঙ্গতিপূর্ণ পরিবর্তন হতে পারে যার জন্য সমস্ত উদাহরণ একই সময়ে আপডেট করতে হবে।",
|
||||
"settings_multihost_identity": "মাল্টিহোস্ট আইডেন্টিটি",
|
||||
"settings_multihost_identity_required": "মাল্টিহোস্ট পরিচয় প্রয়োজন",
|
||||
"settings_multihost_identity_tooltip": "মাল্টিহোস্ট সেটআপে এই ইনস্ট্যান্সটি সনাক্ত করতে মাল্টিহোস্ট আইডেন্টিটি ব্যবহার করা হয়। এটি ক্রিপ্টোগ্রাফিকভাবে এই ইনস্ট্যান্সের পাবলিক কী থেকে নেওয়া হয়েছে।",
|
||||
"settings_multihost_identity_placeholder": "অনন্য মাল্টিহোস্ট পরিচয়",
|
||||
"button_copy": "কপি",
|
||||
"settings_multihost_authorized_clients": "অনুমোদিত ক্লায়েন্ট",
|
||||
"settings_multihost_authorized_clients_tooltip": "অনুমোদিত ক্লায়েন্ট হল অন্যান্য ব্যাকরেস্ট ইনস্ট্যান্স যারা এই ইনস্ট্যান্সে রিপোজিটরি অ্যাক্সেস করার অনুমতিপ্রাপ্ত।",
|
||||
"settings_multihost_authorized_client_item": "অনুমোদিত ক্লায়েন্ট",
|
||||
"settings_multihost_known_hosts": "পরিচিত হোস্ট",
|
||||
"settings_multihost_known_hosts_tooltip": "পরিচিত হোস্ট হল অন্যান্য ব্যাকরেস্ট ইনস্ট্যান্স যার সাথে এই ইনস্ট্যান্স সংযোগ করতে পারে।",
|
||||
"settings_multihost_known_host_item": "পরিচিত হোস্ট",
|
||||
"settings_peer_instance_id": "ইনস্ট্যান্স আইডি",
|
||||
"settings_peer_instance_id_placeholder": "যেমন আমার-ব্যাকআপ-সার্ভার",
|
||||
"settings_peer_key_id": "কী আইডি",
|
||||
"settings_peer_key_id_required": "কী আইডি প্রয়োজন",
|
||||
"settings_peer_key_id_placeholder": "পাবলিক কী শনাক্তকারী",
|
||||
"settings_peer_verified": "যাচাই করা হয়েছে",
|
||||
"settings_peer_instance_url": "ইনস্ট্যান্স ইউআরএল",
|
||||
"settings_peer_instance_url_required": "পরিচিত হোস্টের জন্য ইনস্ট্যান্স URL প্রয়োজন",
|
||||
"settings_peer_instance_url_pattern": "দয়া করে একটি বৈধ URL লিখুন।",
|
||||
"settings_peer_instance_url_placeholder": "https://example.com:9898",
|
||||
"settings_peer_permissions": "অনুমতিসমূহ",
|
||||
"settings_peer_permission_type": "আদর্শ",
|
||||
"settings_peer_permission_type_required": "অনুমতির ধরণ প্রয়োজন",
|
||||
"settings_permission_edit_repo": "রেপো কনফিগারেশন সম্পাদনা করুন",
|
||||
"settings_permission_read_ops": "অপারেশন পড়ুন",
|
||||
"settings_permission_type_placeholder": "অনুমতির ধরণ নির্বাচন করুন",
|
||||
"settings_peer_permission_scopes": "সুযোগ",
|
||||
"settings_peer_permission_scopes_required": "কমপক্ষে একটি স্কোপ প্রয়োজন",
|
||||
"settings_permission_scope_all": "সকল সংগ্রহস্থল (*)",
|
||||
"settings_permission_scope_placeholder": "সংগ্রহস্থল নির্বাচন করুন অথবা সকলের জন্য * ব্যবহার করুন",
|
||||
"settings_peer_add_permission": "অনুমতি যোগ করুন",
|
||||
"settings_peer_add_button": "{itemTypeName} যোগ করুন",
|
||||
"peer_default_name": "পিয়ার",
|
||||
"repo_error_index": "স্ন্যাপশট সূচী করতে ব্যর্থ: ",
|
||||
"repo_info_unlocking": "রিপোজিট আনলক করা হচ্ছে...",
|
||||
"repo_success_unlocked": "রেপো আনলক করা হয়েছে।",
|
||||
"repo_error_unlock": "রেপো আনলক করতে ব্যর্থ: ",
|
||||
"repo_error_stats": "পরিসংখ্যান গণনা করতে ব্যর্থ: ",
|
||||
"repo_error_prune": "ছাঁটাই করতে ব্যর্থ: ",
|
||||
"repo_error_check": "চেক করতে ব্যর্থ: ",
|
||||
"repo_deleted_message": "রেপো মুছে ফেলা হয়েছে",
|
||||
"repo_tab_tree": "ট্রি ভিউ",
|
||||
"repo_tab_list": "তালিকা দৃশ্য",
|
||||
"repo_history_title": "ব্যাকআপ অ্যাকশন ইতিহাস",
|
||||
"repo_tab_stats": "পরিসংখ্যান",
|
||||
"loading": "লোড হচ্ছে...",
|
||||
"repo_button_run_command": "কমান্ড চালান",
|
||||
"repo_tooltip_run_command": "উন্নত ব্যবহারকারী: রিপোজিটরিতে কমান্ড চালানোর জন্য একটি রেস্টিক শেল খুলুন। ব্যাকরেস্টে যেকোনো পরিবর্তন প্রতিফলিত করার জন্য স্ন্যাপশটগুলি পুনরায় সূচী করুন।",
|
||||
"repo_button_index": "সূচী স্ন্যাপশট",
|
||||
"repo_tooltip_index": "রিপোজিটরিতে স্ন্যাপশটগুলিকে সূচীবদ্ধ করে। প্রতিটি ব্যাকআপের পরে স্ন্যাপশটগুলি স্বয়ংক্রিয়ভাবে সূচীবদ্ধ হয়।",
|
||||
"repo_button_unlock": "রেপো আনলক করুন",
|
||||
"repo_tooltip_unlock": "লকফাইলগুলি সরিয়ে দেয় এবং ত্রুটির জন্য রিপোজিটরি পরীক্ষা করে। শুধুমাত্র তখনই চালান যদি আপনি নিশ্চিত হন যে অন্য সিস্টেম দ্বারা রেপো অ্যাক্সেস করা হচ্ছে না।",
|
||||
"repo_button_prune": "এখনই ছাঁটাই করুন",
|
||||
"repo_tooltip_prune": "রিপোজিটরিতে একটি প্রুন অপারেশন চালায় যা পুরানো স্ন্যাপশটগুলি সরিয়ে ফেলবে এবং স্থান খালি করবে।",
|
||||
"repo_button_check": "এখনই পরীক্ষা করুন",
|
||||
"repo_tooltip_check": "রিপোজিটরিতে একটি চেক অপারেশন চালায় যা রিপোজিটরির অখণ্ডতা যাচাই করবে।",
|
||||
"repo_button_stats": "পরিসংখ্যান গণনা করুন",
|
||||
"repo_tooltip_stats": "রিপোজিটরিতে রেস্টিক স্ট্যাটাস চালায়, এটি একটি ধীর গতির অপারেশন হতে পারে",
|
||||
"settings_modal_title": "সেটিংস",
|
||||
"app_breadcrumb_repo": "রেপো",
|
||||
"app_breadcrumb_peer": "পিয়ার",
|
||||
"app_breadcrumb_plan": "পরিকল্পনা",
|
||||
"app_breadcrumb_summary": "সারাংশ",
|
||||
"app_breadcrumb_getting_started": "শুরু করা",
|
||||
"app_page_not_found": "পৃষ্ঠাটি খুঁজে পাওয়া যায়নি",
|
||||
"app_repo_not_found": "রেপো {repoId} পাওয়া যায়নি",
|
||||
"app_plan_not_found": "প্ল্যান {planId} খুঁজে পাওয়া যায়নি",
|
||||
"app_unknown_peer": "অজানা পিয়ার",
|
||||
"app_unknown_repo": "অজানা রেপো",
|
||||
"app_remote_repo_title": "রিমোট রেপো: {id}",
|
||||
"app_logout": "লগআউট",
|
||||
"app_menu_plans": "পরিকল্পনা",
|
||||
"app_menu_add_plan": "পরিকল্পনা যোগ করুন",
|
||||
"app_menu_repos": "সংগ্রহস্থল",
|
||||
"app_menu_add_repo": "রেপো যোগ করুন",
|
||||
"app_menu_remote_instances": "দূরবর্তী উদাহরণ",
|
||||
"app_menu_settings": "সেটিংস",
|
||||
"app_error_initial_config": "প্রাথমিক কনফিগারেশন আনতে ব্যর্থ হয়েছে, সাধারণত এর অর্থ হল UI ব্যাকএন্ডের সাথে সংযোগ করতে পারেনি",
|
||||
"login_success": "লগ ইন করেছেন",
|
||||
"login_error": "লগইন ব্যর্থ হয়েছে: ",
|
||||
"login_title": "লগইন",
|
||||
"login_username_required": "আপনার ব্যবহারকারীর নাম লিখুন",
|
||||
"login_username_placeholder": "ব্যবহারকারীর নাম",
|
||||
"login_password_required": "আপনার পাসওয়ার্ডটি প্রবেশ করান!",
|
||||
"login_password_placeholder": "পাসওয়ার্ড",
|
||||
"login_button": "লগ ইন করুন"
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"$schema": "https://inlang.com/schema/inlang-message-format",
|
||||
"example_message": "Hallo Welt {username}",
|
||||
"add_plan_modal_error_template_not_found": "Vorlage nicht gefunden",
|
||||
"add_plan_modal_error_plan_delete_not_found": "Konfiguration konnte nicht aktualisiert werden, Löschplan nicht gefunden",
|
||||
"add_plan_modal_success_plan_deleted": "Der Plan wurde aus der Konfiguration gelöscht, jedoch nicht aus dem Restic-Repository. Snapshots bleiben im Speicher erhalten und Operationen werden protokolliert, bis sie manuell gelöscht werden. Die Wiederverwendung einer gelöschten Plan-ID wird nicht empfohlen, wenn bereits Backups erstellt wurden.",
|
||||
"add_plan_modal_error_destroy_prefix": "Zerstörungsfehler:",
|
||||
"add_plan_modal_error_operation_prefix": "Betriebsfehler: ",
|
||||
"add_plan_modal_title_update": "Aktualisierungsplan",
|
||||
"add_plan_modal_title_add": "Plan hinzufügen",
|
||||
"add_plan_modal_button_cancel": "Stornieren",
|
||||
"add_plan_modal_button_delete": "Löschen",
|
||||
"add_plan_modal_button_confirm_delete": "Löschen bestätigen",
|
||||
"add_plan_modal_button_submit": "Einreichen",
|
||||
"add_plan_modal_field_plan_name": "Planname",
|
||||
"add_plan_modal_field_plan_name_tooltip": "Die eindeutige ID identifiziert diesen Plan in der Backend-Benutzeroberfläche (z. B. s3-myplan). Diese kann nach der Erstellung nicht mehr geändert werden.",
|
||||
"add_plan_modal_validation_plan_name_required": "Bitte geben Sie den Plannamen ein.",
|
||||
"add_plan_modal_validation_plan_exists": "Plan mit diesem Namen existiert bereits",
|
||||
"add_plan_modal_validation_plan_name_pattern": "Der Name muss alphanumerisch sein und Bindestriche oder Unterstriche als Trennzeichen enthalten.",
|
||||
"add_plan_modal_field_repository": "Repository",
|
||||
"add_plan_modal_field_repository_tooltip": "Das Repository, in dem Backrest Ihre Snapshots speichert.",
|
||||
"add_plan_modal_validation_repository_required": "Bitte wählen Sie das Repository aus.",
|
||||
"add_plan_modal_field_paths": "Wege",
|
||||
"add_plan_modal_field_paths_tooltip": "Geben Sie die Dateipfade für die Sicherung ein, einen pro Zeile. Die Autovervollständigung ist während der Eingabe verfügbar.",
|
||||
"add_plan_modal_validation_paths_required": "Bitte geben Sie mindestens einen Pfad zum Backup an.",
|
||||
"add_plan_modal_validation_paths_valid_required": "Bitte geben Sie mindestens einen gültigen Pfad zum Backup an.",
|
||||
"add_plan_modal_field_paths_placeholder": "Geben Sie die Pfade ein, einen pro Zeile.\nz.B\n/home/user/documents\n/home/user/photos",
|
||||
"add_plan_modal_field_excludes": "Ausgeschlossen",
|
||||
"add_plan_modal_field_excludes_tooltip_prefix": "Pfade, die von Ihren Backups ausgeschlossen werden sollen. Siehe die ",
|
||||
"add_plan_modal_field_excludes_tooltip_link": "restic-Dokumente",
|
||||
"add_plan_modal_field_excludes_tooltip_suffix": " Für weitere Informationen.",
|
||||
"add_plan_modal_field_excludes_add": "Ausschlussglob hinzufügen",
|
||||
"add_plan_modal_field_iexcludes": "Ausgeschlossen (Groß-/Kleinschreibung wird nicht beachtet)",
|
||||
"add_plan_modal_field_iexcludes_tooltip_prefix": "Pfade, die unabhängig von der Groß-/Kleinschreibung von Ihren Backups ausgeschlossen werden sollen. Siehe die ",
|
||||
"add_plan_modal_field_iexcludes_add": "Füge einen Ausschlusspunkt hinzu, der die Groß-/Kleinschreibung ignoriert.",
|
||||
"add_plan_modal_field_schedule": "Backup-Zeitplan",
|
||||
"add_plan_modal_field_backup_flags": "Backup-Flags",
|
||||
"add_plan_modal_field_backup_flags_tooltip": "Zusätzliche Optionen für den Befehl „restic backup“",
|
||||
"add_plan_modal_field_backup_flags_add": "Flagge setzen",
|
||||
"add_plan_modal_validation_flag_pattern": "Der Wert sollte ein CLI-Flag sein, z. B. siehe restic backup --help",
|
||||
"add_plan_modal_preview_json": "Plankonfiguration als JSON",
|
||||
"add_plan_modal_see_guide_prefix": "Sehen ",
|
||||
"add_plan_modal_see_guide_link": "Anleitung für den Einstieg in die Rückenlehne",
|
||||
"add_plan_modal_see_guide_suffix": " Anweisungen zur Plankonfiguration.",
|
||||
"add_plan_modal_field_hooks": "Haken",
|
||||
"settings_success_updated": "Einstellungen aktualisiert",
|
||||
"settings_error_operation": "Betriebsfehler: ",
|
||||
"button_cancel": "Stornieren",
|
||||
"button_close": "Schließen",
|
||||
"button_save": "Speichern",
|
||||
"settings_initial_setup_title": "Erste Einstellung der Rückenlehne! ",
|
||||
"settings_initial_setup_message": "Backrest hat festgestellt, dass Sie keine Benutzer konfiguriert haben. Bitte fügen Sie mindestens einen Benutzer hinzu, um die Weboberfläche zu sichern.",
|
||||
"settings_initial_setup_hint": "Sie können später weitere Benutzer hinzufügen oder, falls Sie Ihr Passwort vergessen haben, die Benutzer zurücksetzen, indem Sie die Konfigurationsdatei bearbeiten (normalerweise unter $HOME/.backrest/config.json).",
|
||||
"settings_field_instance_id": "Instanz-ID",
|
||||
"settings_validation_instance_id_required": "Die Instanz-ID ist erforderlich.",
|
||||
"settings_validation_instance_id_pattern": "Die Instanz-ID muss alphanumerisch sein, wobei '_-.' als Trennzeichen zulässig ist.",
|
||||
"settings_field_instance_id_tooltip": "Der Instanzname dient zur Identifizierung dieser Rückenlehneninstallation. Wählen Sie einen Wert sorgfältig, da dieser später nicht mehr geändert werden kann.",
|
||||
"settings_field_instance_id_placeholder": "Eindeutige Instanz-ID für diese Instanz (z. B. my-backrest-server)",
|
||||
"settings_section_authentication": "Authentifizierung",
|
||||
"settings_section_multihost": "Multihost-Identität und -Freigabe",
|
||||
"settings_section_preview": "Vorschau",
|
||||
"settings_auth_disable": "Authentifizierung deaktivieren",
|
||||
"settings_auth_users": "Benutzer",
|
||||
"settings_auth_name_required": "Name erforderlich",
|
||||
"settings_auth_name_pattern": "Der Name muss alphanumerisch sein und Bindestriche oder Unterstriche als Trennzeichen enthalten.",
|
||||
"settings_auth_username_placeholder": "Benutzername",
|
||||
"settings_auth_password_required": "Passwort erforderlich",
|
||||
"settings_auth_password_placeholder": "Passwort",
|
||||
"settings_auth_add_user": "Benutzer hinzufügen",
|
||||
"settings_multihost_intro": "Die Multihost-Identität ermöglicht die gemeinsame Nutzung von Repositories durch mehrere Backrest-Instanzen. Dies ist nützlich, um den Backup-Status einer Gruppe von Systemen zu verfolgen.",
|
||||
"settings_multihost_warning": "Warnung: Diese Funktion ist noch experimentell und kann zukünftig versionsinkompatiblen Änderungen unterliegen, die ein gleichzeitiges Update aller Instanzen erfordern.",
|
||||
"settings_multihost_identity": "Multihost-Identität",
|
||||
"settings_multihost_identity_required": "Multihost-Identität erforderlich",
|
||||
"settings_multihost_identity_tooltip": "Die Multihost-Identität dient zur Identifizierung dieser Instanz in einer Multihost-Umgebung. Sie wird kryptografisch vom öffentlichen Schlüssel dieser Instanz abgeleitet.",
|
||||
"settings_multihost_identity_placeholder": "Einzigartige Multihost-Identität",
|
||||
"button_copy": "Kopie",
|
||||
"settings_multihost_authorized_clients": "Autorisierte Kunden",
|
||||
"settings_multihost_authorized_clients_tooltip": "Autorisierte Clients sind andere Backrest-Instanzen, die auf Repositories dieser Instanz zugreifen dürfen.",
|
||||
"settings_multihost_authorized_client_item": "Autorisierter Kunde",
|
||||
"settings_multihost_known_hosts": "Bekannte Wirte",
|
||||
"settings_multihost_known_hosts_tooltip": "Bekannte Hosts sind andere Backrest-Instanzen, mit denen diese Instanz eine Verbindung herstellen kann.",
|
||||
"settings_multihost_known_host_item": "Bekannter Wirt",
|
||||
"settings_peer_instance_id": "Instanz-ID",
|
||||
"settings_peer_instance_id_placeholder": "z.B. mein-Backup-Server",
|
||||
"settings_peer_key_id": "Schlüssel-ID",
|
||||
"settings_peer_key_id_required": "Schlüssel-ID erforderlich",
|
||||
"settings_peer_key_id_placeholder": "Öffentlicher Schlüsselbezeichner",
|
||||
"settings_peer_verified": "Bestätigt",
|
||||
"settings_peer_instance_url": "Instanz-URL",
|
||||
"settings_peer_instance_url_required": "Für bekannte Hosts ist eine Instanz-URL erforderlich.",
|
||||
"settings_peer_instance_url_pattern": "Bitte geben Sie eine gültige URL ein.",
|
||||
"settings_peer_instance_url_placeholder": "https://example.com:9898",
|
||||
"settings_peer_permissions": "Berechtigungen",
|
||||
"settings_peer_permission_type": "Typ",
|
||||
"settings_peer_permission_type_required": "Berechtigungstyp erforderlich",
|
||||
"settings_permission_edit_repo": "Repository-Konfiguration bearbeiten",
|
||||
"settings_permission_read_ops": "Leseoperationen",
|
||||
"settings_permission_type_placeholder": "Berechtigungstyp auswählen",
|
||||
"settings_peer_permission_scopes": "Zielfernrohre",
|
||||
"settings_peer_permission_scopes_required": "Mindestens ein Zielfernrohr ist erforderlich.",
|
||||
"settings_permission_scope_all": "Alle Repositories (*)",
|
||||
"settings_permission_scope_placeholder": "Wählen Sie Repositories aus oder verwenden Sie * für alle.",
|
||||
"settings_peer_add_permission": "Berechtigung hinzufügen",
|
||||
"settings_peer_add_button": "Füge {itemTypeName} hinzu",
|
||||
"peer_default_name": "Peer",
|
||||
"repo_error_index": "Fehler beim Indizieren der Snapshots: ",
|
||||
"repo_info_unlocking": "Repository wird entsperrt...",
|
||||
"repo_success_unlocked": "Repository entsperrt.",
|
||||
"repo_error_unlock": "Fehler beim Entsperren des Repositorys: ",
|
||||
"repo_error_stats": "Statistikberechnung fehlgeschlagen: ",
|
||||
"repo_error_prune": "Fehler beim Beschneiden: ",
|
||||
"repo_error_check": "Überprüfung fehlgeschlagen: ",
|
||||
"repo_deleted_message": "Das Repository wurde gelöscht.",
|
||||
"repo_tab_tree": "Baumansicht",
|
||||
"repo_tab_list": "Listenansicht",
|
||||
"repo_history_title": "Sicherungsaktionsverlauf",
|
||||
"repo_tab_stats": "Statistiken",
|
||||
"loading": "Laden...",
|
||||
"repo_button_run_command": "Befehl ausführen",
|
||||
"repo_tooltip_run_command": "Fortgeschrittene Benutzer: Öffnen Sie eine restic-Shell, um Befehle im Repository auszuführen. Indizieren Sie Snapshots neu, um alle Änderungen in Backrest widerzuspiegeln.",
|
||||
"repo_button_index": "Index-Schnappschüsse",
|
||||
"repo_tooltip_index": "Die Snapshots im Repository werden indiziert. Snapshots werden außerdem nach jeder Sicherung automatisch indiziert.",
|
||||
"repo_button_unlock": "Entsperrt das Repository",
|
||||
"repo_tooltip_unlock": "Entfernt Sperrdateien und prüft das Repository auf Fehler. Führen Sie diesen Befehl nur aus, wenn Sie sicher sind, dass das Repository nicht von einem anderen System verwendet wird.",
|
||||
"repo_button_prune": "Jetzt beschneiden",
|
||||
"repo_tooltip_prune": "Führt eine Bereinigungsoperation im Repository durch, die alte Snapshots entfernt und Speicherplatz freigibt.",
|
||||
"repo_button_check": "Jetzt prüfen",
|
||||
"repo_tooltip_check": "Führt eine Prüfoperation im Repository durch, die die Integrität des Repositorys überprüft.",
|
||||
"repo_button_stats": "Statistiken berechnen",
|
||||
"repo_tooltip_stats": "Führt restic stats für das Repository aus; dies kann ein langsamer Vorgang sein.",
|
||||
"settings_modal_title": "Einstellungen",
|
||||
"app_breadcrumb_repo": "Repo",
|
||||
"app_breadcrumb_peer": "Peer",
|
||||
"app_breadcrumb_plan": "Planen",
|
||||
"app_breadcrumb_summary": "Zusammenfassung",
|
||||
"app_breadcrumb_getting_started": "Erste Schritte",
|
||||
"app_page_not_found": "Seite nicht gefunden",
|
||||
"app_repo_not_found": "Repository {repoId} nicht gefunden",
|
||||
"app_plan_not_found": "Plan {planId} nicht gefunden",
|
||||
"app_unknown_peer": "Unbekannter Peer",
|
||||
"app_unknown_repo": "Unbekanntes Repository",
|
||||
"app_remote_repo_title": "Remote-Repository: {id}",
|
||||
"app_logout": "Abmelden",
|
||||
"app_menu_plans": "Pläne",
|
||||
"app_menu_add_plan": "Plan hinzufügen",
|
||||
"app_menu_repos": "Repositories",
|
||||
"app_menu_add_repo": "Repository hinzufügen",
|
||||
"app_menu_remote_instances": "Remote-Instanzen",
|
||||
"app_menu_settings": "Einstellungen",
|
||||
"app_error_initial_config": "Fehler beim Abrufen der initialen Konfiguration; dies bedeutet in der Regel, dass die Benutzeroberfläche keine Verbindung zum Backend herstellen konnte.",
|
||||
"login_success": "Eingeloggt",
|
||||
"login_error": "Fehler bei der Anmeldung: ",
|
||||
"login_title": "Login",
|
||||
"login_username_required": "Bitte geben Sie Ihren Benutzernamen ein.",
|
||||
"login_username_placeholder": "Benutzername",
|
||||
"login_password_required": "Bitte geben Sie Ihr Passwort ein!",
|
||||
"login_password_placeholder": "Passwort",
|
||||
"login_button": "Einloggen"
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"$schema": "https://inlang.com/schema/inlang-message-format",
|
||||
"example_message": "Hello world {username}",
|
||||
"add_plan_modal_error_template_not_found": "template not found",
|
||||
"add_plan_modal_error_plan_delete_not_found": "failed to update config, plan to delete not found",
|
||||
"add_plan_modal_success_plan_deleted": "Plan deleted from config, but not from restic repo. Snapshots will remain in storage and operations will be tracked until manually deleted. Reusing a deleted plan ID is not recommended if backups have already been performed.",
|
||||
"add_plan_modal_error_destroy_prefix": "Destroy error:",
|
||||
"add_plan_modal_error_operation_prefix": "Operation error: ",
|
||||
"add_plan_modal_title_update": "Update Plan",
|
||||
"add_plan_modal_title_add": "Add Plan",
|
||||
"add_plan_modal_button_cancel": "Cancel",
|
||||
"add_plan_modal_button_delete": "Delete",
|
||||
"add_plan_modal_button_confirm_delete": "Confirm Delete",
|
||||
"add_plan_modal_button_submit": "Submit",
|
||||
"add_plan_modal_field_plan_name": "Plan Name",
|
||||
"add_plan_modal_field_plan_name_tooltip": "Unique ID that identifies this plan in the backrest UI (e.g. s3-myplan). This cannot be changed after creation.",
|
||||
"add_plan_modal_validation_plan_name_required": "Please input plan name",
|
||||
"add_plan_modal_validation_plan_exists": "Plan with name already exists",
|
||||
"add_plan_modal_validation_plan_name_pattern": "Name must be alphanumeric with dashes or underscores as separators",
|
||||
"add_plan_modal_field_repository": "Repository",
|
||||
"add_plan_modal_field_repository_tooltip": "The repo that backrest will store your snapshots in.",
|
||||
"add_plan_modal_validation_repository_required": "Please select repository",
|
||||
"add_plan_modal_field_paths": "Paths",
|
||||
"add_plan_modal_field_paths_tooltip": "Enter file paths to backup, one per line. Autocomplete is available as you type.",
|
||||
"add_plan_modal_validation_paths_required": "Please enter at least one path to backup",
|
||||
"add_plan_modal_validation_paths_valid_required": "Please enter at least one valid path to backup",
|
||||
"add_plan_modal_field_paths_placeholder": "Enter paths, one per line\ne.g.\n/home/user/documents\n/home/user/photos",
|
||||
"add_plan_modal_field_excludes": "Excludes",
|
||||
"add_plan_modal_field_excludes_tooltip_prefix": "Paths to exclude from your backups. See the ",
|
||||
"add_plan_modal_field_excludes_tooltip_link": "restic docs",
|
||||
"add_plan_modal_field_excludes_tooltip_suffix": " for more info.",
|
||||
"add_plan_modal_field_excludes_add": "Add Exclusion Glob",
|
||||
"add_plan_modal_field_iexcludes": "Excludes (Case Insensitive)",
|
||||
"add_plan_modal_field_iexcludes_tooltip_prefix": "Case insensitive paths to exclude from your backups. See the ",
|
||||
"add_plan_modal_field_iexcludes_add": "Add Case Insensitive Exclusion Glob",
|
||||
"add_plan_modal_field_schedule": "Backup Schedule",
|
||||
"add_plan_modal_field_backup_flags": "Backup Flags",
|
||||
"add_plan_modal_field_backup_flags_tooltip": "Extra flags to add to the 'restic backup' command",
|
||||
"add_plan_modal_field_backup_flags_add": "Set Flag",
|
||||
"add_plan_modal_validation_flag_pattern": "Value should be a CLI flag e.g. see restic backup --help",
|
||||
"add_plan_modal_preview_json": "Plan Config as JSON",
|
||||
"add_plan_modal_see_guide_prefix": "See ",
|
||||
"add_plan_modal_see_guide_link": "backrest getting started guide",
|
||||
"add_plan_modal_see_guide_suffix": " for plan configuration instructions.",
|
||||
"add_plan_modal_field_hooks": "Hooks",
|
||||
"settings_success_updated": "Settings updated",
|
||||
"settings_error_operation": "Operation error: ",
|
||||
"button_cancel": "Cancel",
|
||||
"button_close": "Close",
|
||||
"button_save": "Save",
|
||||
"settings_initial_setup_title": "Initial backrest setup! ",
|
||||
"settings_initial_setup_message": "Backrest has detected that you do not have any users configured, please add at least one user to secure the web interface.",
|
||||
"settings_initial_setup_hint": "You can add more users later or, if you forget your password, reset users by editing the configuration file (typically in $HOME/.backrest/config.json)",
|
||||
"settings_field_instance_id": "Instance ID",
|
||||
"settings_validation_instance_id_required": "Instance ID is required",
|
||||
"settings_validation_instance_id_pattern": "Instance ID must be alphanumeric with '_-.' allowed as separators",
|
||||
"settings_field_instance_id_tooltip": "The instance name will be used to identify this backrest install. Pick a value carefully as it cannot be changed later.",
|
||||
"settings_field_instance_id_placeholder": "Unique instance ID for this instance (e.g. my-backrest-server)",
|
||||
"settings_section_authentication": "Authentication",
|
||||
"settings_section_multihost": "Multihost Identity and Sharing",
|
||||
"settings_section_preview": "Preview",
|
||||
"settings_auth_disable": "Disable Authentication",
|
||||
"settings_auth_users": "Users",
|
||||
"settings_auth_name_required": "Name is required",
|
||||
"settings_auth_name_pattern": "Name must be alphanumeric with dashes or underscores as separators",
|
||||
"settings_auth_username_placeholder": "Username",
|
||||
"settings_auth_password_required": "Password is required",
|
||||
"settings_auth_password_placeholder": "Password",
|
||||
"settings_auth_add_user": "Add user",
|
||||
"settings_multihost_intro": "Multihost identity allows you to share repositories between multiple Backrest instances. This is useful for keeping track of the backup status of a collections of systems.",
|
||||
"settings_multihost_warning": "Warning: this feature is very experimental and may be subject to version incompatible changes in the future which will require all instances to be updated at the same time.",
|
||||
"settings_multihost_identity": "Multihost Identity",
|
||||
"settings_multihost_identity_required": "Multihost identity is required",
|
||||
"settings_multihost_identity_tooltip": "Multihost identity is used to identify this instance in a multihost setup. It is cryptographically derived from the public key of this instance.",
|
||||
"settings_multihost_identity_placeholder": "Unique multihost identity",
|
||||
"button_copy": "copy",
|
||||
"settings_multihost_authorized_clients": "Authorized Clients",
|
||||
"settings_multihost_authorized_clients_tooltip": "Authorized clients are other Backrest instances that are allowed to access repositories on this instance.",
|
||||
"settings_multihost_authorized_client_item": "Authorized Client",
|
||||
"settings_multihost_known_hosts": "Known Hosts",
|
||||
"settings_multihost_known_hosts_tooltip": "Known hosts are other Backrest instances that this instance can connect to.",
|
||||
"settings_multihost_known_host_item": "Known Host",
|
||||
"settings_peer_instance_id": "Instance ID",
|
||||
"settings_peer_instance_id_placeholder": "e.g. my-backup-server",
|
||||
"settings_peer_key_id": "Key ID",
|
||||
"settings_peer_key_id_required": "Key ID is required",
|
||||
"settings_peer_key_id_placeholder": "Public key identifier",
|
||||
"settings_peer_verified": "Verified",
|
||||
"settings_peer_instance_url": "Instance URL",
|
||||
"settings_peer_instance_url_required": "Instance URL is required for known hosts",
|
||||
"settings_peer_instance_url_pattern": "Please enter a valid URL",
|
||||
"settings_peer_instance_url_placeholder": "https://example.com:9898",
|
||||
"settings_peer_permissions": "Permissions",
|
||||
"settings_peer_permission_type": "Type",
|
||||
"settings_peer_permission_type_required": "Permission type is required",
|
||||
"settings_permission_edit_repo": "Edit Repo Configuration",
|
||||
"settings_permission_read_ops": "Read Operations",
|
||||
"settings_permission_type_placeholder": "Select permission type",
|
||||
"settings_peer_permission_scopes": "Scopes",
|
||||
"settings_peer_permission_scopes_required": "At least one scope is required",
|
||||
"settings_permission_scope_all": "All Repositories (*)",
|
||||
"settings_permission_scope_placeholder": "Select repositories or use * for all",
|
||||
"settings_peer_add_permission": "Add Permission",
|
||||
"settings_peer_add_button": "Add {itemTypeName}",
|
||||
"peer_default_name": "Peer",
|
||||
"repo_error_index": "Failed to index snapshots: ",
|
||||
"repo_info_unlocking": "Unlocking repo...",
|
||||
"repo_success_unlocked": "Repo unlocked.",
|
||||
"repo_error_unlock": "Failed to unlock repo: ",
|
||||
"repo_error_stats": "Failed to compute stats: ",
|
||||
"repo_error_prune": "Failed to prune: ",
|
||||
"repo_error_check": "Failed to check: ",
|
||||
"repo_deleted_message": "Repo was deleted",
|
||||
"repo_tab_tree": "Tree View",
|
||||
"repo_tab_list": "List View",
|
||||
"repo_history_title": "Backup Action History",
|
||||
"repo_tab_stats": "Stats",
|
||||
"loading": "Loading...",
|
||||
"repo_button_run_command": "Run Command",
|
||||
"repo_tooltip_run_command": "Advanced users: open a restic shell to run commands on the repository. Re-index snapshots to reflect any changes in Backrest.",
|
||||
"repo_button_index": "Index Snapshots",
|
||||
"repo_tooltip_index": "Indexes the snapshots in the repository. Snapshots are also indexed automatically after each backup.",
|
||||
"repo_button_unlock": "Unlock Repo",
|
||||
"repo_tooltip_unlock": "Removes lockfiles and checks the repository for errors. Only run if you are sure the repo is not being accessed by another system",
|
||||
"repo_button_prune": "Prune Now",
|
||||
"repo_tooltip_prune": "Runs a prune operation on the repository that will remove old snapshots and free up space",
|
||||
"repo_button_check": "Check Now",
|
||||
"repo_tooltip_check": "Runs a check operation on the repository that will verify the integrity of the repository",
|
||||
"repo_button_stats": "Compute Stats",
|
||||
"repo_tooltip_stats": "Runs restic stats on the repository, this may be a slow operation",
|
||||
"settings_modal_title": "Settings",
|
||||
"app_breadcrumb_repo": "Repo",
|
||||
"app_breadcrumb_peer": "Peer",
|
||||
"app_breadcrumb_plan": "Plan",
|
||||
"app_breadcrumb_summary": "Summary",
|
||||
"app_breadcrumb_getting_started": "Getting Started",
|
||||
"app_page_not_found": "Page not found",
|
||||
"app_repo_not_found": "Repo {repoId} not found",
|
||||
"app_plan_not_found": "Plan {planId} not found",
|
||||
"app_unknown_peer": "Unknown Peer",
|
||||
"app_unknown_repo": "Unknown Repo",
|
||||
"app_remote_repo_title": "Remote Repo: {id}",
|
||||
"app_logout": "Logout",
|
||||
"app_menu_plans": "Plans",
|
||||
"app_menu_add_plan": "Add Plan",
|
||||
"app_menu_repos": "Repositories",
|
||||
"app_menu_add_repo": "Add Repo",
|
||||
"app_menu_remote_instances": "Remote Instances",
|
||||
"app_menu_settings": "Settings",
|
||||
"app_error_initial_config": "Failed to fetch initial config, typically this means the UI could not connect to the backend",
|
||||
"login_success": "Logged in",
|
||||
"login_error": "Login failed: ",
|
||||
"login_title": "Login",
|
||||
"login_username_required": "Please input your username",
|
||||
"login_username_placeholder": "Username",
|
||||
"login_password_required": "Please input your password!",
|
||||
"login_password_placeholder": "Password",
|
||||
"login_button": "Log in"
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"$schema": "https://inlang.com/schema/inlang-message-format",
|
||||
"example_message": "Hola mundo {username}",
|
||||
"add_plan_modal_error_template_not_found": "plantilla no encontrada",
|
||||
"add_plan_modal_error_plan_delete_not_found": "No se pudo actualizar la configuración, no se encontró el plan para eliminar",
|
||||
"add_plan_modal_success_plan_deleted": "Plan eliminado de la configuración, pero no del repositorio restic. Las instantáneas permanecerán almacenadas y se realizará un seguimiento de las operaciones hasta que se eliminen manualmente. No se recomienda reutilizar un ID de plan eliminado si ya se han realizado copias de seguridad.",
|
||||
"add_plan_modal_error_destroy_prefix": "Error de destrucción:",
|
||||
"add_plan_modal_error_operation_prefix": "Error de operación: ",
|
||||
"add_plan_modal_title_update": "Plan de actualización",
|
||||
"add_plan_modal_title_add": "Agregar plan",
|
||||
"add_plan_modal_button_cancel": "Cancelar",
|
||||
"add_plan_modal_button_delete": "Borrar",
|
||||
"add_plan_modal_button_confirm_delete": "Confirmar eliminación",
|
||||
"add_plan_modal_button_submit": "Entregar",
|
||||
"add_plan_modal_field_plan_name": "Nombre del plan",
|
||||
"add_plan_modal_field_plan_name_tooltip": "ID único que identifica este plan en la interfaz de usuario de Backrest (p. ej., s3-myplan). No se puede modificar después de su creación.",
|
||||
"add_plan_modal_validation_plan_name_required": "Por favor ingrese el nombre del plan",
|
||||
"add_plan_modal_validation_plan_exists": "El plan con nombre ya existe",
|
||||
"add_plan_modal_validation_plan_name_pattern": "El nombre debe ser alfanumérico con guiones o guiones bajos como separadores",
|
||||
"add_plan_modal_field_repository": "Repositorio",
|
||||
"add_plan_modal_field_repository_tooltip": "El repositorio en el que se guardarán tus instantáneas.",
|
||||
"add_plan_modal_validation_repository_required": "Por favor seleccione el repositorio",
|
||||
"add_plan_modal_field_paths": "Caminos",
|
||||
"add_plan_modal_field_paths_tooltip": "Introduzca las rutas de los archivos que desea respaldar, una por línea. La función de autocompletar está disponible mientras escribe.",
|
||||
"add_plan_modal_validation_paths_required": "Ingrese al menos una ruta para realizar la copia de seguridad",
|
||||
"add_plan_modal_validation_paths_valid_required": "Ingrese al menos una ruta válida para realizar la copia de seguridad",
|
||||
"add_plan_modal_field_paths_placeholder": "Introduzca rutas, una por línea\np.ej\n/inicio/usuario/documentos\n/inicio/usuario/fotos",
|
||||
"add_plan_modal_field_excludes": "Excluye",
|
||||
"add_plan_modal_field_excludes_tooltip_prefix": "Rutas que se deben excluir de las copias de seguridad. Consulte la ",
|
||||
"add_plan_modal_field_excludes_tooltip_link": "documentos restic",
|
||||
"add_plan_modal_field_excludes_tooltip_suffix": " Para más información.",
|
||||
"add_plan_modal_field_excludes_add": "Agregar globo de exclusión",
|
||||
"add_plan_modal_field_iexcludes": "Excluye (sin distinguir entre mayúsculas y minúsculas)",
|
||||
"add_plan_modal_field_iexcludes_tooltip_prefix": "Rutas que no distinguen entre mayúsculas y minúsculas para excluir de las copias de seguridad. Consulte ",
|
||||
"add_plan_modal_field_iexcludes_add": "Agregar glob de exclusión sin distinción entre mayúsculas y minúsculas",
|
||||
"add_plan_modal_field_schedule": "Programación de copias de seguridad",
|
||||
"add_plan_modal_field_backup_flags": "Banderas de respaldo",
|
||||
"add_plan_modal_field_backup_flags_tooltip": "Banderas adicionales para agregar al comando 'restic backup'",
|
||||
"add_plan_modal_field_backup_flags_add": "Establecer bandera",
|
||||
"add_plan_modal_validation_flag_pattern": "El valor debe ser un indicador CLI, por ejemplo, consulte restic backup --help",
|
||||
"add_plan_modal_preview_json": "Planificar la configuración como JSON",
|
||||
"add_plan_modal_see_guide_prefix": "Ver ",
|
||||
"add_plan_modal_see_guide_link": "Guía de inicio del respaldo",
|
||||
"add_plan_modal_see_guide_suffix": " para obtener instrucciones de configuración del plan.",
|
||||
"add_plan_modal_field_hooks": "Manos",
|
||||
"settings_success_updated": "Configuración actualizada",
|
||||
"settings_error_operation": "Error de operación: ",
|
||||
"button_cancel": "Cancelar",
|
||||
"button_close": "Cerca",
|
||||
"button_save": "Ahorrar",
|
||||
"settings_initial_setup_title": "¡Configuración inicial del respaldo! ",
|
||||
"settings_initial_setup_message": "Backrest ha detectado que no tienes ningún usuario configurado, por favor agrega al menos un usuario para proteger la interfaz web.",
|
||||
"settings_initial_setup_hint": "Puede agregar más usuarios más tarde o, si olvida su contraseña, restablecer los usuarios editando el archivo de configuración (normalmente en $HOME/.backrest/config.json)",
|
||||
"settings_field_instance_id": "ID de instancia",
|
||||
"settings_validation_instance_id_required": "Se requiere ID de instancia",
|
||||
"settings_validation_instance_id_pattern": "El ID de instancia debe ser alfanumérico con '_-.' permitido como separador",
|
||||
"settings_field_instance_id_tooltip": "El nombre de la instancia se usará para identificar la instalación del respaldo. Elija un valor con cuidado, ya que no se puede cambiar posteriormente.",
|
||||
"settings_field_instance_id_placeholder": "ID de instancia único para esta instancia (por ejemplo, my-backrest-server)",
|
||||
"settings_section_authentication": "Autenticación",
|
||||
"settings_section_multihost": "Identidad y compartición de múltiples hosts",
|
||||
"settings_section_preview": "Avance",
|
||||
"settings_auth_disable": "Deshabilitar la autenticación",
|
||||
"settings_auth_users": "Usuarios",
|
||||
"settings_auth_name_required": "El nombre es obligatorio",
|
||||
"settings_auth_name_pattern": "El nombre debe ser alfanumérico con guiones o guiones bajos como separadores",
|
||||
"settings_auth_username_placeholder": "Nombre de usuario",
|
||||
"settings_auth_password_required": "Se requiere contraseña",
|
||||
"settings_auth_password_placeholder": "Contraseña",
|
||||
"settings_auth_add_user": "Agregar usuario",
|
||||
"settings_multihost_intro": "La identidad multihost permite compartir repositorios entre varias instancias de Backrest. Esto resulta útil para realizar un seguimiento del estado de las copias de seguridad de una colección de sistemas.",
|
||||
"settings_multihost_warning": "Advertencia: esta función es muy experimental y puede estar sujeta a cambios de versión incompatibles en el futuro que requerirán que todas las instancias se actualicen al mismo tiempo.",
|
||||
"settings_multihost_identity": "Identidad multihost",
|
||||
"settings_multihost_identity_required": "Se requiere identidad multihost",
|
||||
"settings_multihost_identity_tooltip": "La identidad multihost se utiliza para identificar esta instancia en una configuración multihost. Se deriva criptográficamente de la clave pública de esta instancia.",
|
||||
"settings_multihost_identity_placeholder": "Identidad multihost única",
|
||||
"button_copy": "Copiar",
|
||||
"settings_multihost_authorized_clients": "Clientes autorizados",
|
||||
"settings_multihost_authorized_clients_tooltip": "Los clientes autorizados son otras instancias de Backrest que tienen permiso para acceder a los repositorios en esta instancia.",
|
||||
"settings_multihost_authorized_client_item": "Cliente Autorizado",
|
||||
"settings_multihost_known_hosts": "Hosts conocidos",
|
||||
"settings_multihost_known_hosts_tooltip": "Los hosts conocidos son otras instancias de Backrest a las que esta instancia puede conectarse.",
|
||||
"settings_multihost_known_host_item": "Host conocido",
|
||||
"settings_peer_instance_id": "ID de instancia",
|
||||
"settings_peer_instance_id_placeholder": "p. ej. mi-servidor-de-copias-de-seguridad",
|
||||
"settings_peer_key_id": "Identificación de clave",
|
||||
"settings_peer_key_id_required": "Se requiere identificación de clave",
|
||||
"settings_peer_key_id_placeholder": "Identificador de clave pública",
|
||||
"settings_peer_verified": "Verificado",
|
||||
"settings_peer_instance_url": "URL de instancia",
|
||||
"settings_peer_instance_url_required": "La URL de instancia es necesaria para los hosts conocidos",
|
||||
"settings_peer_instance_url_pattern": "Por favor, introduzca una URL válida",
|
||||
"settings_peer_instance_url_placeholder": "https://ejemplo.com:9898",
|
||||
"settings_peer_permissions": "Permisos",
|
||||
"settings_peer_permission_type": "Tipo",
|
||||
"settings_peer_permission_type_required": "Se requiere el tipo de permiso",
|
||||
"settings_permission_edit_repo": "Editar la configuración del repositorio",
|
||||
"settings_permission_read_ops": "Operaciones de lectura",
|
||||
"settings_permission_type_placeholder": "Seleccionar el tipo de permiso",
|
||||
"settings_peer_permission_scopes": "Ámbitos",
|
||||
"settings_peer_permission_scopes_required": "Se requiere al menos un alcance",
|
||||
"settings_permission_scope_all": "Todos los repositorios (*)",
|
||||
"settings_permission_scope_placeholder": "Seleccione repositorios o utilice * para todos",
|
||||
"settings_peer_add_permission": "Agregar permiso",
|
||||
"settings_peer_add_button": "Agregar {itemTypeName}",
|
||||
"peer_default_name": "Par",
|
||||
"repo_error_index": "Error al indexar las instantáneas: ",
|
||||
"repo_info_unlocking": "Desbloqueando repositorio...",
|
||||
"repo_success_unlocked": "Repositorio desbloqueado.",
|
||||
"repo_error_unlock": "No se pudo desbloquear el repositorio: ",
|
||||
"repo_error_stats": "No se pudieron calcular las estadísticas: ",
|
||||
"repo_error_prune": "No se pudo podar: ",
|
||||
"repo_error_check": "No se pudo comprobar: ",
|
||||
"repo_deleted_message": "El repositorio fue eliminado",
|
||||
"repo_tab_tree": "Vista de árbol",
|
||||
"repo_tab_list": "Vista de lista",
|
||||
"repo_history_title": "Historial de acciones de respaldo",
|
||||
"repo_tab_stats": "Estadísticas",
|
||||
"loading": "Cargando...",
|
||||
"repo_button_run_command": "Comando Ejecutar",
|
||||
"repo_tooltip_run_command": "Usuarios avanzados: Abran una shell restic para ejecutar comandos en el repositorio. Reindexen las instantáneas para reflejar cualquier cambio en Backrest.",
|
||||
"repo_button_index": "Instantáneas del índice",
|
||||
"repo_tooltip_index": "Indexa las instantáneas en el repositorio. Las instantáneas también se indexan automáticamente después de cada copia de seguridad.",
|
||||
"repo_button_unlock": "Desbloquear repositorio",
|
||||
"repo_tooltip_unlock": "Elimina los archivos de bloqueo y comprueba si hay errores en el repositorio. Ejecútalo solo si estás seguro de que ningún otro sistema está accediendo al repositorio.",
|
||||
"repo_button_prune": "Podar ahora",
|
||||
"repo_tooltip_prune": "Ejecuta una operación de poda en el repositorio que eliminará las instantáneas antiguas y liberará espacio.",
|
||||
"repo_button_check": "Compruébalo ahora",
|
||||
"repo_tooltip_check": "Ejecuta una operación de verificación en el repositorio que verificará la integridad del repositorio.",
|
||||
"repo_button_stats": "Calcular estadísticas",
|
||||
"repo_tooltip_stats": "Ejecuta estadísticas restic en el repositorio, esta puede ser una operación lenta",
|
||||
"settings_modal_title": "Ajustes",
|
||||
"app_breadcrumb_repo": "Repo",
|
||||
"app_breadcrumb_peer": "Par",
|
||||
"app_breadcrumb_plan": "Plan",
|
||||
"app_breadcrumb_summary": "Resumen",
|
||||
"app_breadcrumb_getting_started": "Empezando",
|
||||
"app_page_not_found": "Página no encontrada",
|
||||
"app_repo_not_found": "No se encontró el repositorio {repoId}",
|
||||
"app_plan_not_found": "No se encontró el plan {planId}",
|
||||
"app_unknown_peer": "Par desconocido",
|
||||
"app_unknown_repo": "Repositorio desconocido",
|
||||
"app_remote_repo_title": "Repositorio remoto: {id}",
|
||||
"app_logout": "Cerrar sesión",
|
||||
"app_menu_plans": "Planes",
|
||||
"app_menu_add_plan": "Agregar plan",
|
||||
"app_menu_repos": "Repositorios",
|
||||
"app_menu_add_repo": "Agregar repositorio",
|
||||
"app_menu_remote_instances": "Instancias remotas",
|
||||
"app_menu_settings": "Ajustes",
|
||||
"app_error_initial_config": "No se pudo obtener la configuración inicial, generalmente esto significa que la interfaz de usuario no pudo conectarse al backend",
|
||||
"login_success": "Iniciado sesión",
|
||||
"login_error": "Error de inicio de sesion: ",
|
||||
"login_title": "Acceso",
|
||||
"login_username_required": "Por favor ingrese su nombre de usuario",
|
||||
"login_username_placeholder": "Nombre de usuario",
|
||||
"login_password_required": "¡Por favor ingrese su contraseña!",
|
||||
"login_password_placeholder": "Contraseña",
|
||||
"login_button": "Acceso"
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"$schema": "https://inlang.com/schema/inlang-message-format",
|
||||
"example_message": "Bonjour monde {username}",
|
||||
"add_plan_modal_error_template_not_found": "Modèle introuvable",
|
||||
"add_plan_modal_error_plan_delete_not_found": "Échec de la mise à jour de la configuration, plan de suppression introuvable",
|
||||
"add_plan_modal_success_plan_deleted": "Le plan a été supprimé de la configuration, mais pas du dépôt restic. Les instantanés restent stockés et les opérations sont suivies jusqu'à leur suppression manuelle. Il est déconseillé de réutiliser un ID de plan supprimé si des sauvegardes ont déjà été effectuées.",
|
||||
"add_plan_modal_error_destroy_prefix": "Erreur de destruction :",
|
||||
"add_plan_modal_error_operation_prefix": "Erreur d'opération : ",
|
||||
"add_plan_modal_title_update": "Plan de mise à jour",
|
||||
"add_plan_modal_title_add": "Ajouter un forfait",
|
||||
"add_plan_modal_button_cancel": "Annuler",
|
||||
"add_plan_modal_button_delete": "Supprimer",
|
||||
"add_plan_modal_button_confirm_delete": "Confirmer la suppression",
|
||||
"add_plan_modal_button_submit": "Soumettre",
|
||||
"add_plan_modal_field_plan_name": "Nom du plan",
|
||||
"add_plan_modal_field_plan_name_tooltip": "Identifiant unique permettant d'identifier ce forfait dans l'interface utilisateur de Backrest (par exemple, s3-myplan). Cet identifiant ne peut pas être modifié après la création du forfait.",
|
||||
"add_plan_modal_validation_plan_name_required": "Veuillez saisir le nom du plan",
|
||||
"add_plan_modal_validation_plan_exists": "Un plan portant ce nom existe déjà.",
|
||||
"add_plan_modal_validation_plan_name_pattern": "Le nom doit être alphanumérique, avec des tirets ou des traits de soulignement comme séparateurs.",
|
||||
"add_plan_modal_field_repository": "Dépôt",
|
||||
"add_plan_modal_field_repository_tooltip": "Le dépôt dans lequel Backrest stockera vos instantanés.",
|
||||
"add_plan_modal_validation_repository_required": "Veuillez sélectionner un dépôt",
|
||||
"add_plan_modal_field_paths": "Chemins",
|
||||
"add_plan_modal_field_paths_tooltip": "Saisissez les chemins d'accès aux fichiers à sauvegarder, un par ligne. La saisie semi-automatique est disponible pendant votre saisie.",
|
||||
"add_plan_modal_validation_paths_required": "Veuillez saisir au moins un chemin d'accès à la sauvegarde",
|
||||
"add_plan_modal_validation_paths_valid_required": "Veuillez saisir au moins un chemin d'accès valide à la sauvegarde",
|
||||
"add_plan_modal_field_paths_placeholder": "Saisissez les chemins, un par ligne\npar exemple\n/home/utilisateur/documents\n/home/user/photos",
|
||||
"add_plan_modal_field_excludes": "Exclut",
|
||||
"add_plan_modal_field_excludes_tooltip_prefix": "Chemins à exclure de vos sauvegardes. Voir la section ",
|
||||
"add_plan_modal_field_excludes_tooltip_link": "Documents restic",
|
||||
"add_plan_modal_field_excludes_tooltip_suffix": " Pour plus d'informations.",
|
||||
"add_plan_modal_field_excludes_add": "Ajouter un glob d'exclusion",
|
||||
"add_plan_modal_field_iexcludes": "Exclut (sans tenir compte de la casse)",
|
||||
"add_plan_modal_field_iexcludes_tooltip_prefix": "Chemins d'accès insensibles à la casse à exclure de vos sauvegardes. Voir la section ",
|
||||
"add_plan_modal_field_iexcludes_add": "Ajouter un groupe d'exclusion insensible à la casse",
|
||||
"add_plan_modal_field_schedule": "Planification de sauvegarde",
|
||||
"add_plan_modal_field_backup_flags": "Indicateurs de sauvegarde",
|
||||
"add_plan_modal_field_backup_flags_tooltip": "Options supplémentaires à ajouter à la commande « restic backup »",
|
||||
"add_plan_modal_field_backup_flags_add": "Définir le drapeau",
|
||||
"add_plan_modal_validation_flag_pattern": "La valeur doit être un paramètre de ligne de commande, par exemple, voir restic backup --help",
|
||||
"add_plan_modal_preview_json": "Configuration du plan au format JSON",
|
||||
"add_plan_modal_see_guide_prefix": "Voir ",
|
||||
"add_plan_modal_see_guide_link": "Guide de démarrage pour dossier",
|
||||
"add_plan_modal_see_guide_suffix": " pour les instructions de configuration du plan.",
|
||||
"add_plan_modal_field_hooks": "Crochets",
|
||||
"settings_success_updated": "Paramètres mis à jour",
|
||||
"settings_error_operation": "Erreur d'opération : ",
|
||||
"button_cancel": "Annuler",
|
||||
"button_close": "Fermer",
|
||||
"button_save": "Sauvegarder",
|
||||
"settings_initial_setup_title": "Configuration initiale du dossier ! ",
|
||||
"settings_initial_setup_message": "Backrest a détecté qu'aucun utilisateur n'est configuré. Veuillez ajouter au moins un utilisateur pour sécuriser l'interface web.",
|
||||
"settings_initial_setup_hint": "Vous pouvez ajouter d'autres utilisateurs ultérieurement ou, si vous oubliez votre mot de passe, réinitialiser les utilisateurs en modifiant le fichier de configuration (généralement situé dans $HOME/.backrest/config.json).",
|
||||
"settings_field_instance_id": "ID d'instance",
|
||||
"settings_validation_instance_id_required": "L'ID d'instance est requis.",
|
||||
"settings_validation_instance_id_pattern": "L'identifiant d'instance doit être alphanumérique, les caractères '_' et '.' étant autorisés comme séparateurs.",
|
||||
"settings_field_instance_id_tooltip": "Le nom de l'instance servira à identifier cette installation de dossier. Choisissez une valeur avec soin, car elle ne pourra plus être modifiée.",
|
||||
"settings_field_instance_id_placeholder": "Identifiant unique de cette instance (par exemple, my-backrest-server)",
|
||||
"settings_section_authentication": "Authentification",
|
||||
"settings_section_multihost": "Identité et partage multi-hôtes",
|
||||
"settings_section_preview": "Aperçu",
|
||||
"settings_auth_disable": "Désactiver l'authentification",
|
||||
"settings_auth_users": "Utilisateurs",
|
||||
"settings_auth_name_required": "Le nom est requis.",
|
||||
"settings_auth_name_pattern": "Le nom doit être alphanumérique, avec des tirets ou des traits de soulignement comme séparateurs.",
|
||||
"settings_auth_username_placeholder": "Nom d'utilisateur",
|
||||
"settings_auth_password_required": "Un mot de passe est requis.",
|
||||
"settings_auth_password_placeholder": "Mot de passe",
|
||||
"settings_auth_add_user": "Ajouter un utilisateur",
|
||||
"settings_multihost_intro": "L'identité multi-hôte permet de partager des référentiels entre plusieurs instances Backrest. Ceci est utile pour suivre l'état des sauvegardes d'un ensemble de systèmes.",
|
||||
"settings_multihost_warning": "Avertissement : cette fonctionnalité est très expérimentale et pourrait faire l’objet de modifications incompatibles avec les versions à l’avenir, ce qui nécessiterait la mise à jour simultanée de toutes les instances.",
|
||||
"settings_multihost_identity": "Identité multi-hôtes",
|
||||
"settings_multihost_identity_required": "Une identité multi-hôtes est requise.",
|
||||
"settings_multihost_identity_tooltip": "L'identité multi-hôtes sert à identifier cette instance dans une configuration multi-hôtes. Elle est dérivée cryptographiquement de la clé publique de cette instance.",
|
||||
"settings_multihost_identity_placeholder": "Identité multi-hôtes unique",
|
||||
"button_copy": "copie",
|
||||
"settings_multihost_authorized_clients": "Clients autorisés",
|
||||
"settings_multihost_authorized_clients_tooltip": "Les clients autorisés sont d'autres instances de Backrest autorisées à accéder aux référentiels de cette instance.",
|
||||
"settings_multihost_authorized_client_item": "Client autorisé",
|
||||
"settings_multihost_known_hosts": "Hôtes connus",
|
||||
"settings_multihost_known_hosts_tooltip": "Les hôtes connus sont d'autres instances de Backrest auxquelles cette instance peut se connecter.",
|
||||
"settings_multihost_known_host_item": "Hôte connu",
|
||||
"settings_peer_instance_id": "ID d'instance",
|
||||
"settings_peer_instance_id_placeholder": "par exemple mon-serveur-de-sauvegarde",
|
||||
"settings_peer_key_id": "Identifiant de la clé",
|
||||
"settings_peer_key_id_required": "L'identifiant de la clé est requis.",
|
||||
"settings_peer_key_id_placeholder": "Identifiant de clé publique",
|
||||
"settings_peer_verified": "Vérifié",
|
||||
"settings_peer_instance_url": "URL de l'instance",
|
||||
"settings_peer_instance_url_required": "L'URL de l'instance est requise pour les hôtes connus.",
|
||||
"settings_peer_instance_url_pattern": "Veuillez saisir une URL valide",
|
||||
"settings_peer_instance_url_placeholder": "https://example.com:9898",
|
||||
"settings_peer_permissions": "Autorisations",
|
||||
"settings_peer_permission_type": "Taper",
|
||||
"settings_peer_permission_type_required": "Un type d'autorisation est requis.",
|
||||
"settings_permission_edit_repo": "Modifier la configuration du dépôt",
|
||||
"settings_permission_read_ops": "Lire les opérations",
|
||||
"settings_permission_type_placeholder": "Sélectionnez le type d'autorisation",
|
||||
"settings_peer_permission_scopes": "Lunettes de visée",
|
||||
"settings_peer_permission_scopes_required": "Au moins une portée est requise",
|
||||
"settings_permission_scope_all": "Tous les dépôts (*)",
|
||||
"settings_permission_scope_placeholder": "Sélectionnez les dépôts ou utilisez * pour tout sélectionner",
|
||||
"settings_peer_add_permission": "Ajouter une autorisation",
|
||||
"settings_peer_add_button": "Ajouter {itemTypeName}",
|
||||
"peer_default_name": "Pair",
|
||||
"repo_error_index": "Échec de l'indexation des instantanés : ",
|
||||
"repo_info_unlocking": "Déverrouillage du dépôt...",
|
||||
"repo_success_unlocked": "Dépôt déverrouillé.",
|
||||
"repo_error_unlock": "Impossible de déverrouiller le dépôt : ",
|
||||
"repo_error_stats": "Échec du calcul des statistiques : ",
|
||||
"repo_error_prune": "Échec de la taille : ",
|
||||
"repo_error_check": "Échec de la vérification : ",
|
||||
"repo_deleted_message": "Le dépôt a été supprimé.",
|
||||
"repo_tab_tree": "Vue arborescente",
|
||||
"repo_tab_list": "Vue Liste",
|
||||
"repo_history_title": "Historique des actions de sauvegarde",
|
||||
"repo_tab_stats": "Statistiques",
|
||||
"loading": "Chargement...",
|
||||
"repo_button_run_command": "Exécuter la commande",
|
||||
"repo_tooltip_run_command": "Utilisateurs avancés : ouvrez un shell restic pour exécuter des commandes sur le dépôt. Réindexez les instantanés pour refléter les modifications apportées à Backrest.",
|
||||
"repo_button_index": "Aperçus de l'index",
|
||||
"repo_tooltip_index": "Indexe les instantanés du référentiel. Les instantanés sont également indexés automatiquement après chaque sauvegarde.",
|
||||
"repo_button_unlock": "Dépôt de déverrouillage",
|
||||
"repo_tooltip_unlock": "Supprime les fichiers de verrouillage et vérifie le dépôt pour détecter les erreurs. À exécuter uniquement si vous êtes certain qu'aucun autre système n'accède au dépôt.",
|
||||
"repo_button_prune": "Élaguer maintenant",
|
||||
"repo_tooltip_prune": "Exécute une opération de nettoyage du dépôt qui supprimera les anciens instantanés et libérera de l'espace.",
|
||||
"repo_button_check": "Vérifier maintenant",
|
||||
"repo_tooltip_check": "Exécute une opération de vérification sur le dépôt afin de contrôler son intégrité.",
|
||||
"repo_button_stats": "Statistiques de calcul",
|
||||
"repo_tooltip_stats": "Exécute la commande restic stats sur le dépôt ; cette opération peut être longue.",
|
||||
"settings_modal_title": "Paramètres",
|
||||
"app_breadcrumb_repo": "Dépôt",
|
||||
"app_breadcrumb_peer": "Pair",
|
||||
"app_breadcrumb_plan": "Plan",
|
||||
"app_breadcrumb_summary": "Résumé",
|
||||
"app_breadcrumb_getting_started": "Commencer",
|
||||
"app_page_not_found": "Page introuvable",
|
||||
"app_repo_not_found": "Dépôt {repoId} introuvable",
|
||||
"app_plan_not_found": "Plan {planId} introuvable",
|
||||
"app_unknown_peer": "Pair inconnu",
|
||||
"app_unknown_repo": "Dépôt inconnu",
|
||||
"app_remote_repo_title": "Dépôt distant : {id}",
|
||||
"app_logout": "Déconnexion",
|
||||
"app_menu_plans": "Plans",
|
||||
"app_menu_add_plan": "Ajouter un forfait",
|
||||
"app_menu_repos": "Dépôts",
|
||||
"app_menu_add_repo": "Ajouter un dépôt",
|
||||
"app_menu_remote_instances": "Instances distantes",
|
||||
"app_menu_settings": "Paramètres",
|
||||
"app_error_initial_config": "Impossible de récupérer la configuration initiale ; cela signifie généralement que l’interface utilisateur n’a pas pu se connecter au serveur.",
|
||||
"login_success": "Connecté",
|
||||
"login_error": "La connexion a échoué: ",
|
||||
"login_title": "Se connecter",
|
||||
"login_username_required": "Veuillez saisir votre nom d'utilisateur",
|
||||
"login_username_placeholder": "Nom d'utilisateur",
|
||||
"login_password_required": "Veuillez saisir votre mot de passe !",
|
||||
"login_password_placeholder": "Mot de passe",
|
||||
"login_button": "Se connecter"
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"$schema": "https://inlang.com/schema/inlang-message-format",
|
||||
"example_message": "हैलो वर्ल्ड {username}",
|
||||
"add_plan_modal_error_template_not_found": "टेम्पलेट नहीं मिला",
|
||||
"add_plan_modal_error_plan_delete_not_found": "कॉन्फ़िगरेशन अपडेट करने में विफल, हटाने की योजना नहीं मिली",
|
||||
"add_plan_modal_success_plan_deleted": "कॉन्फ़िगरेशन से प्लान हटा दिया गया है, लेकिन रेस्टिक रिपॉज़िटरी से नहीं। स्नैपशॉट स्टोरेज में रहेंगे और मैन्युअल रूप से हटाए जाने तक ऑपरेशन ट्रैक किए जाते रहेंगे। यदि बैकअप पहले ही लिए जा चुके हैं, तो हटाए गए प्लान आईडी का पुनः उपयोग करने की सलाह नहीं दी जाती है।",
|
||||
"add_plan_modal_error_destroy_prefix": "नष्ट करने में त्रुटि:",
|
||||
"add_plan_modal_error_operation_prefix": "ऑपरेशन त्रुटि: ",
|
||||
"add_plan_modal_title_update": "योजना अद्यतन करें",
|
||||
"add_plan_modal_title_add": "योजना जोड़ें",
|
||||
"add_plan_modal_button_cancel": "रद्द करना",
|
||||
"add_plan_modal_button_delete": "मिटाना",
|
||||
"add_plan_modal_button_confirm_delete": "हटाने की पुष्टि करें",
|
||||
"add_plan_modal_button_submit": "जमा करना",
|
||||
"add_plan_modal_field_plan_name": "योजना का नाम",
|
||||
"add_plan_modal_field_plan_name_tooltip": "यह एक विशिष्ट आईडी है जो बैकरेस्ट यूआई में इस प्लान की पहचान करती है (उदाहरण के लिए s3-myplan)। इसे बनाने के बाद बदला नहीं जा सकता।",
|
||||
"add_plan_modal_validation_plan_name_required": "कृपया योजना का नाम दर्ज करें",
|
||||
"add_plan_modal_validation_plan_exists": "इस नाम से योजना पहले से मौजूद है",
|
||||
"add_plan_modal_validation_plan_name_pattern": "नाम अक्षरांकीय होना चाहिए और उसमें डैश या अंडरस्कोर विभाजक के रूप में होने चाहिए।",
|
||||
"add_plan_modal_field_repository": "कोष",
|
||||
"add_plan_modal_field_repository_tooltip": "वह रिपॉजिटरी जिसमें बैकरेस्ट आपके स्नैपशॉट स्टोर करेगा।",
|
||||
"add_plan_modal_validation_repository_required": "कृपया रिपॉजिटरी का चयन करें",
|
||||
"add_plan_modal_field_paths": "के रास्ते",
|
||||
"add_plan_modal_field_paths_tooltip": "बैकअप लेने के लिए फ़ाइल पथ दर्ज करें, प्रत्येक पंक्ति में एक। टाइप करते समय स्वतः पूर्णता सुविधा उपलब्ध है।",
|
||||
"add_plan_modal_validation_paths_required": "कृपया बैकअप के लिए कम से कम एक पथ दर्ज करें",
|
||||
"add_plan_modal_validation_paths_valid_required": "कृपया बैकअप के लिए कम से कम एक वैध पथ दर्ज करें",
|
||||
"add_plan_modal_field_paths_placeholder": "प्रत्येक पंक्ति में एक पथ दर्ज करें\nउदाहरण के लिए\n/होम/उपयोगकर्ता/दस्तावेज़\n/होम/यूज़र/फ़ोटो",
|
||||
"add_plan_modal_field_excludes": "इससे बाहर रखा गया",
|
||||
"add_plan_modal_field_excludes_tooltip_prefix": "बैकअप से बाहर रखने के लिए पथ। देखें ",
|
||||
"add_plan_modal_field_excludes_tooltip_link": "रेस्टिक डॉक्स",
|
||||
"add_plan_modal_field_excludes_tooltip_suffix": " अधिक जानकारी के लिए।",
|
||||
"add_plan_modal_field_excludes_add": "एक्सक्लूजन ग्लोब जोड़ें",
|
||||
"add_plan_modal_field_iexcludes": "बहिष्कृत (केस असंवेदनशील)",
|
||||
"add_plan_modal_field_iexcludes_tooltip_prefix": "बैकअप से बाहर रखने के लिए केस-असंवेदनशील पथ। देखें ",
|
||||
"add_plan_modal_field_iexcludes_add": "केस असंवेदनशील बहिष्करण ग्लोब जोड़ें",
|
||||
"add_plan_modal_field_schedule": "बैकअप अनुसूची",
|
||||
"add_plan_modal_field_backup_flags": "बैकअप फ़्लैग",
|
||||
"add_plan_modal_field_backup_flags_tooltip": "'restic backup' कमांड में जोड़ने के लिए अतिरिक्त फ़्लैग",
|
||||
"add_plan_modal_field_backup_flags_add": "झंडा सेट करें",
|
||||
"add_plan_modal_validation_flag_pattern": "मान एक CLI फ़्लैग होना चाहिए, उदाहरण के लिए restic backup --help देखें।",
|
||||
"add_plan_modal_preview_json": "प्लान कॉन्फ़िगरेशन को JSON फॉर्मेट में प्रस्तुत करें",
|
||||
"add_plan_modal_see_guide_prefix": "देखना ",
|
||||
"add_plan_modal_see_guide_link": "बैकरेस्ट के साथ शुरुआत करने के लिए गाइड",
|
||||
"add_plan_modal_see_guide_suffix": " योजना विन्यास निर्देशों के लिए।",
|
||||
"add_plan_modal_field_hooks": "हुक्स",
|
||||
"settings_success_updated": "सेटिंग्स अपडेट हो गईं",
|
||||
"settings_error_operation": "ऑपरेशन त्रुटि: ",
|
||||
"button_cancel": "रद्द करना",
|
||||
"button_close": "बंद करना",
|
||||
"button_save": "बचाना",
|
||||
"settings_initial_setup_title": "प्रारंभिक बैकरेस्ट सेटअप! ",
|
||||
"settings_initial_setup_message": "बैकरेस्ट ने पता लगाया है कि आपने कोई उपयोगकर्ता कॉन्फ़िगर नहीं किया है, कृपया वेब इंटरफ़ेस को सुरक्षित करने के लिए कम से कम एक उपयोगकर्ता जोड़ें।",
|
||||
"settings_initial_setup_hint": "आप बाद में और उपयोगकर्ता जोड़ सकते हैं या, यदि आप अपना पासवर्ड भूल जाते हैं, तो कॉन्फ़िगरेशन फ़ाइल (आमतौर पर $HOME/.backrest/config.json में) को संपादित करके उपयोगकर्ताओं को रीसेट कर सकते हैं।",
|
||||
"settings_field_instance_id": "उदाहरण आईडी",
|
||||
"settings_validation_instance_id_required": "इंस्टेंस आईडी आवश्यक है",
|
||||
"settings_validation_instance_id_pattern": "इंस्टेंस आईडी अल्फ़ान्यूमेरिक होनी चाहिए और विभाजक के रूप में '_-.' का उपयोग किया जा सकता है।",
|
||||
"settings_field_instance_id_tooltip": "इस बैकरेस्ट इंस्टॉलेशन की पहचान के लिए इंस्टेंस नाम का उपयोग किया जाएगा। कृपया इसका मान ध्यानपूर्वक चुनें क्योंकि इसे बाद में बदला नहीं जा सकता।",
|
||||
"settings_field_instance_id_placeholder": "इस इंस्टेंस के लिए अद्वितीय इंस्टेंस आईडी (उदाहरण: my-backrest-server)",
|
||||
"settings_section_authentication": "प्रमाणीकरण",
|
||||
"settings_section_multihost": "मल्टीहोस्ट पहचान और साझाकरण",
|
||||
"settings_section_preview": "पूर्व दर्शन",
|
||||
"settings_auth_disable": "प्रमाणीकरण अक्षम करें",
|
||||
"settings_auth_users": "उपयोगकर्ताओं",
|
||||
"settings_auth_name_required": "नाम आवश्यक है",
|
||||
"settings_auth_name_pattern": "नाम अक्षरांकीय होना चाहिए और उसमें डैश या अंडरस्कोर विभाजक के रूप में होने चाहिए।",
|
||||
"settings_auth_username_placeholder": "उपयोगकर्ता नाम",
|
||||
"settings_auth_password_required": "पासवर्ड आवश्यक है",
|
||||
"settings_auth_password_placeholder": "पासवर्ड",
|
||||
"settings_auth_add_user": "उपयोगकर्ता जोड़ें",
|
||||
"settings_multihost_intro": "मल्टीहोस्ट आइडेंटिटी आपको कई बैकरेस्ट इंस्टेंसेस के बीच रिपॉजिटरी साझा करने की अनुमति देती है। यह सिस्टमों के समूह की बैकअप स्थिति पर नज़र रखने के लिए उपयोगी है।",
|
||||
"settings_multihost_warning": "चेतावनी: यह सुविधा अभी प्रायोगिक चरण में है और भविष्य में इसमें संस्करण के साथ असंगत परिवर्तन हो सकते हैं, जिसके लिए सभी इंस्टेंस को एक साथ अपडेट करना आवश्यक होगा।",
|
||||
"settings_multihost_identity": "मल्टीहोस्ट पहचान",
|
||||
"settings_multihost_identity_required": "मल्टीहोस्ट पहचान आवश्यक है",
|
||||
"settings_multihost_identity_tooltip": "मल्टीहोस्ट सेटअप में इस इंस्टेंस की पहचान करने के लिए मल्टीहोस्ट आइडेंटिटी का उपयोग किया जाता है। यह इस इंस्टेंस की पब्लिक की से क्रिप्टोग्राफिक रूप से प्राप्त की जाती है।",
|
||||
"settings_multihost_identity_placeholder": "अद्वितीय मल्टीहोस्ट पहचान",
|
||||
"button_copy": "कॉपी",
|
||||
"settings_multihost_authorized_clients": "अधिकृत ग्राहक",
|
||||
"settings_multihost_authorized_clients_tooltip": "अधिकृत क्लाइंट वे अन्य बैकरेस्ट इंस्टेंस हैं जिन्हें इस इंस्टेंस पर मौजूद रिपॉजिटरी तक पहुंचने की अनुमति है।",
|
||||
"settings_multihost_authorized_client_item": "अधिकृत ग्राहक",
|
||||
"settings_multihost_known_hosts": "ज्ञात मेज़बान",
|
||||
"settings_multihost_known_hosts_tooltip": "ज्ञात होस्ट वे अन्य बैकरेस्ट इंस्टेंस हैं जिनसे यह इंस्टेंस कनेक्ट हो सकता है।",
|
||||
"settings_multihost_known_host_item": "ज्ञात मेज़बान",
|
||||
"settings_peer_instance_id": "उदाहरण आईडी",
|
||||
"settings_peer_instance_id_placeholder": "उदाहरण के लिए मेरा बैकअप सर्वर",
|
||||
"settings_peer_key_id": "कुंजी आईडी",
|
||||
"settings_peer_key_id_required": "कुंजी आईडी आवश्यक है",
|
||||
"settings_peer_key_id_placeholder": "सार्वजनिक कुंजी पहचानकर्ता",
|
||||
"settings_peer_verified": "सत्यापित",
|
||||
"settings_peer_instance_url": "इंस्टेंस यूआरएल",
|
||||
"settings_peer_instance_url_required": "ज्ञात होस्टों के लिए इंस्टेंस URL आवश्यक है।",
|
||||
"settings_peer_instance_url_pattern": "क्रुपया मान्य यूआरएल दर्ज करें",
|
||||
"settings_peer_instance_url_placeholder": "https://example.com:9898",
|
||||
"settings_peer_permissions": "अनुमतियां",
|
||||
"settings_peer_permission_type": "प्रकार",
|
||||
"settings_peer_permission_type_required": "अनुमति प्रकार आवश्यक है",
|
||||
"settings_permission_edit_repo": "रिपॉजिटरी कॉन्फ़िगरेशन संपादित करें",
|
||||
"settings_permission_read_ops": "रीड ऑपरेशन",
|
||||
"settings_permission_type_placeholder": "अनुमति प्रकार का चयन करें",
|
||||
"settings_peer_permission_scopes": "कार्यक्षेत्र",
|
||||
"settings_peer_permission_scopes_required": "कम से कम एक स्कोप आवश्यक है",
|
||||
"settings_permission_scope_all": "सभी रिपॉजिटरी (*)",
|
||||
"settings_permission_scope_placeholder": "रिपॉजिटरी चुनें या सभी के लिए * का उपयोग करें",
|
||||
"settings_peer_add_permission": "अनुमति जोड़ें",
|
||||
"settings_peer_add_button": "{itemTypeName} जोड़ें",
|
||||
"peer_default_name": "समकक्ष",
|
||||
"repo_error_index": "स्नैपशॉट को इंडेक्स करने में विफलता: ",
|
||||
"repo_info_unlocking": "रिपॉजिटरी को अनलॉक किया जा रहा है...",
|
||||
"repo_success_unlocked": "रिपॉजिटरी अनलॉक हो गई।",
|
||||
"repo_error_unlock": "रिपॉजिटरी को अनलॉक करने में विफल: ",
|
||||
"repo_error_stats": "सांख्यिकी गणना करने में विफल: ",
|
||||
"repo_error_prune": "छंटाई करने में विफल: ",
|
||||
"repo_error_check": "जाँच करने में विफल: ",
|
||||
"repo_deleted_message": "रिपॉजिटरी हटा दी गई",
|
||||
"repo_tab_tree": "वृक्ष दृश्य",
|
||||
"repo_tab_list": "लिस्ट व्यू",
|
||||
"repo_history_title": "बैकअप क्रिया इतिहास",
|
||||
"repo_tab_stats": "आँकड़े",
|
||||
"loading": "लोड हो रहा है...",
|
||||
"repo_button_run_command": "कमांड चलाएँ",
|
||||
"repo_tooltip_run_command": "उन्नत उपयोगकर्ता: रिपॉजिटरी पर कमांड चलाने के लिए एक रेस्टिक शेल खोलें। बैकरेस्ट में हुए किसी भी बदलाव को दर्शाने के लिए स्नैपशॉट को पुनः इंडेक्स करें।",
|
||||
"repo_button_index": "इंडेक्स स्नैपशॉट",
|
||||
"repo_tooltip_index": "यह रिपॉजिटरी में स्नैपशॉट को इंडेक्स करता है। प्रत्येक बैकअप के बाद स्नैपशॉट स्वचालित रूप से इंडेक्स हो जाते हैं।",
|
||||
"repo_button_unlock": "रेपो को अनलॉक करें",
|
||||
"repo_tooltip_unlock": "लॉकफाइल हटाता है और रिपॉजिटरी में त्रुटियों की जाँच करता है। इसे तभी चलाएँ जब आप सुनिश्चित हों कि रिपॉजिटरी को किसी अन्य सिस्टम द्वारा एक्सेस नहीं किया जा रहा है।",
|
||||
"repo_button_prune": "अभी छंटाई करें",
|
||||
"repo_tooltip_prune": "यह रिपॉजिटरी पर प्रून ऑपरेशन चलाता है जो पुराने स्नैपशॉट को हटाकर जगह खाली कर देगा।",
|
||||
"repo_button_check": "अब जांचें",
|
||||
"repo_tooltip_check": "यह रिपॉजिटरी पर एक जांच अभियान चलाता है जो रिपॉजिटरी की अखंडता को सत्यापित करेगा।",
|
||||
"repo_button_stats": "सांख्यिकी की गणना करें",
|
||||
"repo_tooltip_stats": "यह रिपॉजिटरी पर restic stats कमांड चलाता है, यह एक धीमी प्रक्रिया हो सकती है।",
|
||||
"settings_modal_title": "सेटिंग्स",
|
||||
"app_breadcrumb_repo": "रेपो",
|
||||
"app_breadcrumb_peer": "समकक्ष",
|
||||
"app_breadcrumb_plan": "योजना",
|
||||
"app_breadcrumb_summary": "सारांश",
|
||||
"app_breadcrumb_getting_started": "शुरू करना",
|
||||
"app_page_not_found": "पृष्ठ नहीं मिला",
|
||||
"app_repo_not_found": "रेपो {repoId} नहीं मिला",
|
||||
"app_plan_not_found": "योजना {planId} नहीं मिली",
|
||||
"app_unknown_peer": "अज्ञात सहकर्मी",
|
||||
"app_unknown_repo": "अज्ञात रेपो",
|
||||
"app_remote_repo_title": "रिमोट रेपो: {id}",
|
||||
"app_logout": "लॉग आउट",
|
||||
"app_menu_plans": "योजनाओं",
|
||||
"app_menu_add_plan": "योजना जोड़ें",
|
||||
"app_menu_repos": "डेटा संग्रह स्थान",
|
||||
"app_menu_add_repo": "रेपो जोड़ें",
|
||||
"app_menu_remote_instances": "रिमोट इंस्टेंसेस",
|
||||
"app_menu_settings": "सेटिंग्स",
|
||||
"app_error_initial_config": "प्रारंभिक कॉन्फ़िगरेशन प्राप्त करने में विफलता, आमतौर पर इसका मतलब है कि UI बैकएंड से कनेक्ट नहीं हो सका।",
|
||||
"login_success": "में लॉग इन",
|
||||
"login_error": "लॉगिन विफल: ",
|
||||
"login_title": "लॉग इन करें",
|
||||
"login_username_required": "कृपया अपना उपयोगकर्ता नाम दर्ज करें",
|
||||
"login_username_placeholder": "उपयोगकर्ता नाम",
|
||||
"login_password_required": "कृपया अपना पासवर्ड दर्ज करें!",
|
||||
"login_password_placeholder": "पासवर्ड",
|
||||
"login_button": "लॉग इन करें"
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"$schema": "https://inlang.com/schema/inlang-message-format",
|
||||
"example_message": "Halo dunia {username}",
|
||||
"add_plan_modal_error_template_not_found": "Templat tidak ditemukan",
|
||||
"add_plan_modal_error_plan_delete_not_found": "Gagal memperbarui konfigurasi, rencana penghapusan tidak ditemukan.",
|
||||
"add_plan_modal_success_plan_deleted": "Rencana dihapus dari konfigurasi, tetapi tidak dari repositori restic. Snapshot akan tetap berada di penyimpanan dan operasi akan dilacak hingga dihapus secara manual. Menggunakan kembali ID rencana yang telah dihapus tidak disarankan jika pencadangan telah dilakukan.",
|
||||
"add_plan_modal_error_destroy_prefix": "Kesalahan penghancuran:",
|
||||
"add_plan_modal_error_operation_prefix": "Kesalahan operasi: ",
|
||||
"add_plan_modal_title_update": "Rencana Pembaruan",
|
||||
"add_plan_modal_title_add": "Tambahkan Paket",
|
||||
"add_plan_modal_button_cancel": "Membatalkan",
|
||||
"add_plan_modal_button_delete": "Menghapus",
|
||||
"add_plan_modal_button_confirm_delete": "Konfirmasi Penghapusan",
|
||||
"add_plan_modal_button_submit": "Kirim",
|
||||
"add_plan_modal_field_plan_name": "Nama Rencana",
|
||||
"add_plan_modal_field_plan_name_tooltip": "ID unik yang mengidentifikasi paket ini di UI backend (misalnya s3-myplan). ID ini tidak dapat diubah setelah pembuatan.",
|
||||
"add_plan_modal_validation_plan_name_required": "Silakan masukkan nama paket",
|
||||
"add_plan_modal_validation_plan_exists": "Rencana dengan nama sudah ada.",
|
||||
"add_plan_modal_validation_plan_name_pattern": "Nama harus berupa gabungan huruf dan angka dengan tanda hubung atau garis bawah sebagai pemisah.",
|
||||
"add_plan_modal_field_repository": "Gudang",
|
||||
"add_plan_modal_field_repository_tooltip": "Repositori tempat Backrest akan menyimpan snapshot Anda.",
|
||||
"add_plan_modal_validation_repository_required": "Silakan pilih repositori",
|
||||
"add_plan_modal_field_paths": "Jalan setapak",
|
||||
"add_plan_modal_field_paths_tooltip": "Masukkan jalur file yang akan dicadangkan, satu per baris. Fitur pelengkapan otomatis tersedia saat Anda mengetik.",
|
||||
"add_plan_modal_validation_paths_required": "Harap masukkan setidaknya satu jalur untuk pencadangan",
|
||||
"add_plan_modal_validation_paths_valid_required": "Harap masukkan setidaknya satu jalur yang valid untuk pencadangan.",
|
||||
"add_plan_modal_field_paths_placeholder": "Masukkan jalur, satu per baris.\nmisalnya\n/home/user/documents\n/home/user/photos",
|
||||
"add_plan_modal_field_excludes": "Tidak termasuk",
|
||||
"add_plan_modal_field_excludes_tooltip_prefix": "Jalur yang perlu dikecualikan dari pencadangan Anda. Lihat ",
|
||||
"add_plan_modal_field_excludes_tooltip_link": "dokumen restic",
|
||||
"add_plan_modal_field_excludes_tooltip_suffix": " untuk info selengkapnya.",
|
||||
"add_plan_modal_field_excludes_add": "Tambahkan Glob Pengecualian",
|
||||
"add_plan_modal_field_iexcludes": "Pengecualian (Tidak Memperhatikan Huruf Besar/Kecil)",
|
||||
"add_plan_modal_field_iexcludes_tooltip_prefix": "Jalur yang tidak peka terhadap huruf besar/kecil untuk dikecualikan dari pencadangan Anda. Lihat ",
|
||||
"add_plan_modal_field_iexcludes_add": "Tambahkan Glob Pengecualian yang Tidak Peka Huruf Besar/Kecil",
|
||||
"add_plan_modal_field_schedule": "Jadwal Pencadangan",
|
||||
"add_plan_modal_field_backup_flags": "Bendera Cadangan",
|
||||
"add_plan_modal_field_backup_flags_tooltip": "Bendera tambahan untuk ditambahkan ke perintah 'restic backup'",
|
||||
"add_plan_modal_field_backup_flags_add": "Tetapkan Bendera",
|
||||
"add_plan_modal_validation_flag_pattern": "Nilainya harus berupa flag CLI, misalnya lihat restic backup --help",
|
||||
"add_plan_modal_preview_json": "Konfigurasi Rencana sebagai JSON",
|
||||
"add_plan_modal_see_guide_prefix": "Melihat ",
|
||||
"add_plan_modal_see_guide_link": "panduan memulai sandaran punggung",
|
||||
"add_plan_modal_see_guide_suffix": " untuk petunjuk konfigurasi rencana.",
|
||||
"add_plan_modal_field_hooks": "Kait",
|
||||
"settings_success_updated": "Pengaturan diperbarui",
|
||||
"settings_error_operation": "Kesalahan operasi: ",
|
||||
"button_cancel": "Membatalkan",
|
||||
"button_close": "Menutup",
|
||||
"button_save": "Menyimpan",
|
||||
"settings_initial_setup_title": "Pengaturan awal sandaran punggung! ",
|
||||
"settings_initial_setup_message": "Backrest mendeteksi bahwa Anda belum mengkonfigurasi pengguna apa pun, harap tambahkan setidaknya satu pengguna untuk mengamankan antarmuka web.",
|
||||
"settings_initial_setup_hint": "Anda dapat menambahkan lebih banyak pengguna nanti atau, jika Anda lupa kata sandi, mengatur ulang pengguna dengan mengedit file konfigurasi (biasanya di $HOME/.backrest/config.json)",
|
||||
"settings_field_instance_id": "ID Instansi",
|
||||
"settings_validation_instance_id_required": "ID Instansi diperlukan",
|
||||
"settings_validation_instance_id_pattern": "ID Instansi harus berupa alfanumerik dengan '_-.' diperbolehkan sebagai pemisah.",
|
||||
"settings_field_instance_id_tooltip": "Nama instance akan digunakan untuk mengidentifikasi instalasi sandaran punggung ini. Pilih nilai dengan hati-hati karena tidak dapat diubah nanti.",
|
||||
"settings_field_instance_id_placeholder": "ID instance unik untuk instance ini (misalnya my-backrest-server)",
|
||||
"settings_section_authentication": "Autentikasi",
|
||||
"settings_section_multihost": "Identitas dan Berbagi Multihost",
|
||||
"settings_section_preview": "Pratinjau",
|
||||
"settings_auth_disable": "Nonaktifkan Otentikasi",
|
||||
"settings_auth_users": "Pengguna",
|
||||
"settings_auth_name_required": "Nama wajib diisi.",
|
||||
"settings_auth_name_pattern": "Nama harus berupa gabungan huruf dan angka dengan tanda hubung atau garis bawah sebagai pemisah.",
|
||||
"settings_auth_username_placeholder": "Nama belakang",
|
||||
"settings_auth_password_required": "Kata sandi diperlukan",
|
||||
"settings_auth_password_placeholder": "Kata sandi",
|
||||
"settings_auth_add_user": "Tambahkan pengguna",
|
||||
"settings_multihost_intro": "Identitas multihost memungkinkan Anda untuk berbagi repositori di antara beberapa instance Backrest. Ini berguna untuk melacak status pencadangan dari sekumpulan sistem.",
|
||||
"settings_multihost_warning": "Peringatan: fitur ini masih sangat eksperimental dan mungkin akan mengalami perubahan yang tidak kompatibel dengan versi di masa mendatang, yang mengharuskan semua instance diperbarui secara bersamaan.",
|
||||
"settings_multihost_identity": "Identitas Multihost",
|
||||
"settings_multihost_identity_required": "Identitas multihost diperlukan.",
|
||||
"settings_multihost_identity_tooltip": "Identitas multihost digunakan untuk mengidentifikasi instance ini dalam pengaturan multihost. Identitas ini diturunkan secara kriptografis dari kunci publik instance ini.",
|
||||
"settings_multihost_identity_placeholder": "Identitas multihost unik",
|
||||
"button_copy": "menyalin",
|
||||
"settings_multihost_authorized_clients": "Klien Resmi",
|
||||
"settings_multihost_authorized_clients_tooltip": "Klien yang berwenang adalah instance Backrest lain yang diizinkan untuk mengakses repositori pada instance ini.",
|
||||
"settings_multihost_authorized_client_item": "Klien Resmi",
|
||||
"settings_multihost_known_hosts": "Tuan Rumah yang Dikenal",
|
||||
"settings_multihost_known_hosts_tooltip": "Host yang dikenal adalah instance Backrest lain yang dapat dihubungkan oleh instance ini.",
|
||||
"settings_multihost_known_host_item": "Tuan Rumah yang Dikenal",
|
||||
"settings_peer_instance_id": "ID Instansi",
|
||||
"settings_peer_instance_id_placeholder": "misalnya server cadangan saya",
|
||||
"settings_peer_key_id": "ID Kunci",
|
||||
"settings_peer_key_id_required": "ID kunci diperlukan",
|
||||
"settings_peer_key_id_placeholder": "Pengidentifikasi kunci publik",
|
||||
"settings_peer_verified": "Terverifikasi",
|
||||
"settings_peer_instance_url": "URL Instans",
|
||||
"settings_peer_instance_url_required": "URL Instance diperlukan untuk host yang dikenal.",
|
||||
"settings_peer_instance_url_pattern": "Silakan masukkan URL yang valid",
|
||||
"settings_peer_instance_url_placeholder": "https://example.com:9898",
|
||||
"settings_peer_permissions": "Izin",
|
||||
"settings_peer_permission_type": "Jenis",
|
||||
"settings_peer_permission_type_required": "Jenis izin diperlukan",
|
||||
"settings_permission_edit_repo": "Edit Konfigurasi Repositori",
|
||||
"settings_permission_read_ops": "Operasi Baca",
|
||||
"settings_permission_type_placeholder": "Pilih jenis izin",
|
||||
"settings_peer_permission_scopes": "Lingkup",
|
||||
"settings_peer_permission_scopes_required": "Setidaknya satu lingkup diperlukan",
|
||||
"settings_permission_scope_all": "Semua Repositori (*)",
|
||||
"settings_permission_scope_placeholder": "Pilih repositori atau gunakan * untuk semua",
|
||||
"settings_peer_add_permission": "Tambahkan Izin",
|
||||
"settings_peer_add_button": "Tambahkan {itemTypeName}",
|
||||
"peer_default_name": "Teman sebaya",
|
||||
"repo_error_index": "Gagal mengindeks snapshot: ",
|
||||
"repo_info_unlocking": "Membuka kunci repositori...",
|
||||
"repo_success_unlocked": "Repositori tidak terkunci.",
|
||||
"repo_error_unlock": "Gagal membuka kunci repositori: ",
|
||||
"repo_error_stats": "Gagal menghitung statistik: ",
|
||||
"repo_error_prune": "Gagal memangkas: ",
|
||||
"repo_error_check": "Gagal memeriksa: ",
|
||||
"repo_deleted_message": "Repositori telah dihapus.",
|
||||
"repo_tab_tree": "Pemandangan Pohon",
|
||||
"repo_tab_list": "Tampilan Daftar",
|
||||
"repo_history_title": "Riwayat Tindakan Pencadangan",
|
||||
"repo_tab_stats": "Statistik",
|
||||
"loading": "Memuat...",
|
||||
"repo_button_run_command": "Jalankan Perintah",
|
||||
"repo_tooltip_run_command": "Pengguna tingkat lanjut: buka shell restic untuk menjalankan perintah pada repositori. Lakukan pengindeksan ulang snapshot untuk mencerminkan setiap perubahan di Backrest.",
|
||||
"repo_button_index": "Cuplikan Indeks",
|
||||
"repo_tooltip_index": "Mengindeks snapshot dalam repositori. Snapshot juga diindeks secara otomatis setelah setiap pencadangan.",
|
||||
"repo_button_unlock": "Buka Kunci Repositori",
|
||||
"repo_tooltip_unlock": "Menghapus file pengunci dan memeriksa repositori untuk kesalahan. Jalankan hanya jika Anda yakin repositori tidak sedang diakses oleh sistem lain.",
|
||||
"repo_button_prune": "Pangkas Sekarang",
|
||||
"repo_tooltip_prune": "Menjalankan operasi pembersihan (prune) pada repositori yang akan menghapus snapshot lama dan membebaskan ruang penyimpanan.",
|
||||
"repo_button_check": "Periksa Sekarang",
|
||||
"repo_tooltip_check": "Menjalankan operasi pengecekan pada repositori yang akan memverifikasi integritas repositori.",
|
||||
"repo_button_stats": "Hitung Statistik",
|
||||
"repo_tooltip_stats": "Menjalankan perintah restic stats pada repositori, ini mungkin merupakan operasi yang lambat.",
|
||||
"settings_modal_title": "Pengaturan",
|
||||
"app_breadcrumb_repo": "Repositori",
|
||||
"app_breadcrumb_peer": "Teman sebaya",
|
||||
"app_breadcrumb_plan": "Rencana",
|
||||
"app_breadcrumb_summary": "Ringkasan",
|
||||
"app_breadcrumb_getting_started": "Memulai",
|
||||
"app_page_not_found": "Halaman tidak ditemukan",
|
||||
"app_repo_not_found": "Repo {repoId} tidak ditemukan",
|
||||
"app_plan_not_found": "Rencana {planId} tidak ditemukan",
|
||||
"app_unknown_peer": "Rekan yang Tidak Dikenal",
|
||||
"app_unknown_repo": "Repositori Tidak Dikenal",
|
||||
"app_remote_repo_title": "Repositori Jarak Jauh: {id}",
|
||||
"app_logout": "Keluar",
|
||||
"app_menu_plans": "Rencana",
|
||||
"app_menu_add_plan": "Tambahkan Paket",
|
||||
"app_menu_repos": "Repositori",
|
||||
"app_menu_add_repo": "Tambahkan Repositori",
|
||||
"app_menu_remote_instances": "Instans Jarak Jauh",
|
||||
"app_menu_settings": "Pengaturan",
|
||||
"app_error_initial_config": "Gagal mengambil konfigurasi awal, biasanya ini berarti UI tidak dapat terhubung ke backend.",
|
||||
"login_success": "Masuk",
|
||||
"login_error": "Login gagal: ",
|
||||
"login_title": "Login",
|
||||
"login_username_required": "Silakan masukkan nama pengguna Anda",
|
||||
"login_username_placeholder": "Nama belakang",
|
||||
"login_password_required": "Silakan masukkan kata sandi Anda!",
|
||||
"login_password_placeholder": "Kata sandi",
|
||||
"login_button": "Masuk"
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"$schema": "https://inlang.com/schema/inlang-message-format",
|
||||
"example_message": "Olá mundo {username}",
|
||||
"add_plan_modal_error_template_not_found": "Modelo não encontrado",
|
||||
"add_plan_modal_error_plan_delete_not_found": "Falha ao atualizar a configuração; plano de exclusão não encontrado.",
|
||||
"add_plan_modal_success_plan_deleted": "O plano foi excluído da configuração, mas não do repositório restic. Os snapshots permanecerão armazenados e as operações serão rastreadas até que sejam excluídos manualmente. Não é recomendável reutilizar um ID de plano excluído se backups já tiverem sido realizados.",
|
||||
"add_plan_modal_error_destroy_prefix": "Erro de destruição:",
|
||||
"add_plan_modal_error_operation_prefix": "Erro na operação: ",
|
||||
"add_plan_modal_title_update": "Plano de atualização",
|
||||
"add_plan_modal_title_add": "Adicionar plano",
|
||||
"add_plan_modal_button_cancel": "Cancelar",
|
||||
"add_plan_modal_button_delete": "Excluir",
|
||||
"add_plan_modal_button_confirm_delete": "Confirmar exclusão",
|
||||
"add_plan_modal_button_submit": "Enviar",
|
||||
"add_plan_modal_field_plan_name": "Nome do plano",
|
||||
"add_plan_modal_field_plan_name_tooltip": "ID exclusivo que identifica este plano na interface do usuário do Backrest (ex.: s3-myplan). Este ID não pode ser alterado após a criação.",
|
||||
"add_plan_modal_validation_plan_name_required": "Por favor, insira o nome do plano.",
|
||||
"add_plan_modal_validation_plan_exists": "Já existe um plano com esse nome.",
|
||||
"add_plan_modal_validation_plan_name_pattern": "O nome deve ser alfanumérico, com hífens ou sublinhados como separadores.",
|
||||
"add_plan_modal_field_repository": "Repositório",
|
||||
"add_plan_modal_field_repository_tooltip": "O repositório onde o Backrest armazenará seus snapshots.",
|
||||
"add_plan_modal_validation_repository_required": "Por favor, selecione o repositório.",
|
||||
"add_plan_modal_field_paths": "Caminhos",
|
||||
"add_plan_modal_field_paths_tooltip": "Insira os caminhos dos arquivos de backup, um por linha. O recurso de autocompletar está disponível enquanto você digita.",
|
||||
"add_plan_modal_validation_paths_required": "Por favor, insira pelo menos um caminho para backup.",
|
||||
"add_plan_modal_validation_paths_valid_required": "Por favor, insira pelo menos um caminho válido para o backup.",
|
||||
"add_plan_modal_field_paths_placeholder": "Insira os caminhos, um por linha.\npor exemplo\n/home/usuário/documentos\n/home/user/photos",
|
||||
"add_plan_modal_field_excludes": "Exclui",
|
||||
"add_plan_modal_field_excludes_tooltip_prefix": "Caminhos a serem excluídos dos seus backups. Consulte o ",
|
||||
"add_plan_modal_field_excludes_tooltip_link": "documentos restic",
|
||||
"add_plan_modal_field_excludes_tooltip_suffix": " Para mais informações.",
|
||||
"add_plan_modal_field_excludes_add": "Adicionar Glob de Exclusão",
|
||||
"add_plan_modal_field_iexcludes": "Exclui (sem distinção entre maiúsculas e minúsculas)",
|
||||
"add_plan_modal_field_iexcludes_tooltip_prefix": "Caminhos que não diferenciam maiúsculas de minúsculas para excluir dos seus backups. Consulte o ",
|
||||
"add_plan_modal_field_iexcludes_add": "Adicionar Glob de Exclusão que ignora maiúsculas e minúsculas",
|
||||
"add_plan_modal_field_schedule": "Cronograma de backup",
|
||||
"add_plan_modal_field_backup_flags": "Sinalizadores de backup",
|
||||
"add_plan_modal_field_backup_flags_tooltip": "Opções adicionais para adicionar ao comando 'ristic backup'",
|
||||
"add_plan_modal_field_backup_flags_add": "Definir bandeira",
|
||||
"add_plan_modal_validation_flag_pattern": "O valor deve ser um parâmetro da linha de comando, por exemplo, veja restic backup --help",
|
||||
"add_plan_modal_preview_json": "Configuração do plano em formato JSON",
|
||||
"add_plan_modal_see_guide_prefix": "Ver ",
|
||||
"add_plan_modal_see_guide_link": "Guia de primeiros passos para encosto",
|
||||
"add_plan_modal_see_guide_suffix": " Para obter instruções sobre a configuração do plano.",
|
||||
"add_plan_modal_field_hooks": "Ganchos",
|
||||
"settings_success_updated": "Configurações atualizadas",
|
||||
"settings_error_operation": "Erro na operação: ",
|
||||
"button_cancel": "Cancelar",
|
||||
"button_close": "Fechar",
|
||||
"button_save": "Salvar",
|
||||
"settings_initial_setup_title": "Configuração inicial do encosto! ",
|
||||
"settings_initial_setup_message": "O Backrest detectou que você não tem nenhum usuário configurado. Adicione pelo menos um usuário para proteger a interface web.",
|
||||
"settings_initial_setup_hint": "Você pode adicionar mais usuários posteriormente ou, caso esqueça sua senha, redefinir os usuários editando o arquivo de configuração (normalmente em $HOME/.backrest/config.json).",
|
||||
"settings_field_instance_id": "ID da instância",
|
||||
"settings_validation_instance_id_required": "É necessário o ID da instância.",
|
||||
"settings_validation_instance_id_pattern": "O ID da instância deve ser alfanumérico, com '_-.' permitidos como separadores.",
|
||||
"settings_field_instance_id_tooltip": "O nome da instância será usado para identificar esta instalação do encosto. Escolha um valor com cuidado, pois ele não poderá ser alterado posteriormente.",
|
||||
"settings_field_instance_id_placeholder": "Identificador de instância exclusivo para esta instância (ex: meu-servidor-backrest)",
|
||||
"settings_section_authentication": "Autenticação",
|
||||
"settings_section_multihost": "Identidade e compartilhamento multihost",
|
||||
"settings_section_preview": "Pré-visualização",
|
||||
"settings_auth_disable": "Desativar autenticação",
|
||||
"settings_auth_users": "Usuários",
|
||||
"settings_auth_name_required": "O nome é obrigatório.",
|
||||
"settings_auth_name_pattern": "O nome deve ser alfanumérico, com hífens ou sublinhados como separadores.",
|
||||
"settings_auth_username_placeholder": "Nome de usuário",
|
||||
"settings_auth_password_required": "É necessário usar uma senha.",
|
||||
"settings_auth_password_placeholder": "Senha",
|
||||
"settings_auth_add_user": "Adicionar usuário",
|
||||
"settings_multihost_intro": "A identidade multihost permite compartilhar repositórios entre várias instâncias do Backrest. Isso é útil para acompanhar o status de backup de um conjunto de sistemas.",
|
||||
"settings_multihost_warning": "Aviso: este recurso é experimental e pode estar sujeito a alterações incompatíveis com a versão no futuro, o que exigirá que todas as instâncias sejam atualizadas simultaneamente.",
|
||||
"settings_multihost_identity": "Identidade Multihost",
|
||||
"settings_multihost_identity_required": "É necessária uma identidade multihost.",
|
||||
"settings_multihost_identity_tooltip": "A identidade multihost é usada para identificar esta instância em uma configuração multihost. Ela é derivada criptograficamente da chave pública desta instância.",
|
||||
"settings_multihost_identity_placeholder": "Identidade multihost única",
|
||||
"button_copy": "cópia",
|
||||
"settings_multihost_authorized_clients": "Clientes autorizados",
|
||||
"settings_multihost_authorized_clients_tooltip": "Clientes autorizados são outras instâncias do Backrest que têm permissão para acessar repositórios nesta instância.",
|
||||
"settings_multihost_authorized_client_item": "Cliente autorizado",
|
||||
"settings_multihost_known_hosts": "Anfitriões conhecidos",
|
||||
"settings_multihost_known_hosts_tooltip": "Os hosts conhecidos são outras instâncias do Backrest às quais esta instância pode se conectar.",
|
||||
"settings_multihost_known_host_item": "Anfitrião conhecido",
|
||||
"settings_peer_instance_id": "ID da instância",
|
||||
"settings_peer_instance_id_placeholder": "por exemplo, meu-servidor-de-backup",
|
||||
"settings_peer_key_id": "ID da chave",
|
||||
"settings_peer_key_id_required": "É necessário o ID da chave.",
|
||||
"settings_peer_key_id_placeholder": "Identificador de chave pública",
|
||||
"settings_peer_verified": "Verificado",
|
||||
"settings_peer_instance_url": "URL da instância",
|
||||
"settings_peer_instance_url_required": "O URL da instância é obrigatório para hosts conhecidos.",
|
||||
"settings_peer_instance_url_pattern": "Por favor, insira um URL válido.",
|
||||
"settings_peer_instance_url_placeholder": "https://example.com:9898",
|
||||
"settings_peer_permissions": "Permissões",
|
||||
"settings_peer_permission_type": "Tipo",
|
||||
"settings_peer_permission_type_required": "É necessário especificar o tipo de permissão.",
|
||||
"settings_permission_edit_repo": "Editar configuração do repositório",
|
||||
"settings_permission_read_ops": "Leia as operações",
|
||||
"settings_permission_type_placeholder": "Selecione o tipo de permissão",
|
||||
"settings_peer_permission_scopes": "Escopos",
|
||||
"settings_peer_permission_scopes_required": "É necessário pelo menos um escopo.",
|
||||
"settings_permission_scope_all": "Todos os repositórios (*)",
|
||||
"settings_permission_scope_placeholder": "Selecione os repositórios ou use * para todos.",
|
||||
"settings_peer_add_permission": "Adicionar permissão",
|
||||
"settings_peer_add_button": "Adicione {itemTypeName}",
|
||||
"peer_default_name": "Par",
|
||||
"repo_error_index": "Falha ao indexar os instantâneos: ",
|
||||
"repo_info_unlocking": "Desbloqueando repositório...",
|
||||
"repo_success_unlocked": "Repositório desbloqueado.",
|
||||
"repo_error_unlock": "Falha ao desbloquear o repositório: ",
|
||||
"repo_error_stats": "Falha ao calcular as estatísticas: ",
|
||||
"repo_error_prune": "Falha na poda: ",
|
||||
"repo_error_check": "Falha na verificação: ",
|
||||
"repo_deleted_message": "O repositório foi excluído.",
|
||||
"repo_tab_tree": "Vista da árvore",
|
||||
"repo_tab_list": "Visualização em lista",
|
||||
"repo_history_title": "Histórico de ações de backup",
|
||||
"repo_tab_stats": "Estatísticas",
|
||||
"loading": "Carregando...",
|
||||
"repo_button_run_command": "Executar comando",
|
||||
"repo_tooltip_run_command": "Usuários avançados: abra um shell restic para executar comandos no repositório. Reindexe os snapshots para refletir quaisquer alterações no Backrest.",
|
||||
"repo_button_index": "Instantâneos do índice",
|
||||
"repo_tooltip_index": "Indexa os snapshots no repositório. Os snapshots também são indexados automaticamente após cada backup.",
|
||||
"repo_button_unlock": "Desbloquear Repositório",
|
||||
"repo_tooltip_unlock": "Remove arquivos de bloqueio e verifica se há erros no repositório. Execute somente se tiver certeza de que o repositório não está sendo acessado por outro sistema.",
|
||||
"repo_button_prune": "Podar agora",
|
||||
"repo_tooltip_prune": "Executa uma operação de limpeza no repositório que removerá snapshots antigos e liberará espaço.",
|
||||
"repo_button_check": "Confira agora",
|
||||
"repo_tooltip_check": "Executa uma operação de verificação no repositório para verificar a integridade do mesmo.",
|
||||
"repo_button_stats": "Calcular estatísticas",
|
||||
"repo_tooltip_stats": "Executa o comando `restic stats` no repositório; esta operação pode ser lenta.",
|
||||
"settings_modal_title": "Configurações",
|
||||
"app_breadcrumb_repo": "Repositório",
|
||||
"app_breadcrumb_peer": "Par",
|
||||
"app_breadcrumb_plan": "Plano",
|
||||
"app_breadcrumb_summary": "Resumo",
|
||||
"app_breadcrumb_getting_started": "Começando",
|
||||
"app_page_not_found": "Página não encontrada",
|
||||
"app_repo_not_found": "Repositório {repoId} não encontrado",
|
||||
"app_plan_not_found": "Plano {planId} não encontrado",
|
||||
"app_unknown_peer": "Colega desconhecido",
|
||||
"app_unknown_repo": "Repositório desconhecido",
|
||||
"app_remote_repo_title": "Repositório remoto: {id}",
|
||||
"app_logout": "Sair",
|
||||
"app_menu_plans": "Planos",
|
||||
"app_menu_add_plan": "Adicionar plano",
|
||||
"app_menu_repos": "Repositórios",
|
||||
"app_menu_add_repo": "Adicionar repositório",
|
||||
"app_menu_remote_instances": "Instâncias remotas",
|
||||
"app_menu_settings": "Configurações",
|
||||
"app_error_initial_config": "Falha ao obter a configuração inicial. Normalmente, isso significa que a interface do usuário não conseguiu se conectar ao servidor.",
|
||||
"login_success": "Conectado",
|
||||
"login_error": "Falha no login: ",
|
||||
"login_title": "Conecte-se",
|
||||
"login_username_required": "Por favor, insira seu nome de usuário.",
|
||||
"login_username_placeholder": "Nome de usuário",
|
||||
"login_password_required": "Por favor, digite sua senha!",
|
||||
"login_password_placeholder": "Senha",
|
||||
"login_button": "Conecte-se"
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"$schema": "https://inlang.com/schema/inlang-message-format",
|
||||
"example_message": "Привет, мир {username}",
|
||||
"add_plan_modal_error_template_not_found": "шаблон не найден",
|
||||
"add_plan_modal_error_plan_delete_not_found": "Не удалось обновить конфигурацию, план удаления не найден.",
|
||||
"add_plan_modal_success_plan_deleted": "План удален из конфигурации, но не из репозитория restic. Снимки останутся в хранилище, и операции будут отслеживаться до тех пор, пока не будут удалены вручную. Повторное использование идентификатора удаленного плана не рекомендуется, если резервные копии уже были созданы.",
|
||||
"add_plan_modal_error_destroy_prefix": "Ошибка уничтожения:",
|
||||
"add_plan_modal_error_operation_prefix": "Ошибка операции: ",
|
||||
"add_plan_modal_title_update": "План обновления",
|
||||
"add_plan_modal_title_add": "Добавить план",
|
||||
"add_plan_modal_button_cancel": "Отмена",
|
||||
"add_plan_modal_button_delete": "Удалить",
|
||||
"add_plan_modal_button_confirm_delete": "Подтвердить удаление",
|
||||
"add_plan_modal_button_submit": "Представлять на рассмотрение",
|
||||
"add_plan_modal_field_plan_name": "Название плана",
|
||||
"add_plan_modal_field_plan_name_tooltip": "Уникальный идентификатор, который определяет этот тарифный план в пользовательском интерфейсе спинки кресла (например, s3-myplan). После создания изменить его нельзя.",
|
||||
"add_plan_modal_validation_plan_name_required": "Пожалуйста, введите название тарифного плана.",
|
||||
"add_plan_modal_validation_plan_exists": "План с таким названием уже существует.",
|
||||
"add_plan_modal_validation_plan_name_pattern": "Имя должно состоять из букв и цифр, разделителями должны быть дефисы или подчеркивания.",
|
||||
"add_plan_modal_field_repository": "Репозиторий",
|
||||
"add_plan_modal_field_repository_tooltip": "Репозиторий, в котором Backrest будет хранить ваши снимки.",
|
||||
"add_plan_modal_validation_repository_required": "Пожалуйста, выберите репозиторий.",
|
||||
"add_plan_modal_field_paths": "Пути",
|
||||
"add_plan_modal_field_paths_tooltip": "Введите пути к файлам для резервного копирования, по одному пути на строку. Доступно автозаполнение по мере ввода.",
|
||||
"add_plan_modal_validation_paths_required": "Пожалуйста, укажите хотя бы один путь для резервного копирования.",
|
||||
"add_plan_modal_validation_paths_valid_required": "Пожалуйста, укажите хотя бы один допустимый путь для резервного копирования.",
|
||||
"add_plan_modal_field_paths_placeholder": "Введите пути, по одному на строку.\nнапример\n/home/user/documents\n/home/user/photos",
|
||||
"add_plan_modal_field_excludes": "Исключения",
|
||||
"add_plan_modal_field_excludes_tooltip_prefix": "Пути, которые следует исключить из резервного копирования. См. ",
|
||||
"add_plan_modal_field_excludes_tooltip_link": "restic docs",
|
||||
"add_plan_modal_field_excludes_tooltip_suffix": " для получения дополнительной информации.",
|
||||
"add_plan_modal_field_excludes_add": "Добавить глобус исключения",
|
||||
"add_plan_modal_field_iexcludes": "Исключения (регистр не учитывается)",
|
||||
"add_plan_modal_field_iexcludes_tooltip_prefix": "Пути, нечувствительные к регистру, которые следует исключить из резервных копий. См. ",
|
||||
"add_plan_modal_field_iexcludes_add": "Добавить шаблон исключения без учета регистра",
|
||||
"add_plan_modal_field_schedule": "График резервного копирования",
|
||||
"add_plan_modal_field_backup_flags": "Резервные флаги",
|
||||
"add_plan_modal_field_backup_flags_tooltip": "Дополнительные флаги для добавления к команде 'restic backup'.",
|
||||
"add_plan_modal_field_backup_flags_add": "Установить флаг",
|
||||
"add_plan_modal_validation_flag_pattern": "Значение должно быть флагом командной строки, например, см. restic backup --help",
|
||||
"add_plan_modal_preview_json": "Конфигурация плана в формате JSON",
|
||||
"add_plan_modal_see_guide_prefix": "Видеть ",
|
||||
"add_plan_modal_see_guide_link": "Руководство по началу работы со спинкой",
|
||||
"add_plan_modal_see_guide_suffix": " Инструкции по настройке плана.",
|
||||
"add_plan_modal_field_hooks": "Крючки",
|
||||
"settings_success_updated": "Настройки обновлены",
|
||||
"settings_error_operation": "Ошибка операции: ",
|
||||
"button_cancel": "Отмена",
|
||||
"button_close": "Закрывать",
|
||||
"button_save": "Сохранять",
|
||||
"settings_initial_setup_title": "Первоначальная настройка спинки! ",
|
||||
"settings_initial_setup_message": "Система Backrest обнаружила, что у вас не настроены пользователи. Пожалуйста, добавьте хотя бы одного пользователя для защиты веб-интерфейса.",
|
||||
"settings_initial_setup_hint": "Вы можете добавить новых пользователей позже или, если забудете пароль, сбросить его, отредактировав файл конфигурации (обычно он находится в $HOME/.backrest/config.json).",
|
||||
"settings_field_instance_id": "Идентификатор экземпляра",
|
||||
"settings_validation_instance_id_required": "Требуется идентификатор экземпляра.",
|
||||
"settings_validation_instance_id_pattern": "Идентификатор экземпляра должен быть буквенно-цифровым, в качестве разделителя допускается использование символов '_-.'.",
|
||||
"settings_field_instance_id_tooltip": "Имя экземпляра будет использоваться для идентификации данной установки спинки сиденья. Тщательно выбирайте значение, так как изменить его позже будет невозможно.",
|
||||
"settings_field_instance_id_placeholder": "Уникальный идентификатор экземпляра для данного экземпляра (например, my-backrest-server).",
|
||||
"settings_section_authentication": "Аутентификация",
|
||||
"settings_section_multihost": "Многохостовая идентификация и совместное использование ресурсов",
|
||||
"settings_section_preview": "Предварительный просмотр",
|
||||
"settings_auth_disable": "Отключить аутентификацию",
|
||||
"settings_auth_users": "Пользователи",
|
||||
"settings_auth_name_required": "Имя обязательно для указания.",
|
||||
"settings_auth_name_pattern": "Имя должно состоять из букв и цифр, разделителями должны быть дефисы или подчеркивания.",
|
||||
"settings_auth_username_placeholder": "Имя пользователя",
|
||||
"settings_auth_password_required": "Требуется пароль",
|
||||
"settings_auth_password_placeholder": "Пароль",
|
||||
"settings_auth_add_user": "Добавить пользователя",
|
||||
"settings_multihost_intro": "Многохостовая идентификация позволяет совместно использовать репозитории между несколькими экземплярами Backrest. Это полезно для отслеживания состояния резервного копирования группы систем.",
|
||||
"settings_multihost_warning": "Внимание: эта функция носит экспериментальный характер и в будущем может быть подвержена изменениям, несовместимым с предыдущими версиями, что потребует одновременного обновления всех экземпляров.",
|
||||
"settings_multihost_identity": "Многохостовая идентификация",
|
||||
"settings_multihost_identity_required": "Требуется многохостовая идентификация.",
|
||||
"settings_multihost_identity_tooltip": "Идентификатор многохостовой системы используется для идентификации данного экземпляра в многохостовой конфигурации. Он криптографически выводится из открытого ключа этого экземпляра.",
|
||||
"settings_multihost_identity_placeholder": "Уникальный идентификатор для нескольких хостов",
|
||||
"button_copy": "копия",
|
||||
"settings_multihost_authorized_clients": "Авторизованные клиенты",
|
||||
"settings_multihost_authorized_clients_tooltip": "Авторизованные клиенты — это другие экземпляры Backrest, которым разрешен доступ к репозиториям на этом экземпляре.",
|
||||
"settings_multihost_authorized_client_item": "Авторизованный клиент",
|
||||
"settings_multihost_known_hosts": "Известные хосты",
|
||||
"settings_multihost_known_hosts_tooltip": "Известные хосты — это другие экземпляры Backrest, к которым может подключиться данный экземпляр.",
|
||||
"settings_multihost_known_host_item": "Известный хост",
|
||||
"settings_peer_instance_id": "Идентификатор экземпляра",
|
||||
"settings_peer_instance_id_placeholder": "например, мой резервный сервер",
|
||||
"settings_peer_key_id": "Идентификатор ключа",
|
||||
"settings_peer_key_id_required": "Требуется идентификатор ключа.",
|
||||
"settings_peer_key_id_placeholder": "Идентификатор открытого ключа",
|
||||
"settings_peer_verified": "Подтверждено",
|
||||
"settings_peer_instance_url": "URL экземпляра",
|
||||
"settings_peer_instance_url_required": "Для известных хостов требуется указать URL-адрес экземпляра.",
|
||||
"settings_peer_instance_url_pattern": "Пожалуйста, введите действительный URL-адрес.",
|
||||
"settings_peer_instance_url_placeholder": "https://example.com:9898",
|
||||
"settings_peer_permissions": "Разрешения",
|
||||
"settings_peer_permission_type": "Тип",
|
||||
"settings_peer_permission_type_required": "Требуется указать тип разрешения",
|
||||
"settings_permission_edit_repo": "Редактировать конфигурацию репозитория",
|
||||
"settings_permission_read_ops": "Читать операции",
|
||||
"settings_permission_type_placeholder": "Выберите тип разрешения",
|
||||
"settings_peer_permission_scopes": "Области применения",
|
||||
"settings_peer_permission_scopes_required": "Требуется как минимум один объем работ.",
|
||||
"settings_permission_scope_all": "Все репозитории (*)",
|
||||
"settings_permission_scope_placeholder": "Выберите репозитории или используйте * для всех.",
|
||||
"settings_peer_add_permission": "Добавить разрешение",
|
||||
"settings_peer_add_button": "Добавить {itemTypeName}",
|
||||
"peer_default_name": "Вглядеться",
|
||||
"repo_error_index": "Не удалось проиндексировать снимки: ",
|
||||
"repo_info_unlocking": "Разблокировка репозитория...",
|
||||
"repo_success_unlocked": "Репозиторий разблокирован.",
|
||||
"repo_error_unlock": "Не удалось разблокировать репозиторий: ",
|
||||
"repo_error_stats": "Не удалось вычислить статистические данные: ",
|
||||
"repo_error_prune": "Не удалось провести обрезку: ",
|
||||
"repo_error_check": "Проверка не пройдена: ",
|
||||
"repo_deleted_message": "Репозиторий был удален.",
|
||||
"repo_tab_tree": "Вид на дерево",
|
||||
"repo_tab_list": "Просмотр списка",
|
||||
"repo_history_title": "История действий по резервному копированию",
|
||||
"repo_tab_stats": "Статистика",
|
||||
"loading": "Загрузка...",
|
||||
"repo_button_run_command": "Выполнить команду",
|
||||
"repo_tooltip_run_command": "Опытные пользователи: откройте оболочку restic для выполнения команд в репозитории. Переиндексируйте снимки, чтобы отразить любые изменения в Backrest.",
|
||||
"repo_button_index": "Снимки указателя",
|
||||
"repo_tooltip_index": "Индексирует снимки в репозитории. Индексация снимков также происходит автоматически после каждого резервного копирования.",
|
||||
"repo_button_unlock": "Разблокировать репозиторий",
|
||||
"repo_tooltip_unlock": "Удаляет файлы блокировки и проверяет репозиторий на наличие ошибок. Запускайте только в том случае, если вы уверены, что репозиторий не используется другой системой.",
|
||||
"repo_button_prune": "Обрежьте сейчас",
|
||||
"repo_tooltip_prune": "Выполняет операцию очистки репозитория, которая удалит старые снимки и освободит место.",
|
||||
"repo_button_check": "Проверить сейчас",
|
||||
"repo_tooltip_check": "Выполняет проверку целостности репозитория.",
|
||||
"repo_button_stats": "Вычислить статистику",
|
||||
"repo_tooltip_stats": "Выполняет команду restic stats для репозитория; эта операция может быть медленной.",
|
||||
"settings_modal_title": "Настройки",
|
||||
"app_breadcrumb_repo": "Репо",
|
||||
"app_breadcrumb_peer": "Вглядеться",
|
||||
"app_breadcrumb_plan": "План",
|
||||
"app_breadcrumb_summary": "Краткое содержание",
|
||||
"app_breadcrumb_getting_started": "Начиная",
|
||||
"app_page_not_found": "Страница не найдена",
|
||||
"app_repo_not_found": "Репозиторий {repoId} не найден",
|
||||
"app_plan_not_found": "План {planId} не найден",
|
||||
"app_unknown_peer": "Неизвестный сверстник",
|
||||
"app_unknown_repo": "Неизвестный репозиторий",
|
||||
"app_remote_repo_title": "Удаленный репозиторий: {id}",
|
||||
"app_logout": "Выйти",
|
||||
"app_menu_plans": "Планы",
|
||||
"app_menu_add_plan": "Добавить план",
|
||||
"app_menu_repos": "Репозитории",
|
||||
"app_menu_add_repo": "Добавить репозиторий",
|
||||
"app_menu_remote_instances": "Удаленные экземпляры",
|
||||
"app_menu_settings": "Настройки",
|
||||
"app_error_initial_config": "Не удалось получить начальную конфигурацию, обычно это означает, что пользовательский интерфейс не смог подключиться к бэкэнду.",
|
||||
"login_success": "Авторизован",
|
||||
"login_error": "Ошибка входа: ",
|
||||
"login_title": "Авторизоваться",
|
||||
"login_username_required": "Пожалуйста, введите ваше имя пользователя.",
|
||||
"login_username_placeholder": "Имя пользователя",
|
||||
"login_password_required": "Пожалуйста, введите свой пароль!",
|
||||
"login_password_placeholder": "Пароль",
|
||||
"login_button": "Авторизоваться"
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"$schema": "https://inlang.com/schema/inlang-message-format",
|
||||
"example_message": "你好,世界{username}",
|
||||
"add_plan_modal_error_template_not_found": "未找到模板",
|
||||
"add_plan_modal_error_plan_delete_not_found": "配置更新失败,未找到删除计划",
|
||||
"add_plan_modal_success_plan_deleted": "计划已从配置中删除,但不会从 restic 存储库中删除。快照将保留在存储中,操作记录将被跟踪,直到手动删除为止。如果已执行备份,则不建议重复使用已删除的计划 ID。",
|
||||
"add_plan_modal_error_destroy_prefix": "销毁错误:",
|
||||
"add_plan_modal_error_operation_prefix": "操作错误: ",
|
||||
"add_plan_modal_title_update": "更新计划",
|
||||
"add_plan_modal_title_add": "添加计划",
|
||||
"add_plan_modal_button_cancel": "取消",
|
||||
"add_plan_modal_button_delete": "删除",
|
||||
"add_plan_modal_button_confirm_delete": "确认删除",
|
||||
"add_plan_modal_button_submit": "提交",
|
||||
"add_plan_modal_field_plan_name": "计划名称",
|
||||
"add_plan_modal_field_plan_name_tooltip": "用于在后台用户界面中标识此计划的唯一 ID(例如 s3-myplan)。创建后无法更改。",
|
||||
"add_plan_modal_validation_plan_name_required": "请输入计划名称",
|
||||
"add_plan_modal_validation_plan_exists": "同名计划已存在",
|
||||
"add_plan_modal_validation_plan_name_pattern": "名称必须为字母数字组合,并以连字符或下划线作为分隔符。",
|
||||
"add_plan_modal_field_repository": "存储库",
|
||||
"add_plan_modal_field_repository_tooltip": "Backrest 将把您的快照存储在此仓库中。",
|
||||
"add_plan_modal_validation_repository_required": "请选择存储库",
|
||||
"add_plan_modal_field_paths": "路径",
|
||||
"add_plan_modal_field_paths_tooltip": "请输入要备份的文件路径,每行一个。输入时可使用自动完成功能。",
|
||||
"add_plan_modal_validation_paths_required": "请至少输入一个备份路径",
|
||||
"add_plan_modal_validation_paths_valid_required": "请输入至少一个有效的备份路径",
|
||||
"add_plan_modal_field_paths_placeholder": "输入路径,每行一条。\n例如\n/home/user/documents\n/home/user/photos",
|
||||
"add_plan_modal_field_excludes": "不包括",
|
||||
"add_plan_modal_field_excludes_tooltip_prefix": "要从备份中排除的路径。请参阅 ",
|
||||
"add_plan_modal_field_excludes_tooltip_link": "restic 文档",
|
||||
"add_plan_modal_field_excludes_tooltip_suffix": " 了解更多信息。",
|
||||
"add_plan_modal_field_excludes_add": "添加排除 glob",
|
||||
"add_plan_modal_field_iexcludes": "不包括(不区分大小写)",
|
||||
"add_plan_modal_field_iexcludes_tooltip_prefix": "要从备份中排除的路径(区分大小写)。请参阅 ",
|
||||
"add_plan_modal_field_iexcludes_add": "添加不区分大小写的排除全局变量",
|
||||
"add_plan_modal_field_schedule": "备用计划",
|
||||
"add_plan_modal_field_backup_flags": "备份标志",
|
||||
"add_plan_modal_field_backup_flags_tooltip": "要添加到“restic backup”命令中的额外标志",
|
||||
"add_plan_modal_field_backup_flags_add": "设置标志",
|
||||
"add_plan_modal_validation_flag_pattern": "该值应为 CLI 标志,例如:请参阅 restic backup --help",
|
||||
"add_plan_modal_preview_json": "计划配置(JSON 格式)",
|
||||
"add_plan_modal_see_guide_prefix": "看 ",
|
||||
"add_plan_modal_see_guide_link": "靠背入门指南",
|
||||
"add_plan_modal_see_guide_suffix": " 有关计划配置说明。",
|
||||
"add_plan_modal_field_hooks": "钩子",
|
||||
"settings_success_updated": "设置已更新",
|
||||
"settings_error_operation": "操作错误: ",
|
||||
"button_cancel": "取消",
|
||||
"button_close": "关闭",
|
||||
"button_save": "节省",
|
||||
"settings_initial_setup_title": "初始靠背设置! ",
|
||||
"settings_initial_setup_message": "Backrest 检测到您尚未配置任何用户,请至少添加一个用户以确保 Web 界面的安全。",
|
||||
"settings_initial_setup_hint": "您可以稍后添加更多用户,或者,如果您忘记密码,可以通过编辑配置文件(通常位于 $HOME/.backrest/config.json)来重置用户。",
|
||||
"settings_field_instance_id": "实例 ID",
|
||||
"settings_validation_instance_id_required": "需要实例 ID",
|
||||
"settings_validation_instance_id_pattern": "实例 ID 必须为字母数字组合,允许使用“_-.”作为分隔符。",
|
||||
"settings_field_instance_id_tooltip": "实例名称将用于标识此靠背安装。请谨慎选择值,因为之后无法更改。",
|
||||
"settings_field_instance_id_placeholder": "此实例的唯一实例 ID(例如 my-backrest-server)",
|
||||
"settings_section_authentication": "验证",
|
||||
"settings_section_multihost": "多主机身份和共享",
|
||||
"settings_section_preview": "预览",
|
||||
"settings_auth_disable": "禁用身份验证",
|
||||
"settings_auth_users": "用户",
|
||||
"settings_auth_name_required": "姓名(必填)",
|
||||
"settings_auth_name_pattern": "名称必须为字母数字组合,并以连字符或下划线作为分隔符。",
|
||||
"settings_auth_username_placeholder": "用户名",
|
||||
"settings_auth_password_required": "需要密码",
|
||||
"settings_auth_password_placeholder": "密码",
|
||||
"settings_auth_add_user": "添加用户",
|
||||
"settings_multihost_intro": "多主机身份允许您在多个 Backrest 实例之间共享存储库。这对于跟踪一组系统的备份状态非常有用。",
|
||||
"settings_multihost_warning": "警告:此功能尚处于实验阶段,未来可能会出现版本不兼容的更改,届时所有实例都需要同时更新。",
|
||||
"settings_multihost_identity": "多主机身份",
|
||||
"settings_multihost_identity_required": "需要多主机身份",
|
||||
"settings_multihost_identity_tooltip": "多主机身份用于在多主机环境中识别此实例。它是通过加密方式从此实例的公钥派生而来的。",
|
||||
"settings_multihost_identity_placeholder": "唯一多主机身份",
|
||||
"button_copy": "复制",
|
||||
"settings_multihost_authorized_clients": "授权客户",
|
||||
"settings_multihost_authorized_clients_tooltip": "授权客户端是指被允许访问此实例上的存储库的其他 Backrest 实例。",
|
||||
"settings_multihost_authorized_client_item": "授权客户",
|
||||
"settings_multihost_known_hosts": "已知主持人",
|
||||
"settings_multihost_known_hosts_tooltip": "已知主机是指此实例可以连接到的其他 Backrest 实例。",
|
||||
"settings_multihost_known_host_item": "已知主持人",
|
||||
"settings_peer_instance_id": "实例 ID",
|
||||
"settings_peer_instance_id_placeholder": "例如我的备份服务器",
|
||||
"settings_peer_key_id": "密钥 ID",
|
||||
"settings_peer_key_id_required": "需要密钥 ID",
|
||||
"settings_peer_key_id_placeholder": "公钥标识符",
|
||||
"settings_peer_verified": "已验证",
|
||||
"settings_peer_instance_url": "实例 URL",
|
||||
"settings_peer_instance_url_required": "对于已知主机,需要实例 URL。",
|
||||
"settings_peer_instance_url_pattern": "请输入有效的网址",
|
||||
"settings_peer_instance_url_placeholder": "https://example.com:9898",
|
||||
"settings_peer_permissions": "权限",
|
||||
"settings_peer_permission_type": "类型",
|
||||
"settings_peer_permission_type_required": "需要权限类型",
|
||||
"settings_permission_edit_repo": "编辑仓库配置",
|
||||
"settings_permission_read_ops": "读取操作",
|
||||
"settings_permission_type_placeholder": "选择权限类型",
|
||||
"settings_peer_permission_scopes": "瞄准镜",
|
||||
"settings_peer_permission_scopes_required": "至少需要一个范围",
|
||||
"settings_permission_scope_all": "所有存储库 (*)",
|
||||
"settings_permission_scope_placeholder": "选择存储库,或使用 * 表示全部",
|
||||
"settings_peer_add_permission": "添加权限",
|
||||
"settings_peer_add_button": "添加{itemTypeName}",
|
||||
"peer_default_name": "同伴",
|
||||
"repo_error_index": "快照索引失败: ",
|
||||
"repo_info_unlocking": "解锁仓库...",
|
||||
"repo_success_unlocked": "仓库已解锁。",
|
||||
"repo_error_unlock": "解锁仓库失败: ",
|
||||
"repo_error_stats": "统计信息计算失败: ",
|
||||
"repo_error_prune": "修剪失败: ",
|
||||
"repo_error_check": "检查失败: ",
|
||||
"repo_deleted_message": "仓库已被删除",
|
||||
"repo_tab_tree": "树状视图",
|
||||
"repo_tab_list": "列表视图",
|
||||
"repo_history_title": "备份操作历史记录",
|
||||
"repo_tab_stats": "统计数据",
|
||||
"loading": "加载中...",
|
||||
"repo_button_run_command": "运行命令",
|
||||
"repo_tooltip_run_command": "高级用户:打开 restic shell 以在存储库上运行命令。重新索引快照以反映 Backrest 中的任何更改。",
|
||||
"repo_button_index": "索引快照",
|
||||
"repo_tooltip_index": "对存储库中的快照进行索引。每次备份后,快照也会自动建立索引。",
|
||||
"repo_button_unlock": "解锁仓库",
|
||||
"repo_tooltip_unlock": "移除锁定文件并检查仓库错误。仅当您确定仓库未被其他系统访问时才运行此操作。",
|
||||
"repo_button_prune": "立即修剪",
|
||||
"repo_tooltip_prune": "对存储库执行清理操作,删除旧快照并释放空间",
|
||||
"repo_button_check": "立即查看",
|
||||
"repo_tooltip_check": "对存储库运行检查操作,以验证存储库的完整性。",
|
||||
"repo_button_stats": "计算统计数据",
|
||||
"repo_tooltip_stats": "对存储库运行 restic 统计信息,此操作可能较慢。",
|
||||
"settings_modal_title": "设置",
|
||||
"app_breadcrumb_repo": "仓库",
|
||||
"app_breadcrumb_peer": "同伴",
|
||||
"app_breadcrumb_plan": "计划",
|
||||
"app_breadcrumb_summary": "概括",
|
||||
"app_breadcrumb_getting_started": "入门",
|
||||
"app_page_not_found": "页面未找到",
|
||||
"app_repo_not_found": "未找到仓库{repoId}",
|
||||
"app_plan_not_found": "未找到计划{planId}",
|
||||
"app_unknown_peer": "未知同伴",
|
||||
"app_unknown_repo": "未知仓库",
|
||||
"app_remote_repo_title": "远程仓库: {id}",
|
||||
"app_logout": "注销",
|
||||
"app_menu_plans": "计划",
|
||||
"app_menu_add_plan": "添加计划",
|
||||
"app_menu_repos": "存储库",
|
||||
"app_menu_add_repo": "添加仓库",
|
||||
"app_menu_remote_instances": "远程实例",
|
||||
"app_menu_settings": "设置",
|
||||
"app_error_initial_config": "获取初始配置失败,通常这意味着用户界面无法连接到后端。",
|
||||
"login_success": "已登录",
|
||||
"login_error": "登录失败: ",
|
||||
"login_title": "登录",
|
||||
"login_username_required": "请输入您的用户名",
|
||||
"login_username_placeholder": "用户名",
|
||||
"login_password_required": "请输入您的密码!",
|
||||
"login_password_placeholder": "密码",
|
||||
"login_button": "登录"
|
||||
}
|
||||
+2
-1
@@ -45,6 +45,7 @@
|
||||
"sass": "^1.97.1",
|
||||
"typescript": "^5.8.3",
|
||||
"vite": "^7.3.0",
|
||||
"vite-plugin-compression": "^0.5.1"
|
||||
"vite-plugin-compression": "^0.5.1",
|
||||
"@inlang/paraglide-js": "2.7.0"
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+182
@@ -57,6 +57,9 @@ importers:
|
||||
specifier: ^2.15.4
|
||||
version: 2.15.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
devDependencies:
|
||||
'@inlang/paraglide-js':
|
||||
specifier: 2.7.0
|
||||
version: 2.7.0
|
||||
'@types/node':
|
||||
specifier: ^20.19.1
|
||||
version: 20.19.1
|
||||
@@ -393,6 +396,17 @@ packages:
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@inlang/paraglide-js@2.7.0':
|
||||
resolution: {integrity: sha512-R03uEk8C3p3rP1uRXvaVcbA7DClGWdQDmBhWF5B3tLgAwZGPRpCuo8iSie55cErVvZpydC+DLAuZIbrNcojd3w==}
|
||||
hasBin: true
|
||||
|
||||
'@inlang/recommend-sherlock@0.2.1':
|
||||
resolution: {integrity: sha512-ckv8HvHy/iTqaVAEKrr+gnl+p3XFNwe5D2+6w6wJk2ORV2XkcRkKOJ/XsTUJbPSiyi4PI+p+T3bqbmNx/rDUlg==}
|
||||
|
||||
'@inlang/sdk@2.4.9':
|
||||
resolution: {integrity: sha512-cvz/C1rF5WBxzHbEoiBoI6Sz6q6M+TdxfWkEGBYTD77opY8i8WN01prUWXEM87GPF4SZcyIySez9U0Ccm12oFQ==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
|
||||
'@isaacs/cliui@8.0.2':
|
||||
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
|
||||
engines: {node: '>=12'}
|
||||
@@ -413,6 +427,13 @@ packages:
|
||||
'@jridgewell/trace-mapping@0.3.31':
|
||||
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
|
||||
|
||||
'@lix-js/sdk@0.4.7':
|
||||
resolution: {integrity: sha512-pRbW+joG12L0ULfMiWYosIW0plmW4AsUdiPCp+Z8rAsElJ+wJ6in58zhD3UwUcd4BNcpldEGjg6PdA7e0RgsDQ==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
'@lix-js/server-protocol-schema@0.1.1':
|
||||
resolution: {integrity: sha512-jBeALB6prAbtr5q4vTuxnRZZv1M2rKe8iNqRQhFJ4Tv7150unEa0vKyz0hs8Gl3fUGsWaNJBh3J8++fpbrpRBQ==}
|
||||
|
||||
'@parcel/watcher-android-arm64@2.5.1':
|
||||
resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
@@ -671,6 +692,13 @@ packages:
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@sinclair/typebox@0.31.28':
|
||||
resolution: {integrity: sha512-/s55Jujywdw/Jpan+vsy6JZs1z2ZTGxTmbZTPiuSL2wz9mfzA2gN1zzaqmvfi4pq+uOt7Du85fkiwv5ymW84aQ==}
|
||||
|
||||
'@sqlite.org/sqlite-wasm@3.48.0-build4':
|
||||
resolution: {integrity: sha512-hI6twvUkzOmyGZhQMza1gpfqErZxXRw6JEsiVjUbo7tFanVD+8Oil0Ih3l2nGzHdxPI41zFmfUQG7GHqhciKZQ==}
|
||||
hasBin: true
|
||||
|
||||
'@types/babel__core@7.20.5':
|
||||
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
|
||||
|
||||
@@ -736,6 +764,11 @@ packages:
|
||||
peerDependencies:
|
||||
vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
|
||||
|
||||
acorn@8.15.0:
|
||||
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
hasBin: true
|
||||
|
||||
ansi-regex@5.0.1:
|
||||
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -758,6 +791,9 @@ packages:
|
||||
react: '>=16.9.0'
|
||||
react-dom: '>=16.9.0'
|
||||
|
||||
array-timsort@1.0.3:
|
||||
resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==}
|
||||
|
||||
balanced-match@1.0.2:
|
||||
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
||||
|
||||
@@ -812,15 +848,30 @@ packages:
|
||||
color-name@1.1.4:
|
||||
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
|
||||
|
||||
commander@11.1.0:
|
||||
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
|
||||
engines: {node: '>=16'}
|
||||
|
||||
comment-json@4.5.0:
|
||||
resolution: {integrity: sha512-aKl8CwoMKxVTfAK4dFN4v54AEvuUh9pzmgVIBeK6gBomLwMgceQUKKWHzJdW1u1VQXQuwnJ7nJGWYYMTl5U4yg==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
compute-scroll-into-view@3.1.1:
|
||||
resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==}
|
||||
|
||||
consola@3.4.0:
|
||||
resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==}
|
||||
engines: {node: ^14.18.0 || >=16.10.0}
|
||||
|
||||
convert-source-map@2.0.0:
|
||||
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
|
||||
|
||||
copy-to-clipboard@3.3.3:
|
||||
resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
|
||||
|
||||
core-util-is@1.0.3:
|
||||
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
|
||||
|
||||
cross-env@7.0.3:
|
||||
resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
|
||||
engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
|
||||
@@ -892,6 +943,14 @@ packages:
|
||||
decimal.js-light@2.5.1:
|
||||
resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==}
|
||||
|
||||
dedent@1.5.1:
|
||||
resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==}
|
||||
peerDependencies:
|
||||
babel-plugin-macros: ^3.1.0
|
||||
peerDependenciesMeta:
|
||||
babel-plugin-macros:
|
||||
optional: true
|
||||
|
||||
define-lazy-prop@2.0.0:
|
||||
resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -929,6 +988,11 @@ packages:
|
||||
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
esprima@4.0.1:
|
||||
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
|
||||
engines: {node: '>=4'}
|
||||
hasBin: true
|
||||
|
||||
eventemitter3@4.0.7:
|
||||
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
|
||||
|
||||
@@ -985,6 +1049,10 @@ packages:
|
||||
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
human-id@4.1.3:
|
||||
resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==}
|
||||
hasBin: true
|
||||
|
||||
ieee754@1.2.1:
|
||||
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
|
||||
|
||||
@@ -1026,6 +1094,9 @@ packages:
|
||||
jackspeak@3.4.3:
|
||||
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
|
||||
|
||||
js-sha256@0.11.1:
|
||||
resolution: {integrity: sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==}
|
||||
|
||||
js-tokens@4.0.0:
|
||||
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
|
||||
|
||||
@@ -1045,6 +1116,10 @@ packages:
|
||||
jsonfile@6.2.0:
|
||||
resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
|
||||
|
||||
kysely@0.27.6:
|
||||
resolution: {integrity: sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
|
||||
lightningcss-darwin-arm64@1.30.1:
|
||||
resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
@@ -1555,6 +1630,11 @@ packages:
|
||||
resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
|
||||
engines: {node: '>= 12'}
|
||||
|
||||
sqlite-wasm-kysely@0.3.0:
|
||||
resolution: {integrity: sha512-TzjBNv7KwRw6E3pdKdlRyZiTmUIE0UttT/Sl56MVwVARl/u5gp978KepazCJZewFUnlWHz9i3NQd4kOtP/Afdg==}
|
||||
peerDependencies:
|
||||
kysely: '*'
|
||||
|
||||
string-convert@0.2.1:
|
||||
resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==}
|
||||
|
||||
@@ -1611,12 +1691,23 @@ packages:
|
||||
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
|
||||
unplugin@2.3.11:
|
||||
resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
|
||||
engines: {node: '>=18.12.0'}
|
||||
|
||||
update-browserslist-db@1.1.3:
|
||||
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
browserslist: '>= 4.21.0'
|
||||
|
||||
urlpattern-polyfill@10.1.0:
|
||||
resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==}
|
||||
|
||||
uuid@10.0.0:
|
||||
resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==}
|
||||
hasBin: true
|
||||
|
||||
victory-vendor@36.9.2:
|
||||
resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==}
|
||||
|
||||
@@ -1665,6 +1756,9 @@ packages:
|
||||
yaml:
|
||||
optional: true
|
||||
|
||||
webpack-virtual-modules@0.6.2:
|
||||
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
|
||||
|
||||
which@2.0.2:
|
||||
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
|
||||
engines: {node: '>= 8'}
|
||||
@@ -1951,6 +2045,32 @@ snapshots:
|
||||
'@esbuild/win32-x64@0.27.2':
|
||||
optional: true
|
||||
|
||||
'@inlang/paraglide-js@2.7.0':
|
||||
dependencies:
|
||||
'@inlang/recommend-sherlock': 0.2.1
|
||||
'@inlang/sdk': 2.4.9
|
||||
commander: 11.1.0
|
||||
consola: 3.4.0
|
||||
json5: 2.2.3
|
||||
unplugin: 2.3.11
|
||||
urlpattern-polyfill: 10.1.0
|
||||
transitivePeerDependencies:
|
||||
- babel-plugin-macros
|
||||
|
||||
'@inlang/recommend-sherlock@0.2.1':
|
||||
dependencies:
|
||||
comment-json: 4.5.0
|
||||
|
||||
'@inlang/sdk@2.4.9':
|
||||
dependencies:
|
||||
'@lix-js/sdk': 0.4.7
|
||||
'@sinclair/typebox': 0.31.28
|
||||
kysely: 0.27.6
|
||||
sqlite-wasm-kysely: 0.3.0(kysely@0.27.6)
|
||||
uuid: 10.0.0
|
||||
transitivePeerDependencies:
|
||||
- babel-plugin-macros
|
||||
|
||||
'@isaacs/cliui@8.0.2':
|
||||
dependencies:
|
||||
string-width: 5.1.2
|
||||
@@ -1979,6 +2099,20 @@ snapshots:
|
||||
'@jridgewell/resolve-uri': 3.1.2
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
|
||||
'@lix-js/sdk@0.4.7':
|
||||
dependencies:
|
||||
'@lix-js/server-protocol-schema': 0.1.1
|
||||
dedent: 1.5.1
|
||||
human-id: 4.1.3
|
||||
js-sha256: 0.11.1
|
||||
kysely: 0.27.6
|
||||
sqlite-wasm-kysely: 0.3.0(kysely@0.27.6)
|
||||
uuid: 10.0.0
|
||||
transitivePeerDependencies:
|
||||
- babel-plugin-macros
|
||||
|
||||
'@lix-js/server-protocol-schema@0.1.1': {}
|
||||
|
||||
'@parcel/watcher-android-arm64@2.5.1':
|
||||
optional: true
|
||||
|
||||
@@ -2182,6 +2316,10 @@ snapshots:
|
||||
'@rollup/rollup-win32-x64-msvc@4.54.0':
|
||||
optional: true
|
||||
|
||||
'@sinclair/typebox@0.31.28': {}
|
||||
|
||||
'@sqlite.org/sqlite-wasm@3.48.0-build4': {}
|
||||
|
||||
'@types/babel__core@7.20.5':
|
||||
dependencies:
|
||||
'@babel/parser': 7.28.5
|
||||
@@ -2261,6 +2399,8 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
acorn@8.15.0: {}
|
||||
|
||||
ansi-regex@5.0.1: {}
|
||||
|
||||
ansi-regex@6.1.0: {}
|
||||
@@ -2329,6 +2469,8 @@ snapshots:
|
||||
- luxon
|
||||
- moment
|
||||
|
||||
array-timsort@1.0.3: {}
|
||||
|
||||
balanced-match@1.0.2: {}
|
||||
|
||||
base64-js@1.5.1: {}
|
||||
@@ -2383,14 +2525,26 @@ snapshots:
|
||||
|
||||
color-name@1.1.4: {}
|
||||
|
||||
commander@11.1.0: {}
|
||||
|
||||
comment-json@4.5.0:
|
||||
dependencies:
|
||||
array-timsort: 1.0.3
|
||||
core-util-is: 1.0.3
|
||||
esprima: 4.0.1
|
||||
|
||||
compute-scroll-into-view@3.1.1: {}
|
||||
|
||||
consola@3.4.0: {}
|
||||
|
||||
convert-source-map@2.0.0: {}
|
||||
|
||||
copy-to-clipboard@3.3.3:
|
||||
dependencies:
|
||||
toggle-selection: 1.0.6
|
||||
|
||||
core-util-is@1.0.3: {}
|
||||
|
||||
cross-env@7.0.3:
|
||||
dependencies:
|
||||
cross-spawn: 7.0.6
|
||||
@@ -2449,6 +2603,8 @@ snapshots:
|
||||
|
||||
decimal.js-light@2.5.1: {}
|
||||
|
||||
dedent@1.5.1: {}
|
||||
|
||||
define-lazy-prop@2.0.0: {}
|
||||
|
||||
detect-libc@1.0.3:
|
||||
@@ -2501,6 +2657,8 @@ snapshots:
|
||||
|
||||
escalade@3.2.0: {}
|
||||
|
||||
esprima@4.0.1: {}
|
||||
|
||||
eventemitter3@4.0.7: {}
|
||||
|
||||
events@3.3.0: {}
|
||||
@@ -2547,6 +2705,8 @@ snapshots:
|
||||
|
||||
has-flag@4.0.0: {}
|
||||
|
||||
human-id@4.1.3: {}
|
||||
|
||||
ieee754@1.2.1: {}
|
||||
|
||||
immutable@5.1.3: {}
|
||||
@@ -2580,6 +2740,8 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@pkgjs/parseargs': 0.11.0
|
||||
|
||||
js-sha256@0.11.1: {}
|
||||
|
||||
js-tokens@4.0.0: {}
|
||||
|
||||
jsesc@3.1.0: {}
|
||||
@@ -2596,6 +2758,8 @@ snapshots:
|
||||
optionalDependencies:
|
||||
graceful-fs: 4.2.11
|
||||
|
||||
kysely@0.27.6: {}
|
||||
|
||||
lightningcss-darwin-arm64@1.30.1:
|
||||
optional: true
|
||||
|
||||
@@ -3190,6 +3354,11 @@ snapshots:
|
||||
|
||||
source-map@0.7.6: {}
|
||||
|
||||
sqlite-wasm-kysely@0.3.0(kysely@0.27.6):
|
||||
dependencies:
|
||||
'@sqlite.org/sqlite-wasm': 3.48.0-build4
|
||||
kysely: 0.27.6
|
||||
|
||||
string-convert@0.2.1: {}
|
||||
|
||||
string-width@4.2.3:
|
||||
@@ -3240,12 +3409,23 @@ snapshots:
|
||||
|
||||
universalify@2.0.1: {}
|
||||
|
||||
unplugin@2.3.11:
|
||||
dependencies:
|
||||
'@jridgewell/remapping': 2.3.5
|
||||
acorn: 8.15.0
|
||||
picomatch: 4.0.3
|
||||
webpack-virtual-modules: 0.6.2
|
||||
|
||||
update-browserslist-db@1.1.3(browserslist@4.25.0):
|
||||
dependencies:
|
||||
browserslist: 4.25.0
|
||||
escalade: 3.2.0
|
||||
picocolors: 1.1.1
|
||||
|
||||
urlpattern-polyfill@10.1.0: {}
|
||||
|
||||
uuid@10.0.0: {}
|
||||
|
||||
victory-vendor@36.9.2:
|
||||
dependencies:
|
||||
'@types/d3-array': 3.2.1
|
||||
@@ -3286,6 +3466,8 @@ snapshots:
|
||||
lightningcss: 1.30.1
|
||||
sass: 1.97.1
|
||||
|
||||
webpack-virtual-modules@0.6.2: {}
|
||||
|
||||
which@2.0.2:
|
||||
dependencies:
|
||||
isexe: 2.0.0
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
cache
|
||||
@@ -0,0 +1 @@
|
||||
WPL45neo3snDWG0PyO
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"$schema": "https://inlang.com/schema/project-settings",
|
||||
"baseLocale": "en",
|
||||
"locales": [
|
||||
"en",
|
||||
"de",
|
||||
"zh",
|
||||
"hi",
|
||||
"es",
|
||||
"ar",
|
||||
"fr",
|
||||
"bn",
|
||||
"pt",
|
||||
"ru",
|
||||
"id"
|
||||
],
|
||||
"modules": [
|
||||
"https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@4/dist/index.js",
|
||||
"https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@2/dist/index.js"
|
||||
],
|
||||
"plugin.inlang.messageFormat": {
|
||||
"pathPattern": "./messages/{locale}.json"
|
||||
}
|
||||
}
|
||||
@@ -48,6 +48,7 @@ import { getMinimumCronDuration } from "../lib/cronutil";
|
||||
import { debounce } from "../lib/util";
|
||||
import { StringList } from "../../gen/ts/types/value_pb";
|
||||
import { isWindows } from "../state/buildcfg";
|
||||
import * as m from "../paraglide/messages";
|
||||
|
||||
const { TextArea } = Input;
|
||||
const sep = isWindows ? "\\" : "/";
|
||||
@@ -151,7 +152,7 @@ const PathsTextArea = ({ value, onChange, ...props }: any) => {
|
||||
<TextArea
|
||||
value={value}
|
||||
onChange={handleTextAreaChange}
|
||||
placeholder="Enter paths, one per line e.g. /home/user/documents /home/user/photos"
|
||||
placeholder={m.add_plan_modal_field_paths_placeholder()}
|
||||
style={{ minHeight: 100 }}
|
||||
autoSize={{ minRows: 3, maxRows: 10 }}
|
||||
/>
|
||||
@@ -210,7 +211,7 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
|
||||
try {
|
||||
if (!template) {
|
||||
throw new Error("template not found");
|
||||
throw new Error(m.add_plan_modal_error_template_not_found());
|
||||
}
|
||||
|
||||
const configCopy = clone(ConfigSchema, config);
|
||||
@@ -218,7 +219,7 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
// Remove the plan from the config
|
||||
const idx = configCopy.plans.findIndex((r) => r.id === template.id);
|
||||
if (idx === -1) {
|
||||
throw new Error("failed to update config, plan to delete not found");
|
||||
throw new Error(m.add_plan_modal_error_plan_delete_not_found());
|
||||
}
|
||||
configCopy.plans.splice(idx, 1);
|
||||
|
||||
@@ -227,11 +228,11 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
showModal(null);
|
||||
|
||||
alertsApi.success(
|
||||
"Plan deleted from config, but not from restic repo. Snapshots will remain in storage and operations will be tracked until manually deleted. Reusing a deleted plan ID is not recommended if backups have already been performed.",
|
||||
m.add_plan_modal_success_plan_deleted(),
|
||||
30
|
||||
);
|
||||
} catch (e: any) {
|
||||
alertsApi.error(formatErrorAlert(e, "Destroy error:"), 15);
|
||||
alertsApi.error(formatErrorAlert(e, m.add_plan_modal_error_destroy_prefix()), 15);
|
||||
} finally {
|
||||
setConfirmLoading(false);
|
||||
}
|
||||
@@ -286,7 +287,7 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
setConfig(await backrestService.setConfig(configCopy));
|
||||
showModal(null);
|
||||
} catch (e: any) {
|
||||
alertsApi.error(formatErrorAlert(e, "Operation error: "), 15);
|
||||
alertsApi.error(formatErrorAlert(e, m.add_plan_modal_error_operation_prefix()), 15);
|
||||
console.error(e);
|
||||
} finally {
|
||||
setConfirmLoading(false);
|
||||
@@ -304,11 +305,11 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
<Modal
|
||||
open={true}
|
||||
onCancel={handleCancel}
|
||||
title={template ? "Update Plan" : "Add Plan"}
|
||||
title={template ? m.add_plan_modal_title_update() : m.add_plan_modal_title_add()}
|
||||
width="60vw"
|
||||
footer={[
|
||||
<Button loading={confirmLoading} key="back" onClick={handleCancel}>
|
||||
Cancel
|
||||
{m.add_plan_modal_button_cancel()}
|
||||
</Button>,
|
||||
template != null ? (
|
||||
<ConfirmButton
|
||||
@@ -316,26 +317,26 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
type="primary"
|
||||
danger
|
||||
onClickAsync={handleDestroy}
|
||||
confirmTitle="Confirm Delete"
|
||||
confirmTitle={m.add_plan_modal_button_confirm_delete()}
|
||||
>
|
||||
Delete
|
||||
{m.add_plan_modal_button_delete()}
|
||||
</ConfirmButton>
|
||||
) : null,
|
||||
<SpinButton key="submit" type="primary" onClickAsync={handleOk}>
|
||||
Submit
|
||||
{m.add_plan_modal_button_submit()}
|
||||
</SpinButton>,
|
||||
]}
|
||||
maskClosable={false}
|
||||
>
|
||||
<p>
|
||||
See{" "}
|
||||
{m.add_plan_modal_see_guide_prefix()}{" "}
|
||||
<a
|
||||
href="https://garethgeorge.github.io/backrest/introduction/getting-started"
|
||||
target="_blank"
|
||||
>
|
||||
backrest getting started guide
|
||||
{m.add_plan_modal_see_guide_link()}
|
||||
</a>{" "}
|
||||
for plan configuration instructions.
|
||||
{m.add_plan_modal_see_guide_suffix()}
|
||||
</p>
|
||||
<br />
|
||||
<Form
|
||||
@@ -349,28 +350,28 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
<Form.Item<Plan>
|
||||
hasFeedback
|
||||
name="id"
|
||||
label="Plan Name"
|
||||
label={m.add_plan_modal_field_plan_name()}
|
||||
initialValue={template ? template.id : ""}
|
||||
validateTrigger={["onChange", "onBlur"]}
|
||||
tooltip="Unique ID that identifies this plan in the backrest UI (e.g. s3-myplan). This cannot be changed after creation."
|
||||
tooltip={m.add_plan_modal_field_plan_name_tooltip()}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: "Please input plan name",
|
||||
message: m.add_plan_modal_validation_plan_name_required(),
|
||||
},
|
||||
{
|
||||
validator: async (_, value) => {
|
||||
if (template) return;
|
||||
if (config?.plans?.find((r) => r.id === value)) {
|
||||
throw new Error("Plan with name already exists");
|
||||
throw new Error(m.add_plan_modal_validation_plan_exists());
|
||||
}
|
||||
},
|
||||
message: "Plan with name already exists",
|
||||
message: m.add_plan_modal_validation_plan_exists(),
|
||||
},
|
||||
{
|
||||
pattern: namePattern,
|
||||
message:
|
||||
"Name must be alphanumeric with dashes or underscores as separators",
|
||||
m.add_plan_modal_validation_plan_name_pattern(),
|
||||
},
|
||||
]}
|
||||
>
|
||||
@@ -383,14 +384,14 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
{/* Plan.repo */}
|
||||
<Form.Item<Plan>
|
||||
name="repo"
|
||||
label="Repository"
|
||||
label={m.add_plan_modal_field_repository()}
|
||||
validateTrigger={["onChange", "onBlur"]}
|
||||
initialValue={template ? template.repo : ""}
|
||||
tooltip="The repo that backrest will store your snapshots in."
|
||||
tooltip={m.add_plan_modal_field_repository_tooltip()}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: "Please select repository",
|
||||
message: m.add_plan_modal_validation_repository_required(),
|
||||
},
|
||||
]}
|
||||
>
|
||||
@@ -406,14 +407,14 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
{/* Plan.paths */}
|
||||
<Form.Item
|
||||
name="pathsText"
|
||||
label="Paths"
|
||||
label={m.add_plan_modal_field_paths()}
|
||||
required={true}
|
||||
tooltip="Enter file paths to backup, one per line. Autocomplete is available as you type."
|
||||
tooltip={m.add_plan_modal_field_paths_tooltip()}
|
||||
rules={[
|
||||
{
|
||||
validator: async (_, value) => {
|
||||
if (!value || !value.trim()) {
|
||||
throw new Error("Please enter at least one path to backup");
|
||||
throw new Error(m.add_plan_modal_validation_paths_required());
|
||||
}
|
||||
const paths = value
|
||||
.split("\n")
|
||||
@@ -421,7 +422,7 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
.filter((p: string) => p.length > 0);
|
||||
if (paths.length === 0) {
|
||||
throw new Error(
|
||||
"Please enter at least one valid path to backup"
|
||||
m.add_plan_modal_validation_paths_valid_required()
|
||||
);
|
||||
}
|
||||
},
|
||||
@@ -433,18 +434,18 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
|
||||
{/* Plan.excludes */}
|
||||
<Form.Item
|
||||
label="Excludes"
|
||||
label={m.add_plan_modal_field_excludes()}
|
||||
required={false}
|
||||
tooltip={
|
||||
<>
|
||||
Paths to exclude from your backups. See the{" "}
|
||||
{m.add_plan_modal_field_excludes_tooltip_prefix()}{" "}
|
||||
<a
|
||||
href="https://restic.readthedocs.io/en/latest/040_backup.html#excluding-files"
|
||||
target="_blank"
|
||||
>
|
||||
restic docs
|
||||
{m.add_plan_modal_field_excludes_tooltip_link()}
|
||||
</a>{" "}
|
||||
for more info.
|
||||
{m.add_plan_modal_field_excludes_tooltip_suffix()}
|
||||
</>
|
||||
}
|
||||
>
|
||||
@@ -491,7 +492,7 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
style={{ width: "90%" }}
|
||||
icon={<PlusOutlined />}
|
||||
>
|
||||
Add Exclusion Glob
|
||||
{m.add_plan_modal_field_excludes_add()}
|
||||
</Button>
|
||||
<Form.ErrorList errors={errors} />
|
||||
</Form.Item>
|
||||
@@ -502,18 +503,18 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
|
||||
{/* Plan.iexcludes */}
|
||||
<Form.Item
|
||||
label="Excludes (Case Insensitive)"
|
||||
label={m.add_plan_modal_field_iexcludes()}
|
||||
required={false}
|
||||
tooltip={
|
||||
<>
|
||||
Case insensitive paths to exclude from your backups. See the{" "}
|
||||
{m.add_plan_modal_field_iexcludes_tooltip_prefix()}{" "}
|
||||
<a
|
||||
href="https://restic.readthedocs.io/en/latest/040_backup.html#excluding-files"
|
||||
target="_blank"
|
||||
>
|
||||
restic docs
|
||||
{m.add_plan_modal_field_excludes_tooltip_link()}
|
||||
</a>{" "}
|
||||
for more info.
|
||||
{m.add_plan_modal_field_excludes_tooltip_suffix()}
|
||||
</>
|
||||
}
|
||||
>
|
||||
@@ -560,7 +561,7 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
style={{ width: "90%" }}
|
||||
icon={<PlusOutlined />}
|
||||
>
|
||||
Add Case Insensitive Exclusion Glob
|
||||
{m.add_plan_modal_field_iexcludes_add()}
|
||||
</Button>
|
||||
<Form.ErrorList errors={errors} />
|
||||
</Form.Item>
|
||||
@@ -570,7 +571,7 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
</Form.Item>
|
||||
|
||||
{/* Plan.cron */}
|
||||
<Form.Item label="Backup Schedule">
|
||||
<Form.Item label={m.add_plan_modal_field_schedule()}>
|
||||
<ScheduleFormItem
|
||||
name={["schedule"]}
|
||||
defaults={ScheduleDefaultsDaily}
|
||||
@@ -580,8 +581,8 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
{/* Plan.backup_flags */}
|
||||
<Form.Item
|
||||
label={
|
||||
<Tooltip title="Extra flags to add to the 'restic backup' command">
|
||||
Backup Flags
|
||||
<Tooltip title={m.add_plan_modal_field_backup_flags_tooltip()}>
|
||||
{m.add_plan_modal_field_backup_flags()}
|
||||
</Tooltip>
|
||||
}
|
||||
>
|
||||
@@ -601,7 +602,7 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
whitespace: true,
|
||||
pattern: /^\-\-?.*$/,
|
||||
message:
|
||||
"Value should be a CLI flag e.g. see restic backup --help",
|
||||
m.add_plan_modal_validation_flag_pattern(),
|
||||
},
|
||||
]}
|
||||
noStyle
|
||||
@@ -626,7 +627,7 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
style={{ width: "90%" }}
|
||||
icon={<PlusOutlined />}
|
||||
>
|
||||
Set Flag
|
||||
{m.add_plan_modal_field_backup_flags_add()}
|
||||
</Button>
|
||||
<Form.ErrorList errors={errors} />
|
||||
</Form.Item>
|
||||
@@ -640,7 +641,7 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
|
||||
{/* Plan.hooks */}
|
||||
<Form.Item
|
||||
label={<Tooltip title={hooksListTooltipText}>Hooks</Tooltip>}
|
||||
label={<Tooltip title={hooksListTooltipText}>{m.add_plan_modal_field_hooks()}</Tooltip>}
|
||||
>
|
||||
<HooksFormList />
|
||||
</Form.Item>
|
||||
@@ -652,7 +653,7 @@ export const AddPlanModal = ({ template }: { template: Plan | null }) => {
|
||||
items={[
|
||||
{
|
||||
key: "1",
|
||||
label: "Plan Config as JSON",
|
||||
label: m.add_plan_modal_preview_json(),
|
||||
children: (
|
||||
<Typography>
|
||||
<pre>
|
||||
|
||||
+22
-21
@@ -36,6 +36,7 @@ import { MainContentAreaTemplate } from "./MainContentArea";
|
||||
import { create } from "@bufbuild/protobuf";
|
||||
import { PeerState, RepoMetadata } from "../../gen/ts/v1sync/syncservice_pb";
|
||||
import { useSyncStates } from "../state/peerstates";
|
||||
import * as m from "../paraglide/messages";
|
||||
const { Header, Sider } = Layout;
|
||||
|
||||
const SummaryDashboard = React.lazy(() =>
|
||||
@@ -80,13 +81,13 @@ const RepoViewContainer = () => {
|
||||
|
||||
return (
|
||||
<MainContentAreaTemplate
|
||||
breadcrumbs={[{ title: "Repo" }, { title: repoId! }]}
|
||||
breadcrumbs={[{ title: m.app_breadcrumb_repo() }, { title: repoId! }]}
|
||||
key={repoId}
|
||||
>
|
||||
{repo ? (
|
||||
<RepoView repo={repo} />
|
||||
) : (
|
||||
<Empty description={`Repo ${repoId} not found`} />
|
||||
<Empty description={m.app_repo_not_found({ repoId: repoId || "" })} />
|
||||
)}
|
||||
</MainContentAreaTemplate>
|
||||
);
|
||||
@@ -105,23 +106,23 @@ const RemoteRepoViewContainer = () => {
|
||||
return (
|
||||
<MainContentAreaTemplate
|
||||
breadcrumbs={[
|
||||
{ title: "Peer" },
|
||||
{ title: peerInstanceId || "Unknown Peer" },
|
||||
{ title: "Repo" },
|
||||
{ title: repoId || "Unknown Repo" },
|
||||
{ title: m.app_breadcrumb_peer() },
|
||||
{ title: peerInstanceId || m.app_unknown_peer() },
|
||||
{ title: m.app_breadcrumb_repo() },
|
||||
{ title: repoId || m.app_unknown_repo() },
|
||||
]}
|
||||
key={`${peerInstanceId}-${repoId}`}
|
||||
>
|
||||
{peerRepo ? (
|
||||
<SelectorView
|
||||
title={`Remote Repo: ${peerRepo.id}`}
|
||||
title={m.app_remote_repo_title({ id: peerRepo.id })}
|
||||
sel={create(OpSelectorSchema, {
|
||||
originalInstanceKeyid: peerState?.peerKeyid,
|
||||
repoGuid: peerRepo.guid,
|
||||
})}
|
||||
/>
|
||||
) : (
|
||||
<Empty description={`Repo ${repoId} not found`} />
|
||||
<Empty description={m.app_repo_not_found({ repoId: repoId || "" })} />
|
||||
)}
|
||||
</MainContentAreaTemplate>
|
||||
);
|
||||
@@ -138,13 +139,13 @@ const PlanViewContainer = () => {
|
||||
const plan = config.plans.find((p) => p.id === planId);
|
||||
return (
|
||||
<MainContentAreaTemplate
|
||||
breadcrumbs={[{ title: "Plan" }, { title: planId! }]}
|
||||
breadcrumbs={[{ title: m.app_breadcrumb_plan() }, { title: planId! }]}
|
||||
key={planId}
|
||||
>
|
||||
{plan ? (
|
||||
<PlanView plan={plan} />
|
||||
) : (
|
||||
<Empty description={`Plan ${planId} not found`} />
|
||||
<Empty description={m.app_plan_not_found({ planId: planId || "" })} />
|
||||
)}
|
||||
</MainContentAreaTemplate>
|
||||
);
|
||||
@@ -216,7 +217,7 @@ export const App: React.FC = () => {
|
||||
window.location.reload();
|
||||
}}
|
||||
>
|
||||
Logout
|
||||
{m.app_logout()}
|
||||
</Button>
|
||||
</h1>
|
||||
</Header>
|
||||
@@ -236,7 +237,7 @@ export const App: React.FC = () => {
|
||||
<Route
|
||||
path="/"
|
||||
element={
|
||||
<MainContentAreaTemplate breadcrumbs={[{ title: "Summary" }]}>
|
||||
<MainContentAreaTemplate breadcrumbs={[{ title: m.app_breadcrumb_summary() }]}>
|
||||
<SummaryDashboard />
|
||||
</MainContentAreaTemplate>
|
||||
}
|
||||
@@ -245,7 +246,7 @@ export const App: React.FC = () => {
|
||||
path="/getting-started"
|
||||
element={
|
||||
<MainContentAreaTemplate
|
||||
breadcrumbs={[{ title: "Getting Started" }]}
|
||||
breadcrumbs={[{ title: m.app_breadcrumb_getting_started() }]}
|
||||
>
|
||||
<GettingStartedGuide />
|
||||
</MainContentAreaTemplate>
|
||||
@@ -261,7 +262,7 @@ export const App: React.FC = () => {
|
||||
path="/*"
|
||||
element={
|
||||
<MainContentAreaTemplate breadcrumbs={[]}>
|
||||
<Empty description="Page not found" />
|
||||
<Empty description={m.app_page_not_found()} />
|
||||
</MainContentAreaTemplate>
|
||||
}
|
||||
/>
|
||||
@@ -309,7 +310,7 @@ const AuthenticationBoundary = ({
|
||||
}
|
||||
|
||||
alertApi.error(
|
||||
"Failed to fetch initial config, typically this means the UI could not connect to the backend",
|
||||
m.app_error_initial_config(),
|
||||
0
|
||||
);
|
||||
});
|
||||
@@ -343,7 +344,7 @@ const getSidenavItems = (
|
||||
{
|
||||
key: "add-plan",
|
||||
icon: <PlusOutlined />,
|
||||
label: "Add Plan",
|
||||
label: m.app_menu_add_plan(),
|
||||
onClick: async () => {
|
||||
const { AddPlanModal } = await import("./AddPlanModal");
|
||||
showModal(<AddPlanModal template={null} />);
|
||||
@@ -390,7 +391,7 @@ const getSidenavItems = (
|
||||
{
|
||||
key: "add-repo",
|
||||
icon: <PlusOutlined />,
|
||||
label: "Add Repo",
|
||||
label: m.app_menu_add_repo(),
|
||||
onClick: async () => {
|
||||
const { AddRepoModal } = await import("./AddRepoModal");
|
||||
showModal(<AddRepoModal template={null} />);
|
||||
@@ -503,27 +504,27 @@ const getSidenavItems = (
|
||||
menu.push({
|
||||
key: "plans",
|
||||
icon: React.createElement(ScheduleOutlined),
|
||||
label: "Plans",
|
||||
label: m.app_menu_plans(),
|
||||
children: plans,
|
||||
});
|
||||
menu.push({
|
||||
key: "repos",
|
||||
icon: React.createElement(DatabaseOutlined),
|
||||
label: "Repositories",
|
||||
label: m.app_menu_repos(),
|
||||
children: repos,
|
||||
});
|
||||
if (authorizedClients.length > 0) {
|
||||
menu.push({
|
||||
key: "authorized-clients",
|
||||
icon: React.createElement(CloudServerOutlined),
|
||||
label: "Remote Instances",
|
||||
label: m.app_menu_remote_instances(),
|
||||
children: authorizedClients,
|
||||
});
|
||||
}
|
||||
menu.push({
|
||||
key: "settings",
|
||||
icon: React.createElement(SettingOutlined),
|
||||
label: "Settings",
|
||||
label: m.app_menu_settings(),
|
||||
onClick: async () => {
|
||||
const { SettingsModal } = await import("./SettingsModal");
|
||||
showModal(<SettingsModal />);
|
||||
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
} from "../../gen/ts/v1/authentication_pb";
|
||||
import { useAlertApi } from "../components/Alerts";
|
||||
import { create } from "@bufbuild/protobuf";
|
||||
import * as m from "../paraglide/messages";
|
||||
|
||||
export const LoginModal = () => {
|
||||
let defaultCreds = create(LoginRequestSchema, {});
|
||||
@@ -24,12 +25,12 @@ export const LoginModal = () => {
|
||||
try {
|
||||
const loginResponse = await authenticationService.login(loginReq);
|
||||
setAuthToken(loginResponse.token);
|
||||
alertApi.success("Logged in", 5);
|
||||
alertApi.success(m.login_success(), 5);
|
||||
setTimeout(() => {
|
||||
window.location.reload();
|
||||
}, 500);
|
||||
} catch (e: any) {
|
||||
alertApi.error("Login failed: " + (e.message ? e.message : "" + e), 10);
|
||||
alertApi.error(m.login_error() + (e.message ? e.message : "" + e), 10);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -37,7 +38,7 @@ export const LoginModal = () => {
|
||||
<Modal
|
||||
open={true}
|
||||
width="40vw"
|
||||
title="Login"
|
||||
title={m.login_title()}
|
||||
footer={null}
|
||||
closable={false}
|
||||
>
|
||||
@@ -53,14 +54,14 @@ export const LoginModal = () => {
|
||||
<Form.Item
|
||||
name="username"
|
||||
rules={[
|
||||
{ required: true, message: "Please input your username" },
|
||||
{ required: true, message: m.login_username_required() },
|
||||
]}
|
||||
style={{ width: "100%", paddingRight: "10px" }}
|
||||
initialValue={defaultCreds.username}
|
||||
>
|
||||
<Input
|
||||
prefix={<UserOutlined className="site-form-item-icon" />}
|
||||
placeholder="Username"
|
||||
placeholder={m.login_username_placeholder()}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
@@ -69,7 +70,7 @@ export const LoginModal = () => {
|
||||
<Form.Item
|
||||
name="password"
|
||||
rules={[
|
||||
{ required: true, message: "Please input your password!" },
|
||||
{ required: true, message: m.login_password_required() },
|
||||
]}
|
||||
style={{ width: "100%", paddingRight: "10px" }}
|
||||
initialValue={defaultCreds.password}
|
||||
@@ -77,13 +78,13 @@ export const LoginModal = () => {
|
||||
<Input
|
||||
prefix={<LockOutlined className="site-form-item-icon" />}
|
||||
type="password"
|
||||
placeholder="Password"
|
||||
placeholder={m.login_password_placeholder()}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={4}>
|
||||
<Button type="primary" htmlType="submit" style={{ width: "100%" }}>
|
||||
Log in
|
||||
{m.login_button()}
|
||||
</Button>
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
@@ -17,6 +17,7 @@ import { formatErrorAlert, useAlertApi } from "../components/Alerts";
|
||||
import { useShowModal } from "../components/ModalManager";
|
||||
import { create } from "@bufbuild/protobuf";
|
||||
import { RepoProps } from "../state/peerstates";
|
||||
import * as m from "../paraglide/messages";
|
||||
|
||||
const StatsPanel = React.lazy(() => import("../components/StatsPanel"));
|
||||
|
||||
@@ -37,22 +38,22 @@ export const RepoView = ({
|
||||
})
|
||||
);
|
||||
} catch (e: any) {
|
||||
alertsApi.error(formatErrorAlert(e, "Failed to index snapshots: "));
|
||||
alertsApi.error(formatErrorAlert(e, m.repo_error_index()));
|
||||
}
|
||||
};
|
||||
|
||||
const handleUnlockNow = async () => {
|
||||
try {
|
||||
alertsApi.info("Unlocking repo...");
|
||||
alertsApi.info(m.repo_info_unlocking());
|
||||
await backrestService.doRepoTask(
|
||||
create(DoRepoTaskRequestSchema, {
|
||||
repoId: repo.id!,
|
||||
task: DoRepoTaskRequest_Task.UNLOCK,
|
||||
})
|
||||
);
|
||||
alertsApi.success("Repo unlocked.");
|
||||
alertsApi.success(m.repo_success_unlocked());
|
||||
} catch (e: any) {
|
||||
alertsApi.error("Failed to unlock repo: " + e.message);
|
||||
alertsApi.error(m.repo_error_unlock() + e.message);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -65,7 +66,7 @@ export const RepoView = ({
|
||||
})
|
||||
);
|
||||
} catch (e: any) {
|
||||
alertsApi.error(formatErrorAlert(e, "Failed to compute stats: "));
|
||||
alertsApi.error(formatErrorAlert(e, m.repo_error_stats()));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -78,7 +79,7 @@ export const RepoView = ({
|
||||
})
|
||||
);
|
||||
} catch (e: any) {
|
||||
alertsApi.error(formatErrorAlert(e, "Failed to prune: "));
|
||||
alertsApi.error(formatErrorAlert(e, m.repo_error_prune()));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -91,7 +92,7 @@ export const RepoView = ({
|
||||
})
|
||||
);
|
||||
} catch (e: any) {
|
||||
alertsApi.error(formatErrorAlert(e, "Failed to check: "));
|
||||
alertsApi.error(formatErrorAlert(e, m.repo_error_check()));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -100,7 +101,7 @@ export const RepoView = ({
|
||||
if (!repoInConfig) {
|
||||
return (
|
||||
<>
|
||||
Repo was deleted
|
||||
{m.repo_deleted_message()}
|
||||
<pre>{JSON.stringify(config, null, 2)}</pre>
|
||||
</>
|
||||
);
|
||||
@@ -110,7 +111,7 @@ export const RepoView = ({
|
||||
const items = [
|
||||
{
|
||||
key: "1",
|
||||
label: "Tree View",
|
||||
label: m.repo_tab_tree(),
|
||||
children: (
|
||||
<>
|
||||
<OperationTreeView
|
||||
@@ -127,10 +128,10 @@ export const RepoView = ({
|
||||
},
|
||||
{
|
||||
key: "2",
|
||||
label: "List View",
|
||||
label: m.repo_tab_list(),
|
||||
children: (
|
||||
<>
|
||||
<h3>Backup Action History</h3>
|
||||
<h3>{m.repo_history_title()}</h3>
|
||||
<OperationListView
|
||||
req={create(GetOperationsRequestSchema, {
|
||||
selector: {
|
||||
@@ -147,9 +148,9 @@ export const RepoView = ({
|
||||
},
|
||||
{
|
||||
key: "3",
|
||||
label: "Stats",
|
||||
label: m.repo_tab_stats(),
|
||||
children: (
|
||||
<Suspense fallback={<div>Loading...</div>}>
|
||||
<Suspense fallback={<div>{m.loading()}</div>}>
|
||||
<StatsPanel
|
||||
selector={create(OpSelectorSchema, {
|
||||
repoGuid: repo.guid,
|
||||
@@ -167,7 +168,7 @@ export const RepoView = ({
|
||||
<Typography.Title>{repo.id}</Typography.Title>
|
||||
</Flex>
|
||||
<Flex gap="small" align="center" wrap="wrap">
|
||||
<Tooltip title="Advanced users: open a restic shell to run commands on the repository. Re-index snapshots to reflect any changes in Backrest.">
|
||||
<Tooltip title={m.repo_tooltip_run_command()}>
|
||||
<Button
|
||||
type="default"
|
||||
onClick={async () => {
|
||||
@@ -175,37 +176,37 @@ export const RepoView = ({
|
||||
showModal(<RunCommandModal repo={repo} />);
|
||||
}}
|
||||
>
|
||||
Run Command
|
||||
{m.repo_button_run_command()}
|
||||
</Button>
|
||||
</Tooltip>
|
||||
|
||||
<Tooltip title="Indexes the snapshots in the repository. Snapshots are also indexed automatically after each backup.">
|
||||
<Tooltip title={m.repo_tooltip_index()}>
|
||||
<SpinButton type="default" onClickAsync={handleIndexNow}>
|
||||
Index Snapshots
|
||||
{m.repo_button_index()}
|
||||
</SpinButton>
|
||||
</Tooltip>
|
||||
|
||||
<Tooltip title="Removes lockfiles and checks the repository for errors. Only run if you are sure the repo is not being accessed by another system">
|
||||
<Tooltip title={m.repo_tooltip_unlock()}>
|
||||
<SpinButton type="default" onClickAsync={handleUnlockNow}>
|
||||
Unlock Repo
|
||||
{m.repo_button_unlock()}
|
||||
</SpinButton>
|
||||
</Tooltip>
|
||||
|
||||
<Tooltip title="Runs a prune operation on the repository that will remove old snapshots and free up space">
|
||||
<Tooltip title={m.repo_tooltip_prune()}>
|
||||
<SpinButton type="default" onClickAsync={handlePruneNow}>
|
||||
Prune Now
|
||||
{m.repo_button_prune()}
|
||||
</SpinButton>
|
||||
</Tooltip>
|
||||
|
||||
<Tooltip title="Runs a check operation on the repository that will verify the integrity of the repository">
|
||||
<Tooltip title={m.repo_tooltip_check()}>
|
||||
<SpinButton type="default" onClickAsync={handleCheckNow}>
|
||||
Check Now
|
||||
{m.repo_button_check()}
|
||||
</SpinButton>
|
||||
</Tooltip>
|
||||
|
||||
<Tooltip title="Runs restic stats on the repository, this may be a slow operation">
|
||||
<Tooltip title={m.repo_tooltip_stats()}>
|
||||
<SpinButton type="default" onClickAsync={handleStatsNow}>
|
||||
Compute Stats
|
||||
{m.repo_button_stats()}
|
||||
</SpinButton>
|
||||
</Tooltip>
|
||||
</Flex>
|
||||
|
||||
@@ -33,6 +33,7 @@ import { PeerState } from "../../gen/ts/v1sync/syncservice_pb";
|
||||
import { useSyncStates } from "../state/peerstates";
|
||||
import { PeerStateConnectionStatusIcon } from "../components/SyncStateIcon";
|
||||
import { isMultihostSyncEnabled } from "../state/buildcfg";
|
||||
import * as m from "../paraglide/messages";
|
||||
|
||||
interface FormData {
|
||||
auth: {
|
||||
@@ -118,10 +119,10 @@ export const SettingsModal = () => {
|
||||
|
||||
setConfig(await backrestService.setConfig(newConfig));
|
||||
setReloadOnCancel(true);
|
||||
alertsApi.success("Settings updated", 5);
|
||||
alertsApi.success(m.settings_success_updated(), 5);
|
||||
setFormEdited(false);
|
||||
} catch (e: any) {
|
||||
alertsApi.error(formatErrorAlert(e, "Operation error: "), 15);
|
||||
alertsApi.error(formatErrorAlert(e, m.settings_error_operation()), 15);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -143,10 +144,10 @@ export const SettingsModal = () => {
|
||||
width="60vw"
|
||||
footer={[
|
||||
<Button key="back" onClick={handleCancel}>
|
||||
{formEdited ? "Cancel" : "Close"}
|
||||
{formEdited ? m.button_cancel() : m.button_close()}
|
||||
</Button>,
|
||||
<Button key="submit" type="primary" onClick={handleOk}>
|
||||
Save
|
||||
{m.button_save()}
|
||||
</Button>,
|
||||
]}
|
||||
>
|
||||
@@ -159,37 +160,34 @@ export const SettingsModal = () => {
|
||||
>
|
||||
{users.length > 0 || config.auth?.disabled ? null : (
|
||||
<>
|
||||
<strong>Initial backrest setup! </strong>
|
||||
<strong>{m.settings_initial_setup_title()}</strong>
|
||||
<p>
|
||||
Backrest has detected that you do not have any users configured,
|
||||
please add at least one user to secure the web interface.
|
||||
{m.settings_initial_setup_message()}
|
||||
</p>
|
||||
<p>
|
||||
You can add more users later or, if you forget your password,
|
||||
reset users by editing the configuration file (typically in
|
||||
$HOME/.backrest/config.json)
|
||||
{m.settings_initial_setup_hint()}
|
||||
</p>
|
||||
</>
|
||||
)}
|
||||
<Form.Item
|
||||
hasFeedback
|
||||
name="instance"
|
||||
label="Instance ID"
|
||||
label={m.settings_field_instance_id()}
|
||||
required
|
||||
initialValue={config.instance || ""}
|
||||
tooltip="The instance name will be used to identify this backrest install. Pick a value carefully as it cannot be changed later."
|
||||
tooltip={m.settings_field_instance_id_tooltip()}
|
||||
rules={[
|
||||
{ required: true, message: "Instance ID is required" },
|
||||
{ required: true, message: m.settings_validation_instance_id_required() },
|
||||
{
|
||||
pattern: namePattern,
|
||||
message:
|
||||
"Instance ID must be alphanumeric with '_-.' allowed as separators",
|
||||
m.settings_validation_instance_id_pattern(),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input
|
||||
placeholder={
|
||||
"Unique instance ID for this instance (e.g. my-backrest-server)"
|
||||
m.settings_field_instance_id_placeholder()
|
||||
}
|
||||
disabled={!!config.instance}
|
||||
/>
|
||||
@@ -199,13 +197,13 @@ export const SettingsModal = () => {
|
||||
items={[
|
||||
{
|
||||
key: "1",
|
||||
label: "Authentication",
|
||||
label: m.settings_section_authentication(),
|
||||
forceRender: true,
|
||||
children: <AuthenticationForm form={form} config={config} />,
|
||||
},
|
||||
{
|
||||
key: "2",
|
||||
label: "Multihost Identity and Sharing",
|
||||
label: m.settings_section_multihost(),
|
||||
forceRender: true,
|
||||
children: (
|
||||
<MultihostIdentityForm
|
||||
@@ -218,7 +216,7 @@ export const SettingsModal = () => {
|
||||
},
|
||||
{
|
||||
key: "last",
|
||||
label: "Preview",
|
||||
label: m.settings_section_preview(),
|
||||
children: (
|
||||
<Form.Item shouldUpdate wrapperCol={{ span: 24 }}>
|
||||
{() => (
|
||||
@@ -246,7 +244,7 @@ const AuthenticationForm: React.FC<{
|
||||
return (
|
||||
<>
|
||||
<Form.Item
|
||||
label="Disable Authentication"
|
||||
label={m.settings_auth_disable()}
|
||||
name={["auth", "disabled"]}
|
||||
valuePropName="checked"
|
||||
initialValue={config.auth?.disabled || false}
|
||||
@@ -254,7 +252,7 @@ const AuthenticationForm: React.FC<{
|
||||
<Checkbox />
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item label="Users" required={true}>
|
||||
<Form.Item label={m.settings_auth_users()} required={true}>
|
||||
<Form.List
|
||||
name={["auth", "users"]}
|
||||
initialValue={
|
||||
@@ -291,17 +289,17 @@ const AuthenticationForm: React.FC<{
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: "Name is required",
|
||||
message: m.settings_auth_name_required(),
|
||||
},
|
||||
{
|
||||
pattern: namePattern,
|
||||
message:
|
||||
"Name must be alphanumeric with dashes or underscores as separators",
|
||||
m.settings_auth_name_pattern(),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input
|
||||
placeholder="Username"
|
||||
placeholder={m.settings_auth_username_placeholder()}
|
||||
disabled={isExisting}
|
||||
/>
|
||||
</Form.Item>
|
||||
@@ -315,12 +313,12 @@ const AuthenticationForm: React.FC<{
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: "Password is required",
|
||||
message: m.settings_auth_password_required(),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input.Password
|
||||
placeholder="Password"
|
||||
placeholder={m.settings_auth_password_placeholder()}
|
||||
onFocus={() => {
|
||||
form.setFieldValue(
|
||||
["auth", "users", index, "needsBcrypt"],
|
||||
@@ -352,7 +350,7 @@ const AuthenticationForm: React.FC<{
|
||||
}}
|
||||
block
|
||||
>
|
||||
<PlusOutlined /> Add user
|
||||
<PlusOutlined /> {m.settings_auth_add_user()}
|
||||
</Button>
|
||||
</Form.Item>
|
||||
</>
|
||||
@@ -371,34 +369,30 @@ const MultihostIdentityForm: React.FC<{
|
||||
return (
|
||||
<>
|
||||
<Typography.Paragraph italic>
|
||||
Multihost identity allows you to share repositories between multiple
|
||||
Backrest instances. This is useful for keeping track of the backup
|
||||
status of a collections of systems.
|
||||
{m.settings_multihost_intro()}
|
||||
</Typography.Paragraph>
|
||||
<Typography.Paragraph italic>
|
||||
Warning: this feature is very experimental and may be subject to version
|
||||
incompatible changes in the future which will require all instances to
|
||||
be updated at the same time.
|
||||
{m.settings_multihost_warning()}
|
||||
</Typography.Paragraph>
|
||||
|
||||
{/* Show the current instance's identity */}
|
||||
<Form.Item
|
||||
label="Multihost Identity"
|
||||
label={m.settings_multihost_identity()}
|
||||
name={["multihost", "identity", "keyId"]}
|
||||
initialValue={config.multihost?.identity?.keyid || ""}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: "Multihost identity is required",
|
||||
message: m.settings_multihost_identity_required(),
|
||||
},
|
||||
]}
|
||||
tooltip="Multihost identity is used to identify this instance in a multihost setup. It is cryptographically derived from the public key of this instance."
|
||||
tooltip={m.settings_multihost_identity_tooltip()}
|
||||
wrapperCol={{ span: 16 }}
|
||||
>
|
||||
<Row>
|
||||
<Col flex="auto">
|
||||
<Input
|
||||
placeholder="Unique multihost identity"
|
||||
placeholder={m.settings_multihost_identity_placeholder()}
|
||||
disabled
|
||||
value={config.multihost?.identity?.keyid}
|
||||
/>
|
||||
@@ -412,7 +406,7 @@ const MultihostIdentityForm: React.FC<{
|
||||
)
|
||||
}
|
||||
>
|
||||
copy
|
||||
{m.button_copy()}
|
||||
</Button>
|
||||
</Col>
|
||||
</Row>
|
||||
@@ -420,14 +414,14 @@ const MultihostIdentityForm: React.FC<{
|
||||
|
||||
{/* Authorized client peers. */}
|
||||
<Form.Item
|
||||
label="Authorized Clients"
|
||||
tooltip="Authorized clients are other Backrest instances that are allowed to access repositories on this instance."
|
||||
label={m.settings_multihost_authorized_clients()}
|
||||
tooltip={m.settings_multihost_authorized_clients_tooltip()}
|
||||
>
|
||||
<PeerFormList
|
||||
form={form}
|
||||
listName={["multihost", "authorizedClients"]}
|
||||
showInstanceUrl={false}
|
||||
itemTypeName="Authorized Client"
|
||||
itemTypeName={m.settings_multihost_authorized_client_item()}
|
||||
peerStates={peerStates}
|
||||
config={config}
|
||||
listType="authorizedClients"
|
||||
@@ -441,14 +435,14 @@ const MultihostIdentityForm: React.FC<{
|
||||
|
||||
{/* Known host peers. */}
|
||||
<Form.Item
|
||||
label="Known Hosts"
|
||||
tooltip="Known hosts are other Backrest instances that this instance can connect to."
|
||||
label={m.settings_multihost_known_hosts()}
|
||||
tooltip={m.settings_multihost_known_hosts_tooltip()}
|
||||
>
|
||||
<PeerFormList
|
||||
form={form}
|
||||
listName={["multihost", "knownHosts"]}
|
||||
showInstanceUrl={true}
|
||||
itemTypeName="Known Host"
|
||||
itemTypeName={m.settings_multihost_known_host_item()}
|
||||
peerStates={peerStates}
|
||||
config={config}
|
||||
listType="knownHosts"
|
||||
@@ -507,7 +501,7 @@ const PeerFormList: React.FC<{
|
||||
block
|
||||
icon={<PlusOutlined />}
|
||||
>
|
||||
Add {itemTypeName || "Peer"}
|
||||
{m.settings_peer_add_button({ itemTypeName: itemTypeName || m.peer_default_name() })}
|
||||
</Button>
|
||||
<Form.ErrorList errors={errors} />
|
||||
</Form.Item>
|
||||
@@ -579,26 +573,26 @@ const PeerFormListItem: React.FC<{
|
||||
<Col span={10}>
|
||||
<Form.Item
|
||||
name={[fieldName, "instanceId"]}
|
||||
label="Instance ID"
|
||||
label={m.settings_peer_instance_id()}
|
||||
rules={[
|
||||
{ required: true, message: "Instance ID is required" },
|
||||
{ required: true, message: m.settings_validation_instance_id_required() },
|
||||
{
|
||||
pattern: namePattern,
|
||||
message:
|
||||
"Instance ID must be alphanumeric with '_-.' allowed as separators",
|
||||
m.settings_validation_instance_id_pattern(),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Input placeholder="e.g. my-backup-server" />
|
||||
<Input placeholder={m.settings_peer_instance_id_placeholder()} />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
name={[fieldName, "keyId"]}
|
||||
label="Key ID"
|
||||
rules={[{ required: true, message: "Key ID is required" }]}
|
||||
label={m.settings_peer_key_id()}
|
||||
rules={[{ required: true, message: m.settings_peer_key_id_required() }]}
|
||||
>
|
||||
<Input placeholder="Public key identifier" />
|
||||
<Input placeholder={m.settings_peer_key_id_placeholder()} />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={0}>
|
||||
@@ -609,7 +603,7 @@ const PeerFormListItem: React.FC<{
|
||||
// It will be more useful if we automate fetching keyids from known hosts in the future / provide a "connection token" like mechanism for easier setup.
|
||||
hidden={true}
|
||||
>
|
||||
<Checkbox defaultChecked={true}>Verified</Checkbox>
|
||||
<Checkbox defaultChecked={true}>{m.settings_peer_verified()}</Checkbox>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
@@ -619,16 +613,16 @@ const PeerFormListItem: React.FC<{
|
||||
<Col span={24}>
|
||||
<Form.Item
|
||||
name={[fieldName, "instanceUrl"]}
|
||||
label="Instance URL"
|
||||
label={m.settings_peer_instance_url()}
|
||||
rules={[
|
||||
{
|
||||
required: showInstanceUrl,
|
||||
message: "Instance URL is required for known hosts",
|
||||
message: m.settings_peer_instance_url_required(),
|
||||
},
|
||||
{ type: "url", message: "Please enter a valid URL" },
|
||||
{ type: "url", message: m.settings_peer_instance_url_pattern() },
|
||||
]}
|
||||
>
|
||||
<Input placeholder="https://example.com:9898" />
|
||||
<Input placeholder={m.settings_peer_instance_url_placeholder()} />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
@@ -661,7 +655,7 @@ const PeerPermissionsTile: React.FC<{
|
||||
return (
|
||||
<div>
|
||||
<Typography.Text strong style={{ marginBottom: "8px", display: "block" }}>
|
||||
Permissions
|
||||
{m.settings_peer_permissions()}
|
||||
</Typography.Text>
|
||||
|
||||
<Form.List name={[fieldName, "permissions"]}>
|
||||
@@ -685,28 +679,28 @@ const PeerPermissionsTile: React.FC<{
|
||||
<Col span={11}>
|
||||
<Form.Item
|
||||
name={[permissionField.name, "type"]}
|
||||
label="Type"
|
||||
label={m.settings_peer_permission_type()}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: "Permission type is required",
|
||||
message: m.settings_peer_permission_type_required(),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Select placeholder="Select permission type">
|
||||
<Select placeholder={m.settings_permission_type_placeholder()}>
|
||||
<Select.Option
|
||||
value={
|
||||
Multihost_Permission_Type.PERMISSION_READ_WRITE_CONFIG
|
||||
}
|
||||
>
|
||||
Edit Repo Configuration
|
||||
{m.settings_permission_edit_repo()}
|
||||
</Select.Option>
|
||||
<Select.Option
|
||||
value={
|
||||
Multihost_Permission_Type.PERMISSION_READ_OPERATIONS
|
||||
}
|
||||
>
|
||||
Read Operations
|
||||
{m.settings_permission_read_ops()}
|
||||
</Select.Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
@@ -714,19 +708,19 @@ const PeerPermissionsTile: React.FC<{
|
||||
<Col span={11}>
|
||||
<Form.Item
|
||||
name={[permissionField.name, "scopes"]}
|
||||
label="Scopes"
|
||||
label={m.settings_peer_permission_scopes()}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: "At least one scope is required",
|
||||
message: m.settings_peer_permission_scopes_required(),
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Select
|
||||
mode="multiple"
|
||||
placeholder="Select repositories or use * for all"
|
||||
placeholder={m.settings_permission_scope_placeholder()}
|
||||
options={[
|
||||
{ label: "All Repositories (*)", value: "*" },
|
||||
{ label: m.settings_permission_scope_all(), value: "*" },
|
||||
...repoOptions,
|
||||
]}
|
||||
/>
|
||||
@@ -757,7 +751,7 @@ const PeerPermissionsTile: React.FC<{
|
||||
size="small"
|
||||
style={{ width: "100%" }}
|
||||
>
|
||||
Add Permission
|
||||
{m.settings_peer_add_permission()}
|
||||
</Button>
|
||||
</>
|
||||
)}
|
||||
|
||||
+2
-1
@@ -6,7 +6,8 @@
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"skipLibCheck": true
|
||||
"skipLibCheck": true,
|
||||
"allowJs": true
|
||||
},
|
||||
"include": [
|
||||
"src/**/*",
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { paraglideVitePlugin } from '@inlang/paraglide-js'
|
||||
import { defineConfig, loadEnv, type PluginOption } from 'vite';
|
||||
import react from '@vitejs/plugin-react';
|
||||
import viteCompression from 'vite-plugin-compression';
|
||||
@@ -32,7 +33,7 @@ export default defineConfig(({ mode }) => {
|
||||
const env = loadEnv(mode, process.cwd(), '');
|
||||
|
||||
return {
|
||||
plugins: [
|
||||
plugins: [paraglideVitePlugin({ project: './project.inlang', outdir: './src/paraglide' }),
|
||||
react(),
|
||||
viteCompression({ algorithm: 'gzip', ext: '.gz', deleteOriginFile: true }),
|
||||
// viteCompression({ algorithm: 'brotliCompress', ext: '.br' }),
|
||||
|
||||
Reference in New Issue
Block a user