bill 2 月之前
父节点
当前提交
9abc7e3e75
共有 7 个文件被更改,包括 1534 次插入306 次删除
  1. 1 0
      src/api/constant.ts
  2. 10 2
      src/lang/index.ts
  3. 3 0
      src/lang/weblate/en.json
  4. 315 1
      src/lang/weblate/ja.json
  5. 37 11
      src/lang/weblate/kr.json
  6. 1162 287
      src/lang/weblate/zh.json
  7. 6 5
      src/layout/edit/scene-select.vue

+ 1 - 0
src/api/constant.ts

@@ -7,6 +7,7 @@ export enum ResCode {
   SUCCESS = 0
 }
 
+console.log(lang)
 export const ResCodeDesc: { [key in ResCode]: string } = lang.resCode
 
 export const UPLOAD_HEADS = {

+ 10 - 2
src/lang/index.ts

@@ -10,16 +10,20 @@ import kr from './weblate/kr.json'
 export enum langNameEum {
   zh = 'zh',
   en = 'en',
+  ja = 'ja',
+  kr = 'kr'
 }
 console.log('en', JSON.stringify(zh))
 
 export const langNameDescs = {
   [langNameEum.zh]: '中文',
   [langNameEum.en]: 'English',
+  [langNameEum.ja]: '日语',
+  [langNameEum.kr]: '韩语'
 }
 
 export const deflangName = langNameEum.zh
-export const langNames = [langNameEum.en, langNameEum.zh]
+export const langNames = [langNameEum.en, langNameEum.zh, langNameEum.ja, langNameEum.kr]
 
 type I18n = BaseI18n & {
   global: {
@@ -69,12 +73,16 @@ const i18n: I18n = createI18n({
 export const langs = {
   [langNameEum.en]: en,
   [langNameEum.zh]: zh,
+  [langNameEum.ja]: ja,
+  [langNameEum.kr]: kr,
 }
-console.error(langKey)
+console.error(langKey, langs)
 export const lang = langs[langKey] as typeof zh
 
 i18n.global.setLocaleMessage(langNameEum.zh, zh)
 i18n.global.setLocaleMessage(langNameEum.en, en)
+i18n.global.setLocaleMessage(langNameEum.ja, ja)
+i18n.global.setLocaleMessage(langNameEum.kr, kr)
 i18n.global.changeLang = (lang: langNameEum, reload = true) => {
   i18n.global.locale.value = lang
   local.set(localKey, lang)

+ 3 - 0
src/lang/weblate/en.json

@@ -308,5 +308,8 @@
             "inquestAddress": "Inspection location",
             "times": "Inspection time"
         }
+    },
+    "mediaLibrary": {
+        "file": "file"
     }
 }

+ 315 - 1
src/lang/weblate/ja.json

@@ -1 +1,315 @@
-{}
+{
+    "resCode": {
+        "0": "リクエスト成功",
+        "4008": "トークンが失効しました",
+        "4010": "アクセス権限がありません"
+    },
+    "security": {
+        "name": "セキュリティ"
+    },
+    "floder": {
+        "name": "ファイル",
+        "record": "検証記録",
+        "extractList": "抽出リスト",
+        "photo": "写真製本"
+    },
+    "sys": {
+        "search": "検索",
+        "all": "全て",
+        "download": "ダウンロード",
+        "create": "作成",
+        "rename": "名前変更",
+        "edit": "編集",
+        "add": "追加",
+        "unSaveMsg": "保存されていない操作があります。終了しますか?",
+        "404Page": "リソースが存在しないか削除されました",
+        "errPage": "エラーページ",
+        "delConfrm": "このデータを削除しますか?",
+        "del": "削除",
+        "quit": "終了",
+        "save": "保存",
+        "undata": "結果がありません",
+        "unSearchData": "検索結果がありません",
+        "addData": "データ追加",
+        "ok": "了解しました",
+        "serviceErr": "サービスに異常が発生しました。しばらくしてから再試行してください",
+        "other": "その他",
+        "crop": "トリミング",
+        "imgLoadErr": "画像の読み込みに失敗しました",
+        "tranCropImg": "トリミング画像を入力してください",
+        "cropIng": "トリミング中",
+        "tip": "ヒント",
+        "enter": "確定",
+        "cancel": "キャンセル",
+        "upload": {
+            "place1": "ファイルをアップロード",
+            "accept": "{accept}などの形式をサポート",
+            "normalizeScale": "幅*高さの比率 {scale}",
+            "maxSize": "サイズは{sizeStr}以下",
+            "maxLen": "最大{maxLen}個まで",
+            "conAdd": "続けて追加",
+            "rep": "置換",
+            "previewErr": "プレビューの読み込みに失敗しました!",
+            "accErr": "形式エラー",
+            "accSuperErr": "{accept}形式のみサポート",
+            "scaleErr": "{name}の比率が{scale}ではありません",
+            "sizeErr": "{name}のサイズが{sizeStr}を超えています",
+            "lenErr": "最大{maxLen}個までアップロード可能です!"
+        },
+        "placeInput": "入力してください",
+        "placeSelect": "選択してください",
+        "unSelect": "選択肢がありません",
+        "unSearch": "検索結果なし",
+        "jsError": "メモリ不足です。複数のページやアプリを同時に開かないでください。ブラウザを再起動して再度開いてください。",
+        "viewPWD": "アクセスパスワード",
+        "placPWD": "パスワードを入力してください!",
+        "pwdErr": "パスワードが間違っています。再入力してください。",
+        "list": "データ一覧"
+    },
+    "material": {
+        "name": "メディアライブラリ",
+        "selectCount": "選択済みデータ",
+        "search": "名前で検索",
+        "uploadSuccess": "アップロード成功",
+        "uploadErr": "アップロード失敗",
+        "up": "+メディアライブラリからアップロード",
+        "uploadIng": "アップロード中",
+        "selectErr": "最大{count}件まで選択可能",
+        "tabs": {
+            "name": "名前",
+            "format": "形式",
+            "size": "サイズ",
+            "status": "状態",
+            "group": "グループ",
+            "action": "操作"
+        }
+    },
+    "view": {
+        "name": "ビュー抽出",
+        "vName": "ビュー",
+        "defName": "ビュー{num}",
+        "nameErr": "ビュー名は必須です",
+        "all": "全てのビュー"
+    },
+    "guide": {
+        "name": "ガイド",
+        "modelErr": "ガイドのモデルが削除されました。再生できません",
+        "defTitle": "ガイド{num}",
+        "nameErr": "ガイド名は必須です",
+        "pErr": "ポイントは2つ以上必要です",
+        "guide": {
+            "add": "視点を追加",
+            "time": "動画の長さ",
+            "name": "ツアー",
+            "clear": "画面をクリア",
+            "undata": "ツアーがありません",
+            "unItems": "空のガイドは保存できません!",
+            "delConfirm": "この画面を削除しますか?",
+            "clearConfirm": "画面をクリアしますか?"
+        },
+        "pathName": "ルート({count})",
+        "guideName": "ツアー({count})",
+        "path": {
+            "lineWidth": "ルートの太さ",
+            "name": "ルート",
+            "title": "ルート名",
+            "lineColor": "ルートの色",
+            "showDirection": "ルートの矢印",
+            "reverseDirection": "矢印の向きを反転",
+            "fontSize": "文字サイズ",
+            "visibilityRange": "表示範囲",
+            "preview": "ルートをプレビュー",
+            "stop": "停止",
+            "pointTitle": "ポイント編集",
+            "pointDesc": "説明",
+            "globalVisibility": "全範囲で表示",
+            "applyConfirm": "この設定を全ての位置に適用しますか?"
+        }
+    },
+    "measure": {
+        "area": {
+            "desc": "面積",
+            "unit": "面積"
+        },
+        "list": "測定リスト",
+        "name": "測定",
+        "free": {
+            "desc": "自由",
+            "unit": "長さ"
+        },
+        "vertical": {
+            "desc": "垂直",
+            "unit": "長さ"
+        },
+        "nameErr": "測定名は必須です"
+    },
+    "setting": {
+        "name": "設定",
+        "initView": "初期画面",
+        "back": "背景設定",
+        "backs": [
+            "なし",
+            "地図",
+            "青空と白雲",
+            "曇天",
+            "夜空",
+            "夕暮れ"
+        ]
+    },
+    "record": {
+        "name": "画面録画",
+        "vName": "録画",
+        "defName": "解説動画{num}",
+        "nameErr": "動画名は必須です",
+        "start": "録画開始",
+        "list": "全ての動画",
+        "delConfirm": "動画を削除しますか?",
+        "tag": "タグ",
+        "merge": "動画を結合",
+        "con": "録画を続ける",
+        "sizeErr": "制限サイズを超えました。保存後に続行してください!",
+        "backHandler": "バックグラウンド処理中"
+    },
+    "case": {
+        "name": "事件情報",
+        "tmName": "検証情報",
+        "sn": "事件名",
+        "summary": "事件概要",
+        "yv": "はい",
+        "nv": "いいえ",
+        "cols": {
+            "caseTitle": "事件名",
+            "caseNum": "登録番号",
+            "caseCategory": "事件カテゴリ",
+            "crimeTime": "発生時刻",
+            "homicideCase": "殺人事件か",
+            "caseRegion": "発生地域",
+            "criminalCase": "刑事事件か",
+            "caseAddress": "発生場所",
+            "latAndLong": "緯度経度"
+        },
+        "tmCols": {
+            "commandTime": "指令センター通話時刻",
+            "alarmTime": "通報時刻",
+            "alarmName": "通報者",
+            "assignDept": "指定/報告部署",
+            "inquestDept": "現場検証部署",
+            "assignType": "指定方法",
+            "inquestAddress": "検証場所",
+            "times": "検証時間"
+        }
+    },
+    "tagging": {
+        "tabs": {
+            "method": "抽出方法",
+            "typeId": "特徴の説明",
+            "part": "残留部位",
+            "principal": "抽出者"
+        },
+        "list": "タグリスト",
+        "name": "タグ",
+        "style": "アイコンスタイル",
+        "type": {
+            "1": "痕跡",
+            "2": "手形",
+            "3": "足跡",
+            "4": "血液 ",
+            "5": "死体",
+            "6": "その他",
+            "7": "物的証拠"
+        },
+        "plcTitle": "タグタイトルを入力してください",
+        "titleFex": "タイトル固定表示",
+        "plcType": "説明:",
+        "plcType1": "特徴の説明:",
+        "mic": "音声",
+        "plcPart": "残留部位:",
+        "plcMethod": "抽出方法:",
+        "plcPrincipal": "抽出者:",
+        "titleErr": "タグタイトルは必須です!",
+        "micPlc": "mp3/wav形式、30MB以下",
+        "media": "画像/動画",
+        "pleMedia": "画像/動画をアップロード",
+        "plcMedia1": "JPG、PNG、MP4形式、100MB以下、最大10ファイル",
+        "styleErr": "アイコンスタイルを選択してください!",
+        "apply": "全てに適用",
+        "posErr": "この位置には追加できません",
+        "pos": "配置",
+        "plcPos": "配置位置",
+        "posName": "位置",
+        "applyConfirm": "この設定を全ての位置に適用しますか?",
+        "posTabs": {
+            "scale": "アイコンサイズ",
+            "rotation": "アイコン回転",
+            "fontSize": "文字サイズ",
+            "type": "アイコン配置方法",
+            "typeVal": [
+                "浮遊",
+                "地面/壁面"
+            ],
+            "lineHeight": "ガイド線の高さ",
+            "visibilityRange": "表示範囲",
+            "globalVisibility": "全範囲で表示"
+        },
+        "posTip": "モデル上をクリックしてタグ位置を選択してください"
+    },
+    "scene": {
+        "list": "シーンリスト",
+        "manage": "シーン管理",
+        "add": "シーン追加",
+        "tabs": {
+            "name": "名前",
+            "type": "タイプ",
+            "createTime": "撮影/作成時刻"
+        },
+        "typeRaws": {
+            "0": "Meshシーン",
+            "1": "Meshシーン",
+            "2": "点群シーン",
+            "4": "Meshシーン",
+            "5": "点群シーン",
+            "6": "Meshシーン",
+            "7": "Meshシーン"
+        },
+        "types": {
+            "0": "4DKanKan Minion/Mesh",
+            "1": "4DKanKan Minion/Mesh",
+            "2": "4DKanKan Mega/点群",
+            "3": "メディアライブラリ",
+            "4": "4DKanKan Mega/Mesh",
+            "5": "4DKanKan Meta/点群",
+            "6": "4DKanKan Meta/Mesh",
+            "7": "円周率/Mesh"
+        }
+    },
+    "fuse": {
+        "name": "マルチ融合",
+        "label": "融合シーン",
+        "join": "結合",
+        "unModel": "モデルが存在しません!",
+        "model": "3Dモデル",
+        "pano": "パノラマ画像",
+        "dataQue": "データソース",
+        "dataSize": "データサイズ",
+        "dataTime": "撮影時関",
+        "sync": "同期検証",
+        "syncErr": "同期表示は{types}タイプのシーンのみサポートされます",
+        "repScale": "等倍スケーリング",
+        "defConfirm": "デフォルトに戻しますか?この操作は取り消せません",
+        "setScale": "スケール設定",
+        "opacity": "モデルの不透明度",
+        "registration": "位置合わせ",
+        "def": "デフォルトに戻す",
+        "move": "移動",
+        "flip": "回転",
+        "len": "長さ",
+        "reSelect": "ポイント再選択",
+        "selectTip": "2点を選択して実際の長さを入力してください",
+        "vre": "水平方向の位置を調整してください",
+        "hre": "垂直方向の位置を調整してください",
+        "opacity1": "不透明度"
+    },
+    "mediaLibrary": {
+        "file": "ファイル"
+    }
+}

+ 37 - 11
src/lang/weblate/kr.json

@@ -48,7 +48,8 @@
             "sizeErr": "{name}의 크기가 {sizeStr}를 초과했습니다",
             "scaleErr": "{name}의 비율 부위는 {scale}이 아닙니다",
             "accSuperErr": "{accept} 형식의 파일만 지원합니다",
-            "lenErr": "최대 {maxLen}개의 파일만 지원됩니다!"
+            "lenErr": "최대 {maxLen}개의 파일만 지원됩니다!",
+            "previewErr": "미리보기 로딩에 실패했습니다!"
         },
         "cancel": "취소하다",
         "tip": "힌트",
@@ -60,7 +61,10 @@
         "jsError": "메모리가 부족합니다. 여러 페이지나 애플리케이션을 동시에 열지 마시고, 브라우저를 재시작한 후 다시 열어보십시오.",
         "pwdErr": "비밀번호가 틀렸습니다. 다시 입력해 주세요.",
         "viewPWD": "액세스 비밀번호",
-        "placPWD": "비밀번호를 입력해 주세요"
+        "placPWD": "비밀번호를 입력해 주세요",
+        "rename": "다시 명명하다",
+        "errPage": "에러 페이지",
+        "quit": "나가다"
     },
     "material": {
         "up": "+미디어 라이브러리에서 업로드",
@@ -77,7 +81,8 @@
             "format": "서식",
             "status": "상태"
         },
-        "selectErr": "최대 {count}항목을 선택하세요"
+        "selectErr": "최대 {count}항목을 선택하세요",
+        "search": "이름을 입력하여 검색하세요"
     },
     "view": {
         "name": "뷰 추출",
@@ -113,19 +118,30 @@
             "fontSize": "글자 크기",
             "applyConfirm": "이 속성을 모든 위치에 적용하시겠습니까?",
             "reverseDirection": "화살표 방향을 반대로 하다",
-            "pointTitle": "편집하다"
-        }
+            "pointTitle": "편집하다",
+            "lineWidth": "경로 두께",
+            "lineColor": "경로 색상",
+            "name": "노선",
+            "preview": "미리보기 경로"
+        },
+        "pathName": "노선({count})"
     },
     "measure": {
         "vertical": {
-            "desc": "수직"
+            "desc": "수직",
+            "unit": "길이"
         },
         "name": "측정하다",
         "list": "측정 목록",
         "free": {
-            "desc": "자유"
+            "desc": "자유",
+            "unit": "길이"
         },
-        "nameErr": "측정 명칭은 공란이 될 수 없습니다"
+        "nameErr": "측정 명칭은 공란이 될 수 없습니다",
+        "area": {
+            "desc": "면적",
+            "unit": "면적"
+        }
     },
     "setting": {
         "backs": [
@@ -187,7 +203,8 @@
         "tabs": {
             "method": "추출 방법",
             "typeId": "특징 기술",
-            "principal": "추출자"
+            "principal": "추출자",
+            "part": "유적 부분"
         },
         "name": "태그",
         "list": "태그 목록",
@@ -232,7 +249,9 @@
             "visibilityRange": "시야 범위",
             "lineHeight": "리드 높이"
         },
-        "posTip": "모델 위에서 클릭하여 라벨 위치를 선택해 주세요"
+        "posTip": "모델 위에서 클릭하여 라벨 위치를 선택해 주세요",
+        "plcPart": "유적 부분:",
+        "mic": "음악"
     },
     "scene": {
         "list": "장면 목록",
@@ -284,6 +303,13 @@
         "setScale": "비율을 설정하다",
         "hre": "현재 창에서 수직 방향 위치를 조정해 주세요",
         "vre": "현재 창에서 수평 방향 위치를 조정해 주세요",
-        "selectTip": "두 지점을 선택하여 알려진 길이를 표시하고, 실제 길이를 입력해 주세요"
+        "selectTip": "두 지점을 선택하여 알려진 길이를 표시하고, 실제 길이를 입력해 주세요",
+        "registration": "정합하다",
+        "opacity1": "투명도",
+        "reSelect": "다시 지점을 선택하다",
+        "len": "길이"
+    },
+    "mediaLibrary": {
+        "file": "공문서. 서류. 문건."
     }
 }

文件差异内容过多而无法显示
+ 1162 - 287
src/lang/weblate/zh.json


+ 6 - 5
src/layout/edit/scene-select.vue

@@ -12,7 +12,8 @@
     <div>
       <div className="model-header">
         <p class="header-desc">
-          {{$t('material.selectCount')}}<span>( {{ rowSelection.selectedRowKeys.length }} )</span>
+          {{ $t("material.selectCount")
+          }}<span>( {{ rowSelection.selectedRowKeys.length }} )</span>
         </p>
         <Search
           className="content-header-search"
@@ -58,8 +59,8 @@
       <slot></slot>
       <template #overlay>
         <Menu>
-          <MenuItem @click="visible = true">{{ $t('scene.manage') }}</MenuItem>
-          <MenuItem @click="selectModel">{{ $t('material.name') }}</MenuItem>
+          <MenuItem @click="visible = true">{{ $t("scene.manage") }}</MenuItem>
+          <MenuItem @click="selectModel">{{ $t("material.name") }}</MenuItem>
         </Menu>
       </template>
     </Dropdown>
@@ -101,12 +102,12 @@ const Search = Input.Search;
 const selectIds = computed(() => fuseModels.value.filter(item => item.type !== SceneType.SWMX).map((item) => item.modelId));
 const visible = ref(false);
 const keyword = ref("");
-const SceneGroupTypeDesc: any = lang.scene.typeRaws 
+const SceneGroupTypeDesc: any = lang.scene.typeRaws
 
 const origin = computed(() =>
   scenes.value.filter(scene => scene.type !== SceneType.SWMX).map((scene) => ({
     ...scene,
-    createTime: scene.createTime.substr(0, 16),
+    createTime: scene.createTime?.substr(0, 16),
     type: SceneGroupTypeDesc[scene.type],
   }))
 );