mirror of
https://github.com/siddharthvaddem/openscreen.git
synced 2026-11-01 20:32:20 +08:00
fix: copy/paste notification
This commit is contained in:
Generated
-1248
File diff suppressed because it is too large
Load Diff
@@ -13,6 +13,7 @@ import {
|
||||
} from "@/components/ui/dialog";
|
||||
import { useI18n, useScopedT } from "@/contexts/I18nContext";
|
||||
import { useShortcuts } from "@/contexts/ShortcutsContext";
|
||||
import { useClipboardFeedback } from "@/hooks/useClipboardFeedback";
|
||||
import { INITIAL_EDITOR_STATE, useEditorHistory } from "@/hooks/useEditorHistory";
|
||||
import { type Locale } from "@/i18n/config";
|
||||
import { getAvailableLocales, getLocaleName } from "@/i18n/loader";
|
||||
@@ -166,6 +167,7 @@ export default function VideoEditor() {
|
||||
const nextSpeedIdRef = useRef(1);
|
||||
|
||||
const { shortcuts, isMac } = useShortcuts();
|
||||
const { notifyCopied, notifyPasted } = useClipboardFeedback();
|
||||
const t = useScopedT("editor");
|
||||
const ts = useScopedT("settings");
|
||||
const tt = useScopedT("timeline");
|
||||
@@ -1032,6 +1034,7 @@ export default function VideoEditor() {
|
||||
const region = annotationOnlyRegions.find((item) => item.id === selectedAnnotationId);
|
||||
if (region) {
|
||||
setTimelineClipboard({ kind: "annotation", region: cloneAnnotationRegion(region) });
|
||||
notifyCopied();
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -1040,6 +1043,7 @@ export default function VideoEditor() {
|
||||
const region = blurRegions.find((item) => item.id === selectedBlurId);
|
||||
if (region) {
|
||||
setTimelineClipboard({ kind: "blur", region: cloneAnnotationRegion(region) });
|
||||
notifyCopied();
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -1048,6 +1052,7 @@ export default function VideoEditor() {
|
||||
const region = zoomRegions.find((item) => item.id === selectedZoomId);
|
||||
if (region) {
|
||||
setTimelineClipboard({ kind: "zoom", region: { ...region, focus: { ...region.focus } } });
|
||||
notifyCopied();
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -1056,6 +1061,7 @@ export default function VideoEditor() {
|
||||
const region = trimRegions.find((item) => item.id === selectedTrimId);
|
||||
if (region) {
|
||||
setTimelineClipboard({ kind: "trim", region: { ...region } });
|
||||
notifyCopied();
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -1064,6 +1070,7 @@ export default function VideoEditor() {
|
||||
const region = speedRegions.find((item) => item.id === selectedSpeedId);
|
||||
if (region) {
|
||||
setTimelineClipboard({ kind: "speed", region: { ...region } });
|
||||
notifyCopied();
|
||||
}
|
||||
}
|
||||
}, [
|
||||
@@ -1077,6 +1084,7 @@ export default function VideoEditor() {
|
||||
zoomRegions,
|
||||
trimRegions,
|
||||
speedRegions,
|
||||
notifyCopied,
|
||||
]);
|
||||
|
||||
const handlePasteTimelineItem = useCallback(() => {
|
||||
@@ -1125,6 +1133,7 @@ export default function VideoEditor() {
|
||||
config.pushRegion(config.createRegion(id));
|
||||
clearTimelineSelection();
|
||||
config.selectRegion(id);
|
||||
notifyPasted();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1155,6 +1164,7 @@ export default function VideoEditor() {
|
||||
setSelectedZoomId(null);
|
||||
setSelectedTrimId(null);
|
||||
setSelectedSpeedId(null);
|
||||
notifyPasted();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1230,6 +1240,7 @@ export default function VideoEditor() {
|
||||
trimRegions,
|
||||
speedRegions,
|
||||
tt,
|
||||
notifyPasted,
|
||||
]);
|
||||
|
||||
const handleAnnotationDelete = useCallback(
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import { useCallback } from "react";
|
||||
import { toast } from "sonner";
|
||||
import { useScopedT } from "@/contexts/I18nContext";
|
||||
|
||||
export type ClipboardAction = "copy" | "paste";
|
||||
|
||||
export function useClipboardFeedback() {
|
||||
const t = useScopedT("timeline");
|
||||
|
||||
const notifyClipboardAction = useCallback(
|
||||
(action: ClipboardAction) => {
|
||||
toast.success(action === "copy" ? t("feedback.copied") : t("feedback.pasted"));
|
||||
},
|
||||
[t],
|
||||
);
|
||||
|
||||
const notifyCopied = useCallback(() => {
|
||||
notifyClipboardAction("copy");
|
||||
}, [notifyClipboardAction]);
|
||||
|
||||
const notifyPasted = useCallback(() => {
|
||||
notifyClipboardAction("paste");
|
||||
}, [notifyClipboardAction]);
|
||||
|
||||
return {
|
||||
notifyClipboardAction,
|
||||
notifyCopied,
|
||||
notifyPasted,
|
||||
};
|
||||
}
|
||||
@@ -49,5 +49,9 @@
|
||||
"success": {
|
||||
"addedZoomSuggestions": "Added {{count}} cursor-based zoom suggestion",
|
||||
"addedZoomSuggestionsPlural": "Added {{count}} cursor-based zoom suggestions"
|
||||
},
|
||||
"feedback": {
|
||||
"copied": "Copied!",
|
||||
"pasted": "Pasted!"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,16 +3,16 @@
|
||||
"addZoom": "Agregar zoom (Z)",
|
||||
"suggestZooms": "Sugerir zooms desde el cursor",
|
||||
"addTrim": "Agregar recorte (T)",
|
||||
"addAnnotation": "Agregar anotación (A)",
|
||||
"addAnnotation": "Agregar anotación (A)",
|
||||
"addSpeed": "Agregar velocidad (S)",
|
||||
"addBlur": "Agregar desenfoque (B)"
|
||||
},
|
||||
"hints": {
|
||||
"pressZoom": "Presiona Z para agregar zoom",
|
||||
"pressTrim": "Presiona T para agregar recorte",
|
||||
"pressAnnotation": "Presiona A para agregar anotación",
|
||||
"pressAnnotation": "Presiona A para agregar anotación",
|
||||
"pressSpeed": "Presiona S para agregar velocidad",
|
||||
"pressBlur": "Presiona B para agregar una región de desenfoque"
|
||||
"pressBlur": "Presiona B para agregar una región de desenfoque"
|
||||
},
|
||||
"labels": {
|
||||
"pan": "Desplazar",
|
||||
@@ -20,9 +20,9 @@
|
||||
"zoomItem": "Zoom {{index}}",
|
||||
"trimItem": "Recorte {{index}}",
|
||||
"speedItem": "Velocidad {{index}}",
|
||||
"annotationItem": "Anotación",
|
||||
"annotationItem": "Anotación",
|
||||
"imageItem": "Imagen",
|
||||
"emptyText": "Texto vacío",
|
||||
"emptyText": "Texto vacÃo",
|
||||
"blurItem": "Desenfoque {{index}}"
|
||||
},
|
||||
"emptyState": {
|
||||
@@ -30,24 +30,28 @@
|
||||
"dragAndDrop": "Arrastra y suelta un video para comenzar a editar"
|
||||
},
|
||||
"errors": {
|
||||
"cannotPlaceZoom": "No se puede colocar el zoom aquí",
|
||||
"zoomExistsAtLocation": "Ya existe un zoom en esta ubicación o no hay suficiente espacio disponible.",
|
||||
"zoomSuggestionUnavailable": "El controlador de sugerencias de zoom no está disponible",
|
||||
"noCursorTelemetry": "No hay telemetría de cursor disponible",
|
||||
"cannotPlaceZoom": "No se puede colocar el zoom aquÃ",
|
||||
"zoomExistsAtLocation": "Ya existe un zoom en esta ubicación o no hay suficiente espacio disponible.",
|
||||
"zoomSuggestionUnavailable": "El controlador de sugerencias de zoom no está disponible",
|
||||
"noCursorTelemetry": "No hay telemetrÃa de cursor disponible",
|
||||
"noCursorTelemetryDescription": "Graba una captura de pantalla primero para generar sugerencias basadas en el cursor.",
|
||||
"noUsableTelemetry": "No hay telemetría de cursor utilizable",
|
||||
"noUsableTelemetryDescription": "La grabación no incluye suficientes datos de movimiento del cursor.",
|
||||
"noUsableTelemetry": "No hay telemetrÃa de cursor utilizable",
|
||||
"noUsableTelemetryDescription": "La grabación no incluye suficientes datos de movimiento del cursor.",
|
||||
"noDwellMoments": "No se encontraron momentos claros de pausa del cursor",
|
||||
"noDwellMomentsDescription": "Intenta una grabación con pausas más lentas del cursor en acciones importantes.",
|
||||
"noDwellMomentsDescription": "Intenta una grabación con pausas más lentas del cursor en acciones importantes.",
|
||||
"noAutoZoomSlots": "No hay espacios de auto-zoom disponibles",
|
||||
"noAutoZoomSlotsDescription": "Los puntos de pausa detectados se superponen con regiones de zoom existentes.",
|
||||
"cannotPlaceTrim": "No se puede colocar el recorte aquí",
|
||||
"trimExistsAtLocation": "Ya existe un recorte en esta ubicación o no hay suficiente espacio disponible.",
|
||||
"cannotPlaceSpeed": "No se puede colocar la velocidad aquí",
|
||||
"speedExistsAtLocation": "Ya existe una región de velocidad en esta ubicación o no hay suficiente espacio disponible."
|
||||
"cannotPlaceTrim": "No se puede colocar el recorte aquÃ",
|
||||
"trimExistsAtLocation": "Ya existe un recorte en esta ubicación o no hay suficiente espacio disponible.",
|
||||
"cannotPlaceSpeed": "No se puede colocar la velocidad aquÃ",
|
||||
"speedExistsAtLocation": "Ya existe una región de velocidad en esta ubicación o no hay suficiente espacio disponible."
|
||||
},
|
||||
"success": {
|
||||
"addedZoomSuggestions": "Se agregó {{count}} sugerencia de zoom basada en el cursor",
|
||||
"addedZoomSuggestions": "Se agregó {{count}} sugerencia de zoom basada en el cursor",
|
||||
"addedZoomSuggestionsPlural": "Se agregaron {{count}} sugerencias de zoom basadas en el cursor"
|
||||
},
|
||||
"feedback": {
|
||||
"copied": "Copied!",
|
||||
"pasted": "Pasted!"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"buttons": {
|
||||
"addZoom": "Ajouter un zoom (Z)",
|
||||
"suggestZooms": "Suggérer des zooms depuis le curseur",
|
||||
"suggestZooms": "Suggérer des zooms depuis le curseur",
|
||||
"addTrim": "Ajouter une coupe (T)",
|
||||
"addAnnotation": "Ajouter une annotation (A)",
|
||||
"addSpeed": "Ajouter une vitesse (S)",
|
||||
@@ -26,28 +26,32 @@
|
||||
"blurItem": "Flou {{index}}"
|
||||
},
|
||||
"emptyState": {
|
||||
"noVideo": "Aucune vidéo chargée",
|
||||
"dragAndDrop": "Glissez-déposez une vidéo pour commencer à éditer"
|
||||
"noVideo": "Aucune vidéo chargée",
|
||||
"dragAndDrop": "Glissez-déposez une vidéo pour commencer à éditer"
|
||||
},
|
||||
"errors": {
|
||||
"cannotPlaceZoom": "Impossible de placer le zoom ici",
|
||||
"zoomExistsAtLocation": "Un zoom existe déjà à cet emplacement ou l\u0027espace disponible est insuffisant.",
|
||||
"zoomExistsAtLocation": "Un zoom existe déjà à cet emplacement ou l\u0027espace disponible est insuffisant.",
|
||||
"zoomSuggestionUnavailable": "Gestionnaire de suggestions de zoom non disponible",
|
||||
"noCursorTelemetry": "Aucune télémétrie de curseur disponible",
|
||||
"noCursorTelemetryDescription": "Enregistrez d\u0027abord un screencast pour générer des suggestions basées sur le curseur.",
|
||||
"noUsableTelemetry": "Aucune télémétrie de curseur utilisable",
|
||||
"noUsableTelemetryDescription": "L\u0027enregistrement ne contient pas suffisamment de données de mouvement du curseur.",
|
||||
"noDwellMoments": "Aucun moment de pause du curseur trouvé",
|
||||
"noCursorTelemetry": "Aucune télémétrie de curseur disponible",
|
||||
"noCursorTelemetryDescription": "Enregistrez d\u0027abord un screencast pour générer des suggestions basées sur le curseur.",
|
||||
"noUsableTelemetry": "Aucune télémétrie de curseur utilisable",
|
||||
"noUsableTelemetryDescription": "L\u0027enregistrement ne contient pas suffisamment de données de mouvement du curseur.",
|
||||
"noDwellMoments": "Aucun moment de pause du curseur trouvé",
|
||||
"noDwellMomentsDescription": "Essayez un enregistrement avec des pauses plus lentes du curseur sur les actions importantes.",
|
||||
"noAutoZoomSlots": "Aucun emplacement de zoom automatique disponible",
|
||||
"noAutoZoomSlotsDescription": "Les points de pause détectés chevauchent des régions de zoom existantes.",
|
||||
"noAutoZoomSlotsDescription": "Les points de pause détectés chevauchent des régions de zoom existantes.",
|
||||
"cannotPlaceTrim": "Impossible de placer la coupe ici",
|
||||
"trimExistsAtLocation": "Une coupe existe déjà à cet emplacement ou l\u0027espace disponible est insuffisant.",
|
||||
"trimExistsAtLocation": "Une coupe existe déjà à cet emplacement ou l\u0027espace disponible est insuffisant.",
|
||||
"cannotPlaceSpeed": "Impossible de placer la vitesse ici",
|
||||
"speedExistsAtLocation": "Une région de vitesse existe déjà à cet emplacement ou l\u0027espace disponible est insuffisant."
|
||||
"speedExistsAtLocation": "Une région de vitesse existe déjà à cet emplacement ou l\u0027espace disponible est insuffisant."
|
||||
},
|
||||
"success": {
|
||||
"addedZoomSuggestions": "{{count}} suggestion de zoom basée sur le curseur ajoutée",
|
||||
"addedZoomSuggestionsPlural": "{{count}} suggestions de zoom basées sur le curseur ajoutées"
|
||||
"addedZoomSuggestions": "{{count}} suggestion de zoom basée sur le curseur ajoutée",
|
||||
"addedZoomSuggestionsPlural": "{{count}} suggestions de zoom basées sur le curseur ajoutées"
|
||||
},
|
||||
"feedback": {
|
||||
"copied": "Copied!",
|
||||
"pasted": "Pasted!"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,50 +1,54 @@
|
||||
{
|
||||
"buttons": {
|
||||
"addZoom": "줌 추가 (Z)",
|
||||
"suggestZooms": "커서 기반 줌 제안",
|
||||
"addTrim": "트림 추가 (T)",
|
||||
"addAnnotation": "주석 추가 (A)",
|
||||
"addSpeed": "속도 추가 (S)"
|
||||
"addZoom": "줌 추가 (Z)",
|
||||
"suggestZooms": "커서 기반 줌 ì œì•ˆ",
|
||||
"addTrim": "트림 추가 (T)",
|
||||
"addAnnotation": "ì£¼ì„ ì¶”ê°€ (A)",
|
||||
"addSpeed": "ì†ë„ 추가 (S)"
|
||||
},
|
||||
"hints": {
|
||||
"pressZoom": "Z를 눌러 줌 추가",
|
||||
"pressTrim": "T를 눌러 트림 추가",
|
||||
"pressAnnotation": "A를 눌러 주석 추가",
|
||||
"pressSpeed": "S를 눌러 속도 추가"
|
||||
"pressZoom": "Z를 눌러 줌 추가",
|
||||
"pressTrim": "T를 눌러 트림 추가",
|
||||
"pressAnnotation": "A를 눌러 ì£¼ì„ ì¶”ê°€",
|
||||
"pressSpeed": "S를 눌러 ì†ë„ 추가"
|
||||
},
|
||||
"labels": {
|
||||
"pan": "이동",
|
||||
"zoom": "줌",
|
||||
"zoomItem": "줌 {{index}}",
|
||||
"trimItem": "트림 {{index}}",
|
||||
"speedItem": "속도 {{index}}",
|
||||
"annotationItem": "주석",
|
||||
"imageItem": "이미지",
|
||||
"emptyText": "빈 텍스트"
|
||||
"pan": "ì´ë™",
|
||||
"zoom": "줌",
|
||||
"zoomItem": "줌 {{index}}",
|
||||
"trimItem": "트림 {{index}}",
|
||||
"speedItem": "ì†ë„ {{index}}",
|
||||
"annotationItem": "주ì„",
|
||||
"imageItem": "ì´ë¯¸ì§€",
|
||||
"emptyText": "빈 í…스트"
|
||||
},
|
||||
"emptyState": {
|
||||
"noVideo": "불러온 비디오 없음",
|
||||
"dragAndDrop": "비디오를 드래그 앤 드롭해서 편집을 시작하세요"
|
||||
"noVideo": "불러온 비디오 ì—†ìŒ",
|
||||
"dragAndDrop": "비디오를 드래그 앤 드ë¡í•´ì„œ íŽ¸ì§‘ì„ ì‹œìž‘í•˜ì„¸ìš”"
|
||||
},
|
||||
"errors": {
|
||||
"cannotPlaceZoom": "이 위치에 줌을 추가할 수 없습니다",
|
||||
"zoomExistsAtLocation": "이 위치에 이미 줌이 있거나 공간이 부족합니다.",
|
||||
"zoomSuggestionUnavailable": "줌 제안 기능을 사용할 수 없습니다",
|
||||
"noCursorTelemetry": "커서 데이터가 없습니다",
|
||||
"noCursorTelemetryDescription": "커서 기반 제안을 생성하려면 먼저 화면을 녹화해 주세요.",
|
||||
"noUsableTelemetry": "사용 가능한 커서 데이터가 없습니다",
|
||||
"noUsableTelemetryDescription": "녹화에 충분한 커서 이동 데이터가 포함되어 있지 않습니다.",
|
||||
"noDwellMoments": "명확한 커서 정지 구간을 찾을 수 없습니다",
|
||||
"noDwellMomentsDescription": "중요한 동작에서 커서를 천천히 멈추며 녹화해 보세요.",
|
||||
"noAutoZoomSlots": "자동 줌 슬롯이 없습니다",
|
||||
"noAutoZoomSlotsDescription": "감지된 정지 지점이 기존 줌 구간과 겹칩니다.",
|
||||
"cannotPlaceTrim": "이 위치에 트림을 추가할 수 없습니다",
|
||||
"trimExistsAtLocation": "이 위치에 이미 트림이 있거나 공간이 부족합니다.",
|
||||
"cannotPlaceSpeed": "이 위치에 속도를 추가할 수 없습니다",
|
||||
"speedExistsAtLocation": "이 위치에 이미 속도 구간이 있거나 공간이 부족합니다."
|
||||
"cannotPlaceZoom": "ì´ ìœ„ì¹˜ì— ì¤Œì„ ì¶”ê°€í• ìˆ˜ 없습니다",
|
||||
"zoomExistsAtLocation": "ì´ ìœ„ì¹˜ì— ì´ë¯¸ ì¤Œì´ ìžˆê±°ë‚˜ ê³µê°„ì´ ë¶€ì¡±í•©ë‹ˆë‹¤.",
|
||||
"zoomSuggestionUnavailable": "줌 ì œì•ˆ ê¸°ëŠ¥ì„ ì‚¬ìš©í• ìˆ˜ 없습니다",
|
||||
"noCursorTelemetry": "커서 ë°ì´í„°ê°€ 없습니다",
|
||||
"noCursorTelemetryDescription": "커서 기반 ì œì•ˆì„ ìƒì„±í•˜ë ¤ë©´ ë¨¼ì € í™”ë©´ì„ ë…¹í™”í•´ 주세요.",
|
||||
"noUsableTelemetry": "사용 가능한 커서 ë°ì´í„°ê°€ 없습니다",
|
||||
"noUsableTelemetryDescription": "ë…¹í™”ì— ì¶©ë¶„í•œ 커서 ì´ë™ ë°ì´í„°ê°€ í¬í•¨ë˜ì–´ 있지 않습니다.",
|
||||
"noDwellMoments": "명확한 커서 ì •ì§€ êµ¬ê°„ì„ ì°¾ì„ ìˆ˜ 없습니다",
|
||||
"noDwellMomentsDescription": "중요한 ë™ìž‘ì—서 커서를 천천히 멈추며 녹화해 보세요.",
|
||||
"noAutoZoomSlots": "ìžë™ 줌 ìŠ¬ë¡¯ì´ ì—†ìŠµë‹ˆë‹¤",
|
||||
"noAutoZoomSlotsDescription": "ê°ì§€ëœ ì •ì§€ ì§€ì ì´ ê¸°ì¡´ 줌 구간과 겹칩니다.",
|
||||
"cannotPlaceTrim": "ì´ ìœ„ì¹˜ì— íŠ¸ë¦¼ì„ ì¶”ê°€í• ìˆ˜ 없습니다",
|
||||
"trimExistsAtLocation": "ì´ ìœ„ì¹˜ì— ì´ë¯¸ íŠ¸ë¦¼ì´ ìžˆê±°ë‚˜ ê³µê°„ì´ ë¶€ì¡±í•©ë‹ˆë‹¤.",
|
||||
"cannotPlaceSpeed": "ì´ ìœ„ì¹˜ì— ì†ë„를 ì¶”ê°€í• ìˆ˜ 없습니다",
|
||||
"speedExistsAtLocation": "ì´ ìœ„ì¹˜ì— ì´ë¯¸ ì†ë„ êµ¬ê°„ì´ ìžˆê±°ë‚˜ ê³µê°„ì´ ë¶€ì¡±í•©ë‹ˆë‹¤."
|
||||
},
|
||||
"success": {
|
||||
"addedZoomSuggestions": "커서 기반 줌 제안 {{count}}개가 추가되었습니다",
|
||||
"addedZoomSuggestionsPlural": "커서 기반 줌 제안 {{count}}개가 추가되었습니다"
|
||||
"addedZoomSuggestions": "커서 기반 줌 ì œì•ˆ {{count}}개가 추가ë˜ì—ˆìŠµë‹ˆë‹¤",
|
||||
"addedZoomSuggestionsPlural": "커서 기반 줌 ì œì•ˆ {{count}}개가 추가ë˜ì—ˆìŠµë‹ˆë‹¤"
|
||||
},
|
||||
"feedback": {
|
||||
"copied": "Copied!",
|
||||
"pasted": "Pasted!"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,53 +1,57 @@
|
||||
{
|
||||
"buttons": {
|
||||
"addZoom": "Yakınlaştırma Ekle (Z)",
|
||||
"suggestZooms": "İmleçten Yakınlaştırma Öner",
|
||||
"addTrim": "Kırpma Ekle (T)",
|
||||
"addAnnotation": "Açıklama Ekle (A)",
|
||||
"addSpeed": "Hız Ekle (S)",
|
||||
"addBlur": "Bulanık ekle (B)"
|
||||
"addZoom": "Yakınlaştırma Ekle (Z)",
|
||||
"suggestZooms": "İmleçten Yakınlaştırma Öner",
|
||||
"addTrim": "Kırpma Ekle (T)",
|
||||
"addAnnotation": "Açıklama Ekle (A)",
|
||||
"addSpeed": "Hız Ekle (S)",
|
||||
"addBlur": "Bulanık ekle (B)"
|
||||
},
|
||||
"hints": {
|
||||
"pressZoom": "Yakınlaştırma eklemek için Z tuşuna basın",
|
||||
"pressTrim": "Kırpma eklemek için T tuşuna basın",
|
||||
"pressAnnotation": "Açıklama eklemek için A tuşuna basın",
|
||||
"pressSpeed": "Hız eklemek için S tuşuna basın",
|
||||
"pressBlur": "Bulanık bölge eklemek için B tuşuna basın"
|
||||
"pressZoom": "Yakınlaştırma eklemek için Z tuşuna basın",
|
||||
"pressTrim": "Kırpma eklemek için T tuşuna basın",
|
||||
"pressAnnotation": "Açıklama eklemek için A tuşuna basın",
|
||||
"pressSpeed": "Hız eklemek için S tuşuna basın",
|
||||
"pressBlur": "Bulanık bölge eklemek için B tuşuna basın"
|
||||
},
|
||||
"labels": {
|
||||
"pan": "Kaydır",
|
||||
"zoom": "Yakınlaştır",
|
||||
"zoomItem": "Yakınlaştırma {{index}}",
|
||||
"trimItem": "Kırpma {{index}}",
|
||||
"speedItem": "Hız {{index}}",
|
||||
"annotationItem": "Açıklama",
|
||||
"imageItem": "Görüntü",
|
||||
"emptyText": "Boş metin",
|
||||
"blurItem": "Bulanık {{index}}"
|
||||
"pan": "Kaydır",
|
||||
"zoom": "Yakınlaştır",
|
||||
"zoomItem": "Yakınlaştırma {{index}}",
|
||||
"trimItem": "Kırpma {{index}}",
|
||||
"speedItem": "Hız {{index}}",
|
||||
"annotationItem": "Açıklama",
|
||||
"imageItem": "Görüntü",
|
||||
"emptyText": "BoÅŸ metin",
|
||||
"blurItem": "Bulanık {{index}}"
|
||||
},
|
||||
"emptyState": {
|
||||
"noVideo": "Video Yüklenmedi",
|
||||
"dragAndDrop": "Düzenlemeye başlamak için bir video sürükleyip bırakın"
|
||||
"noVideo": "Video Yüklenmedi",
|
||||
"dragAndDrop": "Düzenlemeye başlamak için bir video sürükleyip bırakın"
|
||||
},
|
||||
"errors": {
|
||||
"cannotPlaceZoom": "Buraya yakınlaştırma yerleştirilemiyor",
|
||||
"zoomExistsAtLocation": "Bu konumda zaten bir yakınlaştırma var veya yeterli alan yok.",
|
||||
"zoomSuggestionUnavailable": "Yakınlaştırma öneri işleyicisi kullanılamıyor",
|
||||
"noCursorTelemetry": "İmleç telemetrisi mevcut değil",
|
||||
"noCursorTelemetryDescription": "İmleç tabanlı öneriler oluşturmak için önce bir ekran kaydı yapın.",
|
||||
"noUsableTelemetry": "Kullanılabilir imleç telemetrisi yok",
|
||||
"noUsableTelemetryDescription": "Kayıt yeterli imleç hareketi verisi içermiyor.",
|
||||
"noDwellMoments": "Belirgin imleç bekleme anları bulunamadı",
|
||||
"noDwellMomentsDescription": "Önemli işlemlerde daha yavaş imleç duraklamaları olan bir kayıt deneyin.",
|
||||
"noAutoZoomSlots": "Otomatik yakınlaştırma alanı yok",
|
||||
"noAutoZoomSlotsDescription": "Algılanan bekleme noktaları mevcut yakınlaştırma bölgeleriyle çakışıyor.",
|
||||
"cannotPlaceTrim": "Buraya kırpma yerleştirilemiyor",
|
||||
"trimExistsAtLocation": "Bu konumda zaten bir kırpma var veya yeterli alan yok.",
|
||||
"cannotPlaceSpeed": "Buraya hız yerleştirilemiyor",
|
||||
"speedExistsAtLocation": "Bu konumda zaten bir hız bölgesi var veya yeterli alan yok."
|
||||
"cannotPlaceZoom": "Buraya yakınlaştırma yerleştirilemiyor",
|
||||
"zoomExistsAtLocation": "Bu konumda zaten bir yakınlaştırma var veya yeterli alan yok.",
|
||||
"zoomSuggestionUnavailable": "Yakınlaştırma öneri işleyicisi kullanılamıyor",
|
||||
"noCursorTelemetry": "İmleç telemetrisi mevcut değil",
|
||||
"noCursorTelemetryDescription": "İmleç tabanlı öneriler oluşturmak için önce bir ekran kaydı yapın.",
|
||||
"noUsableTelemetry": "Kullanılabilir imleç telemetrisi yok",
|
||||
"noUsableTelemetryDescription": "Kayıt yeterli imleç hareketi verisi içermiyor.",
|
||||
"noDwellMoments": "Belirgin imleç bekleme anları bulunamadı",
|
||||
"noDwellMomentsDescription": "Önemli işlemlerde daha yavaş imleç duraklamaları olan bir kayıt deneyin.",
|
||||
"noAutoZoomSlots": "Otomatik yakınlaştırma alanı yok",
|
||||
"noAutoZoomSlotsDescription": "Algılanan bekleme noktaları mevcut yakınlaştırma bölgeleriyle çakışıyor.",
|
||||
"cannotPlaceTrim": "Buraya kırpma yerleştirilemiyor",
|
||||
"trimExistsAtLocation": "Bu konumda zaten bir kırpma var veya yeterli alan yok.",
|
||||
"cannotPlaceSpeed": "Buraya hız yerleştirilemiyor",
|
||||
"speedExistsAtLocation": "Bu konumda zaten bir hız bölgesi var veya yeterli alan yok."
|
||||
},
|
||||
"success": {
|
||||
"addedZoomSuggestions": "{{count}} imleç tabanlı yakınlaştırma önerisi eklendi",
|
||||
"addedZoomSuggestionsPlural": "{{count}} imleç tabanlı yakınlaştırma önerisi eklendi"
|
||||
"addedZoomSuggestions": "{{count}} imleç tabanlı yakınlaştırma önerisi eklendi",
|
||||
"addedZoomSuggestionsPlural": "{{count}} imleç tabanlı yakınlaştırma önerisi eklendi"
|
||||
},
|
||||
"feedback": {
|
||||
"copied": "Copied!",
|
||||
"pasted": "Pasted!"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,53 +1,57 @@
|
||||
{
|
||||
"buttons": {
|
||||
"addZoom": "添加缩放 (Z)",
|
||||
"suggestZooms": "根据光标建议缩放",
|
||||
"addTrim": "添加剪辑 (T)",
|
||||
"addAnnotation": "添加标注 (A)",
|
||||
"addSpeed": "添加速度 (S)",
|
||||
"addBlur": "添加模糊 (B)"
|
||||
"addZoom": "æ·»åŠ ç¼©æ”¾ (Z)",
|
||||
"suggestZooms": "æ ¹æ®å…‰æ ‡å»ºè®®ç¼©æ”¾",
|
||||
"addTrim": "æ·»åŠ å‰ªè¾‘ (T)",
|
||||
"addAnnotation": "æ·»åŠ æ ‡æ³¨ (A)",
|
||||
"addSpeed": "æ·»åŠ é€Ÿåº¦ (S)",
|
||||
"addBlur": "æ·»åŠ æ¨¡ç³Š (B)"
|
||||
},
|
||||
"hints": {
|
||||
"pressZoom": "按 Z 添加缩放",
|
||||
"pressTrim": "按 T 添加剪辑",
|
||||
"pressAnnotation": "按 A 添加标注",
|
||||
"pressSpeed": "按 S 添加速度",
|
||||
"pressBlur": "按 B 添加模糊区域"
|
||||
"pressZoom": "按 Z æ·»åŠ ç¼©æ”¾",
|
||||
"pressTrim": "按 T æ·»åŠ å‰ªè¾‘",
|
||||
"pressAnnotation": "按 A æ·»åŠ æ ‡æ³¨",
|
||||
"pressSpeed": "按 S æ·»åŠ é€Ÿåº¦",
|
||||
"pressBlur": "按 B æ·»åŠ æ¨¡ç³ŠåŒºåŸŸ"
|
||||
},
|
||||
"labels": {
|
||||
"pan": "平移",
|
||||
"zoom": "缩放",
|
||||
"zoomItem": "缩放 {{index}}",
|
||||
"trimItem": "剪辑 {{index}}",
|
||||
"speedItem": "速度 {{index}}",
|
||||
"annotationItem": "标注",
|
||||
"imageItem": "图片",
|
||||
"emptyText": "空文本",
|
||||
"blurItem": "模糊 {{index}}"
|
||||
"pan": "平移",
|
||||
"zoom": "缩放",
|
||||
"zoomItem": "缩放 {{index}}",
|
||||
"trimItem": "剪辑 {{index}}",
|
||||
"speedItem": "速度 {{index}}",
|
||||
"annotationItem": "æ ‡æ³¨",
|
||||
"imageItem": "图片",
|
||||
"emptyText": "空文本",
|
||||
"blurItem": "模糊 {{index}}"
|
||||
},
|
||||
"emptyState": {
|
||||
"noVideo": "未加载视频",
|
||||
"dragAndDrop": "拖放视频以开始编辑"
|
||||
"noVideo": "æœªåŠ è½½è§†é¢‘",
|
||||
"dragAndDrop": "拖放视频以开始编辑"
|
||||
},
|
||||
"errors": {
|
||||
"cannotPlaceZoom": "无法在此处放置缩放",
|
||||
"zoomExistsAtLocation": "此位置已存在缩放或没有足够的空间。",
|
||||
"zoomSuggestionUnavailable": "缩放建议处理器不可用",
|
||||
"noCursorTelemetry": "无可用的光标遥测数据",
|
||||
"noCursorTelemetryDescription": "请先录制一段屏幕录像以生成基于光标的建议。",
|
||||
"noUsableTelemetry": "无可用的光标遥测数据",
|
||||
"noUsableTelemetryDescription": "录制内容没有包含足够的光标移动数据。",
|
||||
"noDwellMoments": "未找到明确的光标停留时刻",
|
||||
"noDwellMomentsDescription": "请尝试在重要操作上进行较慢光标停留的录制。",
|
||||
"noAutoZoomSlots": "无可用的自动缩放位置",
|
||||
"noAutoZoomSlotsDescription": "检测到的停留点与现有缩放区域重叠。",
|
||||
"cannotPlaceTrim": "无法在此处放置剪辑",
|
||||
"trimExistsAtLocation": "此位置已存在剪辑或没有足够的空间。",
|
||||
"cannotPlaceSpeed": "无法在此处放置速度",
|
||||
"speedExistsAtLocation": "此位置已存在速度区域或没有足够的空间。"
|
||||
"cannotPlaceZoom": "æ— æ³•åœ¨æ¤å¤„放置缩放",
|
||||
"zoomExistsAtLocation": "æ¤ä½ç½®å·²å˜åœ¨ç¼©æ”¾æˆ–没有足够的空间。",
|
||||
"zoomSuggestionUnavailable": "缩放建议处ç†å™¨ä¸å¯ç”¨",
|
||||
"noCursorTelemetry": "æ— å¯ç”¨çš„å…‰æ ‡é¥æµ‹æ•°æ®",
|
||||
"noCursorTelemetryDescription": "请先录制一段å±å¹•录åƒä»¥ç”ŸæˆåŸºäºŽå…‰æ ‡çš„建议。",
|
||||
"noUsableTelemetry": "æ— å¯ç”¨çš„å…‰æ ‡é¥æµ‹æ•°æ®",
|
||||
"noUsableTelemetryDescription": "录制内容没有包å«è¶³å¤Ÿçš„å…‰æ ‡ç§»åŠ¨æ•°æ®ã€‚",
|
||||
"noDwellMoments": "æœªæ‰¾åˆ°æ˜Žç¡®çš„å…‰æ ‡åœç•™æ—¶åˆ»",
|
||||
"noDwellMomentsDescription": "请å°è¯•在é‡è¦æ“ä½œä¸Šè¿›è¡Œè¾ƒæ…¢å…‰æ ‡åœç•™çš„录制。",
|
||||
"noAutoZoomSlots": "æ— å¯ç”¨çš„自动缩放ä½ç½®",
|
||||
"noAutoZoomSlotsDescription": "检测到的åœç•™ç‚¹ä¸ŽçŽ°æœ‰ç¼©æ”¾åŒºåŸŸé‡å 。",
|
||||
"cannotPlaceTrim": "æ— æ³•åœ¨æ¤å¤„放置剪辑",
|
||||
"trimExistsAtLocation": "æ¤ä½ç½®å·²å˜åœ¨å‰ªè¾‘或没有足够的空间。",
|
||||
"cannotPlaceSpeed": "æ— æ³•åœ¨æ¤å¤„放置速度",
|
||||
"speedExistsAtLocation": "æ¤ä½ç½®å·²å˜åœ¨é€Ÿåº¦åŒºåŸŸæˆ–没有足够的空间。"
|
||||
},
|
||||
"success": {
|
||||
"addedZoomSuggestions": "已添加 {{count}} 个基于光标的缩放建议",
|
||||
"addedZoomSuggestionsPlural": "已添加 {{count}} 个基于光标的缩放建议"
|
||||
"addedZoomSuggestions": "å·²æ·»åŠ {{count}} ä¸ªåŸºäºŽå…‰æ ‡çš„ç¼©æ”¾å»ºè®®",
|
||||
"addedZoomSuggestionsPlural": "å·²æ·»åŠ {{count}} ä¸ªåŸºäºŽå…‰æ ‡çš„ç¼©æ”¾å»ºè®®"
|
||||
},
|
||||
"feedback": {
|
||||
"copied": "Copied!",
|
||||
"pasted": "Pasted!"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,53 +1,57 @@
|
||||
{
|
||||
"buttons": {
|
||||
"addZoom": "新增縮放 (Z)",
|
||||
"suggestZooms": "根據游標建議縮放",
|
||||
"addTrim": "新增剪輯 (T)",
|
||||
"addAnnotation": "新增標註 (A)",
|
||||
"addSpeed": "新增速度 (S)",
|
||||
"addBlur": "新增模糊 (B)"
|
||||
"addZoom": "新增縮放 (Z)",
|
||||
"suggestZooms": "æ ¹æ“šæ¸¸æ¨™å»ºè°ç¸®æ”¾",
|
||||
"addTrim": "新增剪輯 (T)",
|
||||
"addAnnotation": "新增標註 (A)",
|
||||
"addSpeed": "新增速度 (S)",
|
||||
"addBlur": "新增模糊 (B)"
|
||||
},
|
||||
"hints": {
|
||||
"pressZoom": "按 Z 新增縮放",
|
||||
"pressTrim": "按 T 新增剪輯",
|
||||
"pressAnnotation": "按 A 新增標註",
|
||||
"pressSpeed": "按 S 新增速度",
|
||||
"pressBlur": "按 B 新增模糊區域"
|
||||
"pressZoom": "按 Z 新增縮放",
|
||||
"pressTrim": "按 T 新增剪輯",
|
||||
"pressAnnotation": "按 A 新增標註",
|
||||
"pressSpeed": "按 S 新增速度",
|
||||
"pressBlur": "按 B 新增模糊å€åŸŸ"
|
||||
},
|
||||
"labels": {
|
||||
"pan": "平移",
|
||||
"zoom": "縮放",
|
||||
"zoomItem": "縮放 {{index}}",
|
||||
"trimItem": "剪輯 {{index}}",
|
||||
"speedItem": "速度 {{index}}",
|
||||
"annotationItem": "標註",
|
||||
"imageItem": "圖片",
|
||||
"emptyText": "空文字",
|
||||
"blurItem": "模糊 {{index}}"
|
||||
"pan": "平移",
|
||||
"zoom": "縮放",
|
||||
"zoomItem": "縮放 {{index}}",
|
||||
"trimItem": "剪輯 {{index}}",
|
||||
"speedItem": "速度 {{index}}",
|
||||
"annotationItem": "標註",
|
||||
"imageItem": "圖片",
|
||||
"emptyText": "空文å—",
|
||||
"blurItem": "模糊 {{index}}"
|
||||
},
|
||||
"emptyState": {
|
||||
"noVideo": "未載入影片",
|
||||
"dragAndDrop": "拖放影片以開始編輯"
|
||||
"noVideo": "未載入影片",
|
||||
"dragAndDrop": "拖放影片以開始編輯"
|
||||
},
|
||||
"errors": {
|
||||
"cannotPlaceZoom": "無法在此處放置縮放",
|
||||
"zoomExistsAtLocation": "此位置已存在縮放或沒有足夠的空間。",
|
||||
"zoomSuggestionUnavailable": "縮放建議處理器不可用",
|
||||
"noCursorTelemetry": "無可用的游標遙測資料",
|
||||
"noCursorTelemetryDescription": "請先錄製一段螢幕錄影以產生基於游標的建議。",
|
||||
"noUsableTelemetry": "無可用的游標遙測資料",
|
||||
"noUsableTelemetryDescription": "錄製內容沒有包含足夠的游標移動資料。",
|
||||
"noDwellMoments": "未找到明確的游標停留時刻",
|
||||
"noDwellMomentsDescription": "請嘗試在重要操作上進行較慢游標停留的錄製。",
|
||||
"noAutoZoomSlots": "無可用的自動縮放位置",
|
||||
"noAutoZoomSlotsDescription": "偵測到的停留點與現有縮放區域重疊。",
|
||||
"cannotPlaceTrim": "無法在此處放置剪輯",
|
||||
"trimExistsAtLocation": "此位置已存在剪輯或沒有足夠的空間。",
|
||||
"cannotPlaceSpeed": "無法在此處放置速度",
|
||||
"speedExistsAtLocation": "此位置已存在速度區域或沒有足夠的空間。"
|
||||
"cannotPlaceZoom": "無法在æ¤è™•放置縮放",
|
||||
"zoomExistsAtLocation": "æ¤ä½ç½®å·²å˜åœ¨ç¸®æ”¾æˆ–æ²’æœ‰è¶³å¤ çš„ç©ºé–“ã€‚",
|
||||
"zoomSuggestionUnavailable": "縮放建è°è™•ç†å™¨ä¸å¯ç”¨",
|
||||
"noCursorTelemetry": "ç„¡å¯ç”¨çš„æ¸¸æ¨™é™æ¸¬è³‡æ–™",
|
||||
"noCursorTelemetryDescription": "請先錄製一段螢幕錄影以產生基於游標的建è°ã€‚",
|
||||
"noUsableTelemetry": "ç„¡å¯ç”¨çš„æ¸¸æ¨™é™æ¸¬è³‡æ–™",
|
||||
"noUsableTelemetryDescription": "錄製內容沒有包å«è¶³å¤ 的游標移動資料。",
|
||||
"noDwellMoments": "未找到明確的游標åœç•™æ™‚刻",
|
||||
"noDwellMomentsDescription": "請嘗試在é‡è¦æ“作上進行較慢游標åœç•™çš„錄製。",
|
||||
"noAutoZoomSlots": "ç„¡å¯ç”¨çš„自動縮放ä½ç½®",
|
||||
"noAutoZoomSlotsDescription": "嵿¸¬åˆ°çš„åœç•™é»žèˆ‡ç¾æœ‰ç¸®æ”¾å€åŸŸé‡ç–Šã€‚",
|
||||
"cannotPlaceTrim": "無法在æ¤è™•放置剪輯",
|
||||
"trimExistsAtLocation": "æ¤ä½ç½®å·²å˜åœ¨å‰ªè¼¯æˆ–æ²’æœ‰è¶³å¤ çš„ç©ºé–“ã€‚",
|
||||
"cannotPlaceSpeed": "無法在æ¤è™•放置速度",
|
||||
"speedExistsAtLocation": "æ¤ä½ç½®å·²å˜åœ¨é€Ÿåº¦å€åŸŸæˆ–æ²’æœ‰è¶³å¤ çš„ç©ºé–“ã€‚"
|
||||
},
|
||||
"success": {
|
||||
"addedZoomSuggestions": "已新增 {{count}} 個基於游標的縮放建議",
|
||||
"addedZoomSuggestionsPlural": "已新增 {{count}} 個基於游標的縮放建議"
|
||||
"addedZoomSuggestions": "已新增 {{count}} 個基於游標的縮放建è°",
|
||||
"addedZoomSuggestionsPlural": "已新增 {{count}} 個基於游標的縮放建è°"
|
||||
},
|
||||
"feedback": {
|
||||
"copied": "Copied!",
|
||||
"pasted": "Pasted!"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user