From 05c54fb2d7bfde4b4b1de5deb6e7560f6f062246 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 6 May 2026 08:49:57 +0330 Subject: [PATCH] add languages files --- backend/.env.example | 12 ++ backend/app/Facades/File/File.php | 113 +++++++++++ backend/app/Facades/File/FileFacade.php | 13 ++ backend/app/Providers/FileServiceProvider.php | 27 +++ .../Services/FIB/AuthorizationService.php | 6 +- backend/bootstrap/providers.php | 1 + backend/resources/lang/ar/notifications.php | 45 ++++ backend/resources/lang/en/auth.php | 20 ++ backend/resources/lang/en/messages.php | 11 + backend/resources/lang/en/pagination.php | 19 ++ backend/resources/lang/en/passwords.php | 22 ++ backend/resources/lang/en/validation.php | 186 +++++++++++++++++ backend/resources/lang/fa/auth.php | 20 ++ backend/resources/lang/fa/messages.php | 11 + backend/resources/lang/fa/pagination.php | 19 ++ backend/resources/lang/fa/passwords.php | 22 ++ backend/resources/lang/fa/validation.php | 192 ++++++++++++++++++ 17 files changed, 734 insertions(+), 5 deletions(-) create mode 100644 backend/app/Facades/File/File.php create mode 100644 backend/app/Facades/File/FileFacade.php create mode 100644 backend/app/Providers/FileServiceProvider.php create mode 100644 backend/resources/lang/ar/notifications.php create mode 100644 backend/resources/lang/en/auth.php create mode 100644 backend/resources/lang/en/messages.php create mode 100644 backend/resources/lang/en/pagination.php create mode 100644 backend/resources/lang/en/passwords.php create mode 100644 backend/resources/lang/en/validation.php create mode 100644 backend/resources/lang/fa/auth.php create mode 100644 backend/resources/lang/fa/messages.php create mode 100644 backend/resources/lang/fa/pagination.php create mode 100644 backend/resources/lang/fa/passwords.php create mode 100644 backend/resources/lang/fa/validation.php diff --git a/backend/.env.example b/backend/.env.example index 409384df..cff0c7b8 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -63,3 +63,15 @@ AWS_BUCKET= AWS_USE_PATH_STYLE_ENDPOINT=false VITE_APP_NAME="${APP_NAME}" + +FIB_AUTHORIZATION_URL= +FIB_CLIENT_ID= +FIB_CLIENT_SECRET= + +FIB_CREATE_PAYMENT_URL + +FIB_CHECK_PAYMENT_STATUS_URL + +FIB_CANCEL_PAYMENT_URL + +FIB_REFUND_URL diff --git a/backend/app/Facades/File/File.php b/backend/app/Facades/File/File.php new file mode 100644 index 00000000..5cc59955 --- /dev/null +++ b/backend/app/Facades/File/File.php @@ -0,0 +1,113 @@ +putFileAs( + $path, + $file, + $name ?? Str::uuid() . '.' . $file->extension() + ); + } + + /** + * @param string $filePath + * @param bool $url_is_absolute + * @param string $disk + * @return void + * @throws InvalidArgumentException when filePath is empty. + */ + public function delete(string $filePath, bool $url_is_absolute = false, string $disk = 'public'): void + { + if (!$filePath){ + throw new InvalidArgumentException('File path is invalid.'); + } + + if ($url_is_absolute) { + $needle = 'storage/'; + $pos = strpos($filePath, $needle); + $filePath = substr($filePath, $pos + strlen($needle)); + } + + if (Storage::disk($disk)->exists($filePath)) { + Storage::disk($disk)->delete($filePath); + } + } + + public function deleteContent($file_path): bool + { + if (file_exists($file_path)) { + file_put_contents($file_path, ''); + + return true; + } + return false; + } + + public function tail($file_path, $lines = 100, $buffer = 2048): bool|string + { + // Open file + $file = @fopen($file_path, "rb"); + if ($file === false) { + return false; + } + + // Jump to last character + fseek($file, -1, SEEK_END); + + // Read it and adjust line number if necessary + // (Otherwise the result would be wrong if file doesn't end with a blank line) + if (fread($file, 1) != "\n") { + $lines -= 1; + } + + // Start reading + $output = ''; + $chunk = ''; + + // While we would like more + while (ftell($file) > 0 && $lines >= 0) { + + // Figure out how far back we should jump + $seek = min(ftell($file), $buffer); + + // Do the jump (backwards, relative to where we are) + fseek($file, -$seek, SEEK_CUR); + + // Read a chunk and prepend it to our output + $output = ($chunk = fread($file, $seek)) . $output; + + // Jump back to where we started reading + fseek($file, -mb_strlen($chunk, '8bit'), SEEK_CUR); + + // Decrease our line counter + $lines -= substr_count($chunk, "\n"); + } + + // While we have too many lines + // (Because of buffer size we might have read too many) + while ($lines++ < 0) { + + // Find first newline and remove all text before that + $output = substr($output, strpos($output, "\n") + 1); + } + + // Close file and return + fclose($file); + return trim($output); + } + + public function deleteDirectory(string $path, string $disk = 'public'): void + { + Storage::disk($disk)->deleteDirectory($path); + } +} diff --git a/backend/app/Facades/File/FileFacade.php b/backend/app/Facades/File/FileFacade.php new file mode 100644 index 00000000..daa9cd9f --- /dev/null +++ b/backend/app/Facades/File/FileFacade.php @@ -0,0 +1,13 @@ +app->bind('file', function () { + return new File(); + }); + } + + /** + * Bootstrap services. + */ + public function boot(): void + { + // + } +} diff --git a/backend/app/User/Services/FIB/AuthorizationService.php b/backend/app/User/Services/FIB/AuthorizationService.php index 6f6a9422..9e67d55d 100644 --- a/backend/app/User/Services/FIB/AuthorizationService.php +++ b/backend/app/User/Services/FIB/AuthorizationService.php @@ -17,10 +17,6 @@ class AuthorizationService { $this->url = config('fib.authorization.url'); $this->channelName = ''; - } - - public function setInputParameters(): void - { $this->inputParameters = [ 'client_id' => config('fib.authorization.client_id'), 'client_secret' => config('fib.authorization.client_secret'), @@ -53,7 +49,7 @@ class AuthorizationService */ public function sendRequest(): array { - return Http::withHeaders(['Content-Type' => 'application/json']) + return Http::asForm() ->throw() ->withoutVerifying() ->post($this->url, $this->inputParameters) diff --git a/backend/bootstrap/providers.php b/backend/bootstrap/providers.php index 069e33bc..9a7a919f 100644 --- a/backend/bootstrap/providers.php +++ b/backend/bootstrap/providers.php @@ -3,4 +3,5 @@ return [ App\Providers\AppServiceProvider::class, App\Providers\DataTableServiceProvider::class, + App\Providers\FileServiceProvider::class, ]; diff --git a/backend/resources/lang/ar/notifications.php b/backend/resources/lang/ar/notifications.php new file mode 100644 index 00000000..48bc7098 --- /dev/null +++ b/backend/resources/lang/ar/notifications.php @@ -0,0 +1,45 @@ + 'رسالة استثناء: :message', + 'exception_trace' => 'تتبع الإستثناء: :trace', + 'exception_message_title' => 'رسالة استثناء', + 'exception_trace_title' => 'تتبع الإستثناء', + + 'backup_failed_subject' => 'أخفق النسخ الاحتياطي لل :application_name', + 'backup_failed_body' => 'مهم: حدث خطأ أثناء النسخ الاحتياطي :application_name', + + 'backup_successful_subject' => 'نسخ احتياطي جديد ناجح ل :application_name', + 'backup_successful_subject_title' => 'نجاح النسخ الاحتياطي الجديد!', + 'backup_successful_body' => 'أخبار عظيمة، نسخة احتياطية جديدة ل :application_name تم إنشاؤها بنجاح على القرص المسمى :disk_name.', + + 'cleanup_failed_subject' => 'فشل تنظيف النسخ الاحتياطي للتطبيق :application_name .', + 'cleanup_failed_body' => 'حدث خطأ أثناء تنظيف النسخ الاحتياطية ل :application_name', + + 'cleanup_successful_subject' => 'تنظيف النسخ الاحتياطية ل :application_name تمت بنجاح', + 'cleanup_successful_subject_title' => 'تنظيف النسخ الاحتياطية تم بنجاح!', + 'cleanup_successful_body' => 'تنظيف النسخ الاحتياطية ل :application_name على القرص المسمى :disk_name تم بنجاح.', + + 'healthy_backup_found_subject' => 'النسخ الاحتياطية ل :application_name على القرص :disk_name صحية', + 'healthy_backup_found_subject_title' => 'النسخ الاحتياطية ل :application_name صحية', + 'healthy_backup_found_body' => 'تعتبر النسخ الاحتياطية ل :application_name صحية. عمل جيد!', + + 'unhealthy_backup_found_subject' => 'مهم: النسخ الاحتياطية ل :application_name غير صحية', + 'unhealthy_backup_found_subject_title' => 'مهم: النسخ الاحتياطية ل :application_name غير صحية. :problem', + 'unhealthy_backup_found_body' => 'النسخ الاحتياطية ل :application_name على القرص :disk_name غير صحية.', + 'unhealthy_backup_found_not_reachable' => 'لا يمكن الوصول إلى وجهة النسخ الاحتياطي. :error', + 'unhealthy_backup_found_empty' => 'لا توجد نسخ احتياطية لهذا التطبيق على الإطلاق.', + 'unhealthy_backup_found_old' => 'تم إنشاء أحدث النسخ الاحتياطية في :date وتعتبر قديمة جدا.', + 'unhealthy_backup_found_unknown' => 'عذرا، لا يمكن تحديد سبب دقيق.', + 'unhealthy_backup_found_full' => 'النسخ الاحتياطية تستخدم الكثير من التخزين. الاستخدام الحالي هو :disk_usage وهو أعلى من الحد المسموح به من :disk_limit.', + + 'no_backups_info' => 'لم يتم عمل نسخ احتياطية حتى الآن', + 'application_name' => 'اسم التطبيق', + 'backup_name' => 'اسم النسخ الاحتياطي', + 'disk' => 'القرص', + 'newest_backup_size' => 'أحدث حجم للنسخ الاحتياطي', + 'number_of_backups' => 'عدد النسخ الاحتياطية', + 'total_storage_used' => 'إجمالي مساحة التخزين المستخدمة', + 'newest_backup_date' => 'أحدث تاريخ النسخ الاحتياطي', + 'oldest_backup_date' => 'أقدم تاريخ نسخ احتياطي', +]; diff --git a/backend/resources/lang/en/auth.php b/backend/resources/lang/en/auth.php new file mode 100644 index 00000000..6598e2c0 --- /dev/null +++ b/backend/resources/lang/en/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/backend/resources/lang/en/messages.php b/backend/resources/lang/en/messages.php new file mode 100644 index 00000000..b0f55d0f --- /dev/null +++ b/backend/resources/lang/en/messages.php @@ -0,0 +1,11 @@ + 'The operation was successful.', + 'invalid_credential' => 'Provided credential is invalid.', + 'incorrect_current_password' => 'Current password is incorrect.', + 'new_password_email_sent' => 'Your new password sent to your email', + 'file_upload_failed' => 'The file can not be uploaded.', + 'otp' => 'your otp token is : ', + 'incorrect_otp' => 'Incorrect OTP code.', +]; diff --git a/backend/resources/lang/en/pagination.php b/backend/resources/lang/en/pagination.php new file mode 100644 index 00000000..d4814118 --- /dev/null +++ b/backend/resources/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/backend/resources/lang/en/passwords.php b/backend/resources/lang/en/passwords.php new file mode 100644 index 00000000..f1223bd7 --- /dev/null +++ b/backend/resources/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset.', + 'sent' => 'We have emailed your password reset link.', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/backend/resources/lang/en/validation.php b/backend/resources/lang/en/validation.php new file mode 100644 index 00000000..f7bd0407 --- /dev/null +++ b/backend/resources/lang/en/validation.php @@ -0,0 +1,186 @@ + 'The :attribute field must be accepted.', + 'accepted_if' => 'The :attribute field must be accepted when :other is :value.', + 'active_url' => 'The :attribute field must be a valid URL.', + 'after' => 'The :attribute field must be a date after :date.', + 'after_or_equal' => 'The :attribute field must be a date after or equal to :date.', + 'alpha' => 'The :attribute field must only contain letters.', + 'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.', + 'alpha_num' => 'The :attribute field must only contain letters and numbers.', + 'array' => 'The :attribute field must be an array.', + 'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.', + 'before' => 'The :attribute field must be a date before :date.', + 'before_or_equal' => 'The :attribute field must be a date before or equal to :date.', + 'between' => [ + 'array' => 'The :attribute field must have between :min and :max items.', + 'file' => 'The :attribute field must be between :min and :max kilobytes.', + 'numeric' => 'The :attribute field must be between :min and :max.', + 'string' => 'The :attribute field must be between :min and :max characters.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute field confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute field must be a valid date.', + 'date_equals' => 'The :attribute field must be a date equal to :date.', + 'date_format' => 'The :attribute field must match the format :format.', + 'decimal' => 'The :attribute field must have :decimal decimal places.', + 'declined' => 'The :attribute field must be declined.', + 'declined_if' => 'The :attribute field must be declined when :other is :value.', + 'different' => 'The :attribute field and :other must be different.', + 'digits' => 'The :attribute field must be :digits digits.', + 'digits_between' => 'The :attribute field must be between :min and :max digits.', + 'dimensions' => 'The :attribute field has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.', + 'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.', + 'email' => 'The :attribute field must be a valid email address.', + 'ends_with' => 'The :attribute field must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute field must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'array' => 'The :attribute field must have more than :value items.', + 'file' => 'The :attribute field must be greater than :value kilobytes.', + 'numeric' => 'The :attribute field must be greater than :value.', + 'string' => 'The :attribute field must be greater than :value characters.', + ], + 'gte' => [ + 'array' => 'The :attribute field must have :value items or more.', + 'file' => 'The :attribute field must be greater than or equal to :value kilobytes.', + 'numeric' => 'The :attribute field must be greater than or equal to :value.', + 'string' => 'The :attribute field must be greater than or equal to :value characters.', + ], + 'image' => 'The :attribute field must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field must exist in :other.', + 'integer' => 'The :attribute field must be an integer.', + 'ip' => 'The :attribute field must be a valid IP address.', + 'ipv4' => 'The :attribute field must be a valid IPv4 address.', + 'ipv6' => 'The :attribute field must be a valid IPv6 address.', + 'json' => 'The :attribute field must be a valid JSON string.', + 'lowercase' => 'The :attribute field must be lowercase.', + 'lt' => [ + 'array' => 'The :attribute field must have less than :value items.', + 'file' => 'The :attribute field must be less than :value kilobytes.', + 'numeric' => 'The :attribute field must be less than :value.', + 'string' => 'The :attribute field must be less than :value characters.', + ], + 'lte' => [ + 'array' => 'The :attribute field must not have more than :value items.', + 'file' => 'The :attribute field must be less than or equal to :value kilobytes.', + 'numeric' => 'The :attribute field must be less than or equal to :value.', + 'string' => 'The :attribute field must be less than or equal to :value characters.', + ], + 'mac_address' => 'The :attribute field must be a valid MAC address.', + 'max' => [ + 'array' => 'The :attribute field must not have more than :max items.', + 'file' => 'The :attribute field must not be greater than :max kilobytes.', + 'numeric' => 'The :attribute field must not be greater than :max.', + 'string' => 'The :attribute field must not be greater than :max characters.', + ], + 'max_digits' => 'The :attribute field must not have more than :max digits.', + 'mimes' => 'The :attribute field must be a file of type: :values.', + 'mimetypes' => 'The :attribute field must be a file of type: :values.', + 'min' => [ + 'array' => 'The :attribute field must have at least :min items.', + 'file' => 'The :attribute field must be at least :min kilobytes.', + 'numeric' => 'The :attribute field must be at least :min.', + 'string' => 'The :attribute field must be at least :min characters.', + ], + 'min_digits' => 'The :attribute field must have at least :min digits.', + 'missing' => 'The :attribute field must be missing.', + 'missing_if' => 'The :attribute field must be missing when :other is :value.', + 'missing_unless' => 'The :attribute field must be missing unless :other is :value.', + 'missing_with' => 'The :attribute field must be missing when :values is present.', + 'missing_with_all' => 'The :attribute field must be missing when :values are present.', + 'multiple_of' => 'The :attribute field must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute field format is invalid.', + 'numeric' => 'The :attribute field must be a number.', + 'password' => [ + 'letters' => 'The :attribute field must contain at least one letter.', + 'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.', + 'numbers' => 'The :attribute field must contain at least one number.', + 'symbols' => 'The :attribute field must contain at least one symbol.', + 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.', + ], + 'present' => 'The :attribute field must be present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute field format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_if_accepted' => 'The :attribute field is required when :other is accepted.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute field must match :other.', + 'size' => [ + 'array' => 'The :attribute field must contain :size items.', + 'file' => 'The :attribute field must be :size kilobytes.', + 'numeric' => 'The :attribute field must be :size.', + 'string' => 'The :attribute field must be :size characters.', + ], + 'starts_with' => 'The :attribute field must start with one of the following: :values.', + 'string' => 'The :attribute field must be a string.', + 'timezone' => 'The :attribute field must be a valid timezone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'uppercase' => 'The :attribute field must be uppercase.', + 'url' => 'The :attribute field must be a valid URL.', + 'ulid' => 'The :attribute field must be a valid ULID.', + 'uuid' => 'The :attribute field must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [ + 'phone_number' => 'phone number', + ], + +]; diff --git a/backend/resources/lang/fa/auth.php b/backend/resources/lang/fa/auth.php new file mode 100644 index 00000000..88976891 --- /dev/null +++ b/backend/resources/lang/fa/auth.php @@ -0,0 +1,20 @@ + 'اطلاعات وارد شده صحیح نمی باشد', + 'password' => 'رمزعبور صحیح نیست', + 'throttle' => 'درخواست بیش از حد مجاز! لطفا بعد از :seconds ثانیه دوباره امتحان کنید', + +]; diff --git a/backend/resources/lang/fa/messages.php b/backend/resources/lang/fa/messages.php new file mode 100644 index 00000000..ec215a9a --- /dev/null +++ b/backend/resources/lang/fa/messages.php @@ -0,0 +1,11 @@ + 'عملیات با موفقیت انجام شد.', + 'invalid_credential' => 'نام کاربری یا رمز عبور اشتباه است', + 'incorrect_current_password' => 'رمز عبور فعلی اشتباه است', + 'new_password_email_sent' => 'رمز عبور جدید به ایمیل شما ارسال شد.', + 'file_upload_failed' => 'بارگذاری فایل با خطا مواجه شد.', + 'otp' => 'کد ورود شما : ', + 'incorrect_otp' => 'کد تایید اشتباه است .', +]; diff --git a/backend/resources/lang/fa/pagination.php b/backend/resources/lang/fa/pagination.php new file mode 100644 index 00000000..e00adbf9 --- /dev/null +++ b/backend/resources/lang/fa/pagination.php @@ -0,0 +1,19 @@ + '« قبلی', + 'next' => 'بعدی »', + +]; diff --git a/backend/resources/lang/fa/passwords.php b/backend/resources/lang/fa/passwords.php new file mode 100644 index 00000000..c8081d97 --- /dev/null +++ b/backend/resources/lang/fa/passwords.php @@ -0,0 +1,22 @@ + 'رمز عبور شما با موفقیت بازیابی شد', + 'sent' => 'ایمیلی جهت بازیابی رمزعبور برای شما ارسال شد', + 'throttled' => 'لطفا اندکی صبر کنید و دوباره امتحان کنید', + 'token' => 'مشخصه بازیابی رمزعبور شما صحیح نمی باشد', + 'user' => "کاربری با این اطلاعات وجود ندارد", + +]; diff --git a/backend/resources/lang/fa/validation.php b/backend/resources/lang/fa/validation.php new file mode 100644 index 00000000..53fd3e1b --- /dev/null +++ b/backend/resources/lang/fa/validation.php @@ -0,0 +1,192 @@ + 'گزینه :attribute باید تایید شود', + 'accepted_if' => 'زمانی که گزینه :other برابر :value است :attribute باید تایید شود', + 'active_url' => 'گزینه :attribute یک آدرس سایت معتبر نیست', + 'after' => 'گزینه :attribute باید تاریخی بعد از :date باشد', + 'after_or_equal' => 'گزینه :attribute باید تاریخی مساوی یا بعد از :date باشد', + 'alpha' => 'گزینه :attribute باید تنها شامل حروف باشد', + 'alpha_dash' => 'گزینه :attribute باید تنها شامل حروف، اعداد، خط تیره و زیر خط باشد', + 'alpha_num' => 'گزینه :attribute باید تنها شامل حروف و اعداد باشد', + 'array' => 'گزینه :attribute باید آرایه باشد', + 'ascii' => 'گزینه :attribute تنها میتواند شامل تک حرف، عدد یا نماد ها باشد. .', + 'before' => 'گزینه :attribute باید تاریخی قبل از :date باشد', + 'before_or_equal' => 'گزینه :attribute باید تاریخی مساوی یا قبل از :date باشد', + 'between' => [ + 'array' => 'گزینه :attribute باید بین :min و :max آیتم باشد', + 'file' => 'گزینه :attribute باید بین :min و :max کیلوبایت باشد', + 'numeric' => 'گزینه :attribute باید بین :min و :max باشد', + 'string' => 'گزینه :attribute باید بین :min و :max کاراکتر باشد', + ], + 'boolean' => 'گزینه :attribute تنها می تواند صحیح یا غلط باشد', + 'confirmed' => 'تایید مجدد گزینه :attribute صحیح نمی باشد', + 'current_password' => 'رمزعبور صحیح نمی باشد', + 'date' => 'گزینه :attribute یک تاریخ صحیح نمی باشد', + 'date_equals' => 'گزینه :attribute باید تاریخی مساوی با :date باشد', + 'date_format' => 'گزینه :attribute با فرمت :format همخوانی ندارد', + 'decimal' => 'گزینه :attribute باید :decimal رقم اعشار داشته باشد.', + 'declined' => 'گزینه :attribute باید رد شود', + 'declined_if' => 'گزینه :attribute زمانی که :other برابر :value است باید رد شود', + 'different' => 'گزینه :attribute و :other باید متفاوت باشند', + 'digits' => 'گزینه :attribute باید :digits عدد باشد', + 'digits_between' => 'گزینه :attribute باید بین :min و :max عدد باشد', + 'dimensions' => 'ابعاد تصویر گزینه :attribute مجاز نمی باشد', + 'distinct' => 'گزینه :attribute دارای افزونگی داده می باشد', + 'doesnt_end_with' => 'گزینه :attribute نباید با این مقادیر به پایان برسد: :values.', + 'doesnt_start_with' => 'گزینه :attribute نباید با این مقادیر شروع شود: :values.', + 'email' => 'گزینه :attribute باید یک آدرس ایمیل صحیح باشد', + 'ends_with' => 'گزینه :attribute باید با یکی از این مقادیر پایان یابد، :values', + 'enum' => 'گزینه :attribute صحیح نمی باشد', + 'exists' => 'گزینه انتخاب شده :attribute صحیح نمی باشد', + 'file' => 'گزینه :attribute باید یک فایل باشد', + 'filled' => 'گزینه :attribute نمی تواند خالی باشد', + 'gt' => [ + 'array' => 'گزینه :attribute باید بیشتر از :value آیتم باشد', + 'file' => 'گزینه :attribute باید بزرگتر از :value کیلوبایت باشد', + 'numeric' => 'گزینه :attribute باید بزرگتر از :value باشد', + 'string' => 'گزینه :attribute باید بزرگتر از :value کاراکتر باشد', + ], + 'gte' => [ + 'array' => 'گزینه :attribute باید :value آیتم یا بیشتر داشته باشد', + 'file' => 'گزینه :attribute باید بزرگتر یا مساوی :value کیلوبایت باشد', + 'numeric' => 'گزینه :attribute باید بزرگتر یا مساوی :value باشد', + 'string' => 'گزینه :attribute باید بزرگتر یا مساوی :value کاراکتر باشد', + ], + 'image' => 'گزینه :attribute باید از نوع تصویر باشد', + 'in' => 'گزینه انتخابی :attribute صحیح نمی باشد', + 'in_array' => 'گزینه :attribute در :other وجود ندارد', + 'integer' => 'گزینه :attribute باید از نوع عددی باشد', + 'ip' => 'گزینه :attribute باید آی پی آدرس باشد', + 'ipv4' => 'گزینه :attribute باید آی پی آدرس ورژن 4 باشد', + 'ipv6' => 'گزینه :attribute باید آی پی آدرس ورژن 6 باشد', + 'json' => 'گزینه :attribute باید از نوع رشته جیسون باشد', + 'lowercase' => 'گزینه :attribute باید با حروف کوچک باشد.', + 'lt' => [ + 'array' => 'گزینه :attribute باید کمتر از :value آیتم داشته باشد', + 'file' => 'گزینه :attribute باید کمتر از :value کیلوبایت باشد', + 'numeric' => 'گزینه :attribute باید کمتر از :value باشد', + 'string' => 'گزینه :attribute باید کمتر از :value کاراکتر باشد', + ], + 'lte' => [ + 'array' => 'گزینه :attribute نباید کمتر از :value آیتم داشته باشد', + 'file' => 'گزینه :attribute باید مساوی یا کمتر از :value کیلوبایت باشد', + 'numeric' => 'گزینه :attribute باید مساوی یا کمتر از :value باشد', + 'string' => 'گزینه :attribute باید مساوی یا کمتر از :value کاراکتر باشد', + ], + 'mac_address' => 'گزینه :attribute باید یک مک آدرس معتبر باشد', + 'max' => [ + 'array' => 'گزینه :attribute نباید بیشتر از :max آیتم داشته باشد', + 'file' => 'گزینه :attribute نباید بزرگتر از :max کیلوبایت باشد', + 'numeric' => 'گزینه :attribute نباید بزرگتر از :max باشد', + 'string' => 'گزینه :attribute نباید بزرگتر از :max کاراکتر باشد', + ], + 'max_digits' => 'گزینه :attribute نباید بیشتر از :max رقم باشد', + 'mimes' => 'گزینه :attribute باید دارای یکی از این فرمت ها باشد: :values', + 'mimetypes' => 'گزینه :attribute باید دارای یکی از این فرمت ها باشد: :values', + 'min' => [ + 'array' => 'گزینه :attribute باید حداقل :min آیتم داشته باشد', + 'file' => 'گزینه :attribute باید حداقل :min کیلوبایت باشد', + 'numeric' => 'گزینه :attribute باید حداقل :min باشد', + 'string' => 'گزینه :attribute باید حداقل :min کاراکتر باشد', + ], + 'min_digits' => 'گزینه :attribute باید حداقل :min رقم باشد', + 'missing' => 'گزینه :attribute نباید تعریف شود.', + 'missing_if' => 'گزینه :attribute زمانی که مقدار :other برابر :value می باشد، نباید تعریف شود', + 'missing_unless' => 'گزینه :attribute نباید تعریف شود مگر اینکه گزینه :other برابر :value باشد', + 'missing_with' => 'گزینه :attribute زمانی که مقدار :values تعریف شده است دیگر نباید تعریف شود.', + 'missing_with_all' => 'گزینه :attribute زمانی که :values مقدار دارد دیگر نباید تعریف شود.', + 'multiple_of' => 'گزینه :attribute باید حاصل ضرب :value باشد', + 'not_in' => 'گزینه انتخابی :attribute صحیح نمی باشد', + 'not_regex' => 'فرمت گزینه :attribute صحیح نمی باشد', + 'numeric' => 'گزینه :attribute باید از نوع عددی باشد', + 'password' => [ + 'letters' => 'گزینه :attribute باید حداقل شامل یک حرف باشد', + 'mixed' => 'گزینه :attribute باید شامل حداقل یک حرف بزرگ و یک حرف کوچک باشد', + 'numbers' => 'گزینه :attribute باید شامل حداقل یک عدد باشد', + 'symbols' => 'گزینه :attribute باید شامل حداقل یک کارکتر خاص باشد', + 'uncompromised' => 'محتوای وارده شده در :attribute ایمن نمی باشد. لطفا گزینه :attribute را اصلاح فرمایید', + ], + 'present' => 'گزینه :attribute باید از نوع درصد باشد', + 'prohibited' => 'گزینه :attribute مجاز نمی باشد', + 'prohibited_if' => 'گزینه :attribute زمانی که :other برابر :value باشد مجاز نمی باشد', + 'prohibited_unless' => 'گزینه :attribute مجاز نیست مگر :other برابر :values باشد', + 'prohibits' => 'گزینه :attribute باعث ممنوعیت :other می باشد', + 'regex' => 'فرمت گزینه :attribute صحیح نمی باشد', + 'required' => 'تکمیل گزینه :attribute الزامی است', + 'required_array_keys' => 'گزینه :attribute باید شامل مقادیر: :values باشد', + 'required_if' => 'تکمیل گزینه :attribute زمانی که :other دارای مقدار :value است الزامی می باشد', + 'required_if_accepted' => 'تکمیل گزینه :attribute زمانی که :other انتخاب شده الزامی است', + 'required_unless' => 'تکمیل گزینه :attribute الزامی می باشد مگر :other دارای مقدار :values باشد', + 'required_with' => 'تکمیل گزینه :attribute زمانی که مقدار :values درصد است الزامی است', + 'required_with_all' => 'تکمیل گزینه :attribute زمانی که مقادیر :values درصد است الزامی می باشد', + 'required_without' => 'تکمیل گزینه :attribute زمانی که مقدار :values درصد نیست الزامی است', + 'required_without_all' => 'تکمیل گزینه :attribute زمانی که هیچ کدام از مقادیر :values درصد نیست الزامی است', + 'same' => 'گزینه های :attribute و :other باید یکی باشند', + 'size' => [ + 'array' => 'گزینه :attribute باید شامل :size آیتم باشد', + 'file' => 'گزینه :attribute باید :size کیلوبایت باشد', + 'numeric' => 'گزینه :attribute باید :size باشد', + 'string' => 'گزینه :attribute باید :size کاراکتر باشد', + ], + 'starts_with' => 'گزینه :attribute باید با یکی از این مقادیر شروع شود، :values', + 'string' => 'گزینه :attribute باید تنها شامل حروف باشد', + 'timezone' => 'گزینه :attribute باید از نوع منطقه زمانی صحیح باشد', + 'unique' => 'این :attribute از قبل ثبت شده است', + 'uploaded' => 'بارگذاری گزینه :attribute شکست خورد', + 'uppercase' => 'گزینه :attribute باید با حروف بزرگ باشد', + 'url' => 'فرمت :attribute اشتباه است', + 'ulid' => 'گزینه :attribute باید یک ULID صحیح باشد.', + 'uuid' => 'گزینه :attribute باید یک UUID صحیح باشد', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [ + 'name' => 'نام', + 'username' => 'نام کاربری', + 'email' => 'ایمیل', + 'first_name' => 'نام', + 'last_name' => 'نام خانوادگی', + 'password' => 'رمز عبور', + 'password_confirmation' => 'تاییدیه رمز عبور', + ], + +]; -- 2.49.1