feat(lang): 添加并扩展多语言验证和管理员提示信息
Some checks failed
lotterLaravel CI / test (push) Has been cancelled
lotterLaravel E2E / e2e-api (push) Has been cancelled

- 在英语和尼泊尔语中新增管理员相关提示‘integration_site_store_deprecated’
- 丰富了验证属性的多语言条目,覆盖更多字段及嵌套属性
- 新增验证业务规则的语言提示,补充限制和条件说明
- 扩展自定义验证消息,加入数组、邮箱、角色、返点率等多种验证提示
- 增加多个验证规则的语言描述,支持更多常见的验证类型及场景
- 尼泊尔语验证文件调整,改用多个文件合并方式加载结构
- 尼泊尔语钱包错误消息中新增代码1011的翻译描述
This commit is contained in:
2026-07-07 09:44:03 +08:00
parent 9d355aa853
commit 12ffdebb62
12 changed files with 440 additions and 1 deletions

View File

@@ -16,6 +16,7 @@ return [
'integration_site_last_delete_denied' => 'At least one integration site must remain; the last site cannot be deleted.',
'no_integration_site' => 'Create an integration site first.',
'site_player_access_denied' => 'You do not have access to players under this site.',
'integration_site_store_deprecated' => 'Create integration sites in Platform Config → Integration Sites, then bind a level-1 agent in Agent Config → Create Level-1 Agent.',
'player_create_site_forbidden' => 'You cannot create players under this site.',
'player_create_agent_required' => 'A player must belong to an agent node. Choose a valid site with an agent root, or sign in with an agent-bound account.',
'player_create_agent_forbidden' => 'You cannot assign the player to this agent node.',

View File

@@ -69,4 +69,103 @@ return [
'can_grant_extra_rebate' => 'allow extra rebate',
'can_create_child_agent' => 'allow child agents',
'can_create_player' => 'allow players',
'role_ids.*' => 'role',
'role_slugs.*' => 'role',
'permission_slugs.*' => 'permission item',
'permissions' => 'permissions',
'permissions.*' => 'permission item',
'grants.*.menu_action_id' => 'permission item',
'grants.*.can_delegate' => 'delegatable',
'site_id' => 'site',
'player_account' => 'player account',
'business_date' => 'business date',
'sequence_no' => 'sequence number',
'metric' => 'metric',
'keyword' => 'keyword',
'default_currency' => 'default currency',
'size' => 'per page',
'number' => 'number',
'start_date' => 'start date',
'end_date' => 'end date',
'transfer_no' => 'transfer reference',
'external_ref_no' => 'external reference',
'txn_no' => 'transaction number',
'biz_type' => 'business type',
'created_from' => 'created from',
'created_to' => 'created to',
'export_format' => 'export format',
'parameters' => 'report parameters',
'parameters.date_from' => 'start date',
'parameters.date_to' => 'end date',
'parameters.player_id' => 'player',
'parameters.play_code' => 'play',
'parameters.operator_id' => 'operator',
'parameters.draw_id' => 'draw',
'parameters.draw_no' => 'draw number',
'parameters.normalized_number' => 'number',
'filter_json' => 'filter conditions',
'filter_json.date_from' => 'start date',
'filter_json.date_to' => 'end date',
'filter_json.draw_id' => 'draw',
'filter_json.draw_no' => 'draw number',
'filter_json.normalized_number' => 'number',
'reconcile_type' => 'reconciliation type',
'period_start' => 'period start',
'period_end' => 'period end',
'decimal_places' => 'decimal places',
'is_enabled' => 'enabled',
'is_bettable' => 'bettable',
'description' => 'description',
'wallet_debit_path' => 'debit path',
'wallet_credit_path' => 'credit path',
'wallet_balance_path' => 'balance query path',
'wallet_timeout_seconds' => 'request timeout (s)',
'iframe_allowed_origins' => 'iframe allowed origins',
'iframe_allowed_origins.*' => 'iframe origin',
'lottery_h5_base_url' => 'H5 base URL',
'notes' => 'notes',
'clone_from_version_id' => 'clone source version',
'current_amount' => 'current amount',
'contribution_rate' => 'contribution rate',
'trigger_threshold' => 'trigger threshold',
'payout_rate' => 'payout rate',
'force_trigger_draw_gap' => 'force trigger draw gap',
'min_bet_amount' => 'min stake',
'combo_trigger_play_codes' => 'combo trigger plays',
'combo_trigger_play_codes.*' => 'combo trigger play',
'lines.*.digit_slot' => 'digit slot',
'lines.*.dimension' => 'dimension',
'client_trace_id' => 'client trace ID',
'expected_config_versions' => 'expected config versions',
'expected_config_versions.play_config_version_no' => 'play config version',
'expected_config_versions.odds_version_no' => 'odds config version',
'expected_config_versions.risk_cap_version_no' => 'risk cap config version',
'items.*.key' => 'key',
'items.*.value' => 'value',
'items.*.prize_scope' => 'prize tier',
'items.*.rebate_rate' => 'rebate rate',
'items.*.commission_rate' => 'commission rate',
'items.*.currency_code' => 'currency',
'items.*.category' => 'category',
'items.*.dimension' => 'dimension',
'items.*.bet_mode' => 'bet mode',
'items.*.display_order' => 'display order',
'items.*.min_bet_amount' => 'min stake',
'items.*.max_bet_amount' => 'max stake',
'items.*.supports_multi_number' => 'supports multi-number',
'items.*.cap_amount' => 'cap amount',
'items.*.cap_type' => 'cap type',
'items.*.draw_id' => 'draw',
'items.*.prize_type' => 'prize type',
'items.*.prize_index' => 'prize index',
'items.*.number_4d' => '4-digit number',
'items.*.normalized_number' => 'number',
'items.*.side_a_ref' => 'side A reference',
'items.*.side_b_ref' => 'side B reference',
'items.*.difference_amount' => 'difference amount',
'items.*.status' => 'status',
'sort_order' => 'display order',
'supports_multi_number' => 'supports multi-number',
'reserved_rule_json' => 'reserved rules',
'extra_config_json' => 'extra config',
];

View File

@@ -26,10 +26,12 @@ return [
'exceeds_unpaid' => 'Payment amount cannot exceed the unpaid balance on this bill.',
'invalid_range' => 'Share rate must be between 0 and 100.',
'below_allocated' => 'Credit limit cannot be lower than credit already allocated to sub-agents.',
'below_player_used' => 'Player credit limit cannot be lower than the player\'s used (including frozen) amount.',
'parent_cannot_delegate' => 'The parent has not enabled this capability.',
'cannot_create_child_agent' => 'You are not allowed to create sub-agents.',
'cannot_create_player' => 'You are not allowed to create players.',
'primary_account_missing' => 'This agent has no bound login account; username cannot be updated.',
'site_root_exists' => 'This site already has a level-1 agent bound. Choose another site.',
'agent_overdue' => 'This agent has overdue bills. This operation is not allowed.',
'agent_line_severe_overdue' => 'This agent line has severe overdue (over 7 days). Betting is frozen.',
'parent_overdue' => 'The parent agent has overdue bills. This operation is not allowed.',

View File

@@ -39,6 +39,41 @@ return [
'min' => 'Reason must be at least :min characters.',
],
'items' => [
'min' => 'At least :min items required.',
'max' => 'A maximum of :max items.',
'size' => ':attribute must contain exactly :size items.',
],
'email' => [
'unique' => 'This email is already in use.',
],
'lines' => [
'max' => 'A maximum of :max bets per submission.',
'min' => 'At least :min bets required.',
],
'role_slugs' => [
'min' => 'At least one role must be selected.',
],
'role_ids' => [
'required' => 'Please select a role.',
],
'rebate_rate' => [
'max' => 'Rebate rate must not exceed 1 (100% = 1).',
'min' => 'Rebate rate must not be less than 0.',
],
'extra_rebate_rate' => [
'max' => 'Extra rebate rate must not exceed 1 (100% = 1).',
'min' => 'Extra rebate rate must not be less than 0.',
],
'rebate_limit' => [
'max' => 'Rebate ceiling must not exceed 1 (100% = 1).',
'min' => 'Rebate ceiling must not be less than 0.',
],
'default_player_rebate' => [
'max' => 'Default player rebate must not exceed 1 (100% = 1).',
'min' => 'Default player rebate must not be less than 0.',
],
'total_share_rate' => [
'max' => 'Share rate must not exceed 100.',
'min' => 'Share rate must not be less than 0.',
],
];

View File

@@ -51,4 +51,82 @@ return [
],
'after_or_equal' => ':attribute must be on or after :date.',
'distinct' => ':attribute has a duplicate value.',
'accepted_if' => 'The :attribute must be accepted when :other is :value.',
'active_url' => ':attribute must be a valid URL.',
'after' => ':attribute must be after :date.',
'alpha' => ':attribute may only contain letters.',
'alpha_dash' => ':attribute may only contain letters, numbers, dashes and underscores.',
'alpha_num' => ':attribute may only contain letters and numbers.',
'ascii' => ':attribute may only contain single-byte alphanumeric characters and symbols.',
'before' => ':attribute must be before :date.',
'before_or_equal' => ':attribute must be on or before :date.',
'date_equals' => ':attribute must equal :date.',
'decimal' => ':attribute must have :decimal decimal places.',
'declined' => 'The :attribute must be declined.',
'different' => ':attribute and :other must be different.',
'digits' => ':attribute must be :digits digits.',
'digits_between' => ':attribute must be between :min and :max digits.',
'ends_with' => ':attribute must end with one of the following: :values.',
'enum' => 'The selected :attribute is invalid.',
'file' => ':attribute must be a file.',
'image' => ':attribute must be an image.',
'in_array' => ':attribute does not exist in :other.',
'ip' => ':attribute must be a valid IP address.',
'lowercase' => ':attribute must be lowercase.',
'uppercase' => ':attribute must be uppercase.',
'prohibited_if' => ':attribute is prohibited when :other is :value.',
'required_unless' => ':attribute is required unless :other is in :values.',
'required_without_all' => ':attribute is required when none of :values are present.',
'required_array_keys' => ':attribute must contain: :values.',
'starts_with' => ':attribute must start with one of the following: :values.',
'timezone' => ':attribute must be a valid timezone.',
'uploaded' => ':attribute failed to upload.',
'between' => [
'array' => ':attribute must have between :min and :max items.',
'file' => ':attribute must be between :min and :max kilobytes.',
'numeric' => ':attribute must be between :min and :max.',
'string' => ':attribute must be between :min and :max characters.',
],
'max' => [
'array' => ':attribute may not have more than :max items.',
'file' => ':attribute may not be greater than :max kilobytes.',
'numeric' => ':attribute may not be greater than :max.',
'string' => ':attribute may not exceed :max characters.',
],
'min' => [
'array' => ':attribute must have at least :min items.',
'file' => ':attribute must be at least :min kilobytes.',
'numeric' => ':attribute must be at least :min.',
'string' => ':attribute must be at least :min characters.',
],
'size' => [
'array' => ':attribute must contain :size items.',
'file' => ':attribute must be :size kilobytes.',
'numeric' => ':attribute must be :size.',
'string' => ':attribute must be :size characters.',
],
'gt' => [
'array' => ':attribute must have more than :value items.',
'file' => ':attribute must be greater than :value kilobytes.',
'numeric' => ':attribute must be greater than :value.',
'string' => ':attribute must be greater than :value characters.',
],
'gte' => [
'array' => ':attribute must have at least :value items.',
'file' => ':attribute must be at least :value kilobytes.',
'numeric' => ':attribute must be at least :value.',
'string' => ':attribute must be at least :value characters.',
],
'lt' => [
'array' => ':attribute must have less than :value items.',
'file' => ':attribute must be less than :value kilobytes.',
'numeric' => ':attribute must be less than :value.',
'string' => ':attribute must be less than :value characters.',
],
'lte' => [
'array' => ':attribute may not have more than :value items.',
'file' => ':attribute may not be greater than :value kilobytes.',
'numeric' => ':attribute may not be greater than :value.',
'string' => ':attribute may not exceed :value characters.',
],
];