feat(i18n): add zh-CN translations and populate en/es locale files

Extract all user-visible hardcoded strings into 7 namespace locale files
(common, launch, editor, timeline, settings, dialogs, shortcuts) for all
three languages: English (source of truth), Spanish, and Simplified Chinese.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
dev-Flyblue
2026-03-15 15:20:01 +08:00
co-authored by Claude Opus 4.6
parent d388101183
commit 3524b13614
21 changed files with 958 additions and 31 deletions
+17 -6
View File
@@ -1,7 +1,18 @@
{
"app": {
"name": "Recordly",
"editorTitle": "Recordly Editor",
"subtitle": "Screen recording and editing"
}
}
"app": {
"name": "Recordly",
"editorTitle": "Recordly Editor",
"subtitle": "Screen recording and editing"
},
"actions": {
"cancel": "Cancel",
"save": "Save",
"delete": "Delete",
"done": "Done"
},
"errors": {
"invalidFileType": "Invalid file type",
"failedToUploadImage": "Failed to upload image",
"fileReadError": "There was an error reading the file."
}
}
+61 -1
View File
@@ -1 +1,61 @@
{}
{
"export": {
"pleaseTryAgain": "Please try again",
"compilingGifProgress": "Compiling GIF... {{progress}}%",
"compilingGifWait": "Compiling GIF... This may take a while",
"takeMoment": "This may take a moment...",
"exportFailed": "Export Failed",
"compilingGifTitle": "Compiling GIF",
"exportingFormat": "Exporting {{format}}",
"exportComplete": "Export Complete",
"formatReady": "Your {{format}} is ready",
"showInFolder": "Show in Folder",
"compiling": "Compiling",
"renderingFrames": "Rendering Frames",
"processing": "Processing...",
"status": "Status",
"format": "Format",
"compilingStatus": "Compiling...",
"frames": "Frames",
"cancelExport": "Cancel Export",
"savedSuccess": "{{format}} saved successfully!"
},
"addFont": {
"title": "Add Google Font",
"heading": "Add Google Font",
"description": "Add a custom font from Google Fonts to use in your annotations.",
"urlLabel": "Google Fonts Import URL",
"urlPlaceholder": "https://fonts.googleapis.com/css2?family=Roboto&display=swap",
"urlHelp": "Get this from Google Fonts: Select a font → Click \"Get font\" → Copy the @import URL",
"nameLabel": "Display Name",
"namePlaceholder": "My Custom Font",
"nameHelp": "This is how the font will appear in the font selector",
"adding": "Adding...",
"addFont": "Add Font",
"enterUrl": "Please enter a Google Fonts import URL",
"invalidUrl": "Please enter a valid Google Fonts URL",
"enterName": "Please enter a font name",
"extractFailed": "Could not extract font family from URL",
"addSuccess": "Font \"{{name}}\" added successfully",
"addFailed": "Failed to add font",
"loadTimeout": "Font took too long to load. Please check the URL and try again.",
"loadFailed": "The font could not be loaded. Please verify the Google Fonts URL is correct."
},
"shortcutsConfig": {
"title": "Keyboard Shortcuts",
"configurable": "Configurable",
"fixed": "Fixed",
"pressEscToCancel": "Press Esc to cancel",
"clickToChange": "Click to change",
"pressAKey": "Press a key…",
"alreadyUsedBy": "Already used by <strong>{{action}}</strong>",
"swap": "Swap",
"reserved": "This shortcut is reserved for \"{{label}}\" and cannot be reassigned.",
"saved": "Keyboard shortcuts saved",
"resetNotice": "Reset to default shortcuts — click Save to apply",
"instructions": "Click a shortcut then press the new key combination. Press Esc to cancel.",
"resetToDefaults": "Reset to defaults",
"cancel": "Cancel",
"save": "Save"
}
}
+91 -1
View File
@@ -1 +1,91 @@
{}
{
"playback": {
"play": "Play",
"pause": "Pause"
},
"annotations": {
"settings": "Annotation Settings",
"active": "Active",
"text": "Text",
"image": "Image",
"arrow": "Arrow",
"textContent": "Text Content",
"textPlaceholder": "Enter your text...",
"fontStyle": "Font Style",
"selectStyle": "Select style",
"size": "Size",
"toggleBold": "Toggle bold",
"toggleItalic": "Toggle italic",
"toggleUnderline": "Toggle underline",
"alignLeft": "Align left",
"alignCenter": "Align center",
"alignRight": "Align right",
"textColor": "Text Color",
"background": "Background",
"none": "None",
"clearBackground": "Clear Background",
"uploadImage": "Upload Image",
"supportedFormats": "Supported formats: JPG, PNG, GIF, WebP",
"arrowDirection": "Arrow Direction",
"strokeWidth": "Stroke Width: {{width}}px",
"arrowColor": "Arrow Color",
"deleteAnnotation": "Delete Annotation",
"shortcutsAndTips": "Shortcuts & Tips",
"tipSelectAnnotation": "Move playhead to overlapping annotation section and select an item.",
"tipCycleForward": "Use Tab to cycle through overlapping items.",
"tipCycleBackward": "Use Shift+Tab to cycle backwards.",
"imageUploadSuccess": "Image uploaded successfully!",
"imageUploadError": "Please upload a JPG, PNG, GIF, or WebP image file."
},
"fontStyles": {
"classic": "Classic",
"editor": "Editor",
"strong": "Strong",
"typewriter": "Typewriter",
"deco": "Deco",
"simple": "Simple",
"modern": "Modern",
"clean": "Clean"
},
"format": {
"mp4Video": "MP4 Video",
"mp4Description": "High quality video file",
"gifAnimation": "GIF Animation",
"gifDescription": "Animated image for sharing"
},
"gifOptions": {
"frameRate": "Frame Rate",
"outputSize": "Output Size",
"outputDimensions": "Output: {{width}} × {{height}}px",
"loopAnimation": "Loop Animation",
"loopDescription": "GIF will play continuously"
},
"tutorial": {
"howTrimmingWorks": "How trimming works",
"title": "How Trimming Works",
"understanding": "Understanding how to cut out unwanted parts of your video.",
"descriptionP1": "The Trim tool works by defining the segments you want to",
"descriptionRemove": "remove",
"descriptionP2": "from your video.",
"descriptionP3": "Any part of the timeline that is covered by a red trim segment will be cut out when you export.",
"visualExample": "Visual Example",
"removed": "REMOVED",
"kept": "Kept",
"finalVideo": "Final Video",
"part": "Part {{number}}",
"addTrimStep": "1. Add Trim",
"addTrimDesc": "Press T or click the scissors icon to mark a section for removal.",
"adjustStep": "2. Adjust",
"adjustDesc": "Drag the edges of the red region to cover exactly what you want to cut out."
},
"keyboardShortcuts": {
"title": "Keyboard Shortcuts",
"customizeTooltip": "Customize shortcuts",
"customize": "Customize",
"panTimeline": "Pan Timeline",
"zoomTimeline": "Zoom Timeline",
"cycleAnnotations": "Cycle Annotations",
"tab": "Tab"
},
"openRecordingsFolder": "Open recordings folder"
}
+36 -1
View File
@@ -1 +1,36 @@
{}
{
"recording": {
"disableSystemAudio": "Disable system audio",
"enableSystemAudio": "Enable system audio",
"disableMicrophone": "Disable microphone",
"enableMicrophone": "Enable microphone",
"record": "Record",
"recordingFolder": "Recording folder: {{path}}",
"chooseRecordingsFolder": "Choose recordings folder",
"folderPath": "Path: /{{name}}/",
"openVideoFile": "Open video file",
"openProject": "Open project",
"hideHud": "Hide HUD",
"closeApp": "Close App"
},
"sourceSelector": {
"loadingSources": "Loading sources...",
"screens": "Screens",
"windows": "Windows",
"windowsNote": "Only visible (non-minimized) windows can be recorded.",
"windowPlaceholder": "Window",
"cancel": "Cancel",
"share": "Share"
},
"permissions": {
"screenRecordingNeeded": "Recordly needs Screen Recording permission before you start. System Settings has been opened. After enabling it, quit and reopen Recordly.",
"screenRecordingMissing": "Screen Recording permission is still missing. System Settings has been opened again. Enable it, then quit and reopen Recordly before recording.",
"accessibilityNeeded": "Recordly also needs Accessibility permission for cursor tracking. System Settings has been opened. After enabling it, quit and reopen Recordly.",
"accessibilityMissing": "Accessibility permission is still missing. System Settings has been opened again. Enable it, then quit and reopen Recordly before recording.",
"selectSource": "Please select a source to record",
"systemAudioUnavailable": "System audio is not available for this source. Recording will continue without system audio.",
"microphoneDenied": "Microphone access was denied. Recording will continue without microphone audio.",
"failedToStart": "Failed to start recording: {{error}}",
"failedToStartGeneric": "Failed to start recording"
}
}
+60 -1
View File
@@ -1 +1,60 @@
{}
{
"zoom": {
"level": "Zoom Level",
"selectRegion": "Select a zoom region to adjust",
"deleteZoom": "Delete Zoom"
},
"trim": {
"deleteRegion": "Delete Trim Region"
},
"speed": {
"playbackSpeed": "Playback Speed",
"selectRegion": "Select a speed region to adjust",
"deleteRegion": "Delete Speed Region"
},
"effects": {
"title": "Video Effects",
"showCursor": "Show Cursor",
"loopCursor": "Loop cursor",
"backgroundBlur": "Background Blur",
"zoomMotionBlur": "Zoom Motion Blur",
"connectZooms": "Connect Zooms",
"cursorSize": "Cursor Size",
"cursorSmoothing": "Cursor Smoothing",
"off": "Off",
"cursorMotionBlur": "Cursor Motion Blur",
"cursorClickBounce": "Cursor Click Bounce",
"shadow": "Shadow",
"roundness": "Roundness",
"padding": "Padding"
},
"crop": {
"title": "Crop Video",
"instruction": "Drag on each side to adjust the crop area"
},
"background": {
"title": "Background",
"image": "Image",
"color": "Color",
"gradient": "Gradient",
"uploadCustom": "Upload Custom",
"uploadSuccess": "Custom image uploaded successfully!",
"uploadError": "Please upload a JPG or JPEG image file."
},
"export": {
"mp4": "MP4",
"gif": "GIF",
"quality": {
"low": "Low",
"medium": "Medium",
"high": "High"
},
"loop": "Loop",
"outputDimensions": "Output: {{dimensions}}px",
"loadProject": "Load Project",
"saveProject": "Save Project",
"exportVideo": "Export {{format}}",
"reportBug": "Report Bug",
"starOnGithub": "Star on GitHub"
}
}
+16 -1
View File
@@ -1 +1,16 @@
{}
{
"actions": {
"addZoom": "Add Zoom",
"addTrim": "Add Trim",
"addSpeed": "Add Speed",
"addAnnotation": "Add Annotation",
"addKeyframe": "Add Keyframe",
"deleteSelected": "Delete Selected",
"playPause": "Play / Pause",
"cycleForward": "Cycle Annotations Forward",
"cycleBackward": "Cycle Annotations Backward",
"deleteSelectedAlt": "Delete Selected (alt)",
"panTimeline": "Pan Timeline",
"zoomTimeline": "Zoom Timeline"
}
}
+38 -1
View File
@@ -1 +1,38 @@
{}
{
"zoom": {
"cannotPlace": "Cannot place zoom here",
"existsOrNoSpace": "Zoom already exists at this location or not enough space available.",
"suggestHandlerUnavailable": "Zoom suggestion handler unavailable",
"noTelemetry": "No cursor telemetry available",
"recordFirst": "Record a screencast first to generate cursor-based suggestions.",
"noUsableTelemetry": "No usable cursor telemetry",
"notEnoughMovement": "The recording does not include enough cursor movement data.",
"noInteractionMoments": "No clear interaction moments found",
"tryRecording": "Try a recording with pauses or clicks around important actions.",
"noAutoZoomSlots": "No auto-zoom slots available",
"dwellPointsOverlap": "Detected dwell points overlap existing zoom regions.",
"addedSuggestions": "Added {{count}} interaction-based zoom suggestion(s)",
"label": "Zoom {{index}}",
"addZoom": "Add Zoom (Z)",
"suggestZooms": "Suggest Zooms from Cursor"
},
"trim": {
"cannotPlace": "Cannot place trim here",
"existsOrNoSpace": "Trim already exists at this location or not enough space available.",
"label": "Trim {{index}}",
"addTrim": "Add Trim (T)"
},
"speed": {
"cannotPlace": "Cannot place speed here",
"existsOrNoSpace": "Speed region already exists at this location or not enough space available.",
"label": "Speed"
},
"annotation": {
"label": "Annotation",
"image": "Image",
"addAnnotation": "Add Annotation (A)"
},
"addSpeed": "Add Speed (S)",
"resizeLeft": "Resize left",
"resizeRight": "Resize right"
}
+17 -6
View File
@@ -1,7 +1,18 @@
{
"app": {
"name": "Recordly",
"editorTitle": "Editor de Recordly",
"subtitle": "Grabacion de pantalla y edicion"
}
}
"app": {
"name": "Recordly",
"editorTitle": "Editor de Recordly",
"subtitle": "Grabación de pantalla y edición"
},
"actions": {
"cancel": "Cancelar",
"save": "Guardar",
"delete": "Eliminar",
"done": "Hecho"
},
"errors": {
"invalidFileType": "Tipo de archivo inválido",
"failedToUploadImage": "Error al subir la imagen",
"fileReadError": "Hubo un error al leer el archivo."
}
}
+61 -1
View File
@@ -1 +1,61 @@
{}
{
"export": {
"pleaseTryAgain": "Por favor inténtalo de nuevo",
"compilingGifProgress": "Compilando GIF... {{progress}}%",
"compilingGifWait": "Compilando GIF... Esto puede tardar un momento",
"takeMoment": "Esto puede tardar un momento...",
"exportFailed": "Error en la exportación",
"compilingGifTitle": "Compilando GIF",
"exportingFormat": "Exportando {{format}}",
"exportComplete": "Exportación completada",
"formatReady": "Tu {{format}} está listo",
"showInFolder": "Mostrar en carpeta",
"compiling": "Compilando",
"renderingFrames": "Renderizando cuadros",
"processing": "Procesando...",
"status": "Estado",
"format": "Formato",
"compilingStatus": "Compilando...",
"frames": "Cuadros",
"cancelExport": "Cancelar exportación",
"savedSuccess": "¡{{format}} guardado exitosamente!"
},
"addFont": {
"title": "Agregar fuente de Google",
"heading": "Agregar fuente de Google",
"description": "Agrega una fuente personalizada de Google Fonts para usar en tus anotaciones.",
"urlLabel": "URL de importación de Google Fonts",
"urlPlaceholder": "https://fonts.googleapis.com/css2?family=Roboto&display=swap",
"urlHelp": "Obtén esto de Google Fonts: Selecciona una fuente → Haz clic en \"Obtener fuente\" → Copia la URL de @import",
"nameLabel": "Nombre para mostrar",
"namePlaceholder": "Mi fuente personalizada",
"nameHelp": "Así aparecerá la fuente en el selector de fuentes",
"adding": "Agregando...",
"addFont": "Agregar fuente",
"enterUrl": "Por favor ingresa una URL de importación de Google Fonts",
"invalidUrl": "Por favor ingresa una URL válida de Google Fonts",
"enterName": "Por favor ingresa un nombre de fuente",
"extractFailed": "No se pudo extraer el nombre de la familia de fuentes de la URL",
"addSuccess": "Fuente \"{{name}}\" agregada exitosamente",
"addFailed": "Error al agregar la fuente",
"loadTimeout": "La fuente tardó demasiado en cargar. Por favor verifica la URL e inténtalo de nuevo.",
"loadFailed": "No se pudo cargar la fuente. Por favor verifica que la URL de Google Fonts sea correcta."
},
"shortcutsConfig": {
"title": "Atajos de teclado",
"configurable": "Configurable",
"fixed": "Fijo",
"pressEscToCancel": "Presiona Esc para cancelar",
"clickToChange": "Haz clic para cambiar",
"pressAKey": "Presiona una tecla…",
"alreadyUsedBy": "Ya está en uso por <strong>{{action}}</strong>",
"swap": "Intercambiar",
"reserved": "Este atajo está reservado para \"{{label}}\" y no se puede reasignar.",
"saved": "Atajos de teclado guardados",
"resetNotice": "Restablecer a atajos predeterminados — haz clic en Guardar para aplicar",
"instructions": "Haz clic en un atajo y luego presiona la nueva combinación de teclas. Presiona Esc para cancelar.",
"resetToDefaults": "Restablecer valores predeterminados",
"cancel": "Cancelar",
"save": "Guardar"
}
}
+91 -1
View File
@@ -1 +1,91 @@
{}
{
"playback": {
"play": "Reproducir",
"pause": "Pausar"
},
"annotations": {
"settings": "Configuración de anotaciones",
"active": "Activo",
"text": "Texto",
"image": "Imagen",
"arrow": "Flecha",
"textContent": "Contenido de texto",
"textPlaceholder": "Ingresa tu texto...",
"fontStyle": "Estilo de fuente",
"selectStyle": "Seleccionar estilo",
"size": "Tamaño",
"toggleBold": "Alternar negrita",
"toggleItalic": "Alternar cursiva",
"toggleUnderline": "Alternar subrayado",
"alignLeft": "Alinear a la izquierda",
"alignCenter": "Alinear al centro",
"alignRight": "Alinear a la derecha",
"textColor": "Color de texto",
"background": "Fondo",
"none": "Ninguno",
"clearBackground": "Borrar fondo",
"uploadImage": "Subir imagen",
"supportedFormats": "Formatos compatibles: JPG, PNG, GIF, WebP",
"arrowDirection": "Dirección de flecha",
"strokeWidth": "Ancho de trazo: {{width}}px",
"arrowColor": "Color de flecha",
"deleteAnnotation": "Eliminar anotación",
"shortcutsAndTips": "Atajos y consejos",
"tipSelectAnnotation": "Mueve el cabezal de reproducción a la sección de anotación superpuesta y selecciona un elemento.",
"tipCycleForward": "Usa Tab para recorrer los elementos superpuestos.",
"tipCycleBackward": "Usa Shift+Tab para recorrer hacia atrás.",
"imageUploadSuccess": "¡Imagen subida exitosamente!",
"imageUploadError": "Por favor sube un archivo de imagen JPG, PNG, GIF o WebP."
},
"fontStyles": {
"classic": "Clásico",
"editor": "Editor",
"strong": "Fuerte",
"typewriter": "Máquina de escribir",
"deco": "Deco",
"simple": "Simple",
"modern": "Moderno",
"clean": "Limpio"
},
"format": {
"mp4Video": "Video MP4",
"mp4Description": "Archivo de video de alta calidad",
"gifAnimation": "Animación GIF",
"gifDescription": "Imagen animada para compartir"
},
"gifOptions": {
"frameRate": "Velocidad de cuadros",
"outputSize": "Tamaño de salida",
"outputDimensions": "Salida: {{width}} × {{height}}px",
"loopAnimation": "Animación en bucle",
"loopDescription": "El GIF se reproducirá continuamente"
},
"tutorial": {
"howTrimmingWorks": "Cómo funciona el recorte",
"title": "Cómo Funciona el Recorte",
"understanding": "Comprende cómo eliminar las partes no deseadas de tu video.",
"descriptionP1": "La herramienta de recorte funciona definiendo los segmentos que deseas",
"descriptionRemove": "eliminar",
"descriptionP2": "de tu video.",
"descriptionP3": "Cualquier parte de la línea de tiempo cubierta por un segmento de recorte rojo será eliminada al exportar.",
"visualExample": "Ejemplo visual",
"removed": "ELIMINADO",
"kept": "Conservado",
"finalVideo": "Video final",
"part": "Parte {{number}}",
"addTrimStep": "1. Agregar recorte",
"addTrimDesc": "Presiona T o haz clic en el ícono de tijeras para marcar una sección para eliminar.",
"adjustStep": "2. Ajustar",
"adjustDesc": "Arrastra los bordes de la región roja para cubrir exactamente lo que deseas eliminar."
},
"keyboardShortcuts": {
"title": "Atajos de teclado",
"customizeTooltip": "Personalizar atajos",
"customize": "Personalizar",
"panTimeline": "Desplazar línea de tiempo",
"zoomTimeline": "Zoom en línea de tiempo",
"cycleAnnotations": "Recorrer anotaciones",
"tab": "Tab"
},
"openRecordingsFolder": "Abrir carpeta de grabaciones"
}
+36 -1
View File
@@ -1 +1,36 @@
{}
{
"recording": {
"disableSystemAudio": "Desactivar audio del sistema",
"enableSystemAudio": "Activar audio del sistema",
"disableMicrophone": "Desactivar micrófono",
"enableMicrophone": "Activar micrófono",
"record": "Grabar",
"recordingFolder": "Carpeta de grabaciones: {{path}}",
"chooseRecordingsFolder": "Elegir carpeta de grabaciones",
"folderPath": "Ruta: /{{name}}/",
"openVideoFile": "Abrir archivo de video",
"openProject": "Abrir proyecto",
"hideHud": "Ocultar HUD",
"closeApp": "Cerrar aplicación"
},
"sourceSelector": {
"loadingSources": "Cargando fuentes...",
"screens": "Pantallas",
"windows": "Ventanas",
"windowsNote": "Solo se pueden grabar las ventanas visibles (no minimizadas).",
"windowPlaceholder": "Ventana",
"cancel": "Cancelar",
"share": "Compartir"
},
"permissions": {
"screenRecordingNeeded": "Recordly needs Screen Recording permission before you start. System Settings has been opened. After enabling it, quit and reopen Recordly.",
"screenRecordingMissing": "Screen Recording permission is still missing. System Settings has been opened again. Enable it, then quit and reopen Recordly before recording.",
"accessibilityNeeded": "Recordly also needs Accessibility permission for cursor tracking. System Settings has been opened. After enabling it, quit and reopen Recordly.",
"accessibilityMissing": "Accessibility permission is still missing. System Settings has been opened again. Enable it, then quit and reopen Recordly before recording.",
"selectSource": "Por favor selecciona una fuente para grabar",
"systemAudioUnavailable": "El audio del sistema no está disponible para esta fuente. La grabación continuará sin audio del sistema.",
"microphoneDenied": "Se denegó el acceso al micrófono. La grabación continuará sin audio del micrófono.",
"failedToStart": "Error al iniciar la grabación: {{error}}",
"failedToStartGeneric": "Error al iniciar la grabación"
}
}
+60 -1
View File
@@ -1 +1,60 @@
{}
{
"zoom": {
"level": "Nivel de zoom",
"selectRegion": "Selecciona una región de zoom para ajustar",
"deleteZoom": "Eliminar zoom"
},
"trim": {
"deleteRegion": "Eliminar región de recorte"
},
"speed": {
"playbackSpeed": "Velocidad de reproducción",
"selectRegion": "Selecciona una región de velocidad para ajustar",
"deleteRegion": "Eliminar región de velocidad"
},
"effects": {
"title": "Efectos de video",
"showCursor": "Mostrar cursor",
"loopCursor": "Cursor en bucle",
"backgroundBlur": "Desenfoque de fondo",
"zoomMotionBlur": "Desenfoque de movimiento del zoom",
"connectZooms": "Conectar zooms",
"cursorSize": "Tamaño del cursor",
"cursorSmoothing": "Suavizado del cursor",
"off": "Desactivado",
"cursorMotionBlur": "Desenfoque de movimiento del cursor",
"cursorClickBounce": "Rebote de clic del cursor",
"shadow": "Sombra",
"roundness": "Redondez",
"padding": "Relleno"
},
"crop": {
"title": "Recortar video",
"instruction": "Arrastra cada lado para ajustar el área de recorte"
},
"background": {
"title": "Fondo",
"image": "Imagen",
"color": "Color",
"gradient": "Degradado",
"uploadCustom": "Subir personalizado",
"uploadSuccess": "¡Imagen personalizada subida exitosamente!",
"uploadError": "Por favor sube un archivo de imagen JPG o JPEG."
},
"export": {
"mp4": "MP4",
"gif": "GIF",
"quality": {
"low": "Baja",
"medium": "Media",
"high": "Alta"
},
"loop": "Bucle",
"outputDimensions": "Salida: {{dimensions}}px",
"loadProject": "Cargar proyecto",
"saveProject": "Guardar proyecto",
"exportVideo": "Exportar {{format}}",
"reportBug": "Reportar error",
"starOnGithub": "Estrella en GitHub"
}
}
+16 -1
View File
@@ -1 +1,16 @@
{}
{
"actions": {
"addZoom": "Agregar Zoom",
"addTrim": "Agregar Recorte",
"addSpeed": "Agregar Velocidad",
"addAnnotation": "Agregar Anotación",
"addKeyframe": "Agregar Fotograma clave",
"deleteSelected": "Eliminar seleccionado",
"playPause": "Reproducir / Pausar",
"cycleForward": "Recorrer anotaciones hacia adelante",
"cycleBackward": "Recorrer anotaciones hacia atrás",
"deleteSelectedAlt": "Eliminar seleccionado (alt)",
"panTimeline": "Desplazar línea de tiempo",
"zoomTimeline": "Zoom en línea de tiempo"
}
}
+38 -1
View File
@@ -1 +1,38 @@
{}
{
"zoom": {
"cannotPlace": "No se puede colocar zoom aquí",
"existsOrNoSpace": "Ya existe un zoom en esta ubicación o no hay suficiente espacio.",
"suggestHandlerUnavailable": "Manejador de sugerencias de zoom no disponible",
"noTelemetry": "No hay telemetría de cursor disponible",
"recordFirst": "Graba una captura de pantalla primero para generar sugerencias basadas en el cursor.",
"noUsableTelemetry": "No hay telemetría de cursor utilizable",
"notEnoughMovement": "La grabación no incluye suficientes datos de movimiento del cursor.",
"noInteractionMoments": "No se encontraron momentos de interacción claros",
"tryRecording": "Intenta una grabación con pausas o clics alrededor de acciones importantes.",
"noAutoZoomSlots": "No hay espacios de auto-zoom disponibles",
"dwellPointsOverlap": "Los puntos de permanencia detectados se superponen con regiones de zoom existentes.",
"addedSuggestions": "Se agregaron {{count}} sugerencia(s) de zoom basadas en interacción",
"label": "Zoom {{index}}",
"addZoom": "Agregar Zoom (Z)",
"suggestZooms": "Sugerir zooms desde cursor"
},
"trim": {
"cannotPlace": "No se puede colocar recorte aquí",
"existsOrNoSpace": "Ya existe un recorte en esta ubicación o no hay suficiente espacio.",
"label": "Recorte {{index}}",
"addTrim": "Agregar Recorte (T)"
},
"speed": {
"cannotPlace": "No se puede colocar velocidad aquí",
"existsOrNoSpace": "Ya existe una región de velocidad en esta ubicación o no hay suficiente espacio.",
"label": "Velocidad"
},
"annotation": {
"label": "Anotación",
"image": "Imagen",
"addAnnotation": "Agregar Anotación (A)"
},
"addSpeed": "Agregar Velocidad (S)",
"resizeLeft": "Redimensionar izquierda",
"resizeRight": "Redimensionar derecha"
}
+18 -1
View File
@@ -1 +1,18 @@
{}
{
"app": {
"name": "Recordly",
"editorTitle": "Recordly 编辑器",
"subtitle": "屏幕录制与编辑"
},
"actions": {
"cancel": "取消",
"save": "保存",
"delete": "删除",
"done": "完成"
},
"errors": {
"invalidFileType": "无效的文件类型",
"failedToUploadImage": "上传图片失败",
"fileReadError": "读取文件时出错。"
}
}
+61 -1
View File
@@ -1 +1,61 @@
{}
{
"export": {
"pleaseTryAgain": "请重试",
"compilingGifProgress": "正在编译 GIF... {{progress}}%",
"compilingGifWait": "正在编译 GIF... 这可能需要一些时间",
"takeMoment": "这可能需要一点时间...",
"exportFailed": "导出失败",
"compilingGifTitle": "正在编译 GIF",
"exportingFormat": "正在导出 {{format}}",
"exportComplete": "导出完成",
"formatReady": "您的 {{format}} 已准备就绪",
"showInFolder": "在文件夹中显示",
"compiling": "正在编译",
"renderingFrames": "正在渲染帧",
"processing": "正在处理...",
"status": "状态",
"format": "格式",
"compilingStatus": "正在编译...",
"frames": "帧",
"cancelExport": "取消导出",
"savedSuccess": "{{format}} 保存成功!"
},
"addFont": {
"title": "添加 Google 字体",
"heading": "添加 Google 字体",
"description": "从 Google Fonts 添加自定义字体用于注释。",
"urlLabel": "Google Fonts 导入 URL",
"urlPlaceholder": "https://fonts.googleapis.com/css2?family=Roboto&display=swap",
"urlHelp": "从 Google Fonts 获取:选择字体 → 点击「获取字体」→ 复制 @import URL",
"nameLabel": "显示名称",
"namePlaceholder": "我的自定义字体",
"nameHelp": "此名称将显示在字体选择器中",
"adding": "正在添加...",
"addFont": "添加字体",
"enterUrl": "请输入 Google Fonts 导入 URL",
"invalidUrl": "请输入有效的 Google Fonts URL",
"enterName": "请输入字体名称",
"extractFailed": "无法从 URL 提取字体系列名称",
"addSuccess": "字体 \"{{name}}\" 添加成功",
"addFailed": "添加字体失败",
"loadTimeout": "字体加载超时。请检查 URL 后重试。",
"loadFailed": "无法加载字体。请确认 Google Fonts URL 是否正确。"
},
"shortcutsConfig": {
"title": "键盘快捷键",
"configurable": "可配置",
"fixed": "固定",
"pressEscToCancel": "按 Esc 取消",
"clickToChange": "点击以更改",
"pressAKey": "按下按键…",
"alreadyUsedBy": "已被 <strong>{{action}}</strong> 使用",
"swap": "交换",
"reserved": "此快捷键已保留给 \"{{label}}\",无法重新分配。",
"saved": "键盘快捷键已保存",
"resetNotice": "已重置为默认快捷键 - 点击保存以应用",
"instructions": "点击快捷键后按下新的组合键。按 Esc 取消。",
"resetToDefaults": "重置为默认",
"cancel": "取消",
"save": "保存"
}
}
+91 -1
View File
@@ -1 +1,91 @@
{}
{
"playback": {
"play": "播放",
"pause": "暂停"
},
"annotations": {
"settings": "注释设置",
"active": "活动",
"text": "文本",
"image": "图片",
"arrow": "箭头",
"textContent": "文本内容",
"textPlaceholder": "输入文本...",
"fontStyle": "字体样式",
"selectStyle": "选择样式",
"size": "大小",
"toggleBold": "切换粗体",
"toggleItalic": "切换斜体",
"toggleUnderline": "切换下划线",
"alignLeft": "左对齐",
"alignCenter": "居中对齐",
"alignRight": "右对齐",
"textColor": "文本颜色",
"background": "背景",
"none": "无",
"clearBackground": "清除背景",
"uploadImage": "上传图片",
"supportedFormats": "支持格式:JPG、PNG、GIF、WebP",
"arrowDirection": "箭头方向",
"strokeWidth": "描边宽度:{{width}}px",
"arrowColor": "箭头颜色",
"deleteAnnotation": "删除注释",
"shortcutsAndTips": "快捷键与提示",
"tipSelectAnnotation": "将播放头移动到注释重叠区域并选择项目。",
"tipCycleForward": "使用 Tab 循环切换重叠项目。",
"tipCycleBackward": "使用 Shift+Tab 反向循环切换。",
"imageUploadSuccess": "图片上传成功!",
"imageUploadError": "请上传 JPG、PNG、GIF 或 WebP 图片文件。"
},
"fontStyles": {
"classic": "经典",
"editor": "编辑器",
"strong": "加粗",
"typewriter": "打字机",
"deco": "装饰",
"simple": "简约",
"modern": "现代",
"clean": "清爽"
},
"format": {
"mp4Video": "MP4 视频",
"mp4Description": "高质量视频文件",
"gifAnimation": "GIF 动画",
"gifDescription": "可分享的动态图片"
},
"gifOptions": {
"frameRate": "帧率",
"outputSize": "输出尺寸",
"outputDimensions": "输出:{{width}} × {{height}}px",
"loopAnimation": "循环动画",
"loopDescription": "GIF 将持续播放"
},
"tutorial": {
"howTrimmingWorks": "修剪的工作方式",
"title": "修剪的工作方式",
"understanding": "了解如何裁剪视频中不需要的部分。",
"descriptionP1": "修剪工具通过定义要",
"descriptionRemove": "移除",
"descriptionP2": "的片段来工作。",
"descriptionP3": "时间线上被红色修剪区域覆盖的部分将在导出时被剪掉。",
"visualExample": "视觉示例",
"removed": "已移除",
"kept": "保留",
"finalVideo": "最终视频",
"part": "第 {{number}} 部分",
"addTrimStep": "1. 添加修剪",
"addTrimDesc": "按 T 或点击剪刀图标标记要移除的部分。",
"adjustStep": "2. 调整",
"adjustDesc": "拖动红色区域的边缘,精确覆盖要剪掉的部分。"
},
"keyboardShortcuts": {
"title": "键盘快捷键",
"customizeTooltip": "自定义快捷键",
"customize": "自定义",
"panTimeline": "平移时间线",
"zoomTimeline": "缩放时间线",
"cycleAnnotations": "循环切换注释",
"tab": "Tab"
},
"openRecordingsFolder": "打开录制文件夹"
}
+36 -1
View File
@@ -1 +1,36 @@
{}
{
"recording": {
"disableSystemAudio": "禁用系统音频",
"enableSystemAudio": "启用系统音频",
"disableMicrophone": "禁用麦克风",
"enableMicrophone": "启用麦克风",
"record": "录制",
"recordingFolder": "录制文件夹:{{path}}",
"chooseRecordingsFolder": "选择录制文件夹",
"folderPath": "路径:/{{name}}/",
"openVideoFile": "打开视频文件",
"openProject": "打开项目",
"hideHud": "隐藏 HUD",
"closeApp": "关闭应用"
},
"sourceSelector": {
"loadingSources": "正在加载源...",
"screens": "屏幕",
"windows": "窗口",
"windowsNote": "仅可录制可见(非最小化)窗口。",
"windowPlaceholder": "窗口",
"cancel": "取消",
"share": "共享"
},
"permissions": {
"screenRecordingNeeded": "Recordly 需要屏幕录制权限才能开始。系统设置已打开。启用后请退出并重新打开 Recordly。",
"screenRecordingMissing": "屏幕录制权限仍然缺失。系统设置已再次打开。请启用权限,然后退出并重新打开 Recordly。",
"accessibilityNeeded": "Recordly 还需要辅助功能权限以跟踪光标。系统设置已打开。启用后请退出并重新打开 Recordly。",
"accessibilityMissing": "辅助功能权限仍然缺失。系统设置已再次打开。请启用权限,然后退出并重新打开 Recordly。",
"selectSource": "请选择要录制的源",
"systemAudioUnavailable": "此源不支持系统音频。将继续录制但不包含系统音频。",
"microphoneDenied": "麦克风访问被拒绝。将继续录制但不包含麦克风音频。",
"failedToStart": "录制启动失败:{{error}}",
"failedToStartGeneric": "录制启动失败"
}
}
+60 -1
View File
@@ -1 +1,60 @@
{}
{
"zoom": {
"level": "缩放级别",
"selectRegion": "选择缩放区域以调整",
"deleteZoom": "删除缩放"
},
"trim": {
"deleteRegion": "删除修剪区域"
},
"speed": {
"playbackSpeed": "播放速度",
"selectRegion": "选择变速区域以调整",
"deleteRegion": "删除变速区域"
},
"effects": {
"title": "视频效果",
"showCursor": "显示光标",
"loopCursor": "循环光标",
"backgroundBlur": "背景模糊",
"zoomMotionBlur": "缩放运动模糊",
"connectZooms": "连接缩放",
"cursorSize": "光标大小",
"cursorSmoothing": "光标平滑",
"off": "关",
"cursorMotionBlur": "光标运动模糊",
"cursorClickBounce": "光标点击弹跳",
"shadow": "阴影",
"roundness": "圆角",
"padding": "内边距"
},
"crop": {
"title": "裁剪视频",
"instruction": "拖动各边以调整裁剪区域"
},
"background": {
"title": "背景",
"image": "图片",
"color": "颜色",
"gradient": "渐变",
"uploadCustom": "上传自定义",
"uploadSuccess": "自定义图片上传成功!",
"uploadError": "请上传 JPG 或 JPEG 图片文件。"
},
"export": {
"mp4": "MP4",
"gif": "GIF",
"quality": {
"low": "低",
"medium": "中",
"high": "高"
},
"loop": "循环",
"outputDimensions": "输出:{{dimensions}}px",
"loadProject": "加载项目",
"saveProject": "保存项目",
"exportVideo": "导出{{format}}",
"reportBug": "报告问题",
"starOnGithub": "在 GitHub 上加星"
}
}
+16 -1
View File
@@ -1 +1,16 @@
{}
{
"actions": {
"addZoom": "添加缩放",
"addTrim": "添加修剪",
"addSpeed": "添加变速",
"addAnnotation": "添加注释",
"addKeyframe": "添加关键帧",
"deleteSelected": "删除选中",
"playPause": "播放 / 暂停",
"cycleForward": "向前循环切换注释",
"cycleBackward": "向后循环切换注释",
"deleteSelectedAlt": "删除选中(替代)",
"panTimeline": "平移时间线",
"zoomTimeline": "缩放时间线"
}
}
+38 -1
View File
@@ -1 +1,38 @@
{}
{
"zoom": {
"cannotPlace": "无法在此处放置缩放",
"existsOrNoSpace": "此位置已存在缩放或空间不足。",
"suggestHandlerUnavailable": "缩放建议处理不可用",
"noTelemetry": "无光标遥测数据",
"recordFirst": "请先录制屏幕以生成基于光标的建议。",
"noUsableTelemetry": "无可用的光标遥测数据",
"notEnoughMovement": "录制中未包含足够的光标移动数据。",
"noInteractionMoments": "未找到明显的交互时刻",
"tryRecording": "尝试在关键操作附近有停顿或点击的录制。",
"noAutoZoomSlots": "没有可用的自动缩放位置",
"dwellPointsOverlap": "检测到的停留点与现有缩放区域重叠。",
"addedSuggestions": "已添加 {{count}} 个基于交互的缩放建议",
"label": "缩放 {{index}}",
"addZoom": "添加缩放 (Z)",
"suggestZooms": "从光标建议缩放"
},
"trim": {
"cannotPlace": "无法在此处放置修剪",
"existsOrNoSpace": "此位置已存在修剪或空间不足。",
"label": "修剪 {{index}}",
"addTrim": "添加修剪 (T)"
},
"speed": {
"cannotPlace": "无法在此处放置变速",
"existsOrNoSpace": "此位置已存在变速区域或空间不足。",
"label": "变速"
},
"annotation": {
"label": "注释",
"image": "图片",
"addAnnotation": "添加注释 (A)"
},
"addSpeed": "添加变速 (S)",
"resizeLeft": "向左调整",
"resizeRight": "向右调整"
}