feat(i18n): 添加多语言支持并实现国际化功能

This commit is contained in:
sudomarcma
2025-07-02 13:43:16 +08:00
parent 2560996333
commit 3aa4897bc5
17 changed files with 996 additions and 913 deletions
+184
View File
@@ -0,0 +1,184 @@
{
"appTitle": "Clock-In/Out System",
"logout": "Logout",
"login": "Login",
"username": "Username",
"password": "Password",
"loggingIn": "Logging in...",
"language": "Language",
"failedConnection": "Failed to connect to the server.",
"invalidToken": "Invalid token received from server.",
"english": "English",
"malay": "Malay",
"yourStatus": "Your Status",
"clockedIn": "Clocked In",
"clockedOut": "Clocked Out",
"clockIn": "Clock In",
"clockOut": "Clock Out",
"clock_in": "Clock In",
"clock_out": "Clock Out",
"scanToClock": "Scan to Clock {action}",
"in": "In",
"out": "Out",
"cancel": "Cancel",
"viewMyClockHistory": "View My Clock History",
"changeMyPassword": "Change My Password",
"myClockHistory": "My Clock History",
"backToDashboard": "Back to Dashboard",
"noClockHistory": "You have no clocking history.",
"clockHistoryFetchFail": "Failed to fetch clock history:",
"viewClockHistory": "View My Clock History →",
"changePassword": "Change My Password →",
"successClockIn": "Successfully clocked in.",
"successClockOut": "Successfully clocked out.",
"qrFail": "Could not detect a QR code. Please try again.",
"geoFail": "Unable to retrieve your location: {message}. Please enable location services.",
"successClock": "Successfully clocked at {location}.",
"changePasswordTitle": "Change Password",
"currentPassword": "Current Password",
"newPassword": "New Password",
"confirmNewPassword": "Confirm New Password",
"updating": "Updating...",
"tabPersonnel": "Personnel",
"tabAttendance": "Attendance",
"tabQrCodes": "QR Codes",
"uploadQrImage": "Upload QR Image",
"couldNotLoadWorkerInfo": "Could not load worker information",
"couldNotVerifyStatus": "Could not verify current status from server",
"successfullyClocked": "Successfully clocked {action} at",
"site": "site",
"errorOccurred": "Error occurred",
"unableToStartCamera": "Unable to start camera.",
"tryAgain": "Try Again",
"qrDetectedGettingLocation": "QR Code detected. Getting location...",
"geolocationNotSupported": "Geolocation is not supported by your browser.",
"unableToRetrieveLocation": "Unable to retrieve your location: {message}. Please enable location services.",
"qrNotDetectedTryAgain": "Could not detect a QR code. Please try again.",
"updatePassword": "Update Password",
"passwordsNoMatch": "New passwords do not match.",
"passwordTooShort": "New password must be at least 6 characters long.",
"passwordUpdated": "Password updated successfully! You can now use your new password to log in.",
"passwordUpdateError": "An error occurred while updating the password.",
"attendanceLogFor": "Attendance Log for",
"addManualClockOut": "Add Manual Clock-Out",
"manualClockOutInstruction": "Use this form if the worker forgot to clock out. The last event must be a clock-in.",
"clockOutTime": "Clock-Out Time",
"reason": "Reason (e.g., \"Forgot to clock out\")",
"enterBriefNote": "Enter a brief note",
"addRecord": "Add Record",
"startDate": "Start Date",
"endDate": "End Date",
"filterRecords": "Filter Records",
"event": "Event",
"timestamp": "Timestamp",
"locationName": "Location Name",
"coordinates": "Coordinates",
"notes": "Notes",
"noRecordsFound": "No records found for this period.",
"showOnMap": "Show on map",
"nA": "N/A",
"pleaseSelectTimestamp": "Please select a timestamp for the clock-out.",
"pleaseProvideReason": "Please provide a reason/note for the manual entry.",
"manualClockOutSuccess": "Manual clock-out recorded successfully!",
"manualClockOutError": "An error occurred: {message}",
"selectWorkers": "1. Select Workers",
"searchWorkerPlaceholder": "Search for a worker...",
"selectAll": "Select All",
"addWorkersByTag": "Add all workers from a tag",
"chooseTag": "-- Choose a tag --",
"addByTag": "Add by Tag",
"selectedForReport": "Selected for Report ({count})",
"allWorkersSelected": "All Workers ({count}) Selected",
"noWorkersSelected": "No workers selected.",
"reportSettings": "2. Report Settings",
"monthlySalary": "Monthly Salary (RM)",
"salaryAppliedNote": "Applied to all selected workers.",
"salaryPlaceholder": "e.g., 3000",
"otFactors": "OT Factors",
"weekendFactor": "Weekend Factor",
"holidayFactor": "Holiday Factor",
"selectPublicHolidays": "Select Public Holidays",
"generateReport": "Generate Attendance & OT Report",
"overtimePaySummary": "Overtime Pay Summary",
"exportOtSummary": "Export OT Summary (CSV)",
"worker": "Worker",
"totalHoursWorked": "Total Hours Worked",
"totalOtPay": "Total OT Pay (RM)",
"rawAttendanceData": "Raw Attendance Data",
"loadingReport": "Loading Report...",
"tagLoadError": "Could not load workers for the selected tag.",
"generateReportError": "Please select workers, set valid date range, and enter a salary.",
"reportGenerationError": "An error occurred while generating the report.",
"addNewUser": "Add New User",
"fullName": "Full Name",
"egJohnSmith": "e.g. John Smith",
"egJsmith": "e.g. jsmith",
"eg123456": "e.g. 123456",
"asManager": "As Manager",
"adding": "Adding...",
"addUser": "Add User",
"manageTags": "Manage Tags",
"createNewTag": "Create New Tag",
"egTeam": "e.g. Team",
"createTag": "Create Tag",
"tags": "Tags",
"workerRoster": "Worker Roster",
"searchByNameOrUsername": "Search by name or username",
"filterByTag": "Filter by tag",
"clearFilter": "Clear filter",
"dateJoined": "Date Joined",
"actions": "Actions",
"editTags": "Edit Tags",
"viewRecords": "View Records",
"delete": "Delete",
"loadingWorkers": "Loading workers...",
"noWorkersFound": "No workers found.",
"previous": "Previous",
"next": "Next",
"pageOf": "Page {current} of {total}",
"noTagsAvailable": "No tags available.",
"done": "Done",
"bulkEditTags": "Bulk Edit Tags",
"clearSelection": "Clear Selection",
"forUser": "For user",
"savePassword": "Save Password",
"saving": "Saving...",
"failedToUpdateTags": "Failed to update tags. Please try again.",
"tagDeleted": "Tag deleted successfully.",
"failedToFetchWorkers": "Failed to fetch workers.",
"failedToLoadPageData": "Failed to load page data.",
"errorAddingUser": "An error occurred while adding the user.",
"failedToDeleteWorker": "Failed to delete worker.",
"areYouSureDeleteWorker": "Are you sure you want to delete this worker account?",
"areYouSureDeleteTag": "Are you sure you want to delete this tag? This will remove it from all workers.",
"failedToDeleteTag": "Failed to delete tag.",
"passwordsDoNotMatch": "Passwords do not match.",
"createQrCode": "Create New QR Code",
"qrCodeName": "QR Code Name",
"qrNamePlaceholder": "e.g., 'West Gate Entrance'",
"create": "Create",
"newCodeCreated": "New Code Created!",
"saveQrInstruction": "Save this image or use the ID below. This will disappear on refresh.",
"id": "ID",
"existingQrCodes": "Existing QR Codes",
"name": "Name",
"status": "Status",
"active": "Active",
"inactive": "Inactive",
"deactivate": "Deactivate",
"activate": "Activate",
"download": "Download",
"noQrCodesFound": "No QR codes found. Create one above!",
"deleteQrConfirm": "Are you sure you want to delete this QR code? This cannot be undone.",
"qrDownloadError": "Sorry, the QR code could not be downloaded."
}