[FEAT] 完善全站多語系支援、角色權限篩選優化及 UI 元件重構
All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 1m4s

- [DOCS] 補齊 en, ja, zh_TW 語系檔翻譯並完善驗證錯誤訊息 (validation.php)
- [FEAT] 角色權限頁面新增「所屬單位」篩選功能 (僅限系統管理員)
- [STYLE] 優化角色列表顯示,將「類型」變更為具體「所屬單位」名稱
- [STYLE] 修正角色頁面工具列佈局,搜尋框置前並修正下拉箭頭顯示
- [REFACTOR] 統一全站刪除確認視窗,導入新版 <x-delete-confirm-modal /> 組件
- [REFACTOR] 優化 PermissionController 查詢效能 (Eager Loading)
- [FIX] 修正 RoleSeeder 角色命名與資料庫同步邏輯
This commit is contained in:
2026-03-20 13:41:51 +08:00
parent 6588dcd7f7
commit d2cefe3f39
31 changed files with 2431 additions and 1775 deletions

View File

@@ -13,159 +13,159 @@ return [
|
*/
'accepted' => '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.',
'any_of' => 'The :attribute field is invalid.',
'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.',
'accepted' => '必須接受 :attribute',
'accepted_if' => '當 :other 為 :value 時,必須接受 :attribute。',
'active_url' => ':attribute 並非有效的 URL',
'after' => ':attribute 必須在 :date 之後。',
'after_or_equal' => ':attribute 必須在 :date 之後或相等。',
'alpha' => ':attribute 只能包含字母。',
'alpha_dash' => ':attribute 只能包含字母、數字、破折號與底線。',
'alpha_num' => ':attribute 只能包含字母與數字。',
'any_of' => ':attribute 無效。',
'array' => ':attribute 必須是一個陣列。',
'ascii' => ':attribute 只能包含單字節的字母、數字與符號。',
'before' => ':attribute 必須在 :date 之前。',
'before_or_equal' => ':attribute 必須在 :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.',
'array' => ':attribute 必須包含 :min :max 個項目。',
'file' => ':attribute 必須介於 :min :max KB 之間。',
'numeric' => ':attribute 必須介於 :min :max 之間。',
'string' => ':attribute 必須介於 :min :max 個字元之間。',
],
'boolean' => 'The :attribute field must be true or false.',
'can' => 'The :attribute field contains an unauthorized value.',
'confirmed' => 'The :attribute field confirmation does not match.',
'contains' => 'The :attribute field is missing a required value.',
'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_contain' => 'The :attribute field must not contain any of the following: :values.',
'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.',
'encoding' => 'The :attribute field must be encoded in :encoding.',
'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.',
'extensions' => 'The :attribute field must have one of the following extensions: :values.',
'file' => 'The :attribute field must be a file.',
'filled' => 'The :attribute field must have a value.',
'boolean' => ':attribute 必須為布林值。',
'can' => ':attribute 包含未授權的值。',
'confirmed' => ':attribute 確認欄位不符。',
'contains' => ':attribute 缺少必要的值。',
'current_password' => '目前的密碼不正確。',
'date' => ':attribute 並非有效的日期。',
'date_equals' => ':attribute 必須等於 :date',
'date_format' => ':attribute 不符合格式 :format',
'decimal' => ':attribute 必須有 :decimal 位小數。',
'declined' => ':attribute 必須拒絕。',
'declined_if' => ' :other :value 時,:attribute 必須拒絕。',
'different' => ':attribute 與 :other 必須不同。',
'digits' => ':attribute 必須是 :digits 位數。',
'digits_between' => ':attribute 必須介於 :min :max 位數之間。',
'dimensions' => ':attribute 圖片尺寸無效。',
'distinct' => ':attribute 欄位含有重複的值。',
'doesnt_contain' => ':attribute 不得包含以下任何值::values',
'doesnt_end_with' => ':attribute 不得以以下任何值結尾::values',
'doesnt_start_with' => ':attribute 不得以以下任何值開頭::values',
'email' => ':attribute 必須是有效的電子郵件地址。',
'encoding' => ':attribute 必須以 :encoding 編碼。',
'ends_with' => ':attribute 必須以以下任一值結尾::values',
'enum' => '所選的 :attribute 無效。',
'exists' => '所選的 :attribute 無效。',
'extensions' => ':attribute 必須是以下副檔名之一::values',
'file' => ':attribute 必須是一個檔案。',
'filled' => ':attribute 不能為空。',
'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.',
'array' => ':attribute 必須包含超過 :value 個項目。',
'file' => ':attribute 必須大於 :value KB。',
'numeric' => ':attribute 必須大於 :value',
'string' => ':attribute 必須超過 :value 個字元。',
],
'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.',
'array' => ':attribute 必須包含 :value 個以上項目。',
'file' => ':attribute 必須大於或等於 :value KB。',
'numeric' => ':attribute 必須大於或等於 :value',
'string' => ':attribute 必須大於或等於 :value 個字元。',
],
'hex_color' => 'The :attribute field must be a valid hexadecimal color.',
'image' => 'The :attribute field must be an image.',
'in' => 'The selected :attribute is invalid.',
'in_array' => 'The :attribute field must exist in :other.',
'in_array_keys' => 'The :attribute field must contain at least one of the following keys: :values.',
'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.',
'list' => 'The :attribute field must be a list.',
'lowercase' => 'The :attribute field must be lowercase.',
'hex_color' => ':attribute 必須是有效的十六進位色碼。',
'image' => ':attribute 必須是一張圖片。',
'in' => '所選的 :attribute 無效。',
'in_array' => ':attribute 必須存在於 :other 之中。',
'in_array_keys' => ':attribute 必須包含以下至少一個鍵::values',
'integer' => ':attribute 必須是整數。',
'ip' => ':attribute 必須是有效的 IP 位址。',
'ipv4' => ':attribute 必須是有效的 IPv4 位址。',
'ipv6' => ':attribute 必須是有效的 IPv6 位址。',
'json' => ':attribute 必須是有效的 JSON 字串。',
'list' => ':attribute 必須是一個列表。',
'lowercase' => ':attribute 必須是小寫。',
'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.',
'array' => ':attribute 必須包含少於 :value 個項目。',
'file' => ':attribute 必須小於 :value KB。',
'numeric' => ':attribute 必須小於 :value',
'string' => ':attribute 必須少於 :value 個字元。',
],
'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.',
'array' => ':attribute 不得包含超過 :value 個項目。',
'file' => ':attribute 必須小於或等於 :value KB。',
'numeric' => ':attribute 必須小於或等於 :value',
'string' => ':attribute 必須小於或等於 :value 個字元。',
],
'mac_address' => 'The :attribute field must be a valid MAC address.',
'mac_address' => ':attribute 必須是有效的 MAC 位址。',
'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.',
'array' => ':attribute 不得超過 :max 個項目。',
'file' => ':attribute 不得大於 :max KB。',
'numeric' => ':attribute 不得大於 :max',
'string' => ':attribute 不得超過 :max 個字元。',
],
'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.',
'max_digits' => ':attribute 不得超過 :max 位數。',
'mimes' => ':attribute 必須是以下檔案類型::values',
'mimetypes' => ':attribute 必須是以下檔案類型::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.',
'array' => ':attribute 至少需要 :min 個項目。',
'file' => ':attribute 至少需要 :min KB。',
'numeric' => ':attribute 不得小於 :min',
'string' => ':attribute 至少需要 :min 個字元。',
],
'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.',
'min_digits' => ':attribute 至少需要 :min 位數。',
'missing' => ':attribute 必須不存在。',
'missing_if' => ' :other :value 時,:attribute 必須不存在。',
'missing_unless' => '除非 :other :value,否則 :attribute 必須不存在。',
'missing_with' => '當 :values 存在時,:attribute 必須不存在。',
'missing_with_all' => '當 :values 都存在時,:attribute 必須不存在。',
'multiple_of' => ':attribute 必須是 :value 的倍數。',
'not_in' => '所選的 :attribute 無效。',
'not_regex' => ':attribute 格式無效。',
'numeric' => ':attribute 必須是數字。',
'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.',
'letters' => ':attribute 必須包含至少一個字母。',
'mixed' => ':attribute 必須包含至少一個大寫與一個小寫字母。',
'numbers' => ':attribute 必須包含至少一個數字。',
'symbols' => ':attribute 必須包含至少一個符號。',
'uncompromised' => ':attribute 已出現在外洩資料中,請選擇其他 :attribute',
],
'present' => 'The :attribute field must be present.',
'present_if' => 'The :attribute field must be present when :other is :value.',
'present_unless' => 'The :attribute field must be present unless :other is :value.',
'present_with' => 'The :attribute field must be present when :values is present.',
'present_with_all' => 'The :attribute field must be present when :values are present.',
'prohibited' => 'The :attribute field is prohibited.',
'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
'prohibited_if_accepted' => 'The :attribute field is prohibited when :other is accepted.',
'prohibited_if_declined' => 'The :attribute field is prohibited when :other is declined.',
'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_if_declined' => 'The :attribute field is required when :other is declined.',
'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.',
'present' => ':attribute 必須存在。',
'present_if' => '當 :other 為 :value 時,:attribute 必須存在。',
'present_unless' => '除非 :other 為 :value否則 :attribute 必須存在。',
'present_with' => '當 :values 存在時,:attribute 必須存在。',
'present_with_all' => '當 :values 都存在時,:attribute 必須存在。',
'prohibited' => ':attribute 被禁止使用。',
'prohibited_if' => ' :other :value 時,:attribute 被禁止使用。',
'prohibited_if_accepted' => '當 :other 被接受時,:attribute 被禁止使用。',
'prohibited_if_declined' => '當 :other 被拒絕時,:attribute 被禁止使用。',
'prohibited_unless' => '除非 :other :values 之中,否則 :attribute 被禁止使用。',
'prohibits' => ':attribute 禁止 :other 存在。',
'regex' => ':attribute 格式無效。',
'required' => ':attribute 為必填欄位。',
'required_array_keys' => ':attribute 必須包含以下項目::values',
'required_if' => ' :other :value 時,:attribute 為必填。',
'required_if_accepted' => '當 :other 被接受時,:attribute 為必填。',
'required_if_declined' => '當 :other 被拒絕時,:attribute 為必填。',
'required_unless' => '除非 :other :values 之中,否則 :attribute 為必填。',
'required_with' => '當 :values 存在時,:attribute 為必填。',
'required_with_all' => '當 :values 都存在時,:attribute 為必填。',
'required_without' => '當 :values 不存在時,:attribute 為必填。',
'required_without_all' => '當 :values 都不存在時,:attribute 為必填。',
'same' => ':attribute 必須與 :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.',
'array' => ':attribute 必須包含 :size 個項目。',
'file' => ':attribute 必須是 :size KB。',
'numeric' => ':attribute 必須是 :size',
'string' => ':attribute 必須是 :size 個字元。',
],
'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.',
'starts_with' => ':attribute 必須以以下任一值開頭::values',
'string' => ':attribute 必須是字串。',
'timezone' => ':attribute 必須是有效的時區。',
'unique' => ':attribute 已被使用。',
'uploaded' => ':attribute 上傳失敗。',
'uppercase' => ':attribute 必須是大寫。',
'url' => ':attribute 必須是有效的 URL',
'ulid' => ':attribute 必須是有效的 ULID',
'uuid' => ':attribute 必須是有效的 UUID',
/*
|--------------------------------------------------------------------------
@@ -195,6 +195,13 @@ return [
|
*/
'attributes' => [],
'attributes' => [
'name' => '姓名',
'email' => '電子郵件',
'password' => '密碼',
'current_password' => '目前密碼',
'password_confirmation' => '確認密碼',
'phone' => '電話',
],
];