diff --git a/lang/ar.json b/lang/ar.json
index 2f91da4c..c02d6ecf 100644
--- a/lang/ar.json
+++ b/lang/ar.json
@@ -12,7 +12,13 @@
"settings": "الإعدادات",
"logout": "تسجيل الخروج",
"users": "المستخدمون",
- "modules": "الوَحَدات"
+ "members": "Members",
+ "modules": "الوَحَدات",
+ "documents": "Documents",
+ "admin": "Administration",
+ "administration": "Administration",
+ "companies": "Companies",
+ "all_users": "Users"
},
"general": {
"add_company": "أضف شركة",
@@ -22,15 +28,16 @@
"save": "حفظ",
"create": "إنشاء",
"cancel": "تراجع",
+ "accept": "Accept",
+ "decline": "Decline",
+ "welcome": "Welcome",
+ "no_company_description": "You are not a member of any company yet. Accept an invitation below or contact your administrator.",
+ "app_version": "Application Version",
+ "database": "Database",
+ "collapse": "Collapse",
"update": "تحديث",
"deselect": "إلغاء الإختيار",
"download": "تحميل",
- "export": "Export",
- "export_csv": "Export CSV",
- "export_one_line_per_invoice": "One line per invoice",
- "export_one_line_per_invoice_item": "One line per invoice item",
- "export_one_line_per_estimate": "One line per estimate",
- "export_one_line_per_estimate_item": "One line per estimate item",
"from_date": "من تاريخ",
"to_date": "إلى تاريخ",
"from": "من",
@@ -97,6 +104,7 @@
"street_2": "الشارع 2",
"action_failed": "فشلت العملية",
"retry": "أعد المحاولة",
+ "unable_to_load_pdf": "Unable to load document preview",
"choose_note": "اختر ملاحظة",
"no_note_found": "لم يتم العثور على الملاحظة",
"insert_note": "أدخل ملاحظة",
@@ -201,7 +209,7 @@
},
"customers": {
"title": "العملاء",
- "prefix": "",
+ "prefix": "Prefix",
"tax_id": "Tax ID",
"add_customer": "إضافة عميل",
"contacts_list": "قائمة العملاء",
@@ -446,6 +454,7 @@
"update_expense": "تحديث المصروفات",
"edit_invoice": "تعديل الفاتورة",
"new_invoice": "فاتورة جديدة",
+ "one_time": "One-time",
"save_invoice": "حفظ الفاتورة",
"update_invoice": "تحديث الفاتورة",
"add_new_tax": "إضافة ضريبة جديدة",
@@ -460,6 +469,8 @@
"cloned_successfully": "تم استنساخ الفاتورة بنجاح",
"clone_invoice": "استنساخ الفاتورة",
"confirm_clone": "سيتم استنساخ هذه الفاتورة في فاتورة جديدة",
+ "convert_to_estimate": "Convert to Estimate",
+ "confirm_convert_to_estimate": "This invoice will be converted into a new Estimate",
"item": {
"title": "اسم الصنف",
"description": "الوصف",
@@ -545,6 +556,7 @@
"update_expense": "Update Expense",
"edit_invoice": "Edit Recurring Invoice",
"new_invoice": "New Recurring Invoice",
+ "recurring": "Recurring",
"send_automatically": "Send Automatically",
"send_automatically_desc": "Enable this, if you would like to send the invoice automatically to the customer when its created.",
"save_invoice": "Save Recurring Invoice",
@@ -589,7 +601,13 @@
"every_hour": "Every Hour",
"every_2_hour": "Every 2 Hour",
"every_day_at_midnight": "Every day at midnight",
+ "every_day": "Every Day",
"every_week": "Every Week",
+ "every_2_weeks": "Every 2 Weeks",
+ "every_month": "Every Month",
+ "every_2_months": "Every 2 Months",
+ "every_quarter": "Every 3 Months (Quarterly)",
+ "every_year": "Every Year",
"every_15_days_at_midnight": "Every 15 days at midnight",
"on_the_first_day_of_every_month_at_midnight": "On the first day of every month at 00:00",
"every_6_month": "Every 6 Month",
@@ -608,7 +626,8 @@
"none": "None",
"date": "Date",
"count": "Count"
- }
+ },
+ "make_recurring": "Make Recurring"
},
"payments": {
"title": "المدفوعات",
@@ -683,10 +702,6 @@
"no_expenses": "لا يوجد نفقات حتى الآن!",
"list_of_expenses": "هذه القائمة ستحتوي النفقات الخاصة بك",
"confirm_delete": "لن تتمكن من استرجاع هذا الإنفاق | لن تتمكن من استرجاع هذه النفقات",
- "duplicate_expense": "Duplicate",
- "duplicate_expense_title": "Duplicate expense",
- "duplicate_expense_modal_hint": "Change the date if you need to. (copy) is added to the note.",
- "duplicated_message": "Expense duplicated successfully",
"created_message": "تم إنشاء النفقات بنجاح",
"updated_message": "تم تحديث النفقات بنجاح",
"deleted_message": "تم حذف النفقات بنجاح",
@@ -760,35 +775,61 @@
"no_modules_installed": "No Modules Installed Yet!",
"disable_warning": "All the settings for this particular will be reverted.",
"what_you_get": "What you get",
- "sign_up_and_get_token": "Sign up & Get Token"
+ "screenshots": "Screenshots",
+ "sign_up_and_get_token": "Sign up & Get Token",
+ "index": {
+ "description": "Modules activated by your administrator on this instance. Each company configures its own settings independently.",
+ "empty_title": "No active modules",
+ "empty_description": "Your administrator hasn't activated any modules on this instance yet. Once they do, modules will appear here with a settings shortcut."
+ },
+ "settings": {
+ "title": "Module Settings",
+ "open": "Settings",
+ "saved": "Module settings saved successfully.",
+ "not_found": "This module has not registered a settings schema.",
+ "none": "No settings"
+ },
+ "sidebar": {
+ "section_title": "Modules"
+ }
},
- "users": {
- "title": "المستخدمون",
- "users_list": "قائمة المستخدمين",
- "name": "اسم",
- "description": "وصف",
- "added_on": "وأضاف في",
- "date_of_creation": "تاريخ الخلق",
- "action": "عمل",
- "add_user": "إضافة مستخدم",
- "save_user": "حفظ المستخدم",
- "update_user": "تحديث المستخدم",
- "user": "تحديث المستخدم",
- "add_new_user": "إضافة مستخدم جديد",
- "new_user": "مستخدم جديد",
- "edit_user": "تحرير العضو",
- "no_users": "لا مستخدمين حتى الآن!",
- "list_of_users": "سيحتوي هذا القسم على قائمة المستخدمين.",
- "email": "البريد الإلكتروني",
- "phone": "هاتف",
- "password": "كلمه السر",
- "user_attached_message": "لا يمكن حذف عنصر قيد الاستخدام بالفعل",
- "confirm_delete": "لن تتمكن من استرداد هذا العنصر | لن تتمكن من استرداد هؤلاء المستخدمين",
- "created_message": "تم إنشاء المستخدم بنجاح",
- "updated_message": "تم تحديث المستخدم بنجاح",
- "deleted_message": "تم حذف المستخدم بنجاح | تم حذف المستخدم بنجاح",
+ "members": {
+ "title": "Members",
+ "members_list": "Members List",
+ "name": "Name",
+ "description": "Description",
+ "added_on": "Added On",
+ "date_of_creation": "Date Of Creation",
+ "action": "Action",
+ "invite_member": "Invite Member",
+ "select_role": "Select Role",
+ "add_member": "Add Member",
+ "save_member": "Save Member",
+ "update_member": "Update Member",
+ "member": "Member | Members",
+ "add_new_member": "Add New Member",
+ "new_member": "New Member",
+ "edit_member": "Edit Member",
+ "no_members": "No members yet!",
+ "list_of_members": "This section will contain the list of company members.",
+ "email": "Email",
+ "phone": "Phone",
+ "password": "Password",
+ "member_attached_message": "Cannot delete an item which is already in use",
+ "confirm_delete": "You will not be able to recover this Member | You will not be able to recover these Members",
+ "created_message": "Member added successfully",
+ "updated_message": "Member updated successfully",
+ "deleted_message": "Member removed successfully | Members removed successfully",
+ "invited_message": "Invitation sent successfully",
+ "invitation_cancelled": "Invitation cancelled",
"select_company_role": "Select Role for {company}",
- "companies": "Companies"
+ "companies": "Companies",
+ "pending_invitations": "Pending Invitations",
+ "no_pending_invitations": "No pending invitations",
+ "cancel_invitation": "Cancel Invitation",
+ "role": "Role",
+ "invited_by": "Invited By",
+ "sent_at": "Sent At"
},
"reports": {
"title": "تقرير",
@@ -867,12 +908,65 @@
"update_app": "تحديث النظام",
"backup": "دعم",
"file_disk": "قرص الملف",
+ "fonts": "Font Packages",
"custom_fields": "الحقول المخصصة",
"payment_modes": "طرق الدفع",
"notes": "ملاحظات",
"exchange_rate": "Exchange Rate",
"address_information": "Address Information",
- "pdf_generation": "PDF Generation"
+ "pdf_generation": "PDF Generation",
+ "appearance": "Appearance",
+ "module_configuration": "Module Configuration",
+ "ai_configuration": "AI Configuration"
+ },
+ "appearance": {
+ "title": "Appearance",
+ "description": "Customize how the application looks and feels.",
+ "sidebar_group_labels": "Show sidebar group labels",
+ "sidebar_group_labels_desc": "Display section headers like Documents, Administration, and Modules in the sidebar navigation."
+ },
+ "ai": {
+ "title": "AI Configuration",
+ "description": "Configure the AI provider used for chat assistance and text generation. AI is opt-in — leave disabled if you don't want these features.",
+ "openrouter": "OpenRouter",
+ "enable": "Enable AI features",
+ "enable_help": "When disabled, the AI chat drawer and WYSIWYG text-generation button are hidden everywhere in the app.",
+ "driver": "AI Provider",
+ "api_key": "API Key",
+ "api_key_help": "Your API key is encrypted before being stored.",
+ "base_url": "Base URL",
+ "base_url_help": "Leave blank to use the provider's default endpoint.",
+ "roles": "AI Roles",
+ "roles_help": "Pick which AI capabilities are available. Each role uses a specific model.",
+ "chat": "Chat Assistant",
+ "chat_help": "Natural-language Q&A over your company's data via tool-calling.",
+ "chat_model": "Chat model",
+ "text_generation": "Text Generation",
+ "text_generation_help": "One-shot text generation for invoice notes and email bodies.",
+ "text_generation_model": "Text generation model",
+ "suggested_models": "Suggested models",
+ "test_connection": "Test Connection",
+ "test_success": "Connection successful.",
+ "test_failed": "Connection test failed: {error}",
+ "saved": "AI configuration saved successfully.",
+ "use_custom_ai_config": "Use custom AI configuration",
+ "use_custom_ai_config_desc": "Enable this to override the global AI configuration for this company.",
+ "using_global_ai_config": "This company is using the global AI configuration. Enable the toggle above to configure a custom provider.",
+ "company_enabled": "AI enabled for this company",
+ "company_enabled_desc": "Turn off to disable all AI features for this company regardless of the global setting.",
+ "installer_title": "AI Assistant",
+ "installer_description": "Optionally enable AI chat and text generation now. You can change this later in Admin → Settings → AI Configuration.",
+ "errors": {
+ "invalid_key": "The API key is invalid.",
+ "rate_limited": "The provider rate limit was hit. Please try again shortly.",
+ "server_error": "The AI provider returned an error. Check your configuration and try again.",
+ "model_not_found": "The requested model is not available on this provider.",
+ "missing_api_key": "An API key is required to test the connection.",
+ "ai_disabled": "AI is not enabled for this company.",
+ "chat_disabled": "The chat assistant is not enabled for this company.",
+ "text_generation_disabled": "Text generation is not enabled for this company.",
+ "missing_model": "No model is configured."
+ }
},
"address_information": {
"section_description": " You can update Your Address information using form below."
@@ -908,19 +1002,48 @@
"port": "منفذ البريد",
"driver": "مشغل البريد",
"secret": "سري",
+ "scheme": "Scheme",
+ "url": "URL",
+ "timeout": "Timeout",
+ "local_domain": "EHLO Domain",
"mailgun_secret": "الرمز السري لـ Mailgun",
"mailgun_domain": "المجال",
"mailgun_endpoint": "النهاية الطرفية لـ Mailgun",
+ "mailgun_scheme": "Mailgun Scheme",
"ses_secret": "SES الرمز السري",
"ses_key": "SES مفتاح",
"ses_region": "AWS Region",
+ "postmark_token": "Postmark Token",
+ "postmark_message_stream_id": "Message Stream ID",
+ "sendmail_path": "Sendmail Path",
"password": "كلمة مرور البريد الالكتروني",
"username": "اسم المستخدم للبريد الإلكتروني",
"mail_config": "إعدادات البريد الالكتروني",
+ "mail_config_updated": "Mail configuration updated successfully",
"from_name": "اسم المرسل",
"from_mail": "عنوان البريد الالكتروني للمرسل",
"encryption": "صيغة ا لتشفير",
- "mail_config_desc": "أدناه هو نموذج لتكوين برنامج تشغيل البريد الإلكتروني لإرسال رسائل البريد الإلكتروني من التطبيق. يمكنك أيضًا تهيئة موفري الجهات الخارجية مثل Sendgrid و SES إلخ."
+ "mail_config_desc": "أدناه هو نموذج لتكوين برنامج تشغيل البريد الإلكتروني لإرسال رسائل البريد الإلكتروني من التطبيق. يمكنك أيضًا تهيئة موفري الجهات الخارجية مثل Sendgrid و SES إلخ.",
+ "company_mail_config": "Mail Configuration",
+ "company_mail_config_desc": "Configure a custom mail driver for this company. When enabled, this overrides the global mail configuration.",
+ "company_mail_config_updated": "Company mail configuration updated successfully",
+ "use_custom_mail_config": "Use Custom Mail Configuration",
+ "use_custom_mail_config_desc": "Enable this to use a company-specific mail configuration instead of the global settings.",
+ "using_global_mail_config": "This company is using the global mail configuration. Enable the toggle above to configure a custom mail driver.",
+ "basic_settings": "Basic Settings",
+ "advanced_settings": "Advanced Settings",
+ "show_advanced_settings": "Show Advanced Settings",
+ "hide_advanced_settings": "Hide Advanced Settings",
+ "native_mail_desc": "Use PHP's native mail transport. Delivery is handled by the server's PHP mail configuration.",
+ "sendmail_desc": "Use the system sendmail binary for delivery. You can override the command path in Advanced Settings.",
+ "drivers": {
+ "smtp": "SMTP",
+ "mail": "PHP Mail",
+ "sendmail": "Sendmail",
+ "ses": "Amazon SES",
+ "mailgun": "Mailgun",
+ "postmark": "Postmark"
+ }
},
"pdf": {
"title": "PDF إعدادات",
@@ -953,6 +1076,7 @@
"updated_message": "تم تحديث معلومات الشركة بنجاح",
"delete_company": "Delete Company",
"delete_company_description": "Once you delete your company, you will lose all the data and files associated with it permanently.",
+ "danger_zone": "Danger Zone",
"are_you_absolutely_sure": "Are you absolutely sure?",
"delete_company_modal_desc": "This action cannot be undone. This will permanently delete {company} and all of its associated data.",
"delete_company_modal_label": "Please type {company} to confirm"
@@ -1141,9 +1265,15 @@
"password": "كلمة المرور",
"confirm_password": "أعد كتابة كلمة المرور",
"account_settings": "إعدادات الجساب",
+ "general": "General",
+ "general_description": "Update your name, email and language preference.",
+ "security": "Security",
+ "security_description": "Change your password.",
+ "profile_picture_description": "Upload or remove your profile photo.",
"save": "حفظ",
"section_description": "يمكنك تحديث اسمك والبريد الإلكتروني وكلمة المرور باستخدام النموذج أدناه.",
- "updated_message": "تم تحديث إعدادات الحساب بنجاح"
+ "updated_message": "تم تحديث إعدادات الحساب بنجاح",
+ "default_language": "Default (Company Language)"
},
"user_profile": {
"name": "الاسم",
@@ -1168,6 +1298,7 @@
"description": "Manage the roles & permissions of this company",
"save": "Save",
"add_new_role": "Add New Role",
+ "system_role": "System Role",
"role_name": "Role Name",
"added_on": "Added on",
"add_role": "Add Role",
@@ -1315,6 +1446,19 @@
"december_november": "December - November"
}
},
+ "fonts": {
+ "title": "Font Packages",
+ "description": "These font packages are used exclusively when generating PDF documents. The bundled Noto Sans covers Latin, Greek and Cyrillic scripts. Install the packages below to render Hebrew, Arabic, Persian, Urdu, Hindi (Devanagari), Thai or East Asian (CJK) characters in your PDFs.",
+ "bundled_info": "Bundled font: Noto Sans (Latin / Greek / Cyrillic). Install additional packages below for Hebrew, Arabic, Persian, Hindi, Thai or CJK support.",
+ "installed": "Installed",
+ "bundled": "Bundled",
+ "install": "Install",
+ "downloading": "Downloading...",
+ "download_started": "Downloading {name}. This may take a moment.",
+ "download_complete": "{name} installed successfully. PDFs will now use this font.",
+ "download_failed": "Failed to download {name}. Please try again.",
+ "no_packages": "No additional font packages available."
+ },
"update_app": {
"title": "تحديث النظام",
"description": "يمكنك تحديث النظام بسهولة عن طريق البحث عن تحديث جديد بالنقر فوق الزر أدناه",
@@ -1333,6 +1477,7 @@
"unzipping_package": "حزمة فك الضغط",
"copying_files": "نسخ الملفات",
"deleting_files": "حذف الملفات الغير مستخدمة",
+ "cleaning_stale_files": "Cleaning stale files",
"running_migrations": "إدارة عمليات الترحيل",
"finishing_update": "تحديث التشطيب",
"update_failed": "فشل التحديث",
@@ -1425,7 +1570,18 @@
"deleted_message": "تم حذف ملف القرص بنجاح",
"disk_variables_save_successfully": "تم تكوين القرص بنجاح",
"disk_variables_save_error": "فشل تكوين القرص.",
- "invalid_disk_credentials": "بيانات اعتماد غير صالحة للقرص المحدد"
+ "invalid_disk_credentials": "بيانات اعتماد غير صالحة للقرص المحدد",
+ "disk_assignments": "Disk Assignments",
+ "disk_assignments_description": "Configure which disk is used for different types of file storage.",
+ "media_storage": "Media Storage",
+ "media_storage_description": "Used for expense receipts, avatars, and company logos.",
+ "pdf_storage": "PDF Storage",
+ "pdf_storage_description": "Used for generated invoice, estimate, and payment PDFs.",
+ "backup_storage": "Backup Storage",
+ "backup_storage_description": "Used for application backups.",
+ "purposes_saved": "Disk assignments saved successfully",
+ "local_root_hint": "Path is relative to storage/app/. For example, entering \"backups\" will store files in storage/app/backups/.",
+ "change_disk_warning": "Changing disk assignments will only affect new uploads. Existing files will remain on their original disk and will continue to be accessible. If you need to move existing files, use the command: php artisan media:secure"
},
"taxations": {
"add_billing_address": "Enter Billing Address",
@@ -1491,6 +1647,7 @@
"db_name": "سم قاعدة البيانات",
"db_path": "مسار قاعدة البيانات",
"overwrite": "Overwrite existing database and proceed",
+ "overwrite_confirm_desc": "This will permanently wipe the selected database before installation continues. Make sure you do not need any existing data.",
"desc": "قم بإنشاء قاعدة بيانات على الخادم الخاص بك وتعيين بيانات الاعتماد باستخدام النموذج أدناه."
},
"permissions": {
@@ -1520,18 +1677,41 @@
"port": "منفذ البريد",
"driver": "مشغل البريد",
"secret": "سري",
+ "scheme": "Scheme",
+ "url": "URL",
+ "timeout": "Timeout",
+ "local_domain": "EHLO Domain",
"mailgun_secret": "الرمز السري لـ Mailgun",
"mailgun_domain": "المجال",
"mailgun_endpoint": "النهاية الطرفية لـ Mailgun",
+ "mailgun_scheme": "Mailgun Scheme",
"ses_secret": "SES الرمز السري",
+ "ses_region": "AWS Region",
"ses_key": "SES مفتاح",
+ "postmark_token": "Postmark Token",
+ "postmark_message_stream_id": "Message Stream ID",
+ "sendmail_path": "Sendmail Path",
"password": "كلمة مرور البريد الالكتروني",
"username": "اسم المستخدم للبريد الإلكتروني",
"mail_config": "إعدادات البريد الالكتروني",
"from_name": "اسم المرسل",
"from_mail": "عنوان البريد الالكتروني للمرسل",
"encryption": "صيغة ا لتشفير",
- "mail_config_desc": "أدناه هو نموذج لتكوين برنامج تشغيل البريد الإلكتروني لإرسال رسائل البريد الإلكتروني من التطبيق. يمكنك أيضًا تهيئة موفري الجهات الخارجية مثل Sendgrid و SES إلخ."
+ "mail_config_desc": "أدناه هو نموذج لتكوين برنامج تشغيل البريد الإلكتروني لإرسال رسائل البريد الإلكتروني من التطبيق. يمكنك أيضًا تهيئة موفري الجهات الخارجية مثل Sendgrid و SES إلخ.",
+ "basic_settings": "Basic Settings",
+ "advanced_settings": "Advanced Settings",
+ "show_advanced_settings": "Show Advanced Settings",
+ "hide_advanced_settings": "Hide Advanced Settings",
+ "native_mail_desc": "Use PHP's native mail transport. Delivery is handled by the server's PHP mail configuration.",
+ "sendmail_desc": "Use the system sendmail binary for delivery. You can override the command path in Advanced Settings.",
+ "drivers": {
+ "smtp": "SMTP",
+ "mail": "PHP Mail",
+ "sendmail": "Sendmail",
+ "ses": "Amazon SES",
+ "mailgun": "Mailgun",
+ "postmark": "Postmark"
+ }
},
"req": {
"system_req": "متطلبات النظام",
@@ -1677,5 +1857,57 @@
"mail_view_payment": "View Payment",
"notification_view_estimate": "[Notification] Estimate viewed",
"notification_view_invoice": "[Notification] Invoice viewed",
- "You have received a new invoice from {COMPANY_NAME}. Please download using the button below:": "You have received a new invoice from {COMPANY_NAME}. Please download using the button below:"
+ "You have received a new invoice from {COMPANY_NAME}. Please download using the button below:": "You have received a new invoice from {COMPANY_NAME}. Please download using the button below:",
+ "administration": {
+ "companies": {
+ "title": "All Companies",
+ "edit_company": "Edit Company",
+ "company_name": "Company Name",
+ "owner": "Owner",
+ "address": "Address",
+ "updated_message": "Company updated successfully",
+ "no_companies": "No companies found",
+ "list_description": "Manage all companies across the system"
+ },
+ "settings": {
+ "title": "Global Settings"
+ },
+ "users": {
+ "title": "All Users",
+ "edit_user": "Edit User",
+ "role": "Role",
+ "no_users": "No users found",
+ "list_description": "View all users across the system",
+ "updated_message": "User updated successfully",
+ "impersonate": "Impersonate",
+ "impersonate_confirm": "You are about to impersonate {name}. You will be logged in as this user with a temporary session that expires in 2 hours. This action is logged.",
+ "impersonating_banner": "You are currently impersonating a user. All actions are logged.",
+ "stop_impersonating": "Stop Impersonating"
+ }
+ },
+ "ai": {
+ "chat": {
+ "title": "AI Assistant",
+ "new_conversation": "New conversation",
+ "no_conversations": "No conversations yet.",
+ "untitled": "Untitled",
+ "empty_state": "Ask me anything about your invoices, customers, payments, or expenses.",
+ "thinking": "Thinking…",
+ "send": "Send",
+ "sending": "Sending…",
+ "input_placeholder": "Ask about your invoices, customers, or payments…"
+ },
+ "generate": {
+ "title": "AI Text Generation",
+ "prompt_label": "What should the AI write?",
+ "prompt_placeholder": "e.g. a polite late-payment reminder for an invoice that's 10 days overdue",
+ "use_current_as_context": "Use current content as context",
+ "use_context_help": "When enabled, the AI will see the editor's current text and can rewrite or extend it.",
+ "preview": "Preview",
+ "generate": "Generate",
+ "regenerate": "Regenerate",
+ "insert": "Insert",
+ "replace": "Replace"
+ }
+ }
}