Просмотр исходного кода

feat: 对接新翻译ping'tai平台

bill 2 месяцев назад
Родитель
Сommit
a0a400b6b4
8 измененных файлов с 1571 добавлено и 496 удалено
  1. 1 1
      index.html
  2. 4 1
      package.json
  3. 836 487
      pnpm-lock.yaml
  4. 53 0
      scripts/fetch-langs.mjs
  5. 5 7
      src/lang/index.ts
  6. 226 0
      src/lang/locales/en.json
  7. 226 0
      src/lang/locales/ja.json
  8. 220 0
      src/lang/locales/zh.json

+ 1 - 1
index.html

@@ -8,6 +8,6 @@
   </head>
   </head>
   <body>
   <body>
     <div id="app"></div>
     <div id="app"></div>
-    <script type="module" src="/src/setup.ts"></script>
+    <script type="module" src="/src/main.ts"></script>
   </body>
   </body>
 </html>
 </html>

+ 4 - 1
package.json

@@ -6,7 +6,8 @@
   "scripts": {
   "scripts": {
     "dev": "vite",
     "dev": "vite",
     "lang": "vite ./ lang",
     "lang": "vite ./ lang",
-    "build": "vue-tsc --noEmit && vite build",
+    "translate": "node ./scripts/fetch-langs.mjs",
+    "build": "npm run translate && vue-tsc --noEmit && vite build",
     "preview": "vite preview",
     "preview": "vite preview",
     "format": "prettier --write ./**/*.{vue,ts,tsx,js,jsx,css,less,scss,json,md}",
     "format": "prettier --write ./**/*.{vue,ts,tsx,js,jsx,css,less,scss,json,md}",
     "lint": "eslint src scripts/**/*.js vite.config.ts src/**/*.ts vite.config.ts src/**/*.vue"
     "lint": "eslint src scripts/**/*.js vite.config.ts src/**/*.ts vite.config.ts src/**/*.vue"
@@ -27,8 +28,10 @@
     "express": "^4.18.2",
     "express": "^4.18.2",
     "js-base64": "^3.7.2",
     "js-base64": "^3.7.2",
     "less": "^4.1.3",
     "less": "^4.1.3",
+    "node-fetch": "^3.3.2",
     "pinia": "^2.0.22",
     "pinia": "^2.0.22",
     "sass": "^1.54.9",
     "sass": "^1.54.9",
+    "unzipper": "^0.12.3",
     "vue": "^3.2.37",
     "vue": "^3.2.37",
     "vue-i18n": "^9.9.0",
     "vue-i18n": "^9.9.0",
     "vue-router": "4",
     "vue-router": "4",

Разница между файлами не показана из-за своего большого размера
+ 836 - 487
pnpm-lock.yaml


+ 53 - 0
scripts/fetch-langs.mjs

@@ -0,0 +1,53 @@
+import fetch from 'node-fetch'
+import fs from 'fs'
+import path from 'path'
+import unzipper from 'unzipper'
+
+import {pipeline} from 'node:stream';
+import {promisify} from 'node:util'
+import {createReadStream,createWriteStream} from "node:fs";
+
+const streamPipeline = promisify(pipeline);
+
+
+/**
+ * 下载并解压离线包
+ * @param {string} url 下载地址
+ * @param {string} destDir 解压目标目录
+ */
+async function downloadAndExtract(url, destDir) {
+    const zipPath = path.join(destDir, 'temp.zip')
+
+
+    console.log(`开始下载语言包: ${url}`)
+
+    const res = await fetch(url, {
+        method: 'GET',
+        headers: {
+            //'X-API-Key':'tgpak_gm2f6ntnor2gy4ztnfuw65twoj2wu2tdovzwwztqoe4ts5q'
+        },
+    })
+
+    if (!res.ok) {
+        throw new Error(`下载语言包失败: ${res.status} ${res.statusText}`)
+    }
+
+    // zip文件保存到本地目录
+    await streamPipeline(res.body, createWriteStream(zipPath));
+
+    console.log('语言包下载完成,开始解压...')
+
+    // 解压到指定目录
+    await streamPipeline(createReadStream(zipPath),unzipper.Extract({ path: destDir }));
+
+    console.log('语言包解压完成!')
+
+    // 删除临时压缩包
+    fs.unlinkSync(zipPath)
+}
+
+// 示例调用
+const url = 'http://192.168.0.211:9012/v2/projects/export?ak=tgpak_gqyf64zvg53doodvgfxg42bvgu2gs5bym5xta5ddne3wg5a'
+const dest = './src/lang/locales'
+
+await downloadAndExtract(url, dest)

+ 5 - 7
src/lang/index.ts

@@ -3,9 +3,9 @@ import { createI18n, I18n as BaseI18n } from 'vue-i18n'
 import { deflangName, langNameEum, langNames, langNameDescs } from './constant'
 import { deflangName, langNameEum, langNames, langNameDescs } from './constant'
 import { localGetFactory, localSetFactory } from '@/utils/store'
 import { localGetFactory, localSetFactory } from '@/utils/store'
 import { paramsToStr, strToParams } from '@/utils'
 import { paramsToStr, strToParams } from '@/utils'
-import zh, { promise as zhPromise } from './zh'
-import en, { promise as enPromise } from './en'
-import jp, { promise as jpPromise } from './ja'
+import zh from './locales/zh.json'
+import en from './locales/en.json'
+import jp from './locales/ja.json'
 
 
 type I18n = BaseI18n & {
 type I18n = BaseI18n & {
   global: {
   global: {
@@ -15,8 +15,7 @@ type I18n = BaseI18n & {
   }
   }
 }
 }
 
 
-export const loaded = ref(false)
-Promise.all([zhPromise, enPromise, jpPromise]).then(() => (loaded.value = true))
+export const loaded = ref(true)
 const localKey = 'lang'
 const localKey = 'lang'
 const local = {
 const local = {
   get: localGetFactory(str => {
   get: localGetFactory(str => {
@@ -29,7 +28,6 @@ const local = {
       const navLang = langs.find(lang =>
       const navLang = langs.find(lang =>
         new RegExp(`-?${lang}-?`).test(defLang)
         new RegExp(`-?${lang}-?`).test(defLang)
       )
       )
-      console.log('language:', navLang)
       return navLang || langNameEum.en
       return navLang || langNameEum.en
     }
     }
   }),
   }),
@@ -38,6 +36,7 @@ const local = {
 
 
 const params = strToParams(location.search)
 const params = strToParams(location.search)
 export const lang = (params.lang || local.get(localKey)) as langNameEum
 export const lang = (params.lang || local.get(localKey)) as langNameEum
+
 if (lang !== local.get(localKey)) {
 if (lang !== local.get(localKey)) {
   local.set(localKey, lang)
   local.set(localKey, lang)
 }
 }
@@ -58,7 +57,6 @@ export const langs = {
   [langNameEum.zh]: zh,
   [langNameEum.zh]: zh,
   [langNameEum.jp]: jp
   [langNameEum.jp]: jp
 }
 }
-
 i18n.global.setLocaleMessage(langNameEum.zh, zh)
 i18n.global.setLocaleMessage(langNameEum.zh, zh)
 i18n.global.setLocaleMessage(langNameEum.en, en)
 i18n.global.setLocaleMessage(langNameEum.en, en)
 i18n.global.setLocaleMessage(langNameEum.jp, jp)
 i18n.global.setLocaleMessage(langNameEum.jp, jp)

+ 226 - 0
src/lang/locales/en.json

@@ -0,0 +1,226 @@
+{
+  "code": {
+    "-1": "Operation failed",
+    "0": "Successful",
+    "2001": "Operation is too frequent, please refresh and try again.",
+    "3014": "Incorrect account number or password",
+    "3015": "User does not exist",
+    "4001": "Parameter missing",
+    "4002": "No access",
+    "4003": "User does not exist",
+    "4004": "User has been added",
+    "4005": "Project creator cannot be deleted",
+    "4008": "User is not logged in",
+    "4009": "Login failed",
+    "4010": "Delete yourself",
+    "4011": "Default role is not allowed",
+    "4012": "The role has been bound by a member, please change the member role and delete it.",
+    "4014": "Your current account is not authenticated, please authenticate it before logging in.",
+    "5001": "Project creator does not exist",
+    "5002": "Project does not exist or has been deleted",
+    "7001": "File upload failed",
+    "7002": " Uploaded file does not exist",
+    "7003": "File is too large to upload",
+    "7004": "Failed to upload and invoke the BIM file",
+    "7005": "The BIM file has been uploaded, click Delete can upload it again",
+    "7006": "The BIM file is uploading, please wait",
+    "7007": "File content error",
+    "8001": "Scene has been bound and cannot be added"
+  },
+  "log": {
+    "createTimeLabel": "Operation Time",
+    "logMsgLabel": "Notes",
+    "userNameLabel": "Operator"
+  },
+  "material": {
+    "add": "Add a new member",
+    "addMertial": "New Note",
+    "bindAccountLabel": "Account",
+    "createTimeLabel": "Added Time",
+    "delTip": "Continue to remove this user?",
+    "filterName": "Please enter ",
+    "name": "Project Members",
+    "nickNameLabel": "Name",
+    "remarkLabel": "Notes",
+    "roleLabel": "Role",
+    "ruleNickName": "Please enter ",
+    "ruleNickName1": "Name of the member (maximum 50 words)",
+    "ruleRemark": "Please enter a note",
+    "ruleRemark1": "Maximum {max} words for a note",
+    "ruleRole": "Please select a project role",
+    "ruleUserName": "Please enter a user account",
+    "rulebindAccount": "Please enter ",
+    "userNameLabel": "Account"
+  },
+  "project": {
+    "addTitle": "New Project",
+    "bimDesc": {
+      "done": "Done",
+      "error": "Error",
+      "offline": "Offline package is being created",
+      "transfrom": "Converting",
+      "upload": "Uploading"
+    },
+    "createTimeLabel": "Creation Time",
+    "dayPleac": "Please select",
+    "delTitle": "Delete Project",
+    "desc": {
+      "done": "Done",
+      "undone": "In progress"
+    },
+    "finshTitle": "Complete Project",
+    "manageList": "Project List",
+    "name": "Project",
+    "projectBimLabel": "BIM",
+    "projectCreaterLabel": "Creator",
+    "projectCreaterPleac": "Please enter the project creator",
+    "projectImgLabel": "Cover",
+    "projectImgTip": "Recommended size: 500 * 500 pixels",
+    "projectMsgLabel": "Description",
+    "projectMsgRule": "Please enter a description of the project (maximum {max} words)",
+    "projectNameLabel": "Project Name",
+    "projectNamePleac": "Please enter ",
+    "projectNameRule": "Please enter a name (maximum of {max} characters)",
+    "projectStatusLabel": "Status",
+    "sceneDesc": {
+      "ARCHIVE": "Archived",
+      "DEL": "Scene deleted",
+      "ERR": "Calculation failed",
+      "RERUN": "Recalculating",
+      "RUN": "Calculating",
+      "SUCCESS": "Calculation succeeded"
+    },
+    "sceneTypeDesc": {
+      "SWKJ": "4DKanKan Minion",
+      "SWKK": "4DKanKan Pro",
+      "SWSG": "4DKanKan Meta",
+      "SWSS": "4DKanKan Mega"
+    },
+    "taggingStatusDesc": {
+      "pending": "Pending",
+      "progress": "In progress",
+      "solved": "Solved",
+      "unsolved": "Unresolved"
+    },
+    "updateTimeLabel": "Last Updated",
+    "updateTitle": "Modify Project"
+  },
+  "role": {
+    "add": "New Role",
+    "createTimeLabel": "Operation Time",
+    "delMsg": "Are you sure you want to delete this role?",
+    "name": "Project Role",
+    "remarkLabel": "Note",
+    "remarkRule": "Please enter a note, maximum 50 characters",
+    "roleMenusLabel": "Assignment",
+    "roleNameLabel": "Role Name",
+    "roleNameRule": "Please enter a role name",
+    "sroleNameLabel": "Projects"
+  },
+  "scene": {
+    "addTip": "Please add scenes with the same camera type and the same number of points.",
+    "create": "Create a scene",
+    "createTimeLabel": "Captured Time",
+    "delTip": "Are you sure you want to delete this scene?",
+    "fileLabel": "BIM",
+    "fileRule": "Please upload a BIM file",
+    "name": "Scene",
+    "nameLabel": "Name",
+    "nameLabel1": "Scene Name",
+    "nameLabel1Rule": "Please enter a name, maximum {max} characters.",
+    "nameRule": "Please enter a scene name",
+    "numLabel": "Scene Code",
+    "phoneLabel": "Creator",
+    "selected": "{len} scenes selected",
+    "shootCountLabel": "Projects",
+    "statusLabel": "Status",
+    "typeLabel": "Type",
+    "updateFile": "Modify BIM"
+  },
+  "sys": {
+    "404": "Error Page",
+    "ERROR": "Service error. Please try again later.",
+    "NO_ACCESS": "No right to access",
+    "SUCCESS": "Request succeeded",
+    "TOKEN_INVALID": "The token has expired.",
+    "add": "New",
+    "all": "All",
+    "cancel": "Cancel",
+    "copyAuth": "Please allow clipboard access",
+    "create": "Create",
+    "data": "Data",
+    "del": "Delete",
+    "delTip": "Can't recover from deletion, are you sure?",
+    "edit": "Edit",
+    "forget": "Forgot your password?",
+    "good": "Good",
+    "login": "Log in",
+    "loginh1": "Welcome to 4DKanKan Construction Management",
+    "loginh2": "Sign In",
+    "logout": "Log out",
+    "more": "etc",
+    "name": "&Sync",
+    "noUploadDesc": {
+      "0": "Only {extxTip} file format is supported",
+      "1": "Maximum supported size of uploaded files: { maxSizeTip }"
+    },
+    "oper": "Operate",
+    "operLog": "Operation Record",
+    "passwordRule": "Please enter the password",
+    "passwordRule1": "Incorrect account number or password",
+    "phoneRul1": "Please enter the correct account number",
+    "phoneRule": "Please enter the account number",
+    "projectCount": "Number of projects",
+    "projectFileCount": "Project documents",
+    "projectOverCount": "Completed project",
+    "projectSceneCount": "Project scenes",
+    "query": "Check",
+    "register": "Register",
+    "rememberLabel": "Remember password",
+    "reset": "Reset",
+    "router": {
+      "login": "log in",
+      "personal": "Personal Information",
+      "project": "Project",
+      "projectMaterial": "Project Information",
+      "projectMembers": "Member Management",
+      "projectRoles": "Project Role",
+      "projectScenes": "Scene Management",
+      "projectTaggings": "Project Labeling",
+      "projects": "Project Management"
+    },
+    "save": "Save",
+    "search": "Search",
+    "select": "Select",
+    "selectTime": "Select Date",
+    "sync": "Sync",
+    "time": {
+      "0": "morning",
+      "1": "afternoon",
+      "2": "afternoon",
+      "3": "evening"
+    },
+    "tipTitle": "System Prompt",
+    "un": "Unkown",
+    "unLoginName": "Visitor",
+    "undata": "No results found",
+    "undataDesc": "You don't have {name} yet, please create {name} first.",
+    "update": "Modify",
+    "updateInfo": "Modify information",
+    "updatePwd": "Change Password",
+    "uploadBtn": "Upload",
+    "uploadDesc": {
+      "0": "The { extxTip } file format is supported;",
+      "1": "Maximum supported size of uploaded files: { maxSizeTip };"
+    }
+  },
+  "tagging": {
+    "createByLabel": "Creator",
+    "filterNamePlace": "Please enter the POI keywords",
+    "lastUpdateByLabel": "Last modified by",
+    "markingTitleLabel": "Tag",
+    "statusLabel": "Status",
+    "updateTimeLabel": "Last modified",
+    "usersLabel": "Users"
+  }
+}

+ 226 - 0
src/lang/locales/ja.json

@@ -0,0 +1,226 @@
+{
+  "code": {
+    "-1": "操作に失敗しました",
+    "0": "成功\n",
+    "2001": "操作が頻繁すぎます。更新して再試行してください。",
+    "3014": "アカウント番号またはパスワードが正しくありません",
+    "3015": "ユーザーが存在しません\n",
+    "4001": "パラメータが不足しています\n",
+    "4002": "権限がありません\n",
+    "4003": "ユーザーが存在しません\n",
+    "4004": "ユーザーが追加されました\n",
+    "4005": "プロジェクト作成者は削除できません\n",
+    "4008": "ユーザーがログインしていません\n",
+    "4009": "ログインに失敗しました\n",
+    "4010": "自分の役割を削除\n",
+    "4011": "この役割は権限がありません\n",
+    "4012": "この役割はすでに存在します。役割を変更してから削除してください。",
+    "4014": "現在のアカウントは認証されていませんので、認証してからログインしてください。",
+    "5001": "プロジェクト作成者が存在しません",
+    "5002": "プロジェクトは存在しない、または削除されました。",
+    "7001": "ファイルのアップロードに失敗しました\n",
+    "7002": "アップロードされたファイルが存在しません",
+    "7003": "ファイルが大きすぎてアップロードできません",
+    "7004": "BIMファイルのアップロードと呼び出しに失敗しました",
+    "7005": "BIMファイルがアップロードされました。削除をクリックすると再度アップロードできます",
+    "7006": "BIMファイルをアップロード中です。お待ちください",
+    "7007": "ファイル内容にエラーがあります",
+    "8001": "このシーンはすでにバインドされており、追加できません"
+  },
+  "log": {
+    "createTimeLabel": "操作時間",
+    "logMsgLabel": "備考",
+    "userNameLabel": "操作者"
+  },
+  "material": {
+    "add": "担当者を追加",
+    "addMertial": "コメントを追加",
+    "bindAccountLabel": "メール\n",
+    "createTimeLabel": "追加日時\n",
+    "delTip": "このアカウントを削除しますか?\n",
+    "filterName": "ノート名を入力してください\n",
+    "name": "プロジェクトメンバー\n",
+    "nickNameLabel": "担当者名\n",
+    "remarkLabel": "備考\n",
+    "roleLabel": "役割",
+    "ruleNickName": "担当者名は\n",
+    "ruleNickName1": "50字まで",
+    "ruleRemark": "備考を入力してください\n",
+    "ruleRemark1": "最大{max}文字まで\n",
+    "ruleRole": "役割を選択してください\n",
+    "ruleUserName": "アカウントを入力してください\n",
+    "rulebindAccount": "携帯電話番号を入力してください\n",
+    "userNameLabel": "アカウント"
+  },
+  "project": {
+    "addTitle": "プロジェクトを新規作成\n",
+    "bimDesc": {
+      "done": "完了\n",
+      "error": "エラー\n",
+      "offline": "オフラインパッケージを作成中\n",
+      "transfrom": "変換中\n",
+      "upload": "アップロード中\n"
+    },
+    "createTimeLabel": "作成時間",
+    "dayPleac": "作成日時を選択",
+    "delTitle": "削除",
+    "desc": {
+      "done": "完了\n",
+      "undone": "進行中\n"
+    },
+    "finshTitle": "終了",
+    "manageList": "管理リスト\n",
+    "name": "プロジェクト",
+    "projectBimLabel": "BIMファイル",
+    "projectCreaterLabel": "作成者",
+    "projectCreaterPleac": "入力してください\n",
+    "projectImgLabel": "サムネイル",
+    "projectImgTip": "推奨サイズ:500 * 500 画素",
+    "projectMsgLabel": "説明",
+    "projectMsgRule": "説明を入力してください。最大{max}字まで\n",
+    "projectNameLabel": "タイトル",
+    "projectNamePleac": "入力してください",
+    "projectNameRule": "プロジェクト名を入力してください。最大{max}字まで",
+    "projectStatusLabel": "状態",
+    "sceneDesc": {
+      "ARCHIVE": "アーカイブ済み\n",
+      "DEL": "シーンが削除されました\n",
+      "ERR": "計算に失敗しました\n",
+      "RERUN": "再計算中",
+      "RUN": "計算中",
+      "SUCCESS": "計算に成功しました\n"
+    },
+    "sceneTypeDesc": {
+      "SWKJ": "4DKK_Minion",
+      "SWKK": "4DKK_Pro",
+      "SWSG": "4DKK_Meta",
+      "SWSS": "4DKK_Mega"
+    },
+    "taggingStatusDesc": {
+      "pending": "保留中\n",
+      "progress": "進行中\n",
+      "solved": "解決済み\n",
+      "unsolved": "未解決\n"
+    },
+    "updateTimeLabel": "最終更新\n",
+    "updateTitle": "修正\n"
+  },
+  "role": {
+    "add": "役割を追加",
+    "createTimeLabel": "操作時間",
+    "delMsg": "本当にこの役割を削除しますか?\n",
+    "name": "役割",
+    "remarkLabel": "備考",
+    "remarkRule": "備考を入力してください。最大50字まで。\n",
+    "roleMenusLabel": "機能",
+    "roleNameLabel": "役割",
+    "roleNameRule": "役割を入力してください。\n",
+    "sroleNameLabel": "所属のプロジェクト"
+  },
+  "scene": {
+    "addTip": "同じカメラタイプで同じ点数のシーンを追加してください。",
+    "create": "シーンを作成\n",
+    "createTimeLabel": "撮影時間",
+    "delTip": "本当にこのシーンを削除しますか?\n",
+    "fileLabel": "BIMファイル",
+    "fileRule": "BIMファイルをアップロードしてください\n",
+    "name": "物件",
+    "nameLabel": "名",
+    "nameLabel1": "物件名",
+    "nameLabel1Rule": "タイトルを入力してください。最大{max}字まで",
+    "nameRule": "物件名を入力してください",
+    "numLabel": "コード",
+    "phoneLabel": "作成者",
+    "selected": "{len}個のシーンが選択されました\n",
+    "shootCountLabel": "プロジェクト\n",
+    "statusLabel": "状態",
+    "typeLabel": "カメラ",
+    "updateFile": "BIMを調整"
+  },
+  "sys": {
+    "404": "エラー",
+    "ERROR": "サーバーにエラーが発生しました。後でもう一度お試しください",
+    "NO_ACCESS": "アクセス権がありません\n",
+    "SUCCESS": "リクエストが成功しました\n",
+    "TOKEN_INVALID": "トークンが期限切れです\n",
+    "add": "追加",
+    "all": "すべて",
+    "cancel": "キャンセル",
+    "copyAuth": "クリップボードへのアクセスを許可してください",
+    "create": "作成",
+    "data": "データ",
+    "del": "削除",
+    "delTip": "削除すると元に戻せません。本当に削除しますか?",
+    "edit": "編集",
+    "forget": "パスワードをお忘れですか?\n",
+    "good": "了解",
+    "login": "ログイン",
+    "loginh1": "ログイン",
+    "loginh2": "アカウントでログイン\n",
+    "logout": "ログアウト",
+    "more": "詳しく",
+    "name": "&Sync",
+    "noUploadDesc": {
+      "0": "{extxTip}のみ\n",
+      "1": "{maxSizeTip}まで"
+    },
+    "oper": "操作",
+    "operLog": "操作記録\n",
+    "passwordRule": "パスワードを入力してください\n",
+    "passwordRule1": "アカウントまたはパスワードが正しくありません",
+    "phoneRul1": "正しいアカウントを入力してください\n",
+    "phoneRule": "アカウントを入力してください\n",
+    "projectCount": "プロジェクト数\n",
+    "projectFileCount": "ファイル数",
+    "projectOverCount": "完成数",
+    "projectSceneCount": "物件数",
+    "query": "確認",
+    "register": "登録",
+    "rememberLabel": "パスワードを記憶する\n",
+    "reset": "リセット",
+    "router": {
+      "login": "ログイン",
+      "personal": "個人情報",
+      "project": "プロジェクト\n",
+      "projectMaterial": "プロジェクト情報\n",
+      "projectMembers": "担当者管理",
+      "projectRoles": "役割",
+      "projectScenes": "シーン管理",
+      "projectTaggings": "ホットスポット",
+      "projects": "プロジェクト管理\n"
+    },
+    "save": "保存",
+    "search": "検索",
+    "select": "選択",
+    "selectTime": "日付を選択\n",
+    "sync": "同期\n",
+    "time": {
+      "0": "昼前",
+      "1": "正午",
+      "2": "午後",
+      "3": "夜"
+    },
+    "tipTitle": "ヒント",
+    "un": "不明",
+    "unLoginName": "一般ユーザ",
+    "undata": "データはありません",
+    "undataDesc": "まだ{name}がありません。最初に{name}を作成してください。",
+    "update": "変更",
+    "updateInfo": "情報の変更",
+    "updatePwd": "パスワードを変更",
+    "uploadBtn": "アップロード",
+    "uploadDesc": {
+      "0": "{ extxTip }のみ\n",
+      "1": "{ maxSizeTip }まで;\n"
+    }
+  },
+  "tagging": {
+    "createByLabel": "作成者",
+    "filterNamePlace": "キーワードを入力してください",
+    "lastUpdateByLabel": "最終更新者\n",
+    "markingTitleLabel": "ホットスポット",
+    "statusLabel": "状態",
+    "updateTimeLabel": "最終更新\n",
+    "usersLabel": "関係者"
+  }
+}

+ 220 - 0
src/lang/locales/zh.json

@@ -0,0 +1,220 @@
+{
+  "code": {
+    "-1": "操作失败",
+    "0": "操作成功",
+    "2001": "操作过于频繁,请刷新后再试",
+    "3014": "账号或密码不正确",
+    "3015": "用户不存在",
+    "4001": "参数缺少",
+    "4002": "没有权限",
+    "4003": "用户不存在",
+    "4004": "用户已添加",
+    "4005": "项目创建人不能删除",
+    "4008": "用户未登录",
+    "4009": "四维登录失败",
+    "4010": "删除自己",
+    "4011": "默认角色不允许",
+    "4012": "角色已被成员绑定,请更换成员角色后进行删除",
+    "4014": "当前登录账号未授权,请先授权后再登录",
+    "5001": "项目创建人不存在",
+    "5002": "项目不存在,或已删除",
+    "7001": "文件上传失败",
+    "7002": "上传文件不存在",
+    "7003": "文件上传过大",
+    "7004": "上传调用bim失败",
+    "7005": "bim已上传,删除可再次删除",
+    "7006": "bim上传中,请稍后",
+    "7007": "文件内容错误",
+    "8001": "场景已绑定不可添加"
+  },
+  "log": {
+    "createTimeLabel": "操作时间",
+    "logMsgLabel": "备注",
+    "userNameLabel": "操作人"
+  },
+  "material": {
+    "add": "新增成员",
+    "addMertial": "新建备注",
+    "bindAccountLabel": "绑定账号",
+    "createTimeLabel": "添加时间",
+    "delTip": "确定要删除此用户?",
+    "filterName": "请输入笔记名称",
+    "name": "项目成员",
+    "nickNameLabel": "成员名称",
+    "remarkLabel": "备注",
+    "roleLabel": "项目角色",
+    "ruleNickName": "请输入成员名称",
+    "ruleNickName1": "成员名称最多50字",
+    "ruleRemark": "请输入备注",
+    "ruleRemark1": "备注最多{max}字",
+    "ruleRole": "请选择项目角色",
+    "ruleUserName": "请输入用户账号",
+    "rulebindAccount": "请输入用户账号",
+    "userNameLabel": "账号"
+  },
+  "project": {
+    "addTitle": "新建项目",
+    "bimDesc": {
+      "done": "完成",
+      "error": "错误",
+      "offline": "离线包生成中",
+      "transfrom": "转换中",
+      "upload": "上传中"
+    },
+    "createTimeLabel": "创建时间",
+    "dayPleac": "选择项目创建日期",
+    "delTitle": "删除项目",
+    "desc": {
+      "done": "已完成",
+      "undone": "未完成"
+    },
+    "finshTitle": "完成项目",
+    "manageList": "管理列表",
+    "name": "项目",
+    "projectBimLabel": "BIM文件",
+    "projectCreaterLabel": "创建人",
+    "projectCreaterPleac": "请输入项目创建人",
+    "projectImgLabel": "封面",
+    "projectImgTip": "推荐大小:500 * 500 像素",
+    "projectMsgLabel": "项目描述",
+    "projectMsgRule": "请输入项目描述最多{max}字",
+    "projectNameLabel": "项目名称",
+    "projectNamePleac": "请输入项目名称",
+    "projectNameRule": "请输入名称最多{max}字",
+    "projectStatusLabel": "项目状态",
+    "sceneDesc": {
+      "ARCHIVE": "封存",
+      "DEL": "场景被删",
+      "ERR": "计算失败",
+      "RERUN": "重新计算中",
+      "RUN": "计算中",
+      "SUCCESS": "计算成功"
+    },
+    "sceneTypeDesc": {
+      "SWKJ": "四维看见",
+      "SWKK": "四维看看",
+      "SWSG": "四维深光",
+      "SWSS": "四维深时"
+    },
+    "taggingStatusDesc": {
+      "pending": "待处理",
+      "progress": "进行中",
+      "solved": "已解决",
+      "unsolved": "未解决"
+    },
+    "updateTimeLabel": "更新时间",
+    "updateTitle": "修改项目"
+  },
+  "role": {
+    "add": "新增角色",
+    "createTimeLabel": "操作时间",
+    "delMsg": "确定要删除此角色",
+    "name": "项目角色",
+    "remarkLabel": "备注",
+    "remarkRule": "请输入备注,最多50字",
+    "roleMenusLabel": "菜单分配",
+    "roleNameLabel": "角色名称",
+    "roleNameRule": "请输入角色名称",
+    "sroleNameLabel": "所属项目"
+  },
+  "scene": {
+    "addTip": "请添加相同相机类型和点位数量一致的场景",
+    "create": "创建场景",
+    "createTimeLabel": "拍摄时间",
+    "delTip": "确定要删除此场景?",
+    "fileLabel": "BIM文件",
+    "fileRule": "请上传BIM文件",
+    "name": "场景",
+    "nameLabel": "名称",
+    "nameLabel1": "场景名称",
+    "nameLabel1Rule": "请输入名称最多{max}字",
+    "nameRule": "请输入场景名称",
+    "numLabel": "场景码",
+    "phoneLabel": "创建人",
+    "selected": "已选择{len}个场景",
+    "shootCountLabel": "点位数",
+    "statusLabel": "状态",
+    "typeLabel": "类型",
+    "updateFile": "修改BIM"
+  },
+  "sys": {
+    "404": "错误页面",
+    "ERROR": "服务错误,请稍后再试",
+    "NO_ACCESS": "无权访问",
+    "SUCCESS": "请求成功",
+    "TOKEN_INVALID": "token已失效",
+    "add": "新增",
+    "all": "全部",
+    "cancel": "取消",
+    "copyAuth": "请授予写入粘贴板权限!",
+    "create": "创建",
+    "data": "数据",
+    "del": "删除",
+    "delTip": "删除后无法恢复,是否确认?",
+    "edit": "编辑",
+    "forget": "忘记密码",
+    "good": "好",
+    "login": "登录",
+    "loginh1": "欢迎登录",
+    "loginh2": "账号登录",
+    "logout": "退出登录",
+    "more": "等",
+    "name": "&Sync",
+    "noUploadDesc[0]": "仅支持{extxTip}文件格式",
+    "noUploadDesc[1]": "最大支持上传{maxSizeTip}",
+    "oper": "操作",
+    "operLog": "操作记录",
+    "passwordRule": "请输入账号",
+    "passwordRule1": "账号或密码有误",
+    "phoneRul1": "请输入正确账号",
+    "phoneRule": "请输入账号",
+    "projectCount": "项目数",
+    "projectFileCount": "项目文件数",
+    "projectOverCount": "已完成项目数",
+    "projectSceneCount": "项目场景数",
+    "query": "查看",
+    "register": "注册",
+    "rememberLabel": "记住密码",
+    "reset": "重置",
+    "router": {
+      "login": "登录",
+      "personal": "个人信息",
+      "project": "项目",
+      "projectMaterial": "项目资料",
+      "projectMembers": "成员管理",
+      "projectRoles": "项目角色",
+      "projectScenes": "场景管理",
+      "projectTaggings": "项目标注",
+      "projects": "项目管理"
+    },
+    "save": "保存",
+    "search": "搜索",
+    "select": "选择",
+    "selectTime": "选择日期",
+    "sync": "同步",
+    "time[0]": "早上好",
+    "time[1]": "中午好",
+    "time[2]": "下午好",
+    "time[3]": "晚上好",
+    "tipTitle": "系统提示",
+    "un": "未知",
+    "unLoginName": "游客",
+    "undata": "未搜索到结果,",
+    "undataDesc": "您还没有{name},请先创建{name}~",
+    "update": "修改",
+    "updateInfo": "修改信息",
+    "updatePwd": "修改密码",
+    "uploadBtn": "上传",
+    "uploadDesc[0]": "支持{ extxTip }文件格式;",
+    "uploadDesc[1]": "最大支持上传{ maxSizeTip };"
+  },
+  "tagging": {
+    "createByLabel": "创建人",
+    "filterNamePlace": "请输入标注关键字",
+    "lastUpdateByLabel": "最后修改人",
+    "markingTitleLabel": "场景标注",
+    "statusLabel": "状态",
+    "updateTimeLabel": "最后修改时间",
+    "usersLabel": "涉及的成员"
+  }
+}