feat: add i18n support for Vietnamese and English
Some checks failed
Tests / PHP 8.3 (push) Has been cancelled
Tests / PHP 8.4 (push) Has been cancelled
Tests / PHP 8.5 (push) Has been cancelled

This commit is contained in:
2026-05-04 10:40:39 +00:00
parent 3a8db5cae6
commit 8c6b71cb8a
64 changed files with 4652 additions and 254 deletions

133
lang/en/app.php Normal file
View File

@@ -0,0 +1,133 @@
<?php
return [
// Navigation
'nav_customer_care' => 'Customer Care',
'nav_management' => 'Management',
// Resource labels
'resource_feedbacks' => 'Feedbacks',
'resource_products' => 'Products',
'resource_customers' => 'Customers',
'resource_contracts' => 'Contracts',
'resource_channels' => 'Channels',
'resource_tags' => 'Tags',
'resource_roles' => 'Roles',
'resource_users' => 'Users',
// Status
'status_pending' => 'Pending',
'status_processing' => 'Processing',
'status_resolved' => 'Resolved',
'status_closed' => 'Closed',
'status_active' => 'Active',
'status_inactive' => 'Inactive',
'status_sold_out' => 'Sold Out',
'status_completed' => 'Completed',
'status_cancelled' => 'Cancelled',
// General labels
'name' => 'Name',
'email' => 'Email',
'password' => 'Password',
'phone' => 'Phone',
'address' => 'Address',
'slug' => 'Slug',
'icon' => 'Icon',
'description' => 'Description',
'status' => 'Status',
'customer_product' => 'Customer & Product',
'select_customer_product' => 'Select the customer and their associated product',
'general_feedback' => 'General feedback (not related to a product)',
'product' => 'Product',
'contract' => 'Contract',
'feedback_details' => 'Feedback Details',
'describe_feedback' => 'Describe the customer feedback',
'assignment_status' => 'Assignment & Status',
'assign_handler' => 'Assign handler and set initial status',
'department' => 'Department',
'escalated' => 'Escalated',
'attachments' => 'Attachments',
'upload_files' => 'Upload files related to this feedback',
'collection' => 'Collection',
'collection_general' => 'General',
'collection_proof_of_resolution' => 'Proof of Resolution',
'collection_customer_evidence' => 'Customer Evidence',
'files' => 'Files',
'channel' => 'Channel',
'assigned_to' => 'Assigned To',
'created' => 'Created',
'general' => 'General',
'new_status' => 'New Status',
'assign_to' => 'Assign To',
'target_department' => 'Target Department',
'by' => 'By',
'details' => 'Details',
'unassigned' => 'Unassigned',
'role' => 'Role',
'role_name' => 'Role Name',
'permissions' => 'Permissions',
'color' => 'Color',
'customer_information' => 'Customer Information',
'owned_products' => 'Owned Products',
'icon_hint' => 'Heroicon name or emoji',
'feedbacks' => 'Feedbacks',
'used' => 'Used',
'owners' => 'Owners',
'tickets' => 'Tickets',
'signed' => 'Signed',
'interactions' => 'Interactions',
'services' => 'Services',
'handovers' => 'Handovers',
'contracts' => 'Contracts',
'collection_date' => 'Collection Date',
'remark' => 'Remark',
'handover_date' => 'Handover Date',
'start_date' => 'Start Date',
'end_date' => 'End Date',
'printed_at' => 'Print Date',
'signed_status' => 'Signed Status',
'contract_info' => 'Contract Information',
'feedback_history' => 'Feedback History',
'tab_all' => 'All',
'min' => 'min',
'na' => 'N/A',
// Widget labels
'widget_tickets_awaiting_closure' => 'Tickets Awaiting Closure',
'widget_tickets_awaiting_desc' => 'Tickets that have been resolved and are pending manager review for closure.',
'widget_ticket' => 'Ticket',
'widget_customer' => 'Customer',
'widget_handler' => 'Handler',
'widget_resolved' => 'Resolved',
'widget_resolved_tickets' => 'Resolved Tickets',
'widget_total_resolved_closed' => 'Total resolved/closed tickets',
'widget_avg_processing_time' => 'Avg Processing Time',
'widget_avg_time_desc' => 'Avg time from creation to resolution',
'widget_no_resolved_tickets' => 'No resolved tickets yet',
'widget_pending_tickets' => 'Pending Tickets',
'widget_still_in_progress' => 'Still in progress',
'widget_escalated' => 'Escalated',
'widget_escalated_desc' => 'Tickets marked as escalated',
'widget_avg_time_by_handler' => 'Avg Processing Time by Handler',
'widget_avg_time_by_handler_desc' => 'Average time from ticket creation to resolution, broken down by handler.',
'widget_avg_time_minutes' => 'Avg Time (minutes)',
'widget_unknown' => 'Unknown',
// Blade views
'blade_similar_cases' => 'Similar Cases',
'blade_matching_tags' => 'Matching tags:',
'blade_title' => 'Title',
'blade_customer' => 'Customer',
'blade_status' => 'Status',
'blade_handler' => 'Handler',
'blade_date' => 'Date',
'blade_no_attachments' => 'No attachments.',
'blade_proof_of_resolution' => 'Proof of Resolution',
'blade_customer_evidence' => 'Customer Evidence',
'blade_open' => 'Open',
'blade_links_expire' => 'Click to open. Links expire after 60 minutes.',
'blade_file_count' => ':count file(s)',
'blade_proof' => 'Proof',
'blade_evidence' => 'Evidence',
];

28
lang/en/enums.php Normal file
View File

@@ -0,0 +1,28 @@
<?php
return [
'handover' => [
'not_ready' => 'Not ready',
'ready' => 'Ready',
'handed_over' => 'Handed over',
'scheduled' => 'Scheduled',
],
'service' => [
'management_fee' => 'Management fee',
'gratitude' => 'Gratitude',
'self_business' => 'Self business',
],
'contract_status' => [
'active' => 'Active',
'expired' => 'Expired',
'liquidated' => 'Liquidated',
],
'contract_type' => [
'sale' => 'Sale contract',
'lease' => 'Lease contract',
'bcc' => 'Business cooperation contract (BCC)',
],
];

54
lang/en/feedback.php Normal file
View File

@@ -0,0 +1,54 @@
<?php
return [
// ClosingService
'already_closed' => 'This ticket has already been closed.',
'close_permission_denied' => 'Only department managers can close tickets.',
'close_department_only' => 'You can only close tickets in your managed department.',
'proof_required' => 'Proof of resolution is required to complete the process.',
'already_resolved' => 'This ticket has already been resolved or closed.',
// TransferService
'transfer_reason_required' => 'Please enter a transfer reason.',
// FileService
'file_type_not_allowed' => 'File type :type is not allowed. Allowed: jpg, png, pdf, mp4, mov.',
'file_size_exceeds' => 'File size exceeds :max KB.',
// EditFeedback page
'transfer_department' => 'Transfer Department',
'target_department' => 'Target Department',
'assign_to_optional' => 'Assign To (optional)',
'reason' => 'Reason',
'transferred_successfully' => 'Transferred successfully',
'close_ticket' => 'Close Ticket',
'close_confirm' => 'Are you sure you want to close this ticket? This action CANNOT be undone.',
'close_submit' => 'Close',
'closed_successfully' => 'Ticket closed successfully',
// InteractionsRelationManager
'interaction_history' => 'Interaction History',
'interaction_type_note' => 'Note',
'interaction_type_status_change' => 'Status Change',
'interaction_type_assignment' => 'Assignment / Forward',
'view_attachments' => 'View Attachments',
'add_interaction' => 'Add Interaction',
'assigned_successfully' => 'Feedback assigned successfully',
'status_updated' => 'Status updated successfully',
// Notifications
'notif_ticket_closed_subject' => 'Ticket #:id has been closed',
'notif_ticket_closed_ticket' => 'Ticket: :title',
'notif_ticket_closed_by' => 'Closed by: :name',
'notif_view_ticket' => 'View Ticket',
'notif_ticket_closed_message' => 'Ticket #:id ":title" has been closed by :actor.',
'notif_ticket_transferred_subject' => 'Ticket #:id has been transferred to your department',
'notif_ticket_transferred_by' => 'Transferred by: :name',
'notif_ticket_transferred_reason' => 'Reason: :reason',
'notif_ticket_transferred_message' => 'Ticket #:id ":title" has been transferred to your department by :sender.',
// CreateFeedback
'created_via' => 'Feedback created via :channel',
'unknown_channel' => 'unknown channel',
];