0.7.3 - fixes to unsecure_http / added GA - ES

This commit is contained in:
urania-dev
2024-05-26 07:33:28 +02:00
parent 959cb55f1a
commit 24d43de758
13 changed files with 892 additions and 13 deletions

View File

@@ -73,4 +73,7 @@
- Fixed typo on docker compose in home and in readme
- Fix on custom theme
- Feature Requested: Allow unsecure HTTP url in redirection
- 0.7.3
- Added Spanish and Galician languages by [cabaseira](https://github.com/cabaseira)
- Minor fix to unsecure HTTP Edit to fix [Issue #26](https://github.com/urania-dev/snapp/issues/26)
- Removed some dev console.logs.

View File

@@ -13,7 +13,7 @@ RUN npm i
COPY . /app
# Build the SvelteKit app
ENV SNAPP_VERSION=0.7.2
ENV SNAPP_VERSION=0.7.3
ENV AUTH_SECRET=lFNiU7T98/44Qlqb4hMUkVcLOpijEI7z722Kxhv4O2Y=
ENV ALLOW_UNSECURE_HTTP=false

View File

@@ -16,7 +16,7 @@ const snappHandler = (async ({ event, resolve }) => {
let theme = event.cookies.get('snapp:theme')?.toString();
let lang = event.cookies.get('snapp:lang')?.toString();
if (!theme || !lang) {
const user = session
const user = session !== null
? await db.users.fetch(session?.user.id).then((user) => user as DBUser)
: null;

View File

@@ -22,12 +22,14 @@ export default async function edit(
if (!user) return new SnappError(404, { message: 'auth:not:authorized' });
const regex = new RegExp(/^https:\/\/[^\s/$.?#].[^\s]*$/);
const allow_unsecure_http =
(await this.getSetting('settings:app:allow:unsecure:http'))?.toString().toLocaleLowerCase() ===
'true';
if (!original_url || typeof original_url !== 'string' || original_url.trim() === '')
return new SnappError(400, { message: 'snapps:original:url:unset' });
if (original_url) {
if (regex.test(original_url) === false)
if (allow_unsecure_http === false && regex.test(original_url) === false)
return new SnappError(400, { message: 'snapps:original:url:invalid' });
snapp.original_url = original_url;
}

View File

@@ -66,7 +66,6 @@ export default async function updateProfile(
if (roles && roles.length > 0) {
const newRoles = new Set([...roles]);
console.log(Array.from(newRoles), updatedProfile.roles)
if (
Array.from(newRoles) !== updatedProfile.roles &&
updatedProfile.roles.includes('superadmin') &&

View File

@@ -15,7 +15,6 @@ export async function load({ locals, parent }) {
const ALLOW_UNSECURE_HTTP =
(await db.getSetting('settings:app:allow:unsecure:http'))?.toString()?.toLowerCase() === 'true';
console.log(ALLOW_UNSECURE_HTTP)
return {
max_urls: user.settings?.max?.urls ?? data.max_urls ?? 0,
existing: await db.snapps.search().where('user_id').equal(session.user.id).returnCount(),

View File

@@ -55,7 +55,6 @@
});
rows.data.map((snapp) => {
console.log({ snapp });
const _snapp = {
id: snapp.id,
created: new Date(snapp.created_at),

View File

@@ -353,7 +353,6 @@
}
});
console.log(form?.message);
await invalidateAll();
};
};

View File

@@ -2,12 +2,12 @@ import { env } from '$env/dynamic/private';
import { db } from '$lib/db/index.js';
import jsonify from '$lib/utils/jsonify/index.js';
export async function load({ locals, depends, fetch, cookies }) {
export async function load({ locals, depends, fetch }) {
depends('snapp:main');
const session = await locals.getSession();
const user =
session && (await db.users.search().where('id').equal(session?.user.id).returnFirst());
session !== null && (await db.users.search().where('id').equal(session?.user.id).returnFirst()) || null;
const theme = locals.theme;
const lang = locals.lang;

View File

@@ -70,7 +70,6 @@ export async function POST({ request, url }) {
.replace('{OUT_TEXT}', OUT_TEXT)
});
// console.log('Email has been sent', { flag });
return json({
message: 'settings:app:smtp:working',

438
translations/es.json Normal file
View File

@@ -0,0 +1,438 @@
{
"api:error:too:many:request": "Demasiadas Solicitudes",
"api:error:too:many:shorturl": "El número de Snapps excede lo permitido por la plataforma.",
"api:invalid:offset": "El desplazamiento del cursor no puede ser mayor que los elementos de la base de datos.",
"api:snapp:id:unset": "La ID de Snapp no está configurada.",
"api:user:id:unset": "ID de usuario no establecido",
"api:user:ids:unset": "ID(s) de usuario no establecido(s)",
"apikey:copied:clipboard": "Clave API copiada al portapapeles",
"apikey:created": "Clave API Creada",
"apikey:description": "Para utilizar los puntos finales de API, autorice su llamada con un encabezado de autorización que contenga el token generado. Las claves API son únicas y se relacionan con la cuenta de usuario, compartiendo roles de base de datos.",
"apikey:generate": "Generar un token",
"apikey:label": "Clave API",
"apikey:missing": "Falta la clave API",
"apikey:placeholder": "Su CLAVE API se mostrará aquí.",
"apikey:redirect:documentation": "Consulte los <a href={{url}} class=\"link\">API Docs</a> completos para aprender cómo usarlos e implementarlos en su flujo de trabajo.",
"apikey:revoke": "Revocar token",
"apikey:revoke:message": "¿Está seguro? Esto inutilizará la clave actual y bloqueará su acceso a los puntos finales de API.",
"apikey:token": "Token",
"apikey:token:generated": "El Token ha sido generado",
"apikey:token:revoked": "El Token ha sido revocado.",
"auth:email": "Correo-e",
"auth:email:exists": "Este correo electrónico ya está vinculado a una cuenta, intenta restablecer tu contraseña.",
"auth:email:invalid": "Por favor ingrese su dirección de correo electrónico válida.",
"auth:email:mixed": "Por favor ingrese un correo electrónico o nombre de usuario válido.",
"auth:email:placeholder": "Escriba un correo electrónico válido aquí...",
"auth:email:unset": "Correo electrónico no proporcionado.",
"auth:helping:text": "Autenticación",
"auth:in:blacklist": "No está permitido registrarse en esta plataforma. Si cree que se trata de un error, intente ponerse en contacto con el Administrador de la Aplicación.",
"auth:not:authenticated": "Los usuarios anónimos no pueden acceder a este recurso.",
"auth:not:authorized": "No está autorizado a acceder a este recurso.",
"auth:not:in:whitelist": "No está permitido registrarse en esta plataforma. Si cree que se trata de un error, intente ponerse en contacto con el Administrador de la Aplicación.",
"auth:password": "Contraseña",
"auth:password:change": "Edite y guarde para cambiar su contraseña.",
"auth:password:confirm": "Confirmar la Contraseña",
"auth:password:confirm:placeholder": "Vuelva a ingresar su contraseña aquí...",
"auth:password:forgotten": "¿Olvidaste tu contraseña?",
"auth:password:guidelines": "La contraseña debe tener al menos seis caracteres, incluida una letra, un número y un carácter especial.",
"auth:password:placeholder": "Escriba su contraseña aquí...",
"auth:password:unmatch": "Las contraseñas no coinciden.",
"auth:password:unset": "Contraseña no proporcionada.",
"auth:profile:delete": "Perfil eliminado exitosamente.",
"auth:profile:saved": "Perfil actualizado con éxito.",
"auth:recover:password": "Recuperar contraseña",
"auth:recover:send": "Enviar restablecimiento de contraseña",
"auth:recover:mail:sent": "Se ha enviado un correo a la dirección de correo electrónico de la cuenta. Continúe desde allí.",
"auth:redirect:sign:in": "Si ya tiene una cuenta, puede <a href={{url}} class=\"link\">iniciar sesión aquí</a>.",
"auth:redirect:sign:up": "Si no tienes una cuenta, puedes <a href={{url}} class=\"link\">registrarte aquí</a>.",
"auth:sign:out": "Cerrar Sesión",
"auth:sign:in": "Iniciar Sesión",
"auth:sign:in:welcome": "Ingrese a su cuenta.",
"auth:sign:login": "Iniciar sesión",
"auth:sign:signup": "Registrarse",
"auth:sign:up": "Registrarse",
"auth:sign:up:disabled": "Los registros están actualmente deshabilitados. Si cree que se trata de un error, intente ponerse en contacto con el Administrador de aplicaciones.",
"auth:sign:up:welcome": "Crea una cuenta nueva.",
"auth:user:not:found": "Usuario no encontrado.",
"auth:username": "Nombre de usuario",
"auth:username:placeholder": "Escribe aquí tu nombre de usuario...",
"auth:username:taken": "El nombre de usuario ya está en uso. Por favor elije otro.",
"auth:username:unset": "Nombre de usuario no proporcionado.",
"auth:wrong:credentials": "Credenciales incorrectas.",
"auth:token:expired": "El token expiró, intenta solicitar uno nuevo.",
"error:page:title": "Error {{status}}",
"error:page:unknown": "Error no reconocido",
"emails:invited:resend": "Reenviar invitación",
"emails:invited:object": "Te han invitado a probar {app_name}",
"emails:invited:text": "Hola {nombre de usuario}. Este es un correo generado automáticamente que estás recibiendo porque tienes una nueva cuenta creada para ti. <a href=\"{url}\">Establece una contraseña aquí</a>.",
"emails:invited:footer": "<a href=\"{url}\">¡Visítanos!</a>",
"emails:recover:password:object": "Recuperación de cuenta",
"emails:recover:password:text": "Hola {nombre de usuario}. Este es un correo generado automáticamente que estás recibiendo para recuperar el acceso a tu cuenta. <a href=\"{url}\">Cambia la contraseña aquí</a>. <br/> Si no necesitas ninguna acción en tu cuenta, simplemente puedes ignorar este correo electrónico. Si continúas recibiendo correos electrónicos de recuperación de cuenta, comunícate con el Administrador del Sistema.",
"emails:recover:password:footer": "<a href=\"{url}\">¡Visítanos!</a>",
"emails:global:out:text": "Este es un correo electrónico generado automáticamente. Por favor no responda a esta dirección. Si necesita ayuda contáctenos en <a href=\"{url}\">{app_name}</a>",
"global:appname": "Snapp",
"global:misc:cancel": "Cancelar",
"global:misc:confirm": "Confirmar",
"global:misc:copy": "Copiar",
"global:misc:close": "Cerrar",
"global:misc:download": "Descargar",
"global:misc:loading": "Cargando...",
"global:misc:example": "Ejemplo",
"global:misc:lang": "Español",
"global:misc:month": "Mes",
"global:misc:months:apr": "Abril",
"global:misc:months:aug": "Agosto",
"global:misc:months:dec": "Diciembre",
"global:misc:months:feb": "Febrero",
"global:misc:months:jan": "Enero",
"global:misc:months:jul": "Julio",
"global:misc:months:jun": "Junio",
"global:misc:months:mar": "Marzo",
"global:misc:months:may": "Mayo",
"global:misc:months:nov": "Noviembre",
"global:misc:months:oct": "Octubre",
"global:misc:months:sep": "Septiembre",
"global:misc:reset": "Reiniciar",
"global:misc:revert": "Descartar",
"global:misc:save": "Guardar",
"global:misc:search": "Buscar",
"global:misc:search:snapps": "Filtrar snaps por cadena",
"global:misc:search:users": "Filtrar usuarios por cadena",
"global:misc:total": "Total",
"global:misc:unset": "sin configurar",
"global:misc:year": "Año",
"global:pages:admin": "Panel de Administrador",
"global:pages:blacklists": "Listas negras",
"global:pages:dashboard": "Panel",
"global:pages:edit": "Editar: {{id}}",
"global:pages:error:page:title": "Error",
"global:pages:home": "Inicio",
"global:pages:metrics": "Métricas",
"global:pages:privacy": "Esta aplicación no almacena sus datos personales ni rastrea ningún comportamiento. Conozca más sobre nuestra <a href={{url}} class=\"link\">Política de Privacidad</a>.",
"global:pages:settings": "Ajustes",
"global:pages:shorten": "Acortar",
"global:pages:snapp": "Snapp: {{id}}",
"global:pages:user": "Usuario: {{id}}",
"global:pages:user:create": "Crear Usuario",
"global:pages:users": "Usuarios",
"global:sections:apikey": "Clave REST API",
"global:sections:edit": "Editar Snapp",
"global:sections:import": "Importar",
"global:sections:edit:header": "Editar información de la URL",
"global:sections:preferences": "Preferencias",
"global:sections:profile": "Perfil de Usuario",
"global:sections:settings:app": "Ajustes de Aplicacion",
"global:sections:settings:blacklist": "Listas negras",
"global:sections:settings:export": "Exportar",
"global:sections:settings:limits": "Límites",
"global:sections:settings:smtp": "Transportador SMTP",
"global:sections:shorten": "Crear un Snapp",
"global:sections:shorten:header": "Proporcionar información de URL",
"global:sections:snapps": "Snapps",
"global:sections:urls": "Lista de URLs",
"global:sections:user:create": "Usuarios",
"global:sections:user:create:header": "Proporcionar información del usuario",
"global:sections:user:edit": "Editar Usuario",
"global:sections:users": "Lista de Usuarios",
"global:system:error": "Se produjo un error del sistema. Si esto persiste, comuníquese con el administrador del sistema.",
"graphs:undefined": "--- indefinido ---",
"graphs:expired": "--- caducado ---",
"graphs:expired:deleted": "Snapps caducados eliminados de las métricas.",
"graphs:remove:expired": "Eliminar caducados",
"graphs:remove:expired:helper": "Muchas de las métricas se conservan tras la eliminación o la expiración de una URL, perdiendo la afiliación al shortcode para que otros usuarios o usted mismo puedan reutilizarlo. Si prefiere eliminar los datos antiguos para mantener las métricas solo para las instantáneas activas, continúe con esta operación. La acción es irreversible.",
"graphs:audience:by": "Público por",
"graphs:browser": "Navegador",
"graphs:browsers": "Navegadores",
"graphs:cities": "Ciudades",
"graphs:devices": "Dispositivos",
"graphs:countries": "Países",
"graphs:ending:date": "Fecha de finalización",
"graphs:map": "Mapa",
"graphs:map:instructions": "Haga zoom con <kbd class=\"kbd p-1 py-0 rounded-token\">ctrl + rueda del mouse</kbd> o <kbd class=\"kbd p-1 py-0 rounded-token\">clic + arrastra</kbd> para Mover",
"graphs:map:save:position": "Guardar posición actual",
"graphs:os": "Sistema Operativo",
"graphs:regions": "Regiones",
"graphs:snapp:info": "Información del Snapp",
"graphs:snapps": "Snapps",
"graphs:starting:date": "Fecha de inicio",
"graphs:usages:label": "Usos",
"graphs:usages:per:day": "Usos por día",
"settings:api:key:vt": "API VirusTotal",
"settings:api:key:vt:description": "El dominio se puede analizar según la solicitud de <a href=\"{{url}}\">información de dominio</a> de la API de VirusTotal. Snapp comprobará la reputación del dominio y detendrá cualquier sitio web con puntuación negativa. Una puntuación positiva o nula dará como resultado un dominio válido. Las solicitudes se almacenan en caché en redis durante 24 horas.",
"settings:api:key:vt:helper:text": "Regístrate en VirusTotal para obtener una clave API",
"settings:api:key:vt:label": "Clave API",
"settings:api:key:vt:placeholder": "Introduzca aquí su clave API de VT...",
"settings:api:key:vt:protected": "Protegido con la API de Virus Total",
"settings:app:blacklists:description": "Las listas negras afectarán el registro y la actualización de los detalles del usuario, mientras que prohibir dominios generará un error al acortar una URL.",
"settings:app:blacklists:description:error": "Los usuarios baneados recibirán un error del sistema genérico durante el registro.",
"settings:app:blacklists:domain:add": "Bloquear dominio",
"settings:app:blacklists:domain:added": "El Dominio se ha agregado a la lista negra.",
"settings:app:blacklists:domain:description": "Esto afectará el registro de los usuarios y la edición de perfiles, y se comprobarán las listas negras de dominios durante el proceso de acortamiento de URLs.",
"settings:app:blacklists:domain:errors:missing": "Falta el Dominio",
"settings:app:blacklists:domain:placeholder": "Introduzca el dominio aquí...",
"settings:app:blacklists:domain:remove": "Desbloquear",
"settings:app:blacklists:domain:remove:message": "El dominio estará disponible nuevamente durante el acortamiento de URLs.",
"settings:app:blacklists:domain:removed": "El Dominio se ha eliminado de la lista negra.",
"settings:app:blacklists:domains": "Dominios",
"settings:app:blacklists:domains:description": "La lista de dominios que generarán un error cuando los usuarios intenten crear una URL corta. Los roles de administrador y superadministrador no se ven afectados por esta configuración.",
"settings:app:blacklists:email:add": "Bloquear correo electrónico",
"settings:app:blacklists:email:added": "El Correo Electrónico se ha agregado a la lista negra.",
"settings:app:blacklists:email:description": "Esto afectará el registro de los usuarios y la edición de perfiles, y se comprobarán las listas negras de dominios durante el proceso de acortamiento de URLs.",
"settings:app:blacklists:email:errors:format": "El correo electrónico no es un correo electrónico o proveedor válido (por ejemplo: @ejemplo.es).",
"settings:app:blacklists:email:errors:missing": "Falta el Correo Electrónico",
"settings:app:blacklists:email:placeholder": "Escriba el correo electrónico aquí...",
"settings:app:blacklists:email:remove": "Desbloquear",
"settings:app:blacklists:email:remove:message": "El correo electrónico volverá a estar disponible durante la creación del usuario.",
"settings:app:blacklists:email:removed": "El Correo Electrónico ha sido eliminado de la lista negra.",
"settings:app:blacklists:meta:domains:label": "Dominios bloqueados",
"settings:app:blacklists:meta:emails:label": "Correos Electrónicos bloqueados",
"settings:app:blacklists:meta:label": "Contadores",
"settings:app:blacklists:meta:usernames:label": "Usuarios bloqueados",
"settings:app:blacklists:username:add": "Bloquear nombre de usuario",
"settings:app:blacklists:username:added": "El Usuario se ha agregado a la lista negra.",
"settings:app:blacklists:username:description": "Esto afectará el registro de los usuarios y la edición de perfiles, y se comprobarán las listas negras de dominios durante el proceso de acortamiento de URLs.",
"settings:app:blacklists:username:errors:missing": "Falta el nombre de usuario",
"settings:app:blacklists:username:placeholder": "Escriba el nombre de usuario aquí...",
"settings:app:blacklists:username:remove": "Desbloquear",
"settings:app:blacklists:username:remove:message": "El nombre de usuario volverá a estar disponible durante la creación del usuario.",
"settings:app:blacklists:username:removed": "El Nombre de Usuario ha sido eliminado de la lista negra.",
"settings:app:exports:all": "Exportar todo",
"settings:app:exports:confirm:message": "Esto exportará todos los snapps de la base de datos y puede requerir algo de tiempo dependiendo del tamaño de la base de datos. ¿Quieres continuar?",
"settings:app:exports:helper": "Si desea abandonar Snapp, puede exportar un CSV con todas sus URL abreviadas.",
"settings:app:home:description": "En su lugar, redirija a los usuarios a iniciar sesión o al panel de control.",
"settings:app:allow:unsecure:http": "Permitir HTTP No Seguro",
"settings:app:allow:unsecure:http:description": "Permitir el uso de destinos web <b class='text-error-500'>HTTP no seguros</b> durante la creación de snapps.",
"settings:app:home:label": "Desactivar página de inicio",
"settings:app:private:saved": "Preferencias actualizadas",
"settings:app:sign:up:description": "Permitir registros externos a esta aplicación.",
"settings:app:sign:up:label": "Habilitar registro",
"settings:app:smtp:active": "Activo",
"settings:app:smtp:description": "SMTP se utiliza para el proceso de recuperación de contraseña y envío de primera invitación de acceso a los usuarios generada a través de la plataforma o mediante API REST.",
"settings:app:smtp:from:label": "Desde la dirección",
"settings:app:smtp:from:placeholder": "norespondas@ejemplo.es",
"settings:app:smtp:from:unset": "La dirección de remitente no está configurada",
"settings:app:smtp:host:label": "Host",
"settings:app:smtp:host:placeholder": "smpt.ejemplo.es",
"settings:app:smtp:host:unset": "El host no está configurado.",
"settings:app:smtp:not:active": "No activo",
"settings:app:smtp:not:working": "El SMTP no funciona como se esperaba, verifique la configuración insertada.",
"settings:app:smtp:pass:label": "Contraseña",
"settings:app:smtp:pass:placeholder": "contraseña-muy-segura",
"settings:app:smtp:pass:unset": "La contraseña no está establecida.",
"settings:app:smtp:port:label": "Puerto",
"settings:app:smtp:port:placeholder": "465",
"settings:app:smtp:port:unset": "El puerto no está configurado.",
"settings:app:smtp:user:label": "Usuario",
"settings:app:smtp:user:placeholder": "cuenta@ejemplo.es",
"settings:app:smtp:user:unset": "El usuario no está configurado.",
"settings:app:smtp:working": "El SMTP funciona y acepta correos electrónicos.",
"settings:app:switch": "Los interruptores se guardan al cambiar.",
"settings:app:user:limits:description": "Estas son limitaciones solicitadas por la comunidad para el rol de Usuario. Estos límites no afectarán los roles de administrador y superadministrador. Deshabilitado por defecto.",
"settings:app:user:limits:max:placeholder": "0",
"settings:app:user:limits:max:rows:label": "Número de filas",
"settings:app:user:limits:max:rpd:description": "La cantidad de solicitudes a la API /snapps por día.",
"settings:app:user:limits:max:rpd:label": "Solicitudes Máximas por Día",
"settings:app:user:limits:max:rpm:description": "La cantidad de solicitudes a la API /snapps por minuto.",
"settings:app:user:limits:max:rpm:label": "Solicitudes Máximas por Minuto",
"settings:app:user:limits:max:urls:description": "El número máximo de URL cortas que un usuario puede crear.",
"settings:app:user:limits:max:urls:label": "Snapp máximos por usuario (predeterminado)",
"settings:app:user:limits:max:urls:unset": "El número máximo de URLs no es un número válido.",
"settings:app:user:limits:max:usages": "Estas son limitaciones solicitadas por la comunidad para el rol de Usuario. Estos límites no afectarán los roles de administrador y superadministrador. Los límites están deshabilitados de forma predeterminada.",
"settings:app:user:limits:max:usages:placeholder": "Usos máximos",
"settings:app:whitelists:email:add": "Lista blanca de correos electrónicos",
"settings:app:whitelists:email:added": "El correo electrónico se ha agregado a la lista blanca.",
"settings:app:whitelists:email:description": "Esto permitirá el registro únicamente de correos electrónicos y proveedores en la lista blanca. Cualquier otro correo electrónico que intente registrarse será rechazado.",
"settings:app:whitelists:email:errors:format": "El Correo Electrónico no es un correo electrónico o proveedor válido (es decir: @ejemplo.es).",
"settings:app:whitelists:email:errors:missing": "Falta el Correo Electrónico",
"settings:app:whitelists:email:placeholder": "Escriba el correo electrónico aquí...",
"settings:app:whitelists:email:remove": "Eliminar",
"settings:app:whitelists:email:remove:message": "El correo electrónico será eliminado de la lista blanca.",
"settings:app:whitelists:email:removed": "El Correo Electrónico ha sido eliminado de la lista blanca.",
"settings:app:whitelists:meta:emails:label": "Correos Electrónicos permitidos",
"settings:app:wise": "Estas configuraciones se reflejarán en toda la plataforma.",
"settings:app:wise:saved": "Preferencias globales actualizadas",
"settings:lang": "Idioma",
"settings:lang:contribute": "Elija el idioma para la visualización de la aplicación. Contribuya a las traducciones en nuestro <a class=\"link\" href={{url}}>repositorio de GitHub</a>.",
"settings:not:found": "No se han encontrado las configuraciones requeridas, revise su ortografía y vuelva a intentarlo",
"settings:theme:dark": "Modo Oscuro",
"settings:theme:light": "Modo Claro",
"snapp:clipboard:copied": "Snapp copiado al Portapapeles",
"snapp:clipboard:error": "Debes estar en un dominio HTTPS seguro y confiable para usar el Portapapeles del Navegador",
"snapp:disable": "Deshabilitar",
"snapp:has:been:enabled": "Snapp habilitado.",
"snapp:has:been:disabled": "Snapp deshabilitado.",
"snapp:disable:helper:text": "Pausa este Snapp. Se conservarán sus datos, el código corto seleccionado y los datos de visualización. El usuario recibirá un mensaje de desambiguación explicando que la redirección no está disponible temporalmente.",
"snapp:disable:helper:usages": "Además, cuando un snapp se utiliza la cantidad de veces establecida, se desactiva de forma predeterminada. Se puede volver a habilitar desde aquí.",
"snapp:is:disabled": "Solicitar Snapps no está disponible en este momento, inténtelo más tarde. Si el error persiste, intente comunicarse con el Administrador del Sistema.",
"snapps:usage:by:country": "Público de {{country}}",
"snapps:usage": "Número de visitantes: {{count}}",
"snapps:columns:author": "Autor",
"snapps:columns:created": "Creado",
"snapps:columns:has:secret": "Protegido",
"snapps:columns:max:usages": "Limitar",
"snapps:columns:original:url": "Origen",
"snapps:columns:shortcode": "Código corto",
"snapps:columns:status": "Estado",
"snapps:columns:ttl": "Cad.",
"snapps:columns:used": "Usos",
"snapps:create:one": "Crear un Snapp",
"snapps:created": "Snapp guardado con éxito",
"snapps:date:invalid": "La fecha de vencimiento tiene un formato no válido.",
"snapps:domain:blacklisted": "Hay un problema con el dominio del proveedor. Si cree que se trata de un error, comuníquese con el Administrador de la Aplicación.",
"snapps:has:secret:false": "Desprotegido",
"snapps:has:secret:label": "Protegido por secreto",
"snapps:has:secret:true": "Protegido",
"snapps:limit": "Has creado {{count}} de {{max}} URLs.",
"snapps:max:urls:reached": "Alcanzaste el límite máximo establecido para el usuario.",
"snapps:more:copy": "Copiar snapp",
"snapps:more:delete": "Borrar",
"snapps:more:edit": "Editar",
"snapps:more:qrcode": "Código QR",
"snapps:not:found": "No había una URL corta para esta consulta, inténtelo de nuevo. Si el error persiste, intente ponerse en contacto con el administrador del sistema.",
"snapps:notes:label": "Notas",
"snapps:original:url:description": "Escriba la URL original aquí...",
"snapps:original:url:helper": "Debe ser un enlace <code class=\"code\">https://</code> válido",
"snapps:original:url:invalid": "La URL Original del Snapp no es una URL https segura válida.",
"snapps:original:url:label": "URL original",
"snapps:original:url:unset": "La URL Original de Snapp no está configurada.",
"snapps:passcode:placeholder": "Escriba aquí el secreto ...",
"snapps:protected": "Protegido",
"snapps:protected:helper": "Este snapp está protegido. Proporcione las credenciales correctas para continuar.",
"snapps:qrcode:download": "Descargar Código QR",
"snapps:reset:sort": "Restablecer filtros",
"snapps:secret:invalid": "Credenciales incorrectas",
"snapps:secret:unset": "Secreto no establecido",
"snapps:sections:advanced:secret": "Establecer un secreto",
"snapps:sections:advanced:secret:description": "Proteja este vínculo con un código secreto. Será necesario para los usuarios para poder continuar con el recurso vinculado.",
"snapps:sections:advanced:secret:edit:placeholder": "Editar para cambiar el código secreto...",
"snapps:sections:advanced:secret:label": "Secreto",
"snapps:sections:advanced:secret:placeholder": "Escriba el código secreto aquí...",
"snapps:sections:advanced:ttl": "Establecer vencimiento",
"snapps:sections:advanced:ttl:description": "Establezca una fecha de vencimiento para esta URL corta. Después de ese tiempo, la URL corta será <u class=\"underlined\">eliminada</u>.",
"snapps:sections:advanced:ttl:label": "Elige una fecha",
"snapps:sections:advanced:ttl:placeholder": "Establecer vencimiento",
"snapps:sections:advanced:usages": "Establecer usos máximos",
"snapps:sections:advanced:usages:description": "Establezca el Snapp en un máximo de usos antes de que se desactive",
"snapps:select:columns": "Seleccionar columnas",
"snapps:selected:remove": "Eliminar seleccionado",
"snapps:selected:remove:helper": "Estás a punto de eliminar {{ids_count}} snapps, y metadatos y métricas relativas. Esto será permanente. ¿Quieres continuar?",
"snapps:selected:removed": "Los Snapps deseados se han eliminado.",
"snapps:shortcode:description": "Escriba el código corto aquí...",
"snapps:shortcode:helper": "Esto se generará automáticamente si se deja en blanco",
"snapps:shortcode:label": "Código corto",
"snapps:status:active": "Activo",
"snapps:status:blacklisted": "En la lista negra",
"snapps:status:disabled": "Desactivado",
"snapps:status:expired": "Caducado",
"snapps:urls:list": "Lista de URLs",
"snapps:visit": "Visitar Snapp",
"snapps:vt:api:key:malicious": "Esta URL ha sido incluida en la lista negra de la API de VirusTotal. Si cree que se trata de un error, comuníquese con el Administrador del Sistema.",
"snapps:import": "Importar Snapps",
"snapps:import:sqlite:button": "Actualizar la Base de Datos",
"snapps:import:sqlite:modal:label": "Actualizar la Base de Datos",
"snapps:import:sqlite:modal:helper": "Se ha detectado un archivo SQLITE de una versión anterior. ¿Quieres intentar importar el Snapp anterior? Esta operación puede tardar mucho tiempo en bases de datos grandes.",
"snapps:import:helper": "Importar archivo CSV de la versión anterior de Snapp",
"snapps:import:label": "Cargar un archivo CSV",
"snapps:import:label:assign": "Asignar snapps a los usuarios",
"snapps:import:error": "Ha habido un error al importar. Obtenga más información en la consola del navegador.",
"snapps:import:error:extension": "La importación solo funciona con archivos CSV.",
"snapps:import:successful": "Los snapps se guardaron correctamente en la base de datos.",
"super:admin:protects": "No puedes editar o eliminar a un SuperAdministrador.",
"users:advanced:settings": "Ajustes Avanzados",
"users:advanced:settings:admin:description": "Otorga a este usuario un rol de administrador.",
"users:advanced:settings:admin:label": "Administrador",
"users:advanced:settings:admin:privilege": "Los administradores no se ven afectados por esto.",
"users:columns:created": "Creado",
"users:columns:email": "Correo-e",
"users:columns:roles": "Roles",
"users:columns:updated": "Actualizado",
"users:columns:urls": "URLs",
"users:columns:username": "Nombre de Usuario",
"users:create:one": "Crear usuario",
"users:created": "El usuario ha sido creado.",
"users:email:helper": "El correo electrónico del usuario nuevo creado.",
"users:email:label": "Correo-e",
"users:email:placeholder": "Escriba el correo electrónico aquí...",
"users:more:delete": "Borrar usuario",
"users:more:edit": "Editar",
"users:notes:helper": "Las notas solo son visibles a través de la página de usuario exclusiva de los Administradores",
"users:notes:label": "Notas",
"users:reset:sort": "Quitar Filtros",
"users:role:admin": "Administrador",
"users:role:superadmin": "Super Administrador",
"users:role:user": "Usuario",
"users:select:columns": "Seleccionar columnas",
"users:selected:remove": "Borrar usuario",
"users:selected:remove:helper": "Estás a punto de eliminar {{ids_count}} usuarios y su contenido. Esto es irreversible. ¿Quieres continuar?",
"users:selected:removed": "Usuario eliminado correctamente",
"users:updated": "El usuario ha sido actualizado.",
"users:username:helper": "El nombre de usuario del nuevo usuario creado.",
"users:username:label": "Nombre de usuario",
"users:username:placeholder": "Escriba el nombre de usuario aquí...",
"users:invite:resent": "La invitación se ha vuelto a enviar correctamente",
"home:intro": "¿Busca una solución de acortamiento de URL confiable y autohospedable? ¡No busque más! {{appname}} es la herramienta perfecta para personas y empresas que buscan control sobre la gestión de sus URL.",
"home:features:label": "Nuestras Funciones",
"home:features:ui:label": "Interfaz amigable",
"home:features:ui:description": "Snapp proporciona una interfaz fácil de usar para acortar enlaces sin problemas. ¡Lea cómo empezar!",
"home:features:auth:label": "Autentificación Segura",
"home:features:auth:description": "Disfrute de una experiencia segura con sesiones de autenticación y contraseñas codificadas. Su información está en buenas manos.",
"home:features:shortcode:label": "Códigos Cortos Personalizados",
"home:features:shortcode:description": "Cree códigos cortos personalizados para sus enlaces para hacerlos memorizables y fáciles de compartir.",
"home:features:ttl:label": "Caducidad",
"home:features:ttl:description": "Controla la vida útil de tus enlaces con fechas de caducidad. Establece fechas de caducidad para mayor seguridad o déjalas activas de forma indefinida.",
"home:features:secret:label": "Enlaces secretos",
"home:features:secret:description": "Agregue una capa adicional de protección con enlaces secretos. Elija compartir enlaces con un público seleccionado utilizando secretos únicos.",
"home:features:metrics:label": "Análisis de Uso",
"home:features:metrics:description": "Proporcione análisis detallados para cada enlace que cree. Snapp recopila métricas de forma anónima y proporciona información sobre la interacción de los enlaces.",
"home:features:integration:label": "Métricas Avanzadas",
"home:features:integration:description": "Integre su instancia de Snapp con su instancia <a class=\"link\" href=\"https://umami.is\" target=\"_blank\">Umami Analytics</a> autohospedada o en la nube para obtener métricas avanzadas de sus Snapps.",
"home:features:vt:label": "Comprueba la reputación de las URL",
"home:features:vt:description": "Proteja los enlaces que pasan a través de su instancia de Snapp verificando su reputación en la <a class=\"link\" href=\"https://virustotal.com\" target=\"_blank\">API de VirusTotal</a>.",
"home:features:rest:label": "API REST",
"home:features:rest:description": "Funciones solicitadas por la comunidad que permiten que API Rest endpoint cree y administre sus Snapps de forma remota. Lea los <a class=\"link\" href=\"/dashboard/docs\">Swagger Docs</a> completos aquí.",
"home:getting:started:label": "Primeros pasos",
"home:getting:started:description": "Snapp es una plataforma de código abierto autohospedable",
"home:manual:install": "Instalación manual",
"home:manual:install:steps": "Para ejecutar Snapp necesitas un entorno con NodeJS instalado y disponible",
"home:manual:install:redis": "Snapp requiere ahora una Base de Datos Redis en ejecución. Puedes usar de forma simple el compose proporcionado para ejecutar unaa instancia de Redis con persistencia.",
"home:manual:install:clone:0": "Clonar el repositorio de git",
"home:manual:install:clone:1": "<code class=\"code\">git clone https://github.com/urania-dev/snapp.git</code>",
"home:manual:install:download:0": "Instalar dependencias",
"home:manual:install:download:1": "<code class=\"code\">npm install</code>",
"home:manual:install:env:0": "Copie y edite el archivo <code class=\"code\">.env.example</code>",
"home:manual:install:env:1": "<code class=\"code\">cp .env.example .env && nano .env</code>",
"home:manual:install:dev:0": "Desarrolla y amplía Snapp en tu servidor <div class=\"badge variant-ghost italic text-xs \">opcional</div>",
"home:manual:install:dev:1": "<code class=\"code\">npm run dev</code>",
"home:manual:install:build:0": "Crea la apiación",
"home:manual:install:build:1": "<code class=\"code\">npm run build</code>",
"home:manual:install:run:0": "¡Ejecuta y disfruta!",
"home:manual:install:run:1": "<code class=\"code\">node -r dotenv/config build</code>",
"home:docker": "Usando el Contenedor Docker",
"home:docker:description": "Utilice este docker-compose.yml para ejecutar su Snapp",
"home:docker:better": "Puede encontrar un mejor docker compose en nuestro <a class=\"link\" href=\"{{url}}\">Repositorio Github</a>.",
"home:migration": "Migración",
"home:migration:description": "Las últimas versiones de Snapp incluyeron Exportación a CSV para facilitar la migración. Simplemente inicie sesión e importe sus URL desde el panel y continúe desde donde lo dejó.",
"home:stack:label": "The Stack",
"home:stack:description": "La tecnología involucrada",
"snapp:update:db": "<div class='flex flex-col'><h3 class='font-semibold'>Snapp ha cambiado</h3><small>¡Actualiza tu base de datos para importar tu versión anterior de Snapp!</div>"
}

438
translations/gl.json Normal file
View File

@@ -0,0 +1,438 @@
{
"api:error:too:many:request": "Demasiadas Solicitudes",
"api:error:too:many:shorturl": "O número de Snapps excede o permitido pola plataforma.",
"api:invalid:offset": "O desprazamento do cursor non pode ser superior aos elementos da base de datos",
"api:snapp:id:unset": "O Snapp ID non está definido.",
"api:user:id:unset": "ID de usuario non definido",
"api:user:ids:unset": "ID de usuario non definido",
"apikey:copied:clipboard": "A clave API copiouse no portapapeis",
"apikey:created": "Clave API creada",
"apikey:description": "Para usar os endpoints da API, autoriza a túa chamada cunha Cabeceira de Autorización que conteña o Token xerado. As claves API son únicas e están relacionadas coa conta do usuario, compartindo roles de base de datos.",
"apikey:generate": "Xerar un token",
"apikey:label": "Clave API",
"apikey:missing": "Falta a clave da API",
"apikey:placeholder": "A túa CLAVE API aparecerá aquí.",
"apikey:redirect:documentation": "Consulta os <a href={{url}} class=\"link\">Documentos da API</a> completos para saber como usalo e implementalo no teu fluxo de traballo.",
"apikey:revoke": "Revogar o token",
"apikey:revoke:message": "Estás seguro? Isto inutilizará a clave actual e bloqueará o seu acceso aos Endpoints da API.",
"apikey:token": "Token",
"apikey:token:generated": "O token foi xerado",
"apikey:token:revoked": "O token foi revogado.",
"auth:email": "Correo-e",
"auth:email:exists": "Este correo electrónico xa está ligado a unha conta, tenta restablecer o teu contrasinal.",
"auth:email:invalid": "Proporcione un enderezo de correo electrónico válido.",
"auth:email:mixed": "Introduce un correo electrónico ou un nome de usuario válido.",
"auth:email:placeholder": "Escribe aquí un correo electrónico válido...",
"auth:email:unset": "Correo electrónico non proporcionado.",
"auth:helping:text": "Autenticación",
"auth:in:blacklist": "Non tes permiso para rexistrarte nesta plataforma. Se cres que se trata dun erro, ponte en contacto co Xestor da Aplicación",
"auth:not:authenticated": "Os usuarios anónimos non teñen permiso para acceder a este recurso.",
"auth:not:authorized": "Non tes autorización para acceder a este recurso.",
"auth:not:in:whitelist": "Non tes permiso para rexistrarte nesta plataforma. Se cres que se trata dun erro, ponte en contacto co Xestor da Aplicación",
"auth:password": "Contrasinal",
"auth:password:change": "Edita e garda para cambiar o teu contrasinal.",
"auth:password:confirm": "Confirme o Contrasinal",
"auth:password:confirm:placeholder": "Volve introducir aquí o teu contrasinal...",
"auth:password:forgotten": "Esqueceu o contrasinal?",
"auth:password:guidelines": "O contrasinal debe ter polo menos seis caracteres, incluíndo unha letra, un número e un carácter especial.",
"auth:password:placeholder": "Escribe aquí o teu contrasinal...",
"auth:password:unmatch": "Os contrasinais non coinciden.",
"auth:password:unset": "Non se proporcionou o contrasinal.",
"auth:profile:delete": "O perfil eliminouse correctamente.",
"auth:profile:saved": "O perfil actualizouse correctamente.",
"auth:recover:password": "Recuperar contrasinal",
"auth:recover:send": "Enviar o restablecemento do contrasinal",
"auth:recover:mail:sent": "Enviouse un correo electrónico ao enderezo de correo electrónico da conta. Por favor, continúa dende alí.",
"auth:redirect:sign:in": "Se xa tes unha conta, podes <a href={{url}} class=\"link\">iniciar sesión aquí</a>.",
"auth:redirect:sign:up": "Se non tes unha conta, podes <a href={{url}} class=\"link\">rexístrate aquí</a>.",
"auth:sign:out": "Pechar Sesión",
"auth:sign:in": "Acceder",
"auth:sign:in:welcome": "Inicia sesión na túa conta.",
"auth:sign:login": "Acceder",
"auth:sign:signup": "Rexistrarse",
"auth:sign:up": "Rexistrarse",
"auth:sign:up:disabled": "Os rexistros están actualmente desactivados. Se cres que se trata dun erro, ponte en contacto co Xestor da Aplicación.",
"auth:sign:up:welcome": "Crea unha conta nova.",
"auth:user:not:found": "Usuario non atopado.",
"auth:username": "Nome de usuario",
"auth:username:placeholder": "Escribe aquí o teu nome de usuario...",
"auth:username:taken": "O nome de usuario xa está en uso. Escolle outro.",
"auth:username:unset": "Non se proporcionou o nome de usuario.",
"auth:wrong:credentials": "Credenciais incorrectas.",
"auth:token:expired": "O token caducou, tenta solicitar un novo.",
"error:page:title": "Error {{status}}",
"error:page:unknown": "Erro non recoñecido",
"emails:invited:resend": "Reenviar a invitación",
"emails:invited:object": "Invitáronte a probar {app_name}",
"emails:invited:text": "Ola {username}. Este é un correo xerado automaticamente que estás a recibir porque tes unha conta nova creada para ti. <a href=\"{url}\">Establece aquí un contrasinal</a>.",
"emails:invited:footer": "<a href=\"{url}\">Visítanos!</a>",
"emails:recover:password:object": "Recuperación da conta",
"emails:recover:password:text": "Ola {username}. Este é un correo xerado automaticamente que estás a recibir para recuperar o acceso á túa conta. <a href=\"{url}\">Cambia aquí o contrasinal</a>. <br/> Se non precisaches ningunha acción na túa conta, simplemente podes ignorar este correo electrónico. Se continúas recibindo o correo electrónico de recuperación da conta, ponte en contacto co Xestor do Sistema.",
"emails:recover:password:footer": "<a href=\"{url}\">Visítanos!</a>",
"emails:global:out:text": "Este é un correo electrónico xerado automaticamente. Non respondas a este enderezo. Se precisas axuda, ponte en contacto connosco en <a href=\"{url}\">{app_name}</a>",
"global:appname": "Snapp",
"global:misc:cancel": "Cancelar",
"global:misc:confirm": "Confirmar",
"global:misc:copy": "Copiar",
"global:misc:close": "Pechar",
"global:misc:download": "Descargar",
"global:misc:loading": "Cargando...",
"global:misc:example": "Exemplo",
"global:misc:lang": "Galego",
"global:misc:month": "Mes",
"global:misc:months:apr": "Abril",
"global:misc:months:aug": "Agosto",
"global:misc:months:dec": "Decembro",
"global:misc:months:feb": "Febreiro",
"global:misc:months:jan": "Xaneiro",
"global:misc:months:jul": "Xullo",
"global:misc:months:jun": "Xuño",
"global:misc:months:mar": "Marzo",
"global:misc:months:may": "Maio",
"global:misc:months:nov": "Novembro",
"global:misc:months:oct": "Outibro",
"global:misc:months:sep": "Setembro",
"global:misc:reset": "Resetear",
"global:misc:revert": "Descartar",
"global:misc:save": "Gardar",
"global:misc:search": "Buscar",
"global:misc:search:snapps": "Filtra os snapps por cadea",
"global:misc:search:users": "Filtrar os usuarios por cadea",
"global:misc:total": "Total",
"global:misc:unset": "sen configurar",
"global:misc:year": "Ano",
"global:pages:admin": "Panel de Administración",
"global:pages:blacklists": "Listas negras",
"global:pages:dashboard": "Panel de Control",
"global:pages:edit": "Editar: {{id}}",
"global:pages:error:page:title": "Error",
"global:pages:home": "Inicio",
"global:pages:metrics": "Métricas",
"global:pages:privacy": "Esta aplicación non almacena os teus datos persoais nin rastrexa ningún comportamento. Obtén máis información sobre a nosa <a href={{url}} class=\"link\">Política de Privacidade</a>.",
"global:pages:settings": "Configuración",
"global:pages:shorten": "Acurtar",
"global:pages:snapp": "Snapp: {{id}}",
"global:pages:user": "Usuario: {{id}}",
"global:pages:user:create": "Crear Usuario",
"global:pages:users": "Usuarios",
"global:sections:apikey": "Clave REST API",
"global:sections:edit": "Editar Snapp",
"global:sections:import": "Importar",
"global:sections:edit:header": "Editar a información do URL",
"global:sections:preferences": "Preferencias",
"global:sections:profile": "Perfil de usuario",
"global:sections:settings:app": "Configuración da Aplicación",
"global:sections:settings:blacklist": "Listas negras",
"global:sections:settings:export": "Exportar",
"global:sections:settings:limits": "Límites",
"global:sections:settings:smtp": "Transportador SMTP",
"global:sections:shorten": "Crea un Snapp",
"global:sections:shorten:header": "Proporcione información URL",
"global:sections:snapps": "Snapps",
"global:sections:urls": "Lista de URLs",
"global:sections:user:create": "Usuario",
"global:sections:user:create:header": "Proporcionar información do usuario",
"global:sections:user:edit": "Editar Usuario",
"global:sections:users": "Lista de Usuarios",
"global:system:error": "Produciuse un erro do sistema. Se isto persiste, póñase en contacto co administrador do sistema.",
"graphs:undefined": "--- indefinido ---",
"graphs:expired": "--- caducado ---",
"graphs:expired:deleted": "Elimináronse os Snapps caducados das Métricas.",
"graphs:remove:expired": "Eliminar caducados",
"graphs:remove:expired:helper": "Moitas das métricas consérvanse ao eliminar ou caducar un URL, perdendo a afiliación ao shortcode para que outros usuarios ou vostede mesmo poidan reutilizalo. Se prefires eliminar os datos antigos para manter as métricas só para os snaps activos, continúa con esta operación. A acción é irreversible.",
"graphs:audience:by": "Público por",
"graphs:browser": "Navegador",
"graphs:browsers": "Navegadores",
"graphs:cities": "Cidades",
"graphs:devices": "Dispositivos",
"graphs:countries": "Paises",
"graphs:ending:date": "Data de finalización",
"graphs:map": "Mapa",
"graphs:map:instructions": "Amplia con <kbd class=\"kbd p-1 py-0 rounded-token\">ctrl + roda do rato</kbd> ou <kbd class=\"kbd p-1 py-0 rounded-token\">clic + arrastra</kbd> para mover",
"graphs:map:save:position": "Garda a posición actual",
"graphs:os": "Sistema Operativo",
"graphs:regions": "Rexións",
"graphs:snapp:info": "Información do Snapp",
"graphs:snapps": "Snapps",
"graphs:starting:date": "Data de comezo",
"graphs:usages:label": "Usos",
"graphs:usages:per:day": "Usos por día",
"settings:api:key:vt": "VirusTotal API",
"settings:api:key:vt:description": "O dominio pódese escanear contra a solicitude de <a href=\"{{url}}\">información do dominio</a> da API de VirusTotal. Snapp verificará a reputación do dominio e detén calquera sitio web cunha puntuación negativa. A puntuación positiva ou nula fará que un dominio sexa válido. As solicitudes gárdanse na memoria caché en redis durante 24 horas.",
"settings:api:key:vt:helper:text": "Rexístrese en VirusTotal para obter unha clave da API",
"settings:api:key:vt:label": "Clave API",
"settings:api:key:vt:placeholder": "Escribe aquí a túa clave VT API...",
"settings:api:key:vt:protected": "Protexido pola API de Virus Total",
"settings:app:blacklists:description": "As Listas Negras afectarán ao rexistro e á actualización dos datos do usuario, mentres que a prohibición de dominios provocará un erro ao acurtar un URL.",
"settings:app:blacklists:description:error": " Os usuarios excluídos recibirán un Erro Xenérico do sistema durante o rexistro.",
"settings:app:blacklists:domain:add": "Bloquear dominio",
"settings:app:blacklists:domain:added": "O Dominio engadiuse á lista negra.",
"settings:app:blacklists:domain:description": "Isto afectará ao rexistro dos usuarios e á edición do perfil, as listas negras de dominios comprobaranse durante o proceso de acurtamento de urls.",
"settings:app:blacklists:domain:errors:missing": "Falta o Dominio",
"settings:app:blacklists:domain:placeholder": "Escribe aquí o dominio...",
"settings:app:blacklists:domain:remove": "Desbloquear",
"settings:app:blacklists:domain:remove:message": " O Dominio estará dispoñible de novo durante o acurtamento de URLs.",
"settings:app:blacklists:domain:removed": "O Dominio foi eliminado da lista negra.",
"settings:app:blacklists:domains": "Dominios",
"settings:app:blacklists:domains:description": "A lista de dominios que mostrará un erro cando os usuarios intenten crear un URL curto. Os roles de administrador e superadministrador non se ven afectados por esta configuración.",
"settings:app:blacklists:email:add": "Bloquear correo electrónico",
"settings:app:blacklists:email:added": "O Correo Electrónico engadiuse á lista negra.",
"settings:app:blacklists:email:description": "Isto afectará ao rexistro dos usuarios e á edición do perfil, as listas negras de dominios comprobaranse durante o proceso de acurtamento de urls.",
"settings:app:blacklists:email:errors:format": "O Correo Electrónico non é un correo electrónico ou provedor válido (por exemplo: @exemplo.gal).",
"settings:app:blacklists:email:errors:missing": "Falta o Correo Electrónico",
"settings:app:blacklists:email:placeholder": "Escribe aquí o correo electrónico...",
"settings:app:blacklists:email:remove": "Desbloquear",
"settings:app:blacklists:email:remove:message": " O correo electrónico volverá estar dispoñible durante a creación do usuario.",
"settings:app:blacklists:email:removed": "O Correo Electrónico foi eliminado da lista negra.",
"settings:app:blacklists:meta:domains:label": "Dominios bloqueados",
"settings:app:blacklists:meta:emails:label": " Correos Electrónicos bloqueados",
"settings:app:blacklists:meta:label": "Contadores",
"settings:app:blacklists:meta:usernames:label": " Nomes de Usuario bloqueados",
"settings:app:blacklists:username:add": "Bloquear o Nome de Usuario",
"settings:app:blacklists:username:added": "O Usuario engadiuse á lista negra.",
"settings:app:blacklists:username:description": "Isto afectará ao rexistro dos usuarios e á edición do perfil, as listas negras de dominios comprobaranse durante o proceso de acurtamento de urls.",
"settings:app:blacklists:username:errors:missing": "Falta o Nome de Usuario",
"settings:app:blacklists:username:placeholder": "Escribe aquí o nome de usuario...",
"settings:app:blacklists:username:remove": "Desbloquear",
"settings:app:blacklists:username:remove:message": "O nome de usuario volverá estar dispoñible durante a creación do usuario.",
"settings:app:blacklists:username:removed": "O Nome de Usuario foi eliminado da lista negra.",
"settings:app:exports:all": "Exportar todo",
"settings:app:exports:confirm:message": "Isto exportará todos os snapps da base de datos e pode requirir algún tempo dependendo do tamaño da base de datos. Queres continuar?",
"settings:app:exports:helper": "Se queres abandonar Snapp, podes exportar un CSV con todos os teus URL acurtados.",
"settings:app:home:description": "No seu lugar, redirixe os usuarios ao inicio de sesión ou ao panel de control.",
"settings:app:allow:unsecure:http": "Permitir HTTP non seguro",
"settings:app:allow:unsecure:http:description": "Permitir o uso de destinos web <b class='text-error-500'>HTTP non seguros</b> durante a creación de snapps.",
"settings:app:home:label": "Desactivar a páxina de inicio",
"settings:app:private:saved": "Preferencias actualizadas",
"settings:app:sign:up:description": "Permite rexistros externos nesta aplicación.",
"settings:app:sign:up:label": "Activar o rexistro",
"settings:app:smtp:active": "Activo",
"settings:app:smtp:description": "O SMTP úsase para o proceso de recuperación de contrasinal e enviar a primeira invitación de acceso aos usuarios xerados a través da plataforma ou a través da API REST.",
"settings:app:smtp:from:label": "Dende o enderezo",
"settings:app:smtp:from:placeholder": "nonrespondas@exemplo.gal",
"settings:app:smtp:from:unset": "O enderezo dende non está definido",
"settings:app:smtp:host:label": "Host",
"settings:app:smtp:host:placeholder": "smpt.exemplo.gal",
"settings:app:smtp:host:unset": "O host non está definido.",
"settings:app:smtp:not:active": "Non activo",
"settings:app:smtp:not:working": "O SMTP non funciona como se esperaba, comprobe a configuración establecida.",
"settings:app:smtp:pass:label": "Contrasinal",
"settings:app:smtp:pass:placeholder": "contrasinal-moi-seguro",
"settings:app:smtp:pass:unset": "O contrasinal non está definido.",
"settings:app:smtp:port:label": "Porto",
"settings:app:smtp:port:placeholder": "465",
"settings:app:smtp:port:unset": "O porto non está definido.",
"settings:app:smtp:user:label": "Usuario",
"settings:app:smtp:user:placeholder": "conta@exemplo.gal",
"settings:app:smtp:user:unset": "O usuario non está configurado.",
"settings:app:smtp:working": "SMTP está funcionando e aceptando correos electrónicos.",
"settings:app:switch": "Os conmutadores gárdanse ao cambiar.",
"settings:app:user:limits:description": "Estas son as limitacións solicitadas pola comunidade ao rol de Usuario. Estes límites non afectarán aos roles de administrador e superadministrador. Desactivado por defecto.",
"settings:app:user:limits:max:placeholder": "0",
"settings:app:user:limits:max:rows:label": "Número de filas",
"settings:app:user:limits:max:rpd:description": "A cantidade de solicitudes á API /snapps por día.",
"settings:app:user:limits:max:rpd:label": "Máximo de Solicitudes por Día",
"settings:app:user:limits:max:rpm:description": "A cantidade de solicitudes á API /snapps por minuto.",
"settings:app:user:limits:max:rpm:label": "Máximo de Solicitudes por Minuto",
"settings:app:user:limits:max:urls:description": "O número máximo de URL curtos que pode crear un usuario.",
"settings:app:user:limits:max:urls:label": "Snapp máximos por usuario (predeterminado)",
"settings:app:user:limits:max:urls:unset": "O número máximo de URLs non é un número válido.",
"settings:app:user:limits:max:usages": "Estas son as limitacións solicitadas pola comunidade ao rol de Usuario. Estes límites non afectarán aos roles de administrador e superadministrador. Os límites están desactivados por defecto.",
"settings:app:user:limits:max:usages:placeholder": "Usos máximos",
"settings:app:whitelists:email:add": "Lista Branca de correo electrónico",
"settings:app:whitelists:email:added": "O correo electrónico engadiuse á lista branca.",
"settings:app:whitelists:email:description": "Isto permitirá o rexistro só para os correos electrónicos e os provedores da lista branca. Calquera outro correo electrónico que intente rexistrarse será rechazado.",
"settings:app:whitelists:email:errors:format": "O correo electrónico non é un correo electrónico ou provedor válido (é dicir: @exemplo.gal).",
"settings:app:whitelists:email:errors:missing": "Falta o correo electrónico",
"settings:app:whitelists:email:placeholder": "Escribe aquí o correo electrónico...",
"settings:app:whitelists:email:remove": "Quitar",
"settings:app:whitelists:email:remove:message": "O correo electrónico eliminarase da lista branca.",
"settings:app:whitelists:email:removed": "O correo electrónico foi eliminado da lista branca.",
"settings:app:whitelists:meta:emails:label": "Correos electrónicos permitidos",
"settings:app:wise": "Estas configuracións reflectiranse en toda a plataforma.",
"settings:app:wise:saved": "Preferencias globais actualizadas",
"settings:lang": "Idioma",
"settings:lang:contribute": "Escolla o idioma para a visualización da aplicación. Contribúe ás traducións no noso <a class=\"link\" href={{url}}>repositorio de GitHub</a>.",
"settings:not:found": "Non se atopou a configuración necesaria, comprobe a ortografía e téntao de novo",
"settings:theme:dark": "Modo escuro",
"settings:theme:light": "Modo claro",
"snapp:clipboard:copied": "Copiouse o Snapp no Portapapeis",
"snapp:clipboard:error": "Debes estar nun dominio HTTPS seguro e de confianza para usar o Portapapeis do navegador",
"snapp:disable": "Deshabilitar",
"snapp:has:been:enabled": "Snapp habilitado.",
"snapp:has:been:disabled": "Snapp deshabilitado.",
"snapp:disable:helper:text": "Poñer en pausa este Snapp. Conservaranse os seus datos, o código curto seleccionado e os datos de visualización. O usuario recibirá unha mensaxe de desambiguación explicando que a redirección non está dispoñible temporalmente.",
"snapp:disable:helper:usages": "Ademais, cando se utiliza un snapp o número de veces establecido, desactivarase de forma predeterminada. Pódese activar de novo dende aquí.",
"snapp:is:disabled": "Solicitar Snapps non está dispoñible neste momento. Téntao máis tarde. Se o erro persiste, póñase en contacto co Xestor do Sistema.",
"snapps:usage:by:country": "Público de {{country}}",
"snapps:usage": "Número de visitantes: {{count}}",
"snapps:columns:author": "Autor",
"snapps:columns:created": "Creado",
"snapps:columns:has:secret": "Protexido",
"snapps:columns:max:usages": "Límite",
"snapps:columns:original:url": "Orixe",
"snapps:columns:shortcode": "Código curto",
"snapps:columns:status": "Estado",
"snapps:columns:ttl": "Cad.",
"snapps:columns:used": "Usos",
"snapps:create:one": "Crea un Snapp",
"snapps:created": "O Snapp gardouse correctamente",
"snapps:date:invalid": "O formato da data de caducidade non é válido.",
"snapps:domain:blacklisted": "Hai un problema co dominio do provedor. Se pensas que se trata dun erro, ponte en contacto co Xestor da Aplicación.",
"snapps:has:secret:false": "Desprotexido",
"snapps:has:secret:label": "Protexido por segredo",
"snapps:has:secret:true": "Protexido",
"snapps:limit": "Creaches {{count}} de {{max}} URLs.",
"snapps:max:urls:reached": "Alcanzaches o límite máximo definido para o usuario.",
"snapps:more:copy": "Copiar snapp",
"snapps:more:delete": "Eliminar",
"snapps:more:edit": "Editar",
"snapps:more:qrcode": "Código QR",
"snapps:not:found": "Non había ningún URL curto para esta consulta, téntao de novo. Se o erro persiste, tente contactar co Xestor do Sistema.",
"snapps:notes:label": "Notas",
"snapps:original:url:description": "Escribe aquí o URL orixinal...",
"snapps:original:url:helper": "Esta debe ser unha ligazón <code class=\"code\">https://</code> válida",
"snapps:original:url:invalid": "O URL orixinal do Snapp non é un URL seguro https válido.",
"snapps:original:url:label": "URL orixinal",
"snapps:original:url:unset": "O URL orixinal de Snapp non está definido.",
"snapps:passcode:placeholder": "Escribe aquí o segredo...",
"snapps:protected": "Protexido",
"snapps:protected:helper": "Este snapp está protexido. Introduce as credenciais correctas para continuar.",
"snapps:qrcode:download": "Descargar código QR",
"snapps:reset:sort": "Restablecer filtros",
"snapps:secret:invalid": "Credenciais incorrectas",
"snapps:secret:unset": "O segredo non está establecido",
"snapps:sections:advanced:secret": "Establece un segredo",
"snapps:sections:advanced:secret:description": "Protexa esta ligazón cun código secreto. Requiriráselle aos usuarios para poder continuar co recurso vinculado.",
"snapps:sections:advanced:secret:edit:placeholder": "Editar para modificar o código secreto...",
"snapps:sections:advanced:secret:label": "Segredo",
"snapps:sections:advanced:secret:placeholder": "Escribe aquí o código secreto...",
"snapps:sections:advanced:ttl": "Establece a caducidade",
"snapps:sections:advanced:ttl:description": "Establece unha caducidade para este URL curto. Despois deste tempo, o URL curto será <u class=\"underlined\">eliminado</u>.",
"snapps:sections:advanced:ttl:label": "Seleccione unha data",
"snapps:sections:advanced:ttl:placeholder": "Establece a caducidade",
"snapps:sections:advanced:usages": "Establecer usos máximos",
"snapps:sections:advanced:usages:description": "Establece o Snapp nun máximo de usos antes de que se desactive",
"snapps:select:columns": "Seleccione columnas",
"snapps:selected:remove": "Eliminar o seleccionado",
"snapps:selected:remove:helper": "Estás a piques de eliminar {{ids_count}} snapps, así como os metadatos e métricas relativos. Isto será permanente. Queres continuar?",
"snapps:selected:removed": "Elimináronse os Snapps desexados.",
"snapps:shortcode:description": "Escribe aquí o código curto...",
"snapps:shortcode:helper": "Se se deixa en branco, xerarase automaticamente",
"snapps:shortcode:label": "Código curto",
"snapps:status:active": "Activo",
"snapps:status:blacklisted": "Na lista negra",
"snapps:status:disabled": "Desactivado",
"snapps:status:expired": "Caducado",
"snapps:urls:list": "Lista de URLs",
"snapps:visit": "Visitar Snapp",
"snapps:vt:api:key:malicious": "Este URL foi incluído na lista negra da API de VirusTotal. Se cres que se trata dun erro, póñase en contacto co Administrador do Sistema.",
"snapps:import": "Importar Snapps",
"snapps:import:sqlite:button": "Actualizar a Base de Datos",
"snapps:import:sqlite:modal:label": "Actualizar a Base de Datos",
"snapps:import:sqlite:modal:helper": "Detectouse un ficheiro SQLITE dunha versión anterior. Queres probar a importar o anterior Snapp? Esta operación pode levar moito tempo para bases de datos grandes.",
"snapps:import:helper": "Importar ficheiros CSV desde unha versión anterior de Snapp",
"snapps:import:label": "Carga un ficheiro CSV",
"snapps:import:label:assign": "Asignar snapps a usuarios",
"snapps:import:error": "Produciuse un erro durante a importación. Obtén máis información na consola do navegador.",
"snapps:import:error:extension": "A importación só funciona con ficheiros CSV.",
"snapps:import:successful": "Os snapps gardáronse correctamente na base de datos",
"super:admin:protects": "Non podes editar nin eliminar un SuperAdministrador.",
"users:advanced:settings": "Configuración Avanzada",
"users:advanced:settings:admin:description": "Otorga a este usuario un rol de administrador.",
"users:advanced:settings:admin:label": "Administrador",
"users:advanced:settings:admin:privilege": "Os Administradores non se ven afectados por isto.",
"users:columns:created": "Creado",
"users:columns:email": "Correo-e",
"users:columns:roles": "Roles",
"users:columns:updated": "Actualizado",
"users:columns:urls": "URLs",
"users:columns:username": "Nome de Usuario",
"users:create:one": "Crear usuario",
"users:created": "O usuario foi creado.",
"users:email:helper": "O correo electrónico do usuario novo creado",
"users:email:label": "Correo-e",
"users:email:placeholder": "Escribe aquí o correo electrónico...",
"users:more:delete": "Eliminar usuario",
"users:more:edit": "Editar",
"users:notes:helper": "As notas só son visibles a través da páxina de usuario exclusiva dos Administradores",
"users:notes:label": "Notas",
"users:reset:sort": "Eliminar Filtros",
"users:role:admin": "Administrador",
"users:role:superadmin": "Super Administrador",
"users:role:user": "Usuario",
"users:select:columns": "Seleccione columnas",
"users:selected:remove": "Eliminar usuario",
"users:selected:remove:helper": "Estás a piques de eliminar {{ids_count}} usuarios e o seu contido. Isto é irreversible. Queres continuar?",
"users:selected:removed": "Usuario eliminado correctamente",
"users:updated": "Actualizouse o usuario.",
"users:username:helper": "O nome de usuario do usuario novo creado",
"users:username:label": "Nome de usuario",
"users:username:placeholder": "Escribe aquí o nome de usuario...",
"users:invite:resent": "A invitación volveuse a enviar correctamente",
"home:intro": "Buscas unha solución de acurtamento de URL fiable e autoaloxable? Non busques máis! {{appname}} é a ferramenta perfecta para persoas e empresas que buscan controlar a súa xestión de URL.",
"home:features:label": "As Nosas Características",
"home:features:ui:label": "Interfaz amigable",
"home:features:ui:description": "Snapp ofrece unha interface fácil de usar para acurtar enlaces sen problemas. Lea como comezar!",
"home:features:auth:label": "Autenticación Segura",
"home:features:auth:description": "Goza dunha experiencia segura con sesións de autenticación e contrasinais codificados. A túa información está en boas mans.",
"home:features:shortcode:label": "Códigos Curtos Personalizados",
"home:features:shortcode:description": "Crea códigos curtos personalizados para as túas ligazóns para que sexan memorizables e fáciles de compartir.",
"home:features:ttl:label": "Caducidade",
"home:features:ttl:description": "Controla a vida útil das túas ligazóns coas datas de caducidade. Establece datas de caducidade para aumentar a seguridade ou déixaas activas de forma indefinida.",
"home:features:secret:label": "Ligazóns secretas",
"home:features:secret:description": "Engade unha capa adicional de protección con ligazóns secretas. Escolle compartir ligazóns cunha audiencia seleccionada mediante segredos únicos.",
"home:features:metrics:label": "Analíticas de Uso",
"home:features:metrics:description": "Proporciona analíticas detalladas para cada ligazón que crees. Snapp reúne métricas de forma anónima, proporcionando información sobre as relacións coas ligazóns.",
"home:features:integration:label": "Métricas Avanzadas",
"home:features:integration:description": "Integre a súa instancia de Snapp coa súa instancia autoaloxada ou na nube de <a class=\"link\" href=\"https://umami.is\" target=\"_blank\">Umami Analytics</a> para obter métricas avanzadas dos teus Snapps.",
"home:features:vt:label": "Comproba a reputación dos URL",
"home:features:vt:description": "Protexe as ligazóns que pasan pola túa instancia de Snapp comprobando a súa reputación na <a class=\"link\" href=\"https://virustotal.com\" target=\"_blank\">API de VirusTotal</a>.",
"home:features:rest:label": "REST API",
"home:features:rest:description": "Funcións solicitadas pola comunidade que permiten a API Rest endpoint crear e xestionar os teus Snapps de forma remota. Lea os <a class=\"link\" href=\"/dashboard/docs\">Swagger Docs</a> completos aquí.",
"home:getting:started:label": "Primerios pasos",
"home:getting:started:description": "Snapp é unha plataforma de código aberto autoaloxable",
"home:manual:install": "Instalación manual",
"home:manual:install:steps": "Para executar Snapp, necesitas un entorno con NodeJS instalado e dispoñible",
"home:manual:install:redis": "Snapp precisa agora unha base de datos de Redis en execución. Podes usar de forma sinxela o compose proporcionado para executar a instancia de Redis con persistencia.",
"home:manual:install:clone:0": "Clonar o repositorio git",
"home:manual:install:clone:1": "<code class=\"code\">git clone https://github.com/urania-dev/snapp.git</code>",
"home:manual:install:download:0": "Instalar dependencias",
"home:manual:install:download:1": "<code class=\"code\">npm install</code>",
"home:manual:install:env:0": "Copia e edita o ficheiro <code class=\"code\">.env.example</code>",
"home:manual:install:env:1": "<code class=\"code\">cp .env.example .env && nano .env</code>",
"home:manual:install:dev:0": "Desenvolve e estende Snapp no teu servidor <div class=\"badge variant-ghost italic text-xs \">opcional</div>",
"home:manual:install:dev:1": "<code class=\"code\">npm run dev</code>",
"home:manual:install:build:0": "Crea a aplicación",
"home:manual:install:build:1": "<code class=\"code\">npm run build</code>",
"home:manual:install:run:0": "Executa e disfruta!",
"home:manual:install:run:1": "<code class=\"code\">node -r dotenv/config build</code>",
"home:docker": "Usando Docker Container",
"home:docker:description": "Use este docker-compose.yml para executar o seu Snapp",
"home:docker:better": "Podes atopar un mellor docker compose no noso <a class=\"link\" href=\"{{url}}\">Repositorio Github</a>.",
"home:migration": "Migración",
"home:migration:description": "As versións máis recentes de Snapp incluían Exportación a CSV para facilitar a migración. Simplemente inicia sesión e importa os teus URLs dende o panel de control, e continúa onde o deixaches.",
"home:stack:label": "The Stack",
"home:stack:description": "A tecnoloxía implicada",
"snapp:update:db": "<div class='flex flex-col'><h3 class='font-semibold'>Snapp cambiou</h3><small>Actualiza a túa base de datos para importar o teu Snapp desde a versión anterior.</div>"
}

View File

@@ -19,7 +19,7 @@
"apikey:token": "Token",
"apikey:token:generated": "Il token è stato generato",
"apikey:token:revoked": "Il token è stato revocato.",
"auth:email": "Email",
"auth:email:exists": "Questa email è già collegata a un account, prova a reimpostare la tua password.",
"auth:email:invalid": "Fornisci un indirizzo email valido, per favore.",
@@ -172,6 +172,9 @@
"settings:api:key:vt:placeholder": "Digita la tua chiave API VT qui...",
"settings:api:key:vt:protected": "API Virus Total protetta",
"settings:app:allow:unsecure:http": "Permetti HTTP non sicuri",
"settings:app:allow:unsecure:http:description": "Permetti l'uso di url <b class='text-error-500'>HTTP privi di sicurezza</b> nella creazione di snapps.",
"settings:app:blacklists:description": "Le blacklist influenzeranno la registrazione e l'aggiornamento dei dettagli dell'utente, mentre il blocco dei domini causerà un errore nella creazione di un URL abbreviato.",
"settings:app:blacklists:description:error": "Gli utenti bannati riceveranno un errore generico di sistema durante la registrazione.",
"settings:app:blacklists:domain:add": "Banna dominio",