diff --git a/README.md b/README.md index a59ec8c..b217396 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ A modern, responsive web management console for RustFS distributed file system, ### Other Tools -- **[i18next](https://www.i18next.com/)** - Internationalization support (12 languages) +- **[i18next](https://www.i18next.com/)** - Internationalization support (13 languages) - **[Recharts](https://recharts.org/)** - Chart visualization - **[Sonner](https://sonner.emilkowal.ski/)** - Toast notifications - **[date-fns](https://date-fns.org/)** / **[dayjs](https://day.js.org/)** - Date handling @@ -65,7 +65,7 @@ console/ │ └── feedback/ # Global feedback APIs (toast, dialog) ├── types/ # TypeScript type definitions ├── i18n/ # Internationalization resource files -│ └── locales/ # Multi-language files (12 languages) +│ └── locales/ # Multi-language files (13 languages) ├── config/ # Configuration files ├── public/ # Static assets └── tests/ # Test files (mirror source structure) @@ -192,6 +192,7 @@ When tests are configured: The project supports multiple languages. Currently supported languages: +- العربية (AR-MA) - 中文(简体)(Chinese Simplified) - English (US) - Deutsch (DE) diff --git a/app/(dashboard)/status/page.tsx b/app/(dashboard)/status/page.tsx index 6ca7020..d01d577 100644 --- a/app/(dashboard)/status/page.tsx +++ b/app/(dashboard)/status/page.tsx @@ -162,7 +162,7 @@ export default function PerformancePage() { - + {t("Sync")} } @@ -181,7 +181,7 @@ export default function PerformancePage() { - + {t("Sync")} } diff --git a/components.json b/components.json index 62a70e1..a786b87 100644 --- a/components.json +++ b/components.json @@ -11,7 +11,7 @@ "prefix": "" }, "iconLibrary": "remixicon", - "rtl": false, + "rtl": true, "aliases": { "components": "@/components", "utils": "@/lib/utils", diff --git a/components/app-sidebar.tsx b/components/app-sidebar.tsx index ae5b905..48b5584 100644 --- a/components/app-sidebar.tsx +++ b/components/app-sidebar.tsx @@ -30,6 +30,7 @@ import logoImage from "@/assets/logo.svg" import type { NavItem } from "@/types/app-config" import { usePermissions } from "@/hooks/use-permissions" import { SidebarVersion } from "@/components/sidebars/version" +import { useDirection } from "@/components/ui/direction" const APP_NAME = "RustFS" @@ -60,6 +61,7 @@ export function AppSidebar() { const pathname = usePathname() const { state } = useSidebar() const isCollapsed = state === "collapsed" + const dir = useDirection() const brandInitial = APP_NAME.charAt(0).toUpperCase() ?? "R" const { isAdmin, canAccessPath } = usePermissions() @@ -118,7 +120,11 @@ export function AppSidebar() { const getLabel = (item: NavItem) => t(item.label) return ( - + {isCollapsed ? ( @@ -134,7 +140,7 @@ export function AppSidebar() { - +
{navGroups.map((group, groupIndex) => ( @@ -161,7 +167,7 @@ export function AppSidebar() { - + {item.children!.map((child) => ( {isExternal(child) ? ( @@ -174,7 +180,7 @@ export function AppSidebar() { > {getLabel(child)} - + ) : ( diff --git a/components/app-top-nav.tsx b/components/app-top-nav.tsx index c532216..06256c4 100644 --- a/components/app-top-nav.tsx +++ b/components/app-top-nav.tsx @@ -12,7 +12,7 @@ export function AppTopNav() { return (
- +
diff --git a/components/auth/heroes/hero-static.tsx b/components/auth/heroes/hero-static.tsx index da01912..909a5e9 100644 --- a/components/auth/heroes/hero-static.tsx +++ b/components/auth/heroes/hero-static.tsx @@ -13,11 +13,11 @@ export function AuthHeroStatic() { const locale = i18n.language?.split("-")[0] ?? "en" return ( -
+
RustFS
- {t("Rust-based")} + {t("Rust-based")} {t("Visit website")} - +
diff --git a/components/auth/login-form.tsx b/components/auth/login-form.tsx index e8a8bc6..edd0f46 100644 --- a/components/auth/login-form.tsx +++ b/components/auth/login-form.tsx @@ -60,7 +60,7 @@ export function LoginForm({
-
+
{t("Access Policy")} @@ -465,7 +465,7 @@ export function BucketInfo({ bucketName }: BucketInfoProps) {
@@ -478,7 +478,7 @@ export function BucketInfo({ bucketName }: BucketInfoProps) { {t("Tag")} diff --git a/components/language-switcher.tsx b/components/language-switcher.tsx index c84e818..9fb43de 100644 --- a/components/language-switcher.tsx +++ b/components/language-switcher.tsx @@ -8,6 +8,7 @@ import { LOCALE_CODES, type Locale } from "@/lib/i18n" const languageConfig: Record = { en: { text: "English", icon: RiTranslate2 }, + ar: { text: "العربية", icon: RiTranslate2 }, zh: { text: "中文", icon: RiTranslate2 }, fr: { text: "Français", icon: RiTranslate2 }, tr: { text: "Türkçe", icon: RiTranslate2 }, diff --git a/components/license/enterprise-section.tsx b/components/license/enterprise-section.tsx index b1a38eb..0304ed8 100644 --- a/components/license/enterprise-section.tsx +++ b/components/license/enterprise-section.tsx @@ -246,11 +246,11 @@ export function LicenseEnterpriseSection() {
diff --git a/components/object/list.tsx b/components/object/list.tsx index 1fbe289..e7c0f40 100644 --- a/components/object/list.tsx +++ b/components/object/list.tsx @@ -546,12 +546,12 @@ export function ObjectList({
diff --git a/components/object/preview-modal.tsx b/components/object/preview-modal.tsx index feacaa1..602c444 100644 --- a/components/object/preview-modal.tsx +++ b/components/object/preview-modal.tsx @@ -80,7 +80,7 @@ export function ObjectPreviewModal({ show, onShowChange, object }: ObjectPreview - {t("Preview")} + {t("Preview")}
{loading ? ( @@ -97,7 +97,7 @@ export function ObjectPreviewModal({ show, onShowChange, object }: ObjectPreview {isText && (
                   {getFormattedContent()}
-                  
+
{isJson && (
diff --git a/components/user-group/policies.tsx b/components/user-group/policies.tsx index 5d5e81e..f02ed54 100644 --- a/components/user-group/policies.tsx +++ b/components/user-group/policies.tsx @@ -170,7 +170,7 @@ export function UserGroupPolicies({ group, onSearch }: UserGroupPoliciesProps) { > diff --git a/components/user/edit-form.tsx b/components/user/edit-form.tsx index a80e47f..9d87df6 100644 --- a/components/user/edit-form.tsx +++ b/components/user/edit-form.tsx @@ -115,7 +115,7 @@ export function UserEditForm({ open, onOpenChange, row, onSuccess }: UserEditFor
{t("Status")} -
diff --git a/components/user/new-form.tsx b/components/user/new-form.tsx index 150c70d..700fd20 100644 --- a/components/user/new-form.tsx +++ b/components/user/new-form.tsx @@ -200,7 +200,7 @@ export function UserNewForm({ open, onOpenChange, onSuccess }: UserNewFormProps) onSelect={() => toggleGroup(option.value)} > {option.label} @@ -253,7 +253,7 @@ export function UserNewForm({ open, onOpenChange, onSuccess }: UserNewFormProps) > diff --git a/components/user/selector.tsx b/components/user/selector.tsx index 0dd92a1..79c3162 100644 --- a/components/user/selector.tsx +++ b/components/user/selector.tsx @@ -82,7 +82,7 @@ export function UserSelector({ {users.map((option) => ( toggleUser(option.value)}> {option.label} diff --git a/i18n/locales/ar-MA.json b/i18n/locales/ar-MA.json new file mode 100644 index 0000000..1b23a50 --- /dev/null +++ b/i18n/locales/ar-MA.json @@ -0,0 +1,885 @@ +{ + "(Configuration details are private)": "(تفاصيل الإعداد خاصة)", + "(Configured)": "(مُعَدّ)", + "API Base URL": "عنوان URL الأساسي لـ API", + "Access Control": "التحكم في الوصول", + "Access Key": "مفتاح الوصول", + "Access Key *": "مفتاح الوصول *", + "Access Key is required": "مفتاح الوصول مطلوب", + "Access Key length must be between 3 and 20 characters": "يجب أن يكون طول مفتاح الوصول بين 3 و 20 حرفًا", + "Access Keys": "مفاتيح الوصول", + "Access Policy": "سياسة الوصول", + "Account": "الحساب", + "Action": "الإجراء", + "Actions": "الإجراءات", + "Active": "نشط", + "Add": "إضافة", + "Add Access Key": "إضافة مفتاح وصول", + "Add Account": "إضافة حساب", + "Add Event Destination": "إضافة وجهة الحدث", + "Add Event Subscription": "إضافة اشتراك الحدث", + "Add Event Subscription to get started": "أضف اشتراك حدث للبدء", + "Add Failed": "فشل الإضافة", + "Add Lifecycle Rule": "إضافة قاعدة دورة الحياة", + "Add Replication Rule": "إضافة قاعدة النسخ", + "Add Site": "إضافة موقع", + "Add Site Replication": "إضافة نسخ الموقع", + "Add Success": "تمت الإضافة بنجاح", + "Add Tag": "إضافة وسم", + "Add Tier": "إضافة طبقة", + "Add User": "إضافة مستخدم", + "Add User Group": "إضافة مجموعة مستخدمين", + "Inherited from group": "موروث من المجموعة", + "Add failed": "فشل الإضافة", + "Add group members": "إضافة أعضاء المجموعة", + "Add replication rules to sync objects across buckets.": "أضف قواعد النسخ لمزامنة الكائنات عبر الحاويات.", + "Add success": "تمت الإضافة بنجاح", + "Add tiers to configure remote storage destinations.": "أضف طبقات لتكوين وجهات التخزين البعيدة.", + "Add to Group": "إضافة إلى المجموعة", + "Add {type} Destination": "إضافة وجهة {type}", + "Added successfully": "تمت الإضافة بنجاح", + "Adding to Upload Queue": "إضافة إلى قائمة التحميل", + "Advanced Monitoring": "المراقبة المتقدمة", + "Advanced Settings": "الإعدادات المتقدمة", + "Algorithm": "الخوارزمية", + "Amazon Resource Name": "اسم مورد أمازون", + "Apache License": "رخصة أباتشي", + "AppRole": "AppRole", + "AppRole Role ID from Vault": "معرف دور AppRole من Vault", + "AppRole Secret ID from Vault": "معرف السر AppRole من Vault", + "Are you sure you want to delete all selected keys?": "هل أنت متأكد من حذف جميع المفاتيح المحددة؟", + "Are you sure you want to delete all selected user groups?": "هل أنت متأكد من حذف جميع مجموعات المستخدمين المحددة؟", + "Are you sure you want to delete all selected users?": "هل أنت متأكد من حذف جميع المستخدمين المحددين؟", + "Are you sure you want to delete the selected objects?": "هل أنت متأكد من حذف الكائنات المحددة؟", + "Are you sure you want to delete this bucket?": "هل أنت متأكد من حذف هذه الحاوية؟", + "Are you sure you want to delete this destination?": "هل أنت متأكد من حذف هذه الوجهة؟", + "Are you sure you want to delete this key?": "هل أنت متأكد من حذف هذا المفتاح؟", + "Are you sure you want to delete this notification configuration?": "هل أنت متأكد من حذف إعداد الإشعار هذا؟", + "Are you sure you want to delete this object?": "هل أنت متأكد من حذف هذا الكائن؟", + "Are you sure you want to delete this policy?": "هل أنت متأكد من حذف هذه السياسة؟", + "Are you sure you want to delete this replication rule?": "هل أنت متأكد من حذف قاعدة النسخ هذه؟", + "Are you sure you want to delete this rule?": "هل أنت متأكد من حذف هذه القاعدة؟", + "Are you sure you want to delete this tier?": "هل أنت متأكد من حذف هذه الطبقة؟", + "Are you sure you want to force delete this key?": "هل أنت متأكد من الحذف القسري لهذا المفتاح؟", + "Are you sure you want to remove encryption?": "هل أنت متأكد من إزالة التشفير؟", + "Assign Policy": "تعيين السياسة", + "Asynchronous": "غير متزامن", + "Audit": "تدقيق", + "Auth Method": "طريقة المصادقة", + "Authentication Method": "طريقة المصادقة", + "Authorization": "التفويض", + "Auto": "تلقائي", + "Automatically inherit the main account policy when enabled.": "الوراثة التلقائية لسياسة الحساب الرئيسي عند التفعيل.", + "Available": "متاح", + "Backend": "الخلفية", + "Backend Services": "خدمات الخلفية", + "Backend Status": "حالة الخلفية", + "Backend Type": "نوع الخلفية", + "Bandwidth Limit": "حد النطاق الترددي", + "Batch allocation policies": "سياسات التخصيص الجماعي", + "Bitrot": "تعفن البت", + "Browser": "المتصفح", + "Browser Warning": "تحذير المتصفح", + "Bucket": "الحاوية", + "Bucket Configuration": "إعداد الحاوية", + "Bucket Count": "عدد الحاويات", + "Bucket Encryption Management": "إدارة تشفير الحاوية", + "Bucket Events": "أحداث الحاوية", + "Bucket Notification": "إشعار الحاوية", + "Bucket Policy": "سياسة الحاوية", + "Bucket Quota": "حصة الحاوية", + "Bucket Quota Exceeded": "تم تجاوز حصة الحاوية", + "Quota Size": "حجم الحصة", + "Bucket Quota Insufficient": "حصة الحاوية غير كافية", + "Quota Warning Content": "الحجم الإجمالي للملفات المحددة هو {total}، مما يتجاوز حصة الحاوية المتبقية {remaining}. هل تريد المتابعة؟", + "Continue Upload": "متابعة التحميل", + "Set Bucket Quota": "تعيين حصة الحاوية", + "Bucket Replication": "نسخ الحاوية", + "Bucket Setting": "إعداد الحاوية", + "Bucket encryption configured successfully": "تم إعداد تشفير الحاوية بنجاح", + "Bucket encryption removed successfully": "تم إزالة تشفير الحاوية بنجاح", + "Bucket is not empty": "الحاوية ليست فارغة", + "Bucket list refreshed": "تم تحديث قائمة الحاويات", + "Buckets": "الحاويات", + "COMMENT_KEY": "تعليق", + "COMPLIANCE": "امتثال", + "Cache Enabled": "التخزين المؤقت مُفعَّل", + "Cache Hits": "إصابات التخزين المؤقت", + "Cache Misses": "فوارق التخزين المؤقت", + "Cache Statistics": "إحصاءات التخزين المؤقت", + "Cache Status": "حالة التخزين المؤقت", + "Cache TTL": "مدة صلاحية التخزين المؤقت", + "Cache TTL (seconds)": "مدة صلاحية التخزين المؤقت (ثوان)", + "Cache Warning": "تحذير التخزين المؤقت", + "Cache clear completed with warnings": "اكتمل مسح التخزين المؤقت مع تحذيرات", + "Cache cleared successfully": "تم مسح التخزين المؤقت بنجاح", + "Cache time-to-live in seconds, default: 600": "مدة صلاحية التخزين المؤقت بالثواني، الافتراضي: 600", + "Cancel": "إلغاء", + "Canceled": "ملغى", + "canceled": "ملغى", + "Cannot Preview": "لا يمكن معاينة محتوى هذا الكائن (نوع MIME: {contentType})، يرجى التنزيل للعرض", + "Change Password": "تغيير كلمة المرور", + "Change Secret Key": "تغيير المفتاح السري", + "Change current account password": "تغيير كلمة مرور الحساب الحالي", + "Confirm New Secret Key": "تأكيد المفتاح السري الجديد", + "Choose the encryption method for this bucket": "اختر طريقة التشفير لهذه الحاوية", + "Clear All": "مسح الكل", + "Clear Cache": "مسح التخزين المؤقت", + "Clear Records": "مسح السجلات", + "Click or drag ZIP file to this area to upload": "انقر أو اسحب ملف ZIP إلى هذه المنطقة للتحميل", + "Close": "إغلاق", + "Completed": "مكتمل({count})", + "Configuration": "الإعداد", + "Configuration Information": "معلومات الإعداد", + "Configuration is saved locally in your browser": "يتم حفظ الإعداد محليًا في متصفحك", + "Configuration loaded successfully": "تم تحميل الإعداد بنجاح", + "Configuration reset successfully": "تم إعادة تعيين الإعداد بنجاح", + "Configuration saved successfully": "تم حفظ الإعداد بنجاح", + "Configure": "إعداد", + "Configure Bucket Encryption": "إعداد تشفير الحاوية", + "Configure Encryption": "إعداد التشفير", + "Configure Encryption for {bucket}": "إعداد التشفير لـ {bucket}", + "Configure KMS": "إعداد KMS", + "Configure server-side encryption for your objects using external key management services.": "إعداد التشفير من جانب الخادم لكائناتك باستخدام خدمات إدارة المفاتيح الخارجية.", + "Configured": "مُعَدّ", + "Confirm": "تأكيد", + "Confirm Delete": "تأكيد الحذف", + "Confirm Force Delete": "تأكيد الحذف القسري", + "Confirm New Password": "تأكيد كلمة المرور الجديدة", + "Confirm Remove Encryption": "تأكيد إزالة التشفير", + "Contact Support": "الاتصال بالدعم", + "Copy": "نسخ", + "Copy Failed": "فشل النسخ", + "Copy Success": "تم النسخ بنجاح", + "Copy Temporary URL": "نسخ URL المؤقت", + "Create": "إنشاء", + "Create Bucket": "إنشاء حاوية", + "Create Failed": "فشل الإنشاء", + "Create First Key": "إنشاء أول مفتاح", + "Create Key": "إنشاء مفتاح", + "Create New Key": "إنشاء مفتاح جديد", + "Create Success": "تم الإنشاء بنجاح", + "Create User": "إنشاء مستخدم", + "Create a bucket to start storing objects.": "أنشئ حاوية لبدء تخزين الكائنات.", + "Create a new access key to get started.": "أنشئ مفتاح وصول جديدًا للبدء.", + "Create a policy to manage access control templates.": "أنشئ سياسة لإدارة قوالب التحكم في الوصول.", + "Create an event destination to forward notifications.": "أنشئ وجهة حدث لإعادة توجيه الإشعارات.", + "Create lifecycle rules to automate object transitions and expiration.": "أنشئ قواعد دورة الحياة لأتمتة انتقالات الكائنات وانتهاء صلاحيتها.", + "Create your first KMS key to get started": "أنشئ أول مفتاح KMS للبدء", + "Create your first bucket to configure encryption": "أنشئ أول حاوية لإعداد التشفير", + "Create, rotate, and inspect the keys managed by your KMS backend.": "إنشاء وتدوير وفحص المفاتيح التي يديرها نظام KMS الخلفي.", + "Created": "تم الإنشاء", + "Creation Date": "تاريخ الإنشاء", + "Current Configuration": "الإعداد الحالي", + "Current KMS Type": "نوع KMS الحالي", + "Current Password": "كلمة المرور الحالية", + "Current Prefix": "البادئة الحالية", + "Current Site": "الموقع الحالي", + "Current User Policy": "سياسة المستخدم الحالية", + "Current Version": "الإصدار الحالي", + "Current user policy": "سياسة المستخدم الحالية", + "Custom": "مخصص", + "Customer Service": "خدمة العملاء", + "Setting prefix": "تعيين البادئة", + "DAYS": "أيام", + "Dark": "داكن", + "Data Backup": "النسخ الاحتياطي للبيانات", + "Data Key (DEK)": "مفتاح البيانات (DEK)", + "Data Keys (DEK)": "مفاتيح البيانات (DEK)", + "Data Redundancy": "تكرار البيانات", + "Data keys are automatically generated when encrypting files. They are encrypted by master keys and used for actual data encryption.": "يتم إنشاء مفاتيح البيانات تلقائيًا عند تشفير الملفات. يتم تشفيرها بمفاتيح رئيسية وتُستخدم لتشفير البيانات الفعلية.", + "Day": "يوم", + "Days After": "أيام بعد", + "Default Key ID": "معرف المفتاح الافتراضي", + "Default master key ID for SSE-KMS": "معرف المفتاح الرئيسي الافتراضي لـ SSE-KMS", + "Delete": "حذف", + "Delete Failed": "فشل الحذف", + "Delete Key": "حذف المفتاح", + "Delete Marker Handling": "معالجة علامة الحذف", + "Delete Record": "حذف السجل", + "Delete Selected": "حذف المحدد", + "Delete Success": "تم الحذف بنجاح", + "Delete Tag Confirm": "تأكيد حذف الوسم", + "Deleting": "جارٍ الحذف({count})", + "Deleting...": "جارٍ الحذف...", + "Description": "الوصف", + "Destination Bucket": "حاوية الوجهة", + "Detailed KMS Status": "حالة KMS التفصيلية", + "Details": "التفاصيل", + "Development Language Requirements": "متطلبات لغة التطوير", + "Disabled": "معطَّل", + "Disk Bad Spot Check": "فحص البقع السيئة في القرص", + "Disks": "الأقراص", + "Documentation": "التوثيق", + "Download": "تنزيل", + "Download complete IAM configuration as ZIP file": "تنزيل إعداد IAM الكامل كملف ZIP", + "Chrome and Firefox support drag and drop to this area and selecting multiple files or folders.": "يدعم Chrome وFirefox السحب والإفلات في هذه المنطقة وتحديد ملفات أو مجلدات متعددة.", + "EC Mode": "وضع EC", + "Edit": "تعديل", + "Edit Configuration": "تعديل الإعداد", + "Edit Failed": "فشل التعديل", + "Edit Group": "تعديل المجموعة", + "Edit Key": "تعديل المفتاح", + "Edit Policy": "تعديل السياسة", + "Edit Success": "تم التعديل بنجاح", + "Edit User": "تعديل المستخدم", + "Emergency Response": "الاستجابة للطوارئ", + "Enable Cache": "تفعيل التخزين المؤقت", + "Enable Storage Encryption": "تفعيل تشفير التخزين", + "Enable caching for better performance, default: true": "تفعيل التخزين المؤقت لأداء أفضل، الافتراضي: صحيح", + "Enable secure transport when connecting to endpoint.": "تفعيل النقل الآمن عند الاتصال بنقطة النهاية.", + "Enabled": "مُفعَّل", + "Encryption": "التشفير", + "Encryption Status": "حالة التشفير", + "Encryption Type": "نوع التشفير", + "Encryption algorithm for the key.": "خوارزمية التشفير للمفتاح.", + "Endpoint": "نقطة النهاية", + "Endpoint *": "نقطة النهاية *", + "Endpoint is required": "نقطة النهاية مطلوبة", + "Enter AppRole Role ID": "أدخل معرف دور AppRole", + "Enter AppRole Secret ID": "أدخل معرف سر AppRole", + "Enter your Vault authentication token": "أدخل رمز مصادقة Vault الخاص بك", + "Enterprise": "المؤسسة", + "Enterprise License": "رخصة المؤسسة", + "Enterprise Service Level": "مستوى خدمة المؤسسة", + "Error": "خطأ", + "Event Destinations": "وجهات الأحداث", + "Event Target created successfully": "تم إنشاء هدف الحدث بنجاح", + "Events": "الأحداث", + "Existing encrypted objects will remain encrypted.": "ستظل الكائنات المشفرة الموجودة مشفرة.", + "Expiration": "انتهاء الصلاحية", + "Expiration Delete Mark": "علامة حذف انتهاء الصلاحية", + "Expired": "منتهي الصلاحية", + "Expiry": "انتهاء الصلاحية", + "Export": "تصدير", + "Export Now": "تصدير الآن", + "Export all IAM configurations including users, groups, policies, and access keys in a ZIP file.": "تصدير جميع إعدادات IAM بما في ذلك المستخدمون والمجموعات والسياسات ومفاتيح الوصول في ملف ZIP.", + "Exporting...": "جارٍ التصدير...", + "External MinIO tier": "طبقة MinIO الخارجية", + "Failed": "فشل({count})", + "Failed Status": "فشل", + "failed": "فشل", + "Failed to clear cache": "فشل مسح التخزين المؤقت", + "Failed to configure bucket encryption": "فشل إعداد تشفير الحاوية", + "Failed to create event target": "فشل إنشاء هدف الحدث", + "Failed to create rule": "فشل إنشاء القاعدة", + "Failed to delete key": "فشل حذف المفتاح", + "Failed to export IAM configuration": "فشل تصدير إعداد IAM", + "Failed to fetch KMS keys": "فشل جلب مفاتيح KMS", + "Failed to fetch data": "فشل جلب البيانات", + "Failed to fetch object info": "فشل جلب معلومات الكائن", + "Failed to fetch versions": "فشل جلب الإصدارات", + "Failed to force delete key": "فشل الحذف القسري للمفتاح", + "Failed to get data": "فشل الحصول على البيانات", + "Failed to get detailed status": "فشل الحصول على الحالة التفصيلية", + "Failed to get key details": "فشل الحصول على تفاصيل المفتاح", + "Failed to import IAM configuration": "فشل استيراد إعداد IAM", + "Failed to load KMS status": "فشل تحميل حالة KMS", + "Failed to load bucket list": "فشل تحميل قائمة الحاويات", + "Failed to load current configuration": "فشل تحميل الإعداد الحالي", + "Failed to load key list": "فشل تحميل قائمة المفاتيح", + "Failed to refresh key list": "فشل تحديث قائمة المفاتيح", + "Failed to refresh status": "فشل تحديث الحالة", + "Failed to remove bucket encryption": "فشل إزالة تشفير الحاوية", + "Failed to save configuration": "فشل حفظ الإعداد", + "Failed to save key": "فشل حفظ المفتاح", + "Failed to set local development mode": "فشل تعيين وضع التطوير المحلي", + "Failed to start KMS service": "فشل بدء خدمة KMS", + "Failed to stop KMS service": "فشل إيقاف خدمة KMS", + "Feature Permissions": "أذونات الميزات", + "File Count Limit Exceeded": "تم تجاوز حد عدد الملفات", + "Single file supports up to 512GB, use CLI for larger files.": "يدعم الملف الواحد حتى 512GB، استخدم CLI للملفات الأكبر.", + "Up to {max} files per upload": "حتى {max} ملف لكل تحميل", + "File size exceeds limit (10MB)": "حجم الملف يتجاوز الحد (10MB)", + "Files": "الملفات", + "First": "الأول", + "Folder": "المجلد", + "Folder Processing Error": "خطأ في معالجة المجلد", + "Force Delete": "حذف قسري", + "Friday": "الجمعة", + "Future uploads to this bucket will not be encrypted by default.": "لن يتم تشفير التحميلات المستقبلية إلى هذه الحاوية افتراضيًا.", + "GOVERNANCE": "حوكمة", + "Generated from master keys to encrypt your files. Automatically created when encrypting data.": "يتم إنشاؤها من المفاتيح الرئيسية لتشفير ملفاتك. تُنشأ تلقائيًا عند تشفير البيانات.", + "Get Data Failed": "فشل الحصول على البيانات", + "Get Help": "الحصول على المساعدة", + "Groups": "المجموعات", + "HashiCorp Encryption": "تشفير HashiCorp", + "HashiCorp Vault Transit Engine": "محرك عبور HashiCorp Vault", + "Health Check Interval (seconds)": "فترة فحص الصحة (ثوان)", + "High Memory Usage Warning": "تحذير من ارتفاع استخدام الذاكرة", + "High Performance": "أداء عالٍ", + "Hit Rate": "معدل الإصابة", + "Home": "الرئيسية", + "IAM Configuration Export": "تصدير إعداد IAM", + "IAM Configuration Import": "استيراد إعداد IAM", + "IAM Policies": "سياسات IAM", + "IAM configuration exported successfully": "تم تصدير إعداد IAM بنجاح", + "IAM configuration imported successfully": "تم استيراد إعداد IAM بنجاح", + "Identity Authentication Expansion": "توسيع مصادقة الهوية", + "If no versions remain, delete references to this object": "إذا لم تبق إصدارات، احذف المراجع لهذا الكائن", + "Import": "استيراد", + "Import IAM configurations from a previously exported ZIP file.": "استيراد إعدادات IAM من ملف ZIP تم تصديره مسبقًا.", + "Import Now": "استيراد الآن", + "Import Success": "تم الاستيراد بنجاح", + "Import/Export": "استيراد/تصدير", + "Importing...": "جارٍ الاستيراد...", + "In Progress": "{total} مهمة قيد التنفيذ ({processing} معالجة، {completed} مكتملة)", + "in progress": "قيد التنفيذ", + "Inactive": "غير نشط", + "Include objects that already exist in the source bucket.": "تضمين الكائنات الموجودة بالفعل في الحاوية المصدر.", + "Infinite Scaling": "توسع لا نهائي", + "Info": "معلومات", + "Infrastructure Health": "صحة البنية التحتية", + "Inspect individual server health, disk utilization, and network status.": "فحص صحة الخادم الفردي واستخدام القرص وحالة الشبكة.", + "Invalid server address format": "تنسيق عنوان الخادم غير صالح", + "JSON Editor": "محرر JSON", + "KMS Configuration": "إعداد KMS", + "KMS Key": "مفتاح KMS", + "KMS Key ID": "معرف مفتاح KMS", + "KMS Keys Management": "إدارة مفاتيح KMS", + "KMS Status Overview": "نظرة عامة على حالة KMS", + "KMS Type": "نوع KMS", + "KMS is not configured, please configure it first": "لم يتم إعداد KMS، يرجى إعداده أولاً", + "KMS server has errors": "يحتوي خادم KMS على أخطاء", + "KMS server is configured but not running": "تم إعداد خادم KMS ولكنه لا يعمل", + "KMS server is not configured": "لم يتم إعداد خادم KMS", + "KMS server is running and healthy": "خادم KMS يعمل وبصحة جيدة", + "KMS server is running but unhealthy": "خادم KMS يعمل ولكن بصحة سيئة", + "KMS server is running, configuration details are private": "خادم KMS يعمل، تفاصيل الإعداد خاصة", + "KMS server status unknown": "حالة خادم KMS غير معروفة", + "KMS service has errors": "خدمة KMS بها أخطاء", + "KMS service is stopped": "خدمة KMS متوقفة", + "KMS service not initialized, please configure it first": "لم تتم تهيئة خدمة KMS، يرجى إعدادها أولاً", + "KMS service started successfully": "تم بدء خدمة KMS بنجاح", + "KMS service stopped successfully": "تم إيقاف خدمة KMS بنجاح", + "KV Mount": "نقطة تركيب KV", + "KV Mount Path": "مسار نقطة تركيب KV", + "KV storage mount path, default: secret": "مسار تركيب تخزين KV، الافتراضي: secret", + "Key": "المفتاح", + "Key Creation": "إنشاء المفتاح", + "Key Directory": "دليل المفاتيح", + "Key Expiration": "انتهاء صلاحية المفتاح", + "Key ID": "معرف المفتاح", + "Key List": "قائمة المفاتيح", + "Key Login": "تسجيل الدخول بالمفتاح", + "Key Name": "اسم المفتاح", + "Key Path Prefix": "بادئة مسار المفتاح", + "Key created successfully": "تم إنشاء المفتاح بنجاح", + "Key deleted successfully": "تم حذف المفتاح بنجاح", + "Key force deleted successfully": "تم الحذف القسري للمفتاح بنجاح", + "Key is already pending deletion": "المفتاح في انتظار الحذف بالفعل", + "Key list refreshed": "تم تحديث قائمة المفاتيح", + "Key services and configuration values reported by the cluster.": "خدمات المفاتيح وقيم الإعداد التي أبلغ عنها المجموعة.", + "Key storage path prefix in KV store": "بادئة مسار تخزين المفتاح في مخزن KV", + "Large File Count Warning": "تحذير من كثرة الملفات الكبيرة", + "Last": "الأخير", + "Last Modified": "آخر تعديل", + "Last Modified Time": "وقت آخر تعديل", + "Last Normal Operation": "آخر عملية عادية", + "Last Scan Activity": "آخر نشاط مسح", + "LastModified": "آخر تعديل", + "Leave empty to use current host as default": "اترك فارغًا لاستخدام المضيف الحالي كافتراضي", + "Legal Hold": "الاحتجاز القانوني", + "License": "الرخصة", + "License Details": "تفاصيل الرخصة", + "License Key": "مفتاح الرخصة", + "License Valid Until": "الرخصة صالحة حتى", + "Licensed Company": "الشركة المرخصة", + "Licensed Users": "المستخدمون المرخصون", + "Lifecycle": "دورة الحياة", + "Lifecycle Management": "إدارة دورة الحياة", + "Light": "فاتح", + "Load Balancing": "موازنة التحميل", + "Loading buckets...": "جارٍ تحميل الحاويات...", + "Loading keys...": "جارٍ تحميل المفاتيح...", + "Local development mode set successfully": "تم تعيين وضع التطوير المحلي بنجاح", + "Login": "تسجيل الدخول", + "Login Failed": "فشل تسجيل الدخول", + "Login Problems?": "مشاكل في تسجيل الدخول؟", + "Login Success": "تم تسجيل الدخول بنجاح", + "Logout": "تسجيل الخروج", + "Logs": "السجلات", + "MNMD Mode": "وضع MNMD", + "MQTT": "MQTT", + "MQTT_BROKER": "وسيط MQTT", + "MQTT_KEEP_ALIVE_INTERVAL": "فترة الإبقاء على الاتصال MQTT", + "MQTT_PASSWORD": "كلمة مرور MQTT", + "MQTT_QOS": "جودة خدمة MQTT", + "MQTT_QUEUE_DIR": "دليل قائمة انتظار MQTT", + "MQTT_QUEUE_LIMIT": "حد قائمة انتظار MQTT", + "MQTT_RECONNECT_INTERVAL": "فترة إعادة الاتصال MQTT", + "MQTT_TOPIC": "موضوع MQTT", + "MQTT_USERNAME": "اسم مستخدم MQTT", + "Main key ID (Transit key name). Use business-related readable ID.": "معرف المفتاح الرئيسي (اسم مفتاح العبور). استخدم معرفًا مقروءًا متعلقًا بالأعمال.", + "Make sure the server address is accessible from your network": "تأكد من أن عنوان الخادم يمكن الوصول إليه من شبكتك", + "Manage how RustFS connects to your external key management service.": "إدارة كيفية اتصال RustFS بخدمة إدارة المفاتيح الخارجية.", + "Master Key": "المفتاح الرئيسي", + "Master Key (CMK)": "المفتاح الرئيسي (CMK)", + "Master Keys (CMK)": "المفاتيح الرئيسية (CMK)", + "Max 50TB": "الحد الأقصى 50TB", + "Member Of": "عضو في", + "Members": "الأعضاء", + "Memory Critical": "ذاكرة حرجة", + "Memory High": "ذاكرة مرتفعة", + "Memory Low": "ذاكرة منخفضة", + "Memory Medium": "ذاكرة متوسطة", + "Memory Usage": "استخدام الذاكرة", + "Memory Warning": "تحذير الذاكرة", + "Metrics": "المقاييس", + "Mode": "الوضع", + "Monday": "الاثنين", + "Monitor overall storage usage and recent scanner activity at a glance.": "مراقبة استخدام التخزين الإجمالي ونشاط الماسح الضوئي الأخير دفعة واحدة.", + "More Configurations": "إعدادات إضافية", + "Multi-Cloud Storage": "تخزين متعدد السحابات", + "Multipart Upload": "تحميل متعدد الأجزاء", + "Name": "الاسم", + "Name Placeholder": "الرجاء إدخال اسم {type}", + "Need help?": "تحتاج مساعدة؟", + "Network": "الشبكة", + "New File": "ملف جديد", + "New Folder": "مجلد جديد", + "New Form": "{type} جديد", + "New Password": "كلمة المرور الجديدة", + "New Secret Key": "المفتاح السري الجديد", + "New Policy": "سياسة جديدة", + "New user has been created": "تم إنشاء مستخدم جديد", + "Next": "التالي", + "Next Page": "الصفحة التالية", + "No": "لا", + "No Access Keys": "لا توجد مفاتيح وصول", + "No Buckets": "لا توجد حاويات", + "No Data": "لا توجد بيانات", + "No Destinations": "لا توجد وجهات", + "No KMS configuration found": "لم يتم العثور على إعداد KMS", + "No KMS keys found": "لم يتم العثور على مفاتيح KMS", + "No License": "لا توجد رخصة", + "No Objects": "لا توجد كائنات", + "Show Deleted Objects": "إظهار الكائنات المحذوفة", + "No Policies": "لا توجد سياسات", + "No Selection": "لا يوجد تحديد", + "No Tasks": "لا توجد مهام", + "No Tiers": "لا توجد طبقات", + "No Versions": "لا توجد إصدارات", + "Delete All Versions": "حذف جميع الإصدارات", + "No bucket selected": "لم يتم تحديد حاوية", + "No buckets found": "لم يتم العثور على حاويات", + "No buckets match your search": "لا توجد حاويات تطابق بحثك", + "No status data available": "لا توجد بيانات حالة متاحة", + "No valid events found after conversion": "لم يتم العثور على أحداث صالحة بعد التحويل", + "Non-current Version": "الإصدار غير الحالي", + "Normal": "عادي", + "Not Configured": "غير مُعَدّ", + "Not configured": "غير مُعَدّ", + "Not specified": "غير محدد", + "Note: AccessKey and SecretKey values are required for each site when adding or editing peer sites": "ملاحظة: قيم AccessKey و SecretKey مطلوبة لكل موقع عند إضافة أو تعديل مواقع النظير", + "Notice": "إشعار", + "Number of retry attempts, default: 3": "عدد محاولات إعادة المحاولة، الافتراضي: 3", + "Object": "الكائن", + "Object Count": "عدد الكائنات", + "Object Detail Description": "وصف تفاصيل الكائن", + "Object Details": "تفاصيل الكائن", + "Object Lock": "قفل الكائن", + "Object Name": "اسم الكائن", + "Object Repair": "إصلاح الكائن", + "Object Sharing": "مشاركة الكائن", + "Object Size": "حجم الكائن", + "Object Tags": "وسوم الكائن", + "Object Type": "نوع الكائن", + "Object Version": "إصدار الكائن", + "Object Versions": "إصدارات الكائن", + "Object lock is not enabled, cannot set retention": "قفل الكائن غير مُفعَّل، لا يمكن تعيين الاحتجاز", + "Objects": "الكائنات", + "Overview": "نظرة عامة", + "Off": "إيقاف", + "Offline": "غير متصل", + "On": "تشغيل", + "On-site Deployment": "النشر في الموقع", + "On-site Technical Service": "الخدمة التقنية في الموقع", + "One-hour Response": "استجابة خلال ساعة", + "Online": "متصل", + "Only ZIP files are supported, and file size should not exceed 10MB": "يتم دعم ملفات ZIP فقط، ويجب ألا يتجاوز حجم الملف 10MB", + "Overwrite Warning": "تحذير الكتابة فوق", + "Page will refresh automatically after saving configuration": "ستتحدث الصفحة تلقائيًا بعد حفظ الإعداد", + "Page {current} of {total}": "الصفحة {current} من {total}", + "Password": "كلمة المرور", + "Pause": "إيقاف مؤقت", + "Paused": "متوقف مؤقتًا", + "Paused (with count)": "متوقف مؤقتًا({count})", + "paused": "متوقف مؤقتًا", + "Pending": "قيد الانتظار({count})", + "Pending Deletion": "في انتظار الحذف", + "Performance": "الأداء", + "Platinum Service": "خدمة بلاتينية", + "Please Enter storage class": "الرجاء إدخال فئة التخزين(مثلاً، STANDARD، IA، GLACIER)", + "Please configure your RustFS server address": "الرجاء إعداد عنوان خادم RustFS الخاص بك", + "Please enter": "الرجاء الإدخال", + "Please enter Access Key": "الرجاء إدخال مفتاح الوصول", + "Please enter STS key": "الرجاء إدخال مفتاح STS", + "Please enter STS session token": "الرجاء إدخال رمز جلسة STS", + "Please enter STS username": "الرجاء إدخال اسم مستخدم STS", + "Please enter Secret Key": "الرجاء إدخال المفتاح السري", + "Please enter Vault server address": "الرجاء إدخال عنوان خادم Vault", + "Please enter Vault token": "الرجاء إدخال رمز Vault", + "Please enter account": "الرجاء إدخال الحساب", + "Please enter both Role ID and Secret ID": "الرجاء إدخال كلا معرف الدور ومعرف السر", + "Please enter bucket": "الرجاء إدخال الحاوية", + "Please enter current password": "الرجاء إدخال كلمة المرور الحالية", + "Please enter default key ID": "الرجاء إدخال معرف المفتاح الافتراضي", + "Please enter endpoint": "الرجاء إدخال نقطة النهاية", + "Please enter key": "الرجاء إدخال المفتاح", + "Please enter key name": "الرجاء إدخال اسم المفتاح", + "Please enter name": "الرجاء إدخال الاسم", + "Please enter new password": "الرجاء إدخال كلمة المرور الجديدة", + "Please enter new password again": "الرجاء إدخال كلمة المرور الجديدة مرة أخرى", + "Please enter password": "الرجاء إدخال كلمة المرور", + "Please enter policy content": "الرجاء إدخال محتوى السياسة", + "Please enter policy name": "الرجاء إدخال اسم السياسة", + "Please enter prefix": "الرجاء إدخال البادئة", + "Please enter region": "الرجاء إدخال المنطقة", + "Please enter rule name": "الرجاء إدخال اسم القاعدة", + "Please enter server address": "الرجاء إدخال عنوان الخادم", + "Please enter server address (e.g., http://localhost:9000)": "الرجاء إدخال عنوان الخادم (مثلاً، http://localhost:9000)", + "Please enter storage class": "الرجاء إدخال فئة التخزين", + "Please enter suffix": "الرجاء إدخال اللاحقة", + "Please enter tag value": "الرجاء إدخال قيمة الوسم", + "Please enter user group name": "الرجاء إدخال اسم مجموعة المستخدمين", + "Please enter username": "الرجاء إدخال اسم المستخدم", + "Please enter valid days": "الرجاء إدخال أيام صالحة", + "Please enter valid health check interval": "الرجاء إدخال فترة فحص صحة صالحة", + "Please fill in at least one configuration item": "الرجاء ملء عنصر إعداد واحد على الأقل", + "Please fill in complete retention information": "الرجاء ملء معلومات الاحتجاز الكاملة", + "Please fill in complete tag information": "الرجاء ملء معلومات الوسم الكاملة", + "Please fill in the correct format": "الرجاء ملء التنسيق الصحيح", + "Please provide credentials": "الرجاء تقديم بيانات الاعتماد", + "Please select KMS key": "الرجاء تحديد مفتاح KMS", + "Please select a KMS key for SSE-KMS encryption": "الرجاء تحديد مفتاح KMS لتشفير SSE-KMS", + "Please select a ZIP file to import": "الرجاء تحديد ملف ZIP للاستيراد", + "Please select at least one event": "الرجاء تحديد حدث واحد على الأقل", + "Please select at least one item": "الرجاء تحديد عنصر واحد على الأقل", + "Please select authentication method": "الرجاء تحديد طريقة المصادقة", + "Please select bucket": "الرجاء تحديد الحاوية", + "Please select encryption type": "الرجاء تحديد نوع التشفير", + "Please select event target type": "الرجاء تحديد نوع هدف الحدث", + "Please select expiration date": "الرجاء تحديد تاريخ انتهاء الصلاحية", + "Please select expiry date": "الرجاء تحديد تاريخ الانتهاء", + "Please select policy": "الرجاء تحديد السياسة", + "Please select resource name": "الرجاء تحديد اسم المورد", + "Please select rule type": "الرجاء تحديد نوع القاعدة", + "Please select storage type": "الرجاء تحديد نوع التخزين", + "Policies": "السياسات", + "Policy": "السياسة", + "Policy Content": "محتوى السياسة", + "Policy Name": "اسم السياسة", + "Policy Original": "السياسة الأصلية", + "Policy format invalid": "تنسيق السياسة غير صالح", + "Prefix": "البادئة", + "Prev": "السابق", + "Preview": "معاينة", + "Preview unavailable": "المعاينة غير متاحة", + "Previous Page": "الصفحة السابقة", + "Priority": "الأولوية", + "Private": "خاص", + "Processing": "معالجة", + "Processing (with count)": "معالجة({count})", + "Prometheus": "Prometheus", + "Public": "عام", + "Public, Private, Custom": "عام، خاص، مخصص", + "Read/Write Performance": "أداء القراءة/الكتابة", + "Reading Folder Files": "قراءة ملفات المجلد", + "Ready to import: {filename}": "جاهز للاستيراد: {filename}", + "Real-time status of cluster servers and backend storage devices.": "الحالة الفورية لخوادم المجموعة وأجهزة التخزين الخلفية.", + "Reduced Redundancy Parity": "تكافؤ التكرار المنخفض", + "Reed-Solomon Matrix": "مصفوفة ريد-سولومون", + "Refresh": "تحديث", + "Region": "المنطقة", + "Reliable distributed file system": "نظام ملفات موزع موثوق", + "Remaining (3TB)": "المتبقي (3TB)", + "Remote Site": "الموقع البعيد", + "Remote Technical Support": "الدعم التقني عن بعد", + "Remote Tiering": "التخزين الطبقي البعيد", + "Remove": "إزالة", + "Remove Encryption": "إزالة التشفير", + "Replicate Delete": "نسخ الحذف", + "Replicate Delete Markers": "نسخ علامات الحذف", + "Replicate Existing Objects": "نسخ الكائنات الموجودة", + "Replication": "النسخ", + "Request timeout in seconds, default: 30": "مهلة الطلب بالثواني، الافتراضي: 30", + "Required: Vault authentication token": "مطلوب: رمز مصادقة Vault", + "Reset": "إعادة تعيين", + "Reset to Default": "إعادة تعيين إلى الافتراضي", + "Reset to default successfully": "تمت إعادة التعيين إلى الافتراضي بنجاح", + "Response Level": "مستوى الاستجابة", + "Resume": "استئناف", + "Retention": "الاحتجاز", + "Retention Mode": "الوضع", + "Retention Period": "فترة الاحتجاز", + "Retention RetainUntilDate": "تاريخ الاحتجاز حتى", + "Retention Save Failed": "فشل حفظ الاحتجاز", + "Retention Unit": "وحدة الاحتجاز", + "Retry Attempts": "محاولات إعادة المحاولة", + "Role ID": "معرف الدور", + "Rows per page": "صفوف لكل صفحة", + "Rule ID": "معرف القاعدة", + "Running": "يعمل", + "Running (Unhealthy)": "يعمل (غير صحي)", + "Running Status": "حالة التشغيل", + "Rust-based": "مبني على Rust", + "RustFS": "RustFS", + "RustFS built-in cold storage": "تخزين بارد مدمج في RustFS", + "RustyVault Encryption": "تشفير RustyVault", + "S3 Compatibility": "توافق S3", + "S3 Compatible": "متوافق مع S3", + "S3 Endpoint": "نقطة نهاية S3", + "S3 Region": "منطقة S3", + "SDK Support": "دعم SDK", + "SNMD Mode": "وضع SNMD", + "SNND Mode": "وضع SNND", + "SSE Settings": "إعدادات SSE", + "STS Key": "مفتاح STS", + "STS Login": "تسجيل الدخول STS", + "STS Session Token": "رمز جلسة STS", + "STS Username": "اسم مستخدم STS", + "Saturday": "السبت", + "Save": "حفظ", + "Save Configuration": "حفظ الإعداد", + "Save Failed": "فشل الحفظ", + "Save failed": "فشل الحفظ", + "Saved": "تم الحفظ", + "Scalability": "قابلية التوسع", + "Search": "بحث", + "Search Access Key": "بحث مفتاح الوصول", + "Search Access User": "بحث مستخدم الوصول", + "Search Account": "بحث الحساب", + "Search Group": "بحث المجموعة", + "Search Policy": "بحث السياسة", + "Search User": "بحث المستخدم", + "Search User Group": "بحث مجموعة المستخدمين", + "Search buckets...": "بحث الحاويات...", + "Secret ID": "معرف السر", + "Secret Key": "المفتاح السري", + "Secret Key *": "المفتاح السري *", + "Secret Key is required": "المفتاح السري مطلوب", + "Secret Key length must be between 8 and 40 characters": "يجب أن يكون طول المفتاح السري بين 8 و 40 حرفًا", + "Secure & Reliable": "آمن وموثوق", + "Secure Transport": "النقل الآمن", + "Select File": "تحديد ملف", + "Select Folder": "تحديد مجلد", + "Select Group": "تحديد مجموعة", + "Select KMS key": "تحديد مفتاح KMS", + "Select encryption algorithm": "تحديد خوارزمية التشفير", + "Select encryption type": "تحديد نوع التشفير", + "Select events": "تحديد الأحداث", + "Select the KMS key to use for encryption": "تحديد مفتاح KMS للاستخدام في التشفير", + "Select user group members": "تحديد أعضاء مجموعة المستخدمين", + "Select user group policies": "تحديد سياسات مجموعة المستخدمين", + "Selected Type": "النوع المحدد", + "Send events via MQTT broker": "إرسال الأحداث عبر وسيط MQTT", + "Server Address": "عنوان الخادم", + "Server Configuration": "إعداد الخادم", + "Server Host": "مضيف الخادم", + "Server Information": "معلومات الخادم", + "Server List": "قائمة الخوادم", + "Server configuration saved successfully": "تم حفظ إعداد الخادم بنجاح", + "Server-Side Encryption (SSE) Configuration": "إعداد التشفير من جانب الخادم (SSE)", + "Servers": "الخوادم", + "Service Email": "البريد الإلكتروني للخدمة", + "Service Hotline": "الخط الساخن للخدمة", + "Service Status": "حالة الخدمة", + "Set Policy": "تعيين السياسة", + "Set Retention": "تعيين الاحتجاز", + "Set Tag": "تعيين الوسم", + "Set Tags": "تعيين الوسوم", + "Set the prefix for the rule": "تعيين البادئة للقاعدة", + "Set the time cycle for the rule": "تعيين دورة الوقت للقاعدة", + "Settings": "الإعدادات", + "Single Machine Multiple Disks": "جهاز واحد متعدد الأقراص", + "Single Object": "كائن واحد", + "Site Name": "اسم الموقع", + "Site Replication": "نسخ الموقع", + "Size": "الحجم", + "Skip": "تخطي", + "Sort by": "ترتيب حسب", + "Standard AWS S3 tier": "طبقة AWS S3 القياسية", + "Standard Storage Parity": "تكافؤ التخزين القياسي", + "Start KMS": "بدء KMS", + "Start Upload": "بدء التحميل", + "Status": "الحالة", + "Status refreshed successfully": "تم تحديث الحالة بنجاح", + "Stop KMS": "إيقاف KMS", + "Storage Class": "فئة التخزين", + "Storage Space": "مساحة التخزين", + "Storage Type": "نوع التخزين", + "Storage Usage Statistics": "إحصاءات استخدام التخزين", + "Submit": "إرسال", + "Subscribe to event notification": "الاشتراك في إشعار الحدث", + "Success Status": "نجاح", + "success": "نجاح", + "Suffix": "اللاحقة", + "Sunday": "الأحد", + "Support Level": "مستوى الدعم", + "Supported": "مدعوم", + "Supported CPU Architecture": "بنية CPU المدعومة", + "Supported OS": "أنظمة التشغيل المدعومة", + "Supports Erasure Coding": "يدعم الترميز بالمسح", + "Supports HTTPS, TLS": "يدعم HTTPS وTLS", + "Supports high concurrency operations": "يدعم عمليات التزامن العالية", + "Supports managing multiple storage disks on a single server to improve storage resource utilization and simplify management and maintenance": "يدعم إدارة أقراص تخزين متعددة على خادم واحد لتحسين استخدام موارد التخزين وتبسيط الإدارة والصيانة", + "Sync": "مزامنة", + "Sync delete to destination bucket.": "مزامنة الحذف إلى حاوية الوجهة.", + "Sync delete markers to destination bucket.": "مزامنة علامات الحذف إلى حاوية الوجهة.", + "Synchronous": "متزامن", + "Tag": "وسم", + "Tag Delete Failed": "فشل حذف الوسم: {error}", + "Tag Key": "مفتاح الوسم", + "Tag Key Placeholder": "مكان مفتاح الوسم", + "Tag Name": "اسم الوسم", + "Tag Update Failed": "فشل تحديث الوسم", + "Tag Update Success": "تم تحديث الوسم بنجاح", + "Tag Value": "قيمة الوسم", + "Tag Value Placeholder": "مكان قيمة الوسم", + "Tags": "الوسوم", + "Target Bucket": "حاوية الهدف", + "Task Completed": "تمت المهمة", + "Task Management": "إدارة المهام", + "Technical Parameters": "المعاملات التقنية", + "Technical Training": "التدريب التقني", + "Temporary URL": "URL مؤقت", + "Temporary URL Expiration": "انتهاء صلاحية URL المؤقت", + "Generate URL": "إنشاء URL", + "URL generated successfully": "تم إنشاء URL بنجاح", + "Failed to generate URL": "فشل إنشاء URL", + "Total Duration": "المدة الإجمالية", + "Minutes": "دقائق", + "Hours": "ساعات", + "Days": "أيام", + "Minutes must be between 0 and 59": "يجب أن تكون الدقائق بين 0 و 59", + "Hours must be between 0 and 23": "يجب أن تكون الساعات بين 0 و 23", + "Hours must be between 0 and 24 when days is 0": "يجب أن تكون الساعات بين 0 و 24 عندما تكون الأيام 0", + "Days must be between 0 and 7": "يجب أن تكون الأيام بين 0 و 7", + "Total duration cannot exceed 7 days": "لا يمكن أن تتجاوز المدة الإجمالية 7 أيام", + "Please enter a valid expiration time": "الرجاء إدخال وقت انتهاء صلاحية صالح", + "The exported file contains sensitive information. Please keep it secure.": "يحتوي الملف المُصدَّر على معلومات حساسة. يرجى الحفاظ عليه بأمان.", + "The two passwords are inconsistent": "كلمتا المرور غير متطابقتين", + "This action cannot be undone and will bypass the normal deletion process.": "لا يمكن التراجع عن هذا الإجراء وسيتجاوز عملية الحذف العادية.", + "This action cannot be undone.": "لا يمكن التراجع عن هذا الإجراء.", + "Thursday": "الخميس", + "Tier": "الطبقة", + "Tier Type": "نوع الطبقة", + "Tiered Storage": "التخزين الطبقي", + "Tiering Transfer": "نقل الطبقات", + "Tiers": "الطبقات", + "Time Cycle": "دورة الوقت", + "Timeout": "انتهاء المهلة", + "Timeout (seconds)": "انتهاء المهلة (ثوان)", + "Token": "الرمز", + "Top-level encryption keys used to encrypt data keys. Managed by KMS and never leave the system.": "مفاتيح التشفير عالية المستوى المستخدمة لتشفير مفاتيح البيانات. تُدار بواسطة KMS ولا تغادر النظام أبدًا.", + "Total": "الإجمالي", + "Total Capacity": "السعة الإجمالية", + "Total Files": "إجمالي الملفات", + "Total Requests": "إجمالي الطلبات", + "Transit Mount": "نقطة تركيب العبور", + "Transit Mount Path": "مسار نقطة تركيب العبور", + "Transit engine mount path, default: transit": "مسار تركيب محرك العبور، الافتراضي: transit", + "Transition": "الانتقال", + "Trigger custom HTTP endpoints": "تشغيل نقاط نهاية HTTP مخصصة", + "Try adjusting your search terms": "حاول تعديل مصطلحات البحث", + "Tuesday": "الثلاثاء", + "Type": "النوع", + "Understanding Key Types": "فهم أنواع المفاتيح", + "Unknown": "غير معروف", + "Unknown Folder": "مجلد غير معروف", + "Unlimited": "غير محدود", + "Update Failed": "فشل التحديث", + "Update Key": "تحديث المفتاح", + "Update License": "تحديث الرخصة", + "Update Success": "تم التحديث بنجاح", + "Update failed": "فشل التحديث", + "Update success": "تم التحديث بنجاح", + "Updated At": "تم التحديث في", + "Updated successfully": "تم التحديث بنجاح", + "Upload": "تحميل", + "Upload File": "تحميل ملف", + "Upload files or create folders to populate this bucket.": "قم بتحميل الملفات أو إنشاء مجلدات لملء هذه الحاوية.", + "Uploading Status": "حالة التحميل", + "Uptime": "وقت التشغيل", + "Usage Report": "تقرير الاستخدام", + "Use AppRole authentication": "استخدام مصادقة AppRole", + "Use Main Account Policy": "استخدام سياسة الحساب الرئيسي", + "Use TLS": "استخدام TLS", + "Use Vault token for authentication": "استخدام رمز Vault للمصادقة", + "Use main account policy": "استخدام سياسة الحساب الرئيسي", + "Used": "مستخدم", + "Used (7TB)": "مستخدم (7TB)", + "Used Capacity": "السعة المستخدمة", + "User Groups": "مجموعات المستخدمين", + "User Name": "اسم المستخدم", + "Users": "المستخدمون", + "Validity": "الصلاحية", + "Vault Server": "خادم Vault", + "Vault Server Address": "عنوان خادم Vault", + "Vault Token": "رمز Vault", + "Version": "الإصدار", + "Version 2.0, January 2004": "الإصدار 2.0، يناير 2004", + "Version Control": "التحكم في الإصدارات", + "VersionId": "معرف الإصدار", + "Versions": "الإصدارات", + "View Documentation": "عرض التوثيق", + "Virtualization Platform Support": "دعم منصة الافتراضية", + "Visit website": "زيارة الموقع", + "WARNING: This will immediately delete the key": "تحذير: سيتم حذف المفتاح فورًا", + "WEBHOOK_AUTH_TOKEN": "رمز مصادقة Webhook", + "WEBHOOK_ENDPOINT": "نقطة نهاية Webhook", + "WEBHOOK_QUEUE_DIR": "دليل قائمة انتظار Webhook", + "WEBHOOK_QUEUE_LIMIT": "حد قائمة انتظار Webhook", + "WORM": "WORM", + "Waiting": "في الانتظار", + "waiting": "في الانتظار", + "Warning": "تحذير", + "Wednesday": "الأربعاء", + "Weekly MB/s Change Trend": "اتجاه تغيير MB/s الأسبوعي", + "YEARS": "سنوات", + "YYYY-MM-DD": "YYYY-MM-DD", + "YYYY-MM-DD HH:mm": "YYYY-MM-DD HH:mm", + "YYYY-MM-DD HH:mm:ss": "YYYY-MM-DD HH:mm:ss", + "YYYY-MM-DDTHH:mm": "YYYY-MM-DDTHH:mm", + "Year": "سنة", + "Yes": "نعم", + "Your browser does not support the audio tag": "متصفحك لا يدعم عنصر الصوت", + "Your browser does not support the video tag": "متصفحك لا يدعم عنصر الفيديو", + "animationComplete": "animationComplete", + "animationStart": "animationStart", + "button": "button", + "change": "change", + "changePoliciesSuccess": "changePoliciesSuccess", + "close": "close", + "content-length": "content-length", + "en-US": "en-US", + "notice": "notice", + "password length cannot be less than 8 characters and greater than 16 characters": "لا يمكن أن يكون طول كلمة المرور أقل من 8 أحرف وأكثر من 16 حرفًا", + "plain": "plain", + "preview": "preview", + "refresh-parent": "refresh-parent", + "rustfs-master": "rustfs-master", + "rustfs/kms/keys": "rustfs/kms/keys", + "saved": "saved", + "search": "search", + "secret": "secret", + "submit": "submit", + "username length cannot be less than 8 characters and greater than 16 characters": "لا يمكن أن يكون طول اسم المستخدم أقل من 8 أحرف وأكثر من 16 حرفًا", + "Validation failed": "فشل التحقق", + "API request failed": "فشل طلب API", + "Operation failed": "فشل العملية", + "Create a user to get started": "أنشئ مستخدمًا للبدء", + "Get Notification Config Failed": "فشل الحصول على إعداد الإشعار", + "empty is indicates permanent validity": "الفارغ يشير إلى الصلاحية الدائمة", + "Create user groups to organize permissions": "أنشئ مجموعات مستخدمين لتنظيم الأذونات", + "Filter From This Page": "تصفية من هذه الصفحة", + "Invalid JSON format": "تنسيق JSON غير صالح", + "JSON content is empty": "محتوى JSON فارغ", + "JSON formatted successfully": "تم تنسيق JSON بنجاح", + "JSON is already formatted": "JSON منسق بالفعل", + "Access Denied": "تم رفض الوصول", + "You do not have permission to access this page. This may be due to insufficient permissions or not being logged in.": "ليس لديك إذن للوصول إلى هذه الصفحة. قد يكون هذا بسبب عدم كفاية الأذونات أو عدم تسجيل الدخول.", + "Back to Home": "العودة إلى الرئيسية", + "Your session has expired. Please log in again.": "انتهت صلاحية جلستك. يرجى تسجيل الدخول مرة أخرى." +} diff --git a/lib/i18n.ts b/lib/i18n.ts index 181e378..683aa29 100644 --- a/lib/i18n.ts +++ b/lib/i18n.ts @@ -7,6 +7,7 @@ import LanguageDetector from "i18next-browser-languagedetector" // Map short locale codes (from Nuxt i18n_redirected) to locale file names const LOCALE_FILE_MAP: Record = { en: "en-US", + ar: "ar-MA", zh: "zh-CN", ja: "ja-JP", ko: "ko-KR", @@ -22,6 +23,7 @@ const LOCALE_FILE_MAP: Record = { export type Locale = keyof typeof LOCALE_FILE_MAP export const LOCALE_CODES: Locale[] = Object.keys(LOCALE_FILE_MAP) as Locale[] +export const RTL_LOCALES = new Set(["ar"]) const loadLocale = async (file: string) => { const mod = await import(`@/i18n/locales/${file}.json`)