bill hai 17 horas
pai
achega
b9e4e14a8a

+ 530 - 0
src/lang/locales/es.json

@@ -0,0 +1,530 @@
+{
+  "am": {
+    "actions": {
+      "Climb": "Gatear",
+      "FallBackward": "Caer hacia atrás",
+      "FallForward": "Caer hacia adelante",
+      "JumpDown": "Saltar hacia abajo",
+      "JumpUp": "Saltar hacia arriba",
+      "Run": "Correr",
+      "TurnLeft": "Girar a la izquierda",
+      "TurnRight": "Girar a la derecha",
+      "Walk": "Caminar"
+    },
+    "ammodel": {
+      "am": {
+        "a_idel": "Ponerse de pie",
+        "actionk": "Biblioteca de Acciones",
+        "crawling": "Gatear",
+        "death_from_back_headshot": "Caer hacia adelante",
+        "drunk_walk": "Caminar ebrio",
+        "dying": "Caer hacia adelante y morir",
+        "end_bicycle_sit_up": "Tumbado: Levantarse",
+        "fist_pump": "Sentarse",
+        "frame": "Agregar Cuadros",
+        "head_hit": "Golpe en la Cabeza",
+        "hit_on_legs": "Caer hacia atrás",
+        "illegal_knee": "Rodilla Izquierda",
+        "left_turn_wbriefcase": "Girar a la izquierda",
+        "medium_hit_to_head": "Ser golpeado",
+        "mma_kick": "Patada Frontal Derecha",
+        "name": "Animación",
+        "path": "Trayectoria",
+        "peone_forward": "Gatear hacia adelante",
+        "running": "Correr estándar",
+        "selectpath": "Seleccionar Trayectoria",
+        "selectpathtip": "Por favor, seleccione una trayectoria",
+        "sit_to_stand": "Sentado: Ponerse de pie",
+        "sitting": "Sentarse estándar",
+        "standard_walk": "Caminar estándar",
+        "standing_jump": "Salto hacia arriba estándar",
+        "start_walking": "Empezar a caminar",
+        "subtitle": "Subtítulos",
+        "wall_crash": "Soltarse y caer"
+      },
+      "fontsize": "Tamaño de Fuente",
+      "globalVisibility": "Rango Completo Visible",
+      "name": "Nombre",
+      "nameShow": "Mostrar Nombre",
+      "nameplace": "Por favor, ingrese el nombre",
+      "range": "Rango Visible"
+    },
+    "applyAllConfirm": "¿Está seguro de que desea aplicar este atributo a todos los modelos animados?",
+    "empty": "No se ha agregado animación",
+    "eqtimeTip": "No agregar repetidamente al mismo tiempo",
+    "list": "Lista de Datos",
+    "model": "Modelo",
+    "move": "Mover aquí",
+    "name": "Modelo Animado",
+    "name1": "Animación",
+    "path": {
+      "dur": "Duración",
+      "list": "Lista de Trayectorias",
+      "name": "Trayectoria",
+      "nameplace": "Por favor, ingrese el nombre",
+      "pathtip": "Por favor, seleccione una trayectoria",
+      "reverse": "Punto Final Inverso",
+      "title": "Establecer Trayectoria"
+    },
+    "setting": {
+      "amplitude": "Amplitud",
+      "dur": "Duración",
+      "duration": "Duración",
+      "name": "Nombre",
+      "nameplace": "Por favor, ingrese el nombre",
+      "speed": "Velocidad",
+      "title": "Establecer Animación"
+    },
+    "subtitle": {
+      "color": "Color de Fondo",
+      "content": "Subtítulo",
+      "contentplace": "Por favor, ingrese el subtítulo",
+      "dur": "Permanencia en Pantalla",
+      "name": "Nombre",
+      "nameplace": "Por favor, ingrese el nombre",
+      "title": "Establecer Subtítulo"
+    },
+    "tabs": {
+      "actions": "Acción",
+      "paths": "Trayectoria",
+      "subtitles": "Subtítulo"
+    }
+  },
+  "common": {
+    "NoFilesSelected": "Ningún archivo seleccionado"
+  },
+  "coord": {
+    "zoomLevel": "Nivel de Zoom"
+  },
+  "floder": {
+    "extractList": "Lista de Extracción",
+    "name": "Archivo del caso",
+    "photo": "Rollo de fotos",
+    "record": "Registro de Inspección"
+  },
+  "fuse": {
+    "dataQue": "Fuente de datos",
+    "dataSize": "Tamaño de datos",
+    "dataTime": "Tiempo de Captura",
+    "def": "Restaurar predeterminado",
+    "defConfirm": "¿Está seguro de que desea restaurar la configuración predeterminada? Esta acción no se puede deshacer.",
+    "flip": "Rotar",
+    "hre": "Por favor, ajuste la posición vertical dentro de la ventana actual.",
+    "join": "Unión",
+    "label": "Fusionar escena",
+    "len": "Longitud",
+    "localUpload": "Subida Local",
+    "model": "Modelo 3D",
+    "modelUpload": {
+      "desc0": "OSGB: ≤ 2 GB. Subir como ZIP. Incluir solo carpeta Data y archivo XML. Sin subcarpetas. Usar nombres de archivo ASCII.",
+      "desc1": "Soporta nubes de puntos PLY y LAS (se recomienda ≤2 GB). Los archivos OBJ deben ser ≤100 MB y subirse como un ZIP que contenga solo el archivo OBJ, las texturas y el archivo MTL, sin subcarpetas; usar nombres de archivo ASCII.",
+      "title0": "Subida de OSGB",
+      "title1": "Requisitos de Subida para Otros Modelos"
+    },
+    "move": "Mover",
+    "name": "Convergencia múltiple",
+    "opacity": "Opacidad del modelo",
+    "opacity1": "Transparencia",
+    "pano": "Panorama",
+    "reSelect": "Volver a seleccionar puntos",
+    "registration": "Registro",
+    "repScale": "Escalado uniforme",
+    "scale": "Escala",
+    "selectTip": "Por favor, seleccione dos puntos para marcar una longitud conocida e ingrese la longitud real",
+    "setScale": "Establecer escala",
+    "sync": "Inspección simultánea en pantalla",
+    "syncErr": "La visualización de propiedades solo es compatible con escenas de tipo {types}. Por favor, agregue este tipo de escena.",
+    "unModel": "¡El modelo no existe!",
+    "vre": "Por favor, ajuste la posición horizontal dentro de la ventana actual."
+  },
+  "guide": {
+    "defTitle": "Recorrido",
+    "guide": {
+      "activeam": "Activar",
+      "activeclose": "Animación Deshabilitada",
+      "activetip": "Animación Activada. Por favor, agregue al menos 2 perspectivas.",
+      "add": "Agregar punto de vista",
+      "clear": "Borrar la vista",
+      "clearConfirm": "¿Está seguro de que desea borrar la vista?",
+      "delConfirm": "¿Está seguro de que desea eliminar esta vista?",
+      "list": "Lista de Recorridos",
+      "name": "Recorrido",
+      "time": "Duración del video",
+      "unItems": "¡No se puede guardar un recorrido guiado por ruta vacío!",
+      "unactiveam": "Cerrar",
+      "undata": "Navegación no disponible"
+    },
+    "guideName": "Recorrido ({count})",
+    "modelErr": "El modelo donde se encuentra la trayectoria ha sido eliminado y no se puede reproducir.",
+    "name": "Recorrido",
+    "nameErr": "El nombre de la trayectoria no puede estar vacío",
+    "pErr": "El número de puntos de la trayectoria no puede ser menor a dos.",
+    "path": {
+      "applyConfirm": "¿Está seguro de que desea aplicar este atributo a todas las ubicaciones?",
+      "fontSize": "Tamaño de fuente",
+      "globalVisibility": "Todo el rango visible",
+      "lineColor": "Color de la trayectoria",
+      "lineWidth": "Grosor de la trayectoria",
+      "name": "Ruta",
+      "pointDesc": "Descripción",
+      "pointTitle": "Editar punto",
+      "preview": "Vista previa de la trayectoria",
+      "reverseDirection": "Flecha inversa",
+      "showDirection": "Flecha de trayectoria",
+      "stop": "Detener",
+      "title": "Nombre de la trayectoria",
+      "visibilityRange": "Rango visible"
+    },
+    "pathName": "Ruta ({count})"
+  },
+  "material": {
+    "name": "Biblioteca de Medios",
+    "search": "Buscar por nombre",
+    "selectCount": "Datos seleccionados",
+    "selectErr": "Se puede seleccionar un máximo de {count} elementos",
+    "tabs": {
+      "action": "Operación",
+      "format": "Formato",
+      "group": "Grupo",
+      "name": "Nombre",
+      "size": "Tamaño",
+      "status": "Estado"
+    },
+    "up": "Subir desde la Biblioteca de Medios",
+    "uploadErr": "Subida fallida",
+    "uploadIng": "Subiendo...",
+    "uploadSuccess": "Subida exitosa"
+  },
+  "measure": {
+    "area": {
+      "desc": "Área",
+      "unit": "Área"
+    },
+    "free": {
+      "desc": "Libre",
+      "unit": "Longitud"
+    },
+    "list": "Lista de medidas",
+    "name": "Medir",
+    "nameErr": "El nombre de la medida no puede estar vacío",
+    "vertical": {
+      "desc": "Vertical",
+      "unit": "Longitud"
+    }
+  },
+  "mediaLibrary": {
+    "file": "archivo",
+    "setGrouping": "Modificar Agrupación",
+    "tips": {
+      "osgbtips": "Subir osgb: Necesita usar un paquete zip para subir. Contiene carpetas Data y archivos xml. El paquete no debe contener carpetas, y el nombre del archivo no debe usar chino. Como se muestra en la figura:",
+      "uplooadSize": "¡Los archivos subidos no pueden exceder 2G!"
+    }
+  },
+  "motior": {
+    "error": "No se puede ver el monitor. Por favor, verifique si la red es normal.",
+    "list": "Lista de Monitores",
+    "name": "Monitor Interior"
+  },
+  "path": {
+    "name": "Trayectoria",
+    "name1": "Ruta"
+  },
+  "program": {
+    "case": {
+      "add_case": "Nuevo Caso",
+      "create": "Crear archivo de caso",
+      "empty": "No hay proyectos disponibles",
+      "status_1": "Cálculo fallido",
+      "status_3": "Archivar",
+      "status_5": "Pausa",
+      "status_6": "En cola",
+      "status_7": "Copiando..."
+    },
+    "errMsg": {
+      "repeatGen": "Hay una tarea de cálculo, por favor espere hasta que se complete el cálculo antes de descargar el paquete sin conexión. Evite fallas en el empaquetado."
+    },
+    "exit-msg": "Incluso después de cerrar la página, el programa continuará ejecutándose en segundo plano. Si necesita salir del programa, hágalo desde la bandeja del sistema.",
+    "kankan": "Minion",
+    "lang": "Multilingüe",
+    "laser": "Mega",
+    "menu": {
+      "library": "Biblioteca de Medios"
+    },
+    "path_no_exist": "La trayectoria no existe.",
+    "scene": {
+      "calcDone": "Tiempo de Finalización del Cálculo"
+    },
+    "sceneDetail": {
+      "exportingOut": "Exportando...",
+      "firstPacking": "Empaquetando",
+      "import": "Importar",
+      "isCopyExist": "La escena ya existe. ¿Desea guardarla como una copia?",
+      "migrageS_title": "Migrar escena",
+      "reFirstPacking": "Reempaquetado",
+      "stoping": "Pausa",
+      "updateAt": "Actualizando en"
+    },
+    "sceneDown": {
+      "coverStatus": {
+        "un": "Por calcular"
+      },
+      "msgStatus": {
+        "ing": "Pausa",
+        "lineup": "Continuar calculando"
+      }
+    },
+    "shenguang": "Meta"
+  },
+  "record": {
+    "backHandler": "El backend está procesando.",
+    "con": "Continuar grabando",
+    "defName": "Video tutorial {num}",
+    "delConfirm": "¿Está seguro de que desea eliminar este video?",
+    "list": "Todos los videos",
+    "merge": "Fusionar videos",
+    "name": "Grabación de pantalla",
+    "nameErr": "El nombre del video no puede estar vacío",
+    "sizeErr": "Se ha excedido el límite de tamaño y la grabación no puede continuar. ¡Puede guardar y reanudar la grabación!",
+    "start": "Comenzar grabación",
+    "tag": "Etiqueta",
+    "vName": "Grabación de pantalla"
+  },
+  "resCode": {
+    "0": "Solicitud exitosa",
+    "4008": "el token ha expirado",
+    "4010": "No tiene permiso de acceso",
+    "40110": "No tiene permiso de edición",
+    "40111": "No tiene permiso de acceso"
+  },
+  "scene": {
+    "add": "Agregar escena",
+    "list": "Lista de escenas",
+    "manage": "Gestión de escenas",
+    "tabs": {
+      "createTime": "Tiempo de Captura/Creación",
+      "name": "Nombre",
+      "type": "Tipo"
+    },
+    "typeRaws": {
+      "0": "Escena de Malla",
+      "1": "Escena de Malla",
+      "2": "Escena de nube de puntos",
+      "4": "Escena de Malla",
+      "5": "Escena de nube de puntos",
+      "6": "Escena de Malla",
+      "7": "Escena de Malla"
+    },
+    "types": {
+      "0": "4DKanKan Pro/Malla",
+      "1": "4DKanKan Minion/Malla",
+      "2": "4DKanKan Mega/Nube de puntos",
+      "3": "Biblioteca de Medios",
+      "4": "4DKanKan Mega/Malla",
+      "5": "4DKanKan Meta/Nube de puntos",
+      "6": "4DKanKan Meta/Malla",
+      "7": "Panox/Malla"
+    }
+  },
+  "sceneHome": {
+    "nameSearch": "Buscar por nombre",
+    "searchData": "Resultados de búsqueda",
+    "selectAdd": "Seleccionar Dirección",
+    "yctips": "No se puede eliminar. La escena ha sido agregada a la multi-fusión. Por favor, elimine la escena de la multi-fusión antes de intentar nuevamente.",
+    "yctipsErr": "No se puede eliminar. La escena ha sido agregada a la multi-fusión. Por favor, elimine la escena de la multi-fusión antes de intentar nuevamente."
+  },
+  "security": {
+    "name": "Seguridad"
+  },
+  "setting": {
+    "back": "Establecer cielo",
+    "backs0": "N/A",
+    "backs1": "Mapa",
+    "backs2": "Cielo azul y nubes blancas",
+    "backs3": "Nublado",
+    "backs4": "Cielo nocturno",
+    "backs5": "Atardecer",
+    "initView": "Pantalla Inicial",
+    "name": "Configuración",
+    "name1": "Nombre",
+    "name1tip": "El título no puede estar vacío."
+  },
+  "sys": {
+    "404Page": "El recurso no existe o ha sido eliminado",
+    "BrowserJY": "Se recomienda utilizar los siguientes navegadores:",
+    "BrowserLow": "No se puede abrir la página. Por favor, actualice o cambie de navegador e intente nuevamente.",
+    "add": "Agregar",
+    "addData": "Agregar datos",
+    "address": "Dirección",
+    "all": "Todos",
+    "camera0": "Panox/Malla",
+    "camera1": "4DKankan Minion/Malla",
+    "camera2": "4DKankan Mega/Nube de Puntos",
+    "camera3": "Subida Local",
+    "camera4": "4DKankan Mega/Malla",
+    "camera5": "4DKankan Meta/Nube de Puntos",
+    "camera6": "4DKankan Meta/Malla",
+    "camera7": "Panox",
+    "cancel": "Cancelar",
+    "caseTitle": "Caso",
+    "copy": "Copiar",
+    "create": "Crear",
+    "crop": "Recortar",
+    "cropIng": "Recorte en progreso",
+    "del": "Eliminar",
+    "delConfrm": "¿Está seguro de que desea eliminar estos datos?",
+    "download": "Descargar",
+    "edit": "Editar",
+    "enter": "Confirmar",
+    "errPage": "Página de error",
+    "expand": "Expandir",
+    "ga": {
+      "camera0": "Panox/Malla",
+      "camera1": "4DKankan Minion/Malla",
+      "camera2": "4DKankan Mega/Nube de Puntos",
+      "camera3": "Subida Local",
+      "camera4": "4DKankan Mega/Malla",
+      "camera5": "4DKankan Meta/Nube de Puntos",
+      "camera6": "4DKankan Meta/Malla"
+    },
+    "imgLoadErr": "Error al cargar la imagen",
+    "import": "Importar",
+    "jsError": "Memoria insuficiente. Por favor, evite abrir múltiples páginas o aplicaciones simultáneamente. Intente reiniciar su navegador y volver a abrir el contenido.",
+    "list": "Lista de datos",
+    "login": {
+      "emptypwd": "Lista de Datos",
+      "emptyusername": "La contraseña no puede estar vacía.",
+      "mark": "La cuenta no puede estar vacía",
+      "name": "Recordar Contraseña",
+      "pwd": "¡Por favor, ingrese la contraseña!",
+      "title": "Por favor, ingrese su contraseña.",
+      "username": "Iniciar sesión en Multi-integración"
+    },
+    "ok": "Entiendo",
+    "other": "Otro",
+    "placPWD": "¡Por favor, ingrese la contraseña!",
+    "placeInput": "Por favor, ingrese",
+    "placeSelect": "Por favor, seleccione",
+    "pwdErr": "Contraseña incorrecta, por favor intente nuevamente.",
+    "quit": "Salir",
+    "refresh": "Actualizar",
+    "rename": "Renombrar",
+    "retract": "Contraer",
+    "save": "Guardar",
+    "search": "Buscar",
+    "selectAll": "Seleccionar Todo",
+    "serviceErr": "Ocurrió un error con el servicio. Por favor, intente nuevamente más tarde.",
+    "setting": "Configuración",
+    "showSetting": "Configuración de Pantalla",
+    "tip": "Aviso",
+    "tranCropImg": "Por favor, suba la imagen recortada.",
+    "unSaveMsg": "Tiene cambios sin guardar. ¿Está seguro de que desea salir?",
+    "unSearch": "No se encontraron resultados",
+    "unSearchData": "No se encontraron resultados de búsqueda",
+    "unSelect": "No hay opciones disponibles",
+    "undata": "Sin resultados",
+    "upload": {
+      "accErr": "Error de formato",
+      "accSuperErr": "Solo admite archivos en formato {accept}.",
+      "accept": "Admite formatos {accept},",
+      "conAdd": "Continuar agregando",
+      "lenErr": "¡Solo se admite un máximo de {maxLen} archivos!",
+      "maxLen": "El número no debe exceder {maxLen}",
+      "maxSize": "Tamaño máximo {sizeStr}.",
+      "name1": "Subir",
+      "normalizeScale": "Relación ancho-altura {scale}",
+      "place1": "Subir archivo",
+      "previewErr": "¡Error al cargar la vista previa!",
+      "rep": "Reemplazar",
+      "scaleErr": "La parte escalada de {name} no es {scale}",
+      "sizeErr": "El tamaño de {name} excede {sizeStr}"
+    },
+    "viewPWD": "Contraseña de acceso",
+    "上传失败,请检查文件格式。": "Subida fallida: Verifique el formato del archivo.",
+    "其他": "Otro",
+    "其它物证(痕迹物证)": "Otra Evidencia de Rastro",
+    "动画模型": "Modelo de Animación",
+    "图片缺失": "Sin Imagen",
+    "尸体": "Cadáver",
+    "工具痕迹": "Marcas de Herramientas",
+    "手印痕迹": "Marcas de Palma",
+    "提取物品": "Extraer Elementos",
+    "文件格式错误": "Formato de Archivo No Válido",
+    "文检物证": "Evidencia Documental Forense",
+    "枪弹痕迹": "Marcas Balísticas",
+    "毒化物证": "Evidencia Tóxica",
+    "特殊物证": "Evidencia Especial",
+    "理化物证": "Evidencia Física y Química",
+    "生物物证": "Evidencia Biológica",
+    "电子物证": "Evidencia Electrónica",
+    "痕迹物证": "Evidencia de Rastro",
+    "视听物证": "Evidencia Audiovisual",
+    "足迹痕迹": "Marcas de Huella",
+    "高德影像地图": "Mapa de Imágenes Amap",
+    "高德矢量地图": "Mapa Vectorial Amap"
+  },
+  "tagging": {
+    "apply": "Aplicar a todos",
+    "applyConfirm": "¿Está seguro de que desea aplicar este atributo a todas las ubicaciones?",
+    "list": "Lista de etiquetas",
+    "media": "Imagen/Video",
+    "mic": "Música",
+    "micPlc": "Admite formatos mp3/wav, ≤ 30MB",
+    "name": "Etiqueta",
+    "plcMedia1": "Admite formatos JPG, PNG, MP4 y otros, con un tamaño de archivo único que no exceda 100MB, y un máximo de 10 archivos permitidos para cargar.",
+    "plcMethod": "Método de extracción:",
+    "plcPart": "Área residual:",
+    "plcPos": "Ubicación de colocación",
+    "plcPrincipal": "Extractor:",
+    "plcTitle": "Por favor, ingrese el título de la etiqueta",
+    "plcType": "Descripción:",
+    "plcType1": "Descripción de características:",
+    "pleMedia": "Subir imagen/video",
+    "pos": "Colocar",
+    "posErr": "No se puede agregar la ubicación actual",
+    "posName": "Ubicación",
+    "posTabs": {
+      "fontSize": "Tamaño de fuente",
+      "globalVisibility": "Todo el rango visible",
+      "lineHeight": "Altura del cable",
+      "rotation": "Rotar icono",
+      "scale": "Tamaño del icono",
+      "type": "Método de colocación del icono",
+      "typeVal0": "Flotar",
+      "typeVal1": "Adjuntar",
+      "visibilityRange": "Rango visible"
+    },
+    "posTip": "Haga clic en el modelo para seleccionar la posición de la etiqueta.",
+    "style": "Estilo del icono",
+    "styleErr": "¡Por favor, seleccione un estilo de icono!",
+    "taStatus": {
+      "END": "Inspección Completada",
+      "ING": "Bajo Inspección",
+      "UN": "No Inspeccionado"
+    },
+    "tabs": {
+      "method": "Método de Extracción",
+      "part": "Área residual",
+      "principal": "Extractor",
+      "typeId": "Descripción de características"
+    },
+    "titleErr": "¡Se requiere el título de la etiqueta!",
+    "titleErr1": "¡La longitud del título debe estar dentro de 15 caracteres!",
+    "titleFex": "Título fijado",
+    "type": {
+      "1": "Rastro",
+      "2": "Palma",
+      "3": "Huella",
+      "4": "Mancha de sangre",
+      "5": "Cuerpo",
+      "6": "Otro",
+      "7": "Evidencia"
+    }
+  },
+  "view": {
+    "all": "Todas las vistas",
+    "defName": "Vista{num}",
+    "name": "Extracción",
+    "nameErr": "El nombre de la vista no puede estar vacío",
+    "vName": "Vista"
+  }
+}

+ 530 - 0
src/lang/locales/fr.json

@@ -0,0 +1,530 @@
+{
+  "am": {
+    "actions": {
+      "Climb": "Rampant",
+      "FallBackward": "Tomber en arrière",
+      "FallForward": "Tomber en avant",
+      "JumpDown": "Sauter vers le bas",
+      "JumpUp": "Sauter vers le haut",
+      "Run": "Courir",
+      "TurnLeft": "Tourner à gauche",
+      "TurnRight": "Tourner à droite",
+      "Walk": "Marcher"
+    },
+    "ammodel": {
+      "am": {
+        "a_idel": "Se tenir debout",
+        "actionk": "Bibliothèque d'Actions",
+        "crawling": "Rampant",
+        "death_from_back_headshot": "Tomber en avant",
+        "drunk_walk": "Marche d'ivrogne",
+        "dying": "Tomber en avant et mourir",
+        "end_bicycle_sit_up": "Allongé : Se lever",
+        "fist_pump": "S'asseoir",
+        "frame": "Ajouter des Images",
+        "head_hit": "Coup à la Tête",
+        "hit_on_legs": "Tomber en arrière",
+        "illegal_knee": "Genou Gauche",
+        "left_turn_wbriefcase": "Tourner à gauche",
+        "medium_hit_to_head": "Être frappé",
+        "mma_kick": "Coup de Pied Avant Droit",
+        "name": "Animation",
+        "path": "Trajectoire",
+        "peone_forward": "Rampant vers l'avant",
+        "running": "Course standard",
+        "selectpath": "Sélectionner une Trajectoire",
+        "selectpathtip": "Veuillez sélectionner une trajectoire",
+        "sit_to_stand": "Assis : Se lever",
+        "sitting": "Assise standard",
+        "standard_walk": "Marche standard",
+        "standing_jump": "Saut vers le haut standard",
+        "start_walking": "Commencer à marcher",
+        "subtitle": "Sous-titres",
+        "wall_crash": "Lâcher prise et tomber"
+      },
+      "fontsize": "Taille de Police",
+      "globalVisibility": "Plage Complète Visible",
+      "name": "Nom",
+      "nameShow": "Afficher le Nom",
+      "nameplace": "Veuillez entrer le nom",
+      "range": "Plage Visible"
+    },
+    "applyAllConfirm": "Êtes-vous sûr de vouloir appliquer cet attribut à tous les modèles animés ?",
+    "empty": "Aucune animation ajoutée",
+    "eqtimeTip": "Ne pas ajouter de manière répétée en même temps",
+    "list": "Liste des Données",
+    "model": "Modèle",
+    "move": "Déplacer ici",
+    "name": "Modèle Animé",
+    "name1": "Animation",
+    "path": {
+      "dur": "Durée",
+      "list": "Liste des Trajectoires",
+      "name": "Trajectoire",
+      "nameplace": "Veuillez entrer le nom",
+      "pathtip": "Veuillez sélectionner une trajectoire",
+      "reverse": "Point d'Arrivée Inverse",
+      "title": "Définir la Trajectoire"
+    },
+    "setting": {
+      "amplitude": "Amplitude",
+      "dur": "Durée",
+      "duration": "Durée",
+      "name": "Nom",
+      "nameplace": "Veuillez entrer le nom",
+      "speed": "Vitesse",
+      "title": "Définir l'Animation"
+    },
+    "subtitle": {
+      "color": "Couleur d'Arrière-plan",
+      "content": "Sous-titre",
+      "contentplace": "Veuillez entrer le sous-titre",
+      "dur": "Affichage à l'Écran",
+      "name": "Nom",
+      "nameplace": "Veuillez entrer le nom",
+      "title": "Définir le Sous-titre"
+    },
+    "tabs": {
+      "actions": "Action",
+      "paths": "Trajectoire",
+      "subtitles": "Sous-titre"
+    }
+  },
+  "common": {
+    "NoFilesSelected": "Aucun fichier sélectionné"
+  },
+  "coord": {
+    "zoomLevel": "Niveau de Zoom"
+  },
+  "floder": {
+    "extractList": "Liste d'Extraction",
+    "name": "Dossier du cas",
+    "photo": "Rouleau de photos",
+    "record": "Registre d'Inspection"
+  },
+  "fuse": {
+    "dataQue": "Source des données",
+    "dataSize": "Taille des données",
+    "dataTime": "Heure de Capture",
+    "def": "Restaurer par défaut",
+    "defConfirm": "Êtes-vous sûr de vouloir restaurer les paramètres par défaut ? Cette action est irréversible.",
+    "flip": "Tourner",
+    "hre": "Veuillez ajuster la position verticale dans la fenêtre actuelle.",
+    "join": "Assemblage",
+    "label": "Fusionner la scène",
+    "len": "Longueur",
+    "localUpload": "Téléchargement Local",
+    "model": "Modèle 3D",
+    "modelUpload": {
+      "desc0": "OSGB : ≤ 2 Go. Télécharger en ZIP. Inclure uniquement le dossier Data et le fichier XML. Pas de sous-dossiers. Utiliser des noms de fichiers ASCII.",
+      "desc1": "Prend en charge les nuages de points PLY et LAS (≤2 Go recommandés). Les fichiers OBJ doivent faire ≤100 Mo et être téléchargés sous forme de ZIP contenant uniquement le fichier OBJ, les textures et le fichier MTL, sans sous-dossiers ; utiliser des noms de fichiers ASCII.",
+      "title0": "Téléchargement OSGB",
+      "title1": "Exigences de Téléchargement pour d'Autres Modèles"
+    },
+    "move": "Déplacer",
+    "name": "Multi-convergence",
+    "opacity": "Opacité du modèle",
+    "opacity1": "Transparence",
+    "pano": "Panorama",
+    "reSelect": "Resélectionner les points",
+    "registration": "Enregistrement",
+    "repScale": "Mise à l'échelle uniforme",
+    "scale": "Échelle",
+    "selectTip": "Veuillez sélectionner deux points pour marquer une longueur connue, et entrer la longueur réelle",
+    "setScale": "Définir l'échelle",
+    "sync": "Inspection simultanée à l'écran",
+    "syncErr": "La visualisation des propriétés n'est prise en charge que pour les scènes de type {types}. Veuillez ajouter ce type de scène.",
+    "unModel": "Le modèle n'existe pas !",
+    "vre": "Veuillez ajuster la position horizontale dans la fenêtre actuelle."
+  },
+  "guide": {
+    "defTitle": "Visite",
+    "guide": {
+      "activeam": "Activer",
+      "activeclose": "Animation Désactivée",
+      "activetip": "Animation Activée. Veuillez ajouter au moins 2 perspectives.",
+      "add": "Ajouter un point de vue",
+      "clear": "Effacer la vue",
+      "clearConfirm": "Êtes-vous sûr de vouloir effacer la vue ?",
+      "delConfirm": "Êtes-vous sûr de vouloir supprimer cette vue ?",
+      "list": "Liste des Visites",
+      "name": "Visite",
+      "time": "Durée de la vidéo",
+      "unItems": "Impossible de sauvegarder un guide de visite avec un chemin vide !",
+      "unactiveam": "Fermer",
+      "undata": "Navigation non disponible"
+    },
+    "guideName": "Visite ({count})",
+    "modelErr": "Le modèle où se trouve le chemin a été supprimé et ne peut pas être lu.",
+    "name": "Visite",
+    "nameErr": "Le nom du chemin ne peut pas être vide",
+    "pErr": "Le nombre de points du chemin ne peut pas être inférieur à deux.",
+    "path": {
+      "applyConfirm": "Êtes-vous sûr de vouloir appliquer cet attribut à tous les emplacements ?",
+      "fontSize": "Taille de police",
+      "globalVisibility": "Toute la plage visible",
+      "lineColor": "Couleur du chemin",
+      "lineWidth": "Épaisseur du chemin",
+      "name": "Itinéraire",
+      "pointDesc": "Description",
+      "pointTitle": "Modifier le point",
+      "preview": "Prévisualiser le chemin",
+      "reverseDirection": "Flèche inversée",
+      "showDirection": "Flèche de chemin",
+      "stop": "Arrêter",
+      "title": "Nom du chemin",
+      "visibilityRange": "Plage visible"
+    },
+    "pathName": "Itinéraire ({count})"
+  },
+  "material": {
+    "name": "Médiathèque",
+    "search": "Rechercher par nom",
+    "selectCount": "Données sélectionnées",
+    "selectErr": "Un maximum de {count} éléments peuvent être sélectionnés",
+    "tabs": {
+      "action": "Opération",
+      "format": "Format",
+      "group": "Groupe",
+      "name": "Nom",
+      "size": "Taille",
+      "status": "Statut"
+    },
+    "up": "Télécharger depuis la Médiathèque",
+    "uploadErr": "Échec du téléchargement",
+    "uploadIng": "Téléchargement en cours...",
+    "uploadSuccess": "Téléchargement réussi"
+  },
+  "measure": {
+    "area": {
+      "desc": "Zone",
+      "unit": "Zone"
+    },
+    "free": {
+      "desc": "Libre",
+      "unit": "Longueur"
+    },
+    "list": "Liste de mesures",
+    "name": "Mesurer",
+    "nameErr": "Le nom de la mesure ne peut pas être vide",
+    "vertical": {
+      "desc": "Vertical",
+      "unit": "Longueur"
+    }
+  },
+  "mediaLibrary": {
+    "file": "fichier",
+    "setGrouping": "Modifier le Groupement",
+    "tips": {
+      "osgbtips": "Upload osgb : Vous devez utiliser un package zip pour télécharger. Contient des dossiers Data et des fichiers xml. Le package ne doit pas contenir de dossiers, et le nom du fichier ne doit pas utiliser le chinois. Comme montré sur la figure :",
+      "uplooadSize": "Les fichiers téléchargés ne peuvent pas dépasser 2 Go !"
+    }
+  },
+  "motior": {
+    "error": "Impossible de voir le moniteur. Veuillez vérifier si le réseau est normal.",
+    "list": "Liste des Moniteurs",
+    "name": "Moniteur Intérieur"
+  },
+  "path": {
+    "name": "Trajectoire",
+    "name1": "Itinéraire"
+  },
+  "program": {
+    "case": {
+      "add_case": "Nouveau Cas",
+      "create": "Créer un dossier de cas",
+      "empty": "Aucun projet disponible",
+      "status_1": "Calcul échoué",
+      "status_3": "Archiver",
+      "status_5": "Pause",
+      "status_6": "En file d'attente",
+      "status_7": "Copie en cours..."
+    },
+    "errMsg": {
+      "repeatGen": "Il y a une tâche de calcul, veuillez attendre que le calcul soit terminé avant de télécharger le package hors ligne. Évitez l'échec de l'emballage."
+    },
+    "exit-msg": "Même après avoir fermé la page, le programme continuera de fonctionner en arrière-plan. Si vous devez quitter le programme, veuillez le faire depuis la barre des tâches système.",
+    "kankan": "Minion",
+    "lang": "Multilingue",
+    "laser": "Méga",
+    "menu": {
+      "library": "Médiathèque"
+    },
+    "path_no_exist": "Le chemin n'existe pas.",
+    "scene": {
+      "calcDone": "Heure d'Achèvement du Calcul"
+    },
+    "sceneDetail": {
+      "exportingOut": "Exportation en cours...",
+      "firstPacking": "Emballage",
+      "import": "Importer",
+      "isCopyExist": "La scène existe déjà. Voulez-vous l'enregistrer comme une copie ?",
+      "migrageS_title": "Migrer la scène",
+      "reFirstPacking": "Reconditionné",
+      "stoping": "Pause",
+      "updateAt": "Mise à jour à"
+    },
+    "sceneDown": {
+      "coverStatus": {
+        "un": "À calculer"
+      },
+      "msgStatus": {
+        "ing": "Pause",
+        "lineup": "Continuer le calcul"
+      }
+    },
+    "shenguang": "Méta"
+  },
+  "record": {
+    "backHandler": "Le backend est en cours de traitement.",
+    "con": "Continuer l'enregistrement",
+    "defName": "Vidéo tutoriel {num}",
+    "delConfirm": "Êtes-vous sûr de vouloir supprimer cette vidéo ?",
+    "list": "Toutes les vidéos",
+    "merge": "Fusionner les vidéos",
+    "name": "Enregistrement d'écran",
+    "nameErr": "Le nom de la vidéo ne peut pas être vide",
+    "sizeErr": "La limite de taille a été dépassée et l'enregistrement ne peut pas continuer. Vous pouvez enregistrer et reprendre l'enregistrement !",
+    "start": "Démarrer l'enregistrement",
+    "tag": "Étiquette",
+    "vName": "Enregistrement d'écran"
+  },
+  "resCode": {
+    "0": "Demande réussie",
+    "4008": "le jeton a expiré",
+    "4010": "Vous n'avez pas l'autorisation d'accès",
+    "40110": "Vous n'avez pas l'autorisation d'édition",
+    "40111": "Vous n'avez pas l'autorisation d'accès"
+  },
+  "scene": {
+    "add": "Ajouter une scène",
+    "list": "Liste des scènes",
+    "manage": "Gestion des scènes",
+    "tabs": {
+      "createTime": "Heure de Capture/Création",
+      "name": "Nom",
+      "type": "Type"
+    },
+    "typeRaws": {
+      "0": "Scène de Maillage",
+      "1": "Scène de Maillage",
+      "2": "Scène de nuage de points",
+      "4": "Scène de Maillage",
+      "5": "Scène de nuage de points",
+      "6": "Scène de Maillage",
+      "7": "Scène de Maillage"
+    },
+    "types": {
+      "0": "4DKanKan Pro/Maillage",
+      "1": "4DKanKan Minion/Maillage",
+      "2": "4DKanKan Mega/Nuage de points",
+      "3": "Médiathèque",
+      "4": "4DKanKan Mega/Maillage",
+      "5": "4DKanKan Meta/Nuage de points",
+      "6": "4DKanKan Meta/Maillage",
+      "7": "Panox/Maillage"
+    }
+  },
+  "sceneHome": {
+    "nameSearch": "Rechercher par nom",
+    "searchData": "Résultats de la recherche",
+    "selectAdd": "Sélectionner l'Adresse",
+    "yctips": "Impossible de supprimer. La scène a été ajoutée à la multi-fusion. Veuillez supprimer la scène de la multi-fusion avant de réessayer.",
+    "yctipsErr": "Impossible de supprimer. La scène a été ajoutée à la multi-fusion. Veuillez supprimer la scène de la multi-fusion avant de réessayer."
+  },
+  "security": {
+    "name": "Sécurité"
+  },
+  "setting": {
+    "back": "Définir le ciel",
+    "backs0": "N/A",
+    "backs1": "Carte",
+    "backs2": "Ciel bleu et nuages blancs",
+    "backs3": "Nuageux",
+    "backs4": "Ciel nocturne",
+    "backs5": "Soir",
+    "initView": "Écran Initial",
+    "name": "Paramètre",
+    "name1": "Nom",
+    "name1tip": "Le titre ne peut pas être vide."
+  },
+  "sys": {
+    "404Page": "La ressource n'existe pas ou a été supprimée",
+    "BrowserJY": "Il est recommandé d'utiliser les navigateurs suivants :",
+    "BrowserLow": "Impossible d'ouvrir la page. Veuillez mettre à niveau ou changer de navigateur et réessayer.",
+    "add": "Ajouter",
+    "addData": "Ajouter des données",
+    "address": "Adresse",
+    "all": "Tous",
+    "camera0": "Panox/Maillage",
+    "camera1": "4DKankan Minion/Maillage",
+    "camera2": "4DKankan Mega/Nuage de Points",
+    "camera3": "Téléchargement Local",
+    "camera4": "4DKankan Mega/Maillage",
+    "camera5": "4DKankan Meta/Nuage de Points",
+    "camera6": "4DKankan Meta/Maillage",
+    "camera7": "Panox",
+    "cancel": "Annuler",
+    "caseTitle": "Cas",
+    "copy": "Copier",
+    "create": "Créer",
+    "crop": "Rogner",
+    "cropIng": "Rognage en cours",
+    "del": "Supprimer",
+    "delConfrm": "Êtes-vous sûr de vouloir supprimer ces données ?",
+    "download": "Télécharger",
+    "edit": "Modifier",
+    "enter": "Confirmer",
+    "errPage": "Page d'erreur",
+    "expand": "Développer",
+    "ga": {
+      "camera0": "Panox/Maillage",
+      "camera1": "4DKankan Minion/Maillage",
+      "camera2": "4DKankan Mega/Nuage de Points",
+      "camera3": "Téléchargement Local",
+      "camera4": "4DKankan Mega/Maillage",
+      "camera5": "4DKankan Meta/Nuage de Points",
+      "camera6": "4DKankan Meta/Maillage"
+    },
+    "imgLoadErr": "Échec du chargement de l'image",
+    "import": "Importer",
+    "jsError": "Mémoire insuffisante. Veuillez éviter d'ouvrir plusieurs pages ou applications simultanément. Essayez de redémarrer votre navigateur et de rouvrir le contenu.",
+    "list": "Liste de données",
+    "login": {
+      "emptypwd": "Liste des Données",
+      "emptyusername": "Le mot de passe ne peut pas être vide.",
+      "mark": "Le compte ne peut pas être vide",
+      "name": "Se souvenir du Mot de passe",
+      "pwd": "Veuillez entrer le mot de passe !",
+      "title": "Veuillez entrer votre mot de passe.",
+      "username": "Se connecter à la Multi-intégration"
+    },
+    "ok": "Je comprends",
+    "other": "Autre",
+    "placPWD": "Veuillez entrer le mot de passe !",
+    "placeInput": "Veuillez entrer",
+    "placeSelect": "Veuillez sélectionner",
+    "pwdErr": "Mot de passe incorrect, veuillez réessayer.",
+    "quit": "Quitter",
+    "refresh": "Actualiser",
+    "rename": "Renommer",
+    "retract": "Réduire",
+    "save": "Enregistrer",
+    "search": "Rechercher",
+    "selectAll": "Tout sélectionner",
+    "serviceErr": "Une erreur s'est produite avec le service. Veuillez réessayer plus tard.",
+    "setting": "Paramètres",
+    "showSetting": "Paramètres d'Affichage",
+    "tip": "Invite",
+    "tranCropImg": "Veuillez télécharger l'image rognée.",
+    "unSaveMsg": "Vous avez des modifications non enregistrées. Êtes-vous sûr de vouloir quitter ?",
+    "unSearch": "Aucun résultat trouvé",
+    "unSearchData": "Aucun résultat de recherche trouvé",
+    "unSelect": "Aucune option disponible",
+    "undata": "Aucun résultat",
+    "upload": {
+      "accErr": "Erreur de format",
+      "accSuperErr": "Prend uniquement en charge les fichiers au format {accept}.",
+      "accept": "Prend en charge les formats {accept},",
+      "conAdd": "Continuer à ajouter",
+      "lenErr": "Seul un maximum de {maxLen} fichiers est pris en charge !",
+      "maxLen": "Le nombre ne doit pas dépasser {maxLen}",
+      "maxSize": "Taille maximale {sizeStr}.",
+      "name1": "Télécharger",
+      "normalizeScale": "Ratio largeur-hauteur {scale}",
+      "place1": "Télécharger le fichier",
+      "previewErr": "Échec du chargement de l'aperçu !",
+      "rep": "Remplacer",
+      "scaleErr": "La partie mise à l'échelle de {name} n'est pas {scale}",
+      "sizeErr": "La taille de {name} dépasse {sizeStr}"
+    },
+    "viewPWD": "Mot de passe d'accès",
+    "上传失败,请检查文件格式。": "Échec du téléchargement : Vérifiez le format du fichier.",
+    "其他": "Autre",
+    "其它物证(痕迹物证)": "Autre Preuve de Traces",
+    "动画模型": "Modèle d'Animation",
+    "图片缺失": "Pas d'Image",
+    "尸体": "Cadavre",
+    "工具痕迹": "Marques d'Outils",
+    "手印痕迹": "Marques d'Empreintes de Main",
+    "提取物品": "Extraire des Éléments",
+    "文件格式错误": "Format de Fichier Invalide",
+    "文检物证": "Preuve Documentaire Médico-légale",
+    "枪弹痕迹": "Marques Balistiques",
+    "毒化物证": "Preuve Toxique",
+    "特殊物证": "Preuve Spéciale",
+    "理化物证": "Preuve Physique et Chimique",
+    "生物物证": "Preuve Biologique",
+    "电子物证": "Preuve Électronique",
+    "痕迹物证": "Preuve de Traces",
+    "视听物证": "Preuve Audiovisuelle",
+    "足迹痕迹": "Marques d'Empreintes de Pied",
+    "高德影像地图": "Carte d'Images Amap",
+    "高德矢量地图": "Carte Vectorielle Amap"
+  },
+  "tagging": {
+    "apply": "Appliquer à tous",
+    "applyConfirm": "Êtes-vous sûr de vouloir appliquer cet attribut à tous les emplacements ?",
+    "list": "Liste d'étiquettes",
+    "media": "Image/Vidéo",
+    "mic": "Musique",
+    "micPlc": "Prend en charge les formats mp3/wav, ≤ 30 Mo",
+    "name": "Étiquette",
+    "plcMedia1": "Prend en charge les formats JPG, PNG, MP4 et autres, avec une taille de fichier unique ne dépassant pas 100 Mo, et un maximum de 10 fichiers autorisés pour le téléchargement.",
+    "plcMethod": "Méthode d'extraction :",
+    "plcPart": "Zone résiduelle :",
+    "plcPos": "Emplacement de placement",
+    "plcPrincipal": "Extracteur :",
+    "plcTitle": "Veuillez entrer le titre de l'étiquette",
+    "plcType": "Description :",
+    "plcType1": "Description des caractéristiques :",
+    "pleMedia": "Télécharger image/vidéo",
+    "pos": "Placer",
+    "posErr": "Impossible d'ajouter l'emplacement actuel",
+    "posName": "Emplacement",
+    "posTabs": {
+      "fontSize": "Taille de police",
+      "globalVisibility": "Toute la plage visible",
+      "lineHeight": "Hauteur du fil",
+      "rotation": "Tourner l'icône",
+      "scale": "Taille de l'icône",
+      "type": "Méthode de placement de l'icône",
+      "typeVal0": "Survoler",
+      "typeVal1": "Attacher",
+      "visibilityRange": "Plage visible"
+    },
+    "posTip": "Cliquez sur le modèle pour sélectionner la position de l'étiquette.",
+    "style": "Style de l'icône",
+    "styleErr": "Veuillez sélectionner un style d'icône !",
+    "taStatus": {
+      "END": "Inspection Terminée",
+      "ING": "Sous Inspection",
+      "UN": "Non Inspecté"
+    },
+    "tabs": {
+      "method": "Méthode d'Extraction",
+      "part": "Zone résiduelle",
+      "principal": "Extracteur",
+      "typeId": "Description des caractéristiques"
+    },
+    "titleErr": "Le titre de l'étiquette est requis !",
+    "titleErr1": "La longueur du titre doit être inférieure à 15 caractères !",
+    "titleFex": "Titre épinglé",
+    "type": {
+      "1": "Trace",
+      "2": "Empreinte de main",
+      "3": "Empreinte de pied",
+      "4": "Tache de sang",
+      "5": "Corps",
+      "6": "Autre",
+      "7": "Preuve"
+    }
+  },
+  "view": {
+    "all": "Toutes les vues",
+    "defName": "Vue{num}",
+    "name": "Extraction",
+    "nameErr": "Le nom de la vue ne peut pas être vide",
+    "vName": "Vue"
+  }
+}

+ 530 - 0
src/lang/locales/pt.json

@@ -0,0 +1,530 @@
+{
+  "am": {
+    "actions": {
+      "Climb": "Rastejar",
+      "FallBackward": "Cair para trás",
+      "FallForward": "Cair para frente",
+      "JumpDown": "Pular para baixo",
+      "JumpUp": "Pular para cima",
+      "Run": "Correr",
+      "TurnLeft": "Virar à esquerda",
+      "TurnRight": "Virar à direita",
+      "Walk": "Caminhar"
+    },
+    "ammodel": {
+      "am": {
+        "a_idel": "Ficar de pé",
+        "actionk": "Biblioteca de Ações",
+        "crawling": "Rastejar",
+        "death_from_back_headshot": "Cair para frente",
+        "drunk_walk": "Andar bêbado",
+        "dying": "Cair para frente e morrer",
+        "end_bicycle_sit_up": "Deitado: Levantar",
+        "fist_pump": "Sentar",
+        "frame": "Adicionar Quadros",
+        "head_hit": "Golpe na Cabeça",
+        "hit_on_legs": "Cair para trás",
+        "illegal_knee": "Joelho Esquerdo",
+        "left_turn_wbriefcase": "Virar à esquerda",
+        "medium_hit_to_head": "Ser atingido",
+        "mma_kick": "Chute Frontal Direito",
+        "name": "Animação",
+        "path": "Trajetória",
+        "peone_forward": "Rastejar para frente",
+        "running": "Corrida Padrão",
+        "selectpath": "Selecionar Trajetória",
+        "selectpathtip": "Por favor, selecione uma trajetória",
+        "sit_to_stand": "Sentado: Ficar de pé",
+        "sitting": "Sentar Padrão",
+        "standard_walk": "Caminhada Padrão",
+        "standing_jump": "Pulo para Cima Padrão",
+        "start_walking": "Começar a Caminhar",
+        "subtitle": "Legendas",
+        "wall_crash": "Soltar e Cair"
+      },
+      "fontsize": "Tamanho da Fonte",
+      "globalVisibility": "Faixa Completa Visível",
+      "name": "Nome",
+      "nameShow": "Exibir Nome",
+      "nameplace": "Por favor, insira o nome",
+      "range": "Faixa Visível"
+    },
+    "applyAllConfirm": "Tem certeza de que deseja aplicar este atributo a todos os modelos animados?",
+    "empty": "Nenhuma Animação Adicionada",
+    "eqtimeTip": "Não adicione repetidamente ao mesmo tempo",
+    "list": "Lista de Dados",
+    "model": "Modelo",
+    "move": "Mover para Aqui",
+    "name": "Modelo Animado",
+    "name1": "Animação",
+    "path": {
+      "dur": "Duração",
+      "list": "Lista de Trajetórias",
+      "name": "Trajetória",
+      "nameplace": "Por favor, insira o nome",
+      "pathtip": "Por favor, selecione uma trajetória",
+      "reverse": "Ponto Final Reverso",
+      "title": "Definir Trajetória"
+    },
+    "setting": {
+      "amplitude": "Amplitude",
+      "dur": "Duração",
+      "duration": "Duração",
+      "name": "Nome",
+      "nameplace": "Por favor, insira o nome",
+      "speed": "Velocidade",
+      "title": "Definir Animação"
+    },
+    "subtitle": {
+      "color": "Cor de Fundo",
+      "content": "Legenda",
+      "contentplace": "Por favor, insira a legenda",
+      "dur": "Permanência na Tela",
+      "name": "Nome",
+      "nameplace": "Por favor, insira o nome",
+      "title": "Definir Legenda"
+    },
+    "tabs": {
+      "actions": "Ação",
+      "paths": "Trajetória",
+      "subtitles": "Legenda"
+    }
+  },
+  "common": {
+    "NoFilesSelected": "Nenhum arquivo selecionado"
+  },
+  "coord": {
+    "zoomLevel": "Nível de Zoom"
+  },
+  "floder": {
+    "extractList": "Lista de Extração",
+    "name": "Arquivo do caso",
+    "photo": "Rolo de fotos",
+    "record": "Registro de Inspeção"
+  },
+  "fuse": {
+    "dataQue": "Fonte de Dados",
+    "dataSize": "Tamanho dos Dados",
+    "dataTime": "Hora da Captura",
+    "def": "Restaurar padrão",
+    "defConfirm": "Tem certeza de que deseja restaurar o padrão? Esta ação não pode ser desfeita.",
+    "flip": "Girar",
+    "hre": "Por favor, ajuste a posição vertical dentro da janela atual.",
+    "join": "Emenda",
+    "label": "Mesclar cena",
+    "len": "Comprimento",
+    "localUpload": "Upload Local",
+    "model": "Modelo 3D",
+    "modelUpload": {
+      "desc0": "OSGB: ≤ 2 GB. Enviar como ZIP. Incluir apenas pasta Data e arquivo XML. Sem subpastas. Usar nomes de arquivo ASCII.",
+      "desc1": "Suporta nuvens de pontos PLY e LAS (≤2 GB recomendado). Arquivos OBJ devem ser ≤100 MB e enviados como ZIP contendo apenas o arquivo OBJ, texturas e arquivo MTL, sem subpastas; use nomes de arquivo ASCII.",
+      "title0": "Upload de OSGB",
+      "title1": "Requisitos de Upload para Outros Modelos"
+    },
+    "move": "Mover",
+    "name": "Multi-convergência",
+    "opacity": "Opacidade do modelo",
+    "opacity1": "Transparência",
+    "pano": "Panorama",
+    "reSelect": "Reselecionar pontos",
+    "registration": "Registro",
+    "repScale": "Escalonamento uniforme",
+    "scale": "Escala",
+    "selectTip": "Por favor, selecione dois pontos para marcar um comprimento conhecido e insira o comprimento real",
+    "setScale": "Definir escala",
+    "sync": "Inspeção simultânea na tela",
+    "syncErr": "A visualização de propriedades é suportada apenas para cenas do tipo {types}. Por favor, adicione este tipo de cena.",
+    "unModel": "Modelo não existe!",
+    "vre": "Por favor, ajuste a posição horizontal dentro da janela atual."
+  },
+  "guide": {
+    "defTitle": "Passeio",
+    "guide": {
+      "activeam": "Ativar",
+      "activeclose": "Animação Desativada",
+      "activetip": "Animação Ativada. Por favor, adicione pelo menos 2 perspectivas.",
+      "add": "Adicionar ponto de vista",
+      "clear": "Limpar a vista",
+      "clearConfirm": "Tem certeza de que deseja limpar a vista?",
+      "delConfirm": "Tem certeza de que deseja excluir esta vista?",
+      "list": "Lista de Passeios",
+      "name": "Passeio",
+      "time": "Duração do vídeo",
+      "unItems": "Incapaz de salvar passeio guiado por caminho vazio!",
+      "unactiveam": "Fechar",
+      "undata": "Navegação não disponível"
+    },
+    "guideName": "Passeio ({count})",
+    "modelErr": "O modelo onde o caminho está localizado foi excluído e não pode ser reproduzido.",
+    "name": "Passeio",
+    "nameErr": "O nome do caminho não pode estar vazio",
+    "pErr": "O número de pontos do caminho não pode ser menor que dois.",
+    "path": {
+      "applyConfirm": "Tem certeza de que deseja aplicar este atributo a todos os locais?",
+      "fontSize": "Tamanho da fonte",
+      "globalVisibility": "Toda a faixa visível",
+      "lineColor": "Cor do caminho",
+      "lineWidth": "Espessura do caminho",
+      "name": "Rota",
+      "pointDesc": "Descrição",
+      "pointTitle": "Editar ponto",
+      "preview": "Visualizar caminho",
+      "reverseDirection": "Seta reversa",
+      "showDirection": "Seta do caminho",
+      "stop": "Parar",
+      "title": "Nome do caminho",
+      "visibilityRange": "Faixa visível"
+    },
+    "pathName": "Rota ({count})"
+  },
+  "material": {
+    "name": "Biblioteca de Mídia",
+    "search": "Buscar por nome",
+    "selectCount": "Dados selecionados",
+    "selectErr": "Pode selecionar no máximo {count} itens",
+    "tabs": {
+      "action": "Operação",
+      "format": "Formato",
+      "group": "Grupo",
+      "name": "Nome",
+      "size": "Tamanho",
+      "status": "Status"
+    },
+    "up": "Fazer upload da Biblioteca de Mídia",
+    "uploadErr": "Upload falhou",
+    "uploadIng": "Enviando...",
+    "uploadSuccess": "Upload bem-sucedido"
+  },
+  "measure": {
+    "area": {
+      "desc": "Área",
+      "unit": "Área"
+    },
+    "free": {
+      "desc": "Livre",
+      "unit": "Comprimento"
+    },
+    "list": "Lista de medidas",
+    "name": "Medir",
+    "nameErr": "O nome da medida não pode estar vazio",
+    "vertical": {
+      "desc": "Vertical",
+      "unit": "Comprimento"
+    }
+  },
+  "mediaLibrary": {
+    "file": "arquivo",
+    "setGrouping": "Modificar Agrupamento",
+    "tips": {
+      "osgbtips": "Upload osgb: Você precisa usar um pacote zip para fazer upload. Contém pastas Data e arquivos xml. O pacote não deve conter pastas, e o nome do arquivo não deve usar chinês. Como mostrado na figura:",
+      "uplooadSize": "Arquivos enviados não podem exceder 2G!"
+    }
+  },
+  "motior": {
+    "error": "Não é possível visualizar o monitor. Por favor, verifique se a rede está normal.",
+    "list": "Lista de Monitores",
+    "name": "Monitor Interno"
+  },
+  "path": {
+    "name": "Trajetória",
+    "name1": "Rota"
+  },
+  "program": {
+    "case": {
+      "add_case": "Novo Caso",
+      "create": "Criar arquivo de caso",
+      "empty": "Nenhum projeto disponível",
+      "status_1": "Cálculo falhou",
+      "status_3": "Arquivar",
+      "status_5": "Pausa",
+      "status_6": "Na fila",
+      "status_7": "Copiando..."
+    },
+    "errMsg": {
+      "repeatGen": "Há uma tarefa de cálculo, por favor aguarde até que o cálculo seja concluído antes de baixar o pacote offline. Evite falhas de empacotamento."
+    },
+    "exit-msg": "Mesmo depois de fechar a página, o programa continuará em execução em segundo plano. Se precisar sair do programa, faça-o a partir da bandeja do sistema.",
+    "kankan": "Minion",
+    "lang": "Multilíngue",
+    "laser": "Mega",
+    "menu": {
+      "library": "Biblioteca de Mídia"
+    },
+    "path_no_exist": "O caminho não existe.",
+    "scene": {
+      "calcDone": "Hora de Conclusão do Cálculo"
+    },
+    "sceneDetail": {
+      "exportingOut": "Exportando...",
+      "firstPacking": "Empacotando",
+      "import": "Importar",
+      "isCopyExist": "A cena já existe. Deseja salvá-la como uma cópia?",
+      "migrageS_title": "Migrar cena",
+      "reFirstPacking": "Reembalado",
+      "stoping": "Pausa",
+      "updateAt": "Atualizando em"
+    },
+    "sceneDown": {
+      "coverStatus": {
+        "un": "A ser calculado"
+      },
+      "msgStatus": {
+        "ing": "Pausa",
+        "lineup": "Continuar calculando"
+      }
+    },
+    "shenguang": "Meta"
+  },
+  "record": {
+    "backHandler": "O backend está processando.",
+    "con": "Continuar gravando",
+    "defName": "Vídeo tutorial {num}",
+    "delConfirm": "Tem certeza de que deseja excluir este vídeo?",
+    "list": "Todos os vídeos",
+    "merge": "Mesclar vídeos",
+    "name": "Gravação de tela",
+    "nameErr": "O nome do vídeo não pode estar vazio",
+    "sizeErr": "O limite de tamanho foi excedido e a gravação não pode continuar. Você pode salvar e retomar a gravação!",
+    "start": "Iniciar gravação",
+    "tag": "Tag",
+    "vName": "Gravação de tela"
+  },
+  "resCode": {
+    "0": "Solicitação bem-sucedida",
+    "4008": "token expirou",
+    "4010": "Você não tem permissão de acesso",
+    "40110": "Você não tem permissão de edição",
+    "40111": "Você não tem permissão de acesso"
+  },
+  "scene": {
+    "add": "Adicionar cena",
+    "list": "Lista de cenas",
+    "manage": "Gerenciamento de cenas",
+    "tabs": {
+      "createTime": "Hora de Captura/Criação",
+      "name": "Nome",
+      "type": "Tipo"
+    },
+    "typeRaws": {
+      "0": "Cena de Malha",
+      "1": "Cena de Malha",
+      "2": "Cena de nuvem de pontos",
+      "4": "Cena de Malha",
+      "5": "Cena de nuvem de pontos",
+      "6": "Cena de Malha",
+      "7": "Cena de Malha"
+    },
+    "types": {
+      "0": "4DKanKan Pro/Malha",
+      "1": "4DKanKan Minion/Malha",
+      "2": "4DKanKan Mega/Nuvem de pontos",
+      "3": "Biblioteca de Mídia",
+      "4": "4DKanKan Mega/Malha",
+      "5": "4DKanKan Meta/Nuvem de pontos",
+      "6": "4DKanKan Meta/Malha",
+      "7": "Panox/Malha"
+    }
+  },
+  "sceneHome": {
+    "nameSearch": "Buscar por nome",
+    "searchData": "Resultados da pesquisa",
+    "selectAdd": "Selecionar Endereço",
+    "yctips": "Não é possível remover. A cena foi adicionada à multi-fusão. Por favor, exclua a cena da multi-fusão antes de tentar novamente.",
+    "yctipsErr": "Não é possível remover. A cena foi adicionada à multi-fusão. Por favor, exclua a cena da multi-fusão antes de tentar novamente."
+  },
+  "security": {
+    "name": "Segurança"
+  },
+  "setting": {
+    "back": "Definir céu",
+    "backs0": "N/A",
+    "backs1": "Mapa",
+    "backs2": "Céu azul e nuvens brancas",
+    "backs3": "Nublado",
+    "backs4": "Céu noturno",
+    "backs5": "Entardecer",
+    "initView": "Tela Inicial",
+    "name": "Configuração",
+    "name1": "Nome",
+    "name1tip": "O título não pode estar vazio."
+  },
+  "sys": {
+    "404Page": "O recurso não existe ou foi excluído",
+    "BrowserJY": "Recomenda-se usar os seguintes navegadores:",
+    "BrowserLow": "Não foi possível abrir a página. Atualize ou troque de navegador e tente novamente.",
+    "add": "Adicionar",
+    "addData": "Adicionar dados",
+    "address": "Endereço",
+    "all": "Todos",
+    "camera0": "Panox/Malha",
+    "camera1": "4DKankan Minion/Malha",
+    "camera2": "4DKankan Mega/Nuvem de Pontos",
+    "camera3": "Upload Local",
+    "camera4": "4DKankan Mega/Malha",
+    "camera5": "4DKankan Meta/Nuvem de Pontos",
+    "camera6": "4DKankan Meta/Malha",
+    "camera7": "Panox",
+    "cancel": "Cancelar",
+    "caseTitle": "Caso",
+    "copy": "Copiar",
+    "create": "Criar",
+    "crop": "Cortar",
+    "cropIng": "Corte em andamento",
+    "del": "Excluir",
+    "delConfrm": "Tem certeza de que deseja excluir estes dados?",
+    "download": "Download",
+    "edit": "Editar",
+    "enter": "Confirmar",
+    "errPage": "Página de erro",
+    "expand": "Expandir",
+    "ga": {
+      "camera0": "Panox/Malha",
+      "camera1": "4DKankan Minion/Malha",
+      "camera2": "4DKankan Mega/Nuvem de Pontos",
+      "camera3": "Upload Local",
+      "camera4": "4DKankan Mega/Malha",
+      "camera5": "4DKankan Meta/Nuvem de Pontos",
+      "camera6": "4DKankan Meta/Malha"
+    },
+    "imgLoadErr": "Falha ao carregar imagem",
+    "import": "Importar",
+    "jsError": "Memória insuficiente. Evite abrir várias páginas ou aplicativos simultaneamente. Tente reiniciar seu navegador e reabrir o conteúdo.",
+    "list": "Lista de dados",
+    "login": {
+      "emptypwd": "Lista de Dados",
+      "emptyusername": "A senha não pode estar vazia.",
+      "mark": "A conta não pode estar vazia",
+      "name": "Lembrar Senha",
+      "pwd": "Por favor, insira a senha!",
+      "title": "Por favor, insira sua senha.",
+      "username": "Login na Multi-integração"
+    },
+    "ok": "Eu entendo",
+    "other": "Outro",
+    "placPWD": "Por favor, insira a senha!",
+    "placeInput": "Por favor, insira",
+    "placeSelect": "Por favor, selecione",
+    "pwdErr": "Senha incorreta, por favor tente novamente.",
+    "quit": "Sair",
+    "refresh": "Atualizar",
+    "rename": "Renomear",
+    "retract": "Recolher",
+    "save": "Salvar",
+    "search": "Buscar",
+    "selectAll": "Selecionar Tudo",
+    "serviceErr": "Ocorreu um erro com o serviço. Por favor, tente novamente mais tarde.",
+    "setting": "Configurações",
+    "showSetting": "Configurações de Exibição",
+    "tip": "Prompt",
+    "tranCropImg": "Por favor, faça upload da imagem cortada.",
+    "unSaveMsg": "Você tem alterações não salvas. Tem certeza de que deseja sair?",
+    "unSearch": "Nenhum resultado encontrado",
+    "unSearchData": "Nenhum resultado de pesquisa encontrado",
+    "unSelect": "Nenhuma opção disponível",
+    "undata": "Sem resultados",
+    "upload": {
+      "accErr": "Erro de formato",
+      "accSuperErr": "Suporta apenas arquivos no formato {accept}.",
+      "accept": "Suporta formatos {accept},",
+      "conAdd": "Continuar adicionando",
+      "lenErr": "Apenas um máximo de {maxLen} arquivos são suportados!",
+      "maxLen": "O número não deve exceder {maxLen}",
+      "maxSize": "Tamanho máximo {sizeStr}.",
+      "name1": "Upload",
+      "normalizeScale": "Proporção largura-altura {scale}",
+      "place1": "Fazer upload de arquivo",
+      "previewErr": "Falha no carregamento da pré-visualização!",
+      "rep": "Substituir",
+      "scaleErr": "A parte dimensionada de {name} não é {scale}",
+      "sizeErr": "O tamanho de {name} excede {sizeStr}"
+    },
+    "viewPWD": "Senha de acesso",
+    "上传失败,请检查文件格式。": "Falha no upload: Verifique o formato do arquivo.",
+    "其他": "Outro",
+    "其它物证(痕迹物证)": "Outra Evidência de Vestígio",
+    "动画模型": "Modelo de Animação",
+    "图片缺失": "Sem Imagem",
+    "尸体": "Cadáver",
+    "工具痕迹": "Marcas de Ferramentas",
+    "手印痕迹": "Marcas de Palma da Mão",
+    "提取物品": "Extrair Itens",
+    "文件格式错误": "Formato de Arquivo Inválido",
+    "文检物证": "Evidência Documental Forense",
+    "枪弹痕迹": "Marcas Balísticas",
+    "毒化物证": "Evidência Tóxica",
+    "特殊物证": "Evidência Especial",
+    "理化物证": "Evidência Física e Química",
+    "生物物证": "Evidência Biológica",
+    "电子物证": "Evidência Eletrônica",
+    "痕迹物证": "Evidência de Vestígio",
+    "视听物证": "Evidência Audiovisual",
+    "足迹痕迹": "Marcas de Pegada",
+    "高德影像地图": "Mapa de Imagens Amap",
+    "高德矢量地图": "Mapa Vetorial Amap"
+  },
+  "tagging": {
+    "apply": "Aplicar a todos",
+    "applyConfirm": "Tem certeza de que deseja aplicar este atributo a todos os locais?",
+    "list": "Lista de tags",
+    "media": "Imagem/Vídeo",
+    "mic": "Música",
+    "micPlc": "Suporta formatos mp3/wav, ≤ 30MB",
+    "name": "Tag",
+    "plcMedia1": "Suporta formatos JPG, PNG, MP4 e outros, com um tamanho de arquivo único não excedendo 100MB, e no máximo 10 arquivos permitidos para upload.",
+    "plcMethod": "Método de extração:",
+    "plcPart": "Área residual:",
+    "plcPos": "Local de colocação",
+    "plcPrincipal": "Extrator:",
+    "plcTitle": "Por favor, insira o título da tag",
+    "plcType": "Descrição:",
+    "plcType1": "Descrição da característica:",
+    "pleMedia": "Fazer upload de imagem/vídeo",
+    "pos": "Colocar",
+    "posErr": "Não é possível adicionar o local atual",
+    "posName": "Local",
+    "posTabs": {
+      "fontSize": "Tamanho da fonte",
+      "globalVisibility": "Toda a faixa visível",
+      "lineHeight": "Altura do fio",
+      "rotation": "Girar ícone",
+      "scale": "Tamanho do ícone",
+      "type": "Método de colocação do ícone",
+      "typeVal0": "Pairar",
+      "typeVal1": "Anexar",
+      "visibilityRange": "Faixa visível"
+    },
+    "posTip": "Clique no modelo para selecionar a posição da tag.",
+    "style": "Estilo do ícone",
+    "styleErr": "Por favor, selecione um estilo de ícone!",
+    "taStatus": {
+      "END": "Inspeção Concluída",
+      "ING": "Sob Inspeção",
+      "UN": "Não Inspecionado"
+    },
+    "tabs": {
+      "method": "Método de Extração",
+      "part": "Área residual",
+      "principal": "Extrator",
+      "typeId": "Descrição da característica"
+    },
+    "titleErr": "O título da tag é obrigatório!",
+    "titleErr1": "O comprimento do título deve estar dentro de 15 caracteres!",
+    "titleFex": "Título fixado",
+    "type": {
+      "1": "Vestígio",
+      "2": "Palma da mão",
+      "3": "Pegada",
+      "4": "Mancha de sangue",
+      "5": "Corpo",
+      "6": "Outro",
+      "7": "Evidência"
+    }
+  },
+  "view": {
+    "all": "Todas as visualizações",
+    "defName": "Visualização{num}",
+    "name": "Extração",
+    "nameErr": "O nome da visualização não pode estar vazio",
+    "vName": "Visualização"
+  }
+}

+ 530 - 0
src/lang/locales/ru.json

@@ -0,0 +1,530 @@
+{
+  "am": {
+    "actions": {
+      "Climb": "Ползать",
+      "FallBackward": "Падать назад",
+      "FallForward": "Падать вперёд",
+      "JumpDown": "Прыгать вниз",
+      "JumpUp": "Прыгать вверх",
+      "Run": "Бегать",
+      "TurnLeft": "Повернуть налево",
+      "TurnRight": "Повернуть направо",
+      "Walk": "Идти"
+    },
+    "ammodel": {
+      "am": {
+        "a_idel": "Стоять",
+        "actionk": "Библиотека Действий",
+        "crawling": "Ползать",
+        "death_from_back_headshot": "Падать вперёд",
+        "drunk_walk": "Пьяная походка",
+        "dying": "Упасть вперёд и умереть",
+        "end_bicycle_sit_up": "Лежать: Встать",
+        "fist_pump": "Садиться",
+        "frame": "Добавить Кадры",
+        "head_hit": "Удар по Голове",
+        "hit_on_legs": "Падать назад",
+        "illegal_knee": "Левое Колено",
+        "left_turn_wbriefcase": "Повернуть налево",
+        "medium_hit_to_head": "Получить удар",
+        "mma_kick": "Правый Фронтальный Удар",
+        "name": "Анимация",
+        "path": "Путь",
+        "peone_forward": "Ползать вперёд",
+        "running": "Стандартный Бег",
+        "selectpath": "Выбрать Путь",
+        "selectpathtip": "Пожалуйста, выберите путь",
+        "sit_to_stand": "Сидеть: Встать",
+        "sitting": "Стандартное Сидение",
+        "standard_walk": "Стандартная Ходьба",
+        "standing_jump": "Стандартный Прыжок Вверх",
+        "start_walking": "Начать идти",
+        "subtitle": "Субтитры",
+        "wall_crash": "Отпустить и упасть"
+      },
+      "fontsize": "Размер Шрифта",
+      "globalVisibility": "Полный Диапазон Видим",
+      "name": "Имя",
+      "nameShow": "Отображать Имя",
+      "nameplace": "Пожалуйста, введите имя",
+      "range": "Видимый Диапазон"
+    },
+    "applyAllConfirm": "Вы уверены, что хотите применить этот атрибут ко всем анимированным моделям?",
+    "empty": "Анимация не добавлена",
+    "eqtimeTip": "Не добавлять повторно в одно и то же время",
+    "list": "Список Данных",
+    "model": "Модель",
+    "move": "Переместить сюда",
+    "name": "Анимированная Модель",
+    "name1": "Анимация",
+    "path": {
+      "dur": "Продолжительность",
+      "list": "Список Путей",
+      "name": "Путь",
+      "nameplace": "Пожалуйста, введите имя",
+      "pathtip": "Пожалуйста, выберите путь",
+      "reverse": "Обратная Конечная Точка",
+      "title": "Задать Путь"
+    },
+    "setting": {
+      "amplitude": "Амплитуда",
+      "dur": "Продолжительность",
+      "duration": "Продолжительность",
+      "name": "Имя",
+      "nameplace": "Пожалуйста, введите имя",
+      "speed": "Скорость",
+      "title": "Задать Анимацию"
+    },
+    "subtitle": {
+      "color": "Цвет Фона",
+      "content": "Субтитр",
+      "contentplace": "Пожалуйста, введите субтитр",
+      "dur": "Задержка на Экране",
+      "name": "Имя",
+      "nameplace": "Пожалуйста, введите имя",
+      "title": "Задать Субтитр"
+    },
+    "tabs": {
+      "actions": "Действие",
+      "paths": "Путь",
+      "subtitles": "Субтитр"
+    }
+  },
+  "common": {
+    "NoFilesSelected": "Файл не выбран"
+  },
+  "coord": {
+    "zoomLevel": "Уровень Масштабирования"
+  },
+  "floder": {
+    "extractList": "Список Извлечения",
+    "name": "Файл дела",
+    "photo": "Фотоплёнка",
+    "record": "Запись Осмотра"
+  },
+  "fuse": {
+    "dataQue": "Источник Данных",
+    "dataSize": "Размер Данных",
+    "dataTime": "Время Съёмки",
+    "def": "Восстановить по умолчанию",
+    "defConfirm": "Вы уверены, что хотите восстановить настройки по умолчанию? Это действие нельзя отменить.",
+    "flip": "Вращать",
+    "hre": "Пожалуйста, отрегулируйте вертикальное положение в пределах текущего окна.",
+    "join": "Сшивание",
+    "label": "Объединить сцену",
+    "len": "Длина",
+    "localUpload": "Локальная Загрузка",
+    "model": "3D-модель",
+    "modelUpload": {
+      "desc0": "OSGB: ≤ 2 ГБ. Загружать как ZIP. Только папка Data и XML-файл. Без подпапок. Использовать имена файлов в ASCII.",
+      "desc1": "Поддерживает облака точек PLY и LAS (рекомендуется ≤2 ГБ). Файлы OBJ должны быть ≤100 МБ и загружаться как ZIP, содержащий только файл OBJ, текстуры и файл MTL, без подпапок; использовать имена файлов в ASCII.",
+      "title0": "Загрузка OSGB",
+      "title1": "Требования к Загрузке для Других Моделей"
+    },
+    "move": "Переместить",
+    "name": "Мульти-сведение",
+    "opacity": "Непрозрачность модели",
+    "opacity1": "Прозрачность",
+    "pano": "Панорама",
+    "reSelect": "Выбрать точки заново",
+    "registration": "Регистрация",
+    "repScale": "Равномерное масштабирование",
+    "scale": "Масштаб",
+    "selectTip": "Пожалуйста, выберите две точки, чтобы отметить известную длину, и введите фактическую длину",
+    "setScale": "Задать масштаб",
+    "sync": "Одновременный осмотр на экране",
+    "syncErr": "Просмотр свойств поддерживается только для сцен типа {types}. Пожалуйста, добавьте сцену этого типа.",
+    "unModel": "Модель не существует!",
+    "vre": "Пожалуйста, отрегулируйте горизонтальное положение в пределах текущего окна."
+  },
+  "guide": {
+    "defTitle": "Тур",
+    "guide": {
+      "activeam": "Активировать",
+      "activeclose": "Анимация Отключена",
+      "activetip": "Анимация Активирована. Пожалуйста, добавьте как минимум 2 точки обзора.",
+      "add": "Добавить точку обзора",
+      "clear": "Очистить вид",
+      "clearConfirm": "Вы уверены, что хотите очистить вид?",
+      "delConfirm": "Вы уверены, что хотите удалить этот вид?",
+      "list": "Список Туров",
+      "name": "Тур",
+      "time": "Продолжительность видео",
+      "unItems": "Невозможно сохранить тур-путеводитель с пустым путём!",
+      "unactiveam": "Закрыть",
+      "undata": "Навигация недоступна"
+    },
+    "guideName": "Тур ({count})",
+    "modelErr": "Модель, в которой находится путь, была удалена, и её нельзя воспроизвести.",
+    "name": "Тур",
+    "nameErr": "Имя пути не может быть пустым",
+    "pErr": "Количество точек пути не может быть меньше двух.",
+    "path": {
+      "applyConfirm": "Вы уверены, что хотите применить этот атрибут ко всем местоположениям?",
+      "fontSize": "Размер шрифта",
+      "globalVisibility": "Весь диапазон виден",
+      "lineColor": "Цвет пути",
+      "lineWidth": "Толщина пути",
+      "name": "Маршрут",
+      "pointDesc": "Описание",
+      "pointTitle": "Редактировать точку",
+      "preview": "Предпросмотр пути",
+      "reverseDirection": "Обратная стрелка",
+      "showDirection": "Стрелка пути",
+      "stop": "Остановить",
+      "title": "Имя пути",
+      "visibilityRange": "Видимый диапазон"
+    },
+    "pathName": "Маршрут ({count})"
+  },
+  "material": {
+    "name": "Медиатека",
+    "search": "Искать по имени",
+    "selectCount": "Выбранные данные",
+    "selectErr": "Можно выбрать максимум {count} элементов",
+    "tabs": {
+      "action": "Операция",
+      "format": "Формат",
+      "group": "Группа",
+      "name": "Имя",
+      "size": "Размер",
+      "status": "Статус"
+    },
+    "up": "Загрузить из Медиатеки",
+    "uploadErr": "Ошибка загрузки",
+    "uploadIng": "Загрузка...",
+    "uploadSuccess": "Загрузка успешна"
+  },
+  "measure": {
+    "area": {
+      "desc": "Площадь",
+      "unit": "Площадь"
+    },
+    "free": {
+      "desc": "Свободно",
+      "unit": "Длина"
+    },
+    "list": "Список измерений",
+    "name": "Измерять",
+    "nameErr": "Имя измерения не может быть пустым",
+    "vertical": {
+      "desc": "Вертикально",
+      "unit": "Длина"
+    }
+  },
+  "mediaLibrary": {
+    "file": "файл",
+    "setGrouping": "Изменить Группировку",
+    "tips": {
+      "osgbtips": "Upload osgb: Вам необходимо использовать zip-пакет для загрузки. Содержит папки Data и xml-файлы. Пакет не должен содержать папок, и имя файла не должно содержать китайских символов. Как показано на рисунке:",
+      "uplooadSize": "Загруженные файлы не могут превышать 2ГБ!"
+    }
+  },
+  "motior": {
+    "error": "Невозможно просмотреть монитор. Пожалуйста, проверьте, нормально ли работает сеть.",
+    "list": "Список Мониторов",
+    "name": "Внутренний Монитор"
+  },
+  "path": {
+    "name": "Путь",
+    "name1": "Маршрут"
+  },
+  "program": {
+    "case": {
+      "add_case": "Новое Дело",
+      "create": "Создать файл дела",
+      "empty": "Нет доступных проектов",
+      "status_1": "Расчёт не удался",
+      "status_3": "Архивировать",
+      "status_5": "Пауза",
+      "status_6": "В очереди",
+      "status_7": "Копирование..."
+    },
+    "errMsg": {
+      "repeatGen": "Идёт задача расчёта, пожалуйста, дождитесь её завершения перед загрузкой оффлайн-пакета. Избегайте сбоя упаковки."
+    },
+    "exit-msg": "Даже после закрытия страницы программа продолжит работать в фоновом режиме. Если вам нужно выйти из программы, сделайте это из системного трея.",
+    "kankan": "Миньон",
+    "lang": "Многоязычный",
+    "laser": "Мега",
+    "menu": {
+      "library": "Медиатека"
+    },
+    "path_no_exist": "Путь не существует.",
+    "scene": {
+      "calcDone": "Время Завершения Расчёта"
+    },
+    "sceneDetail": {
+      "exportingOut": "Экспорт...",
+      "firstPacking": "Упаковка",
+      "import": "Импорт",
+      "isCopyExist": "Сцена уже существует. Хотите сохранить её как копию?",
+      "migrageS_title": "Перенести сцену",
+      "reFirstPacking": "Переупаковано",
+      "stoping": "Пауза",
+      "updateAt": "Обновление в"
+    },
+    "sceneDown": {
+      "coverStatus": {
+        "un": "Ожидает расчёта"
+      },
+      "msgStatus": {
+        "ing": "Пауза",
+        "lineup": "Продолжить расчёт"
+      }
+    },
+    "shenguang": "Мета"
+  },
+  "record": {
+    "backHandler": "Бэкенд обрабатывает.",
+    "con": "Продолжить запись",
+    "defName": "Обучающее видео {num}",
+    "delConfirm": "Вы уверены, что хотите удалить это видео?",
+    "list": "Все видео",
+    "merge": "Объединить видео",
+    "name": "Запись экрана",
+    "nameErr": "Имя видео не может быть пустым",
+    "sizeErr": "Превышен лимит размера, и запись не может продолжаться. Вы можете сохранить и возобновить запись!",
+    "start": "Начать запись",
+    "tag": "Метка",
+    "vName": "Запись экрана"
+  },
+  "resCode": {
+    "0": "Запрос успешен",
+    "4008": "токен истёк",
+    "4010": "У вас нет права доступа",
+    "40110": "У вас нет права редактирования",
+    "40111": "У вас нет права доступа"
+  },
+  "scene": {
+    "add": "Добавить сцену",
+    "list": "Список сцен",
+    "manage": "Управление сценами",
+    "tabs": {
+      "createTime": "Время Съёмки/Создания",
+      "name": "Имя",
+      "type": "Тип"
+    },
+    "typeRaws": {
+      "0": "Сцена Сетки",
+      "1": "Сцена Сетки",
+      "2": "Сцена Облака Точок",
+      "4": "Сцена Сетки",
+      "5": "Сцена Облака Точок",
+      "6": "Сцена Сетки",
+      "7": "Сцена Сетки"
+    },
+    "types": {
+      "0": "4DKanKan Pro/Сетка",
+      "1": "4DKanKan Minion/Сетка",
+      "2": "4DKanKan Mega/Облако точек",
+      "3": "Медиатека",
+      "4": "4DKanKan Mega/Сетка",
+      "5": "4DKanKan Meta/Облако точек",
+      "6": "4DKanKan Meta/Сетка",
+      "7": "Panox/Сетка"
+    }
+  },
+  "sceneHome": {
+    "nameSearch": "Искать по имени",
+    "searchData": "Результаты Поиска",
+    "selectAdd": "Выбрать Адрес",
+    "yctips": "Невозможно удалить. Сцена добавлена в мульти-слияние. Пожалуйста, удалите сцену из мульти-слияния, прежде чем пытаться снова.",
+    "yctipsErr": "Невозможно удалить. Сцена добавлена в мульти-слияние. Пожалуйста, удалите сцену из мульти-слияния, прежде чем пытаться снова."
+  },
+  "security": {
+    "name": "Безопасность"
+  },
+  "setting": {
+    "back": "Установить небо",
+    "backs0": "Н/Д",
+    "backs1": "Карта",
+    "backs2": "Голубое небо и белые облака",
+    "backs3": "Облачно",
+    "backs4": "Ночное небо",
+    "backs5": "Вечер",
+    "initView": "Начальный Экран",
+    "name": "Настройка",
+    "name1": "Имя",
+    "name1tip": "Заголовок не может быть пустым."
+  },
+  "sys": {
+    "404Page": "Ресурс не существует или был удалён",
+    "BrowserJY": "Рекомендуется использовать следующие браузеры:",
+    "BrowserLow": "Не удаётся открыть страницу. Пожалуйста, обновите или смените браузер и попробуйте снова.",
+    "add": "Добавить",
+    "addData": "Добавить данные",
+    "address": "Адрес",
+    "all": "Все",
+    "camera0": "Panox/Сетка",
+    "camera1": "4DKankan Minion/Сетка",
+    "camera2": "4DKankan Mega/Облако Точек",
+    "camera3": "Локальная Загрузка",
+    "camera4": "4DKankan Mega/Сетка",
+    "camera5": "4DKankan Meta/Облако Точек",
+    "camera6": "4DKankan Meta/Сетка",
+    "camera7": "Panox",
+    "cancel": "Отмена",
+    "caseTitle": "Дело",
+    "copy": "Копировать",
+    "create": "Создать",
+    "crop": "Обрезать",
+    "cropIng": "Идёт обрезка",
+    "del": "Удалить",
+    "delConfrm": "Вы уверены, что хотите удалить эти данные?",
+    "download": "Скачать",
+    "edit": "Редактировать",
+    "enter": "Подтвердить",
+    "errPage": "Страница Ошибки",
+    "expand": "Развернуть",
+    "ga": {
+      "camera0": "Panox/Сетка",
+      "camera1": "4DKankan Minion/Сетка",
+      "camera2": "4DKankan Mega/Облако Точек",
+      "camera3": "Локальная Загрузка",
+      "camera4": "4DKankan Mega/Сетка",
+      "camera5": "4DKankan Meta/Облако Точек",
+      "camera6": "4DKankan Meta/Сетка"
+    },
+    "imgLoadErr": "Не удалось загрузить изображение",
+    "import": "Импортировать",
+    "jsError": "Недостаточно памяти. Пожалуйста, избегайте одновременного открытия нескольких страниц или приложений. Попробуйте перезапустить браузер и заново открыть содержимое.",
+    "list": "Список данных",
+    "login": {
+      "emptypwd": "Список Данных",
+      "emptyusername": "Пароль не может быть пустым.",
+      "mark": "Аккаунт не может быть пустым",
+      "name": "Запомнить Пароль",
+      "pwd": "Пожалуйста, введите пароль!",
+      "title": "Пожалуйста, введите ваш пароль.",
+      "username": "Вход в Мульти-интеграцию"
+    },
+    "ok": "Я понимаю",
+    "other": "Другое",
+    "placPWD": "Пожалуйста, введите пароль!",
+    "placeInput": "Пожалуйста, введите",
+    "placeSelect": "Пожалуйста, выберите",
+    "pwdErr": "Неверный пароль, пожалуйста, попробуйте снова.",
+    "quit": "Выход",
+    "refresh": "Обновить",
+    "rename": "Переименовать",
+    "retract": "Свернуть",
+    "save": "Сохранить",
+    "search": "Поиск",
+    "selectAll": "Выбрать Все",
+    "serviceErr": "Произошла ошибка в работе сервиса. Пожалуйста, попробуйте позже.",
+    "setting": "Настройки",
+    "showSetting": "Настройки Отображения",
+    "tip": "Запрос",
+    "tranCropImg": "Пожалуйста, загрузите обрезанное изображение.",
+    "unSaveMsg": "У вас есть несохранённые изменения. Вы уверены, что хотите выйти?",
+    "unSearch": "Результаты не найдены",
+    "unSearchData": "Результаты поиска не найдены",
+    "unSelect": "Нет доступных опций",
+    "undata": "Нет результатов",
+    "upload": {
+      "accErr": "Ошибка формата",
+      "accSuperErr": "Поддерживаются только файлы формата {accept}.",
+      "accept": "Поддерживаются форматы {accept},",
+      "conAdd": "Продолжить добавление",
+      "lenErr": "Поддерживается максимум {maxLen} файлов!",
+      "maxLen": "Количество не должно превышать {maxLen}",
+      "maxSize": "Максимальный размер {sizeStr}.",
+      "name1": "Загрузить",
+      "normalizeScale": "Соотношение сторон {scale}",
+      "place1": "Загрузить файл",
+      "previewErr": "Не удалось загрузить предварительный просмотр!",
+      "rep": "Заменить",
+      "scaleErr": "Масштабированная часть {name} не {scale}",
+      "sizeErr": "Размер {name} превышает {sizeStr}"
+    },
+    "viewPWD": "Пароль доступа",
+    "上传失败,请检查文件格式。": "Ошибка загрузки: Проверьте формат файла.",
+    "其他": "Другое",
+    "其它物证(痕迹物证)": "Другая Вещественная Доказательства",
+    "动画模型": "Модель Анимации",
+    "图片缺失": "Нет Изображения",
+    "尸体": "Труп",
+    "工具痕迹": "Следы Орудий",
+    "手印痕迹": "Следы Рук",
+    "提取物品": "Извлечь Объекты",
+    "文件格式错误": "Неверный Формат Файла",
+    "文检物证": "Судебные Документальные Доказательства",
+    "枪弹痕迹": "Баллистические Следы",
+    "毒化物证": "Токсикологические Доказательства",
+    "特殊物证": "Специальные Доказательства",
+    "理化物证": "Физико-Химические Доказательства",
+    "生物物证": "Биологические Доказательства",
+    "电子物证": "Электронные Доказательства",
+    "痕迹物证": "Вещественные Доказательства",
+    "视听物证": "Аудиовизуальные Доказательства",
+    "足迹痕迹": "Следы Ног",
+    "高德影像地图": "Карта-Снимок Amap",
+    "高德矢量地图": "Векторная Карта Amap"
+  },
+  "tagging": {
+    "apply": "Применить ко всем",
+    "applyConfirm": "Вы уверены, что хотите применить этот атрибут ко всем местоположениям?",
+    "list": "Список Меток",
+    "media": "Изображение/Видео",
+    "mic": "Музыка",
+    "micPlc": "Поддерживаются форматы mp3/wav, ≤ 30 МБ",
+    "name": "Метка",
+    "plcMedia1": "Поддерживаются форматы JPG, PNG, MP4 и другие, с размером одного файла не более 100 МБ, и максимум 10 файлов разрешено для загрузки.",
+    "plcMethod": "Способ извлечения:",
+    "plcPart": "Область остатка:",
+    "plcPos": "Место размещения",
+    "plcPrincipal": "Экстрактор:",
+    "plcTitle": "Пожалуйста, введите заголовок метки",
+    "plcType": "Описание:",
+    "plcType1": "Описание особенностей:",
+    "pleMedia": "Загрузить изображение/видео",
+    "pos": "Разместить",
+    "posErr": "Невозможно добавить текущее местоположение",
+    "posName": "Местоположение",
+    "posTabs": {
+      "fontSize": "Размер шрифта",
+      "globalVisibility": "Весь диапазон виден",
+      "lineHeight": "Высота провода",
+      "rotation": "Вращать иконку",
+      "scale": "Размер иконки",
+      "type": "Способ размещения иконки",
+      "typeVal0": "При наведении",
+      "typeVal1": "Прикрепить",
+      "visibilityRange": "Видимый диапазон"
+    },
+    "posTip": "Щёлкните на модели, чтобы выбрать позицию метки.",
+    "style": "Стиль иконки",
+    "styleErr": "Пожалуйста, выберите стиль иконки!",
+    "taStatus": {
+      "END": "Осмотр Завершён",
+      "ING": "На Осмотре",
+      "UN": "Не Осмотрено"
+    },
+    "tabs": {
+      "method": "Способ Извлечения",
+      "part": "Область остатка",
+      "principal": "Экстрактор",
+      "typeId": "Описание особенностей"
+    },
+    "titleErr": "Заголовок метки обязателен!",
+    "titleErr1": "Длина заголовка должна быть не более 15 символов!",
+    "titleFex": "Заголовок закреплён",
+    "type": {
+      "1": "След",
+      "2": "Отпечаток руки",
+      "3": "Отпечаток ноги",
+      "4": "Кровяное пятно",
+      "5": "Тело",
+      "6": "Другое",
+      "7": "Доказательство"
+    }
+  },
+  "view": {
+    "all": "Все виды",
+    "defName": "Вид{num}",
+    "name": "Извлечение",
+    "nameErr": "Имя вида не может быть пустым",
+    "vName": "Вид"
+  }
+}

+ 530 - 0
src/lang/locales/th.json

@@ -0,0 +1,530 @@
+{
+  "am": {
+    "actions": {
+      "Climb": "คลาน",
+      "FallBackward": "ล้มหลัง",
+      "FallForward": "ล้มหน้า",
+      "JumpDown": "กระโดดลง",
+      "JumpUp": "กระโดดขึ้น",
+      "Run": "วิ่ง",
+      "TurnLeft": "เลี้ยวซ้าย",
+      "TurnRight": "เลี้ยวขวา",
+      "Walk": "เดิน"
+    },
+    "ammodel": {
+      "am": {
+        "a_idel": "ยืน",
+        "actionk": "ไลบรารีการดำเนินการ",
+        "crawling": "คลาน",
+        "death_from_back_headshot": "ล้มหน้า",
+        "drunk_walk": "เดินเซ",
+        "dying": "ล้มหน้าและตาย",
+        "end_bicycle_sit_up": "นอน: ลุกขึ้น",
+        "fist_pump": "นั่งลง",
+        "frame": "เพิ่มเฟรม",
+        "head_hit": "ศีรษะถูกกระแทก",
+        "hit_on_legs": "ล้มหลัง",
+        "illegal_knee": "เข่าซ้าย",
+        "left_turn_wbriefcase": "เลี้ยวซ้าย",
+        "medium_hit_to_head": "ถูกตี",
+        "mma_kick": "เตะขวาหน้า",
+        "name": "ภาพเคลื่อนไหว",
+        "path": "เส้นทาง",
+        "peone_forward": "คลานหน้า",
+        "running": "วิ่งมาตรฐาน",
+        "selectpath": "เลือกเส้นทาง",
+        "selectpathtip": "กรุณาเลือกเส้นทาง",
+        "sit_to_stand": "นั่ง: ยืนขึ้น",
+        "sitting": "นั่งมาตรฐาน",
+        "standard_walk": "เดินมาตรฐาน",
+        "standing_jump": "กระโดดขึ้นมาตรฐาน",
+        "start_walking": "เริ่มเดิน",
+        "subtitle": "คำบรรยาย",
+        "wall_crash": "ปล่อยและล้ม"
+      },
+      "fontsize": "ขนาดฟอนต์",
+      "globalVisibility": "ช่วงทั้งหมดมองเห็นได้",
+      "name": "ชื่อ",
+      "nameShow": "แสดงชื่อ",
+      "nameplace": "กรุณาใส่ชื่อ",
+      "range": "ช่วงที่มองเห็นได้"
+    },
+    "applyAllConfirm": "คุณแน่ใจหรือไม่ว่าต้องการใช้แอตทริบิวต์นี้กับโมเดลเคลื่อนไหวทั้งหมด?",
+    "empty": "ไม่มีการเพิ่มภาพเคลื่อนไหว",
+    "eqtimeTip": "ห้ามเพิ่มซ้ำในเวลาเดียวกัน",
+    "list": "รายการข้อมูล",
+    "model": "โมเดล",
+    "move": "ย้ายมาที่นี่",
+    "name": "โมเดลเคลื่อนไหว",
+    "name1": "ภาพเคลื่อนไหว",
+    "path": {
+      "dur": "ระยะเวลา",
+      "list": "รายการเส้นทาง",
+      "name": "เส้นทาง",
+      "nameplace": "กรุณาใส่ชื่อ",
+      "pathtip": "กรุณาเลือกเส้นทาง",
+      "reverse": "จุดสิ้นสุดย้อนกลับ",
+      "title": "ตั้งค่าเส้นทาง"
+    },
+    "setting": {
+      "amplitude": "แอมพลิจูด",
+      "dur": "ระยะเวลา",
+      "duration": "ระยะเวลา",
+      "name": "ชื่อ",
+      "nameplace": "กรุณาใส่ชื่อ",
+      "speed": "ความเร็ว",
+      "title": "ตั้งค่าภาพเคลื่อนไหว"
+    },
+    "subtitle": {
+      "color": "สีพื้นหลัง",
+      "content": "คำบรรยายย่อย",
+      "contentplace": "กรุณาใส่คำบรรยายย่อย",
+      "dur": "คงอยู่บนหน้าจอ",
+      "name": "ชื่อ",
+      "nameplace": "กรุณาใส่ชื่อ",
+      "title": "ตั้งค่าคำบรรยายย่อย"
+    },
+    "tabs": {
+      "actions": "การดำเนินการ",
+      "paths": "เส้นทาง",
+      "subtitles": "คำบรรยายย่อย"
+    }
+  },
+  "common": {
+    "NoFilesSelected": "ไม่ได้เลือกไฟล์"
+  },
+  "coord": {
+    "zoomLevel": "ระดับการซูม"
+  },
+  "floder": {
+    "extractList": "รายการที่ดึงออกมา",
+    "name": "ไฟล์คดี",
+    "photo": "ม้วนภาพถ่าย",
+    "record": "บันทึกการตรวจสอบ"
+  },
+  "fuse": {
+    "dataQue": "แหล่งข้อมูล",
+    "dataSize": "ขนาดข้อมูล",
+    "dataTime": "เวลาถ่ายภาพ",
+    "def": "คืนค่าเริ่มต้น",
+    "defConfirm": "คุณแน่ใจหรือไม่ว่าต้องการคืนค่าเริ่มต้น? การดำเนินการนี้ไม่สามารถยกเลิกได้",
+    "flip": "หมุน",
+    "hre": "กรุณาปรับตำแหน่งแนวตั้งภายในหน้าต่างปัจจุบัน",
+    "join": "การต่อภาพ",
+    "label": "รวมฉาก",
+    "len": "ความยาว",
+    "localUpload": "อัปโหลดจากเครื่อง",
+    "model": "แบบจำลอง 3D",
+    "modelUpload": {
+      "desc0": "OSGB: ≤ 2 GB. อัปโหลดเป็น ZIP. ใส่เฉพาะโฟลเดอร์ Data และไฟล์ XML เท่านั้น ห้ามมีโฟลเดอร์ย่อย ใช้ชื่อไฟล์ ASCII",
+      "desc1": "รองรับคลาวด์พอยต์ PLY และ LAS (แนะนำ ≤2 GB). ไฟล์ OBJ ควรมีขนาด ≤100 MB และอัปโหลดเป็น ZIP ที่ประกอบด้วยไฟล์ OBJ เท็กซ์เจอร์ และไฟล์ MTL เท่านั้น โดยไม่มีโฟลเดอร์ย่อย และใช้ชื่อไฟล์ ASCII",
+      "title0": "อัปโหลด OSGB",
+      "title1": "ข้อกำหนดการอัปโหลดสำหรับโมเดลอื่น ๆ"
+    },
+    "move": "ย้าย",
+    "name": "การบรรจบกันหลายแบบ",
+    "opacity": "ความทึบของโมเดล",
+    "opacity1": "ความโปร่งใส",
+    "pano": "พานอรามา",
+    "reSelect": "เลือกจุดใหม่",
+    "registration": "การลงทะเบียน",
+    "repScale": "การปรับสเกลแบบสม่ำเสมอ",
+    "scale": "มาตราส่วน",
+    "selectTip": "กรุณาเลือกสองจุดเพื่อกำหนดความยาวที่ทราบ และป้อนความยาวจริง",
+    "setScale": "ตั้งค่ามาตราส่วน",
+    "sync": "การตรวจสอบพร้อมกันบนหน้าจอ",
+    "syncErr": "การดูคุณสมบัติรองรับเฉพาะฉากประเภท {types} เท่านั้น กรุณาเพิ่มฉากประเภทนี้",
+    "unModel": "โมเดลไม่มีอยู่!",
+    "vre": "กรุณาปรับตำแหน่งแนวนอนภายในหน้าต่างปัจจุบัน"
+  },
+  "guide": {
+    "defTitle": "ทัวร์",
+    "guide": {
+      "activeam": "เปิดใช้งาน",
+      "activeclose": "ปิดใช้งานภาพเคลื่อนไหว",
+      "activetip": "เปิดใช้งานภาพเคลื่อนไหวแล้ว กรุณาเพิ่มมุมมองอย่างน้อย 2 มุม",
+      "add": "เพิ่มจุดมอง",
+      "clear": "ล้างมุมมอง",
+      "clearConfirm": "คุณแน่ใจหรือไม่ว่าต้องการล้างมุมมอง?",
+      "delConfirm": "คุณแน่ใจหรือไม่ว่าต้องการลบมุมมองนี้?",
+      "list": "รายการทัวร์",
+      "name": "ทัวร์",
+      "time": "ระยะเวลาวิดีโอ",
+      "unItems": "ไม่สามารถบันทึกทัวร์แนะนำเส้นทางที่ว่างเปล่าได้!",
+      "unactiveam": "ปิด",
+      "undata": "ไม่มีเส้นทางนำทาง"
+    },
+    "guideName": "ทัวร์ ({count})",
+    "modelErr": "โมเดลที่เส้นทางอยู่ถูกลบไปแล้ว และไม่สามารถเล่นได้",
+    "name": "ทัวร์",
+    "nameErr": "ชื่อเส้นทางต้องไม่ว่างเปล่า",
+    "pErr": "จำนวนจุดเส้นทางต้องไม่น้อยกว่าสองจุด",
+    "path": {
+      "applyConfirm": "คุณแน่ใจหรือไม่ว่าต้องการใช้แอตทริบิวต์นี้กับทุกตำแหน่ง?",
+      "fontSize": "ขนาดฟอนต์",
+      "globalVisibility": "ช่วงทั้งหมดมองเห็นได้",
+      "lineColor": "สีเส้นทาง",
+      "lineWidth": "ความหนาเส้นทาง",
+      "name": "เส้นทาง",
+      "pointDesc": "คำอธิบาย",
+      "pointTitle": "แก้ไขจุด",
+      "preview": "ดูตัวอย่างเส้นทาง",
+      "reverseDirection": "ลูกศรย้อนกลับ",
+      "showDirection": "ลูกศรเส้นทาง",
+      "stop": "หยุด",
+      "title": "ชื่อเส้นทาง",
+      "visibilityRange": "ช่วงที่มองเห็นได้"
+    },
+    "pathName": "เส้นทาง ({count})"
+  },
+  "material": {
+    "name": "ห้องสมุดสื่อ",
+    "search": "ค้นหาด้วยชื่อ",
+    "selectCount": "ข้อมูลที่เลือก",
+    "selectErr": "สามารถเลือกได้สูงสุด {count} รายการ",
+    "tabs": {
+      "action": "การดำเนินการ",
+      "format": "รูปแบบ",
+      "group": "กลุ่ม",
+      "name": "ชื่อ",
+      "size": "ขนาด",
+      "status": "สถานะ"
+    },
+    "up": "อัปโหลดจากห้องสมุดสื่อ",
+    "uploadErr": "อัปโหลดล้มเหลว",
+    "uploadIng": "กำลังอัปโหลด...",
+    "uploadSuccess": "อัปโหลดสำเร็จ"
+  },
+  "measure": {
+    "area": {
+      "desc": "พื้นที่",
+      "unit": "พื้นที่"
+    },
+    "free": {
+      "desc": "อิสระ",
+      "unit": "ความยาว"
+    },
+    "list": "รายการการวัด",
+    "name": "วัด",
+    "nameErr": "ชื่อการวัดต้องไม่ว่างเปล่า",
+    "vertical": {
+      "desc": "แนวตั้ง",
+      "unit": "ความยาว"
+    }
+  },
+  "mediaLibrary": {
+    "file": "ไฟล์",
+    "setGrouping": "แก้ไขการจัดกลุ่ม",
+    "tips": {
+      "osgbtips": "Upload osgb: คุณจำเป็นต้องใช้แพ็คเกจ zip ในการอัปโหลด ประกอบด้วยโฟลเดอร์ Data และไฟล์ xml แพ็คเกจต้องไม่มีโฟลเดอร์ภายใน และชื่อไฟล์ต้องไม่ใช้ภาษาจีน ดังภาพ:",
+      "uplooadSize": "ไฟล์ที่อัปโหลดต้องไม่เกิน 2G!"
+    }
+  },
+  "motior": {
+    "error": "ไม่สามารถดูมอนิเตอร์ได้ กรุณาตรวจสอบว่าเครือข่ายปกติหรือไม่",
+    "list": "รายการมอนิเตอร์",
+    "name": "มอนิเตอร์ในร่ม"
+  },
+  "path": {
+    "name": "เส้นทาง",
+    "name1": "เส้นทาง"
+  },
+  "program": {
+    "case": {
+      "add_case": "คดีใหม่",
+      "create": "สร้างไฟล์คดี",
+      "empty": "ไม่มีโปรเจกต์ที่ใช้ได้",
+      "status_1": "คำนวณล้มเหลว",
+      "status_3": "เก็บถาวร",
+      "status_5": "หยุดชั่วคราว",
+      "status_6": "อยู่ในคิว",
+      "status_7": "กำลังคัดลอก..."
+    },
+    "errMsg": {
+      "repeatGen": "มีงานคำนวณอยู่ กรุณารอให้การคำนวณเสร็จสมบูรณ์ก่อนดาวน์โหลดแพ็คเกจออฟไลน์ เพื่อหลีกเลี่ยงความล้มเหลวในการแพ็คเกจ"
+    },
+    "exit-msg": "แม้หลังจากปิดหน้าแล้ว โปรแกรมจะยังคงทำงานในพื้นหลัง หากคุณต้องการออกจากโปรแกรม กรุณาทำจาก System Tray",
+    "kankan": "มินเนี่ยน",
+    "lang": "หลายภาษา",
+    "laser": "เมกะ",
+    "menu": {
+      "library": "ห้องสมุดสื่อ"
+    },
+    "path_no_exist": "เส้นทางไม่มีอยู่",
+    "scene": {
+      "calcDone": "เวลาสิ้นสุดการคำนวณ"
+    },
+    "sceneDetail": {
+      "exportingOut": "กำลังส่งออก...",
+      "firstPacking": "กำลังแพ็คเกจ",
+      "import": "นำเข้า",
+      "isCopyExist": "ฉากมีอยู่แล้ว คุณต้องการบันทึกเป็นสำเนาหรือไม่?",
+      "migrageS_title": "ย้ายฉาก",
+      "reFirstPacking": "แพ็คเกจใหม่",
+      "stoping": "หยุดชั่วคราว",
+      "updateAt": "กำลังอัปเดตที่"
+    },
+    "sceneDown": {
+      "coverStatus": {
+        "un": "รอคำนวณ"
+      },
+      "msgStatus": {
+        "ing": "หยุดชั่วคราว",
+        "lineup": "คำนวณต่อ"
+      }
+    },
+    "shenguang": "เมตา"
+  },
+  "record": {
+    "backHandler": "แบ็กเอนด์กำลังประมวลผล",
+    "con": "บันทึกต่อ",
+    "defName": "วิดีโอสอน {num}",
+    "delConfirm": "คุณแน่ใจหรือไม่ว่าต้องการลบวิดีโอนี้?",
+    "list": "วิดีโอทั้งหมด",
+    "merge": "รวมวิดีโอ",
+    "name": "บันทึกหน้าจอ",
+    "nameErr": "ชื่อวิดีโอต้องไม่ว่างเปล่า",
+    "sizeErr": "เกินขีดจำกัดขนาดแล้ว และไม่สามารถบันทึกต่อได้ คุณสามารถบันทึกและกลับมาบันทึกต่อได้!",
+    "start": "เริ่มบันทึก",
+    "tag": "แท็ก",
+    "vName": "บันทึกหน้าจอ"
+  },
+  "resCode": {
+    "0": "คำขอสำเร็จ",
+    "4008": "โทเค็นหมดอายุ",
+    "4010": "คุณไม่มีสิทธิ์เข้าถึง",
+    "40110": "คุณไม่มีสิทธิ์แก้ไข",
+    "40111": "คุณไม่มีสิทธิ์เข้าถึง"
+  },
+  "scene": {
+    "add": "เพิ่มฉาก",
+    "list": "รายการฉาก",
+    "manage": "การจัดการฉาก",
+    "tabs": {
+      "createTime": "เวลาถ่ายภาพ/สร้าง",
+      "name": "ชื่อ",
+      "type": "ประเภท"
+    },
+    "typeRaws": {
+      "0": "ฉากเมช",
+      "1": "ฉากเมช",
+      "2": "ฉากคลาวด์พอยต์",
+      "4": "ฉากเมช",
+      "5": "ฉากคลาวด์พอยต์",
+      "6": "ฉากเมช",
+      "7": "ฉากเมช"
+    },
+    "types": {
+      "0": "4DKanKan Pro/เมช",
+      "1": "4DKanKan Minion/เมช",
+      "2": "4DKanKan Mega/คลาวด์พอยต์",
+      "3": "ห้องสมุดสื่อ",
+      "4": "4DKanKan Mega/เมช",
+      "5": "4DKanKan Meta/คลาวด์พอยต์",
+      "6": "4DKanKan Meta/เมช",
+      "7": "Panox/เมช"
+    }
+  },
+  "sceneHome": {
+    "nameSearch": "ค้นหาด้วยชื่อ",
+    "searchData": "ผลการค้นหา",
+    "selectAdd": "เลือกที่อยู่",
+    "yctips": "ไม่สามารถลบได้ ฉากถูกเพิ่มไปยังการหลอมรวมหลายแบบแล้ว กรุณาลบฉากจากการหลอมรวมหลายแบบก่อนลองอีกครั้ง",
+    "yctipsErr": "ไม่สามารถลบได้ ฉากถูกเพิ่มไปยังการหลอมรวมหลายแบบแล้ว กรุณาลบฉากจากการหลอมรวมหลายแบบก่อนลองอีกครั้ง"
+  },
+  "security": {
+    "name": "ความปลอดภัย"
+  },
+  "setting": {
+    "back": "ตั้งค่าท้องฟ้า",
+    "backs0": "ไม่适用",
+    "backs1": "แผนที่",
+    "backs2": "ท้องฟ้าสีครามและเมฆขาว",
+    "backs3": "มีเมฆมาก",
+    "backs4": "ท้องฟ้ายามราตรี",
+    "backs5": "ยามเย็น",
+    "initView": "หน้าจอเริ่มต้น",
+    "name": "การตั้งค่า",
+    "name1": "ชื่อ",
+    "name1tip": "หัวข้อต้องไม่ว่างเปล่า"
+  },
+  "sys": {
+    "404Page": "ทรัพยากรไม่มีอยู่หรือถูกลบไปแล้ว",
+    "BrowserJY": "แนะนำให้ใช้เบราว์เซอร์ต่อไปนี้:",
+    "BrowserLow": "ไม่สามารถเปิดหน้าได้ กรุณาอัปเกรดหรือเปลี่ยนเบราว์เซอร์และลองอีกครั้ง",
+    "add": "เพิ่ม",
+    "addData": "เพิ่มข้อมูล",
+    "address": "ที่อยู่",
+    "all": "ทั้งหมด",
+    "camera0": "Panox/เมช",
+    "camera1": "4DKankan Minion/เมช",
+    "camera2": "4DKankan Mega/คลาวด์พอยต์",
+    "camera3": "อัปโหลดจากเครื่อง",
+    "camera4": "4DKankan Mega/เมช",
+    "camera5": "4DKankan Meta/คลาวด์พอยต์",
+    "camera6": "4DKankan Meta/เมช",
+    "camera7": "Panox",
+    "cancel": "ยกเลิก",
+    "caseTitle": "คดี",
+    "copy": "คัดลอก",
+    "create": "สร้าง",
+    "crop": "ครอป",
+    "cropIng": "กำลังครอป",
+    "del": "ลบ",
+    "delConfrm": "คุณแน่ใจหรือไม่ว่าต้องการลบข้อมูลนี้?",
+    "download": "ดาวน์โหลด",
+    "edit": "แก้ไข",
+    "enter": "ยืนยัน",
+    "errPage": "หน้าข้อผิดพลาด",
+    "expand": "ขยาย",
+    "ga": {
+      "camera0": "Panox/เมช",
+      "camera1": "4DKankan Minion/เมช",
+      "camera2": "4DKankan Mega/คลาวด์พอยต์",
+      "camera3": "อัปโหลดจากเครื่อง",
+      "camera4": "4DKankan Mega/เมช",
+      "camera5": "4DKankan Meta/คลาวด์พอยต์",
+      "camera6": "4DKankan Meta/เมช"
+    },
+    "imgLoadErr": "โหลดภาพไม่สำเร็จ",
+    "import": "นำเข้า",
+    "jsError": "หน่วยความจำไม่เพียงพอ กรุณาหลีกเลี่ยงการเปิดหลายหน้าหรือแอปพลิเคชันพร้อมกัน ลองรีสตาร์ทเบราว์เซอร์และเปิดเนื้อหาอีกครั้ง",
+    "list": "รายการข้อมูล",
+    "login": {
+      "emptypwd": "รายการข้อมูล",
+      "emptyusername": "รหัสผ่านต้องไม่ว่างเปล่า",
+      "mark": "บัญชีต้องไม่ว่างเปล่า",
+      "name": "จำรหัสผ่าน",
+      "pwd": "กรุณาใส่รหัสผ่าน!",
+      "title": "กรุณาใส่รหัสผ่านของคุณ",
+      "username": "เข้าสู่ระบบการผสานหลายแบบ"
+    },
+    "ok": "ฉันเข้าใจ",
+    "other": "อื่นๆ",
+    "placPWD": "กรุณาใส่รหัสผ่าน!",
+    "placeInput": "กรุณาใส่",
+    "placeSelect": "กรุณาเลือก",
+    "pwdErr": "รหัสผ่านไม่ถูกต้อง กรุณาลองอีกครั้ง",
+    "quit": "ออก",
+    "refresh": "รีเฟรช",
+    "rename": "เปลี่ยนชื่อ",
+    "retract": "ย่อ",
+    "save": "บันทึก",
+    "search": "ค้นหา",
+    "selectAll": "เลือกทั้งหมด",
+    "serviceErr": "เกิดข้อผิดพลาดกับบริการ กรุณาลองอีกครั้งในภายหลัง",
+    "setting": "การตั้งค่า",
+    "showSetting": "การตั้งค่าการแสดงผล",
+    "tip": "แจ้งเตือน",
+    "tranCropImg": "กรุณาอัปโหลดภาพที่ครอปแล้ว",
+    "unSaveMsg": "คุณมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก คุณแน่ใจหรือไม่ว่าต้องการออก?",
+    "unSearch": "ไม่พบผลลัพธ์",
+    "unSearchData": "ไม่พบผลการค้นหา",
+    "unSelect": "ไม่มีตัวเลือกที่ใช้ได้",
+    "undata": "ไม่มีผลลัพธ์",
+    "upload": {
+      "accErr": "รูปแบบไม่ถูกต้อง",
+      "accSuperErr": "รองรับเฉพาะไฟล์ในรูปแบบ {accept}",
+      "accept": "รองรับรูปแบบ {accept}",
+      "conAdd": "เพิ่มต่อไป",
+      "lenErr": "รองรับสูงสุด {maxLen} ไฟล์เท่านั้น!",
+      "maxLen": "จำนวนต้องไม่เกิน {maxLen}",
+      "maxSize": "ขนาดสูงสุด {sizeStr}",
+      "name1": "อัปโหลด",
+      "normalizeScale": "อัตราส่วนกว้างต่อสูง {scale}",
+      "place1": "อัปโหลดไฟล์",
+      "previewErr": "โหลดตัวอย่างไม่สำเร็จ!",
+      "rep": "แทนที่",
+      "scaleErr": "ส่วนที่ปรับสเกลของ {name} ไม่เป็น {scale}",
+      "sizeErr": "ขนาดของ {name} เกิน {sizeStr}"
+    },
+    "viewPWD": "รหัสผ่านการเข้าถึง",
+    "上传失败,请检查文件格式。": "อัปโหลดล้มเหลว: ตรวจสอบรูปแบบไฟล์",
+    "其他": "อื่นๆ",
+    "其它物证(痕迹物证)": "ร่องรอยหลักฐานอื่นๆ",
+    "动画模型": "โมเดลเคลื่อนไหว",
+    "图片缺失": "ไม่มีรูปภาพ",
+    "尸体": "ศพ",
+    "工具痕迹": "ร่องรอยเครื่องมือ",
+    "手印痕迹": "ร่องรอยฝ่ามือ",
+    "提取物品": "ดึงรายการ",
+    "文件格式错误": "รูปแบบไฟล์ไม่ถูกต้อง",
+    "文检物证": "หลักฐานเอกสารทางนิติเวช",
+    "枪弹痕迹": "ร่องรอยทางกระสุน",
+    "毒化物证": "หลักฐานพิษ",
+    "特殊物证": "หลักฐานพิเศษ",
+    "理化物证": "หลักฐานทางกายภาพและเคมี",
+    "生物物证": "หลักฐานทางชีวภาพ",
+    "电子物证": "หลักฐานอิเล็กทรอนิกส์",
+    "痕迹物证": "ร่องรอยหลักฐาน",
+    "视听物证": "หลักฐานเสียงและภาพ",
+    "足迹痕迹": "ร่องรอยเท้า",
+    "高德影像地图": "แผนที่ภาพ Amap",
+    "高德矢量地图": "แผนที่เวกเตอร์ Amap"
+  },
+  "tagging": {
+    "apply": "ใช้กับทั้งหมด",
+    "applyConfirm": "คุณแน่ใจหรือไม่ว่าต้องการใช้แอตทริบิวต์นี้กับทุกตำแหน่ง?",
+    "list": "รายการแท็ก",
+    "media": "รูปภาพ/วิดีโอ",
+    "mic": "เพลง",
+    "micPlc": "รองรับรูปแบบ mp3/wav ≤ 30MB",
+    "name": "แท็ก",
+    "plcMedia1": "รองรับรูปแบบ JPG, PNG, MP4 และอื่นๆ โดยขนาดไฟล์เดียวต้องไม่เกิน 100MB และอัปโหลดได้สูงสุด 10 ไฟล์",
+    "plcMethod": "วิธีการดึง:",
+    "plcPart": "พื้นที่ที่เหลือ:",
+    "plcPos": "ตำแหน่งที่วาง",
+    "plcPrincipal": "ผู้ดึง:",
+    "plcTitle": "กรุณาใส่ชื่อแท็ก",
+    "plcType": "คำอธิบาย:",
+    "plcType1": "คำอธิบายคุณลักษณะ:",
+    "pleMedia": "อัปโหลดรูปภาพ/วิดีโอ",
+    "pos": "วาง",
+    "posErr": "ไม่สามารถเพิ่มตำแหน่งปัจจุบัน",
+    "posName": "ตำแหน่ง",
+    "posTabs": {
+      "fontSize": "ขนาดฟอนต์",
+      "globalVisibility": "ช่วงทั้งหมดมองเห็นได้",
+      "lineHeight": "ความสูงเส้น",
+      "rotation": "หมุนไอคอน",
+      "scale": "ขนาดไอคอน",
+      "type": "วิธีการวางไอคอน",
+      "typeVal0": "โฮเวอร์",
+      "typeVal1": "แนบ",
+      "visibilityRange": "ช่วงที่มองเห็นได้"
+    },
+    "posTip": "คลิกบนโมเดลเพื่อเลือกตำแหน่งแท็ก",
+    "style": "สไตล์ไอคอน",
+    "styleErr": "กรุณาเลือกรูปแบบไอคอน!",
+    "taStatus": {
+      "END": "การตรวจสอบเสร็จสิ้น",
+      "ING": "อยู่ระหว่างการตรวจสอบ",
+      "UN": "ยังไม่ได้ตรวจสอบ"
+    },
+    "tabs": {
+      "method": "วิธีการดึง",
+      "part": "พื้นที่ที่เหลือ",
+      "principal": "ผู้ดึง",
+      "typeId": "คำอธิบายคุณลักษณะ"
+    },
+    "titleErr": "ต้องการชื่อแท็ก!",
+    "titleErr1": "ความยาวชื่อต้องไม่เกิน 15 ตัวอักษร!",
+    "titleFex": "ปักชื่อแท็ก",
+    "type": {
+      "1": "ร่องรอย",
+      "2": "ฝ่ามือ",
+      "3": "รอยเท้า",
+      "4": "คราบเลือด",
+      "5": "ร่างกาย",
+      "6": "อื่นๆ",
+      "7": "หลักฐาน"
+    }
+  },
+  "view": {
+    "all": "มุมมองทั้งหมด",
+    "defName": "มุมมอง{num}",
+    "name": "การดึงข้อมูล",
+    "nameErr": "ชื่อมุมมองต้องไม่ว่างเปล่า",
+    "vName": "มุมมอง"
+  }
+}

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

@@ -117,7 +117,7 @@
     "model": "三维模型",
     "modelUpload": {
       "desc0": "仅支持 OSGB ≤2G。请将文件(包含 DATA 文件夹和 XML 文件)用 ZIP 打包上传,压缩包内勿含子文件夹,文件名请勿使用中文。",
-      "desc1": "支持 PLY、LAS 格式点云,建议≤2GB。OBJ 格式建议≤100MB,请将文件(包含贴图、OBJ 文件和 MTL 文件)用 ZIP 打包上传,压缩包内勿含子文件夹,文件名请勿使用中文。",
+      "desc1": "支持点云格式 PLY、LAS  ≤2GB。OBJ 格式建议≤100MB,请将文件(包含贴图、OBJ 文件和 MTL 文件)用 ZIP 打包上传,压缩包内勿含子文件夹,文件名请勿使用中文。",
       "title0": "倾斜摄影模型上传要求",
       "title1": "其他模型上传要求"
     },