Browse Source

update翻译

tremble 2 years ago
parent
commit
d2b528486a
30 changed files with 1747 additions and 163 deletions
  1. 1 1
      packages/qjkankan-editor/src/components/rangeItem/index.vue
  2. 14 11
      packages/qjkankan-editor/src/components/sceneGroupInEditor.vue
  3. 6 6
      packages/qjkankan-editor/src/components/sceneInGroupInEditor.vue
  4. 2 2
      packages/qjkankan-editor/src/framework/MenuPC.vue
  5. 1 1
      packages/qjkankan-editor/src/framework/play/index.vue
  6. 2 2
      packages/qjkankan-editor/src/framework/play/pano/components/list.vue
  7. 3 3
      packages/qjkankan-editor/src/framework/play/pano/index.vue
  8. 18 2
      packages/qjkankan-editor/src/lang/_en.js
  9. 763 0
      packages/qjkankan-editor/src/lang/_en.json
  10. 32 1
      packages/qjkankan-editor/src/lang/_zh.js
  11. 763 0
      packages/qjkankan-editor/src/lang/_zh.json
  12. 2 2
      packages/qjkankan-editor/src/lang/index.js
  13. 4 1
      packages/qjkankan-editor/src/router/editorRouter.js
  14. 1 1
      packages/qjkankan-editor/src/router/index.js
  15. 3 3
      packages/qjkankan-editor/src/views/base/Toolbar.vue
  16. 1 1
      packages/qjkankan-editor/src/views/base/openingAnimationSettings.vue
  17. 2 2
      packages/qjkankan-editor/src/views/base/openingTipSettings.vue
  18. 7 7
      packages/qjkankan-editor/src/views/explanation/explanationSettings.vue
  19. 66 64
      packages/qjkankan-editor/src/views/hotspot/EditPanel.vue
  20. 15 15
      packages/qjkankan-editor/src/views/hotspot/HotSpotList.vue
  21. 4 3
      packages/qjkankan-editor/src/views/hotspot/hotspotType/audio.vue
  22. 3 3
      packages/qjkankan-editor/src/views/hotspot/hotspotType/image.vue
  23. 2 2
      packages/qjkankan-editor/src/views/hotspot/hotspotType/link.vue
  24. 2 2
      packages/qjkankan-editor/src/views/hotspot/hotspotType/scene.vue
  25. 1 1
      packages/qjkankan-editor/src/views/hotspot/hotspotType/textarea.vue
  26. 3 3
      packages/qjkankan-editor/src/views/hotspot/hotspotType/video.vue
  27. 1 0
      packages/qjkankan-editor/src/views/material/works/index.vue
  28. 18 17
      packages/qjkankan-editor/src/views/navigation/groupSettings.vue
  29. 5 5
      packages/qjkankan-editor/src/views/navigation/initialSceneSettings.vue
  30. 2 2
      packages/qjkankan-editor/src/views/screen/Setting.vue

+ 1 - 1
packages/qjkankan-editor/src/components/rangeItem/index.vue

@@ -12,7 +12,7 @@
       <div class="minmax">
         <span>
           {{current.min}}{{current.unit}}
-          <span v-if="current.tip"> (不显示)</span>
+          <span v-if="current.tip"> {{$i18n.t('edit_settings.no_display')}}</span>
         </span>
         <span>{{current.max}}{{current.unit}}</span>
       </div>

+ 14 - 11
packages/qjkankan-editor/src/components/sceneGroupInEditor.vue

@@ -25,13 +25,13 @@
         <span class="group-name" v-title="groupNode.name">{{groupNode.name}}</span>
         <i v-show="level === 1"
           class="iconfont icon-editor_list_add icon-add"
-          v-tooltip="'新增二级分组'"
+          v-tooltip="$i18n.t('navigation.add_two_group')"
           @click.stop="onRequestForAddGroup"
         >
         </i>
         <i
           class="iconfont icon-editor_list_image icon-image"
-          v-tooltip="'新增全景图或三维场景'" 
+          v-tooltip="$i18n.t('navigation.add_pano_or_scene')" 
           @click.stop="onRequestForAddScene"
           v-show="
             level === 2 ||
@@ -40,7 +40,8 @@
               (
                 groupNode.children.length === 0 ||
                 (
-                  groupNode.children.length === 1 && groupNode.children[0].name === '默认二级分组'
+                  groupNode.children.length === 1 && 
+                  (groupNode.children[0].name === '默认二级分组'||groupNode.children[0].name === $i18n.t('navigation.default_group_two'))
                 )
               )
             )
@@ -49,13 +50,13 @@
         </i>
         <i
           class="iconfont icon-editor_list_edit icon-edit"
-          v-tooltip="'重命名'"
+          v-tooltip="$i18n.t('navigation.rename')"
           @click.stop="onClickForRename"
         >
         </i>
         <i
           class="iconfont icon-editor_list_delete icon-delete"
-          v-tooltip="'删除'"
+          v-tooltip="$i18n.t('navigation.delete')"
           @click.stop="onRequestForDelete"
         >
         </i>
@@ -64,7 +65,7 @@
             v-clickoutside="onRequestForCancelDelete"
             @click.stop="onConfirmDelete"
           >
-            删除
+           {{$i18n.t('navigation.delete')}} 
           </div>
         </div>
       </template>
@@ -74,7 +75,7 @@
         v-model.trim="newName"
         ref="input-for-rename"
         maxlength="50"
-        placeholder="输入名字"
+        :placeholder="$i18n.t('navigation.enter_name')"
         @blur="onInputNewNameComplete"
         @keydown.enter="onInputEnter"
         @click.stop
@@ -82,7 +83,8 @@
     </div>
 
     <div class="group-content" v-if="isExpanded">
-      <template v-if="!(groupNode.children.length === 1 && groupNode.children[0].name === '默认二级分组')">
+      <template v-if="!(groupNode.children.length === 1 &&
+       (groupNode.children[0].name === '默认二级分组' || groupNode.children[0].name === $i18n.t('navigation.default_group_two')))">
         <InsertPositionTip
           position-debug="1"
           :indentLevel="level + 1"
@@ -157,7 +159,7 @@
 
     <div class="dialog" style="z-index: 2000" v-if="isShowSelectionWindow">
       <MaterialSelector
-        title="选择素材"
+        :title="$i18n.t('gather.select_material')"
         @cancle="isShowSelectionWindow = false"
         @submit="onSubmitFromMaterialSelector"
         :selectableType="['pano', '3D']"
@@ -327,7 +329,8 @@ export default {
         })
         if (temp) {
           setTimeout(() => {
-            this.$msg.message(`${item.type == '4dkk' ? '场景' : '全景图'}${item.sceneTitle}已存在,不可重复添加`)
+            this.$msg.message(
+              `${item.type == '4dkk' ? this.$i18n.t('navigation.scene_name') : this.$i18n.t('navigation.pano')}${this.$i18n.t('navigation.already_exists',{msg:item.sceneTitle})}`)
           }, i * 100)
           allSuccess = false
           return
@@ -337,7 +340,7 @@ export default {
 
       this.isShowSelectionWindow = false
       if (allSuccess) {
-        this.$msg.success("操作成功")
+        this.$msg.success(this.$i18n.t('gather.success'))
       }
     },
     onDragStart(e) {

+ 6 - 6
packages/qjkankan-editor/src/components/sceneInGroupInEditor.vue

@@ -28,18 +28,18 @@
         v-model.trim="newName"
         ref="input-for-rename"
         maxlength="50"
-        placeholder="输入名字"
+        :placeholder="$i18n.t('navigation.enter_name')"
         @blur="onInputNewNameComplete"
         @keydown.enter="onInputEnter"
       />
       <div class="right-bottom">
         <span class="scene-type">{{translateSceneType(sceneInfo.type)}}</span>
         <div class="icons">
-          <i class="iconfont icon-editor_list_edit icon-edit" v-tooltip="'重命名'"
+          <i class="iconfont icon-editor_list_edit icon-edit" v-tooltip="$i18n.t('navigation.rename')"
             @click="onRequestForRename"
           >
           </i>
-          <i class="iconfont icon-editor_list_delete icon-delete" v-tooltip="'删除'"
+          <i class="iconfont icon-editor_list_delete icon-delete" v-tooltip="$i18n.t('navigation.delete')"
             @click="onRequestForDelete"
           >
           </i>
@@ -51,7 +51,7 @@
         v-clickoutside="onRequestForCancelDelete"
         @click="onConfirmDelete"
       >
-        删除
+        {{$i18n.t('navigation.delete')}}
       </div>
     </div>
   </div>
@@ -94,9 +94,9 @@ export default {
     ossImagePreviewUrlSuffix,
     translateSceneType(type) {
       if (type === 'pano') {
-        return '全景'
+        return this.$i18n.t('navigation.pano')
       } else {
-        return '三维'
+        return this.$i18n.t('navigation.scene')
       }
     },
     onRequestForRename() {

+ 2 - 2
packages/qjkankan-editor/src/framework/MenuPC.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="pc-menu" app-border dir-right>
+  <div class="pc-menu" :style="`width:${$i18n.t('style_key.menu_width')}`" app-border dir-right>
     <ul class="pc-menu-container">
       <li v-for="(item, key) in menu" v-show="!item.hidden" :class="{disable:key!=0&&!isShow}" :key="key">
         <router-link :to="item.link" :exact="false">
@@ -11,7 +11,7 @@
     </ul>
 
     <a class="help" href="https://docs.4dkankan.com/#/product/4dpano/zh-cn/README" target="_blank">
-      <img v-tooltip="'帮助中心'"  :src="require(`@/assets/images/icons/help_tips.png`)" alt="">
+      <img v-tooltip="$i18n.t('edit_settings.help_center')"  :src="require(`@/assets/images/icons/help_tips.png`)" alt="">
     </a>
 
   </div>

+ 1 - 1
packages/qjkankan-editor/src/framework/play/index.vue

@@ -4,7 +4,7 @@
     ref="layer"
     :class="{showPlayer:$route.meta.hasPreviewArea}"
     :style="{
-      left: $route.meta.previewAreaExtraLeft + 58 + 'px',
+      left: $route.meta.previewAreaExtraLeft + Number($i18n.t('style_key.play_width')||0) + 58 + 'px',
     }"
   >
     <pano />

+ 2 - 2
packages/qjkankan-editor/src/framework/play/pano/components/list.vue

@@ -8,7 +8,7 @@
        id="swScenes" ref="sw"
         v-swiper:mySwiper="swiperOptions" v-if="currentScenesList.length > 0">
         <ul class="swiper-wrapper">
-          <li v-tooltip="item.type === '4dkk' ? '请前往四维时代个人中心编辑场景' : ''" @click="tabCurrentScene(item)"
+          <li v-tooltip="item.type === '4dkk' ? $i18n.t('navigation.scene_edit_tips') : ''" @click="tabCurrentScene(item)"
             class="swiper-slide" :class="{
               active: currentScene.id == item.id,
               loopspan: item.sceneTitle.length > spanlength && currentScene.id == item.id,
@@ -26,7 +26,7 @@
       </div>
 
       <div class="swiper-container" :style="`width:${secondaryW}px`" id="swSecondary" ref="sw1"
-        v-swiper:mySwipera="swiperOptions" v-if="!(secondaryList.length === 1 && secondaryList[0].name === '默认二级分组')">
+        v-swiper:mySwipera="swiperOptions" v-if="!(secondaryList.length === 1 && (secondaryList[0].name === '默认二级分组'||secondaryList[0].name === $i18n.t('navigation.default_group_two')))">
         <ul class="swiper-wrapper">
           <li class="swiper-slide" @click="tabSecondary(item)" :class="{
             active: currentSecondary.id == item.id,

+ 3 - 3
packages/qjkankan-editor/src/framework/play/pano/index.vue

@@ -9,13 +9,13 @@
 
     <template v-if="showSnapshot && currentScene">
       <snapshot :showFlash="showFlash"></snapshot>
-      <button class="ui-button submit set-initial-view" :class="{disable: currentScene.type === '4dkk',}" @click="onClick">将当前视角设为初始画面</button>
+      <button class="ui-button submit set-initial-view" :class="{disable: currentScene.type === '4dkk',}" @click="onClick">{{$i18n.t('screen.setting_screen')}}</button>
     </template>
 
     <div class="btn-4dkk-tip" v-if="currentScene.type ==='4dkk'">
       <img src="@/assets/images/default/empty-go-4dkk.png" alt="" draggable="false">
-      <div>请前往四维时代个人中心编辑场景~</div>
-      <button class="ui-button submit" @click="onClickGo4dkk">立即前往</button>
+      <div>{{$i18n.t('navigation.scene_edit_tips')}}~</div>
+      <button class="ui-button submit" @click="onClickGo4dkk">{{$i18n.t('navigation.go_scene_editor')}}</button>
     </div>
   </div>
 </template>

+ 18 - 2
packages/qjkankan-editor/src/lang/_en.js

@@ -577,7 +577,7 @@ module.exports = {
         "delete": "Delete",
         "no_serch_result": "No resulrs found",
         "no_material_result": "No materials found",
-        "had_load": "{msg}pieces of data have been loaded",
+        "had_load": "{msg} pieces of data have been loaded",
         "uploading": "Uploading {msg}"
     },
     "personal_center": {
@@ -638,8 +638,17 @@ module.exports = {
         "setting_cover": "Thumbnail Settings",
         "cover_size": "512*512px, support jpg/png format",
         "title": "Title",
+        "description": "Description",
         "work_placeholder": "Please enter the project title",
-        "intro_placeholder": "Please input no more than 500 words of text content."
+        "intro_placeholder": "Please input no more than 500 words of text content.",
+
+
+        "help_center":"帮助中心",
+        "display_time":"显示时间",
+        "no_display":"(不显示)",
+        "second":"秒",
+
+
     },
 
     "zh_key": {
@@ -658,5 +667,12 @@ module.exports = {
         '自定义LOGO': "Custom Logo",
         '自定义遮罩': "Custom Mask",
         '自定义按钮': "Custom Button",
+    },
+
+
+
+    "style_key":{
+        'menu_width':'88px',
+        'play_width':'31'
     }
 }

+ 763 - 0
packages/qjkankan-editor/src/lang/_en.json

@@ -0,0 +1,763 @@
+{
+  "menu": {
+    "__name": "菜单",
+    "music": "BGM",
+    "base": "Basic Setting",
+    "information": "Scene Info",
+    "screen": "Scene Cover",
+    "hotspot": "Add Hotspot",
+    "guide": "Tour Guide",
+    "sign": "Spot Logo",
+    "walk": "Roaming Possibility",
+    "model": "Model Edit",
+    "custom": "Upload Download",
+    "videos": "Add Videos",
+    "vrhouse": "VR house",
+    "business": "Business part",
+    "scene": "Scene transition",
+    "video": "Add video",
+    "decor": "Decor",
+    "link": "Scene associate"
+  },
+  "modules": {
+    "__name": "模块",
+    "base": {
+      "__name": "基础设置",
+      "qrcode": "QR Code",
+      "qrcode_download": "Download the QR code",
+      "qrcode_tips": "Customize your logo",
+      "scene_link": "Scene Link",
+      "scene_link_copy": "Copy the link",
+      "scene_link_copy_tips": "Copied",
+      "bgm": "BGM",
+      "pano_text": "Roaming",
+      "mode_2d_text": "Layout Plan",
+      "mode_3d_text": "3D Model",
+      "map_text": "Mini-map",
+      "vr_text": "VR Mode",
+      "vr_tips": "Please view the VR effect on the mobile display page",
+      "guide_text": "Tour Guide",
+      "rule_text": "Measurements",
+      "cad_text": "Floor Layout",
+      "measure_text": "Ruler",
+      "measure_tips": "The measuring function cannot be used in edit mode, please use it on display page",
+      "turned_vr": "VR turned {status}",
+      "turned_map": "Mini-map feature  {status}",
+      "turned_cad": "Layout plan {status}",
+      "turned_m2d": "Plane view {status}",
+      "turned_m3d": "3D view {status}",
+      "turned_pano": "Roaming view {status}",
+      "turned_rule": "Measuring function {status}",
+      "turned_guide": "Tour guide {status}",
+      "turned_measure": "Ruler {status}",
+      "shortcut_copy": "One-click copy",
+      "share_link": "Share links to friends",
+      "measure_show_tips": "Please use the measuring function on the display page",
+      "delete_measure_line": "Delete measurement line",
+      "please_click_tips": "'Please click“allow”'",
+      "vr_fail_app_tips": "The browser failed to detect the rotation. Please enable the settings such as motion and direction access in the phone or browser settings, and then refresh this page.",
+      "vr_fail_safari_tips": "The browser failed to detect the rotation. To fully experience the VR effect, please open the \"Motion and Direction Access\" switch under \"Settings\"> \"Safari\"> \"Privacy and Security\", and then refresh this page.",
+      "loading_bottom_text": "4Dage provides technical support",
+      "vr_fail_reopen_tips": "Can't access motion and orientation, please restart App and try again.",
+      "add_music_title": "Add BGM",
+      "add_music_tips": "Support MP3, WAV and other audio formats, no more than 5MB",
+      "re_add_music": "Re-add",
+      "re_add_title": "Re-add BGM",
+      "re_add_tips": "The latest music will replace the added music, <br>Are you sure to continue adding?",
+      "re_add_mobile_tips": "Re-adding will replace the added music",
+      "delete_tips": "Are you sure to delete the current BGM?",
+      "delete_title": "Delete BGM",
+      "bgm_empty_tips": "Please select BGM",
+      "wechat": "Wechat",
+      "friend_circle": "Moments"
+    },
+    "information": {
+      "__name": "场景信息",
+      "title": "Title",
+      "title_tips": "Please enter a title",
+      "title_require": "Please add a title (max {limit} characters).",
+      "description": "Description",
+      "description_tips": "Please enter a description.",
+      "link": "Add a link",
+      "link_text_tips": "Link title",
+      "link_href_tips": "Link",
+      "link_text_require": "Please fill in the text.",
+      "link_href_require": "Please fill in the link.",
+      "classify": "Choose a category",
+      "upload_time": "Upload date",
+      "record": "Not recorded",
+      "shoot_count": "Number of shots",
+      "password": "Set a password",
+      "password_tips": "4 characters",
+      "password_desc": "Set a password if you don't want it to be accessible for the public.",
+      "password_require": "Please enter a password with {limit} digits",
+      "logo_edit": "Edit the logo",
+      "logo_exit": "Finish editting logo",
+      "logo_show_bottom": "Show original logo",
+      "logo_style1": "Logo style 1",
+      "logo_style2": "Logo style 2",
+      "logo_delete": "Delete the uploaded logo?"
+    },
+    "screen": {
+      "__name": "初始画面",
+      "current": "Current cover",
+      "current_set": "Set as scene cover",
+      "tips": "Drag the screen, click and save your scene cover."
+    },
+    "hotspot": {
+      "__name": "添加热点",
+      "add": "Add hotspot",
+      "edit": "Edit hotspot",
+      "count": "Added hotspots",
+      "location": "Hotspot Location",
+      "location_tips": "Drag the hotspot to another position.",
+      "location_modify": "Modify hotspot location",
+      "location_confirm": "Confirm hotspot location",
+      "location_desc": "Please drag the hot spot in the two scene areas on the left and align it to the desired point.",
+      "style": "Choose hotspot style",
+      "style_desc": "Choose the default style, or manually upload the picture to customize the style, upload the picture in PNG/JPG format",
+      "style_name": "Style",
+      "style_dele": "Sure to delete this style?",
+      "style_manage": "Manage",
+      "style_exit": "Quit",
+      "media_photo": "Add pictures to enrich hot content",
+      "media_video": "Upload local videos for more display",
+      "media_voice": "Upload local audio content for hotspot explanation",
+      "media_link": "You can add a hyperlink to the video, and the video will be played in the hotspot",
+      "title": "Title",
+      "title_tips": "Please enter a title",
+      "title_require": "Please add a title (max {limit} characters).",
+      "description": "Description",
+      "description_tips": "Please enter a description.",
+      "text_link": "Add a link",
+      "text_link_text_tips": "Please fill in the link text",
+      "text_link_href_tips": "Please fill in the link address",
+      "text_link_text_require": "Link text cannot be empty",
+      "text_link_href_require": "Link address cannot be empty",
+      "link": "Add a link",
+      "link_require": "Please add an external link",
+      "photo": "Photo",
+      "voice": "Audio",
+      "video": "Video",
+      "photo_tips": "Support JPG, PNG and other image formats",
+      "voice_tips": "Support MP3, WAV and other audio formats",
+      "video_tips": "Support MP4 format. <20M",
+      "photo_require": "Please add photos",
+      "voice_require": "Please add audio",
+      "video_require": "Please add videos",
+      "m_location_tips1": "Point split-screen hotspots above and below to the marked target",
+      "m_location_tips2": "Determine the hotspot location, click next to edit content",
+      "m_location_up": "Above",
+      "m_location_left": "Left side",
+      "m_location_move_tips": "The auxiliary calibration position may be inaccurate,<br>please check and drag to {direction} the same location",
+      "set_visible_btn": "Hotspot Visiblity",
+      "save_visible_btn": "Save",
+      "save_hotspot_done": "Successfully saved hotspot",
+      "save_hotspot_fail": "Failed to save hotspot",
+      "delete_hotspot_tips": "Do you want to delete the current hotspot?",
+      "delete_hotspot_done": "Successfully deleted hotspot",
+      "delete_hotspot_fail": "Failed to delete hotspot",
+      "cant_add_hotspot_tips": "Unable to add hotspot",
+      "cant_add_hotspot_content": "The number of hotspots has reached the maximum: {limit}",
+      "link_text_tips": "Link title",
+      "link_href_tips": "Link",
+      "link_text_require": "Please fill in the text",
+      "link_href_require": "Please fill in the link",
+      "add_media": "Add Content"
+    },
+    "guide": {
+      "__name": "自动导览",
+      "route": "Tour Route",
+      "view": "Switch View",
+      "record": "Start recording",
+      "record_audio": "Record",
+      "pause": "Pause",
+      "stop": "Stop",
+      "end": "End",
+      "delete": "Delete",
+      "continue": "Continue recording",
+      "preview": "Preview",
+      "clear": "Clear",
+      "sync": "Audiovisual synchronization",
+      "sound": "Record audio",
+      "file": "Upload audio",
+      "file_add": "Add audio",
+      "tips": "Click \"Start\" to record the tour.",
+      "start": "Start",
+      "finish": "Finish",
+      "less": "Less",
+      "replace_tips": "Do you want to start over the tour recording?",
+      "replace_content": "Redo the recording will overwrite previous data.",
+      "sound_open_fail_tips": "Failed to turn on the microphone",
+      "sound_tips": "Failed to turn on the microphone, continue recording?",
+      "sound_content": "Please allow this site to use the microphone in your browser settings and refresh the page.",
+      "upload_sound_done": "Upload sound explanation successfully",
+      "upload_sound_fail": "Failed to upload sound explanation",
+      "delete_sound_done": "Delete sound explanation successfully",
+      "delete_sound_fail": "Failed to delete sound explanation",
+      "room_title": "Title",
+      "room_title_tips": "Please enter the room title",
+      "room_title_require": "Please enter a title",
+      "room_panel_title": "Guide information",
+      "room_sound_title": "Record audio",
+      "delete_video_content": "Your current recording will be deleted",
+      "delete_file_content": "Your currently uploaded sound explanation will be deleted",
+      "delete_sound_content": "Your recorded audio will be deleted",
+      "camera_save_success": "Successfully saved camera",
+      "clear_video_tip": "Your current recording will be cleared",
+      "saving_sound": "Saving recording",
+      "save_sound_done": "Successfully saved recording",
+      "save_sound_fail": "Failed to save recording",
+      "no_sound_tips": "Currently does not support recordig.<br>Please record on WeChat or computer",
+      "sound_success_tips": "Successfully opened the microphone",
+      "sound_fail_tips": "Currently does not support recording.<br>Official account information configuration error",
+      "wechat_sound_fail_tips": "Failed to open WeChat microphone",
+      "open_sound_guide_tips": "If you want to record, please enable it in the WeChat settings-privacy-authorization management. And ensure that the recording equipment is normal",
+      "sound_cant_open_tips": "This browser does not support recording. <br>It is recommended to replace other mainstream browsers for a better experience",
+      "replace_sound_tips": "Re-record?",
+      "replace_sound_content": "Current sound explanation will be replaced",
+      "merge_sound_fail": "Fail to merge sound explanation",
+      "sound_limit": "The recording duration cannot exceed {time} minutes",
+      "select_to_record": "Please select the corresponding point to record the guide in this area"
+    },
+    "sign": {
+      "title": "Logo style",
+      "size": "Size",
+      "style0": "Style one",
+      "style1": "Style two",
+      "style2": "Style three",
+      "style3": "Upload"
+    },
+    "walk": {
+      "title": "Roaming Possibility",
+      "tips1": "Further optimize the experience during roaming by setting roaming possibility, such as cases in which one may penetrate through the walls. ",
+      "tips2": "Set the roaming possibility by clicking and setting the connection of each roaming point.",
+      "save": "Save current settings",
+      "hide": "Hide the spot",
+      "show": "Show the spot",
+      "pano_tips": "Tip: You hide the initial point, so you can't roam in this scene."
+    },
+    "model": {
+      "__name": "修整模型",
+      "cad": "CAD View",
+      "cad_download": "FloorPlan Download",
+      "view": "Switch View",
+      "title": "Add structure",
+      "title_door": "Doors and windows",
+      "title_component": "Components",
+      "title_other": "Others",
+      "attribute": "Attributes",
+      "door": "Door",
+      "slideDoor": "Slidedoor",
+      "casement": "Window",
+      "bayCase": "Bay Window",
+      "groundCase": "French Sash",
+      "column": "Column",
+      "furnColumn": "Frame Column",
+      "furnFlue": "Flue",
+      "point": "Point",
+      "line": "Interior Wall",
+      "tagging": "Tag",
+      "tagging_name_tips": "Tag name",
+      "tagging_area_tips": "Enter area",
+      "direction": "Compass",
+      "wallLine": "Interior wall",
+      "widget_delete": "{widget} will be deleted",
+      "panel_btn_default": "Reset",
+      "panel_btn_delete": "Delete",
+      "attr_angle": "Rotation angle",
+      "attr_within": "Flip direction",
+      "attr_ewidth": "Width",
+      "attr_eheight": "Height",
+      "attr_tick": "Tickness",
+      "attr_showTitle": "Tag name",
+      "attr_showContent": "Tag area",
+      "attr_top": "Top",
+      "attr_bottom": "Bottom",
+      "success": "Add successfully {widget}",
+      "error_location": "Current location cannot be added {widget}",
+      "error_outdoor": "Outdoor cannot be added {widget}",
+      "error_something": "Building at the current location cannot be added {widget}",
+      "error_widget": "Current location cannot be added {widget}",
+      "enter_adjust_floor": "Ground adjustment",
+      "exit_adjust_floor": "Exit adjustment mode",
+      "color_title": "Protractor Color:"
+    },
+    "videos": {
+      "__name": "添加视频",
+      "tips": "Please click on the reference plane to set the video position.",
+      "panel_title": "Video attributes",
+      "panel_preview": "Preview",
+      "panel_upload": "Upload",
+      "panel_upload_tips": "Support MP4 format",
+      "panel_move": "Move",
+      "panel_zoom": "Zoom",
+      "panel_thickness": "Tickness",
+      "recoverRatio": "Restore original aspect ratio",
+      "recoverRatioTip": "Restore original aspect ratio of the video"
+    },
+    "custom": {
+      "model_title": "Download model",
+      "uploading": "Uploading…",
+      "download": "Original model download",
+      "download_panos": "Download panos",
+      "upload": "Modified model upload",
+      "title1": "Model download/upload tutorial",
+      "tips11": "1.After downloading the ZIP package of the scene model, open the decompressed file”mesh.obj” to edit it.",
+      "tips12": "2.After the edit is completed, it is recommended to render the model texture. The render texture should be controlled within 1.5M while the saved obj files should be controlled within 3M.",
+      "tips13": "3.After completing steps 1 and 2, package the obj, mtl, and texture into a zip package and upload it.",
+      "title2": "Notes:",
+      "tips21": "1.Please control the file size, in order not to freeze when you are browsing which will affect your experience.",
+      "tips22": "2.Please use the same name in both obj and ZIP package, otherwise the replacement will fail.",
+      "get_image_fail": "Failed to get image. Please check your network settings and try again.",
+      "download_model_fail": "Fail to download model",
+      "reupload_tips": "Upload {type}",
+      "panoramic_upload": "Pano Upload",
+      "panoramic_upload_tips": "Panorama upload",
+      "panoramic_upload_box_tips": "Please upload JPG image<br>with corresponding point name.",
+      "panoramic_download": "Pano Download",
+      "panoramic_download_tips": "Panorama download",
+      "panoramic": "Panorama",
+      "ball_video": "Video",
+      "ball_video_upload_tips": "Video Upload",
+      "ball_video_download_tips": "Video Download",
+      "ball_video_upload_box_tips": "The panoramic video supports MP4 format<br>which should not exceed 1024M.",
+      "upload_title": "Upload files",
+      "upload_format_error": "File format error, please upload again",
+      "upload_name_error": "File name error, please upload again",
+      "upload_success": "The upload is successful and will take effect<br>after saving and publishing",
+      "upload_code_5017": "Failed to upload the model, <br>please refer tothe tutorial on the right",
+      "upload_code_5018": "The zip file can only have<br>one level of directory or no directory",
+      "upload_code_5019": "There must be only one obj and mtl file",
+      "upload_code_5020": "The texture needs to be controlled within 1.5M, and the obj file needs to be controlled within 3M",
+      "upload_code_5012": "The data is abnormal",
+      "upload_code_5023": "The upload file format is incorrect, <br>only jpg or mp4 format.",
+      "download_tips": "Download {type}",
+      "download_fail": "Failed to download"
+    },
+    "vrhouse": {
+      "__name": "VR看房",
+      "linkto_management": "Go to the VR house management background"
+    },
+    "business": {
+      "__name": "商圈模块",
+      "list_title": "Scene hotspot list"
+    },
+    "link": {
+      "__name": "跳转关联",
+      "title1": "Save the link",
+      "title2": "Edit the link",
+      "list_text": "Added links",
+      "btn_new_text": "Add a link",
+      "btn_add_title": "关联点定位",
+      "btn_add_text": "确定关联点位置",
+      "btn_add_desc": "将关联点标记并拖动到合适的位置。",
+      "btn_edit_text": "Adjust the link position",
+      "style": "Link icon",
+      "style_name": "icon",
+      "style_desc": "upport customized icon with recommended size of 100*100 pixels. Support JPG/PNG format.",
+      "style_dele": "Delete this icon? <br /> The same icon used for other links will also be deleted.",
+      "desc_title": "Description",
+      "desc_tips": "Please enter a description.",
+      "desc_require": "Please enter a description.",
+      "type": "Choose the type of link",
+      "type_photo": "upport uploading panoramic pictures with an aspect ratio of 2:1, recommended pixel size should not be less than 6000 × 3000 pixels, and the file should not exceed 120M",
+      "type_photo_require": "Upload panoramic pictures.",
+      "type_link": "Please input the scene link.",
+      "type_link_tips": "http(s)://",
+      "type_link_require": "Please input the scene link.",
+      "enter_title": "Link cover",
+      "enter_require": "Please set a link cover",
+      "enter_btn_text": "Set a link cover",
+      "outer_title": "Exit spot position",
+      "outer_style": "Exit spot icon",
+      "outer_desc": "Support customized icon with recommended size of 100*100 pixels. Support JPG/PNG format.",
+      "outer_require": "Please set the position of exit spot.",
+      "outer_btn_text": "Set the position of exit spot."
+    }
+  },
+  "login": {
+    "__name": "登录",
+    "title": "Message",
+    "login": "Log in",
+    "logon": "Log in and continue",
+    "login_tips": "You are not logged in. Please log in to edit."
+  },
+  "common": {
+    "__name": "公用",
+    "on": "on",
+    "off": "off",
+    "add": "Add",
+    "set": "OK",
+    "ok": "OK",
+    "save": "Save",
+    "cancel": "Cancel",
+    "complete": "Complete",
+    "edit": "Modify",
+    "giveup": "Give up",
+    "commit": "Commit",
+    "photo": "Photo",
+    "voice": "Audio",
+    "video": "Video",
+    "bgm": "BGM",
+    "crop": "Crop",
+    "upload": "Upload",
+    "download": "Download",
+    "change": "Change",
+    "unnamed": "Unnamed",
+    "publish": "Save and publish",
+    "publish_text": "Save and publish successfully!",
+    "publish_tips": "Check your scene immediately?",
+    "publish_btn_ok": "Now",
+    "publish_btn_no": "Later",
+    "public": "Public",
+    "private": "Private",
+    "waiting": "Waiting...",
+    "audio": "Audio",
+    "second": "s",
+    "delete": "Delete",
+    "prev": "Go back",
+    "next": "Next",
+    "meter": "≈{meter}m",
+    "guide": "Tour Guide",
+    "rule": "Ruler",
+    "roaming": "Roaming",
+    "continue": "Continue",
+    "ensure_delete": "Delete",
+    "text_limit": "Limit within {limit} characters",
+    "default": "Default",
+    "custom": "Customize",
+    "back": "Back",
+    "will_delete": "Will be deleted",
+    "setup": "Set",
+    "exit": "Done",
+    "music": {
+      "__name": "背景音乐",
+      "none": "No music",
+      "cheerfu": "Cheerful",
+      "ethereal": "Ethereal",
+      "rhythmic": "Rhythmic",
+      "nostalgic": "Nostalgic",
+      "missing": "Missing",
+      "retro": "Retro",
+      "strings": "Strings",
+      "happy": "Happy"
+    },
+    "category": {
+      "__name": "分类",
+      "museum": "Museum",
+      "estate": "Real estate",
+      "eshop": "E-Commerce",
+      "catering": "Catering",
+      "home": "Home",
+      "other": "Other"
+    },
+    "uploads": {
+      "__name": "文件上传",
+      "uploading": "Uploading",
+      "uploaded": "Uploaded",
+      "wait": "Wait...",
+      "error": "Error",
+      "add": "Add",
+      "start": "Start",
+      "file_require": "Please add file",
+      "cant_upload": "Your browser does not support uploading files",
+      "not_support": "The file you selected is not {fileType} supported by the browser, please select again",
+      "too_large": "The file is too large and cannot be larger than {size} trillion",
+      "too_large_reupload_tips": "The uploaded video is too large, please upload again"
+    },
+    "tips": {
+      "__name": "提示",
+      "wait": "Please wait..."
+    }
+  },
+  "tips": {
+    "__name": "提示",
+    "title": "Tip",
+    "set_done": "Set up successfully",
+    "set_fail": "Set up failed",
+    "save_done": "Save successfully",
+    "save_fail": "Save failed",
+    "delete": "Delete or not?",
+    "delete_done": "Delete successfully",
+    "delete_fail": "Fail to delete",
+    "upload_done": "Upload successfully",
+    "upload_fail": "Failed to upload",
+    "exception": "Error",
+    "network_error": "The internet is disconnected, please try it again",
+    "file_notfound": "The file is not found",
+    "scene_notfound": "The scene is not found",
+    "params_notfound": "The parameter is not found",
+    "camera_notfound": "The matched camera is not found",
+    "password_error": "Incorrect password",
+    "data_error": "The data is not found",
+    "auth_deny": "Unathorized to operate the scene",
+    "clear": "Sure to clear?",
+    "upload_pic_fail": "Failed to upload pictures",
+    "wait": "Please waiting...",
+    "house_type_save_fail": "Failed to save house type"
+  },
+  "show": {
+    "__name": "展示页面",
+    "on": "On",
+    "off": "Off",
+    "measure": "Measuring tool",
+    "measure_start": "Start",
+    "measure_end": "End",
+    "measure_button": "Confirm {status}",
+    "location_up": "Above",
+    "location_left": "Left",
+    "location_start_tips": "Please click on {direction}",
+    "location_end_tips": "The starting point is determined, please locate the end point",
+    "vr": "VR mode",
+    "share": "Share it",
+    "music": "Turn {status} music",
+    "password_tips": "Password",
+    "password_require": "Please enter the password"
+  },
+  "components": {
+    "user_guid": {
+      "__name": "用户引导",
+      "title": "Operation Tips",
+      "pano": "Walk<br />Click to move.",
+      "rotate": "Roam<br />Swipe the screen to roam.",
+      "zoom": "Zoom<br />Zoom in or out.",
+      "set": "Got it"
+    }
+  },
+  "material": {
+    "works": {
+      "my": "My Project",
+      "create": "Create the project",
+      "search": "Search",
+      "preview": "Preview",
+      "edit": "Edit",
+      "share": "Share",
+      "delete": "Delete",
+      "no_works": "No results found; you do not yet have a project; please create one first~",
+      "work_link": "Project link",
+      "work_qrCode": "Project QR Code",
+      "download_qrCode": "Download the QR code",
+      "copy_link": "Copy link",
+      "work_preview": "Project Preview",
+      "new_blank": "Open in a new window",
+      "cancel": "Cancel"
+    }
+  },
+  "gather": {
+    "select_material": "Select the material",
+    "no_title": "No title",
+    "my_works": "My Project",
+    "my_material": "My Material",
+    "panorama": "Panorama",
+    "image": "Pictures",
+    "audio": "Audio",
+    "video": "Video",
+    "scene": "3D Scene",
+    "keywords": "Enter keywords",
+    "how_to_shoot": "How to shoot a 3D scene?",
+    "pano_size": "Support 2:1 jpg files ≤ 120MB",
+    "cancel": "Cancel",
+    "comfirm": "Confirm",
+    "pano_fail": "Format error. Support 2:1 jpg files ≤ 120MB",
+    "pano_limit": "The file is too large. Support 2:1 jpg files ≤ 120MB",
+    "edit_cover": "Thumbnail Settings",
+    "img_fail": "Format error.Support jpg/png files: ≤ 10MB",
+    "img_limit": "The file is too large.Support jpg/png files: ≤ 10MB",
+    "img_size": "Support jpg/png files: ≤ 10MB",
+    "audio_size": "Support MP3 files: ≤ 20MB",
+    "audio_limit": "The file is too large. Support MP3 files: ≤ 20MB",
+    "audio_fail": "Format error. Support MP3 files: ≤ 20MB",
+    "upload_material": "Upload material",
+    "video_size": "Support MP4 files: ≤ 200MB",
+    "video_limit": "The file is too large.Support MP4 files: ≤ 200MB",
+    "video_fail": "Format error. Support MP4 files: ≤ 200MB",
+    "serch_material": "Search",
+    "rename": "Rename",
+    "delete": "Delete",
+    "no_serch_result": "No resulrs found",
+    "no_material_result": "No materials found",
+    "had_load": "{msg} pieces of data have been loaded",
+    "uploading": "Uploading {msg}",
+    "success": "操作成功",
+    "delete_success": "删除成功",
+    "delete_fail": "删除失败"
+  },
+  "personal_center": {
+    "personal_center": "Personal Center",
+    "logout": "Log out",
+    "login": "Login",
+    "register": "Sign up"
+  },
+  "edit_page": {
+    "back_myworks": "Back",
+    "preview": "Preview",
+    "settings": "Basic Settings",
+    "navigation": "Navigation",
+    "viewpoint": "Starting Screen",
+    "hotspot": "Hotspots",
+    "explanation": "Voice Guide",
+    "save": "Save"
+  },
+  "edit_settings": {
+    "auto_pano": "Walkthrough",
+    "enter_auto": "Enter the walkthrough panorama mode (takes 3 mins to complete per walkthrough)",
+    "set_bgm": "Set the BGM",
+    "add_audio": "Add the audio",
+    "change_audio": "Change the audio",
+    "custom_button": "Custom Button",
+    "custom_button_tips": "Custom buttons provide contact info, website URLs, etc. to a project, which can subsequently be made visible and displayed as well.",
+    "edit": "Edit",
+    "hide": "Hide",
+    "show": "Display",
+    "button_name": "Button name",
+    "button_placeholder": "Please enter the button name",
+    "please_input": "Please enter",
+    "phone": "Phone",
+    "link": "URL Address",
+    "phone_short": "Tel",
+    "link_short": "Link",
+    "custom_logo": "Custom Logo",
+    "show_logo": "Display Logo",
+    "logo_size": "300*300 pixels, within 600kb, <br>jpg/png format support",
+    "sky_mask": "Top mask",
+    "sky_tips": "The top mask is exhibited at the scene's top, while the bottom mask is presented at the scene's bottom.",
+    "mask_setting": "Mask Settings",
+    "mask_size": "500*500 pixels, <br>jpg/png format support",
+    "bottom_mask": "Bottom mask",
+    "opening_setting": "Set the animations",
+    "opening_tips_setting": "Notifications Settings",
+    "opening_tips": "The notifications only apply to panoramic images. The following notifications are inapplicable if the start screen is a 3D model.",
+    "pc": "PC",
+    "mobile": "Mobile",
+    "select_image": "Select pictures",
+    "opening_size": "Recommend 300*300 pixels, within 600kb, jpg/png format support",
+    "show_setting": "Display settings",
+    "first_notice": "Prompt only when the link is opened for the first time",
+    "password_setting": "Set an access code",
+    "password_placeholder": "Please enter the access password, limited to 20-character",
+    "base_setting": "Basic Settings",
+    "setting_cover": "Thumbnail Settings",
+    "cover_size": "512*512px, support jpg/png format",
+    "title": "Title",
+    "description": "Description",
+    "work_placeholder": "Please enter the project title",
+    "intro_placeholder": "Please input no more than 500 words of text content.",
+    "help_center": "帮助中心",
+    "display_time": "显示时间",
+    "no_display": "(不显示)",
+    "second": "秒"
+  },
+  "zh_key": {
+    "电话": "Tel",
+    "链接": "Link",
+    "小行星开场": "Start with asteroid",
+    "小行星巡游开场": "Start with asteroid cruise",
+    "小行星缩放开场": "Start with asteroid zoom",
+    "水平巡游开场": "Start with horizontal cruise",
+    "水晶球开场": "Start with crystal ball",
+    "开场提示": "Notifications",
+    "开场动画": "Animations",
+    "访问密码": "Access code",
+    "自动巡游": "Walkthrough",
+    "背景音乐": "BGM",
+    "自定义LOGO": "Custom Logo",
+    "自定义遮罩": "Custom Mask",
+    "自定义按钮": "Custom Button"
+  },
+  "navigation": {
+    "scene_edit_tips": "请前往四维时代个人中心编辑场景",
+    "go_scene_editor": "立即前往",
+    "scene_navigation": "场景导航",
+    "add_group": "新建分组",
+    "scene_tips": "场景素材包括全景图和三维场景,您可自定义分组及场景的排列顺序。",
+    "add_two_group": "新建二级分组",
+    "add_pano_or_scene": "新增全景图或三维场景",
+    "group_one": "一级分组",
+    "group_two": "二级分组",
+    "default_group_two": "默认二级分组",
+    "init_scene": "初始场景",
+    "setting_init_scene": "设置初始场景",
+    "init_scene_tips": "初始场景为查看链接时进入的第一个场景,未设\n置时,不固定从某一场景打开。",
+    "edit_init_scene": "修改场景",
+    "delete_init_scene": "删除场景",
+    "keep_one_scene": "请至少保留一个场景",
+    "keep_one_group": "请至少保留一个分组",
+    "enter_name": "输入名字",
+    "rename": "重命名",
+    "delete": "删除",
+    "pano": "全景",
+    "scene": "三维",
+    "scene_name": "场景",
+    "already_exists": "{msg}已存在,不可重复添加"
+  },
+  "screen": {
+    "init_screen": "初始画面",
+    "screen_tips": "初始画面为进入场景时第一画面,请拖动全景图选择合适的画面设置。",
+    "setting_screen": "将当前视角设为初始画面"
+  },
+  "hotspot": {
+    "hotspot_setting": "热点设置",
+    "hotspot_tips": "在全景图中添加图标热点,并设置热点的效果。",
+    "add_hotspot": "添加热点",
+    "current_hotspots": "当前全景图热点",
+    "delete": "删除",
+    "add": "新增",
+    "edit": "编辑",
+    "success": "成功",
+    "click_to_comfirm": "单击确定热点位置",
+    "no_hotspot": "暂无热点信息~",
+    "close_dialog": "热点内容未编辑完,确定要关闭吗",
+    "hotspot_name": "热点",
+    "hotspot_icon": "热点图标",
+    "select_hotspot_icon": "请选择热点图标",
+    "input_hotspot_title": "请选择热点图标",
+    "select_icon": "选择图标",
+    "title_setting": "标题设置",
+    "isshow_title": "是否显示标题",
+    "title_placeholder": "请输入标题,限50字",
+    "effect_settings": "效果设置",
+    "cancel": "取消",
+    "finish": "完成",
+    "secne": "场景",
+    "audio": "音频",
+    "video": "视频",
+    "image": "图片",
+    "link": "超链接",
+    "textarea": "文本",
+    "secne_errortxt": "请选择场景",
+    "audio_errortxt": "请选择音频",
+    "video_errortxt": "请选择视频",
+    "image_errortxt": "请选择图片",
+    "link_errortxt": "请输入超链接",
+    "textarea_errortxt": "请输入文本",
+    "icon_size": "图标大小",
+    "unit": "倍",
+    "add_audio": "添加音频",
+    "change_audio": "更换音频",
+    "select_audio": "选择音频",
+    "add_image": "添加图片",
+    "add_tooltips": "添加",
+    "select_image": "选择图片",
+    "popup": "弹出层打开",
+    "newTab": "新窗口打开",
+    "add_scene": "添加场景",
+    "change_scene": "更换场景",
+    "text_placeholder": "请输入文字内容,限500字",
+    "add_video": "添加视频",
+    "select_video": "添加视频",
+    "change_video": "更换视频"
+  },
+  "explanation": {
+    "explanation_settings": "语音讲解",
+    "explanation_tips": "您可以为当前全景图添加语音讲解音频。",
+    "add_audio": "添加音频",
+    "change_audio": "更换音频",
+    "default_open": "默认开启",
+    "loop": "循环播放"
+  },
+  "style_key": {
+    "menu_width": "88px",
+    "play_width": "31"
+  }
+}

+ 32 - 1
packages/qjkankan-editor/src/lang/_zh.js

@@ -638,8 +638,16 @@ module.exports = {
         "setting_cover":"设置封面",
         "cover_size":"512*512px,支持jpg/png格式",
         "title":"标题",
+        "description": "简介",
         "work_placeholder":"请输入作品标题",
-        "intro_placeholder":"请输入文字内容,限500字"
+        "intro_placeholder":"请输入文字内容,限500字",
+
+
+        "help_center":"帮助中心",
+        "display_time":"显示时间",
+        "no_display":"(不显示)",
+        "second":"秒",
+
     },
 
     "zh_key":{
@@ -658,5 +666,28 @@ module.exports = {
         '自定义LOGO':"自定义LOGO",
         '自定义遮罩':"自定义遮罩",
         '自定义按钮':"自定义按钮",
+    },
+
+
+
+    "navigation":{
+        "scene_navigation":"场景导航",
+        "add_group":"新建分组",
+        "scene_tips":"场景素材包括全景图和三维场景,您可自定义分组及场景的排列顺序。",
+        "add_two_group":"新建二级分组",
+        "group_one":"一级分组",
+        "group_two":"二级分组",
+        "default_group_two":"默认二级分组",
+        "init_scene":"初始场景",
+        "setting_init_scene":"设置初始场景",
+
+        
+    },
+
+
+
+    "style_key":{
+        'menu_width':'58px',
+        'play_width':'0'
     }
 }

+ 763 - 0
packages/qjkankan-editor/src/lang/_zh.json

@@ -0,0 +1,763 @@
+{
+  "menu": {
+    "__name": "菜单",
+    "music": "背景音乐",
+    "base": "基础设置",
+    "information": "场景信息",
+    "screen": "初始画面",
+    "hotspot": "添加热点",
+    "guide": "自动导览",
+    "sign": "地面Logo",
+    "walk": "漫游可行",
+    "model": "修整模型",
+    "custom": "上传下载",
+    "videos": "添加视频",
+    "vrhouse": "VR看房",
+    "business": "商圈模块",
+    "scene": "场景跳转",
+    "video": "添加视频",
+    "decor": "一键换装",
+    "link": "场景关联"
+  },
+  "modules": {
+    "__name": "模块",
+    "base": {
+      "__name": "基础设置",
+      "qrcode": "场景二维码",
+      "qrcode_download": "下载二维码",
+      "qrcode_tips": "自定义logo",
+      "scene_link": "场景地址",
+      "scene_link_copy": "复制链接",
+      "scene_link_copy_tips": "复制成功",
+      "bgm": "背景音乐",
+      "pano_text": "漫游视角可视",
+      "mode_2d_text": "平面图可视",
+      "mode_3d_text": "三维模型可视",
+      "map_text": "小地图预览可视",
+      "vr_text": "VR模式可视",
+      "vr_tips": "请在手机展示页面观看VR效果",
+      "guide_text": "自动导览可视",
+      "rule_text": "标尺可视",
+      "cad_text": "俯视图户型可视",
+      "measure_text": "测量工具可视",
+      "measure_tips": "编辑模式下无法使用测距功能,请在展示页面操作",
+      "turned_vr": "VR功能已{status}",
+      "turned_map": "小地图功能已{status}",
+      "turned_cad": "俯视图户型功能已{status}",
+      "turned_m2d": "平面视角功能已{status}",
+      "turned_m3d": "三维视角功能已{status}",
+      "turned_pano": "漫游视角功能已{status}",
+      "turned_rule": "标尺功能已{status}",
+      "turned_guide": "自动导览功能已{status}",
+      "turned_measure": "测距功能已{status}",
+      "shortcut_copy": "一键复制",
+      "share_link": "分享链接给好友",
+      "measure_show_tips": "请在展示页面使用测距功能",
+      "delete_measure_line": "删除测量线",
+      "please_click_tips": "'请点击“允许”'",
+      "vr_fail_app_tips": "浏览器未能检测到转动。请在手机或浏览器设置中开启了运动和方向访问等设置,然后刷新此页面。",
+      "vr_fail_safari_tips": "浏览器未能检测到转动。为完整体验VR效果,请打开 “设置” > “Safari” > “隐私和安全” 下的 “运动和方向访问” 开关,然后刷新此页面。",
+      "loading_bottom_text": "四维时代提供技术支持",
+      "vr_fail_reopen_tips": "运动和方向访问失败。您需要完全关闭此应用,然后再次打开,并允许访问运动与方向",
+      "add_music_title": "添加背景音乐",
+      "add_music_tips": "支持MP3、WAV等音频格式,不超过5MB",
+      "re_add_music": "重新添加",
+      "re_add_title": "重新添加背景音乐",
+      "re_add_tips": "新添加的音乐会替换已添加的音乐,<br>确定继续添加吗?",
+      "re_add_mobile_tips": "重新添加将会覆盖已添加音乐",
+      "delete_tips": "您确定删除当前音乐吗?",
+      "delete_title": "删除背景音乐",
+      "bgm_empty_tips": "请选择背景音乐",
+      "wechat": "微信",
+      "friend_circle": "朋友圈"
+    },
+    "information": {
+      "__name": "场景信息",
+      "title": "标题",
+      "title_tips": "请填写标题",
+      "title_require": "请添加标题({limit}字以内)",
+      "description": "简介",
+      "description_tips": "请填写简介",
+      "link": "添加链接",
+      "link_text_tips": "请填写链接文本",
+      "link_href_tips": "请填写链接地址",
+      "link_text_require": "请填写链接文本",
+      "link_href_require": "请填写链接地址",
+      "classify": "分类",
+      "upload_time": "上传时间",
+      "record": "未记录",
+      "shoot_count": "拍摄数量",
+      "password": "访问密码",
+      "password_tips": "访问密码",
+      "password_desc": "设置完密码后,当其他人访问您的场景时,需要输入您设置的密码才能访问。如无需设置点击“公开”即可。",
+      "password_require": "请输入{limit}位数的密码",
+      "logo_edit": "编辑页面Logo",
+      "logo_exit": "退出页面Logo编辑",
+      "logo_show_bottom": "显示初始Logo",
+      "logo_style1": "顶部Logo-方",
+      "logo_style2": "顶部Logo-长",
+      "logo_delete": "是否删除已上传Logo?"
+    },
+    "screen": {
+      "__name": "初始画面",
+      "current": "当前初始视角",
+      "current_set": "设置为初始画面",
+      "tips": "移动屏幕,点击保存您的初始画面。"
+    },
+    "hotspot": {
+      "__name": "添加热点",
+      "add": "添加热点",
+      "edit": "编辑热点",
+      "count": "已添加热点",
+      "location": "热点定位",
+      "location_tips": "将热点标记并拖动到合适的位置。",
+      "location_modify": "修改热点位置",
+      "location_confirm": "确定热点位置",
+      "location_desc": "请于左方两个场景区域拖动热点并对准所需标记的位置。",
+      "style": "选择热点样式",
+      "style_desc": "选择默认样式,或者手动上传图片自定义样式,上传图片格式PNG/JPG",
+      "style_name": "样式",
+      "style_dele": "是否删除该样式?",
+      "style_manage": "管理",
+      "style_exit": "退出",
+      "media_photo": "可添加图片以丰富热点内容",
+      "media_video": "可上传本地视频,进行更多的展示",
+      "media_voice": "可上传本地音频内容进行热点讲解",
+      "media_link": "可添加视频的超链接,视频将在热点里播放",
+      "title": "标题",
+      "title_tips": "请填写标题",
+      "title_require": "请添加标题({limit}字以内)",
+      "description": "简介",
+      "description_tips": "请填写简介",
+      "text_link": "添加链接",
+      "text_link_text_tips": "请填写链接文本",
+      "text_link_href_tips": "请填写链接地址",
+      "text_link_text_require": "链接文本不能为空",
+      "text_link_href_require": "链接地址不能为空",
+      "link": "嵌入式链接",
+      "link_require": "请添加外链",
+      "photo": "图片",
+      "voice": "音频",
+      "video": "视频",
+      "photo_tips": "支持JPG、PNG等图片格式,不超过{size}MB",
+      "voice_tips": "支持MP3、WAV等音频格式,不超过{size}MB",
+      "video_tips": "支持MP4、MOV等视频格式,不超过{size}MB",
+      "photo_require": "请添加图片",
+      "voice_require": "请添加音频",
+      "video_require": "请添加视频",
+      "m_location_tips1": "将上下分屏热点对准同一个所标记目标",
+      "m_location_tips2": "确定热点位置,点击下一步编辑内容",
+      "m_location_up": "上方",
+      "m_location_left": "左侧",
+      "m_location_move_tips": "辅助校准位置可能不准确,<br>请检查并拖动到{direction}相同位置",
+      "set_visible_btn": "设置热点可视",
+      "save_visible_btn": "保存当前设置",
+      "save_hotspot_done": "保存热点成功",
+      "save_hotspot_fail": "保存热点失败",
+      "delete_hotspot_tips": "是否删除当前热点?",
+      "delete_hotspot_done": "热点删除成功",
+      "delete_hotspot_fail": "热点删除失败",
+      "cant_add_hotspot_tips": "无法添加热点",
+      "cant_add_hotspot_content": "热点数目已达最大:{limit}",
+      "link_text_tips": "链接标题",
+      "link_href_tips": "链接",
+      "link_text_require": "请填写链接文本",
+      "link_href_require": "请填写链接地址",
+      "add_media": "添加多媒体"
+    },
+    "guide": {
+      "__name": "自动导览",
+      "route": "导航路线",
+      "view": "切换视角",
+      "record": "开始录制",
+      "record_audio": "录音",
+      "pause": "暂停",
+      "stop": "停止",
+      "end": "结束",
+      "delete": "删除",
+      "continue": "继续录制",
+      "preview": "预览",
+      "clear": "清空",
+      "sync": "声画同步",
+      "sound": "录制音频",
+      "file": "上传音频",
+      "file_add": "添加音频",
+      "tips": "点击开始录制导览",
+      "start": "开始",
+      "finish": "完成录制",
+      "less": "小于",
+      "replace_tips": "是否重新录制导览?",
+      "replace_content": "重新录制将覆盖之前的数据",
+      "sound_open_fail_tips": "麦克风开启失败",
+      "sound_tips": "麦克风开启失败,是否继续录制?",
+      "sound_content": "您需要在浏览器的设置中允许此网站使用麦克风,并且添加麦克风设备,然后刷新该页面。",
+      "upload_sound_done": "上传语音讲解成功",
+      "upload_sound_fail": "上传语音讲解失败",
+      "delete_sound_done": "删除语音讲解成功",
+      "delete_sound_fail": "删除语音讲解失败",
+      "room_title": "标题",
+      "room_title_tips": "请输入导览标题",
+      "room_title_require": "请输入标题",
+      "room_panel_title": "导览信息",
+      "room_sound_title": "录制音频",
+      "delete_video_content": "您当前录制的画面将会被删除",
+      "delete_file_content": "您当前上传的语音讲解将会被删除",
+      "delete_sound_content": "已录制配音将会被删除",
+      "camera_save_success": "镜头保存成功",
+      "clear_video_tip": "您当前录制的内容将会被清空",
+      "saving_sound": "正在保存录音",
+      "save_sound_done": "录音保存成功",
+      "save_sound_fail": "录音保存失败",
+      "no_sound_tips": "当前不支持录音<br>可在微信或电脑端录音",
+      "sound_success_tips": "麦克风开启成功",
+      "sound_fail_tips": "当前不支持录音<br>公众号信息配置错误",
+      "wechat_sound_fail_tips": "微信麦克风开启失败",
+      "open_sound_guide_tips": "可能您若要开启录音,请于微信的设置—隐私—授权管理中开启。且保证录音设备正常",
+      "sound_cant_open_tips": "此浏览器不支持录音。<br>建议更换其他主流浏览器,体验更佳",
+      "replace_sound_tips": "是否重新录制?",
+      "replace_sound_content": "已有语音讲解将会被替换",
+      "merge_sound_fail": "合并语音讲解失败",
+      "sound_limit": "录制时长为{time}分钟,当前已经达到上限",
+      "select_to_record": "请选择对应点位进行本区域的导览录制"
+    },
+    "sign": {
+      "title": "Logo样式",
+      "size": "Logo大小",
+      "style0": "样式一",
+      "style1": "样式二",
+      "style2": "样式三",
+      "style3": "手动上传"
+    },
+    "walk": {
+      "title": "漫游可行",
+      "tips1": "通过设置漫游可行,进一步优化在漫游时出现的体验;例如,您在漫游时,出现穿透房间的情况。",
+      "tips2": "通过点选各个漫游点的连线即可设置漫游点的可行性。",
+      "save": "保存当前设置",
+      "hide": "隐藏该点位置",
+      "show": "显示该点位置",
+      "pano_tips": "提示:您隐藏了初始画面点位,此操作将使进入场景后无法漫游。"
+    },
+    "model": {
+      "__name": "修整模型",
+      "cad": "CAD视角",
+      "cad_download": "平面图下载",
+      "view": "切换视角",
+      "title": "增添结构",
+      "title_door": "门窗类",
+      "title_component": "构建类",
+      "title_other": "其他",
+      "attribute": "属性",
+      "door": "门",
+      "slideDoor": "移门",
+      "casement": "窗",
+      "bayCase": "飘窗",
+      "groundCase": "落地窗",
+      "column": "柱子",
+      "furnColumn": "框架柱",
+      "furnFlue": "烟道",
+      "point": "点",
+      "line": "墙",
+      "tagging": "标注",
+      "tagging_name_tips": "请输入名称",
+      "tagging_area_tips": "输入面积,支持小数点后面两位",
+      "direction": "指南针",
+      "wallLine": "墙关联房间",
+      "widget_delete": "{widget}将被删除",
+      "panel_btn_default": "恢复默认",
+      "panel_btn_delete": "删除部件",
+      "attr_angle": "旋转角度",
+      "attr_within": "翻转方向",
+      "attr_ewidth": "宽度",
+      "attr_eheight": "高度",
+      "attr_tick": "厚度",
+      "attr_showTitle": "标注名称",
+      "attr_showContent": "标注面积",
+      "attr_top": "顶部",
+      "attr_bottom": "底部",
+      "success": "成功添加{widget}",
+      "error_location": "当前位置无法添加{widget}",
+      "error_outdoor": "户外无法添加{widget}",
+      "error_something": "当前位置点有建筑,无法添加{widget}",
+      "error_widget": "当前位置不可添加{widget}",
+      "enter_adjust_floor": "进入地面高度调节模式",
+      "exit_adjust_floor": "退出地面高度调节模式",
+      "color_title": "量角器颜色:"
+    },
+    "videos": {
+      "__name": "添加视频",
+      "tips": "请先点击场景的基准面,确定视频位置",
+      "panel_title": "视频属性",
+      "panel_preview": "预览",
+      "panel_upload": "上传视频",
+      "panel_upload_tips": "支持MP4视频格式",
+      "panel_move": "位移",
+      "panel_zoom": "缩放",
+      "panel_thickness": "厚度",
+      "recoverRatio": "恢复原始比例",
+      "recoverRatioTip": "恢复视频文件原始长宽比"
+    },
+    "custom": {
+      "model_title": "模型下载",
+      "uploading": "文件上传中...",
+      "download": "原始模型下载",
+      "download_panos": "下载点位图",
+      "upload": "修改模型上传",
+      "title1": "模型下载/上传功能教程",
+      "tips11": "1.下载场景模型的压缩包后,使用三维软件打开解压后文件“mesh.obj”,即可开展编辑;",
+      "tips12": "2.编辑完成后,建议将模型贴图进行烘焙,烘焙贴图需控制在1.5M以内,同时,保存的obj文件需要控制在3M以内;",
+      "tips13": "3.完成1、2步骤后,将obj,mtl,贴图打包为zip压缩包上传即可。",
+      "title2": "注:",
+      "tips21": "1.请尽量控制文件大小,以免浏览的时候卡顿,影响体验。",
+      "tips22": "2.请将obj及压缩包的名称保持一致,否则会替换失败。",
+      "get_image_fail": "获取贴图失败,可能网络状态不佳,请检查您的网络设置并重新尝试。",
+      "download_model_fail": "模型下载失败",
+      "reupload_tips": "上传后点击保存并发布生效",
+      "panoramic_upload": "全景照片上传",
+      "panoramic_upload_tips": "上传后点击“保存并发布”即生效",
+      "panoramic_upload_box_tips": "请上传对应点位名称的JPG图片",
+      "panoramic_download": "全景照片下载",
+      "panoramic_download_tips": "请勿修改照片名称和格式",
+      "panoramic": "全景图片",
+      "ball_video": "球幕视频",
+      "ball_video_upload_tips": "上传后点击“保存并发布”即生效",
+      "ball_video_download_tips": "请勿修改视频名称和格式",
+      "ball_video_upload_box_tips": "球幕视频支持MP4格式,不超过1024M",
+      "upload_title": "上传文件",
+      "upload_format_error": "文件格式错误,请重新上传",
+      "upload_name_error": "文件名称错误,请重新上传",
+      "upload_success": "上传成功,保存并发布后才能生效",
+      "upload_code_5017": "上传模型失败,请参照右侧教程",
+      "upload_code_5018": "zip文件只能有一层目录或无目录",
+      "upload_code_5019": "必须有且仅有一个obj和mtl文件",
+      "upload_code_5020": "贴图需控制在1.5M以内,obj文件需要控制在3M以内。",
+      "upload_code_5012": "数据不正常",
+      "upload_code_5023": "上传文件格式不正确,只能是jpg或mp4格式",
+      "download_tips": "下载后名称与格式请勿修改",
+      "download_fail": "下载失败"
+    },
+    "vrhouse": {
+      "__name": "VR看房",
+      "linkto_management": "前往云看房管理后台"
+    },
+    "business": {
+      "__name": "商圈模块",
+      "list_title": "场景热点列表"
+    },
+    "link": {
+      "__name": "跳转关联",
+      "title1": "锁定关联点",
+      "title2": "编辑关联点",
+      "list_text": "已添加关联点",
+      "btn_new_text": "添加关联点",
+      "btn_add_title": "关联点定位",
+      "btn_add_text": "确定关联点位置",
+      "btn_add_desc": "将关联点标记并拖动到合适的位置。",
+      "btn_edit_text": "修改关联点位置",
+      "style": "关联点样式",
+      "style_name": "样式",
+      "style_desc": "支持自定义图标,建议尺寸为100x100 像素,格式为jpg/png。",
+      "style_dele": "是否删除该样式?<br />如该样式在其它关联点使用,也将被删除",
+      "desc_title": "描述",
+      "desc_tips": "请输入描述内容",
+      "desc_require": "请输入描述内容",
+      "type": "选择关联类型",
+      "type_photo": "支持上传宽高比为2:1的单张全景图片,建议像素不小于6000x3000像素,文件不超过120M。",
+      "type_photo_require": "请上传全景图",
+      "type_link": "请输入目标场景链接",
+      "type_link_tips": "http(s)://",
+      "type_link_require": "请输入场景链接",
+      "enter_title": "进入画面",
+      "enter_require": "请设置进入画面",
+      "enter_btn_text": "设置进入画面",
+      "outer_title": "跳出点位置",
+      "outer_style": "跳出点样式",
+      "outer_desc": "支持自定义图标,建议尺寸为100x100像素,格式为jpg/png。",
+      "outer_require": "请设置跳出点位置",
+      "outer_btn_text": "设置跳出点位置"
+    }
+  },
+  "login": {
+    "__name": "登录",
+    "title": "提示",
+    "login": "去登录",
+    "logon": "登录完毕,继续",
+    "login_tips": "您没有登录,请于主页登录后再编辑"
+  },
+  "common": {
+    "__name": "公用",
+    "on": "打开",
+    "off": "关闭",
+    "add": "添加",
+    "set": "确定",
+    "ok": "确定",
+    "save": "保存",
+    "cancel": "取消",
+    "complete": "完成",
+    "edit": "修改",
+    "giveup": "取消",
+    "commit": "提交",
+    "photo": "图片",
+    "voice": "音频",
+    "video": "视频",
+    "bgm": "音乐",
+    "crop": "裁剪",
+    "upload": "上传",
+    "download": "下载",
+    "change": "更改",
+    "unnamed": "未命名",
+    "publish": "保存并发布",
+    "publish_text": "保存并发布成功!",
+    "publish_tips": "是否立刻前往观看您的场景?",
+    "publish_btn_ok": "立刻前往",
+    "publish_btn_no": "暂时不去",
+    "public": "公开",
+    "private": "加密",
+    "waiting": "请稍等...",
+    "audio": "音频",
+    "second": "秒",
+    "delete": "删除",
+    "prev": "上一步",
+    "next": "下一步",
+    "meter": "约{meter}米",
+    "guide": "导览",
+    "rule": "测量工具",
+    "roaming": "漫游",
+    "continue": "继续",
+    "ensure_delete": "确定删除",
+    "text_limit": "限制{limit}字内",
+    "default": "默认",
+    "custom": "自定义",
+    "back": "返回",
+    "will_delete": "将被删除",
+    "setup": "设置",
+    "exit": "退出",
+    "music": {
+      "__name": "背景音乐",
+      "none": "无",
+      "cheerfu": "欢快",
+      "ethereal": "空灵",
+      "rhythmic": "节奏",
+      "nostalgic": "怀旧",
+      "missing": "想念",
+      "retro": "复古",
+      "strings": "琴弦",
+      "happy": "愉快"
+    },
+    "category": {
+      "__name": "分类",
+      "museum": "文博",
+      "estate": "地产",
+      "eshop": "电商",
+      "catering": "餐饮",
+      "home": "家居",
+      "other": "其他"
+    },
+    "uploads": {
+      "__name": "文件上传",
+      "uploading": "上传中",
+      "uploaded": "已上传",
+      "wait": "等待上传...",
+      "error": "上传出错",
+      "add": "添加文件",
+      "start": "开始上传",
+      "file_require": "请添加文件",
+      "cant_upload": "您的浏览器不支持上传文件",
+      "not_support": "您选择的不是浏览器支持的{fileType}文件,请重新选择",
+      "too_large": "文件过大,不能大于{size}MB",
+      "too_large_reupload_tips": "上传视频过大,请重新上传"
+    },
+    "tips": {
+      "__name": "提示",
+      "wait": "请等待..."
+    }
+  },
+  "tips": {
+    "__name": "弹窗、提示",
+    "title": "提示",
+    "set_done": "设置成功",
+    "set_fail": "设置失败",
+    "save_done": "保存成功",
+    "save_fail": "保存失败",
+    "delete": "是否删除?",
+    "delete_done": "删除成功",
+    "delete_fail": "删除失败",
+    "upload_done": "上传成功",
+    "upload_fail": "上传失败",
+    "exception": "异常错误",
+    "network_error": "网络连接失败,请稍后再试",
+    "file_notfound": "文件不存在",
+    "scene_notfound": "场景不存在",
+    "params_notfound": "缺少必要参数",
+    "camera_notfound": "找不到该场景对应的相机",
+    "password_error": "密码错误",
+    "data_error": "数据不正常",
+    "auth_deny": "无权操作该场景",
+    "clear": "是否清空?",
+    "upload_pic_fail": "上传图片失败",
+    "wait": "请稍后...",
+    "house_type_save_fail": "户型保存失败"
+  },
+  "show": {
+    "__name": "展示页面",
+    "on": "开启",
+    "off": "关闭",
+    "measure": "测距工具",
+    "measure_start": "起点",
+    "measure_end": "终点",
+    "measure_button": "确定{status}",
+    "location_up": "上方",
+    "location_left": "左侧",
+    "location_start_tips": "请先在{direction}点击",
+    "location_end_tips": "起点确定完毕,请定位终点",
+    "vr": "VR模式",
+    "share": "分享",
+    "music": "{status}音乐",
+    "password_tips": "密码",
+    "password_require": "请输入密码"
+  },
+  "components": {
+    "user_guid": {
+      "__name": "用户引导",
+      "title": "操作提示",
+      "pano": "行走<br />点击任意方向移动",
+      "rotate": "旋转视角<br />左右滑动屏幕,旋转视觉",
+      "zoom": "缩放<br />双指滑动放大或缩小视图",
+      "set": "我知道了"
+    }
+  },
+  "material": {
+    "works": {
+      "my": "我的作品",
+      "create": "创建作品",
+      "search": "搜索作品",
+      "preview": "预览",
+      "edit": "编辑",
+      "share": "分享",
+      "delete": "删除",
+      "no_works": "您还没有作品,请先创建作品~",
+      "work_link": "作品链接",
+      "work_qrCode": "作品二维码",
+      "download_qrCode": "下载二维码",
+      "copy_link": "复制链接",
+      "work_preview": "全景作品预览",
+      "new_blank": "新窗口打开",
+      "cancel": "取消"
+    }
+  },
+  "gather": {
+    "select_material": "选择素材",
+    "no_title": "无标题",
+    "my_works": "我的作品",
+    "my_material": "我的素材",
+    "panorama": "全景图",
+    "image": "图片",
+    "audio": "音频",
+    "video": "视频",
+    "scene": "三维场景",
+    "keywords": "输入关键词",
+    "how_to_shoot": "如何拍摄三维场景",
+    "pano_size": "请上传2:1、120MB以内、jpg格式的图片",
+    "cancel": "取消",
+    "comfirm": "确定",
+    "pano_fail": "格式错误,请上传2:1、120MB以内、jpg格式的全景图片",
+    "pano_limit": "过大,请上传2:1、120MB以内、jpg格式的全景图片",
+    "edit_cover": "编辑封面",
+    "img_fail": "格式错误,请上传10MB以内、jpg/png格式的图片",
+    "img_limit": "过大,请上传10MB以内、jpg/png格式的图片",
+    "img_size": "请上传10MB以内、jpg/png格式的图片",
+    "audio_size": "请上传20MB以内、mp3格式的音频",
+    "audio_limit": "过大,请上传20MB以内、mp3格式的音频",
+    "audio_fail": "格式错误,请上传20MB以内、mp3格式的音频",
+    "upload_material": "上传素材",
+    "video_size": "请上传200MB以内、mp4格式的视频",
+    "video_limit": "过大,请上传200MB以内、mp4格式的视频",
+    "video_fail": "格式错误,请上传200MB以内、mp4格式的视频",
+    "serch_material": "搜索素材",
+    "rename": "重命名",
+    "delete": "删除",
+    "no_serch_result": "未搜索到结果",
+    "no_material_result": "暂无素材~",
+    "had_load": "已加载{msg}条",
+    "uploading": "正在上传 {msg}",
+    "success": "操作成功",
+    "delete_success": "删除成功",
+    "delete_fail": "删除失败"
+  },
+  "personal_center": {
+    "personal_center": "个人中心",
+    "logout": "退出登录",
+    "login": "登录",
+    "register": "注册"
+  },
+  "edit_page": {
+    "back_myworks": "返回我的作品",
+    "preview": "预览",
+    "settings": "基础",
+    "navigation": "导航",
+    "viewpoint": "视角",
+    "hotspot": "热点",
+    "explanation": "讲解",
+    "save": "保存"
+  },
+  "edit_settings": {
+    "auto_pano": "自动巡游",
+    "enter_auto": "进入全景图自动巡游(3分钟完整巡游一次)",
+    "set_bgm": "设置背景音乐",
+    "add_audio": "添加音频",
+    "change_audio": "更换音频",
+    "custom_button": "自定义按钮",
+    "custom_button_tips": "自定义按钮可为作品添加联系方式或网站链接等,设置可见后即可在作品显示。",
+    "edit": "编辑",
+    "hide": "隐藏",
+    "show": "显示",
+    "button_name": "按钮名称",
+    "button_placeholder": "请输入按钮名称",
+    "please_input": "请输入",
+    "phone": "电话号码",
+    "link": "链接地址",
+    "phone_short": "电话",
+    "link_short": "链接",
+    "custom_logo": "自定义LOGO",
+    "show_logo": "显示LOGO",
+    "logo_size": "300*300px,600kb以内,支持<br>jpg/png格式",
+    "mask_setting": "遮罩设置",
+    "sky_mask": "天空遮罩",
+    "sky_tips": "天空遮罩显示在场景的顶部,地面遮罩显示在场景的底部。",
+    "mask_size": "建议500*500px,<br/>支持jpg/png格式",
+    "bottom_mask": "地面遮罩",
+    "opening_setting": "设置开场动画",
+    "opening_tips_setting": "提示设置",
+    "opening_tips": "开场提示仅适用于全景图。若初始场景为三维模\n型,以下开场提示不适用。",
+    "pc": "PC端",
+    "mobile": "移动端",
+    "select_image": "选择图片",
+    "opening_size": "建议300*300px,600kb以内,<br/>支持jpg/png格式",
+    "show_setting": "显示设置",
+    "first_notice": "仅首次打开链接时,提示",
+    "password_setting": "设置访问密码",
+    "password_placeholder": "请输入访问密码,限20位",
+    "base_setting": "基础设置",
+    "setting_cover": "设置封面",
+    "cover_size": "512*512px,支持jpg/png格式",
+    "title": "标题",
+    "description": "简介",
+    "work_placeholder": "请输入作品标题",
+    "intro_placeholder": "请输入文字内容,限500字",
+    "help_center": "帮助中心",
+    "display_time": "显示时间",
+    "no_display": "(不显示)",
+    "second": "秒"
+  },
+  "zh_key": {
+    "电话": "电话",
+    "链接": "链接",
+    "小行星开场": "小行星开场",
+    "小行星巡游开场": "小行星巡游开场",
+    "小行星缩放开场": "小行星缩放开场",
+    "水平巡游开场": "水平巡游开场",
+    "水晶球开场": "水晶球开场",
+    "开场提示": "开场提示",
+    "开场动画": "开场动画",
+    "访问密码": "访问密码",
+    "自动巡游": "自动巡游",
+    "背景音乐": "背景音乐",
+    "自定义LOGO": "自定义LOGO",
+    "自定义遮罩": "自定义遮罩",
+    "自定义按钮": "自定义按钮"
+  },
+  "navigation": {
+    "scene_edit_tips": "请前往四维时代个人中心编辑场景",
+    "go_scene_editor": "立即前往",
+    "scene_navigation": "场景导航",
+    "add_group": "新建分组",
+    "scene_tips": "场景素材包括全景图和三维场景,您可自定义分组及场景的排列顺序。",
+    "add_two_group": "新建二级分组",
+    "add_pano_or_scene": "新增全景图或三维场景",
+    "group_one": "一级分组",
+    "group_two": "二级分组",
+    "default_group_two": "默认二级分组",
+    "init_scene": "初始场景",
+    "setting_init_scene": "设置初始场景",
+    "init_scene_tips": "初始场景为查看链接时进入的第一个场景,未设\n置时,不固定从某一场景打开。",
+    "edit_init_scene": "修改场景",
+    "delete_init_scene": "删除场景",
+    "keep_one_scene": "请至少保留一个场景",
+    "keep_one_group": "请至少保留一个分组",
+    "enter_name": "输入名字",
+    "rename": "重命名",
+    "delete": "删除",
+    "pano": "全景",
+    "scene": "三维",
+    "scene_name": "场景",
+    "already_exists": "{msg}已存在,不可重复添加"
+  },
+  "screen": {
+    "init_screen": "初始画面",
+    "screen_tips": "初始画面为进入场景时第一画面,请拖动全景图选择合适的画面设置。",
+    "setting_screen": "将当前视角设为初始画面"
+  },
+  "hotspot": {
+    "hotspot_setting": "热点设置",
+    "hotspot_tips": "在全景图中添加图标热点,并设置热点的效果。",
+    "add_hotspot": "添加热点",
+    "current_hotspots": "当前全景图热点",
+    "delete": "删除",
+    "add": "新增",
+    "edit": "编辑",
+    "success": "成功",
+    "click_to_comfirm": "单击确定热点位置",
+    "no_hotspot": "暂无热点信息~",
+    "close_dialog": "热点内容未编辑完,确定要关闭吗",
+    "hotspot_name": "热点",
+    "hotspot_icon": "热点图标",
+    "select_hotspot_icon": "请选择热点图标",
+    "input_hotspot_title": "请选择热点图标",
+    "select_icon": "选择图标",
+    "title_setting": "标题设置",
+    "isshow_title": "是否显示标题",
+    "title_placeholder": "请输入标题,限50字",
+    "effect_settings": "效果设置",
+    "cancel": "取消",
+    "finish": "完成",
+    "secne": "场景",
+    "audio": "音频",
+    "video": "视频",
+    "image": "图片",
+    "link": "超链接",
+    "textarea": "文本",
+    "secne_errortxt": "请选择场景",
+    "audio_errortxt": "请选择音频",
+    "video_errortxt": "请选择视频",
+    "image_errortxt": "请选择图片",
+    "link_errortxt": "请输入超链接",
+    "textarea_errortxt": "请输入文本",
+    "icon_size": "图标大小",
+    "unit": "倍",
+    "add_audio": "添加音频",
+    "change_audio": "更换音频",
+    "select_audio": "选择音频",
+    "add_image": "添加图片",
+    "add_tooltips": "添加",
+    "select_image": "选择图片",
+    "popup": "弹出层打开",
+    "newTab": "新窗口打开",
+    "add_scene": "添加场景",
+    "change_scene": "更换场景",
+    "text_placeholder": "请输入文字内容,限500字",
+    "add_video": "添加视频",
+    "select_video": "添加视频",
+    "change_video": "更换视频"
+  },
+  "explanation": {
+    "explanation_settings": "语音讲解",
+    "explanation_tips": "您可以为当前全景图添加语音讲解音频。",
+    "add_audio": "添加音频",
+    "change_audio": "更换音频",
+    "default_open": "默认开启",
+    "loop": "循环播放"
+  },
+  "style_key": {
+    "menu_width": "58px",
+    "play_width": "0"
+  }
+}

+ 2 - 2
packages/qjkankan-editor/src/lang/index.js

@@ -1,7 +1,7 @@
 import Vue from 'vue'
 import VueI18n from 'vue-i18n'
-import zh from './_zh'
-import en from './_en'
+import zh from './_zh.json'
+import en from './_en.json'
 import config from '@/config'
 import browser from '@/utils/browser'
 

+ 4 - 1
packages/qjkankan-editor/src/router/editorRouter.js

@@ -4,6 +4,9 @@ import { PCMenu } from "../config/menu.js";
 import { checkWork, checkLogin, getPanoInfo } from '@/api'
 import store from '../Store'
 
+import {i18n} from '@/lang'
+
+
 let vue = new Vue()
 
 import { LoginDetector,OnlineDetector } from "@/utils/starter";
@@ -79,7 +82,7 @@ router.beforeEach(async (to, from, next) => {
     if (from.name == 'hotspot') {
       if (store.getters.isEditing) {
         vue.$confirm({
-            content: "热点内容未编辑完,确定要关闭吗",
+            content: i18n.t('hotspot.close_dialog'),
             ok: () => {
               vue.$bus.emit('delhotspot') 
              return next()

+ 1 - 1
packages/qjkankan-editor/src/router/index.js

@@ -79,7 +79,7 @@ router.beforeEach(async (to, from, next) => {
     if (from.name == 'hotspot') {
       if (store.getters.isEditing) {
         vue.$confirm({
-            content: "热点内容未编辑完,确定要关闭吗",
+            content: vue.$i18n.t('hotspot.close_dialog'),
             ok: () => {
               vue.$bus.emit('delhotspot') 
              return next()

+ 3 - 3
packages/qjkankan-editor/src/views/base/Toolbar.vue

@@ -27,7 +27,7 @@
             />
             <span class="count">{{titleLength}}/50</span>
           </div>
-          <div class="ui-title jianjie"><span>简介</span></div>
+          <div class="ui-title jianjie"><span>{{$i18n.t(`edit_settings.description`)}}</span></div>
           <div class="jianjie-textarea-wrapper">
             <!-- <textarea
               v-model.trim="info.description"
@@ -267,7 +267,7 @@ export default {
 
 menu {
   display: inline-block;
-  width: 133px;
+  width: 168px;
   font-size: 14px;
   color: rgba(255, 255, 255, 0.5);
   padding-left: 0;
@@ -306,7 +306,7 @@ menu {
 .settings-view-wrapper {
   vertical-align: top;
   display: inline-block;
-  width: 797px;
+  width: 762px;
 
 }
 </style>

+ 1 - 1
packages/qjkankan-editor/src/views/base/openingAnimationSettings.vue

@@ -85,7 +85,7 @@ export default {
 
     .btn-wrapper {
       .opening-selection-btn {
-        width: 180px;
+        width: 210px;
         height: 40px;
         background: #1A1B1D;
         border-radius: 2px;

+ 2 - 2
packages/qjkankan-editor/src/views/base/openingTipSettings.vue

@@ -73,8 +73,8 @@ export default {
       isShowSelectionWindow: false,
       selectingFor: '', // 'pc', 'mobile'
       rang: {
-        label: '显示时间',
-        unit: "秒",
+        label: this.$i18n.t('edit_settings.display_time'),
+        unit: this.$i18n.t('edit_settings.second'),
         value: 1,
         min: 0,
         max: 3,

+ 7 - 7
packages/qjkankan-editor/src/views/explanation/explanationSettings.vue

@@ -1,8 +1,8 @@
 <template>
   <div class="explanation-settings"  app-border dir-left>
     <div class="title">
-      语音讲解
-      <i class="iconfont icon-material_prompt tool-tip-for-editor" v-tooltip="'您可以为当前全景图添加语音讲解音频。'"/>
+      {{$i18n.t("explanation.explanation_settings")}}
+      <i class="iconfont icon-material_prompt tool-tip-for-editor" v-tooltip="$i18n.t('explanation.explanation_tips')"/>
     </div>
     <button
       v-if="!currentScene.explanation.audioId"
@@ -13,7 +13,7 @@
       @click="isShowSelectionWindow = true"
     >
       <i class="iconfont icon-editor_add"></i>
-      添加音频
+      {{$i18n.t("explanation.add_audio")}}
     </button>
     <template v-else>
       <div class="music-display" @click.self="onClickCurrentMusic">
@@ -23,19 +23,19 @@
       </div>
       <button class="ui-button" @click="isShowSelectionWindow = true">
         <i class="iconfont icon-editor_update"></i>
-        更换音频
+        {{$i18n.t("explanation.change_audio")}}
       </button>
     </template>
 
     <div class="switch-wrapper">
-      <span class="label">默认开启</span>
+      <span class="label">{{$i18n.t("explanation.default_open")}}</span>
       <Switcher
         :disable="!currentScene || currentScene.type ==='4dkk'"
         :value="currentScene.explanation.openByDefault" @change="currentScene.explanation.openByDefault = !currentScene.explanation.openByDefault"
       />
     </div>
     <div class="switch-wrapper">
-      <span class="label">循环播放</span>
+      <span class="label">{{$i18n.t("explanation.loop")}}</span>
       <Switcher
         :disable="!currentScene || currentScene.type ==='4dkk'"
         :value="currentScene.explanation.repeat" @change="currentScene.explanation.repeat = !currentScene.explanation.repeat"
@@ -44,7 +44,7 @@
 
     <div class="dialog" style="z-index: 2000" v-if="isShowSelectionWindow">
       <MaterialSelectorForEditor
-        title="选择素材"
+        :title="$i18n.t('gather.select_material')"
         @cancle="isShowSelectionWindow = false"
         @submit="handleSubmitFromMaterialSelector"
         :selectableType="['audio']"

+ 66 - 64
packages/qjkankan-editor/src/views/hotspot/EditPanel.vue

@@ -3,13 +3,13 @@
     leave-active-class="animated slideOutRight speed">
     <div class="hots-panel" v-show="show">
       <div class="ui-between header">
-        <span>{{ editTitle }}热点</span>
+        <span>{{ editTitle }}{{ $i18n.t('hotspot.hotspot_name') }}</span>
         <i class="iconfont icon_close" @click="confirmCancel"></i>
       </div>
       <div class="content" ref="content">
         <div class="icon-setting">
-          <div class="icon-setting-title">热点图标</div>
-          <div class="remark">选择图标</div>
+          <div class="icon-setting-title">{{ $i18n.t('hotspot.hotspot_icon') }}</div>
+          <div class="remark">{{ $i18n.t('hotspot.select_icon') }}</div>
           <div class="icon-list">
             <div class="margin-handler-layer">
               <ul>
@@ -25,23 +25,23 @@
           </div>
         </div>
         <div class="title-setting">
-          <div class="title-setting-title">标题设置</div>
+          <div class="title-setting-title">{{ $i18n.t('hotspot.title_setting') }}</div>
           <div class="switch-wrapper">
-            <span class="label">是否显示标题</span>
+            <span class="label">{{ $i18n.t('hotspot.isshow_title') }}</span>
             <Switcher :value="hotspot.visible" @change="hotspot.visible = !hotspot.visible"></Switcher>
           </div>
           <div class="title-input-wrapper">
-            <input v-model.trim="hotspot.hotspotTitle" type="text" maxlength="50" placeholder="请输入标题,限50字" />
+            <input v-model.trim="hotspot.hotspotTitle" type="text" maxlength="50" :placeholder="$i18n.t('hotspot.title_placeholder')" />
             <span class="count">{{ hotspot.hotspotTitle.length }}/50</span>
           </div>
         </div>
         <div class="effect-setting">
-          <div class="effect-setting-title">效果设置</div>
+          <div class="effect-setting-title">{{$i18n.t('hotspot.effect_settings')}}</div>
           <combox class="combox" :data="hotSpotTypeList" :selected-id="hotspot.hotspotType"
             :bottomSpace="comboxBottomSpace" @change="onhotSpotTypeChange"></combox>
           <component class="effect-setting-component" @sceneSelect="handleSceneSelect" :scene="hotspot.secne"
             @imageChange="data => { hotspot.image = data }" :image="hotspot.image"
-            @linkChange="data => { hotspot.hyperlink = data }" :link="hotspot.hyperlink" 
+            @linkChange="data => { hotspot.hyperlink = data }" :link="hotspot.hyperlink"
             @linkOpenType="data => { hotspot.linkOpenType = data }" :linkOpenType="hotspot.linkOpenType"
             @textChange="data => { hotspot.textarea = data }" :textarea="hotspot.textarea"
             @audioChange="data => { hotspot.audio = data }" :audio="hotspot.audio"
@@ -49,8 +49,8 @@
         </div>
       </div>
       <div class="ui-between footer" app-border dir-top>
-        <button class="ui-button deepcancel" :class="{ disable: false }" @click="confirmCancel">取消</button>
-        <button class="ui-button submit" :class="{ disable: false }" @click="save">完成</button>
+        <button class="ui-button deepcancel" :class="{ disable: false }" @click="confirmCancel">{{$i18n.t('hotspot.cancel')}}</button>
+        <button class="ui-button submit" :class="{ disable: false }" @click="save">{{$i18n.t('hotspot.finish')}}</button>
       </div>
     </div>
   </transition>
@@ -78,38 +78,8 @@ let comparisonKey = [
   'video'
 ]
 
-let HTMap = {
-  scene: {
-    key: 'secne',
-    type: 'Object',
-    errortxt: '请选择场景'
-  },
-  audio: {
-    key: 'audio',
-    type: 'String',
-    errortxt: '请选择音频'
-  },
-  video: {
-    key: 'video',
-    type: 'String',
-    errortxt: '请选择视频'
-  },
-  image: {
-    key: 'image',
-    type: 'Array',
-    errortxt: '请选择图片'
-  },
-  link: {
-    key: 'hyperlink',
-    type: 'String',
-    errortxt: '请输入超链接'
-  },
-  textarea: {
-    key: 'textarea',
-    type: 'String',
-    errortxt: '请输入文本'
-  }
-}
+
+let HTMap = ''
 
 
 export default {
@@ -130,38 +100,70 @@ export default {
         thumb: cdn + `img_doticon_${String(i + 1).padStart(2, '0')}.svg`
       }
     }
+    HTMap = {
+      scene: {
+        key: 'secne',
+        type: 'Object',
+        errortxt: this.$i18n.t('hotspot.secne_errortxt')
+      },
+      audio: {
+        key: 'audio',
+        type: 'String',
+        errortxt: this.$i18n.t('hotspot.audio_errortxt')
+      },
+      video: {
+        key: 'video',
+        type: 'String',
+        errortxt: this.$i18n.t('hotspot.video_errortxt')
+      },
+      image: {
+        key: 'image',
+        type: 'Array',
+        errortxt: this.$i18n.t('hotspot.image_errortxt')
+      },
+      link: {
+        key: 'hyperlink',
+        type: 'String',
+        errortxt: this.$i18n.t('hotspot.link_errortxt')
+      },
+      textarea: {
+        key: 'textarea',
+        type: 'String',
+        errortxt: this.$i18n.t('hotspot.textarea_errortxt')
+      }
+    }
     return {
       canSave: false,
       hotSpotTypeList: [
         {
           id: 'scene',
-          name: '场景切换'
+          name: this.$i18n.t('hotspot.scene')
         },
         {
           id: 'link',
-          name: '超链接'
+          name: this.$i18n.t('hotspot.link')
         },
         {
           id: 'textarea',
-          name: '文本'
+          name: this.$i18n.t('hotspot.textarea')
         },
         {
           id: 'image',
-          name: '图片'
+          name: this.$i18n.t('hotspot.image')
         },
         {
           id: 'audio',
-          name: '音频'
+          name: this.$i18n.t('hotspot.audio')
         },
         {
           id: 'video',
-          name: '视频'
+          name: this.$i18n.t('hotspot.video')
         }
       ],
       hotStyle,
       rang: {
-        label: '图标大小',
-        unit: "倍",
+        label: this.$i18n.t('hotspot.icon_size'),
+        unit: this.$i18n.t('hotspot.unit'),
         gradient: 0.5,
         value: 1,
         min: 0.5,
@@ -247,7 +249,7 @@ export default {
 
 
     this.$nextTick(() => {
-      if (this.editTitle != '编辑') {
+      if (this.editTitle != '编辑'&&this.editTitle != this.$i18n.t('hotspot.edit')) {
         this.addhotspot(this.hotStyle[0])
         this.rang.value = window.g_hotspotCurrentScale
         this.onRangeChange({ value: window.g_hotspotCurrentScale })
@@ -288,12 +290,12 @@ export default {
           break;
       }
     },
-    listerFnReset(){
-      if (this.hotspot.hotspotTitle == '单击确定热点位置') {
+    listerFnReset() {
+      if (this.hotspot.hotspotTitle == '单击确定热点位置'||this.hotspot.hotspotTitle == this.$i18n.t('hotspot.click_to_comfirm')) {
         this.hotspot.hotspotTitle = ''
       }
     },
-    
+
     listerFn(data) {
       this.selectItem = {
         sceneCode: data.sceneCode
@@ -316,7 +318,7 @@ export default {
       let { hotspotTitle, hotspotType } = this.hotspot
       let item = HTMap[hotspotType]
       if (
-        (hotspotTitle.trim() && hotspotTitle.trim() != '单击确定热点位置')
+        (hotspotTitle.trim() && (hotspotTitle.trim() != '单击确定热点位置'&&hotspotTitle.trim() != this.$i18n.t('hotspot.click_to_comfirm')))
         || this.hotspot[item.key]
         || (item.type == 'Array' && this.hotspot[item.key].length > 0)
       ) {
@@ -326,10 +328,10 @@ export default {
     },
 
     confirmCancel() {
-      if (this.editTitle != '编辑') {
+      if (this.editTitle != '编辑'&&this.editTitle != this.$i18n.t('hotspot.edit')) {
         if (this.isAddChange()) {
           this.$confirm({
-            content: "热点内容未编辑完,确定要关闭吗",
+            content: this.$i18n.t('hotspot.close_dialog'),
             ok: () => {
               this.cancel()
             }
@@ -340,7 +342,7 @@ export default {
       } else {
         if (this.isDiffHotSpot() || this.isAddChange()) {
           this.$confirm({
-            content: "热点内容未编辑完,确定要关闭吗",
+            content: this.$i18n.t('hotspot.close_dialog'),
             ok: () => {
               this.cancel()
             }
@@ -353,7 +355,7 @@ export default {
     cancel() {
       this.$store.commit("SetHotspot", this.backupHotSpot);
       this.$emit("close", {
-        type: this.editTitle == '编辑' ? 'edit' : 'add',
+        type: this.editTitle == this.$i18n.t('hotspot.edit') ? 'edit' : 'add',
         data: this.backupHotSpot
       });
     },
@@ -368,13 +370,13 @@ export default {
 
       if (!img) {
         return this.$alert({
-          content: "请选择热点图标",
+          content: this.$i18n.t('hotspot.select_hotspot_icon'),
         });
       }
 
-      if (!(hotspotTitle.trim() && hotspotTitle.trim() != '单击确定热点位置')) {
+      if (!(hotspotTitle.trim() && (hotspotTitle.trim() != '单击确定热点位置'&&hotspotTitle.trim() != this.$i18n.t('hotspot.click_to_comfirm')))) {
         return this.$alert({
-          content: "请输入热点标题",
+          content: this.$i18n.t('hotspot.input_hotspot_title'),
         });
       }
 
@@ -389,9 +391,9 @@ export default {
     },
     addhotspot(data) {
 
-      console.log(this.isAdd,'this.isAdd');
+      console.log(this.isAdd, 'this.isAdd');
 
-      if (this.isAdd && this.editTitle != '编辑') {
+      if (this.isAdd && (this.editTitle != '编辑'&&this.editTitle != this.$i18n.t('hotspot.edit'))) {
         this.isAdd = false
         this.hotspot.img = data.img
         this.hotspot.icontype = data.id

+ 15 - 15
packages/qjkankan-editor/src/views/hotspot/HotSpotList.vue

@@ -1,14 +1,14 @@
 <template>
   <div class="hot-spot-list" app-border dir-left>
     <div class="title">
-      热点设置
-      <i class="iconfont icon-material_prompt tool-tip-for-editor" v-tooltip="'在全景图中添加图标热点,并设置热点的效果。'" />
+      {{$i18n.t('hotspot.hotspot_setting')}}
+      <i class="iconfont icon-material_prompt tool-tip-for-editor" v-tooltip="$i18n.t('hotspot.hotspot_tips')" />
     </div>
     <button class="ui-button submit" :class="{ disable: !currentScene || currentScene.type ==='4dkk' }" @click="open(null)">
-      添加热点
+      {{$i18n.t('hotspot.add_hotspot')}}
     </button>
 
-    <div class="total-count">当前全景图热点
+    <div class="total-count">{{$i18n.t('hotspot.current_hotspots')}}
       <span class="number">({{ someData.hotspots.length }})</span>
     </div>
     <div class="hots">
@@ -16,18 +16,18 @@
         <li v-for="(item, key) in someData.hotspots" :key="key" @click="open(item)">
           <img class="hot-spot-thumb" :src="item.img" alt="">
           <span class="hot-spot-title" v-title="item.hotspotTitle">{{ item.hotspotTitle }}</span>
-          <i class="iconfont icon-editor_list_delete icon-delete" v-tooltip="'删除'" @click.stop="deleIndex = key" />
+          <i class="iconfont icon-editor_list_delete icon-delete" v-tooltip="$i18n.t('hotspot.delete')" @click.stop="deleIndex = key" />
           <div class="deletion-confirm-wrap">
             <div class="deletion-confirm" :class="deleIndex == key ? 'show' : 'hide'" v-clickoutside="clickoutside"
               @click.stop="deleteHot(item)">
-              删除
+              {{$i18n.t('hotspot.delete')}}
             </div>
           </div>
         </li>
       </ul>
       <div v-else class="empty-tip">
         <img src="@/assets/images/default/empty_hotspot_list.png" alt="">
-        <div>暂无热点信息~</div>
+        <div>{{$i18n.t('hotspot.no_hotspot')}}</div>
       </div>
     </div>
     <EditPanel class="adding-hotspot-panel" v-if="showPanel" :editTitle="editTitle" @save="save" :show="showPanel"
@@ -66,7 +66,7 @@ export default {
       showPanel: false,
       someData: { hotspots: [] },
       deleIndex: -1,
-      editTitle: "编辑",
+      editTitle: this.$i18n.t('hotspot.edit'),
     }
   },
   watch: {
@@ -118,10 +118,10 @@ export default {
         }
         return
       }
-      if (this.editTitle == '新增') {
+      if (this.editTitle == '新增' || this.editTitle == this.$i18n.t('hotspot.add')) {
         if (this.showPanel) {
           return this.$confirm({
-            content: "热点内容未编辑完,确定要关闭吗",
+            content: this.$i18n.t('hotspot.close_dialog'),
             ok: () => {
               this.deleteKRHotspot(this.hotspot)
               this.open(this.someData.hotspots[idx])
@@ -177,7 +177,7 @@ export default {
       }
 
       this.currentScene.someData = this.someData
-      this.$msg.success(this.editTitle + "成功")
+      this.$msg.success(this.editTitle + this.$i18n.t('hotspot.success'))
 
       window.g_hotspotCurrentScale = mapFontSize[data.fontSize] || 1
 
@@ -200,13 +200,13 @@ export default {
       this.deleteKRHotspot(data)
       this.currentScene.someData = this.someData
       this.updateInfo()
-      this.$msg.success("删除成功")
+      this.$msg.success(this.$i18n.t('hotspot.delete')+this.$i18n.t('hotspot.success'))
     },
     open(data) {
-      this.editTitle = "新增"
+      this.editTitle = this.$i18n.t('hotspot.add')
       let temp = data ? browser.CloneObject(data)  : {
         name: "_" + this.$randomWord(true, 8, 8),
-        hotspotTitle: '单击确定热点位置',
+        hotspotTitle: this.$i18n.t('hotspot.click_to_comfirm'),
         fontSize: 12,
         type: '',
         img: '',
@@ -230,7 +230,7 @@ export default {
 
       if (data) {
         this.editLink = temp.link
-        this.editTitle = "编辑"
+        this.editTitle =  this.$i18n.t('hotspot.edit')
         window.__krfn.utils.looktohotspot(this.$getKrpano(), data.name)
       }
     },

+ 4 - 3
packages/qjkankan-editor/src/views/hotspot/hotspotType/audio.vue

@@ -2,7 +2,7 @@
   <div class="audio-hotspot-setting">
     <button class="add-btn" v-if="!tAudio.id" @click="selectHandle">
       <i class="iconfont icon-editor_add"></i>
-      添加音频
+      {{$i18n.t('hotspot.add_audio')}}
     </button>
     <template v-else>
       <div class="music-display" @click.self="onClickCurrentMusic">
@@ -12,13 +12,14 @@
       </div>
       <button class="change-btn" @click="selectHandle">
         <i class="iconfont icon-editor_update"></i>
-        更换音频
+      {{$i18n.t('hotspot.change_audio')}}
+        
       </button>
     </template>
 
     <div class="dialog" style="z-index: 2000" v-if="isShowSelect">
       <MaterialSelectorForEditor
-        title="选择音频"
+        :title="$i18n.t('hotspot.select_audio')"
         @cancle="isShowSelect = false"
         @submit="handleSelect"
         :selectableType="['audio']"

+ 3 - 3
packages/qjkankan-editor/src/views/hotspot/hotspotType/image.vue

@@ -4,13 +4,13 @@
     <div class="image-list-wrap">
       <button class="add-btn" v-if="images.length === 0" @click="selectHandle">
         <img src="@/assets/images/default/hotspot_scene_add.png" alt="">
-        <div>添加图片</div>
+        <div>{{$i18n.t('hotspot.add_image')}}</div>
       </button>
       <ul class="image-list" v-else>
         <button class="add-btn" @click="selectHandle">
           <div class="inner-wrap">
             <img src="@/assets/images/default/hotspot_scene_add.png" alt="">
-            <div>添加</div>
+            <div>{{$i18n.t('hotspot.add_tooltips')}}</div>
           </div>
         </button>
         <li v-for="(item,i) in images" :key="i">
@@ -25,7 +25,7 @@
 
     <div class="dialog" style="z-index: 2000" v-if="isShowSelect">
       <MaterialSelectorForEditor
-        title="选择图片"
+        :title="$i18n.t('hotspot.select_image')"
         @cancle="isShowSelect = false"
         @submit="handleSelect"
         :selectableType="['image']"

+ 2 - 2
packages/qjkankan-editor/src/views/hotspot/hotspotType/link.vue

@@ -20,11 +20,11 @@ export default {
       linkTypeList: [
         {
           id: 'popup',
-          name: '弹出层打开'
+          name: this.$i18n.t('hotspot.popup')
         },
         {
           id: 'newTab',
-          name: '新窗口打开'
+          name: this.$i18n.t('hotspot.newTab')
         },
 
       ],

+ 2 - 2
packages/qjkankan-editor/src/views/hotspot/hotspotType/scene.vue

@@ -3,7 +3,7 @@
     <div class="add-btn-wrap" v-if="!selected.icon">
       <button @click="showScene = true">
         <img src="@/assets/images/default/hotspot_scene_add.png" alt="">
-        <div>添加场景</div>
+        <div>{{$i18n.t('hotspot.add_scene')}}</div>
       </button>
     </div>
     <div v-else class="scene-info">
@@ -16,7 +16,7 @@
         </button>
       </div>
       <div class="right-wrap">
-        <button class="ui-button submit" @click="showScene = true">更换场景</button>
+        <button class="ui-button submit" @click="showScene = true">{{$i18n.t('hotspot.change_scene')}}</button>
         <div class="scene-title" v-title="selected.sceneTitle">{{selected.sceneTitle}}</div>
       </div>
     </div>

+ 1 - 1
packages/qjkankan-editor/src/views/hotspot/hotspotType/textarea.vue

@@ -8,7 +8,7 @@
         type="text"
       /> -->
 
-      <editor ref="editor" :html="text" :placeholder="'请输入文字内容,限500字'" :maxlength="500" @change="onEditorChange"></editor>
+      <editor ref="editor" :html="text" :placeholder="$i18n.t('hotspot.text_placeholder')" :maxlength="500" @change="onEditorChange"></editor>
       <span class="count">{{size}}/500</span>
     </div>
   </div>

+ 3 - 3
packages/qjkankan-editor/src/views/hotspot/hotspotType/video.vue

@@ -4,7 +4,7 @@
     <div class="add-btn-wrap" v-if="!tVideo.id">
       <button @click="selectHandle">
         <img src="@/assets/images/default/hotspot_scene_add.png" alt="">
-        <div>添加视频</div>
+        <div>{{$i18n.t('hotspot.add_video')}}</div>
       </button>
     </div>
 
@@ -18,13 +18,13 @@
       </div>
       <button class="change-btn" @click="selectHandle">
         <i class="iconfont icon-editor_update"></i>
-        更换视频
+        {{$i18n.t('hotspot.change_video')}}
       </button>
     </div>
 
     <div class="dialog" style="z-index: 2000" v-if="isShowSelect">
       <MaterialSelectorForEditor
-        title="选择视频"
+        :title="$i18n.t('hotspot.change_video')"
         @cancle="isShowSelect = false"
         @submit="handleSelect"
         :selectableType="['video']"

+ 1 - 0
packages/qjkankan-editor/src/views/material/works/index.vue

@@ -676,6 +676,7 @@ export default {
             background: linear-gradient(144deg, #00AEFB 0%, #0076F6 100%);
             position: relative;
             cursor: pointer;
+            margin: 0 auto;
 
             >i {
               font-size: 32px;

+ 18 - 17
packages/qjkankan-editor/src/views/navigation/groupSettings.vue

@@ -1,14 +1,14 @@
 <template>
   <div class="group-settings" app-border dir-right>
-    <div class="ui-title-big">场景导航
-      <i class="iconfont icon-material_prompt tool-tip-for-editor" v-tooltip="'场景素材包括全景图和三维场景,您可自定义分组及场景的排列顺序。'">
+    <div class="ui-title-big">{{$i18n.t("navigation.scene_navigation")}}
+      <i class="iconfont icon-material_prompt tool-tip-for-editor" v-tooltip="$i18n.t('navigation.scene_tips')">
       </i>
     </div>
     <button class="ui-button create-group-btn"
       @click="onRequestForAddLevel1Group"
     >
       <i class="iconfont icon-editor_add"></i>
-      新增分组
+      {{$i18n.t('navigation.add_group')}}
     </button>
 
     <div class="scene-group-wrap">
@@ -63,13 +63,13 @@ export default {
 
       const newGroupLevel1 = {
         id: newGroupLevel1Id,
-        name: '一级分组',
+        name: this.$i18n.t('navigation.group_one'),
         children: [newGroupLevel2Id],
       }
       this.info.catalogRoot.push(newGroupLevel1)
       this.info.catalogs.push({
         id: newGroupLevel2Id,
-        name: '默认二级分组',
+        name: this.$i18n.t('navigation.default_group_two'),
       })
 
       this.$nextTick(() => {
@@ -87,7 +87,7 @@ export default {
       parent.children.push(id);
       const newGroupLevel2 = {
         id,
-        name: '二级分组',
+        name: this.$i18n.t('navigation.group_two'),
       }
       this.info.catalogs.push(newGroupLevel2);
 
@@ -113,8 +113,8 @@ export default {
     onDeleteScene(sceneId) {
       if (this.info.scenes.length === 1) {
         this.$alert({
-          title: '删除场景',
-          content: '请至少保留一个场景',
+          title: this.$i18n.t('navigation.delete_init_scene'),
+          content: this.$i18n.t('navigation.keep_one_scene'),
         })
         return
       }
@@ -123,7 +123,7 @@ export default {
       })
       this.info.scenes.splice(deleteTargetIdx, 1)
       this.delFirstScene()
-      this.$msg.success("删除成功")
+      this.$msg.success(this.$i18n.t('gather.delete_success'))
     },
     onRenameGroup(groupId, level, newName) {
       if (level === 1) {
@@ -131,13 +131,13 @@ export default {
           return item.id === groupId
         })
         target.name = newName
-        this.$msg.success('操作成功')
+        this.$msg.success(this.$i18n.t('gather.success'))
       } else if (level === 2) {
         const target = this.info.catalogs.find((item) => {
           return item.id === groupId
         })
         target.name = newName
-        this.$msg.success('操作成功')
+        this.$msg.success(this.$i18n.t('gather.success'))
       } else {
         console.error('invalid level!');
       }
@@ -149,7 +149,7 @@ export default {
           (groupLevel === 2 && this.info.catalogs.length === 1)
         ) {
           this.$alert({
-            content: "请至少保留一个分组",
+            content: this.$i18n.t('navigation.keep_one_group'),
           })
           return
         }
@@ -171,7 +171,7 @@ export default {
             })
           ) {
             this.$alert({
-              content: "请至少保留一个场景",
+              content: this.$i18n.t('navigation.keep_one_scene'),
             })
             return
           }
@@ -183,14 +183,14 @@ export default {
             return scene.category === groupId
           })) {
             this.$alert({
-              content: "请至少保留一个场景",
+              content: this.$i18n.t('navigation.keep_one_scene'),
             })
             return
           }
         }
       } catch(e) {
         console.error(e);
-        this.$msg.error('删除失败')
+        this.$msg.error(this.$i18n.t('gather.delete_fail'))
         return
       }
 
@@ -239,7 +239,7 @@ export default {
           this.info.catalogRoot[belongGroupIdxLevel1].children.push(newGroupLevel2Id)
           this.info.catalogs.push({
             id: newGroupLevel2Id,
-            name: '默认二级分组',
+            name: this.$i18n.t('navigation.default_group_two'),
           })
         }
 
@@ -268,10 +268,11 @@ export default {
         }
         // 酌情清空初始场景设置
         this.delFirstScene()
-        this.$msg.success("删除成功")
+        this.$msg.success(this.$i18n.t('gather.delete_success'))
       } catch(e) {
         console.error(e);
         this.$msg.error('删除失败')
+        this.$msg.error(this.$i18n.t('gather.delete_fail'))
         this.$store.commit("SetInfo", backup)
       }
     },

+ 5 - 5
packages/qjkankan-editor/src/views/navigation/initialSceneSettings.vue

@@ -1,22 +1,22 @@
 <template>
   <div class="initial-scene-settings" app-border dir-left>
     <div class="initial-scene-settings__title">
-      初始场景
-      <i class="iconfont icon-material_prompt tool-tip-for-editor" v-tooltip="'初始场景为查看链接时进入的第一个场景,未设\n置时,不固定从某一场景打开。'"/>
+      {{$i18n.t('navigation.init_scene')}}
+      <i class="iconfont icon-material_prompt tool-tip-for-editor" v-tooltip="$i18n.t('navigation.init_scene_tips')"/>
     </div>
     
     <img class="preview" v-if="info.firstScene" :src="info.firstScene.icon" alt="">
     <img class="placeholder" v-else src="@/assets/images/pano-image-placeholder.png" alt="">
 
     <div class="change-init" v-if="info.firstScene">
-      <button class="ui-button deepcancel" @click="deleteIndexInfo">删除场景</button>
+      <button class="ui-button deepcancel" @click="deleteIndexInfo">{{$i18n.t('navigation.delete_init_scene')}}</button>
       <button @click="showInitScene=true" class="ui-button submit">
-        修改场景
+        {{$i18n.t('navigation.edit_init_scene')}}
       </button>
     </div>
     <div class="set-init" v-else>
       <button @click="showInitScene=true" class="ui-button submit">
-        设置初始场景
+        {{$i18n.t('navigation.setting_init_scene')}}
       </button>
     </div>
 

+ 2 - 2
packages/qjkankan-editor/src/views/screen/Setting.vue

@@ -1,8 +1,8 @@
 <template>
   <div class="view-setting" app-border dir-left>
     <div class="title">
-      初始画面
-      <i class="iconfont icon-material_prompt tool-tip-for-editor" v-tooltip="'初始画面为进入场景时第一画面,请拖动全景图选择合适的画面设置。'"/>
+      {{$i18n.t('screen.init_screen')}}
+      <i class="iconfont icon-material_prompt tool-tip-for-editor" v-tooltip="$i18n.t('screen.screen_tips')"/>
     </div>
     <img class="preview" v-if="initImg" :src="`${initImg}?${Math.random()}`" alt="">
     <img class="placeholder" v-else src="@/assets/images/pano-image-placeholder.png" alt="">