From b669e3eede60f7fb662a10f8086d20e2862de7c5 Mon Sep 17 00:00:00 2001 From: Maya Date: Tue, 29 Jul 2025 22:04:35 +0300 Subject: [PATCH] feat: espanol, minor fixes for translations translation by person who wishes to be anonymous its a bit difficult to make all translations look good on here, need more experimenting --- messages/es.json | 190 ++++++++++++++++++ project.inlang/settings.json | 1 + .../functional/ConversionPanel.svelte | 1 + .../functional/FormatDropdown.svelte | 8 +- src/lib/components/layout/Navbar/Base.svelte | 2 +- src/lib/store/index.svelte.ts | 1 + 6 files changed, 199 insertions(+), 4 deletions(-) create mode 100644 messages/es.json diff --git a/messages/es.json b/messages/es.json new file mode 100644 index 0000000..213ffc4 --- /dev/null +++ b/messages/es.json @@ -0,0 +1,190 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "navbar": { + "upload": "Subir", + "convert": "Convertir", + "settings": "Configuración", + "about": "Acerca de", + "toggle_theme": "Cambiar tema" + }, + "footer": { + "copyright": "© {year} VERT.", + "source_code": "Código fuente", + "discord_server": "Servidor de Discord" + }, + "upload": { + "title": "El convertor de archivos que te encantará.", + "subtitle": "Todo el procesamiento de imágenes, audio y documentos es hecho en tu dispositivo. Los videos son convertidos en nuestros servidores extremadamente rápidos. Sin límite de tamaño de archivo, sin anuncios y de código abierto.", + "uploader": { + "text": "Arrastra o haz clic para {action}", + "convert": "convertir", + "jpegify": "jpegificar" + }, + "cards": { + "title": "VERT soporta...", + "images": "Imágenes", + "audio": "Audio", + "documents": "Documentos", + "video": "Video", + "video_server_processing": "Soportado por el servidor", + "local_supported": "Soportado localmente", + "status": { + "text": "Estado: {status}", + "ready": "listo", + "not_ready": "no listo" + }, + "supported_formats": "Formatos soportados:" + }, + "tooltip": { + "partial_support": "Este formato solo se puede convertir a {direction}.", + "direction_input": "entrada (desde)", + "direction_output": "salida (hacia)", + "video_server_processing": "Por defecto, los videos se suben a un servidor para ser procesados. Aprende cómo instalarlo localmente aquí." + } + }, + "convert": { + "panel": { + "convert_all": "Convertir todos", + "download_all": "Comprimir todo", + "remove_all": "Quitar todos los archivos", + "set_all_to": "Marcar todos como", + "na": "N/A" + }, + "tooltips": { + "unknown_file": "Formato de archivo desconocido", + "audio_file": "Archivo de audio", + "video_file": "Archivo de video", + "document_file": "Archivo de documento", + "image_file": "Archivo de imagen", + "convert_file": "Convertir este archivo", + "download_file": "Descargar este archivo" + }, + "errors": { + "cant_convert": "No podemos convertir este archivo.", + "vertd_server": "¿Qué estás haciendo..? ¡Debes ejecutar el servidor de vertd!", + "unsupported_format": "Solo aceptamos imágenes, videos, audios y documentos.", + "vertd_not_found": "No se encontró la instancia de vertd para iniciar la conversión de videos. ¿Estás seguro de que la URL es correcta?" + } + }, + "settings": { + "title": "Configuración", + "errors": { + "save_failed": "¡No se pudo guardar la configuración!" + }, + "appearance": { + "title": "Apariencia", + "brightness_theme": "Tema", + "brightness_description": "¿Prefieres una flash-bang soleada o una silenciosa y solitaria noche?", + "light": "Claro", + "dark": "Oscuro", + "effect_settings": "Configuración de efectos", + "effect_description": "¿Prefieres efectos en la interfaz o una experiencia más estática?", + "enable": "Habilitar", + "disable": "Deshabilitar" + }, + "conversion": { + "title": "Conversión", + "filename_format": "Formato del nombre de archivo", + "filename_description": "Esto va a determinar el nombre del archivo al ser descargado sin incluir la extensión. Puedes poner las siguientes plantillas en el formato, las cuales serán reemplazadas con la información que les corresponde: %name% para el nombre original, %extension% para la extensión original del archivo y %date% para la fecha de cuando el archivo fue convertido.", + "placeholder": "VERT_%name%" + }, + "vertd": { + "title": "Conversión de video", + "status": "estado:", + "loading": "cargando...", + "available": "disponible, id del commit {commitId}", + "unavailable": "no disponible (¿has comprobado la url?)", + "description": "vertd es un proyecto que actúa como un servidor intermediario (\"wrapper\") para FFmpeg. permite convertir videos sin dejar de lado la conveniente interfaz web de VERT y, a la vez, aprovecha la potencia de tu GPU para hacerlo lo más rápido posible.", + "hosting_info": "Alojamos una instancia pública para tu conveniencia, pero es bastante fácil alojar una propia en tu PC o servidor si sabes lo que estás haciendo. Puedes descargar los binarios del servidor [vertd_link]aquí[/vertd_link]. ¡El proceso de instalación será más fácil en el futuro, así que mantente atento!", + "instance_url": "URL de la instancia", + "url_placeholder": "Ejemplo: http://localhost:24153", + "conversion_speed": "Velocidad de conversión", + "speed_description": "Esto describe el equilibrio entre velocidad y calidad. Velocidades más rápidas resultarán en una calidad más baja, pero harán el trabajo más rápido.", + "speeds": { + "very_slow": "Extremadamente lento", + "slower": "Muy lento", + "slow": "Lento", + "medium": "Medio", + "fast": "Rápido", + "ultra_fast": "Súper rápido" + } + }, + "privacy": { + "title": "Privacidad", + "plausible_title": "Analíticas de Plausible", + "plausible_description": "Usamos [plausible_link]Plausible[/plausible_link], una herramienta de analíticas orientada a la privacidad para recopilar estadísticas completamente anónimas. Toda la información que recopilamos es anonimizada y agregada, y en ningún momento se envía ni se almacena información que permita identificarte. Puedes ver las estadísticas [analytics_link]aquí[/analytics_link] y excluirte de ellas a continuación:", + "opt_in": "Participar", + "opt_out": "No participar" + }, + "language": { + "title": "Lenguaje", + "description": "Selecciona el lenguaje que prefieres usar para la interfaz de VERT." + } + }, + "about": { + "title": "Acerca de", + "why": { + "title": "¿Por qué VERT?", + "description": "File converters have always disappointed us. They're ugly, riddled with ads, and most importantly; slow. We decided to solve this problem once and for all by making an alternative that solves all those problems, and more.

All non-video files are converted completely on-device; this means that there's no delay between sending and receiving the files from a server, and we never get to snoop on the files you convert.

Video files get uploaded to our lightning-fast RTX 4000 Ada server. Your videos stay on there for an hour if you do not convert them. If you do convert the file, the video will stay on the server for an hour, or until it is downloaded. The file will then be deleted from our server." + }, + "sponsors": { + "title": "Patrocinadores", + "description": "¿Quieres apoyarnos? Contacta un desarrollador en el servidor de [discord_link]Discord[/discord_link] o envía un correo a", + "email_copied": "¡Email copiado al portapapeles!" + }, + "resources": { + "title": "Recursos", + "discord": "Discord", + "source": "Fuente", + "email": "Email" + }, + "donate": { + "title": "Donar a VERT", + "description": "Con tu apoyo, podemos seguir manteniendo y mejorando VERT.", + "one_time": "Una sola vez", + "monthly": "Mensual", + "custom": "Personalizado", + "pay_now": "Pagar ahora", + "donate_amount": "Donar ${amount} USD", + "thank_you": "¡Gracias por tu donación!", + "payment_failed": "Pago fallido: {message}{period} No se ha efectuado ningún cargo.", + "donation_error": "Ha ocurrido un error al procesar tu donación. Por favor, inténtalo de nuevo más tarde.", + "payment_error": "Ha ocurrido un error al obtener los detalles del pago. Por favor, inténtalo de nuevo más tarde." + }, + "credits": { + "title": "Créditos", + "contact_team": "Si te gustaría contactar el equipo de desarrollo, por favor usa el email que se encuentra en la tarjeta de \"Recursos\".", + "notable_contributors": "Colaboradores destacados", + "notable_description": "Queremos darle las gracias a las siguientes personas por sus importantes contribuciones a VERT.", + "github_contributors": "Contribuidores de GitHub", + "github_description": "¡Muchas [jpegify_link]gracias[/jpegify_link] a todos los que han contribuido! [github_link]¿Quieres contribuir también?[/github_link]", + "no_contributors": "Parece que nadie ha contribuido todavía... [contribute_link]¡Sé el primero en hacerlo![/contribute_link]", + "libraries": "Librerías", + "libraries_description": "Muchas gracias a FFmpeg (audio, video), ImageMagick (imágenes) y Pandoc (documentos) por mantener librerías excelentes por tantos años. VERT depende de ellas para proporcionar tus conversiones.", + "roles": { + "lead_developer": "Líder de desarrollo; implementación del backend de conversión e interfaz", + "developer": "Desarrollador; implementación de la interfaz", + "designer": "Diseñador; UX, branding y marketing", + "docker_ci": "Mantenimiento del soporte para Docker y CI", + "former_cofounder": "Ex-cofundador; diseñador" + } + }, + "errors": { + "github_contributors": "Ocurrió un error mientras se obtenían los contribuidores de GitHub." + } + }, + "workers": { + "errors": { + "general": "Ocurrió un error mientras se convertía {file}: {message}", + "magick": "Ocurrió un error en el módulo de Magick, la conversión de imágenes puede que no funcione correctamente.", + "ffmpeg": "No se pudo cargar FFmpeg, algunas funciones podrían no funcionar." + } + }, + "jpegify": { + "title": "¡¡¡JPEGIFICADOR SECRETO!!!", + "subtitle": "(shh... ¡no se lo digas a nadie!)", + "button": "¡¡¡JPEGIFICAR {compression}%!!!", + "download": "Descargar", + "delete": "Eliminar" + } +} diff --git a/project.inlang/settings.json b/project.inlang/settings.json index 615007b..05fe604 100644 --- a/project.inlang/settings.json +++ b/project.inlang/settings.json @@ -3,6 +3,7 @@ "baseLocale": "en", "locales": [ "en", + "es", "uwu" ], "modules": [ diff --git a/src/lib/components/functional/ConversionPanel.svelte b/src/lib/components/functional/ConversionPanel.svelte index cc8ec8d..85d5980 100644 --- a/src/lib/components/functional/ConversionPanel.svelte +++ b/src/lib/components/functional/ConversionPanel.svelte @@ -78,6 +78,7 @@ } })} {categories} + dropdownWidth={"300%"} /> {:else} diff --git a/src/lib/components/functional/FormatDropdown.svelte b/src/lib/components/functional/FormatDropdown.svelte index f4d4603..8151d75 100644 --- a/src/lib/components/functional/FormatDropdown.svelte +++ b/src/lib/components/functional/FormatDropdown.svelte @@ -13,6 +13,7 @@ selected?: string; onselect?: (option: string) => void; disabled?: boolean; + dropdownWidth?: string; }; let { @@ -21,6 +22,7 @@ selected = $bindable(""), onselect, disabled, + dropdownWidth = "250%", }: Props = $props(); let open = $state(false); let dropdown = $state(); @@ -269,7 +271,7 @@ duration, easing: quintOut, }} - class="col-start-1 row-start-1 text-center font-body font-medium truncate max-w-[8rem]" + class="col-start-1 row-start-1 text-center font-body font-medium truncate max-w-[4rem]" > {selected}

@@ -277,7 +279,7 @@ {#if currentCategory} {#each categories[currentCategory].formats as option} @@ -300,7 +302,7 @@ }} class={$isMobile ? "fixed inset-x-0 bottom-0 w-full z-[200] shadow-xl bg-panel-alt shadow-black/25 rounded-t-2xl overflow-hidden" - : "w-[250%] min-w-full shadow-xl bg-panel-alt shadow-black/25 absolute -translate-x-1/2 top-full mt-2 z-50 rounded-2xl overflow-hidden"} + : `w-[${dropdownWidth}] min-w-full shadow-xl bg-panel-alt shadow-black/25 absolute -translate-x-1/2 top-full mt-2 z-50 rounded-2xl overflow-hidden`} >
diff --git a/src/lib/components/layout/Navbar/Base.svelte b/src/lib/components/layout/Navbar/Base.svelte index 639a8aa..4c39066 100644 --- a/src/lib/components/layout/Navbar/Base.svelte +++ b/src/lib/components/layout/Navbar/Base.svelte @@ -145,7 +145,7 @@
{/if} - diff --git a/src/lib/store/index.svelte.ts b/src/lib/store/index.svelte.ts index 8368335..7c2f9cd 100644 --- a/src/lib/store/index.svelte.ts +++ b/src/lib/store/index.svelte.ts @@ -298,6 +298,7 @@ export const theme = writable<"light" | "dark">("light"); export const locale = writable(getLocale()); export const availableLocales = { "en": "English", + "es": "Español", "uwu": "UwU", }