gemercheung 1 рік тому
батько
коміт
2a6bb29521

+ 1 - 0
package.json

@@ -4,6 +4,7 @@
   "version": "0.0.0",
   "type": "module",
   "scripts": {
+    "translate": "node translate.cjs",
     "dev": "vite --mode development",
     "dev:eur": "vite --mode eur",
     "build-home-test": "vue-tsc --noEmit && vite build  --mode home",

+ 3 - 1
src/api/setup.ts

@@ -26,6 +26,7 @@ export const axiosFactory = () => {
   const axiosRaw = Axios.create()
   const axiosConfig = {
     token: localStorage.getItem('token'),
+    lang: localStorage.getItem('lang'),
     unTokenSet: [] as string[],
     unReqErrorSet: [] as string[],
     unResErrorSet: [] as string[],
@@ -145,7 +146,8 @@ export const axiosFactory = () => {
       } else {
         config.headers = {
           ...config.headers,
-          token: axiosConfig.token
+          token: axiosConfig.token,
+          lang: axiosConfig.lang || 'zh'
         }
       }
     }

+ 422 - 0
src/locales/lang/webslate/en.json

@@ -0,0 +1,422 @@
+{
+    "antdLocale": {
+        "locale": "en",
+        "Pagination": {
+            "items_per_page": "/ page",
+            "jump_to": "Go to",
+            "jump_to_confirm": "confirm",
+            "page": "",
+            "prev_page": "Previous Page",
+            "next_page": "Next Page",
+            "prev_5": "Previous 5 Pages",
+            "next_5": "Next 5 Pages",
+            "prev_3": "Previous 3 Pages",
+            "next_3": "Next 3 Pages"
+        },
+        "DatePicker": {
+            "lang": {
+                "placeholder": "Select date",
+                "yearPlaceholder": "Select year",
+                "quarterPlaceholder": "Select quarter",
+                "monthPlaceholder": "Select month",
+                "weekPlaceholder": "Select week",
+                "rangePlaceholder": [
+                    "Start date",
+                    "End date"
+                ],
+                "rangeYearPlaceholder": [
+                    "Start year",
+                    "End year"
+                ],
+                "rangeQuarterPlaceholder": [
+                    "Start quarter",
+                    "End quarter"
+                ],
+                "rangeMonthPlaceholder": [
+                    "Start month",
+                    "End month"
+                ],
+                "rangeWeekPlaceholder": [
+                    "Start week",
+                    "End week"
+                ],
+                "locale": "en_US",
+                "today": "Today",
+                "now": "Now",
+                "backToToday": "Back to today",
+                "ok": "Ok",
+                "clear": "Clear",
+                "month": "Month",
+                "year": "Year",
+                "timeSelect": "select time",
+                "dateSelect": "select date",
+                "weekSelect": "Choose a week",
+                "monthSelect": "Choose a month",
+                "yearSelect": "Choose a year",
+                "decadeSelect": "Choose a decade",
+                "yearFormat": "YYYY",
+                "dateFormat": "M/D/YYYY",
+                "dayFormat": "D",
+                "dateTimeFormat": "M/D/YYYY HH:mm:ss",
+                "monthBeforeYear": true,
+                "previousMonth": "Previous month (PageUp)",
+                "nextMonth": "Next month (PageDown)",
+                "previousYear": "Last year (Control + left)",
+                "nextYear": "Next year (Control + right)",
+                "previousDecade": "Last decade",
+                "nextDecade": "Next decade",
+                "previousCentury": "Last century",
+                "nextCentury": "Next century",
+                "shortMonths": [
+                    "January",
+                    "February",
+                    "March",
+                    "April",
+                    "May",
+                    "June",
+                    "July",
+                    "August",
+                    "September",
+                    "October",
+                    "November",
+                    "December"
+                ],
+                "shortWeekDays": [
+                    "Mon",
+                    "Tue",
+                    "Wed.",
+                    "Thur.",
+                    "Fri.",
+                    "Sat.",
+                    "Sun."
+                ]
+            },
+            "timePickerLocale": {
+                "placeholder": "Select time",
+                "rangePlaceholder": [
+                    "Start time",
+                    "End time"
+                ]
+            }
+        },
+        "TimePicker": {
+            "placeholder": "Select time",
+            "rangePlaceholder": [
+                "Start time",
+                "End time"
+            ]
+        },
+        "Calendar": {
+            "lang": {
+                "placeholder": "Select date",
+                "yearPlaceholder": "Select year",
+                "quarterPlaceholder": "Select quarter",
+                "monthPlaceholder": "Select month",
+                "weekPlaceholder": "Select week",
+                "rangePlaceholder": [
+                    "Start date",
+                    "End date"
+                ],
+                "rangeYearPlaceholder": [
+                    "Start year",
+                    "End year"
+                ],
+                "rangeQuarterPlaceholder": [
+                    "Start quarter",
+                    "End quarter"
+                ],
+                "rangeMonthPlaceholder": [
+                    "Start month",
+                    "End month"
+                ],
+                "rangeWeekPlaceholder": [
+                    "Start week",
+                    "End week"
+                ],
+                "locale": "en_US",
+                "today": "Today",
+                "now": "Now",
+                "backToToday": "Back to today",
+                "ok": "Ok",
+                "clear": "Clear",
+                "month": "Month",
+                "year": "Year",
+                "timeSelect": "select time",
+                "dateSelect": "select date",
+                "weekSelect": "Choose a week",
+                "monthSelect": "Choose a month",
+                "yearSelect": "Choose a year",
+                "decadeSelect": "Choose a decade",
+                "yearFormat": "YYYY",
+                "dateFormat": "M/D/YYYY",
+                "dayFormat": "D",
+                "dateTimeFormat": "M/D/YYYY HH:mm:ss",
+                "monthBeforeYear": true,
+                "previousMonth": "Previous month (PageUp)",
+                "nextMonth": "Next month (PageDown)",
+                "previousYear": "Last year (Control + left)",
+                "nextYear": "Next year (Control + right)",
+                "previousDecade": "Last decade",
+                "nextDecade": "Next decade",
+                "previousCentury": "Last century",
+                "nextCentury": "Next century"
+            },
+            "timePickerLocale": {
+                "placeholder": "Select time",
+                "rangePlaceholder": [
+                    "Start time",
+                    "End time"
+                ]
+            }
+        },
+        "global": {
+            "placeholder": "Please select"
+        },
+        "Table": {
+            "filterTitle": "Filter menu",
+            "filterConfirm": "OK",
+            "filterReset": "Reset",
+            "filterEmptyText": "No filters",
+            "filterCheckall": "Select all items",
+            "filterSearchPlaceholder": "Search in filters",
+            "emptyText": "No data",
+            "selectAll": "Select current page",
+            "selectInvert": "Invert current page",
+            "selectNone": "Clear all data",
+            "selectionAll": "Select all data",
+            "sortTitle": "Sort",
+            "expand": "Expand row",
+            "collapse": "Collapse row",
+            "triggerDesc": "Click to sort descending",
+            "triggerAsc": "Click to sort ascending",
+            "cancelSort": "Click to cancel sorting"
+        },
+        "Modal": {
+            "okText": "OK",
+            "cancelText": "Cancel",
+            "justOkText": "OK"
+        },
+        "Popconfirm": {
+            "okText": "OK",
+            "cancelText": "Cancel"
+        },
+        "Transfer": {
+            "titles": [
+                "",
+                ""
+            ],
+            "searchPlaceholder": "Search here",
+            "itemUnit": "item",
+            "itemsUnit": "items",
+            "remove": "Remove",
+            "selectCurrent": "Select current page",
+            "removeCurrent": "Remove current page",
+            "selectAll": "Select all data",
+            "removeAll": "Remove all data",
+            "selectInvert": "Invert current page"
+        },
+        "Upload": {
+            "uploading": "Uploading...",
+            "removeFile": "Remove file",
+            "uploadError": "Upload error",
+            "previewFile": "Preview file",
+            "downloadFile": "Download file"
+        },
+        "Empty": {
+            "description": "No Data"
+        },
+        "Icon": {
+            "icon": "icon"
+        },
+        "Text": {
+            "edit": "Edit",
+            "copy": "Copy",
+            "copied": "Copied",
+            "expand": "Expand"
+        },
+        "PageHeader": {
+            "back": "Back"
+        },
+        "Form": {
+            "optional": "(optional)",
+            "defaultValidateMessages": {
+                "default": "Field validation error for ${label}",
+                "required": "Please enter ${label}",
+                "enum": "${label} must be one of [${enum}]",
+                "whitespace": "${label} cannot be a blank character",
+                "date": {
+                    "format": "${label} date format is invalid",
+                    "parse": "${label} cannot be converted to a date",
+                    "invalid": "${label} is an invalid date"
+                },
+                "types": {
+                    "string": "${label} is not a valid ${type}",
+                    "method": "${label} is not a valid ${type}",
+                    "array": "${label} is not a valid ${type}",
+                    "object": "${label} is not a valid ${type}",
+                    "number": "${label} is not a valid ${type}",
+                    "date": "${label} is not a valid ${type}",
+                    "boolean": "${label} is not a valid ${type}",
+                    "integer": "${label} is not a valid ${type}",
+                    "float": "${label} is not a valid ${type}",
+                    "regexp": "${label} is not a valid ${type}",
+                    "email": "${label} is not a valid ${type}",
+                    "url": "${label} is not a valid ${type}",
+                    "hex": "${label} is not a valid ${type}"
+                },
+                "string": {
+                    "len": "${label} must be ${len} characters",
+                    "min": "${label} must be at least ${min} characters",
+                    "max": "${label} must be up to ${max} characters",
+                    "range": "${label} must be between ${min}-${max} characters"
+                },
+                "number": {
+                    "len": "${label} must be equal to ${len}",
+                    "min": "${label} must be minimum ${min}",
+                    "max": "${label} must be maximum ${max}",
+                    "range": "${label} must be between ${min}-${max}"
+                },
+                "array": {
+                    "len": "Must be ${len} ${label}",
+                    "min": "At least ${min} ${label}",
+                    "max": "At most ${max} ${label}",
+                    "range": "The amount of ${label} must be between ${min}-${max}"
+                },
+                "pattern": {
+                    "mismatch": "${label} does not match the pattern ${pattern}"
+                }
+            }
+        },
+        "Image": {
+            "preview": "Preview"
+        }
+    },
+    "base": {
+        "websiteTitle": "Livestream",
+        "lang": {
+            "en": "English",
+            "zh": "简体中文"
+        },
+        "tips": "tips",
+        "confirm": "Confirm",
+        "personalCenter": "Personal Center",
+        "userGuideline": "User Guideline",
+        "logout": "logout",
+        "edit": "Edit",
+        "share": "Share",
+        "delete": "Delete",
+        "save": "Save",
+        "cancel": "Cancel",
+        "saveSuccess": "Save Successful",
+        "noSearchResult": "No Search Result",
+        "unSearchDesc": "You don't have a scene yet, please create a scene first",
+        "tourist": "tourist",
+        "loginToLogin": "Go to login",
+        "loginFail": "Invalid login status; please log in again!",
+        "loginToCancel": "Continue",
+        "export": "Export",
+        "all": "All",
+        "using": "In use",
+        "end": "End",
+        "error8001": "Please check and input accurate account info!",
+        "error8005": "The current room cannot be authorized for you!"
+    },
+    "code": {
+        "del": "场景被删",
+        "run": "Calculating",
+        "err": "Failed",
+        "success": "Success",
+        "archive": "Archive",
+        "rerun": "重新计算中"
+    },
+    "room": {
+        "createRoom": "Create a room",
+        "editRoom": "Edit room",
+        "myRoom": "My studios",
+        "searchRoom": "search room",
+        "personalCenter": "personal Center",
+        "logout": "log out",
+        "startLivestreaming": "livestreaming",
+        "roomInfo": "Studio Information",
+        "form": {
+            "title": "title",
+            "titleRequired": "Title is Required",
+            "titleplaceHolder": "Please enter up to 15 words for the title",
+            "desc": "Description",
+            "descplaceHolder": "Please enter up to 200 words for the description",
+            "host": "Hoster Infomation",
+            "nickname": "Nickname",
+            "phoneNumber": "Phone Number",
+            "nicknameRequired": "Nickname is required",
+            "nicknameDesc": "Please enter up to 15 words for the host nickname",
+            "selectScene": "select scenes",
+            "addScene": "Add scenes",
+            "inputSearch": "input the keyword",
+            "scene": "scene",
+            "name": "name",
+            "time": "time",
+            "addLeastScene": "Add a minimum of one scene",
+            "advanceConfig": "Advance Configuration"
+        },
+        "roomOnfired": "The studio is livestreaming; please stop the livestream before making any changes!",
+        "copyLink": "Copy link",
+        "linkCopySuccess": "Link copied successfully!",
+        "deletedScenes": "Deleted scenes",
+        "deletedScenesWaring": "Cannot recover from deletion, confirm to delete?",
+        "projectLink": "Project Link",
+        "nickNameRegrexError": "The nickname is limited to 1 to 15 characters in Chinese, English, digits, or underscores.",
+        "startMiniAppLivestreaming": "livestreaming",
+        "shareFriends": "Share with friends",
+        "scanMiniApp": "Scan the code to access LI-Stream via Wechat",
+        "openScanMiniApp": "Open the Wechat",
+        "enterWechat": "Scan the code to start LI-Stream via Wechat",
+        "dashboard": "Data Kanban",
+        "myEndRoom": "Ended Studios",
+        "endRoomTitle": "'Ended Studios",
+        "usingTimeRequire": "Please input the time of Using",
+        "setPassword": "Set Password",
+        "authorize": "Authorize",
+        "addUser": "Add User",
+        "userAccount": "User Account",
+        "userAccountRequired": "Please input the User's Account",
+        "setRoomNumber": "Set the number of guests in the studio",
+        "roomTitle": "Room Title",
+        "passwordError": "Please set a full 4-digit password!",
+        "authUserError": "授权失败,此账号不存在!",
+        "authTipTitle": "Authorization Guidelines",
+        "authTipContent": "Please provide your complete cell phone account details after selecting [Add User] for authorization. After authorization, the associated mobile phone account connects to the [Li-Stream] mini-program and is allowed to initiate a Livestream using the studio.",
+        "usingTime": "Time of Use",
+        "usingTime1": "Duratation",
+        "usingTime2": "Created Time",
+        "deletedRoom": "Deleted Studios",
+        "oneMPicLimit": "Please upload jpg/png images within 1M.",
+        "avatar": "Avatar"
+    },
+    "statistic": {
+        "allStatus": "Overall Overview",
+        "roomData": "Room Data",
+        "roomMssage": "Room Mssage",
+        "top5": "Ranking of the Number of Livestreaming (Top 5)",
+        "mTop5": "Ranking of the Number of Comments (Top 5)",
+        "visits": "Total Number of Visits",
+        "clicks": "Total Number of Clicks",
+        "shares": "Total Number of Shares",
+        "relatedScenes": "Related Scenes",
+        "duration": "Duration/ Minute",
+        "createTime": "Created Time",
+        "status": "Status",
+        "watch": "Watch",
+        "share": "Share",
+        "pageCount": "%N% data in total",
+        "firstEnter": "Entry Time",
+        "departure": "Last time Departure",
+        "amount": "Amount",
+        "message": "Message",
+        "aofubt": "Amount of Online Users by Time",
+        "roomUsage": "Room Usage",
+        "userViews": "User Views",
+        "userShare": "User Share",
+        "msgMans": "Messagers",
+        "msgNumber": "Messages Total"
+    }
+}

+ 159 - 0
src/locales/lang/webslate/zh.json

@@ -0,0 +1,159 @@
+{
+    "antdLocale": {
+        "DatePicker": {
+            "lang": {
+                "shortWeekDays": [
+                    "一",
+                    "二",
+                    "三",
+                    "四",
+                    "五",
+                    "六",
+                    "日"
+                ],
+                "shortMonths": [
+                    "1月",
+                    "2月",
+                    "3月",
+                    "4月",
+                    "5月",
+                    "6月",
+                    "7月",
+                    "8月",
+                    "9月",
+                    "10月",
+                    "11月",
+                    "12月"
+                ]
+            }
+        }
+    },
+    "base": {
+        "websiteTitle": "四维带看",
+        "lang": {
+            "en": "English",
+            "zh": "简体中文"
+        },
+        "tips": "提示",
+        "confirm": "确定",
+        "personalCenter": "个人中心",
+        "userGuideline": "用户手册",
+        "logout": "退出登录",
+        "edit": "编辑",
+        "share": "分享",
+        "delete": "删除",
+        "save": "保存",
+        "cancel": "取消",
+        "saveSuccess": "保存成功",
+        "noSearchResult": "未搜索到结果",
+        "unSearchDesc": "您还没有场景,请先创建场景",
+        "tourist": "游客",
+        "loginToLogin": "去登录",
+        "loginFail": "登录状态失效,请重新登录",
+        "loginToCancel": "登录完毕,继续",
+        "export": "导出数据",
+        "all": "全部",
+        "using": "使用中",
+        "end": "已结束",
+        "error8001": "账号不存在,请核对后输入!",
+        "error8005": "不能授权给本人!"
+    },
+    "code": {
+        "del": "场景被删",
+        "run": "计算中",
+        "err": "计算失败",
+        "success": "计算成功",
+        "archive": "封存",
+        "rerun": "重新计算中"
+    },
+    "room": {
+        "createRoom": "创建房间",
+        "editRoom": "修改房间",
+        "myRoom": "我的房间",
+        "searchRoom": "搜索房间",
+        "logout": "退出登录",
+        "startLivestreaming": "开始带看",
+        "roomInfo": "房间信息",
+        "form": {
+            "title": "标题",
+            "titleRequired": "标题为必填字段",
+            "titleplaceHolder": "请输入标题名称,限15字。",
+            "desc": "简介",
+            "descplaceHolder": "请输入简介,限200字。",
+            "host": "主持人信息",
+            "nickname": "昵称",
+            "phoneNumber": "手机号",
+            "nicknameRequired": "请输入昵称",
+            "nicknameDesc": "请输入主持人昵称,限15字",
+            "selectScene": "选择场景",
+            "addScene": "添加场景",
+            "inputSearch": "输入关键词",
+            "scene": "场景",
+            "name": "名称",
+            "time": "时间",
+            "addLeastScene": "至少添加一个场景",
+            "advanceConfig": "高级配置"
+        },
+        "roomOnfired": "房间直播中, 请先关闭直播再删除 !",
+        "copyLink": "复制链接",
+        "linkCopySuccess": "链接复制成功!",
+        "deletedScenes": "删除场景",
+        "deletedScenesWaring": "删除后无法恢复,是否确认?",
+        "projectLink": "房间链接",
+        "nickNameRegrexError": "昵称应是为中文、英文、数字或者下划线,且长度为1到15",
+        "startMiniAppLivestreaming": "扫码带看",
+        "shareFriends": "分享给好友",
+        "scanMiniApp": "微信“扫一扫”参与带看",
+        "openScanMiniApp": "打开微信“扫一扫”",
+        "enterWechat": "进入微信小程序开始带看",
+        "dashboard": "数据看板",
+        "endRoomTitle": "查看房间",
+        "myEndRoom": "已结束房间",
+        "usingTimeRequire": "请输入房间使用时间",
+        "setPassword": "设置密码",
+        "authorize": "授权",
+        "addUser": "添加用户",
+        "userAccount": "用户账号",
+        "userAccountRequired": "请输入完整的账号",
+        "setRoomNumber": "设置房间人数",
+        "roomTitle": "房间名称",
+        "passwordError": "请设置完整的4位数字密码!",
+        "authUserError": "授权失败,此账号不存在!",
+        "authTipTitle": "授权须知",
+        "authTipContent": "点击【添加用户】后,输入完整的手机账号进行授权。授权后,相应的手机账号登录【四维带看】小程序,可使用该带看房间发起带看。",
+        "usingTime": "使用时间",
+        "usingTime1": "时间段",
+        "usingTime2": "创建时间",
+        "nodata": "您还没有房间,请先创建房间~",
+        "deletedRoom": "删除房间",
+        "oneMPicLimit": "请上传1M以内的jpg/png图片",
+        "avatar": "头像"
+    },
+    "statistic": {
+        "allStatus": "整体概况",
+        "roomData": "房间数据",
+        "roomMssage": "房间留言",
+        "top5": "观看次数排行(前5)",
+        "mTop5": "留言数排行(前5)",
+        "visits": "访问总人数",
+        "clicks": "访问总次数",
+        "shares": "分享总次数",
+        "relatedScenes": "相关场景",
+        "duration": "时长/分",
+        "createTime": "创建时间",
+        "status": "状态",
+        "watch": "观看",
+        "share": "分享",
+        "pageCount": "共有 %N% 条数据",
+        "firstEnter": "初次进入房间",
+        "departure": "最后离开房间",
+        "amount": "数量",
+        "message": "留言内容",
+        "aofubt": "各时段在线人数",
+        "roomUsage": "房间使用情况",
+        "userViews": "用户浏览量",
+        "userShare": "用户分享数",
+        "msgMans": "留言人数",
+        "msgNumber": "留言总数"
+    }
+}

+ 3 - 0
src/store/modules/locale.ts

@@ -25,6 +25,9 @@ export const useLocaleStore = defineStore({
   getters: {
     getLocale(): LocaleType {
       console.log('getLocale', this.localInfo)
+      if (this.localInfo?.locale) {
+        localStorage.setItem('lang', this.localInfo?.locale ?? 'zh')
+      }
       return this.localInfo?.locale ?? 'zh'
     }
   },

+ 25 - 0
translate.cjs

@@ -0,0 +1,25 @@
+const http = require('http');
+const fs = require('fs');
+
+function checkIfPhishing(urlToPrint, path, lang = 'zh') {
+  fs.mkdirSync(path, { recursive: true });
+  const file = fs.createWriteStream(`${path}/${lang}.json`);
+  const request = http.get(urlToPrint, function (response) {
+    response.pipe(file).on('finish', function () {
+      console.log(`lang: ${lang} get translate in ${path} Done!`);
+      // console.log(fs.readFileSync(`${lang}.json`, { encoding: "utf8" }));
+    });
+  });
+}
+// editor zh
+checkIfPhishing(
+  'http://192.168.0.163:8080/download/daikan/backend/zh_Hans/',
+  'src/locales/lang/webslate',
+  'zh',
+);
+// editor en
+checkIfPhishing(
+  'http://192.168.0.163:8080/download/daikan/backend/en/',
+  'src/locales/lang/webslate',
+  'en',
+);