Sfoglia il codice sorgente

feat: 完善多语言硬编码

Jack Zhou 1 settimana fa
parent
commit
17b585e189
26 ha cambiato i file con 320 aggiunte e 656 eliminazioni
  1. 10 2
      src/components/MoreFilters/src/components/PartiesView.vue
  2. 3 1
      src/components/MoreFilters/src/components/PlacesView.vue
  3. 17 290
      src/locales/en.json
  4. 1 1
      src/locales/zh-cn.json
  5. 10 14
      src/views/AIApiLog/src/AIApiLog.vue
  6. 4 7
      src/views/AIApiLog/src/components/LogDialog.vue
  7. 5 10
      src/views/AIApiLog/src/components/TableView/src/TableView.vue
  8. 11 18
      src/views/AIApiLog/src/components/TableView/src/components/DownloadDialog.vue
  9. 29 7
      src/views/AIRobotChat/src/AIRobotChat.vue
  10. 19 30
      src/views/ChatLog/src/ChatLog.vue
  11. 5 8
      src/views/ChatLog/src/components/TableView/src/TableView.vue
  12. 7 10
      src/views/ChatLog/src/components/TableView/src/components/DownloadDialog.vue
  13. 31 11
      src/views/DestinationDelivery/src/components/ConfiguRations/src/components/RecommendDate.vue
  14. 3 1
      src/views/Login/src/components/ErrorTips.vue
  15. 32 38
      src/views/OperationLog/src/OperationLog.vue
  16. 6 10
      src/views/OperationLog/src/components/BookingTable/src/BookingTable.vue
  17. 7 10
      src/views/OperationLog/src/components/BookingTable/src/components/DownloadDialog.vue
  18. 1 1
      src/views/Report/src/components/ReportSchedule/src/components/FieldsTable.vue
  19. 18 20
      src/views/TemplateManagement/src/TemplateManagement.vue
  20. 26 31
      src/views/TemplateManagement/src/components/CreateReportTemplate/src/CreateReportTemplate.vue
  21. 2 5
      src/views/TemplateManagement/src/components/CreateReportTemplate/src/components/AccountSelect.vue
  22. 14 45
      src/views/TemplateManagement/src/components/CreateReportTemplate/src/components/AdjustmentField.vue
  23. 2 5
      src/views/TemplateManagement/src/components/CreateReportTemplate/src/components/GroupNameSelect.vue
  24. 2 5
      src/views/TemplateManagement/src/components/CreateReportTemplate/src/components/PartyIDSelect.vue
  25. 39 50
      src/views/TemplateManagement/src/components/CreateReportTemplate/src/components/ReportFieldsConfiguration.vue
  26. 16 26
      src/views/TemplateManagement/src/components/TableView/src/TableView.vue

+ 10 - 2
src/components/MoreFilters/src/components/PartiesView.vue

@@ -209,7 +209,13 @@ defineExpose({
         :type="item.type"
         :title="item.title"
         :data="item.value"
-        :placeholder="t(item.title === 'Shipper Name' ? 'moreFilters.inputShipperName' : 'moreFilters.inputConsigneeName')"
+        :placeholder="
+          t(
+            item.title === 'Shipper Name'
+              ? 'moreFilters.inputShipperName'
+              : 'moreFilters.inputConsigneeName'
+          )
+        "
         @changeAutoSelect="changeAutoSelect"
       >
       </AutoSelect>
@@ -225,7 +231,9 @@ defineExpose({
     >
     </SelectAutoSelect>
     <div class="MoreType" @click="addType" v-if="partyTypeOptions.length != moreList.length">
-      <el-button class="el-button--noborder moretype">+ {{ t('moreFilters.morePartyType') }}</el-button>
+      <el-button class="el-button--noborder moretype"
+        >+ {{ t('moreFilters.morePartyType') }}</el-button
+      >
     </div>
   </div>
 </template>

+ 3 - 1
src/components/MoreFilters/src/components/PlacesView.vue

@@ -206,7 +206,9 @@ defineExpose({
   </SelectTableSelect>
   <!-- More Place Type -->
   <div class="MoreType" @click="addType()" v-if="moreList.length !== placeTypeOptions.length">
-      <el-button class="el-button--noborder moretype">+ {{ t('moreFilters.morePlaceType') }}</el-button>
+    <el-button class="el-button--noborder moretype"
+      >+ {{ t('moreFilters.morePlaceType') }}</el-button
+    >
   </div>
 </template>
 

+ 17 - 290
src/locales/en.json

@@ -2,22 +2,12 @@
   "login": {
     "username": "User Name",
     "password": "Password",
-    "login": "Login",
     "logIn": "Log in",
     "forgotPassword": "Forgot Password?",
-    "setPassword": "Set Password",
-    "activateAccount": "Activate Account",
-    "noAccount": "No account?",
-    "registerNow": "Register Now",
-    "captchaPlaceholder": "Please enter the captcha",
-    "sendCaptcha": "Send Captcha",
-    "resendCaptcha": "Resend Captcha",
-    "captchaSent": "Captcha has been sent to your email",
     "resetPassword": "Reset Password",
     "newPassword": "New Password",
     "confirmNewPassword": "Confirm New Password",
     "passwordMismatch": "Passwords do not match",
-    "activationEmailSent": "Activation email has been sent to your email",
     "welcomeTitle": "Welcome to KLN Portal",
     "welcomeSubtitle": "Login to your account",
     "accountNotExist": "This account does not exist.",
@@ -29,7 +19,8 @@
     "tooManyTries": "Oops, too many tries!",
     "helloCreateNewPassword": "Hello {name}, please create a new password for your account.",
     "passwordAttemptsExceeded": "You have exceeded the maximum number of password attempts.",
-    "tryAgainInFiveMinutesOrReset": "Please try again in 5 minutes or click {action} to reset.",
+    "errorTips1": "Please try again in 5 minutes or click",
+    "errorTips2": " to reset.",
     "forgetPassword": "Forget Password",
     "userName": "User Name",
     "emailAddress": "Email Address",
@@ -70,9 +61,6 @@
   },
   "common": {
     "search": "Search",
-    "searchUserNamePlaceholder": "Search user name",
-    "searchQuestionPlaceholder": "Search Question ID、User",
-    "searchChatPlaceholder": "Search Question ID、User",
     "customerSearchPlaceholder": "Search by Customer code, Customer name",
     "customerType": "Customer Type",
     "controllingCustomer": "Controlling Customer",
@@ -83,53 +71,25 @@
     "reset": "Reset",
     "ok": "OK",
     "change": "Change",
-    "login": "Login",
-    "download": "Download",
-    "selected": "Selected",
     "all": "All",
     "update": "Update",
     "prompt": "Prompt",
     "logout": "Logout",
     "light": "Light",
     "dark": "Dark",
-    "edit": "Edit",
-    "copy": "Copy",
-    "delete": "Delete",
     "clearFilters": "Clear Filters",
     "downloadFile": "Download File",
     "selectedColumns": "Selected columns",
     "downloadWithAllColumns": "Download with all columns",
     "saveSuccess": "Saved successfully",
     "requestFailedRetry": "The request failed. Please try again later",
-    "changePassword": "Change Password",
     "errorPleaseTryAgainLater": "Error! Please try again later.",
     "copySuccess": "Copy success",
     "details": "Details",
     "description": "Description",
-    "userType": "User Type",
-    "questionType": "Question Type",
-    "answerType": "Answer Type",
-    "answerSatisfaction": "Answer Satisfaction",
-    "page": "Page",
-    "chatLog": "Chat Log",
-    "customer": "Customer",
-    "employee": "Employee",
-    "predefinedQuestion": "Predefined Question",
-    "freeText": "Free Text",
-    "suspend": "Suspend",
-    "timeout": "Timeout",
-    "predefinedTemplate": "Predefined Template",
-    "aiAnswer": "AI Answer",
-    "null": "Null",
-    "good": "Good",
-    "notGood": "Not Good",
-    "responseDuration": "Response Duration",
     "schedule": "Schedule",
     "failedToLoadOptions": "Failed to load options",
     "operation": "Operation",
-    "configureRegionsAndTimeSlots": "Configure available destination delivery regions and time slots.",
-    "deleteRule": "Delete Rule",
-    "confirmDeleteRule": "Are you sure to delete this notification event?",
     "failedToLoadData": "Failed to load data",
     "cannotAddDuplicateCities": "Cannot add duplicate cities.",
     "inputCountryCityUncode": "Please input country/city/uncode",
@@ -150,7 +110,6 @@
     "transportMode": "Transport Mode",
     "regionalSolutions": "REGIONAL SOLUTIONS",
     "selectAll": "Select All",
-    "select": "Select",
     "dateRange": "Date Range",
     "dateType": "Date Type",
     "pleaseSelectDateType": "Please Select Date Type",
@@ -242,14 +201,8 @@
     "detailInformation": "Detail Information",
     "isSend": "Is Send",
     "defaultSetting": "Default Setting",
-    "hblNo": "HBL No.",
-    "carrierBookingNo": "Carrier Booking No.",
-    "vessel": "Vessel",
-    "voyage": "Voyage",
     "etd": "ETD",
     "eta": "ETA",
-    "lastUpdatedUser": "Last Updated User",
-    "lastUpdatedTime": "Last Updated Time",
     "noAccess": "No access",
     "drawerTitleBoth": "AMS/ISF",
     "drawerTitleAms": "AMS",
@@ -278,41 +231,12 @@
     "etaAta": "ETA / ATA",
     "vesselAirline": "Vessel / Airline",
     "voyageFlight": "Voyage / Flight",
-    "mawbMblNo": "MAWB/MBL No.",
-    "hawbHblNo": "HAWB/HBL No.",
-    "bookingNo": "Booking No.",
-    "poNo": "PO No.",
     "refNo": "Ref No.",
-    "quantityUnit": "Quantity / Unit",
-    "gWeight": "G. Weight",
-    "chWeight": "Ch. Weight",
-    "volume": "Volume",
-    "marks": "Marks",
-    "remark": "Remark",
     "packing": "Packing",
-    "marksAndDescription": "Marks and Description",
-    "seeAll": "See All",
     "tdShare": "Share",
     "tdHouseNo": "House No.",
     "tdAmsIsf": "AMS/ISF",
-    "tdAddReference": "Add Reference",
-    "tdReferenceType": "Reference Type",
-    "tdRefNo": "Ref No.",
-    "tdAction": "Action",
-    "ptMawbMblNo": "MAWB/MBL No.",
-    "ptHawbHblNo": "HAWB/HBL No.",
-    "ptBookingNo": "Booking No.",
-    "ptPoNo": "PO No.",
-    "ptVesselAirline": "Vessel / Airline",
-    "ptVoyageFlight": "Voyage / Flight",
-    "ptOriginAgent": "Origin Agent",
-    "ptDestinationAgent": "Destination Agent",
-    "ptQuantityUnit": "Quantity / Unit",
-    "ptGWeight": "G. Weight",
-    "ptChWeight": "Ch. Weight",
-    "ptVolume": "Volume",
-    "ptMarks": "Marks",
-    "ptDescription": "Description"
+    "tdAddReference": "Add Reference"
   },
   "systemMessage": {
     "title": "System Message",
@@ -341,7 +265,6 @@
   "layout": {
     "themes": "Themes",
     "customizeWorkspaceTip": "Customize your workspace by changing the appearance and theme color",
-    "dark": "Dark",
     "userManual": "User Manual",
     "demoVideo": "Demo Video",
     "logout": "Logout",
@@ -369,14 +292,6 @@
     "accountNotActivated": "This account has not been activated yet. Please select a different customer account to continue.",
     "accountDisabled": "This account has been disabled and is no longer accessible. Please select a different customer account to continue.",
     "operationFailedRetry": "Operation failed, please try again later",
-    "customizeColumns": "Customize Columns",
-    "openDetailedPage": "Open Detailed Page",
-    "closeDetailedPage": "Close Detailed Page",
-    "sendEmail": "Send Email",
-    "publicTracking": "Public Tracking",
-    "addReference": "Add Reference",
-    "uploadFile": "Upload File",
-    "amsIsf": "AMS/ISF",
     "changePassword": "Change Password"
   },
   "report": {
@@ -401,10 +316,6 @@
     "ascending": "Ascending",
     "descending": "Descending",
     "sortBy": "Sort by",
-    "reportDescription": "Report Description",
-    "reportLevel": "Report Level",
-    "reportAccessControl": "Report Access Control",
-    "reportAccessControlDescription": "Report Access Control Description",
     "fieldsVisible": "Fields Visible",
     "systemName": "System Name",
     "displayNameInReport": "Display Name in Report",
@@ -466,7 +377,6 @@
     "month": "Month",
     "quarter": "Quarter",
     "quarterMonth": "Quarter Month",
-    "yearlyMonth": "Yearly Month",
     "year": "Year",
     "future": "Future",
     "daysOfWeekSelectMultiple": "Days of Week (Select Multiple)",
@@ -482,152 +392,7 @@
     "lastQuarter": "Last Quarter",
     "lastYear": "Last Year"
   },
-  "templateManagement": {
-    "title": "Report Template Management",
-    "createNew": "Create New Report Template",
-    "searchReportNamePlaceholder": "Search report name",
-    "isActivePlaceholder": "Is Active",
-    "applicationScopePlaceholder": "Application Scope",
-    "partyIdsPlaceholder": "Party IDs",
-    "active": "Active",
-    "activate": "Activate",
-    "inactive": "Inactive",
-    "inactivate": "Inactivate",
-    "reportName": "Report Name",
-    "reportLevel": "Report Level",
-    "isActive": "Is Active",
-    "applicationScope": "Application Scope",
-    "creationDate": "Creation Date",
-    "createdBy": "Created By",
-    "modifyBy": "Modify By",
-    "allUsers": "All Users",
-    "specificUsers": "Specific Users",
-    "specificRolesRequired": "Please select Party ID or Group Name or KLN ONLINE Account for Specific Roles access control.",
-    "saveFailed": "Failed to save Report Template.",
-    "basicReportInformation": "Basic Report Information",
-    "reportAccessControl": "Report Access Control",
-    "allUsersDescription": "This report will be available to all users in the system",
-    "specificRoles": "Specific Roles",
-    "specificRolesDescription": "Restrict access to specific user roles",
-    "partyId": "Party ID",
-    "groupName": "Group Name",
-    "klnOnlineAccount": "KLN ONLINE Account",
-
-    "selectPartyIdsMulti": "Select Party IDs (Multi-select allowed)",
-    "selectGroupNameMulti": "Select Group Name (Multi-select allowed)",
-    "addEditFieldTitle": "Add/Edit Field",
-    "searchFieldPlaceholder": "Search field",
-    "selectedFieldsOnReportTemplateList": "Selected fields on report template list",
-    "createNewReportTemplate": "Create New Report Template",
-    "emptyCreateTip": "Click the \"Create New Report Template\" button to add a report template.",
-    "list": "list",
-    "gotIt":"Got it",
-    "booking":"booking",
-    "shipment":"shipment",
-    "drag": "Drag",
-    "dragOperaterTips1": "items to the right group or click the",
-    "dragOperaterTips2": "icon to add columns to the",
-    "removeOperaterTips1": "items to the left group or click the",
-    "removeOperaterTips2": "icon to delete columns from the",
-    "remove": "Remove",
-    "add": "Add",
-    "action": "Action",
-    "dragItemsUpOrDownToReorderThe": "items up or down to reorder the",
-    "orUseTheMoveUpAndMoveDownIcons": "or use the \"Move up\" and \"Move down\" icons.",
-    "reportFieldsConfigurationNewFieldNameRequired": "Please enter the new field name.",
-    "reportFieldsConfigurationFixedValueRequired": "Please enter the fixed value.",
-    "reportFieldsConfigurationReportLevelRequired": "Please select the report level.",
-    "reportNameRequired": "Please enter the Report Name.",
-    "reportDescriptionRequired": "Please enter the Report Description.",
-    "savedSuccessfully": "Report Template saved successfully!",
-    "newFieldNameRequired": "Please enter a field name.",
-    "fixedValueRequired": "Please enter a fixed value.",
-    "reportLevelRequired": "Please enter the Report Level",
-    "reportFieldsConfigurationTitle": "Report Fields Configuration",
-    "addNewField": "Add New Field",
-    "selectField": "Select Field",
-    "addEditField": "Add/Edit Field",
-    "noFieldSelectedTip": "No field selected. click \"Add Field\" to get started.",
-    "reportNameLabel": "Report Name",
-    "reportLevelLabel": "Report Level",
-    "reportDescriptionLabel": "Report Description",
-    "filter": "Filter",
-    "sort": "Sort",
-    "addNewFieldTitle": "Add New Field",
-    "newFieldNameLabel": "New Field Name",
-    "fieldValueLabel": "Field Value",
-    "blankText": "Blank",
-    "fixedValueText": "Fixed Value",
-    "fixedValueLabel": "Fixed Value",
-    "mappingTitle": "Mapping (Field: Final Destination)",
-    "systemValueLabel": "System Value",
-    "outputValueLabel": "Output Value",
-    "addMapping": "Add Mapping",
-    "cancel": "Cancel",
-    "apply": "Apply",
-    "dragItemAddOperaterTips": "Drag item over to this selection or click \"add\" icon to show the field on report template list",
-    "containerLevelWillBeCleared": "If the Level value is \"Container Level\", the field will be cleared.",
-    "itemLevelWillBeCleared": "If the Level value is \"Item Level\", the field will be cleared.",
-    "itemOrContainerLevelWillBeCleared": "If the Level value is \"Item Level\" or \"Container Level\", the field will be cleared."
-  },
-  "aiApiLog": {
-    "title": "AI API Log",
-    "searchPlaceholder": "Search Request ID, Question ID",
-    "aiModel": "AI Model",
-    "responseDuration": "Response Duration",
-    "selected": "Selected",
-    "requestContent": "Request Content",
-    "responseContent": "Response Content",
-    "selectDataOnLogList": "Select data on your Operation Log list:",
-    "downloadWithSelectedColumns": "Download with selected columns",
-    "deepseek": "Deepseek",
-    "claude": "Claude",
-    "greaterOrEqual": ">=",
-    "equal": "=",
-    "lessOrEqual": "<=",
-    "download": "Download"
-  },
-  "operationLog": {
-    "title": "Operation Log",
-    "customizeColumns":"Customize Columns",
-    "openDetailedPage":"Open Detailed Page",
-    "closeDetailedPage":"Close Detailed Page",
-    "download":"Download",
-    "sendEmail":"Send Email",
-    "publicTracking":"Public Tracking",
-    "addReference":"Add Reference",
-    "uploadFile":"Upload File",
-    "amsIsf":"AMS/ISF",
-    "changePassword":"Change Password",
-    "logout":"Logout",
-    "profile":"Profile",
-    "personalProfile":"Personal Profile",
-    "subscribeNotifications":"Subscribe Notifications",
-    "monitoringSettings":"Monitoring Settings",
-    "notificationEventsForSubscribedShipments":"Notification Events for Subscribed Shipments",
-    "edit":"Edit",
-    "add":"Add",
-    "subscribedShipments":"Subscribed Shipments",
-    "addRule":"Add Rule",
-    "customizeYourShipmentTrackingPreferences":"Customize your shipment tracking preferences.",
-    "event":"Event",
-    "eventDetails":"Event Details",
-    "frequency":"Frequency",
-    "methods":"Methods",
-    "hbolHawb":"HBOL/HAWB",
-    "shipper":"Shipper",
-    "consignee":"Consignee",
-    "etd":"ETD",
-    "recentMilestone":"Recent Milestone",
-    "recentMilestoneTitle":"Recent Milestone",
-    "recentMilestoneDescription":"Recent Milestone",
-    "recentMilestoneButton":"Recent Milestone",
-    "recentMilestoneButtonText":"Recent Milestone",
-    "selectDataOnLogList": "Select data on your Operation Log list:",
-    "downloadWithSelectedColumns": "Download with selected columns",
-    "supportedReferenceTip1": "We support the following references number to find booking:",
-    "supportedReferenceTip2": "· Booking No./HAWB No./MAWB No./PO No./Carrier Booking No./Contract No./File No./Quote No."
-  },
+ 
   "notificationRules": {
     "shipmentRange": "Shipment Range",
     "selectMilestone": "Select Milestone",
@@ -716,23 +481,15 @@
     "queryFailedPleaseTryAgainLaterOrSelectFaq": "Sorry, the query failed. Please try again later or select a Frequently Asked Question",
     "youHaveStoppedThisAnswer": "You have stopped this answer",
     "disclaimerParagraph1": "This chat assistant is powered by artificial intelligence (AI) and is designed to help you access information and answer your queries efficiently. Please be aware of the following:",
-    "disclaimerBullet1Title": "AI-Generated Responses: ",
+    "disclaimerBullet1Title": "AI-Generated Responses: ",
     "disclaimerBullet1Text": "All responses are automatically generated by AI. While we strive for accuracy, errors or inaccuracies may occur. Please verify critical information independently before making business decisions.",
-    "disclaimerBullet2Title": "Data Privacy & Security:",
+    "disclaimerBullet2Title": "Data Privacy & Security:",
     "disclaimerBullet2Text": "You can only access shipment data within your authorized account permissions. Your data remains confidential and will not be shared with other users or third parties.",
-    "disclaimerBullet3Title": "Information Accuracy: ",
+    "disclaimerBullet3Title": "Information Accuracy: ",
     "disclaimerBullet3Text": "For critical business decisions or time-sensitive matters, we recommend contacting our customer service team directly for verification.",
-    "disclaimerBullet4Title": "Service Limitations: ",
+    "disclaimerBullet4Title": "Service Limitations: ",
     "disclaimerBullet4Text": "This assistant provides general guidance and data queries. For complex or specialized requests, please reach out to our support team.",
-    "disclaimerParagraph2": "By using this AI assistant, you acknowledge these limitations and agree to use the information provided accordingly.",
-    "aiGeneratedResponses": "AI-Generated Responses:",
-    "dataPrivacySecurity": "Data Privacy & Security:",
-    "informationAccuracy": "Information Accuracy:",
-    "serviceLimitations": "Service Limitations:",
-    "aiAcknowledgement": "By using this AI assistant, you acknowledge these limitations and agree to use the information provided accordingly.",
-    "sidebarWindowTip": "Sidebar Window",
-    "maximizedWindowTip": "Maximized Window",
-    "collapsedToWidgetTip": "Collapsed to Widget"
+    "disclaimerParagraph2": "By using this AI assistant, you acknowledge these limitations and agree to use the information provided accordingly."
   },
   "moreFilters": {
     "vessel": "Vessel",
@@ -756,8 +513,6 @@
     "billTo": "Bill to",
     "destinationOperator": "Destination Operator",
     "controllingCustomer": "Controlling Customer",
-    "inputShipperName": "Please input shipper name",
-    "inputConsigneeName": "Please input consignee name",
     "inputPartyName": "Please input party name",
     "morePartyType": "More Party Type"
   },
@@ -800,7 +555,6 @@
     "earliestTime": "Earliest Time",
     "latestTime": "Latest Time",
     "today": "Today",
-    "current": "Current",
     "currentMonth": "Current Month",
     "lastMonth": "Last Month",
     "thisYear": "This Year",
@@ -811,7 +565,6 @@
   },
   "systemSettings": {
     "title": "System Settings",
-    "profile": "Profile",
     "personalProfileTab": "Personal Profile",
     "subscribeNotificationsTab": "Subscribe Notifications",
     "monitoringSettingsTab": "Monitoring Settings",
@@ -883,12 +636,6 @@
     "revenueSpentTip": "Revenue Spent: Based on the billto object, display the corresponding revenue data.",
     "revenueSpentTitle": "Revenue Spent",
     "resetZoom": "Reset Zoom",
-    "departure": "Departure",
-    "arrival": "Arrival",
-    "satisfactionQuestionWithSpace": "Satisfaction Question ",
-    "shareYourFeedback": "Share your feedback",
-    "feedbackPlaceholder": "Please enter your feedback.",
-    "submitSuccessful": "Submit successfully",
     "scoringSorryText": "We are so sorry for the inconveniences. We value your experience immensely.",
     "scoringDissatisfiedTip": "Could you please tell us which aspects of the system you are dissatisfied with?",
     "scoringNeutralText": "Thank you for sharing your thoughts with us. We value your experience greatly.",
@@ -911,7 +658,13 @@
     "submitAndCommitment": "We are committed to working hard to provide better services.",
     "apologizeAgain": "Apologize once again for your experience.",
     "appreciateFeedback": "We greatly appreciate your valuable time and feedback.",
-    "thankYouPositive": "Once again, thank you for your positive evaluation."
+    "thankYouPositive": "Once again, thank you for your positive evaluation.",
+    "guidePageGuide": "After closing, you can still click the \"Page Guide\" button to view the page guide of the current page.",
+    "guideDashboardIntro": "The Dashboard integrates different types of reports. You can freely select the reports you need.",
+    "guideDashboardFilter": "Each report comes with its own filter options. Simply make your selection and click \"Search\" to refresh the data.",
+    "guideDashboardTooltip": "Hover the icon next to the report name to view the data explanation for each report.",
+    "guideDashboardDrag": "Drag the icon to rearrange the report cards on the dashboard.",
+    "guideDashboardSaveLayout": "Click \"Save Layout\" to preserve your customized report arrangement."
   },
   "booking": {
     "title": "Booking",
@@ -928,14 +681,11 @@
     "searchPlaceholder": "Enter Booking/HBL/PO/Container/Carrier Booking No. ",
     "selectReferenceTypePlaceholder": "Select Reference Type",
     "selected": "Selected",
-    "total": "Total",
     "transportMode": "Transport Mode",
     "shipmentStatus": "Shipment Status",
     "bookingListEmptyTipLine1": "We support the following references number to find booking:",
-    "bookingListEmptyTip2": "Booking No./HAWB No./MAWB No./PO No./Carrier Booking No./Contract No./File No./Quote No.",
     "etd": "ETD",
     "textSearch": "text search",
-    "clearFilters": "Clear Filters",
     "bookingNo": "Booking No.",
     "hawbHblNo": "HAWB/HBL No.",
     "carrierBookingNo": "Carrier Booking No.",
@@ -959,7 +709,6 @@
     "marksAndDescription": "Marks and Description",
     "bookingListEmptyTip": "We support the following references number to find booking:",
     "bookingListEmptyTipDetail": "· Booking No./HAWB No./MAWB No./PO No./Carrier Booking No./Contract No./File No./Quote No.",
-    "noResultsFound": "No Results Found",
     "basicInformation": "Basic Information",
     "businessPartners": "Business Partners",
     "containers": "Containers",
@@ -982,14 +731,7 @@
     "guideCustomizeColumnsLeft": "Drag to left to unselect columns",
     "guideCustomizeColumnsReorder": "Drag up and down to reorder or select/unselect",
     "guidePageGuide": "After closing, you can still click the \"Page Guide\" button to view the page guide of the current page.",
-    "guideDashboardIntro": "The Dashboard integrates different types of reports. You can freely select the reports you need.",
-    "guideDashboardFilter": "Each report comes with its own filter options. Simply make your selection and click \"Search\" to refresh the data.",
-    "guideDashboardTooltip": "Hover the icon next to the report name to view the data explanation for each report.",
-    "guideDashboardDrag": "Drag the icon to rearrange the report cards on the dashboard.",
-    "guideDashboardSaveLayout": "Click \"Save Layout\" to preserve your customized report arrangement.",
     "openInNewTab": "Open in New Tab",
-   
-    
     "tdReferenceType": "Reference Type",
     "tdAction": "Action"
   },
@@ -1035,7 +777,6 @@
     "created": "Created",
     "modified": "Modified",
     "pending": "Pending",
-    "confirmed": "Confirmed",
     "current": "Current",
 
     "deliveryDate": "Delivery Date",
@@ -1121,16 +862,12 @@
     "unsavedChanges": "There are unsaved changes.",
     "confirmLeavePage": "Are you sure you want to leave this page?",
     "unsavedChangesTitle": "Unsaved Changes",
-    "pleaseSelectNotificationEventsFirst": "Please select Notification Events first",
     "specificRule": "Specific Rule",
     "singleDimension": "Single Dimension",
-    "defaultRule": "Default Rule",
-    "noSpecificRecommendedTimeForChoosingDeliveryDate": "No Specific recommended time for choosing delivery date",
+    "deliveryDateTips": "No Specific recommended time for choosing delivery date",
     "recommendDeliveryDate": "Recommend Delivery Date (ETA/ATA)",
     "etdAtdRuleWindow": "ETD/ATD: {before} days before to {after} days after",
     "etaAtaRuleWindow": "ETA/ATA: {before} days before to {after} days after",
-    "ok": "OK",
-    "savingSuccess": "Saving successful",
     "air": "Air",
     "sea": "Sea",
     "ctns": "ctns",
@@ -1143,14 +880,6 @@
     "add": "Add",
     "configureRegionsAndTimeSlots": "Configure available destination delivery regions and time slots.",
     "addRule": "Add Rule",
-    "customizeYourShipmentTrackingPreferences": "Customize your shipment tracking preferences.",
-    "event": "Event",
-    "eventDetails": "Event Details",
-    "frequency": "Frequency",
-    "methods": "Methods",
-    "hbolHawb": "HBOL/HAWB",
-    "etd": "ETD",
-    "recentMilestone": "Recent Milestone",
     "deleteRule": "Delete Rule",
     "confirmDeleteRule": "Are you sure to delete this notification event?",
     "configuration": "Configuration",
@@ -1161,7 +890,6 @@
     "noTimeRestrictionsForBooking": "No Specific time restrictions for creating booking",
     "bookingWindowEtdAtd": "Booking Window (ETD/ATD)",
     "bookingWindowEtaAta": "Booking Window (ETA/ATA)",
-    "revenueSpentTitle": "Revenue Spent",
     "daysBeforeTo": "days before to",
     "daysAfter": "days after",
     "stationList": "Station List",
@@ -1171,7 +899,6 @@
     "total": "Total",
     "shipments": "shipments",
     "totalCartons": "Total Cartons",
-    "packingList": "Packing List",
     "bookingDetail": "Booking Detail",
     "confirmRejectBooking": "Are you sure you want to Reject Booking ",
     "confirmApproveBooking": "Are you sure you want to Approve Booking ",

+ 1 - 1
src/locales/zh-cn.json

@@ -886,7 +886,7 @@
     "specificRule": "Specific Rule",
     "singleDimension": "Single Dimension",
     "defaultRule": "Default Rule",
-    "noSpecificRecommendedTimeForChoosingDeliveryDate": "No Specific recommended time for choosing delivery date",
+    "deliveryDateTips": "No Specific recommended time for choosing delivery date",
     "recommendDeliveryDate": "Recommend Delivery Date (ETA/ATA)",
     "etdAtdRuleWindow": "ETD/ATD: {before} days before to {after} days after",
     "etaAtaRuleWindow": "ETA/ATA: {before} days before to {after} days after",

+ 10 - 14
src/views/AIApiLog/src/AIApiLog.vue

@@ -2,9 +2,6 @@
 import { useCalculatingHeight } from '@/hooks/calculatingHeight'
 import TableView from './components/TableView'
 import dayjs from 'dayjs'
-import { useI18n } from 'vue-i18n'
-
-const { t } = useI18n()
 
 const filterRef: Ref<HTMLElement | null> = ref(null)
 const containerHeight = useCalculatingHeight(document.documentElement, 290, [filterRef])
@@ -19,26 +16,26 @@ const searchData = ref({
 
 const aiModelList = [
   {
-    label: t('aiApiLog.deepseek'),
+    label: 'Deepseek',
     value: 'Deepseek'
   },
   {
-    label: t('aiApiLog.claude'),
+    label: 'Claude',
     value: 'Claude'
   }
 ]
 
 const comparatorList = [
   {
-    label: t('aiApiLog.greaterOrEqual'),
+    label: '>=',
     value: 'thanOrEqual'
   },
   {
-    label: t('aiApiLog.equal'),
+    label: '=',
     value: 'equal'
   },
   {
-    label: t('aiApiLog.lessOrEqual'),
+    label: '<=',
     value: 'lessOrEqual'
   }
 ]
@@ -61,12 +58,12 @@ const DateChange = (date: any) => {
 </script>
 <template>
   <div class="dashboard">
-    <div class="Title">{{ t('aiApiLog.title') }}</div>
+    <div class="Title">AI API Log</div>
     <div class="display">
       <div class="heaer_top">
         <div class="input-tips_filter">
           <el-input
-            :placeholder="t('aiApiLog.searchPlaceholder')"
+            placeholder="Search Request ID、Question ID"
             v-model="searchData.text_search"
             class="log_input"
           >
@@ -84,7 +81,7 @@ const DateChange = (date: any) => {
           <CalendarDate @DateChange="DateChange"></CalendarDate>
         </div>
         <div class="tips_filter">
-          <el-select v-model="searchData.ai_model" clearable :placeholder="t('aiApiLog.aiModel')">
+          <el-select v-model="searchData.ai_model" clearable placeholder="AI Model">
             <el-option
               v-for="item in aiModelList"
               :key="item.value"
@@ -94,7 +91,7 @@ const DateChange = (date: any) => {
           </el-select>
         </div>
         <div class="comparator-tips_filter">
-          <span>{{ t('aiApiLog.responseDuration') }}</span>
+          <span>Response Duration</span>
           <el-select
             placeholder=""
             clearable
@@ -118,7 +115,7 @@ const DateChange = (date: any) => {
           ></el-input-number>
         </div>
 
-        <el-button class="el-button--dark" @click="Search">{{ t('common.search') }}</el-button>
+        <el-button class="el-button--dark" @click="Search">Search</el-button>
       </div>
     </div>
     <TableView :height="containerHeight" ref="tableRef"></TableView>
@@ -173,7 +170,6 @@ const DateChange = (date: any) => {
     height: 32px;
   }
 }
-
 .date-tips_filter {
   flex: 1;
   max-width: 250px;

+ 4 - 7
src/views/AIApiLog/src/components/LogDialog.vue

@@ -1,9 +1,6 @@
 <script setup lang="ts">
 import VueJsonPretty from 'vue-json-pretty'
 import 'vue-json-pretty/lib/styles.css'
-import { useI18n } from 'vue-i18n'
-
-const { t } = useI18n()
 
 const dialogVisible = ref(false)
 
@@ -38,19 +35,19 @@ defineExpose({
     v-model="dialogVisible"
     class="ai-api-log-dialog"
     @closed="clearData"
-    :title="t('aiApiLog.title')"
+    title="AI API Log"
     width="1000"
     top="10vh"
   >
     <div class="request-section">
-      <div class="title">{{ t('aiApiLog.requestContent') }}</div>
+      <div class="title">Request Content</div>
       <div class="content" ref="requestContentRef">
         {{ requestContent }}
       </div>
     </div>
     <el-divider style="margin: 16px 0" />
     <div class="response-section">
-      <div class="title">{{ t('aiApiLog.responseContent') }}</div>
+      <div class="title">Response Content</div>
       <div class="content" :style="{ height: responseHeight + 'px' }">
         <vue-json-pretty :data="responseContent" :deep="4" />
       </div>
@@ -94,4 +91,4 @@ defineExpose({
     background-color: var(--color-json-item-hover);
   }
 }
-</style>
+</style>

+ 5 - 10
src/views/AIApiLog/src/components/TableView/src/TableView.vue

@@ -1,7 +1,4 @@
 <script setup lang="ts">
-import { useI18n } from 'vue-i18n'
-
-const { t } = useI18n()
 import { ref, nextTick, onMounted } from 'vue'
 import { type VxeGridInstance, type VxeGridProps } from 'vxe-table'
 import DownloadDialog from './components/DownloadDialog.vue'
@@ -307,7 +304,7 @@ const exportTable = (status: number) => {
   const exportConfig: any = {
     type: 'xlsx',
     message: false,
-    filename: `${t('aiApiLog.title')}_${dayjs().format('YYYYMMDDHH[h]mm[m]ss[s]')}`
+    filename: `AI API Log_${dayjs().format('YYYYMMDDHH[h]mm[m]ss[s]')}`
   }
   if (status === 1) {
     exportConfig.columnFilterMethod = ({ column }: any) => {
@@ -345,7 +342,7 @@ const handleCheckAllChange = ({ records }: any) => {
 
 const logDialogRef = ref()
 const logLoading = ref(false)
-const handleLinkClick = (row: any) => {
+const handleLinkClick = (row) => {
   logLoading.value = true
   $api
     .getAIApiLogDialog({
@@ -382,11 +379,11 @@ defineExpose({
       element-loading-custom-class="element-loading"
       element-loading-background="rgb(43, 47, 54, 0.7)"
     >
-      <div class="left-total-records">{{ selectedNumber }} {{ t('aiApiLog.selected') }}</div>
+      <div class="left-total-records">{{ selectedNumber }} Selected</div>
       <div class="right-tools-btn">
         <el-button class="el-button--main el-button--pain-theme" @click="handleDownload">
           <span style="margin-right: 8px" class="font_family icon-icon_download_b"></span>
-          {{ t('tracking.download') }}
+          Download
         </el-button>
       </div>
     </div>
@@ -411,9 +408,7 @@ defineExpose({
     </vxe-grid>
     <vxe-grid :height="10" ref="allTableRef" class="all-table" v-bind="allTable"> </vxe-grid>
     <div class="bottom-pagination">
-      <div class="left-total-records">
-        {{ t('common.total') }} {{ formatNumber(pageInfo.total) }}
-      </div>
+      <div class="left-total-records">Total {{ formatNumber(pageInfo.total) }}</div>
       <div class="right-pagination">
         <el-pagination
           v-model:current-page="pageInfo.pageNo"

+ 11 - 18
src/views/AIApiLog/src/components/TableView/src/components/DownloadDialog.vue

@@ -1,7 +1,4 @@
 <script setup lang="ts">
-import { useI18n } from 'vue-i18n'
-
-const { t } = useI18n()
 const props = withDefaults(
   defineProps<{
     isHideSelectColumn: boolean
@@ -41,23 +38,19 @@ defineExpose({
 
 <template>
   <div>
-    <el-dialog
-      @close="clearData"
-      v-model="dialogVisible"
-      :title="t('common.downloadFile')"
-      width="540"
-    >
+    <el-dialog @close="clearData" v-model="dialogVisible" title="Download File" width="540">
       <div class="download-dialog">
         <div class="select-data">
           <div style="display: inline-block">
-            {{ t('aiApiLog.selectDataOnLogList')
-            }}<span style="color: var(--color-theme)">{{ selectedDataNumber }}</span>
+            Select data on your Opeartion Log list:<span style="color: var(--color-theme)">{{
+              selectedDataNumber
+            }}</span>
           </div>
         </div>
         <div class="download-filter" v-if="!props.isHideSelectColumn">
           <el-radio-group v-model="downloadFilter">
             <el-radio :value="1"
-              >{{ t('aiApiLog.downloadWithSelectedColumns') }}
+              >Download with selected columns
               <span class="column-number">{{ columns.length }}</span>
               <SeeAllIcon v-model="isShowSelectColumn" />
             </el-radio>
@@ -66,23 +59,23 @@ defineExpose({
               class="select-columns"
               :class="{ show: isShowSelectColumn }"
             >
-              <div class="title">{{ t('common.selectedColumns') }}</div>
+              <div class="title">Selected columns</div>
               <div class="content">
                 <div class="column-item" v-for="item in columns" :key="item">{{ item }}</div>
               </div>
             </div>
-            <el-radio :value="2">{{ t('common.downloadWithAllColumns') }}</el-radio>
+            <el-radio :value="2">Download with all columns</el-radio>
           </el-radio-group>
         </div>
       </div>
       <template #footer>
         <div class="dialog-footer">
-          <el-button class="cancel-btn" type="default" @click="dialogVisible = false">{{
-            t('common.cancel')
-          }}</el-button>
+          <el-button class="cancel-btn" type="default" @click="dialogVisible = false"
+            >Cancel</el-button
+          >
           <el-button class="download-btn el-button--dark" @click="handleDownload"
             ><span style="margin-right: 8px" class="font_family icon-icon_download_b"></span>
-            {{ t('tracking.download') }}</el-button
+            Download</el-button
           >
         </div>
       </template>

+ 29 - 7
src/views/AIRobotChat/src/AIRobotChat.vue

@@ -355,7 +355,11 @@ defineExpose({
       <div class="header">
         <span class="welcome">{{ t('aiRobot.greeting') }}</span>
         <div class="option-icon">
-          <el-tooltip v-if="modalSize === 'large'" trigger="hover" :content="t('aiRobot.sidebarWindow')">
+          <el-tooltip
+            v-if="modalSize === 'large'"
+            trigger="hover"
+            :content="t('aiRobot.sidebarWindow')"
+          >
             <el-button
               style="width: 24px; height: 24px"
               class="el-button--text"
@@ -364,7 +368,11 @@ defineExpose({
             ></el-button>
           </el-tooltip>
 
-          <el-tooltip v-else-if="modalSize !== 'large'" trigger="hover" :content="t('aiRobot.maximizedWindow')">
+          <el-tooltip
+            v-else-if="modalSize !== 'large'"
+            trigger="hover"
+            :content="t('aiRobot.maximizedWindow')"
+          >
             <el-button
               style="width: 24px; height: 24px"
               class="el-button--text"
@@ -504,7 +512,9 @@ defineExpose({
       </div>
       <div class="liability-exemption">
         <span>{{ t('aiRobot.contentGeneratedByAI') }}</span>
-        <span class="liability-exemption-btn" @click="handleLiabilityExeDialog">{{ t('aiRobot.disclaimerTitle') }}</span>
+        <span class="liability-exemption-btn" @click="handleLiabilityExeDialog">{{
+          t('aiRobot.disclaimerTitle')
+        }}</span>
       </div>
     </div>
     <el-dialog
@@ -521,10 +531,22 @@ defineExpose({
         {{ t('aiRobot.importantNoticeAI') }}
       </div>
       <p>{{ t('aiRobot.disclaimerParagraph1') }}</p>
-      <p><strong>{{ t('aiRobot.disclaimerBullet1Title') }}</strong>{{ t('aiRobot.disclaimerBullet1Text') }}</p>
-      <p><strong>{{ t('aiRobot.disclaimerBullet2Title') }}</strong>{{ t('aiRobot.disclaimerBullet2Text') }}</p>
-      <p><strong>{{ t('aiRobot.disclaimerBullet3Title') }}</strong>{{ t('aiRobot.disclaimerBullet3Text') }}</p>
-      <p><strong>{{ t('aiRobot.disclaimerBullet4Title') }}</strong>{{ t('aiRobot.disclaimerBullet4Text') }}</p>
+      <p>
+        <strong>• {{ t('aiRobot.disclaimerBullet1Title') }}</strong
+        >{{ t('aiRobot.disclaimerBullet1Text') }}
+      </p>
+      <p>
+        <strong>• {{ t('aiRobot.disclaimerBullet2Title') }}</strong
+        >{{ t('aiRobot.disclaimerBullet2Text') }}
+      </p>
+      <p>
+        <strong>• {{ t('aiRobot.disclaimerBullet3Title') }}</strong
+        >{{ t('aiRobot.disclaimerBullet3Text') }}
+      </p>
+      <p>
+        <strong>• {{ t('aiRobot.disclaimerBullet4Title') }}</strong
+        >{{ t('aiRobot.disclaimerBullet4Text') }}
+      </p>
       <p>{{ t('aiRobot.disclaimerParagraph2') }}</p>
     </el-dialog>
   </div>

+ 19 - 30
src/views/ChatLog/src/ChatLog.vue

@@ -2,9 +2,6 @@
 import { useCalculatingHeight } from '@/hooks/calculatingHeight'
 import TableView from './components/TableView'
 import dayjs from 'dayjs'
-import { useI18n } from 'vue-i18n'
-
-const { t } = useI18n()
 
 const filterRef: Ref<HTMLElement | null> = ref(null)
 const containerHeight = useCalculatingHeight(document.documentElement, 290, [filterRef])
@@ -22,53 +19,53 @@ const searchData = ref({
 
 const userTypeList = [
   {
-    label: t('common.customer'),
+    label: 'Customer',
     value: 'customer'
   },
   {
-    label: t('common.employee'),
+    label: 'Employee',
     value: 'employee'
   }
 ]
 const questionTypeList = [
   {
-    label: t('common.predefinedQuestion'),
+    label: 'Predefined Question',
     value: 'Predefined Question'
   },
   {
-    label: t('common.freeText'),
+    label: 'Free Text',
     value: 'Free Text'
   }
 ]
 const AnswerTypeList = [
   {
-    label: t('common.suspend'),
+    label: 'Suspend',
     value: 'Suspend'
   },
   {
-    label: t('common.timeout'),
+    label: 'Timeout',
     value: 'Timeout'
   },
   {
-    label: t('common.predefinedTemplate'),
+    label: 'Predefined Template',
     value: 'Predefined Template'
   },
   {
-    label: t('common.aiAnswer'),
+    label: 'AI Answer',
     value: 'AI Answer'
   }
 ]
 const answerSatisfactionList = [
   {
-    label: t('common.null'),
+    label: 'Null',
     value: 'Null'
   },
   {
-    label: t('common.good'),
+    label: 'Good',
     value: 'Good'
   },
   {
-    label: t('common.notGood'),
+    label: 'Not Good',
     value: 'Not Good'
   }
 ]
@@ -105,12 +102,12 @@ const DateChange = (date: any) => {
 </script>
 <template>
   <div class="dashboard">
-    <div class="Title">{{ t('common.chatLog') }}</div>
+    <div class="Title">Chat Log</div>
     <div class="display">
       <div class="heaer_top">
         <div class="input-tips_filter">
           <el-input
-            :placeholder="t('common.searchChatPlaceholder')"
+            placeholder="Search Question ID、User"
             v-model="searchData.text_search"
             clearable
             class="log_input"
@@ -129,7 +126,7 @@ const DateChange = (date: any) => {
           <CalendarDate @DateChange="DateChange"></CalendarDate>
         </div>
         <div class="tips_filter">
-          <el-select v-model="searchData.user_type" clearable :placeholder="t('common.userType')">
+          <el-select v-model="searchData.user_type" clearable placeholder="User Type">
             <el-option
               v-for="item in userTypeList"
               :key="item.value"
@@ -139,11 +136,7 @@ const DateChange = (date: any) => {
           </el-select>
         </div>
         <div class="tips_filter">
-          <el-select
-            clearable
-            v-model="searchData.question_type"
-            :placeholder="t('common.questionType')"
-          >
+          <el-select clearable v-model="searchData.question_type" placeholder="Question Type">
             <el-option
               v-for="item in questionTypeList"
               :key="item.value"
@@ -154,11 +147,7 @@ const DateChange = (date: any) => {
           </el-select>
         </div>
         <div class="tips_filter">
-          <el-select
-            clearable
-            v-model="searchData.answer_type"
-            :placeholder="t('common.answerType')"
-          >
+          <el-select clearable v-model="searchData.answer_type" placeholder="Answer Type">
             <el-option
               v-for="item in AnswerTypeList"
               :key="item.value"
@@ -172,7 +161,7 @@ const DateChange = (date: any) => {
           <el-select
             clearable
             v-model="searchData.answer_satisfication"
-            :placeholder="t('common.answerSatisfaction')"
+            placeholder="Answer Satisfaction"
           >
             <el-option
               v-for="item in answerSatisfactionList"
@@ -184,7 +173,7 @@ const DateChange = (date: any) => {
           </el-select>
         </div>
         <div class="response_duration_type-tips_filter">
-          <span>{{ t('common.responseDuration') }}</span>
+          <span>Response Duration</span>
           <el-select
             clearable
             v-model="searchData.response_duration_type"
@@ -207,7 +196,7 @@ const DateChange = (date: any) => {
             style="width: 60px; height: 34px"
           ></el-input-number>
         </div>
-        <el-button class="el-button--dark" @click="Search">{{ t('common.search') }}</el-button>
+        <el-button class="el-button--dark" @click="Search">Search</el-button>
       </div>
     </div>
     <TableView :height="containerHeight" :searchData="searchData" ref="tableRef"></TableView>

+ 5 - 8
src/views/ChatLog/src/components/TableView/src/TableView.vue

@@ -1,7 +1,4 @@
 <script setup lang="ts">
-import { useI18n } from 'vue-i18n'
-
-const { t } = useI18n()
 import { ref, nextTick, onMounted } from 'vue'
 import { type VxeGridInstance, type VxeGridProps } from 'vxe-table'
 import DownloadDialog from './components/DownloadDialog.vue'
@@ -71,7 +68,7 @@ const getTableColumns = async () => {
       tableData.value.columns = [
         { type: 'checkbox', width: 50, fixed: 'left' },
         ...handleColumns(res.data.OperationTableColumns),
-        { title: t('common.operation'), width: 106, fixed: 'left', slots: { default: 'action' } }
+        { title: 'Action', width: 106, fixed: 'left', slots: { default: 'action' } }
       ]
       tableOriginColumnsField.value = res.data.OperationTableColumns
     }
@@ -383,11 +380,11 @@ defineExpose({
       element-loading-custom-class="element-loading"
       element-loading-background="rgb(43, 47, 54, 0.7)"
     >
-      <div class="left-total-records">{{ selectedNumber }} {{ t('common.selected') }}</div>
+      <div class="left-total-records">{{ selectedNumber }} Selected</div>
       <div class="right-tools-btn">
         <el-button class="el-button--main el-button--pain-theme" @click="handleDownload">
           <span style="margin-right: 8px" class="font_family icon-icon_download_b"></span>
-          {{ t('booking.download') }}
+          Download
         </el-button>
       </div>
     </div>
@@ -416,13 +413,13 @@ defineExpose({
             style="margin-right: 2px; font-size: 15px"
             class="font_family icon-icon_ai_api_log_b"
           ></span
-          >{{ t('aiApiLog.title') }}
+          >AI API Log
         </el-button>
       </template>
     </vxe-grid>
     <vxe-grid :height="10" ref="allTableRef" class="all-table" v-bind="allTable"> </vxe-grid>
     <div class="bottom-pagination">
-      <div class="left-total-records">{{ t('common.total') }} {{ formatNumber(pageInfo.total) }}</div>
+      <div class="left-total-records">Total {{ formatNumber(pageInfo.total) }}</div>
       <div class="right-pagination">
         <el-pagination
           v-model:current-page="pageInfo.pageNo"

+ 7 - 10
src/views/ChatLog/src/components/TableView/src/components/DownloadDialog.vue

@@ -1,7 +1,4 @@
 <script setup lang="ts">
-import { useI18n } from 'vue-i18n'
-
-const { t } = useI18n()
 const props = withDefaults(
   defineProps<{
     isHideSelectColumn: boolean
@@ -41,11 +38,11 @@ defineExpose({
 
 <template>
   <div>
-    <el-dialog @close="clearData" v-model="dialogVisible" :title="t('common.downloadFile')" width="540">
+    <el-dialog @close="clearData" v-model="dialogVisible" title="Download File" width="540">
       <div class="download-dialog">
         <div class="select-data">
           <div style="display: inline-block">
-            {{ t('aiApiLog.selectDataOnLogList') }}<span style="color: var(--color-theme)">{{
+            Select data on your Opeartion Log list:<span style="color: var(--color-theme)">{{
               selectedDataNumber
             }}</span>
           </div>
@@ -53,7 +50,7 @@ defineExpose({
         <div class="download-filter" v-if="!props.isHideSelectColumn">
           <el-radio-group v-model="downloadFilter">
             <el-radio :value="1"
-              >{{ t('destinationDelivery.downloadWithSelectedColumns') }}
+              >Download with selected columns
               <span class="column-number">{{ columns.length }}</span>
               <SeeAllIcon v-model="isShowSelectColumn" />
             </el-radio>
@@ -62,23 +59,23 @@ defineExpose({
               class="select-columns"
               :class="{ show: isShowSelectColumn }"
             >
-              <div class="title">{{ t('common.selectedColumns') }}</div>
+              <div class="title">Selected columns</div>
               <div class="content">
                 <div class="column-item" v-for="item in columns" :key="item">{{ item }}</div>
               </div>
             </div>
-            <el-radio :value="2">{{ t('common.downloadWithAllColumns') }}</el-radio>
+            <el-radio :value="2">Download with all columns</el-radio>
           </el-radio-group>
         </div>
       </div>
       <template #footer>
         <div class="dialog-footer">
           <el-button class="cancel-btn" type="default" @click="dialogVisible = false"
-            >{{ t('common.cancel') }}</el-button
+            >Cancel</el-button
           >
           <el-button class="download-btn el-button--dark" @click="handleDownload"
             ><span style="margin-right: 8px" class="font_family icon-icon_download_b"></span>
-            {{ t('tracking.download') }}</el-button
+            Download</el-button
           >
         </div>
       </template>

+ 31 - 11
src/views/DestinationDelivery/src/components/ConfiguRations/src/components/RecommendDate.vue

@@ -48,7 +48,9 @@ const isAir = ref(false)
 const isSea = ref(false)
 const RecommendCheckedList = ref<string[]>([])
 // 选项配置
-const AirRuleTypeoptions = ref<RuleOption[]>([{ label: t('destinationDelivery.specificRule'), value: 'Specific Rule' }])
+const AirRuleTypeoptions = ref<RuleOption[]>([
+  { label: t('destinationDelivery.specificRule'), value: 'Specific Rule' }
+])
 
 const RuleTypeoptions = ref<RuleOption[]>([
   { label: t('destinationDelivery.specificRule'), value: 'Specific Rule' },
@@ -413,7 +415,7 @@ const changeRuleType = (val: string, index: number, list: RuleItem[]) => {
 <template>
   <div>
     <el-radio-group v-model="Recommendradio" @change="ChangeFrequency">
-      <el-radio :value="1">{{ t('destinationDelivery.noSpecificRecommendedTimeForChoosingDeliveryDate') }}</el-radio>
+      <el-radio :value="1">{{ t('destinationDelivery.deliveryDateTips') }}</el-radio>
       <el-radio :value="2">
         <div>{{ t('destinationDelivery.recommendDeliveryDate') }}</div>
         <div v-if="isRecommendETA" class="oceanCheckbox">
@@ -429,9 +431,15 @@ const changeRuleType = (val: string, index: number, list: RuleItem[]) => {
               </div>
               <div v-if="isAir" class="radiocheckbox" style="margin-top: 16px; padding-left: 8px">
                 <div class="AirCoulumn">
-                  <div class="AicoulumnTitile" style="width: 10%">{{ t('destinationDelivery.priority') }}</div>
-                  <div class="AicoulumnTitile" style="width: 20%">{{ t('destinationDelivery.ruleType') }}</div>
-                  <div class="AicoulumnTitile" style="width: 40%">{{ t('destinationDelivery.port') }}</div>
+                  <div class="AicoulumnTitile" style="width: 10%">
+                    {{ t('destinationDelivery.priority') }}
+                  </div>
+                  <div class="AicoulumnTitile" style="width: 20%">
+                    {{ t('destinationDelivery.ruleType') }}
+                  </div>
+                  <div class="AicoulumnTitile" style="width: 40%">
+                    {{ t('destinationDelivery.port') }}
+                  </div>
                   <div
                     style="
                       display: flex;
@@ -440,7 +448,9 @@ const changeRuleType = (val: string, index: number, list: RuleItem[]) => {
                       width: 20%;
                     "
                   >
-                    <div class="AicoulumnTitile2">{{ t('destinationDelivery.recommendedDeliveryDate') }}</div>
+                    <div class="AicoulumnTitile2">
+                      {{ t('destinationDelivery.recommendedDeliveryDate') }}
+                    </div>
                     <div style="display: flex; height: 24px; align-items: center">
                       <div
                         class="datetitle"
@@ -531,10 +541,18 @@ const changeRuleType = (val: string, index: number, list: RuleItem[]) => {
               </div>
               <div v-if="isSea" style="margin-top: 16px; padding-left: 8px">
                 <div class="AirCoulumn">
-                  <div class="AicoulumnTitile" style="width: 10%">{{ t('destinationDelivery.priority') }}</div>
-                  <div class="AicoulumnTitile" style="width: 14%">{{ t('destinationDelivery.ruleType') }}</div>
-                  <div class="AicoulumnTitile" style="width: 23%">{{ t('destinationDelivery.port') }}</div>
-                  <div class="AicoulumnTitile" style="width: 23%">{{ t('destinationDelivery.carrier') }}</div>
+                  <div class="AicoulumnTitile" style="width: 10%">
+                    {{ t('destinationDelivery.priority') }}
+                  </div>
+                  <div class="AicoulumnTitile" style="width: 14%">
+                    {{ t('destinationDelivery.ruleType') }}
+                  </div>
+                  <div class="AicoulumnTitile" style="width: 23%">
+                    {{ t('destinationDelivery.port') }}
+                  </div>
+                  <div class="AicoulumnTitile" style="width: 23%">
+                    {{ t('destinationDelivery.carrier') }}
+                  </div>
                   <div
                     style="
                       display: flex;
@@ -543,7 +561,9 @@ const changeRuleType = (val: string, index: number, list: RuleItem[]) => {
                       width: 20%;
                     "
                   >
-                    <div class="AicoulumnTitile2">{{ t('destinationDelivery.recommendedDeliveryDate') }}</div>
+                    <div class="AicoulumnTitile2">
+                      {{ t('destinationDelivery.recommendedDeliveryDate') }}
+                    </div>
                     <div style="display: flex; height: 24px; align-items: center">
                       <div
                         class="datetitle"

+ 3 - 1
src/views/Login/src/components/ErrorTips.vue

@@ -25,7 +25,9 @@ defineExpose({
     <p class="blod-tips">{{ t('login.tooManyTries') }}</p>
     <p>{{ t('login.passwordAttemptsExceeded') }}</p>
     <p>
-      {{ t('login.tryAgainInFiveMinutesOrReset', { action: t('login.forgetPassword') }) }}
+      {{ t('login.errorTips1') }}
+      <a @click="handleForgetPassword">{{ t('login.forgetPassword') }}</a>
+      {{ t('login.errorTips2') }}
     </p>
     <template #footer>
       <el-button

+ 32 - 38
src/views/OperationLog/src/OperationLog.vue

@@ -3,9 +3,7 @@ import { ref } from 'vue'
 import { useCalculatingHeight } from '@/hooks/calculatingHeight'
 import CalendarDate from '@/components/DateRange/src/components/CalendarDate.vue'
 import BookingTable from './components/BookingTable'
-import { useI18n } from 'vue-i18n'
 
-const { t } = useI18n()
 const OperationSearch = ref()
 const filterRef: Ref<HTMLElement | null> = ref(null)
 const containerHeight = useCalculatingHeight(document.documentElement, 290, [filterRef])
@@ -14,129 +12,129 @@ const selectedPage = ref()
 const selectedOperation = ref()
 const usertypeoptions = ref([
   {
-    label: t('common.customer'),
+    label: 'Customer',
     value: 'Customer'
   },
   {
-    label: t('common.employee'),
+    label: 'Employee',
     value: 'Employee'
   }
 ])
 const Page = ref([
   {
-    label: t('common.login'),
+    label: 'Login',
     value: 'Login'
   },
   {
-    label: t('booking.title'),
+    label: 'Booking',
     value: 'Booking'
   },
   {
-    label: t('tracking.title'),
+    label: 'Tracking',
     value: 'Tracking'
   },
   {
-    label: t('common.logout'),
+    label: 'Logout',
     value: 'Logout'
   },
   {
-    label: t('systemSettings.profile'),
+    label: 'Profile',
     value: 'Profile'
   }
 ])
 const Operation = ref([
   {
-    label: t('common.login'),
+    label: 'Login',
     value: 'Login',
     page: 'Login'
   },
   {
-    label: t('common.search'),
+    label: 'Search',
     value: 'Search',
     page: 'Booking'
   },
   {
-    label: t('operationLog.customizeColumns'),
+    label: 'Customize Coulumns',
     value: 'Customize Coulumns',
     page: 'Booking'
   },
   {
-    label: t('operationLog.openDetailedPage'),
+    label: 'Open Detailed Page',
     value: 'Open Detailed Page',
     page: 'Booking'
   },
   {
-    label: t('operationLog.closeDetailedPage'),
+    label: 'Close Detailed Page',
     value: 'Close Detailed Page',
     page: 'Booking'
   },
   {
-    label: t('common.download'),
+    label: 'Download',
     value: 'Download',
     page: 'Booking'
   },
   {
-    label: t('booking.sendEmail'),
+    label: 'Send Email',
     value: 'Send Email',
     page: 'Booking'
   },
   {
-    label: t('operationLog.publicTracking'),
+    label: 'Public tracking',
     value: 'Public tracking',
     page: 'Tracking'
   },
   {
-    label: t('common.search'),
+    label: 'Search',
     value: 'Search',
     page: 'Tracking'
   },
   {
-    label: t('operationLog.customizeColumns'),
+    label: 'Customize Coulumns',
     value: 'Customize Coulumns',
     page: 'Tracking'
   },
   {
-    label: t('operationLog.openDetailedPage'),
+    label: 'Open Detailed Page',
     value: 'Open Detailed Page',
     page: 'Tracking'
   },
   {
-    label: t('operationLog.closeDetailedPage'),
+    label: 'Close Detailed Page',
     value: 'Close Detailed Page',
     page: 'Tracking'
   },
   {
-    label: t('common.download'),
+    label: 'Download',
     value: 'Download',
     page: 'Tracking'
   },
   {
-    label: t('operationLog.addReference'),
+    label: 'Add Reference',
     value: 'Add Reference',
     page: 'Tracking'
   },
   {
-    label: t('operationLog.uploadFile'),
+    label: 'Upload File',
     value: 'Upload File',
     page: 'Tracking'
   },
   {
-    label: t('booking.sendEmail'),
+    label: 'Send Email',
     value: 'Send Email',
     page: 'Tracking'
   },
   {
-    label: t('operationLog.amsIsf'),
+    label: 'AMS/ISF',
     value: 'AMS/ISF',
     page: 'Tracking'
   },
   {
-    label: t('common.logout'),
+    label: 'Logout',
     value: 'Logout',
     page: 'Logout'
   },
   {
-    label: t('common.changePassword'),
+    label: 'Change password',
     value: 'Change password',
     page: 'Profile'
   }
@@ -174,15 +172,11 @@ const DateChange = (date: any) => {
 </script>
 <template>
   <div class="dashboard">
-    <div class="Title">{{ t('operationLog.title') }}</div>
+    <div class="Title">Operation Log</div>
     <div class="display">
       <div class="heaer_top">
         <div class="search tips_filter">
-          <el-input
-            :placeholder="t('common.searchUserNamePlaceholder')"
-            v-model="OperationSearch"
-            class="log_input"
-          >
+          <el-input placeholder="Search user name" v-model="OperationSearch" class="log_input">
             <template #prefix>
               <span class="iconfont_icon">
                 <svg class="iconfont icon_dark" aria-hidden="true">
@@ -195,7 +189,7 @@ const DateChange = (date: any) => {
         <div class="tips_filter">
           <el-select
             v-model="UserType"
-            :placeholder="t('common.userType')"
+            placeholder="User Type"
             style="width: 144px"
             @change="changeUserType"
           >
@@ -214,7 +208,7 @@ const DateChange = (date: any) => {
           <el-select
             style="width: 144px"
             v-model="selectedPage"
-            :placeholder="t('common.page')"
+            placeholder="Page"
             @change="handlePageChange"
           >
             <el-option
@@ -230,7 +224,7 @@ const DateChange = (date: any) => {
           <el-select
             style="width: 144px"
             v-model="selectedOperation"
-            :placeholder="t('common.operation')"
+            placeholder="Operation"
             @change="handleOperationChange"
           >
             <el-option
@@ -242,7 +236,7 @@ const DateChange = (date: any) => {
             </el-option>
           </el-select>
         </div>
-        <el-button class="el-button--dark" @click="Search()">{{ t('common.search') }}</el-button>
+        <el-button class="el-button--dark" @click="Search()">Search</el-button>
       </div>
     </div>
     <BookingTable :height="containerHeight" ref="BookingTable_ref"></BookingTable>

+ 6 - 10
src/views/OperationLog/src/components/BookingTable/src/BookingTable.vue

@@ -7,9 +7,6 @@ import { useRowClickStyle } from '@/hooks/rowClickStyle'
 import dayjs from 'dayjs'
 import { useThemeStore } from '@/stores/modules/theme'
 import { formatTimezone, formatNumber } from '@/utils/tools'
-import { useI18n } from 'vue-i18n'
-
-const { t } = useI18n()
 
 const themeStore = useThemeStore()
 
@@ -359,11 +356,11 @@ defineExpose({
     element-loading-background="rgb(43, 47, 54, 0.7)"
   >
     <div class="table-tools">
-      <div class="left-total-records">{{ selectedNumber }} {{ t('common.selected') }}</div>
+      <div class="left-total-records">{{ selectedNumber }} Selected</div>
       <div class="right-tools-btn">
         <el-button class="el-button--main el-button--pain-theme" @click="handleDownload">
           <span style="margin-right: 8px" class="font_family icon-icon_download_b"></span>
-          {{ t('common.download') }}
+          Download
         </el-button>
       </div>
     </div>
@@ -381,10 +378,11 @@ defineExpose({
         <VEmpty>
           <template #suggestion>
             <p style="color: var(--color-neutral-3)">
-              {{ t('operationLog.supportedReferenceTip1') }}
+              We support the following references number to find booking:
             </p>
             <p style="color: var(--color-neutral-3)">
-              {{ t('operationLog.supportedReferenceTip2') }}
+              · Booking No./HAWB No./MAWB No./PO No./Carrier Booking No./Contract No./File No./Quote
+              No.
             </p>
           </template>
         </VEmpty>
@@ -392,9 +390,7 @@ defineExpose({
     </vxe-grid>
     <vxe-grid :height="10" ref="allTableRef" class="all-table" v-bind="allTable"> </vxe-grid>
     <div class="bottom-pagination">
-      <div class="left-total-records">
-        {{ t('common.total') }} {{ formatNumber(pageInfo.total) }}
-      </div>
+      <div class="left-total-records">Total {{ formatNumber(pageInfo.total) }}</div>
       <div class="right-pagination">
         <el-pagination
           v-model:current-page="pageInfo.pageNo"

+ 7 - 10
src/views/OperationLog/src/components/BookingTable/src/components/DownloadDialog.vue

@@ -1,7 +1,4 @@
 <script setup lang="ts">
-import { useI18n } from 'vue-i18n'
-
-const { t } = useI18n()
 const dialogVisible = ref(false)
 
 const openDialog = (selectedColumns: string[], slectedDataNumber: number) => {
@@ -35,11 +32,11 @@ defineExpose({
 
 <template>
   <div>
-    <el-dialog @close="clearData" v-model="dialogVisible" :title="t('common.downloadFile')" width="540">
+    <el-dialog @close="clearData" v-model="dialogVisible" title="Download File" width="540">
       <div class="download-dialog">
         <div class="select-data">
           <div style="display: inline-block">
-            {{ t('operationLog.selectDataOnLogList') }}<span style="color: var(--color-theme)">{{
+            Select data on your Opeartion Log list:<span style="color: var(--color-theme)">{{
               selectedDataNumber
             }}</span>
           </div>
@@ -47,7 +44,7 @@ defineExpose({
         <div class="download-filter">
           <el-radio-group v-model="downloadFilter">
             <el-radio :value="1"
-              >{{ t('operationLog.downloadWithSelectedColumns') }}
+              >Download with selected columns
               <span class="column-number">{{ columns.length }}</span>
               <SeeAllIcon v-model="isShowSelectColumn" />
             </el-radio>
@@ -56,23 +53,23 @@ defineExpose({
               class="select-columns"
               :class="{ show: isShowSelectColumn }"
             >
-              <div class="title">{{ t('common.selectedColumns') }}</div>
+              <div class="title">Selected columns</div>
               <div class="content">
                 <div class="column-item" v-for="item in columns" :key="item">{{ item }}</div>
               </div>
             </div>
-            <el-radio :value="2">{{ t('common.downloadWithAllColumns') }}</el-radio>
+            <el-radio :value="2">Download with all columns</el-radio>
           </el-radio-group>
         </div>
       </div>
       <template #footer>
         <div class="dialog-footer">
           <el-button class="cancel-btn" type="default" @click="dialogVisible = false"
-            >{{ t('common.cancel') }}</el-button
+            >Cancel</el-button
           >
           <el-button class="download-btn el-button--dark" @click="handleDownload"
             ><span style="margin-right: 8px" class="font_family icon-icon_download_b"></span>
-            {{ t('tracking.download') }}</el-button
+            Download</el-button
           >
         </div>
       </template>

+ 1 - 1
src/views/Report/src/components/ReportSchedule/src/components/FieldsTable.vue

@@ -151,7 +151,7 @@ defineExpose({
       <div class="flex">
         <div class="title">{{ t('report.reportDataReview') }}</div>
         <div class="flex">
-          <span class="sort-text">{{ t('report.sortBy') }}</span>
+          <span class="sort-text">{{ t('report.sortBy') }}:</span>
           <el-select
             style="width: 160px; margin: 0 8px"
             v-model="orderBy"

+ 18 - 20
src/views/TemplateManagement/src/TemplateManagement.vue

@@ -1,10 +1,8 @@
 <script lang="ts" setup>
-import { useI18n } from 'vue-i18n'
 import { useCalculatingHeight } from '@/hooks/calculatingHeight'
 import TableView from './components/TableView'
 import { useRouter } from 'vue-router'
 
-const { t } = useI18n()
 const router = useRouter()
 const filterRef: Ref<HTMLElement | null> = ref(null)
 const containerHeight = useCalculatingHeight(document.documentElement, 250, [filterRef])
@@ -17,27 +15,27 @@ const queryData = ref({
 
 const aiModelList = ref([])
 
-const activeOptions = computed(() => [
+const activeOptions = [
   {
-    label: t('templateManagement.active'),
+    label: 'Active',
     value: true
   },
   {
-    label: t('templateManagement.inactive'),
+    label: 'Inactive',
     value: false
   }
-])
+]
 
-const applicationScopeOptions = computed(() => [
+const applicationScopeOptions = [
   {
-    label: t('templateManagement.allUsers'),
+    label: 'All Users',
     value: 'all'
   },
   {
-    label: t('templateManagement.specificUsers'),
+    label: 'Specific Users',
     value: 'specific'
   }
-])
+]
 
 const tableRef = ref()
 
@@ -103,7 +101,7 @@ const remoteMethod = (query: string) => {
     .catch((err) => {
       options.value = []
       if (!axios.isCancel(err) && !newController.signal.aborted) {
-        ElMessage.error(t('common.failedToLoadOptions'))
+        ElMessage.error('Failed to load options')
       }
     })
     .finally(() => {
@@ -124,16 +122,16 @@ onUnmounted(() => {
 <template>
   <div class="dashboard">
     <div class="Title">
-      <span>{{ t('templateManagement.title') }}</span>
+      <span>Report Template Management</span>
       <el-button class="el-button--main" @click="handleCreate">
-        <span class="font_family icon-icon_add_b"></span> {{ t('templateManagement.createNew') }}</el-button
+        <span class="font_family icon-icon_add_b"></span> Create New Report Template</el-button
       >
     </div>
     <div class="display">
       <div class="heaer_top">
         <div class="input-tips_filter">
           <el-input
-            :placeholder="t('templateManagement.searchReportNamePlaceholder')"
+            placeholder="Search report name"
             v-model="queryData.text_search"
             class="log_input"
           >
@@ -148,10 +146,10 @@ onUnmounted(() => {
         </div>
 
         <div class="tips_filter">
-          <el-select v-model="queryData.is_active" clearable :placeholder="t('templateManagement.isActivePlaceholder')">
+          <el-select v-model="queryData.is_active" clearable placeholder="Is Active">
             <el-option
               v-for="item in activeOptions"
-              :key="String(item.value)"
+              :key="item.label"
               :label="item.label"
               :value="item.value"
             />
@@ -161,11 +159,11 @@ onUnmounted(() => {
           <el-select
             v-model="queryData.application_scope"
             clearable
-            :placeholder="t('templateManagement.applicationScopePlaceholder')"
+            placeholder="Application Scope"
           >
             <el-option
               v-for="item in applicationScopeOptions"
-              :key="item.value"
+              :key="item.label"
               :label="item.label"
               :value="item.value"
             />
@@ -177,7 +175,7 @@ onUnmounted(() => {
             multiple
             filterable
             reserve-keyword
-            :placeholder="t('templateManagement.partyIdsPlaceholder')"
+            placeholder="Party IDs"
             :loading="loading"
             collapse-tags
             collapse-tags-tooltip
@@ -202,7 +200,7 @@ onUnmounted(() => {
           </el-select>
         </div>
 
-        <el-button class="el-button--dark" @click="Search">{{ t('common.search') }}</el-button>
+        <el-button class="el-button--dark" @click="Search">Search</el-button>
       </div>
     </div>
     <TableView :height="containerHeight" ref="tableRef"></TableView>

+ 26 - 31
src/views/TemplateManagement/src/components/CreateReportTemplate/src/CreateReportTemplate.vue

@@ -4,11 +4,9 @@ import partyIDSelect from './components/partyIDSelect.vue'
 import GroupNameSelect from './components/GroupNameSelect.vue'
 import AccountSelect from './components/AccountSelect.vue'
 import ReportFieldsConfiguration from './components/ReportFieldsConfiguration.vue'
-import { useI18n } from 'vue-i18n'
 
 const router = useRouter()
 const route = useRoute()
-const { t } = useI18n()
 
 const infoData = ref({
   reportName: '',
@@ -141,15 +139,15 @@ const changeOldLevel = (val: string) => {
 const handlePageSave = () => {
   let verified = true
   if (!infoData.value.reportName.trim()) {
-    ElMessage.warning(t('templateManagement.reportNameRequired'))
+    ElMessage.warning('Please enter the Report Name.')
     verified = false
   }
   if (!infoData.value.reportLevel) {
-    ElMessage.warning(t('templateManagement.reportLevelRequired'))
+    ElMessage.warning('Please enter the Report Level')
     verified = false
   }
   if (!infoData.value.reportDescription.trim()) {
-    ElMessage.warning(t('templateManagement.reportDescriptionRequired'))
+    ElMessage.warning('Please enter the Report Description.')
     verified = false
   }
   if (
@@ -158,7 +156,9 @@ const handlePageSave = () => {
     !specificRoles.value.groupName?.length &&
     !specificRoles.value.systemAccount?.length
   ) {
-    ElMessage.warning(t('templateManagement.specificRolesRequired'))
+    ElMessage.warning(
+      'Please select Party ID or Group Name or KLN ONLINE Account for Specific Roles access control.'
+    )
     verified = false
   }
   if (!verified) {
@@ -183,10 +183,10 @@ const handlePageSave = () => {
     .saveNewReportTemplate({ ...data, serial_no })
     .then((res: any) => {
       if (res.code === 200) {
-        ElMessage.success(t('templateManagement.savedSuccessfully'))
+        ElMessage.success('Report Template saved successfully!')
         router.push('/template-management')
       } else {
-        ElMessage.error(res.data.msg || t('templateManagement.saveFailed'))
+        ElMessage.error(res.data.msg || 'Failed to save Report Template.')
       }
     })
     .finally(() => {
@@ -197,42 +197,39 @@ const handlePageSave = () => {
 <template>
   <div class="dashboard" v-vloading="pageLoading">
     <div class="title">
-      <span>{{ t('templateManagement.createNew') }}</span>
+      <span>Create New Report Template</span>
       <div class="button-group">
         <el-button type="default" @click="handleCancel">
           <span class="font_family icon-icon_return_b" style="margin-right: 3px"></span
-          >{{ t('common.cancel') }}</el-button
+          >Cancel</el-button
         >
         <el-button class="el-button--main" @click="handlePageSave">
           <span class="font_family icon-icon_save_b" style="margin-right: 3px"></span
-          >{{ t('common.save') }}</el-button
+          >Save</el-button
         >
       </div>
     </div>
     <div class="display">
       <div class="basic-info template-box">
-        <div class="header">{{ t('templateManagement.basicReportInformation') }}</div>
+        <div class="header">Basic Report Information</div>
         <div class="content-box">
           <div class="info-item" style="display: flex; gap: 8px">
             <div class="report-name" style="flex: 1">
               <div class="label">
                 <span style="color: var(--color-danger)">*</span>
-                <span>{{ t('templateManagement.reportNameLabel') }}</span>
+                <span>Report Name</span>
               </div>
-              <el-input
-                v-model="infoData.reportName"
-                :placeholder="t('report.pleaseEnter')"
-              ></el-input>
+              <el-input v-model="infoData.reportName" placeholder="Please enter..."></el-input>
             </div>
             <div class="report-level" style="flex: 1">
               <div class="label">
                 <span style="color: var(--color-danger)">*</span>
-                <span>{{ t('templateManagement.reportLevelLabel') }}</span>
+                <span>Report Level</span>
               </div>
               <el-select
                 v-model="infoData.reportLevel"
                 @change="changeLevel"
-                :placeholder="t('report.pleaseSelect')"
+                placeholder="Please enter..."
               >
                 <el-option
                   v-for="item in levelOptions"
@@ -246,12 +243,12 @@ const handlePageSave = () => {
           <div class="info-item">
             <div class="label">
               <span style="color: var(--color-danger)">*</span>
-              <span>{{ t('templateManagement.reportDescriptionLabel') }}</span>
+              <span>Report Description</span>
             </div>
             <el-input
               type="textarea"
               v-model="infoData.reportDescription"
-              :placeholder="t('report.pleaseEnter')"
+              placeholder="Please enter..."
             ></el-input>
           </div>
         </div>
@@ -264,7 +261,7 @@ const handlePageSave = () => {
         ref="fieldsConfigurationRef"
       ></ReportFieldsConfiguration>
       <div class="report-access-control template-box">
-        <div class="header">{{ t('templateManagement.reportAccessControl') }}</div>
+        <div class="header">Report Access Control</div>
         <div class="content-box">
           <el-radio-group
             class="radio-group"
@@ -274,9 +271,9 @@ const handlePageSave = () => {
             <el-radio class="radio-item" value="All Users">
               <template #default>
                 <div class="radio-content">
-                  <p class="label">{{ t('templateManagement.allUsers') }}</p>
+                  <p class="label">All Users</p>
                   <p class="description">
-                    {{ t('templateManagement.allUsersDescription') }}
+                    This report will be available to all users in the system
                   </p>
                 </div>
               </template>
@@ -285,10 +282,8 @@ const handlePageSave = () => {
               <template #default>
                 <div class="radio-content">
                   <div class="top-options">
-                    <p class="label">{{ t('templateManagement.specificRoles') }}</p>
-                    <p class="description">
-                      {{ t('templateManagement.specificRolesDescription') }}
-                    </p>
+                    <p class="label">Specific Roles</p>
+                    <p class="description">Restrict access to specific user roles</p>
                   </div>
                   <div
                     class="extended-filter"
@@ -299,7 +294,7 @@ const handlePageSave = () => {
                     <div class="filter-item" style="margin-bottom: 16px">
                       <div class="label">
                         <span style="color: var(--color-danger)">*</span>
-                        <span>{{ t('templateManagement.partyId') }}</span>
+                        <span>Party ID</span>
                       </div>
                       <partyIDSelect
                         @change-data="changePartyId"
@@ -309,7 +304,7 @@ const handlePageSave = () => {
                     <div class="filter-item" style="margin-bottom: 16px">
                       <div class="label">
                         <span style="color: var(--color-danger)">*</span>
-                        <span>{{ t('templateManagement.groupName') }}</span>
+                        <span>Group Name</span>
                       </div>
                       <GroupNameSelect
                         @change-data="changeGroupName"
@@ -319,7 +314,7 @@ const handlePageSave = () => {
                     <div class="filter-item">
                       <div class="label">
                         <span style="color: var(--color-danger)">*</span>
-                        <span>{{ t('templateManagement.klnOnlineAccount') }}</span>
+                        <span>KLN ONLINE Account</span>
                       </div>
                       <AccountSelect
                         @change-data="changeAccount"

+ 2 - 5
src/views/TemplateManagement/src/components/CreateReportTemplate/src/components/AccountSelect.vue

@@ -1,10 +1,7 @@
 <script setup lang="ts">
-import { useI18n } from 'vue-i18n'
 import { cloneDeep, debounce } from 'lodash'
 import axios from 'axios'
 
-const { t } = useI18n()
-
 const props = defineProps({
   data: {
     type: Array as () => string[],
@@ -60,7 +57,7 @@ const remoteMethod = (query: string) => {
     .catch((err) => {
       options.value = []
       if (!axios.isCancel(err) && !newController.signal.aborted) {
-        ElMessage.error(t('common.failedToLoadOptions'))
+        ElMessage.error('Failed to load options')
       }
     })
     .finally(() => {
@@ -88,7 +85,7 @@ onUnmounted(() => {
     multiple
     filterable
     reserve-keyword
-    :placeholder="t('templateManagement.selectPartyIdsMulti')"
+    placeholder="Select Party IDs (Multi-select allowed)"
     :loading="loading"
     style="width: 100%"
     popper-class="part-id-select-popper"

+ 14 - 45
src/views/TemplateManagement/src/components/CreateReportTemplate/src/components/AdjustmentField.vue

@@ -1,7 +1,4 @@
 <script setup lang="ts">
-import { useI18n } from 'vue-i18n'
-
-const { t } = useI18n()
 import { VueDraggable } from 'vue-draggable-plus'
 import { useRoute } from 'vue-router'
 
@@ -345,7 +342,7 @@ defineExpose({
     class="customize-columns"
     v-model="dialogVisible"
     :width="1000"
-    :title="t('templateManagement.addEditFieldTitle')"
+    title="Add/Edit Field"
     @close="clearData"
   >
     <div class="search-header">
@@ -354,7 +351,7 @@ defineExpose({
           v-model="searchColumn"
           @change="scrollToItem"
           filterable
-          :placeholder="t('templateManagement.searchFieldPlaceholder')"
+          placeholder="Search field"
         >
           <template #prefix>
             <span class="font_family icon-icon_search_b"></span>
@@ -415,7 +412,7 @@ defineExpose({
         </div>
       </div>
       <div class="right-select-columns">
-        <div class="title">{{ t('templateManagement.selectedFieldsOnReportTemplateList') }}</div>
+        <div class="title">Selected fields on report template list</div>
         <VueDraggable
           v-vloading="loading"
           v-model="selectColumns"
@@ -485,22 +482,10 @@ defineExpose({
       <el-tour-step :show-close="false" :target="step1?.[0]">
         <template #default>
           <div class="description">
-            <span>{{ t('templateManagement.drag') }}</span>
-            {{ t('templateManagement.dragOperaterTips1') }} "<span>{{
-              t('templateManagement.add')
-            }}</span
-            >"
-            {{ t('templateManagement.dragOperaterTips2') }}
-            {{
-              route.path.includes('booking')
-                ? t('templateManagement.booking')
-                : t('templateManagement.shipment')
-            }}
-            {{ t('templateManagement.list') }}.
-          </div>
-          <div class="got-it-text" @click="handleCloseTour('step1')">
-            {{ t('templateManagement.gotIt') }}
+            <span>Drag</span> items to the right group or click the "<span>Add</span>" icon to add
+            columns to the {{ route.path.includes('booking') ? 'booking' : 'shipment' }} list.
           </div>
+          <div class="got-it-text" @click="handleCloseTour('step1')">Got it</div>
         </template>
       </el-tour-step>
     </el-tour>
@@ -515,33 +500,17 @@ defineExpose({
       <el-tour-step :show-close="false" :target="step2?.[0]">
         <template #default>
           <div class="description">
-            <span>{{ t('templateManagement.drag') }}</span>
-            {{ t('templateManagement.removeOperaterTips1') }} "<span>{{
-              t('templateManagement.remove')
-            }}</span
-            >"
-            {{ t('templateManagement.removeOperaterTips2') }}
-            {{
-              route.path.includes('booking')
-                ? t('templateManagement.booking')
-                : t('templateManagement.shipment')
-            }}
-            {{ t('templateManagement.list') }}
+            <span>Drag</span> items to the left group or click the "<span>Remove</span>" icon to
+            delete columns from the
+            {{ route.path.includes('booking') ? 'booking' : 'shipment' }} list.
           </div>
           <div class="description">
-            <span>{{ t('templateManagement.drag') }}</span>
-            {{ t('templateManagement.dragItemsUpOrDownToReorderThe') }}
-            {{
-              route.path.includes('booking')
-                ? t('templateManagement.booking')
-                : t('templateManagement.shipment')
-            }}
-            {{ t('templateManagement.list') }},
-            {{ t('templateManagement.orUseTheMoveUpAndMoveDownIcons') }}
-          </div>
-          <div class="got-it-text" @click="handleCloseTour('step2')">
-            {{ t('templateManagement.gotIt') }}
+            <span>Drag</span> items up or down to reorder the
+            {{ route.path.includes('booking') ? 'booking' : 'shipment' }} list, or use the "<span
+              >Move up</span
+            >" and "<span>Move down</span>" icons.
           </div>
+          <div class="got-it-text" @click="handleCloseTour('step2')">Got it</div>
         </template>
       </el-tour-step>
     </el-tour>

+ 2 - 5
src/views/TemplateManagement/src/components/CreateReportTemplate/src/components/GroupNameSelect.vue

@@ -1,10 +1,7 @@
 <script setup lang="ts">
-import { useI18n } from 'vue-i18n'
 import { cloneDeep, debounce } from 'lodash'
 import axios from 'axios'
 
-const { t } = useI18n()
-
 const props = defineProps({
   data: {
     type: Array as () => string[],
@@ -70,7 +67,7 @@ const remoteMethod = (query: string) => {
     .catch((err) => {
       options.value = []
       if (!axios.isCancel(err) && !newController.signal.aborted) {
-        ElMessage.error(t('common.failedToLoadOptions'))
+        ElMessage.error('Failed to load options')
       }
     })
     .finally(() => {
@@ -95,7 +92,7 @@ onUnmounted(() => {
     multiple
     filterable
     reserve-keyword
-    :placeholder="t('templateManagement.selectGroupNameMulti')"
+    placeholder="Select Group Name (Multi-select allowed)"
     :loading="loading"
     style="width: 100%"
     ref="selectViewRef"

+ 2 - 5
src/views/TemplateManagement/src/components/CreateReportTemplate/src/components/PartyIDSelect.vue

@@ -1,10 +1,7 @@
 <script setup lang="ts">
-import { useI18n } from 'vue-i18n'
 import { cloneDeep, debounce } from 'lodash'
 import axios from 'axios'
 
-const { t } = useI18n()
-
 const props = defineProps({
   data: {
     type: Array as () => string[],
@@ -61,7 +58,7 @@ const remoteMethod = (query: string) => {
     .catch((err) => {
       options.value = []
       if (!axios.isCancel(err) && !newController.signal.aborted) {
-        ElMessage.error(t('common.failedToLoadOptions'))
+        ElMessage.error('Failed to load options')
       }
     })
     .finally(() => {
@@ -89,7 +86,7 @@ onUnmounted(() => {
     multiple
     filterable
     reserve-keyword
-    :placeholder="t('templateManagement.selectPartyIdsMulti')"
+    placeholder="Select Party IDs (Multi-select allowed)"
     :loading="loading"
     style="width: 100%"
     popper-class="part-id-select-popper"

+ 39 - 50
src/views/TemplateManagement/src/components/CreateReportTemplate/src/components/ReportFieldsConfiguration.vue

@@ -1,7 +1,4 @@
 <script setup lang="ts">
-import { useI18n } from 'vue-i18n'
-
-const { t } = useI18n()
 import AdjustmentField from './AdjustmentField.vue'
 import { VueDraggable } from 'vue-draggable-plus'
 import { cloneDeep } from 'lodash'
@@ -61,17 +58,18 @@ const changeReportLevel = (newVal: string, oldVal: string) => {
   const scenarios: Record<string, Record<string, { message: string; levelsToClear: string[] }>> = {
     'Item Level': {
       'Container Level': {
-        message: t('templateManagement.itemLevelWillBeCleared'),
+        message: 'If the Level value is "Item Level", the field will be cleared.',
         levelsToClear: ['Item Level']
       },
       'Shipment Level': {
-        message: t('templateManagement.itemOrContainerLevelWillBeCleared'),
+        message:
+          'If the Level value is "Item Level" or "Container Level", the field will be cleared.',
         levelsToClear: ['Item Level', 'Container Level']
       }
     },
     'Container Level': {
       'Shipment Level': {
-        message: t('templateManagement.containerLevelWillBeCleared'),
+        message: 'If the Level value is "Container Level", the field will be cleared.',
         levelsToClear: ['Container Level']
       }
     }
@@ -85,9 +83,9 @@ const changeReportLevel = (newVal: string, oldVal: string) => {
     return
   }
 
-  ElMessageBox.confirm(scenario.message, t('common.prompt'), {
-    confirmButtonText: t('common.change'),
-    cancelButtonText: t('common.cancel'),
+  ElMessageBox.confirm(scenario.message, 'Prompt', {
+    confirmButtonText: 'Change',
+    cancelButtonText: 'Cancel',
     type: 'warning',
     confirmButtonClass: 'el-button--dark',
     cancelButtonClass: 'el-button--default',
@@ -114,12 +112,12 @@ const handleFieldTypeChange = () => {
 }
 const addNewField = () => {
   if (!newFieldInfo.value.name?.trim()) {
-    ElMessage.warning(t('templateManagement.newFieldNameRequired'))
+    ElMessage.warning('Please enter the new field name.')
     return
   }
 
   if (newFieldInfo.value.fieldType === 'Fixed Value' && !newFieldInfo.value.value?.trim()) {
-    ElMessage.warning(t('templateManagement.fixedValueRequired'))
+    ElMessage.warning('Please enter the fixed value.')
     return
   }
   fieldsList.value.unshift({
@@ -160,7 +158,7 @@ const AdjustmentFieldRef = ref()
 // 打开定制表格弹窗
 const handleCustomizeColumns = () => {
   if (!props.reportLevel) {
-    ElMessage.warning(t('templateManagement.reportLevelRequired'))
+    ElMessage.warning('Please select the report level.')
     return
   }
   const params = {
@@ -179,7 +177,7 @@ const handleCustomizeColumns = () => {
   AdjustmentFieldRef.value.openDialog(
     params,
     -220,
-    t('templateManagement.dragItemAddOperaterTips'),
+    'Drag item over to this selection or click "add" icon to show the field on report template list',
     uniqueArray
   )
 }
@@ -306,7 +304,7 @@ defineExpose({
 <template>
   <div class="fields-configuration template-box">
     <div class="header">
-      <span>{{ t('templateManagement.reportFieldsConfigurationTitle') }}</span>
+      <span>Report Fields Configuration</span>
 
       <div class="right-option">
         <el-button
@@ -315,7 +313,7 @@ defineExpose({
           style="width: 148px; padding-top: 11px"
         >
           <span style="margin-right: 3px" class="font_family icon-icon_add_b"></span>
-          <span>{{ t('templateManagement.addNewField') }}</span>
+          <span>Add New Field</span>
         </el-button>
         <el-button
           v-if="fieldsList.length > 0"
@@ -324,17 +322,16 @@ defineExpose({
           style="width: 110px; padding-top: 11px"
         >
           <span style="margin-right: 3px" class="font_family icon-icon_add_b"></span>
-          <span>{{ t('templateManagement.selectField') }}</span>
+          <span>Select Field</span>
         </el-button>
       </div>
     </div>
     <div class="content-box">
       <div class="empty-box" v-if="fieldsList.length === 0">
         <el-button class="el-button--dark" @click="handleCustomizeColumns">
-          <span class="font_family icon-icon_add_b"></span
-          >{{ t('templateManagement.addEditField') }}
+          <span class="font_family icon-icon_add_b"></span>Add/Edit Field
         </el-button>
-        <p>{{ t('templateManagement.noFieldSelectedTip') }}</p>
+        <p>No field selected. click “Add Field” to get started.</p>
       </div>
       <div class="fields-list" v-else>
         <VueDraggable
@@ -366,7 +363,7 @@ defineExpose({
               :name="fieldItem.uniqueId"
               class="display-name"
               v-model="fieldItem.displayName"
-              :placeholder="t('report.displayNameInReport')"
+              placeholder="Display Name in Report"
             ></el-input>
             <div class="actions">
               <div class="checkbox-group">
@@ -378,13 +375,13 @@ defineExpose({
                   "
                   v-model="fieldItem.isFilter"
                   @change="changeFieldConfig($event, fieldItem.field, index, 'isFilter')"
-                  >{{ t('templateManagement.filter') }}</el-checkbox
+                  >Filter</el-checkbox
                 >
                 <el-checkbox
                   :disabled="fieldItem.fieldType !== 'System'"
                   v-model="fieldItem.isSort"
                   @change="changeFieldConfig($event, fieldItem.field, index, 'isSort')"
-                  >{{ t('templateManagement.sort') }}</el-checkbox
+                  >Sort</el-checkbox
                 >
               </div>
               <div class="action-icon">
@@ -416,7 +413,7 @@ defineExpose({
   <AdjustmentField @apply="handleApplay" ref="AdjustmentFieldRef" />
   <el-dialog
     class="add-new-field-dialog"
-    :title="t('templateManagement.addNewFieldTitle')"
+    title="Add New Field"
     v-model="addNewFieldVisible"
     @closed="clearNewFieldData"
     width="480"
@@ -425,26 +422,26 @@ defineExpose({
       <div class="field-item">
         <div class="label">
           <span class="required-symbol">*</span>
-          <span>{{ t('templateManagement.newFieldNameLabel') }}</span>
+          <span>New Field Name</span>
         </div>
-        <el-input :placeholder="t('report.pleaseEnter')" v-model="newFieldInfo.name"></el-input>
+        <el-input placeholder="Please enter..." v-model="newFieldInfo.name"></el-input>
       </div>
       <div class="field-item field-value">
         <div class="label">
           <span class="required-symbol">*</span>
-          <span>{{ t('templateManagement.fieldValueLabel') }}</span>
+          <span>Field Value</span>
         </div>
         <el-radio-group v-model="newFieldInfo.fieldType" @change="handleFieldTypeChange">
-          <el-radio label="Blank">{{ t('templateManagement.blankText') }}</el-radio>
-          <el-radio label="Fixed Value">{{ t('templateManagement.fixedValueText') }}</el-radio>
+          <el-radio label="Blank">Blank</el-radio>
+          <el-radio label="Fixed Value">Fixed Value</el-radio>
         </el-radio-group>
       </div>
       <div class="field-item" v-if="newFieldInfo.fieldType === 'Fixed Value'">
         <div class="label">
           <span class="required-symbol">*</span>
-          <span>{{ t('templateManagement.fixedValueLabel') }}</span>
+          <span>Fixed Value</span>
         </div>
-        <el-input :placeholder="t('report.pleaseEnter')" v-model="newFieldInfo.value"></el-input>
+        <el-input placeholder="Please enter..." v-model="newFieldInfo.value"></el-input>
       </div>
     </div>
     <template #footer>
@@ -453,17 +450,17 @@ defineExpose({
         class="cancel-btn"
         type="default"
         @click="addNewFieldVisible = false"
-        >{{ t('common.cancel') }}</el-button
+        >Cancel</el-button
+      >
+      <el-button style="height: 40px; width: 120px" class="el-button--dark" @click="addNewField"
+        >Apply</el-button
       >
-      <el-button style="height: 40px; width: 120px" class="el-button--dark" @click="addNewField">{{
-        t('report.apply')
-      }}</el-button>
     </template>
   </el-dialog>
   <el-dialog
     class="field-mapping-dialog"
     v-model="fieldMappingVisible"
-    :title="t('templateManagement.mappingTitle')"
+    title="Mapping (Field: Final Destination)"
     width="800"
     @close="clearMappingData"
   >
@@ -472,28 +469,20 @@ defineExpose({
         <div class="label">
           <div class="left-label">
             <span style="color: var(--color-danger)">*</span>
-            <span>{{ t('templateManagement.systemValueLabel') }}</span>
+            <span>System Value</span>
           </div>
           <div class="right-label">
             <span style="color: var(--color-danger)">*</span>
-            <span>{{ t('templateManagement.outputValueLabel') }}</span>
+            <span>Output Value</span>
           </div>
         </div>
         <div style="max-height: 380px; overflow-y: auto">
           <div class="list-item" v-for="(item, index) in mappingData" :key="index">
             <div class="left-system-value">
-              <el-input
-                :placeholder="t('report.pleaseEnter')"
-                clearable
-                v-model="item.system"
-              ></el-input>
+              <el-input placeholder="Please enter..." clearable v-model="item.system"></el-input>
             </div>
             <div class="right-converted-value">
-              <el-input
-                :placeholder="t('report.pleaseEnter')"
-                clearable
-                v-model="item.converted"
-              ></el-input>
+              <el-input placeholder="Please enter..." clearable v-model="item.converted"></el-input>
             </div>
             <div class="delete-icon">
               <span
@@ -511,7 +500,7 @@ defineExpose({
       style="height: 32px; margin-top: 8px; padding: 8px"
     >
       <span class="font_family icon-icon_add_b" style="color: var(--color-theme)"></span>
-      <span style="color: var(--color-theme)">{{ t('templateManagement.addMapping') }}</span>
+      <span style="color: var(--color-theme)">Add Mapping</span>
     </el-button>
     <template #footer>
       <el-button
@@ -519,13 +508,13 @@ defineExpose({
         class="cancel-btn"
         type="default"
         @click="fieldMappingVisible = false"
-        >{{ t('common.cancel') }}</el-button
+        >Cancel</el-button
       >
       <el-button
         style="height: 40px; width: 120px"
         class="el-button--dark"
         @click="handleAddMapping"
-        >{{ t('report.apply') }}</el-button
+        >Apply</el-button
       >
     </template>
   </el-dialog>

+ 16 - 26
src/views/TemplateManagement/src/components/TableView/src/TableView.vue

@@ -8,9 +8,7 @@ import timezone from 'dayjs/plugin/timezone'
 import { formatNumber, formatTimezoneByUser } from '@/utils/tools'
 import { useRouter } from 'vue-router'
 import { useUserStore } from '@/stores/modules/user'
-import { useI18n } from 'vue-i18n'
 
-const { t } = useI18n()
 dayjs.extend(utc)
 dayjs.extend(timezone)
 const router = useRouter()
@@ -28,39 +26,39 @@ const formatString = computed(() => {
 
 const tableColumns = [
   {
-    title: t('templateManagement.reportName'),
+    title: 'Report Name',
     type: 'normal',
     field: 'name'
   },
   {
-    title: t('templateManagement.reportLevel'),
+    title: 'Report Level',
     type: 'normal',
     field: 'level'
   },
   {
-    title: t('templateManagement.isActive'),
+    title: 'Is Active',
     type: 'status',
     field: 'is_active'
   },
   {
-    title: t('templateManagement.applicationScope'),
+    title: 'Application Scope',
     type: 'normal',
     field: 'access_type'
   },
   {
-    title: t('templateManagement.creationDate'),
+    title: 'Creation Date',
     type: 'normal',
     field: 'created_time',
     formatter: 'dateTime',
     sortable: true
   },
   {
-    title: t('templateManagement.createdBy'),
+    title: 'Created By',
     type: 'normal',
     field: 'create_by'
   },
   {
-    title: t('templateManagement.modifyBy'),
+    title: 'Modify By',
     type: 'normal',
     field: 'modify_by'
   }
@@ -111,12 +109,7 @@ const handleColumns = (columns: any) => {
 // 获取表格列
 const getTableColumns = async () => {
   tableData.value.columns = [
-    {
-      title: t('templateManagement.action'),
-      width: 120,
-      fixed: 'left',
-      slots: { default: 'action' }
-    },
+    { title: 'Action', width: 120, fixed: 'left', slots: { default: 'action' } },
     ...handleColumns(tableColumns)
   ]
   // tableRef.value && autoWidth(tableData.value, tableRef.value)
@@ -329,7 +322,7 @@ defineExpose({
     >
       <!-- action操作栏的插槽 -->
       <template #action="{ row }">
-        <el-tooltip effect="dark" :content="t('common.edit')" placement="top">
+        <el-tooltip effect="dark" content="Edit" placement="top">
           <el-button class="el-button--blue action-btn" @click="handleEdit(row.serial_no)">
             <span
               style="margin-right: 2px; font-size: 15px"
@@ -338,7 +331,7 @@ defineExpose({
           </el-button>
         </el-tooltip>
 
-        <el-tooltip effect="dark" :content="t('common.copy')" placement="top">
+        <el-tooltip effect="dark" content="Copy" placement="top">
           <el-button class="el-button--blue action-btn" @click="handleCopy(row.serial_no)">
             <span
               style="margin-right: 2px; font-size: 15px"
@@ -347,7 +340,7 @@ defineExpose({
           </el-button>
         </el-tooltip>
 
-        <el-tooltip effect="dark" :content="t('templateManagement.inactivate')" placement="top">
+        <el-tooltip effect="dark" content="Inactivate" placement="top">
           <el-button
             class="el-button--blue action-btn"
             v-if="row.is_active === 't'"
@@ -360,7 +353,7 @@ defineExpose({
           </el-button>
         </el-tooltip>
 
-        <el-tooltip effect="dark" :content="t('templateManagement.activate')" placement="top">
+        <el-tooltip effect="dark" content="Activate" placement="top">
           <el-button
             class="el-button--blue action-btn"
             v-if="row.is_active === 'f'"
@@ -373,7 +366,7 @@ defineExpose({
           </el-button>
         </el-tooltip>
 
-        <el-tooltip effect="dark" :content="t('common.delete')" placement="top">
+        <el-tooltip effect="dark" content="Delete" placement="top">
           <el-button
             v-if="isShowDeleteBtn"
             class="el-button--blue action-btn"
@@ -386,19 +379,16 @@ defineExpose({
       <!-- Status字段的插槽 -->
       <template #status="{ row, column }">
         <VTag :type="row[column.field] === 't' ? 'Active' : 'Inactive'">{{
-          row[column.field] === 't'
-            ? t('templateManagement.active')
-            : t('templateManagement.inactive')
+          row[column.field] === 't' ? 'Active' : 'Inactive'
         }}</VTag>
       </template>
       <!-- 空数据时的插槽 -->
       <template #empty v-if="!tableLoadingTableData && tableData.data.length === 0">
         <div class="empty-box">
           <el-button class="el-button--dark" @click="handleCreate">
-            <span class="font_family icon-icon_add_b"></span>
-            {{ t('templateManagement.createNewReportTemplate') }}</el-button
+            <span class="font_family icon-icon_add_b"></span> Create New Report Template</el-button
           >
-          <p>{{ t('templateManagement.emptyCreateTip') }}</p>
+          <p>Click the "Create New Report Template" button to add a report template.</p>
         </div>
       </template>
     </vxe-grid>