+28
-8
@@ -9,10 +9,14 @@ import commonEs from "../src/i18n/locales/es/common.json";
|
|||||||
import dialogsEs from "../src/i18n/locales/es/dialogs.json";
|
import dialogsEs from "../src/i18n/locales/es/dialogs.json";
|
||||||
import commonFr from "../src/i18n/locales/fr/common.json";
|
import commonFr from "../src/i18n/locales/fr/common.json";
|
||||||
import dialogsFr from "../src/i18n/locales/fr/dialogs.json";
|
import dialogsFr from "../src/i18n/locales/fr/dialogs.json";
|
||||||
|
import commonIt from "../src/i18n/locales/it/common.json";
|
||||||
|
import dialogsIt from "../src/i18n/locales/it/dialogs.json";
|
||||||
import commonJa from "../src/i18n/locales/ja-JP/common.json";
|
import commonJa from "../src/i18n/locales/ja-JP/common.json";
|
||||||
import dialogsJa from "../src/i18n/locales/ja-JP/dialogs.json";
|
import dialogsJa from "../src/i18n/locales/ja-JP/dialogs.json";
|
||||||
import commonKo from "../src/i18n/locales/ko-KR/common.json";
|
import commonKo from "../src/i18n/locales/ko-KR/common.json";
|
||||||
import dialogsKo from "../src/i18n/locales/ko-KR/dialogs.json";
|
import dialogsKo from "../src/i18n/locales/ko-KR/dialogs.json";
|
||||||
|
import commonRu from "../src/i18n/locales/ru/common.json";
|
||||||
|
import dialogsRu from "../src/i18n/locales/ru/dialogs.json";
|
||||||
import commonTr from "../src/i18n/locales/tr/common.json";
|
import commonTr from "../src/i18n/locales/tr/common.json";
|
||||||
import dialogsTr from "../src/i18n/locales/tr/dialogs.json";
|
import dialogsTr from "../src/i18n/locales/tr/dialogs.json";
|
||||||
import commonVi from "../src/i18n/locales/vi/common.json";
|
import commonVi from "../src/i18n/locales/vi/common.json";
|
||||||
@@ -22,21 +26,35 @@ import dialogsZh from "../src/i18n/locales/zh-CN/dialogs.json";
|
|||||||
import commonZhTw from "../src/i18n/locales/zh-TW/common.json";
|
import commonZhTw from "../src/i18n/locales/zh-TW/common.json";
|
||||||
import dialogsZhTw from "../src/i18n/locales/zh-TW/dialogs.json";
|
import dialogsZhTw from "../src/i18n/locales/zh-TW/dialogs.json";
|
||||||
|
|
||||||
type Locale = "en" | "zh-CN" | "zh-TW" | "es" | "fr" | "ja-JP" | "ko-KR" | "tr" | "ar" | "vi";
|
type Locale =
|
||||||
|
| "en"
|
||||||
|
| "ar"
|
||||||
|
| "es"
|
||||||
|
| "fr"
|
||||||
|
| "it"
|
||||||
|
| "ja-JP"
|
||||||
|
| "ko-KR"
|
||||||
|
| "ru"
|
||||||
|
| "tr"
|
||||||
|
| "vi"
|
||||||
|
| "zh-CN"
|
||||||
|
| "zh-TW";
|
||||||
type Namespace = "common" | "dialogs";
|
type Namespace = "common" | "dialogs";
|
||||||
type MessageMap = Record<string, unknown>;
|
type MessageMap = Record<string, unknown>;
|
||||||
|
|
||||||
const messages: Record<Locale, Record<Namespace, MessageMap>> = {
|
const messages: Record<Locale, Record<Namespace, MessageMap>> = {
|
||||||
en: { common: commonEn, dialogs: dialogsEn },
|
en: { common: commonEn, dialogs: dialogsEn },
|
||||||
"zh-CN": { common: commonZh, dialogs: dialogsZh },
|
ar: { common: commonAr, dialogs: dialogsAr },
|
||||||
"zh-TW": { common: commonZhTw, dialogs: dialogsZhTw },
|
|
||||||
es: { common: commonEs, dialogs: dialogsEs },
|
es: { common: commonEs, dialogs: dialogsEs },
|
||||||
fr: { common: commonFr, dialogs: dialogsFr },
|
fr: { common: commonFr, dialogs: dialogsFr },
|
||||||
|
it: { common: commonIt, dialogs: dialogsIt },
|
||||||
"ja-JP": { common: commonJa, dialogs: dialogsJa },
|
"ja-JP": { common: commonJa, dialogs: dialogsJa },
|
||||||
"ko-KR": { common: commonKo, dialogs: dialogsKo },
|
"ko-KR": { common: commonKo, dialogs: dialogsKo },
|
||||||
|
ru: { common: commonRu, dialogs: dialogsRu },
|
||||||
tr: { common: commonTr, dialogs: dialogsTr },
|
tr: { common: commonTr, dialogs: dialogsTr },
|
||||||
ar: { common: commonAr, dialogs: dialogsAr },
|
|
||||||
vi: { common: commonVi, dialogs: dialogsVi },
|
vi: { common: commonVi, dialogs: dialogsVi },
|
||||||
|
"zh-CN": { common: commonZh, dialogs: dialogsZh },
|
||||||
|
"zh-TW": { common: commonZhTw, dialogs: dialogsZhTw },
|
||||||
};
|
};
|
||||||
|
|
||||||
let currentLocale: Locale = "en";
|
let currentLocale: Locale = "en";
|
||||||
@@ -44,15 +62,17 @@ let currentLocale: Locale = "en";
|
|||||||
export function setMainLocale(locale: string) {
|
export function setMainLocale(locale: string) {
|
||||||
if (
|
if (
|
||||||
locale === "en" ||
|
locale === "en" ||
|
||||||
locale === "zh-CN" ||
|
locale === "ar" ||
|
||||||
locale === "zh-TW" ||
|
|
||||||
locale === "es" ||
|
locale === "es" ||
|
||||||
locale === "fr" ||
|
locale === "fr" ||
|
||||||
|
locale === "it" ||
|
||||||
locale === "ja-JP" ||
|
locale === "ja-JP" ||
|
||||||
locale === "ko-KR" ||
|
locale === "ko-KR" ||
|
||||||
|
locale === "ru" ||
|
||||||
locale === "tr" ||
|
locale === "tr" ||
|
||||||
locale === "ar" ||
|
locale === "vi" ||
|
||||||
locale === "vi"
|
locale === "zh-CN" ||
|
||||||
|
locale === "zh-TW"
|
||||||
) {
|
) {
|
||||||
currentLocale = locale;
|
currentLocale = locale;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,6 +112,7 @@ export function I18nProvider({ children }: { children: ReactNode }) {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.documentElement.lang = locale;
|
document.documentElement.lang = locale;
|
||||||
|
window.electronAPI?.setLocale?.(locale);
|
||||||
}, [locale]);
|
}, [locale]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import arDialogs from "@/i18n/locales/ar/dialogs.json";
|
|||||||
import enDialogs from "@/i18n/locales/en/dialogs.json";
|
import enDialogs from "@/i18n/locales/en/dialogs.json";
|
||||||
import esDialogs from "@/i18n/locales/es/dialogs.json";
|
import esDialogs from "@/i18n/locales/es/dialogs.json";
|
||||||
import frDialogs from "@/i18n/locales/fr/dialogs.json";
|
import frDialogs from "@/i18n/locales/fr/dialogs.json";
|
||||||
|
import itDialogs from "@/i18n/locales/it/dialogs.json";
|
||||||
import jaJPDialogs from "@/i18n/locales/ja-JP/dialogs.json";
|
import jaJPDialogs from "@/i18n/locales/ja-JP/dialogs.json";
|
||||||
import koKRDialogs from "@/i18n/locales/ko-KR/dialogs.json";
|
import koKRDialogs from "@/i18n/locales/ko-KR/dialogs.json";
|
||||||
import ruDialogs from "@/i18n/locales/ru/dialogs.json";
|
import ruDialogs from "@/i18n/locales/ru/dialogs.json";
|
||||||
@@ -39,16 +40,17 @@ const keysThatMayBeEmpty = new Set<(typeof tutorialHelpKeys)[number]>(["step1Des
|
|||||||
|
|
||||||
const dialogsByLocale = {
|
const dialogsByLocale = {
|
||||||
en: enDialogs,
|
en: enDialogs,
|
||||||
"zh-CN": zhCNDialogs,
|
ar: arDialogs,
|
||||||
"zh-TW": zhTWDialogs,
|
|
||||||
es: esDialogs,
|
es: esDialogs,
|
||||||
fr: frDialogs,
|
fr: frDialogs,
|
||||||
tr: trDialogs,
|
it: itDialogs,
|
||||||
|
"ja-JP": jaJPDialogs,
|
||||||
"ko-KR": koKRDialogs,
|
"ko-KR": koKRDialogs,
|
||||||
ru: ruDialogs,
|
ru: ruDialogs,
|
||||||
"ja-JP": jaJPDialogs,
|
tr: trDialogs,
|
||||||
ar: arDialogs,
|
|
||||||
vi: viDialogs,
|
vi: viDialogs,
|
||||||
|
"zh-CN": zhCNDialogs,
|
||||||
|
"zh-TW": zhTWDialogs,
|
||||||
} satisfies Record<Locale, { tutorial: Record<string, unknown> }>;
|
} satisfies Record<Locale, { tutorial: Record<string, unknown> }>;
|
||||||
|
|
||||||
describe("TutorialHelp translations", () => {
|
describe("TutorialHelp translations", () => {
|
||||||
|
|||||||
+6
-5
@@ -1,16 +1,17 @@
|
|||||||
export const DEFAULT_LOCALE = "en" as const;
|
export const DEFAULT_LOCALE = "en" as const;
|
||||||
export const SUPPORTED_LOCALES = [
|
export const SUPPORTED_LOCALES = [
|
||||||
"en",
|
"en",
|
||||||
"zh-CN",
|
"ar",
|
||||||
"zh-TW",
|
|
||||||
"es",
|
"es",
|
||||||
"fr",
|
"fr",
|
||||||
"tr",
|
"it",
|
||||||
"ko-KR",
|
|
||||||
"ja-JP",
|
"ja-JP",
|
||||||
"ar",
|
"ko-KR",
|
||||||
"ru",
|
"ru",
|
||||||
|
"tr",
|
||||||
"vi",
|
"vi",
|
||||||
|
"zh-CN",
|
||||||
|
"zh-TW",
|
||||||
] as const;
|
] as const;
|
||||||
export const I18N_NAMESPACES = [
|
export const I18N_NAMESPACES = [
|
||||||
"common",
|
"common",
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"actions": {
|
||||||
|
"cancel": "Annulla",
|
||||||
|
"save": "Salva",
|
||||||
|
"delete": "Elimina",
|
||||||
|
"close": "Chiudi",
|
||||||
|
"share": "Condividi",
|
||||||
|
"done": "Fatto",
|
||||||
|
"open": "Apri",
|
||||||
|
"upload": "Carica",
|
||||||
|
"export": "Esporta",
|
||||||
|
"showInFolder": "Mostra nella cartella",
|
||||||
|
"file": "File",
|
||||||
|
"edit": "Modifica",
|
||||||
|
"view": "Visualizza",
|
||||||
|
"window": "Finestra",
|
||||||
|
"quit": "Esci",
|
||||||
|
"stopRecording": "Interrompi registrazione",
|
||||||
|
"undo": "Annulla",
|
||||||
|
"redo": "Ripeti",
|
||||||
|
"cut": "Taglia",
|
||||||
|
"copy": "Copia",
|
||||||
|
"paste": "Incolla",
|
||||||
|
"selectAll": "Seleziona tutto",
|
||||||
|
"minimize": "Riduci a icona",
|
||||||
|
"reload": "Ricarica",
|
||||||
|
"forceReload": "Forza ricarica",
|
||||||
|
"toggleDevTools": "Attiva/disattiva strumenti sviluppatore",
|
||||||
|
"actualSize": "Dimensione effettiva",
|
||||||
|
"zoomIn": "Ingrandisci",
|
||||||
|
"zoomOut": "Riduci",
|
||||||
|
"toggleFullScreen": "Attiva/disattiva schermo intero",
|
||||||
|
"recordingStatus": "Registrazione: {{source}}",
|
||||||
|
"about": "Info su OpenScreen",
|
||||||
|
"services": "Servizi",
|
||||||
|
"hide": "Nascondi OpenScreen",
|
||||||
|
"hideOthers": "Nascondi gli altri",
|
||||||
|
"unhide": "Mostra tutto"
|
||||||
|
},
|
||||||
|
"playback": {
|
||||||
|
"play": "Riproduci",
|
||||||
|
"pause": "Pausa",
|
||||||
|
"fullscreen": "Schermo intero",
|
||||||
|
"exitFullscreen": "Esci dallo schermo intero"
|
||||||
|
},
|
||||||
|
"locale": {
|
||||||
|
"name": "Italiano",
|
||||||
|
"short": "IT"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"export": {
|
||||||
|
"complete": "Esportazione completata",
|
||||||
|
"yourFormatReady": "Il tuo {{format}} è pronto",
|
||||||
|
"showInFolder": "Mostra nella cartella",
|
||||||
|
"finalizingVideo": "Finalizzazione esportazione video...",
|
||||||
|
"compilingGifProgress": "Compilazione GIF... {{progress}}%",
|
||||||
|
"compilingGifWait": "Compilazione GIF... Potrebbe richiedere del tempo",
|
||||||
|
"takeMoment": "Ci potrebbe impiegare un momento...",
|
||||||
|
"failed": "Esportazione fallita",
|
||||||
|
"tryAgain": "Riprova",
|
||||||
|
"finalizingVideoTitle": "Finalizzazione video",
|
||||||
|
"compilingGif": "Compilazione GIF",
|
||||||
|
"exportingFormat": "Esportazione {{format}}",
|
||||||
|
"compiling": "Compilazione",
|
||||||
|
"renderingFrames": "Rendering fotogrammi",
|
||||||
|
"processing": "Elaborazione...",
|
||||||
|
"finalizing": "Finalizzazione...",
|
||||||
|
"compilingStatus": "Compilazione...",
|
||||||
|
"status": "Stato",
|
||||||
|
"format": "Formato",
|
||||||
|
"frames": "Fotogrammi",
|
||||||
|
"cancelExport": "Annulla esportazione",
|
||||||
|
"savedSuccessfully": "{{format}} salvato con successo!"
|
||||||
|
},
|
||||||
|
"tutorial": {
|
||||||
|
"triggerLabel": "Come funziona il taglio",
|
||||||
|
"title": "Come funziona il taglio",
|
||||||
|
"description": "Capire come eliminare le parti indesiderate del tuo video.",
|
||||||
|
"explanationBefore": "Lo strumento Taglia funziona definendo i segmenti che vuoi",
|
||||||
|
"remove": "rimuovere",
|
||||||
|
"explanationMiddle": " — tutto ciò",
|
||||||
|
"covered": "coperto",
|
||||||
|
"explanationAfter": "da un segmento rosso verrà eliminato durante l'esportazione.",
|
||||||
|
"visualExample": "Esempio visivo",
|
||||||
|
"removed": "RIMOSSO",
|
||||||
|
"kept": "Mantenuto",
|
||||||
|
"part1": "Parte 1",
|
||||||
|
"part2": "Parte 2",
|
||||||
|
"part3": "Parte 3",
|
||||||
|
"finalVideo": "Video finale",
|
||||||
|
"step1Title": "1. Aggiungi taglio",
|
||||||
|
"step1DescriptionBefore": "Premi ",
|
||||||
|
"step1DescriptionAfter": " o clicca sull'icona delle forbici per contrassegnare una sezione da rimuovere.",
|
||||||
|
"step2Title": "2. Regolazione",
|
||||||
|
"step2Description": "Trascina i bordi della regione rossa per coprire esattamente ciò che vuoi eliminare."
|
||||||
|
},
|
||||||
|
"unsavedChanges": {
|
||||||
|
"title": "Modifiche non salvate",
|
||||||
|
"message": "Hai delle modifiche non salvate.",
|
||||||
|
"detail": "Vuoi salvare il progetto prima di chiudere?",
|
||||||
|
"saveAndClose": "Salva e chiudi",
|
||||||
|
"discardAndClose": "Scarta e chiudi",
|
||||||
|
"loadProject": "Carica progetto…",
|
||||||
|
"saveProject": "Salva progetto…",
|
||||||
|
"saveProjectAs": "Salva progetto come…"
|
||||||
|
},
|
||||||
|
"fileDialogs": {
|
||||||
|
"saveGif": "Salva GIF esportata",
|
||||||
|
"saveVideo": "Salva video esportato",
|
||||||
|
"selectVideo": "Seleziona file video",
|
||||||
|
"saveProject": "Salva progetto OpenScreen",
|
||||||
|
"openProject": "Apri progetto OpenScreen",
|
||||||
|
"gifImage": "Immagine GIF",
|
||||||
|
"mp4Video": "Video MP4",
|
||||||
|
"videoFiles": "File video",
|
||||||
|
"openscreenProject": "Progetto OpenScreen",
|
||||||
|
"allFiles": "Tutti i file"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"newRecording": {
|
||||||
|
"title": "Torna al registratore",
|
||||||
|
"description": "La sessione corrente è stata salvata.",
|
||||||
|
"cancel": "Annulla",
|
||||||
|
"confirm": "Conferma"
|
||||||
|
},
|
||||||
|
"loadingVideo": "Caricamento video...",
|
||||||
|
"errors": {
|
||||||
|
"noVideoLoaded": "Nessun video caricato",
|
||||||
|
"videoNotReady": "Video non pronto",
|
||||||
|
"unableToDetermineSourcePath": "Impossibile determinare il percorso del video sorgente",
|
||||||
|
"failedToSaveGif": "Impossibile salvare la GIF",
|
||||||
|
"gifExportFailed": "Esportazione GIF fallita",
|
||||||
|
"failedToSaveVideo": "Impossibile salvare il video",
|
||||||
|
"exportFailed": "Esportazione fallita",
|
||||||
|
"exportFailedWithError": "Esportazione fallita: {{error}}",
|
||||||
|
"exportBackgroundLoadFailed": "Esportazione fallita: impossibile caricare l'immagine di sfondo ({{url}})",
|
||||||
|
"failedToSaveExport": "Impossibile salvare l'esportazione",
|
||||||
|
"failedToSaveExportedVideo": "Impossibile salvare il video esportato",
|
||||||
|
"failedToRevealInFolder": "Errore durante la visualizzazione nella cartella: {{error}}"
|
||||||
|
},
|
||||||
|
"export": {
|
||||||
|
"canceled": "Esportazione annullata",
|
||||||
|
"exportedSuccessfully": "{{format}} esportato con successo"
|
||||||
|
},
|
||||||
|
"project": {
|
||||||
|
"saveCanceled": "Salvataggio progetto annullato",
|
||||||
|
"failedToSave": "Impossibile salvare il progetto",
|
||||||
|
"savedTo": "Progetto salvato in {{path}}",
|
||||||
|
"failedToLoad": "Impossibile caricare il progetto",
|
||||||
|
"invalidFormat": "Formato file progetto non valido",
|
||||||
|
"loadedFrom": "Progetto caricato da {{path}}"
|
||||||
|
},
|
||||||
|
"recording": {
|
||||||
|
"failedCameraAccess": "Impossibile richiedere l'accesso alla fotocamera.",
|
||||||
|
"cameraBlocked": "L'accesso alla fotocamera è bloccato. Abilita nelle impostazioni di sistema l'utilizzo della webcam.",
|
||||||
|
"systemAudioUnavailable": "Audio di sistema non disponibile. Registrazione senza audio di sistema.",
|
||||||
|
"microphoneDenied": "Accesso al microfono negato. La registrazione continuerà senza audio.",
|
||||||
|
"cameraDenied": "Accesso alla fotocamera negato. La registrazione continuerà senza webcam.",
|
||||||
|
"cameraDisconnected": "Webcam disconnessa.",
|
||||||
|
"cameraNotFound": "Fotocamera non trovata.",
|
||||||
|
"permissionDenied": "Autorizzazione di registrazione negata. Consenti la registrazione dello schermo.",
|
||||||
|
"accessibilityAllowAndRetry": "Consenti l'accesso all'accessibilità per OpenScreen, poi premi di nuovo registra per avviare il conto alla rovescia."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
"tooltips": {
|
||||||
|
"hideHUD": "Nascondi",
|
||||||
|
"closeApp": "Chiudi app",
|
||||||
|
"restartRecording": "Riavvia registrazione",
|
||||||
|
"cancelRecording": "Annulla registrazione",
|
||||||
|
"pauseRecording": "Metti in pausa registrazione",
|
||||||
|
"resumeRecording": "Riprendi registrazione",
|
||||||
|
"openVideoFile": "Apri file video",
|
||||||
|
"openProject": "Apri progetto"
|
||||||
|
},
|
||||||
|
"audio": {
|
||||||
|
"enableSystemAudio": "Abilita audio di sistema",
|
||||||
|
"disableSystemAudio": "Disabilita audio di sistema",
|
||||||
|
"enableMicrophone": "Abilita microfono",
|
||||||
|
"disableMicrophone": "Disabilita microfono",
|
||||||
|
"defaultMicrophone": "Microfono predefinito"
|
||||||
|
},
|
||||||
|
"webcam": {
|
||||||
|
"enableWebcam": "Abilita webcam",
|
||||||
|
"disableWebcam": "Disabilita webcam",
|
||||||
|
"defaultCamera": "Fotocamera predefinita",
|
||||||
|
"searching": "Ricerca in corso...",
|
||||||
|
"noneFound": "Nessuna fotocamera trovata",
|
||||||
|
"unavailable": "Fotocamera non disponibile"
|
||||||
|
},
|
||||||
|
"cursor": {
|
||||||
|
"useEditableCursor": "Usa cursore modificabile",
|
||||||
|
"useSystemCursor": "Usa cursore di sistema"
|
||||||
|
},
|
||||||
|
"sourceSelector": {
|
||||||
|
"loading": "Caricamento sorgenti...",
|
||||||
|
"screens": "Schermi ({{count}})",
|
||||||
|
"windows": "Finestre ({{count}})",
|
||||||
|
"defaultSourceName": "Schermo"
|
||||||
|
},
|
||||||
|
"recording": {
|
||||||
|
"selectSource": "Seleziona una sorgente da registrare"
|
||||||
|
},
|
||||||
|
"language": "Lingua",
|
||||||
|
"systemLanguagePrompt": {
|
||||||
|
"title": "Usare la lingua del sistema?",
|
||||||
|
"description": "Abbiamo rilevato {{language}} come lingua del sistema. Vuoi passare OpenScreen a {{language}}?",
|
||||||
|
"switch": "Passa a {{language}}",
|
||||||
|
"keepDefault": "Mantieni la lingua corrente"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,205 @@
|
|||||||
|
{
|
||||||
|
"zoom": {
|
||||||
|
"level": "Livello zoom",
|
||||||
|
"customScale": "Zoom personalizzato",
|
||||||
|
"selectRegion": "Seleziona una regione zoom da regolare",
|
||||||
|
"deleteZoom": "Elimina zoom",
|
||||||
|
"focusMode": {
|
||||||
|
"title": "Modalità messa a fuoco",
|
||||||
|
"manual": "Manuale",
|
||||||
|
"auto": "Automatico",
|
||||||
|
"autoDescription": "La fotocamera segue la posizione del cursore registrato"
|
||||||
|
},
|
||||||
|
"threeD": {
|
||||||
|
"title": "Rotazione 3D",
|
||||||
|
"preset": {
|
||||||
|
"iso": "Iso",
|
||||||
|
"left": "Sinistra",
|
||||||
|
"right": "Destra"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"title": "Posizione messa a fuoco",
|
||||||
|
"x": "X (%)",
|
||||||
|
"y": "Y (%)",
|
||||||
|
"hint": "0 = più a sinistra / in alto, 100 = più a destra / in basso"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"speed": {
|
||||||
|
"playbackSpeed": "Velocità di riproduzione",
|
||||||
|
"selectRegion": "Seleziona una regione velocità da regolare",
|
||||||
|
"deleteRegion": "Elimina regione velocità",
|
||||||
|
"customPlaybackSpeed": "Velocità di riproduzione personalizzata",
|
||||||
|
"maxSpeedError": "La velocità non può superare 16×"
|
||||||
|
},
|
||||||
|
"trim": {
|
||||||
|
"deleteRegion": "Elimina regione taglio"
|
||||||
|
},
|
||||||
|
"layout": {
|
||||||
|
"title": "Layout",
|
||||||
|
"preset": "Predefinito",
|
||||||
|
"selectPreset": "Seleziona predefinito",
|
||||||
|
"pictureInPicture": "Immagine nell'immagine",
|
||||||
|
"verticalStack": "Pila verticale",
|
||||||
|
"dualFrame": "Doppio frame",
|
||||||
|
"noWebcam": "Nessuna webcam",
|
||||||
|
"webcamShape": "Forma fotocamera",
|
||||||
|
"webcamSize": "Dimensione webcam"
|
||||||
|
},
|
||||||
|
"effects": {
|
||||||
|
"title": "Effetti video",
|
||||||
|
"blurBg": "Sfuma sfondo",
|
||||||
|
"motionBlur": "Sfocatura movimento",
|
||||||
|
"off": "spento",
|
||||||
|
"on": "acceso",
|
||||||
|
"shadow": "Ombra",
|
||||||
|
"roundness": "Arrotondamento",
|
||||||
|
"padding": "Spaziatura"
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"title": "Sfondo",
|
||||||
|
"image": "Immagine",
|
||||||
|
"color": "Colore",
|
||||||
|
"gradient": "Sfumatura",
|
||||||
|
"uploadCustom": "Carica personalizzato",
|
||||||
|
"gradientLabel": "Sfumatura {{index}}",
|
||||||
|
"colorWheel": "Ruota dei colori",
|
||||||
|
"colorPalette": "Tavolozza dei colori"
|
||||||
|
},
|
||||||
|
"crop": {
|
||||||
|
"title": "Ritaglia",
|
||||||
|
"cropVideo": "Ritaglia video",
|
||||||
|
"dragInstruction": "Trascina su ogni lato per regolare l'area di ritaglio",
|
||||||
|
"ratio": "Proporzioni",
|
||||||
|
"free": "Libero",
|
||||||
|
"done": "Fatto",
|
||||||
|
"lockAspectRatio": "Blocca proporzioni",
|
||||||
|
"unlockAspectRatio": "Sblocca proporzioni"
|
||||||
|
},
|
||||||
|
"exportFormat": {
|
||||||
|
"mp4": "MP4",
|
||||||
|
"gif": "GIF",
|
||||||
|
"mp4Video": "Video MP4",
|
||||||
|
"mp4Description": "File video di alta qualità",
|
||||||
|
"gifAnimation": "Animazione GIF",
|
||||||
|
"gifDescription": "Immagine animata per la condivisione"
|
||||||
|
},
|
||||||
|
"exportQuality": {
|
||||||
|
"title": "Risoluzione esportazione",
|
||||||
|
"low": "720p",
|
||||||
|
"medium": "1080p",
|
||||||
|
"high": "Originale"
|
||||||
|
},
|
||||||
|
"gifSettings": {
|
||||||
|
"frameRate": "Frequenza fotogrammi GIF",
|
||||||
|
"size": "Dimensione GIF",
|
||||||
|
"loop": "GIF in loop"
|
||||||
|
},
|
||||||
|
"project": {
|
||||||
|
"save": "Salva progetto",
|
||||||
|
"load": "Carica progetto"
|
||||||
|
},
|
||||||
|
"export": {
|
||||||
|
"videoButton": "Esporta video",
|
||||||
|
"gifButton": "Esporta GIF",
|
||||||
|
"chooseSaveLocation": "Scegli posizione di salvataggio"
|
||||||
|
},
|
||||||
|
"links": {
|
||||||
|
"reportBug": "Segnala bug",
|
||||||
|
"starOnGithub": "Metti stella su GitHub"
|
||||||
|
},
|
||||||
|
"imageUpload": {
|
||||||
|
"invalidFileType": "Tipo di file non valido",
|
||||||
|
"jpgOnly": "Carica un file immagine JPG o JPEG.",
|
||||||
|
"uploadSuccess": "Immagine personalizzata caricata con successo!",
|
||||||
|
"failedToUpload": "Impossibile caricare l'immagine",
|
||||||
|
"errorReading": "Si è verificato un errore durante la lettura del file."
|
||||||
|
},
|
||||||
|
"annotation": {
|
||||||
|
"title": "Impostazioni annotazione",
|
||||||
|
"active": "Attivo",
|
||||||
|
"typeText": "Testo",
|
||||||
|
"typeImage": "Immagine",
|
||||||
|
"typeArrow": "Freccia",
|
||||||
|
"typeBlur": "Sfocatura",
|
||||||
|
"textContent": "Contenuto testo",
|
||||||
|
"textPlaceholder": "Inserisci il tuo testo...",
|
||||||
|
"fontStyle": "Stile carattere",
|
||||||
|
"selectStyle": "Seleziona stile",
|
||||||
|
"size": "Dimensione",
|
||||||
|
"customFonts": "Caratteri personalizzati",
|
||||||
|
"textColor": "Colore testo",
|
||||||
|
"background": "Sfondo",
|
||||||
|
"none": "Nessuno",
|
||||||
|
"color": "Colore",
|
||||||
|
"colorWheel": "Ruota dei colori",
|
||||||
|
"colorPalette": "Tavolozza dei colori",
|
||||||
|
"clearBackground": "Rimuovi sfondo",
|
||||||
|
"uploadImage": "Carica immagine",
|
||||||
|
"supportedFormats": "Formati supportati: JPG, PNG, GIF, WebP",
|
||||||
|
"arrowDirection": "Direzione freccia",
|
||||||
|
"strokeWidth": "Larghezza tratto: {{width}}px",
|
||||||
|
"arrowColor": "Colore freccia",
|
||||||
|
"blurType": "Tipo sfocatura",
|
||||||
|
"blurTypeBlur": "Sfocatura",
|
||||||
|
"blurTypeMosaic": "Sfocatura mosaico",
|
||||||
|
"blurColor": "Colore sfocatura",
|
||||||
|
"blurColorWhite": "Bianco",
|
||||||
|
"blurColorBlack": "Nero",
|
||||||
|
"blurShape": "Forma sfocatura",
|
||||||
|
"blurIntensity": "Intensità sfocatura",
|
||||||
|
"mosaicBlockSize": "Dimensione blocco mosaico",
|
||||||
|
"blurShapeRectangle": "Rettangolo",
|
||||||
|
"blurShapeOval": "Ovale",
|
||||||
|
"blurShapeFreehand": "A mano libera",
|
||||||
|
"deleteAnnotation": "Elimina annotazione",
|
||||||
|
"shortcutsAndTips": "Scorciatoie e suggerimenti",
|
||||||
|
"tipMovePlayhead": "Sposta la testina di riproduzione sulla sezione di annotazione sovrapposta e seleziona un elemento.",
|
||||||
|
"tipTabCycle": "Usa Tab per scorrere gli elementi sovrapposti.",
|
||||||
|
"tipShiftTabCycle": "Usa Maiusc+Tab per scorrere all'indietro.",
|
||||||
|
"invalidImageType": "Tipo di file non valido",
|
||||||
|
"imageFormatsOnly": "Carica un file immagine JPG, PNG, GIF o WebP.",
|
||||||
|
"imageUploadSuccess": "Immagine caricata con successo!",
|
||||||
|
"failedImageUpload": "Impossibile caricare l'immagine"
|
||||||
|
},
|
||||||
|
"fontStyles": {
|
||||||
|
"classic": "Classico",
|
||||||
|
"editor": "Editor",
|
||||||
|
"strong": "Forte",
|
||||||
|
"typewriter": "Macchina da scrivere",
|
||||||
|
"deco": "Deco",
|
||||||
|
"simple": "Semplice",
|
||||||
|
"modern": "Moderno",
|
||||||
|
"clean": "Pulito"
|
||||||
|
},
|
||||||
|
"customFont": {
|
||||||
|
"dialogTitle": "Aggiungi font Google",
|
||||||
|
"urlLabel": "URL importazione Google Fonts",
|
||||||
|
"urlPlaceholder": "https://fonts.googleapis.com/css2?family=Roboto&display=swap",
|
||||||
|
"urlHelp": "Ottieni questo da Google Fonts: Seleziona un font → Clicca \"Ottieni font\" → Copia l'URL @import",
|
||||||
|
"nameLabel": "Nome visualizzato",
|
||||||
|
"namePlaceholder": "Il mio font personalizzato",
|
||||||
|
"nameHelp": "Così apparirà il font nel selettore",
|
||||||
|
"addButton": "Aggiungi font",
|
||||||
|
"addingButton": "Aggiunta in corso...",
|
||||||
|
"errorEmptyUrl": "Inserisci un URL di importazione Google Fonts",
|
||||||
|
"errorInvalidUrl": "Inserisci un URL Google Fonts valido",
|
||||||
|
"errorEmptyName": "Inserisci un nome per il font",
|
||||||
|
"errorExtractFailed": "Impossibile estrarre la famiglia di font dall'URL",
|
||||||
|
"successMessage": "Font \"{{fontName}}\" aggiunto con successo",
|
||||||
|
"failedToAdd": "Impossibile aggiungere il font",
|
||||||
|
"errorTimeout": "Il font ha impiegato troppo tempo a caricarsi. Controlla l'URL e riprova.",
|
||||||
|
"errorLoadFailed": "Impossibile caricare il font. Verifica che l'URL di Google Fonts sia corretto."
|
||||||
|
},
|
||||||
|
"cursor": {
|
||||||
|
"show": "Mostra cursore",
|
||||||
|
"size": "Dimensione",
|
||||||
|
"smoothing": "Smussatura",
|
||||||
|
"motionBlur": "Sfocatura movimento",
|
||||||
|
"clickBounce": "Rimbalzo clic",
|
||||||
|
"clipToBounds": "Ritaglia al canvas"
|
||||||
|
},
|
||||||
|
"language": {
|
||||||
|
"title": "Lingua"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"title": "Scorciatoie tastiera",
|
||||||
|
"customize": "Personalizza",
|
||||||
|
"configurable": "Configurabile",
|
||||||
|
"fixed": "Fisso",
|
||||||
|
"pressKey": "Premi un tasto…",
|
||||||
|
"clickToChange": "Clicca per cambiare",
|
||||||
|
"pressEscToCancel": "Premi Esc per annullare",
|
||||||
|
"helpText": "Clicca una scorciatoia e premi la nuova combinazione di tasti. Premi Esc per annullare.",
|
||||||
|
"resetToDefaults": "Ripristina predefiniti",
|
||||||
|
"alreadyUsedBy": "Già utilizzata da {{action}}",
|
||||||
|
"swap": "Scambia",
|
||||||
|
"reservedShortcut": "Questa scorciatoia è riservata a \"{{label}}\" e non può essere riassegnata.",
|
||||||
|
"savedToast": "Scorciatoie tastiera salvate",
|
||||||
|
"resetToast": "Ripristino alle scorciatoie predefinite — clicca Salva per applicare",
|
||||||
|
"actions": {
|
||||||
|
"addZoom": "Aggiungi zoom",
|
||||||
|
"addTrim": "Aggiungi taglio",
|
||||||
|
"addSpeed": "Aggiungi velocità",
|
||||||
|
"addAnnotation": "Aggiungi annotazione",
|
||||||
|
"addBlur": "Aggiungi sfocatura",
|
||||||
|
"addKeyframe": "Aggiungi fotogramma chiave",
|
||||||
|
"deleteSelected": "Elimina selezionato",
|
||||||
|
"playPause": "Riproduci / Pausa"
|
||||||
|
},
|
||||||
|
"fixedActions": {
|
||||||
|
"undo": "Annulla",
|
||||||
|
"redo": "Ripeti",
|
||||||
|
"cycleAnnotationsForward": "Scorri annotazioni in avanti",
|
||||||
|
"cycleAnnotationsBackward": "Scorri annotazioni indietro",
|
||||||
|
"deleteSelectedAlt": "Elimina selezionato (alt)",
|
||||||
|
"panTimeline": "Panoramica timeline",
|
||||||
|
"zoomTimeline": "Zoom timeline",
|
||||||
|
"frameBack": "Fotogramma indietro",
|
||||||
|
"frameForward": "Fotogramma avanti"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"buttons": {
|
||||||
|
"addZoom": "Aggiungi zoom (Z)",
|
||||||
|
"suggestZooms": "Suggerisci zoom dal cursore",
|
||||||
|
"addTrim": "Aggiungi taglio (T)",
|
||||||
|
"addAnnotation": "Aggiungi annotazione (A)",
|
||||||
|
"addBlur": "Aggiungi sfocatura (B)",
|
||||||
|
"addSpeed": "Aggiungi velocità (S)"
|
||||||
|
},
|
||||||
|
"hints": {
|
||||||
|
"pressZoom": "Premi Z per aggiungere zoom",
|
||||||
|
"pressTrim": "Premi T per aggiungere taglio",
|
||||||
|
"pressAnnotation": "Premi A per aggiungere annotazione",
|
||||||
|
"pressBlur": "Premi B per aggiungere regione sfocatura",
|
||||||
|
"pressSpeed": "Premi S per aggiungere velocità"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"pan": "Panoramica",
|
||||||
|
"zoom": "Zoom",
|
||||||
|
"trim": "Taglio",
|
||||||
|
"speed": "Velocità",
|
||||||
|
"zoomItem": "Zoom {{index}}",
|
||||||
|
"trimItem": "Taglio {{index}}",
|
||||||
|
"speedItem": "Velocità {{index}}",
|
||||||
|
"annotationItem": "Annotazione",
|
||||||
|
"blurItem": "Sfocatura {{index}}",
|
||||||
|
"imageItem": "Immagine",
|
||||||
|
"emptyText": "Testo vuoto"
|
||||||
|
},
|
||||||
|
"emptyState": {
|
||||||
|
"noVideo": "Nessun video caricato",
|
||||||
|
"dragAndDrop": "Trascina e rilascia un video per iniziare a modificare"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"cannotPlaceZoom": "Impossibile posizionare lo zoom qui",
|
||||||
|
"zoomExistsAtLocation": "Lo zoom esiste già in questa posizione o non c'è spazio sufficiente.",
|
||||||
|
"zoomSuggestionUnavailable": "Gestore suggerimenti zoom non disponibile",
|
||||||
|
"noCursorTelemetry": "Nessuna telemetria del cursore disponibile",
|
||||||
|
"noCursorTelemetryDescription": "Registra prima uno screencast per generare suggerimenti basati sul cursore.",
|
||||||
|
"noUsableTelemetry": "Nessuna telemetria del cursore utilizzabile",
|
||||||
|
"noUsableTelemetryDescription": "La registrazione non include dati sufficienti sul movimento del cursore.",
|
||||||
|
"noDwellMoments": "Nessun momento di sosta del cursore trovato",
|
||||||
|
"noDwellMomentsDescription": "Prova una registrazione con pause del cursore più lente sulle azioni importanti.",
|
||||||
|
"noAutoZoomSlots": "Nessuno slot di zoom automatico disponibile",
|
||||||
|
"noAutoZoomSlotsDescription": "I punti di sosta rilevati si sovrappongono alle regioni zoom esistenti.",
|
||||||
|
"cannotPlaceTrim": "Impossibile posizionare il taglio qui",
|
||||||
|
"trimExistsAtLocation": "Il taglio esiste già in questa posizione o non c'è spazio sufficiente.",
|
||||||
|
"cannotPlaceSpeed": "Impossibile posizionare la velocità qui",
|
||||||
|
"speedExistsAtLocation": "La regione velocità esiste già in questa posizione o non c'è spazio sufficiente."
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"addedZoomSuggestions": "Aggiunto {{count}} suggerimento zoom basato sul cursore",
|
||||||
|
"addedZoomSuggestionsPlural": "Aggiunti {{count}} suggerimenti zoom basati sul cursore"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user